diff --git a/addons/account/account.py b/addons/account/account.py index a68c1de0939..33b52b643ed 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -719,7 +719,7 @@ class account_journal(osv.osv): 'user_id': fields.many2one('res.users', 'User', help="The user responsible for this journal"), 'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'), 'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'), - 'entry_posted': fields.boolean('Skip \'Draft\' State for Manual Entries', help='Check this box if you don\'t want new journal entries to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation. \nNote that journal entries that are automatically created by the system are always skipping that state.'), + 'entry_posted': fields.boolean('Autopost Created Moves', help='Check this box to automatically post entries of this journal. Note that legally, some entries may be automatically posted when the source document is validated (Invoices), whatever the status of this field.'), 'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"), 'allow_date':fields.boolean('Check Date in Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'), diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 0fb6af05e58..87e6a66740c 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -221,8 +221,8 @@ class account_invoice(osv.osv): 'type': { }, 'state': { - 'account.mt_invoice_paid': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'paid' and obj['type'] in ('out_invoice', 'out_refund'), - 'account.mt_invoice_validated': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open' and obj['type'] in ('out_invoice', 'out_refund'), + 'account.mt_invoice_paid': lambda self, cr, uid, obj, ctx=None: obj.state == 'paid' and obj.type in ('out_invoice', 'out_refund'), + 'account.mt_invoice_validated': lambda self, cr, uid, obj, ctx=None: obj.state == 'open' and obj.type in ('out_invoice', 'out_refund'), }, } _columns = { diff --git a/addons/account/i18n/is.po b/addons/account/i18n/is.po new file mode 100644 index 00000000000..850ced594cc --- /dev/null +++ b/addons/account/i18n/is.po @@ -0,0 +1,10849 @@ +# Icelandic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-07-10 11:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Icelandic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-11 05:17+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: account +#: model:process.transition,name:account.process_transition_supplierreconcilepaid0 +msgid "System payment" +msgstr "" + +#. module: account +#: sql_constraint:account.fiscal.position.account:0 +msgid "" +"An account fiscal position could be defined only once time on same accounts." +msgstr "" + +#. module: account +#: help:account.tax.code,sequence:0 +msgid "" +"Determine the display order in the report 'Accounting \\ Reporting \\ " +"Generic Reporting \\ Taxes \\ Taxes Report'" +msgstr "" + +#. module: account +#: view:account.move.reconcile:0 +msgid "Journal Entry Reconcile" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.bank.statement:0 +#: view:account.move.line:0 +msgid "Account Statistics" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma/Open/Paid Invoices" +msgstr "" + +#. module: account +#: field:report.invoice.created,residual:0 +msgid "Residual" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:369 +#, python-format +msgid "Journal item \"%s\" is not valid." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_aged_receivable +msgid "Aged Receivable Till Today" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_invoiceimport0 +msgid "Import from invoice or payment" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 +#: code:addons/account/account_move_line.py:1210 +#, python-format +msgid "Bad Account!" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Total Debit" +msgstr "" + +#. module: account +#: constraint:account.account.template:0 +msgid "" +"Error!\n" +"You cannot create recursive account templates." +msgstr "" + +#. module: account +#. openerp-web +#: view:account.automatic.reconcile:0 +#: field:account.move.line,reconcile_id:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.writeoff:0 +#: code:addons/account/static/src/xml/account_move_reconciliation.xml:30 +#, python-format +msgid "Reconcile" +msgstr "" + +#. module: account +#: field:account.bank.statement,name:0 +#: field:account.bank.statement.line,ref:0 +#: field:account.entries.report,ref:0 +#: field:account.move,ref:0 +#: field:account.move.line,ref:0 +#: field:account.subscription,ref:0 +#: xsl:account.transfer:0 +#: field:cash.box.in,ref:0 +msgid "Reference" +msgstr "Tilvísun" + +#. module: account +#: help:account.payment.term,active:0 +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/account.py:641 +#: code:addons/account/account.py:686 +#: code:addons/account/account.py:781 +#: code:addons/account/account.py:1058 +#: code:addons/account/account_invoice.py:820 +#: code:addons/account/account_invoice.py:823 +#: code:addons/account/account_invoice.py:826 +#: code:addons/account/account_invoice.py:1545 +#: code:addons/account/account_move_line.py:98 +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 +#: code:addons/account/account_move_line.py:864 +#: code:addons/account/wizard/account_fiscalyear_close.py:62 +#: code:addons/account/wizard/account_invoice_state.py:44 +#: code:addons/account/wizard/account_invoice_state.py:68 +#: code:addons/account/wizard/account_state_open.py:37 +#: code:addons/account/wizard/account_validate_account_move.py:39 +#: code:addons/account/wizard/account_validate_account_move.py:61 +#, python-format +msgid "Warning!" +msgstr "Aðvörun!" + +#. module: account +#: code:addons/account/account.py:3197 +#, python-format +msgid "Miscellaneous Journal" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#, python-format +msgid "" +"You have to set the 'End of Year Entries Journal' for this Fiscal Year " +"which is set after generating opening entries from 'Generate Opening " +"Entries'." +msgstr "" + +#. module: account +#: field:account.fiscal.position.account,account_src_id:0 +#: field:account.fiscal.position.account.template,account_src_id:0 +msgid "Account Source" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period +msgid "" +"

\n" +" Click to add a fiscal period.\n" +"

\n" +" An accounting period typically is a month or a quarter. It\n" +" usually corresponds to the periods of the tax declaration.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard +msgid "Invoices Created Within Past 15 Days" +msgstr "" + +#. module: account +#: field:accounting.report,label_filter:0 +msgid "Column Label" +msgstr "" + +#. module: account +#: help:account.config.settings,code_digits:0 +msgid "No. of digits to use for account code" +msgstr "" + +#. module: account +#: help:account.analytic.journal,type:0 +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 "" + +#. module: account +#: help:account.tax,account_analytic_collected_id:0 +msgid "" +"Set the analytic account that will be used by default on the invoice tax " +"lines for invoices. Leave empty if you don't want to use an analytic account " +"on the invoice tax lines by default." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_template_form +#: model:ir.ui.menu,name:account.menu_action_account_tax_template_form +msgid "Tax Templates" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile_select +msgid "Move line reconcile select" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_supplierentriesreconcile0 +msgid "Accounting entries are an input of the reconciliation." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_management_belgian_reports +msgid "Belgian Reports" +msgstr "" + +#. module: account +#: model:mail.message.subtype,name:account.mt_invoice_validated +msgid "Validated" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_income_view1 +msgid "Income View" +msgstr "" + +#. module: account +#: help:account.account,user_type:0 +msgid "" +"Account Type is used for information purpose, to generate country-specific " +"legal reports, and set the rules to close a fiscal year and generate opening " +"entries." +msgstr "" + +#. module: account +#: field:account.config.settings,sale_refund_sequence_next:0 +msgid "Next credit note number" +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_voucher:0 +msgid "" +"This includes all the basic requirements of voucher entries for bank, cash, " +"sales, purchase, expense, contra, etc.\n" +" This installs the module account_voucher." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry +msgid "Manual Recurring" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,allow_write_off:0 +msgid "Allow write off" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +msgid "Select the Period for Analysis" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree3 +msgid "" +"

\n" +" Click to create a customer refund. \n" +"

\n" +" A refund is a document that credits an invoice completely " +"or\n" +" partially.\n" +"

\n" +" Instead of manually creating a customer refund, you\n" +" can generate it directly from the related customer invoice.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: help:account.installer,charts:0 +msgid "" +"Installs localized accounting charts to match as closely as possible the " +"accounting needs of your company based on your country." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_unreconcile +msgid "Account Unreconcile" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_budget:0 +msgid "Budget management" +msgstr "" + +#. module: account +#: view:product.template:0 +msgid "Purchase Properties" +msgstr "" + +#. module: account +#: help:account.financial.report,style_overwrite:0 +msgid "" +"You can set up here the format you want this record to be displayed. If you " +"leave the automatic formatting, it will be computed based on the financial " +"reports hierarchy (auto-computed field 'level')." +msgstr "" + +#. module: account +#: field:account.config.settings,group_multi_currency:0 +msgid "Allow multi currencies" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:77 +#, python-format +msgid "You must define an analytic journal of type '%s'!" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "June" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_automatic_reconcile.py:148 +#, python-format +msgid "You must select accounts to reconcile." +msgstr "" + +#. module: account +#: help:account.config.settings,group_analytic_accounting:0 +msgid "Allows you to use the analytic accounting." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,user_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,user_id:0 +msgid "Salesperson" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.invoice:0 +msgid "Responsible" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_bank_accounts_wizard +msgid "account.bank.accounts.wizard" +msgstr "" + +#. module: account +#: field:account.move.line,date_created:0 +#: field:account.move.reconcile,create_date:0 +msgid "Creation date" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Purchase Refund" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Opening/Closing Situation" +msgstr "" + +#. module: account +#: help:account.journal,currency:0 +msgid "The currency used to enter statement" +msgstr "" + +#. module: account +#: field:account.journal,default_debit_account_id:0 +msgid "Default Debit Account" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Total Credit" +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_asset:0 +msgid "" +"This allows you to manage the assets owned by a company or a person.\n" +" It keeps track of the depreciation occurred on those assets, " +"and creates account move for those depreciation lines.\n" +" This installs the module account_asset. If you do not check " +"this box, you will be able to do invoicing & payments,\n" +" but not accounting (Journal Items, Chart of Accounts, ...)" +msgstr "" + +#. module: account +#: help:account.bank.statement.line,name:0 +msgid "Originator to Beneficiary Information" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_line_quickadd.xml:8 +#, python-format +msgid "Period :" +msgstr "" + +#. module: account +#: field:account.account.template,chart_template_id:0 +#: field:account.fiscal.position.template,chart_template_id:0 +#: field:account.tax.template,chart_template_id:0 +#: field:wizard.multi.charts.accounts,chart_template_id:0 +msgid "Chart Template" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Modify: create refund, reconcile and create a new draft invoice" +msgstr "" + +#. module: account +#: help:account.config.settings,tax_calculation_rounding_method:0 +msgid "" +"If you select 'Round per line' : for each tax, the tax amount will first be " +"computed and rounded for each PO/SO/invoice line and then these rounded " +"amounts will be summed, leading to the total amount for that tax. If you " +"select 'Round globally': for each tax, the tax amount will be computed for " +"each PO/SO/invoice line, then these amounts will be summed and eventually " +"this total tax amount will be rounded. If you sell with tax included, you " +"should choose 'Round per line' because you certainly want the sum of your " +"tax-included line subtotals to be equal to the total amount with taxes." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_wizard_multi_charts_accounts +msgid "wizard.multi.charts.accounts" +msgstr "" + +#. module: account +#: help:account.model.line,amount_currency:0 +msgid "The amount expressed in an optional other currency." +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Available Coins" +msgstr "" + +#. module: account +#: field:accounting.report,enable_filter:0 +msgid "Enable Comparison" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.automatic.reconcile,journal_id:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,journal_id:0 +#: field:account.bank.statement.line,journal_id:0 +#: report:account.central.journal:0 +#: view:account.entries.report:0 +#: field:account.entries.report,journal_id:0 +#: view:account.invoice:0 +#: field:account.invoice,journal_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,journal_id:0 +#: view:account.journal:0 +#: field:account.journal.cashbox.line,journal_id:0 +#: field:account.journal.period,journal_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.model:0 +#: field:account.model,journal_id:0 +#: view:account.move:0 +#: field:account.move,journal_id:0 +#: field:account.move.bank.reconcile,journal_id:0 +#: view:account.move.line:0 +#: field:account.move.line,journal_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,journal_id:0 +#: model:ir.actions.report.xml,name:account.account_journal +#: model:ir.model,name:account.model_account_journal +#: field:validate.account.move,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_confirm +msgid "Confirm the selected invoices" +msgstr "" + +#. module: account +#: field:account.addtmpl.wizard,cparent_id:0 +msgid "Parent target" +msgstr "" + +#. module: account +#: help:account.invoice.line,sequence:0 +msgid "Gives the sequence of this line when displaying the invoice." +msgstr "" + +#. module: account +#: field:account.bank.statement,account_id:0 +msgid "Account used in this journal" +msgstr "" + +#. module: account +#: help:account.aged.trial.balance,chart_account_id:0 +#: help:account.balance.report,chart_account_id:0 +#: help:account.central.journal,chart_account_id:0 +#: help:account.common.account.report,chart_account_id:0 +#: help:account.common.journal.report,chart_account_id:0 +#: help:account.common.partner.report,chart_account_id:0 +#: help:account.common.report,chart_account_id:0 +#: help:account.general.journal,chart_account_id:0 +#: help:account.partner.balance,chart_account_id:0 +#: help:account.partner.ledger,chart_account_id:0 +#: help:account.print.journal,chart_account_id:0 +#: help:account.report.general.ledger,chart_account_id:0 +#: help:account.vat.declaration,chart_account_id:0 +#: help:accounting.report,chart_account_id:0 +msgid "Select Charts of Accounts" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_refund +msgid "Invoice Refund" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Li." +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,unreconciled:0 +msgid "Not reconciled transactions" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +msgid "Counterpart" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,tax_ids:0 +#: field:account.fiscal.position.template,tax_ids:0 +msgid "Tax Mapping" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear_close_state +#: model:ir.ui.menu,name:account.menu_wizard_fy_close_state +msgid "Close a Fiscal Year" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0 +msgid "The accountant confirms the statement." +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_reconciliation.xml:31 +#, python-format +msgid "Nothing to reconcile" +msgstr "" + +#. module: account +#: field:account.config.settings,decimal_precision:0 +msgid "Decimal precision on journal entries" +msgstr "" + +#. module: account +#: selection:account.config.settings,period:0 +#: selection:account.installer,period:0 +msgid "3 Monthly" +msgstr "" + +#. module: account +#: field:ir.sequence,fiscal_ids:0 +msgid "Sequences" +msgstr "" + +#. module: account +#: field:account.financial.report,account_report_id:0 +#: selection:account.financial.report,type:0 +msgid "Report Value" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_validate_account_move.py:39 +#, python-format +msgid "" +"Specified journal does not have any account move entries in draft state for " +"this period." +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: view:account.fiscal.position.template:0 +msgid "Taxes Mapping" +msgstr "" + +#. module: account +#: report:account.central.journal:0 +msgid "Centralized Journal" +msgstr "" + +#. module: account +#: sql_constraint:account.sequence.fiscalyear:0 +msgid "Main Sequence must be different from current !" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:64 +#: code:addons/account/wizard/account_change_currency.py:70 +#, python-format +msgid "Current currency is not configured properly." +msgstr "" + +#. module: account +#: field:account.journal,profit_account_id:0 +msgid "Profit Account" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1156 +#, python-format +msgid "No period found or more than one period found for the given date." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_type_sales +msgid "Report of the Sales by Account Type" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3201 +#, python-format +msgid "SAJ" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1591 +#, python-format +msgid "Cannot create move with currency different from .." +msgstr "" + +#. module: account +#: model:email.template,report_name:account.email_template_edi_invoice +msgid "" +"Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' " +"and 'draft' or ''}" +msgstr "" + +#. module: account +#: view:account.period:0 +#: view:account.period.close:0 +msgid "Close Period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_partner_report +msgid "Account Common Partner Report" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,period_id:0 +msgid "Opening Entries Period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_journal_period +msgid "Journal Period" +msgstr "" + +#. module: account +#: constraint:account.move:0 +msgid "" +"You cannot create more than one move per period on a centralized journal." +msgstr "" + +#. module: account +#: help:account.tax,account_analytic_paid_id:0 +msgid "" +"Set the analytic account that will be used by default on the invoice tax " +"lines for refunds. Leave empty if you don't want to use an analytic account " +"on the invoice tax lines by default." +msgstr "" + +#. module: account +#: view:account.account:0 +#: selection:account.aged.trial.balance,result_selection:0 +#: selection:account.common.partner.report,result_selection:0 +#: selection:account.partner.balance,result_selection:0 +#: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: code:addons/account/report/account_partner_balance.py:297 +#: code:addons/account/report/account_partner_ledger.py:272 +#, python-format +msgid "Receivable Accounts" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Configure your company bank accounts" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "Create Refund" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"The date of your Journal Entry is not in the defined period! You should " +"change the date or remove this constraint from the journal." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_report_general_ledger +msgid "General Ledger Report" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Re-Open" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Are you sure you want to create entries?" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1361 +#, python-format +msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Print Invoice" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:111 +#, python-format +msgid "" +"Cannot %s invoice which is already reconciled, invoice should be " +"unreconciled first. You can only refund this invoice." +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "Display children with hierarchy" +msgstr "" + +#. module: account +#: selection:account.payment.term.line,value:0 +#: selection:account.tax.template,type:0 +msgid "Percent" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_charts +msgid "Charts" +msgstr "" + +#. module: account +#: code:addons/account/project/wizard/project_account_analytic_line.py:47 +#: model:ir.model,name:account.model_project_account_analytic_line +#, python-format +msgid "Analytic Entries by line" +msgstr "" + +#. module: account +#: field:account.invoice.refund,filter_refund:0 +msgid "Refund Method" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_report +msgid "Financial Report" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: view:account.analytic.journal:0 +#: field:account.analytic.journal,type:0 +#: field:account.bank.statement.line,type:0 +#: field:account.financial.report,type:0 +#: field:account.invoice,type:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,type:0 +#: view:account.journal:0 +#: field:account.journal,type:0 +#: field:account.move.reconcile,type:0 +#: xsl:account.transfer:0 +#: field:report.invoice.created,type:0 +msgid "Type" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:826 +#, python-format +msgid "" +"Taxes are missing!\n" +"Click on compute button." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_subscription_line +msgid "Account Subscription Line" +msgstr "" + +#. module: account +#: help:account.invoice,reference:0 +msgid "The partner reference of this invoice." +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Supplier Invoices And Refunds" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:851 +#, python-format +msgid "Entry is already reconciled." +msgstr "" + +#. module: account +#: view:account.move.line.unreconcile.select:0 +#: view:account.unreconcile.reconcile:0 +#: model:ir.model,name:account.model_account_move_line_unreconcile_select +msgid "Unreconciliation" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_journal_report +msgid "Account Analytic Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Send by Email" +msgstr "" + +#. module: account +#: help:account.central.journal,amount_currency:0 +#: help:account.common.journal.report,amount_currency:0 +#: help:account.general.journal,amount_currency:0 +#: help:account.print.journal,amount_currency:0 +msgid "" +"Print Report with the currency column if the currency differs from the " +"company currency." +msgstr "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "J.C./Move name" +msgstr "" + +#. module: account +#: view:account.account:0 +msgid "Account Code and Name" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "September" +msgstr "" + +#. module: account +#: selection:account.subscription,period_type:0 +msgid "days" +msgstr "" + +#. module: account +#: help:account.account.template,nocreate:0 +msgid "" +"If checked, the new chart of accounts will not contain this by default." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_manual_reconcile +msgid "" +"

\n" +" No journal items found.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: code:addons/account/account.py:1677 +#, python-format +msgid "" +"You cannot unreconcile journal items if they has been generated by the " +" opening/closing fiscal " +"year process." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form_new +msgid "New Subscription" +msgstr "" + +#. module: account +#: view:account.payment.term:0 +#: field:account.payment.term.line,value:0 +msgid "Computation" +msgstr "" + +#. module: account +#: field:account.journal.cashbox.line,pieces:0 +msgid "Values" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_chart +#: model:ir.actions.act_window,name:account.action_tax_code_tree +#: model:ir.ui.menu,name:account.menu_action_tax_code_tree +msgid "Chart of Taxes" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Create 3 Months Periods" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Due" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_journal_id:0 +msgid "Purchase journal" +msgstr "" + +#. module: account +#: model:mail.message.subtype,description:account.mt_invoice_paid +msgid "Invoice paid" +msgstr "" + +#. module: account +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "Approve" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.move:0 +#: view:report.invoice.created:0 +msgid "Total Amount" +msgstr "" + +#. module: account +#: help:account.invoice,supplier_invoice_number:0 +msgid "The reference of this invoice as provided by the supplier." +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +msgid "Consolidation" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_liability +#: model:account.financial.report,name:account.account_financial_report_liability0 +#: model:account.financial.report,name:account.account_financial_report_liabilitysum0 +msgid "Liability" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:899 +#, python-format +msgid "Please define sequence on the journal related to this invoice." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_central_journal +msgid "Centralizing Journal" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Sale Refund" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_accountingstatemententries0 +msgid "Bank statement" +msgstr "" + +#. module: account +#: field:account.analytic.line,move_id:0 +msgid "Move Line" +msgstr "" + +#. module: account +#: help:account.move.line,tax_amount:0 +msgid "" +"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)." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Purchases" +msgstr "" + +#. module: account +#: field:account.model,lines_id:0 +msgid "Model Entries" +msgstr "" + +#. module: account +#: field:account.account,code:0 +#: report:account.account.balance:0 +#: field:account.account.template,code:0 +#: field:account.account.type,code:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.journal:0 +#: field:account.analytic.line,code:0 +#: field:account.fiscalyear,code:0 +#: report:account.general.journal:0 +#: field:account.journal,code:0 +#: report:account.partner.balance:0 +#: field:account.period,code:0 +msgid "Code" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Features" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2346 +#: code:addons/account/account_bank_statement.py:424 +#: code:addons/account/account_invoice.py:77 +#: code:addons/account/account_invoice.py:775 +#: code:addons/account/account_move_line.py:195 +#, python-format +msgid "No Analytic Journal !" +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +#: model:ir.actions.act_window,name:account.action_account_partner_balance +#: model:ir.actions.report.xml,name:account.account_3rdparty_account_balance +#: model:ir.ui.menu,name:account.menu_account_partner_balance_report +msgid "Partner Balance" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_gain_loss +msgid "" +"

\n" +" Click to add an account.\n" +"

\n" +" When doing multi-currency transactions, you may loose or " +"gain\n" +" some amount due to changes of exchange rate. This menu " +"gives\n" +" you a forecast of the Gain or Loss you'd realized if those\n" +" transactions were ended today. Only for accounts having a\n" +" secondary currency set.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,acc_name:0 +msgid "Account Name." +msgstr "" + +#. module: account +#: field:account.journal,with_last_closing_balance:0 +msgid "Opening With Last Closing Balance" +msgstr "" + +#. module: account +#: help:account.tax.code,notprintable:0 +msgid "" +"Check this box if you don't want any tax related to this tax code to appear " +"on invoices" +msgstr "" + +#. module: account +#: field:report.account.receivable,name:0 +msgid "Week of Year" +msgstr "" + +#. module: account +#: field:account.report.general.ledger,landscape:0 +msgid "Landscape Mode" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,fy_id:0 +msgid "Select a Fiscal year to close" +msgstr "" + +#. module: account +#: help:account.account.template,user_type:0 +msgid "" +"These types are defined according to your country. The type contains more " +"information about the account and its specificities." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Refund " +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:90 +#, python-format +msgid "There is no expense account defined for this product: \"%s\" (id:%d)." +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Applicability Options" +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +msgid "In dispute" +msgstr "" + +#. module: account +#: view:account.journal:0 +#: 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 "" + +#. module: account +#: field:account.config.settings,sale_refund_journal_id:0 +msgid "Sale refund journal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_view_bank_statement_tree +msgid "" +"

\n" +" Click to create a new cash log.\n" +"

\n" +" A Cash Register allows you to manage cash entries in your " +"cash\n" +" journals. This feature provides an easy way to follow up " +"cash\n" +" payments on a daily basis. You can enter the coins that are " +"in\n" +" your cash box, and then post entries when money comes in or\n" +" goes out of the cash box.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_bank +#: selection:account.bank.accounts.wizard,account_type:0 +#: code:addons/account/account.py:3092 +#, python-format +msgid "Bank" +msgstr "" + +#. module: account +#: field:account.period,date_start:0 +msgid "Start of Period" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Refunds" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 +msgid "Confirm statement" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Account Tax" +msgstr "" + +#. module: account +#: help:account.account,foreign_balance:0 +msgid "" +"Total amount (in Secondary currency) for transactions held in secondary " +"currency for this account." +msgstr "" + +#. module: account +#: field:account.fiscal.position.tax,tax_dest_id:0 +#: field:account.fiscal.position.tax.template,tax_dest_id:0 +msgid "Replacement Tax" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Credit Centralisation" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tax_code_template_form +#: model:ir.ui.menu,name:account.menu_action_account_tax_code_template_form +msgid "Tax Code Templates" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"The amount expressed in the secondary currency must be positif when journal " +"item are debit and negatif when journal item are credit." +msgstr "" + +#. module: account +#: view:account.invoice.cancel:0 +msgid "Cancel Invoices" +msgstr "" + +#. module: account +#: help:account.journal,code:0 +msgid "The code will be displayed on reports." +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Taxes used in Purchases" +msgstr "" + +#. module: account +#: field:account.invoice.tax,tax_code_id:0 +#: field:account.tax,description:0 +#: view:account.tax.code:0 +#: field:account.tax.template,tax_code_id:0 +#: model:ir.model,name:account.model_account_tax_code +msgid "Tax Code" +msgstr "" + +#. module: account +#: field:account.account,currency_mode:0 +msgid "Outgoing Currencies Rate" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: field:account.config.settings,chart_template_id:0 +msgid "Template" +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +msgid "Situation" +msgstr "" + +#. module: account +#: help:account.move.line,move_id:0 +msgid "The move of this entry line." +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,trans_nbr:0 +msgid "# of Transaction" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Entry Label" +msgstr "" + +#. module: account +#: help:account.invoice,origin:0 +#: help:account.invoice.line,origin:0 +msgid "Reference of the document that produced this invoice." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: view:account.journal:0 +msgid "Others" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Draft Subscription" +msgstr "" + +#. module: account +#: view:account.account:0 +#: report:account.account.balance:0 +#: field:account.automatic.reconcile,writeoff_acc_id:0 +#: field:account.bank.statement.line,account_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,account_id:0 +#: field:account.invoice,account_id:0 +#: field:account.invoice.line,account_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,account_id:0 +#: field:account.journal,account_control_ids:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,account_id:0 +#: view:account.move.line:0 +#: field:account.move.line,account_id:0 +#: field:account.move.line.reconcile.select,account_id:0 +#: field:account.move.line.unreconcile.select,account_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,account_id:0 +#: model:ir.model,name:account.model_account_account +#: field:report.account.sales,account_id:0 +msgid "Account" +msgstr "" + +#. module: account +#: field:account.tax,include_base_amount:0 +msgid "Included in base amount" +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 "" + +#. module: account +#: field:account.account,level:0 +#: field:account.financial.report,level:0 +msgid "Level" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:38 +#, python-format +msgid "You can only change currency for Draft Invoice." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: field:account.invoice.line,invoice_line_tax_id:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: model:ir.actions.act_window,name:account.action_tax_form +#: model:ir.ui.menu,name:account.account_template_taxes +#: model:ir.ui.menu,name:account.menu_action_tax_form +#: model:ir.ui.menu,name:account.menu_tax_report +#: model:ir.ui.menu,name:account.next_id_27 +msgid "Taxes" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_financial_report.py:70 +#, python-format +msgid "Select a starting and an ending period" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_profitandloss0 +#: model:ir.actions.act_window,name:account.action_account_report_pl +msgid "Profit and Loss" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_account_template +msgid "Templates for Accounts" +msgstr "" + +#. module: account +#: view:account.tax.code.template:0 +msgid "Search tax template" +msgstr "" + +#. module: account +#: view:account.move.reconcile:0 +#: model:ir.actions.act_window,name:account.action_account_reconcile_select +#: model:ir.actions.act_window,name:account.action_view_account_move_line_reconcile +msgid "Reconcile Entries" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_overdue +#: view:res.company:0 +msgid "Overdue Payments" +msgstr "" + +#. module: account +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Initial Balance" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Reset to Draft" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.common.report:0 +msgid "Report Options" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close.state,fy_id:0 +msgid "Fiscal Year to Close" +msgstr "" + +#. module: account +#: field:account.config.settings,sale_sequence_prefix:0 +msgid "Invoice sequence" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_entries_report +msgid "Journal Items Analysis" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.next_id_22 +msgid "Partners" +msgstr "" + +#. module: account +#: help:account.bank.statement,state:0 +msgid "" +"When new statement is created the status will be 'Draft'.\n" +"And after getting confirmation from the bank it will be in 'Confirmed' " +"status." +msgstr "" + +#. module: account +#: field:account.invoice.report,state:0 +msgid "Invoice Status" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: model:ir.model,name:account.model_account_bank_statement +#: model:process.node,name:account.process_node_accountingstatemententries0 +#: model:process.node,name:account.process_node_bankstatement0 +#: model:process.node,name:account.process_node_supplierbankstatement0 +msgid "Bank Statement" +msgstr "" + +#. module: account +#: field:res.partner,property_account_receivable:0 +msgid "Account Receivable" +msgstr "" + +#. module: account +#: code:addons/account/account.py:612 +#: code:addons/account/account.py:767 +#: code:addons/account/account.py:768 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 +#: selection:account.partner.balance,display_partner:0 +#: selection:account.report.general.ledger,display_account:0 +msgid "With balance is not equal to 0" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1483 +#, python-format +msgid "" +"There is no default debit account defined \n" +"on journal \"%s\"." +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Search Taxes" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_cost_ledger +msgid "Account Analytic Cost Ledger" +msgstr "" + +#. module: account +#: view:account.model:0 +msgid "Create entries" +msgstr "" + +#. module: account +#: field:account.entries.report,nbr:0 +msgid "# of Items" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,max_amount:0 +msgid "Maximum write-off amount" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_reconciliation.xml:10 +#, python-format +msgid "" +"There is nothing to reconcile. All invoices and payments\n" +" have been reconciled, your partner balance is clean." +msgstr "" + +#. module: account +#: field:account.chart.template,code_digits:0 +#: field:account.config.settings,code_digits:0 +#: field:wizard.multi.charts.accounts,code_digits:0 +msgid "# of Digits" +msgstr "" + +#. module: account +#: field:account.journal,entry_posted:0 +msgid "Skip 'Draft' State for Manual Entries" +msgstr "" + +#. module: account +#: code:addons/account/report/common_report_header.py:92 +#: code:addons/account/wizard/account_report_common.py:164 +#, python-format +msgid "Not implemented." +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "Credit Note" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "eInvoicing & Payments" +msgstr "" + +#. module: account +#: view:account.analytic.cost.ledger.journal.report:0 +msgid "Cost Ledger for Period" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "# of Entries " +msgstr "" + +#. module: account +#: help:account.fiscal.position,active:0 +msgid "" +"By unchecking the active field, you may hide a fiscal position without " +"deleting it." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_temp_range +msgid "A Temporary table used for Dashboard view" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree4 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree4 +msgid "Supplier Refunds" +msgstr "" + +#. module: account +#: field:account.tax.code,code:0 +#: field:account.tax.code.template,code:0 +msgid "Case Code" +msgstr "" + +#. module: account +#: field:account.config.settings,company_footer:0 +msgid "Bank accounts footer preview" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.bank.statement,state:0 +#: selection:account.entries.report,type:0 +#: view:account.fiscalyear:0 +#: selection:account.fiscalyear,state:0 +#: selection:account.period,state:0 +msgid "Closed" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries +msgid "Recurring Entries" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_template +msgid "Template for Fiscal Position" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Recurring" +msgstr "" + +#. module: account +#: field:account.journal,groups_id:0 +msgid "Groups" +msgstr "" + +#. module: account +#: field:report.invoice.created,amount_untaxed:0 +msgid "Untaxed" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Advanced Settings" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Search Bank Statements" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unposted Journal Items" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,property_account_payable:0 +msgid "Payable Account" +msgstr "" + +#. module: account +#: field:account.tax,account_paid_id:0 +#: field:account.tax.template,account_paid_id:0 +msgid "Refund Tax Account" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_ir_sequence +msgid "ir.sequence" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,line_ids:0 +msgid "Statement lines" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +msgid "Date/Code" +msgstr "" + +#. module: account +#: field:account.analytic.line,general_account_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,general_account_id:0 +msgid "General Account" +msgstr "" + +#. module: account +#: field:res.partner,debit_limit:0 +msgid "Payable Limit" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_type_form +msgid "" +"

\n" +" Click to define a new account type.\n" +"

\n" +" An account type is used to determine how an account is used " +"in\n" +" each journal. The deferral method of an account type " +"determines\n" +" the process for the annual closing. Reports such as the " +"Balance\n" +" Sheet and the Profit and Loss report use the category\n" +" (profit/loss or balance sheet).\n" +"

\n" +" " +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: field:account.move.line,invoice:0 +#: code:addons/account/account_invoice.py:1157 +#: model:ir.model,name:account.model_account_invoice +#: model:res.request.link,name:account.req_link_invoice +#, python-format +msgid "Invoice" +msgstr "" + +#. module: account +#: field:account.move,balance:0 +msgid "balance" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_analytic0 +#: model:process.node,note:account.process_node_analyticcost0 +msgid "Analytic costs to invoice" +msgstr "" + +#. module: account +#: view:ir.sequence:0 +msgid "Fiscal Year Sequence" +msgstr "" + +#. module: account +#: field:account.config.settings,group_analytic_accounting:0 +msgid "Analytic accounting" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Sub-Total :" +msgstr "" + +#. module: account +#: help:res.company,tax_calculation_rounding_method:0 +msgid "" +"If you select 'Round per Line' : for each tax, the tax amount will first be " +"computed and rounded for each PO/SO/invoice line and then these rounded " +"amounts will be summed, leading to the total amount for that tax. If you " +"select 'Round Globally': for each tax, the tax amount will be computed for " +"each PO/SO/invoice line, then these amounts will be summed and eventually " +"this total tax amount will be rounded. If you sell with tax included, you " +"should choose 'Round per line' because you certainly want the sum of your " +"tax-included line subtotals to be equal to the total amount with taxes." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all +#: view:report.account_type.sales:0 +msgid "Sales by Account Type" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_15days +#: model:account.payment.term,note:account.account_payment_term_15days +msgid "15 Days" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.periodical_processing_invoicing +msgid "Invoicing" +msgstr "" + +#. module: account +#: code:addons/account/report/account_partner_balance.py:115 +#, python-format +msgid "Unknown Partner" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:103 +#, python-format +msgid "" +"The journal must have centralized counterpart without the Skipping draft " +"state option checked." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:854 +#, python-format +msgid "Some entries are already reconciled." +msgstr "" + +#. module: account +#: field:account.tax.code,sum:0 +msgid "Year Sum" +msgstr "" + +#. module: account +#: view:account.change.currency:0 +msgid "This wizard will change the currency of the invoice" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "" +"Select a configuration package to setup automatically your\n" +" taxes and chart of accounts." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Pending Accounts" +msgstr "" + +#. module: account +#: view:account.open.closed.fiscalyear:0 +msgid "Cancel Fiscal Year Opening Entries" +msgstr "" + +#. module: account +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.tax.template:0 +msgid "Tax Declaration" +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 "" + +#. module: account +#: field:account.report.general.ledger,sortby:0 +msgid "Sort by" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_partner_account_move_all +msgid "Receivables & Payables" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_payment:0 +msgid "Manage payment orders" +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "Duration" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,last_closing_balance:0 +msgid "Last Closing Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_journal_report +msgid "Account Common Journal Report" +msgstr "" + +#. module: account +#: selection:account.partner.balance,display_partner:0 +msgid "All Partners" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +msgid "Analytic Account Charts" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Customer Ref:" +msgstr "" + +#. module: account +#: help:account.tax,base_code_id:0 +#: help:account.tax,ref_base_code_id:0 +#: help:account.tax,ref_tax_code_id:0 +#: help:account.tax,tax_code_id:0 +#: help:account.tax.template,base_code_id:0 +#: help:account.tax.template,ref_base_code_id:0 +#: help:account.tax.template,ref_tax_code_id:0 +#: help:account.tax.template,tax_code_id:0 +msgid "Use this code for the tax declaration." +msgstr "" + +#. module: account +#: help:account.period,special:0 +msgid "These periods can overlap." +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_draftstatement0 +msgid "Draft statement" +msgstr "" + +#. module: account +#: model:mail.message.subtype,description:account.mt_invoice_validated +msgid "Invoice validated" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_check_writing:0 +msgid "Pay your suppliers by check" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,credit:0 +msgid "Credit amount" +msgstr "" + +#. module: account +#: field:account.bank.statement,message_ids:0 +#: field:account.invoice,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +msgid "" +"This menu prints a tax declaration based on invoices or payments. Select one " +"or several periods of the fiscal year. The information required for a tax " +"declaration is automatically generated by OpenERP from invoices (or " +"payments, in some countries). This data is updated in real time. That’s very " +"useful because it enables you to preview at any time the tax that you owe at " +"the start and end of the month or quarter." +msgstr "" + +#. module: account +#: code:addons/account/account.py:409 +#: code:addons/account/account.py:414 +#: code:addons/account/account.py:431 +#: code:addons/account/account.py:634 +#: code:addons/account/account.py:636 +#: code:addons/account/account.py:930 +#: code:addons/account/account.py:1071 +#: code:addons/account/account.py:1073 +#: code:addons/account/account.py:1116 +#: code:addons/account/account.py:1319 +#: code:addons/account/account.py:1333 +#: code:addons/account/account.py:1356 +#: code:addons/account/account.py:1363 +#: code:addons/account/account.py:1587 +#: code:addons/account/account.py:1591 +#: code:addons/account/account.py:1677 +#: code:addons/account/account.py:2358 +#: code:addons/account/account.py:2678 +#: code:addons/account/account.py:3465 +#: code:addons/account/account_analytic_line.py:89 +#: code:addons/account/account_analytic_line.py:98 +#: code:addons/account/account_bank_statement.py:368 +#: code:addons/account/account_bank_statement.py:381 +#: code:addons/account/account_bank_statement.py:419 +#: code:addons/account/account_cash_statement.py:256 +#: code:addons/account/account_cash_statement.py:300 +#: code:addons/account/account_invoice.py:899 +#: code:addons/account/account_invoice.py:933 +#: code:addons/account/account_invoice.py:1124 +#: code:addons/account/account_move_line.py:579 +#: code:addons/account/account_move_line.py:828 +#: code:addons/account/account_move_line.py:851 +#: code:addons/account/account_move_line.py:854 +#: code:addons/account/account_move_line.py:1119 +#: code:addons/account/account_move_line.py:1121 +#: code:addons/account/account_move_line.py:1156 +#: code:addons/account/report/common_report_header.py:92 +#: 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_financial_report.py:70 +#: code:addons/account/wizard/account_invoice_refund.py:109 +#: code:addons/account/wizard/account_invoice_refund.py:111 +#: code:addons/account/wizard/account_move_bank_reconcile.py:49 +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#: code:addons/account/wizard/account_report_common.py:158 +#: code:addons/account/wizard/account_report_common.py:164 +#: code:addons/account/wizard/account_use_model.py:44 +#: code:addons/account/wizard/pos_box.py:31 +#: code:addons/account/wizard/pos_box.py:35 +#, python-format +msgid "Error!" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree2 +msgid "" +"

\n" +" Click to record a new supplier invoice.\n" +"

\n" +" You can control the invoice from your supplier according to\n" +" what you purchased or received. OpenERP can also generate\n" +" draft invoices automatically from purchase orders or " +"receipts.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +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 "" + +#. module: account +#: model:ir.model,name:account.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_period_close +msgid "period close" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1058 +#, python-format +msgid "" +"This journal already contains items for this period, therefore you cannot " +"modify its company field." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form +msgid "Entries By Line" +msgstr "" + +#. module: account +#: field:account.vat.declaration,based_on:0 +msgid "Based on" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_bank_statement_tree +msgid "" +"

\n" +" Click to register a bank statement.\n" +"

\n" +" A bank statement is a summary of all financial transactions\n" +" occurring over a given period of time on a bank account. " +"You\n" +" should receive this periodicaly from your bank.\n" +"

\n" +" OpenERP allows you to reconcile a statement line directly " +"with\n" +" the related sale or puchase invoices.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: field:account.config.settings,currency_id:0 +msgid "Default company currency" +msgstr "" + +#. module: account +#: field:account.invoice,move_id:0 +#: field:account.invoice,move_name:0 +#: field:account.move.line,move_id:0 +msgid "Journal Entry" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Unpaid" +msgstr "" + +#. module: account +#: view:account.treasury.report:0 +#: model:ir.actions.act_window,name:account.action_account_treasury_report_all +#: model:ir.model,name:account.model_account_treasury_report +#: model:ir.ui.menu,name:account.menu_action_account_treasury_report_all +msgid "Treasury Analysis" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_journal_sale_purchase +msgid "Sale/Purchase Journal" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: field:account.invoice.tax,account_analytic_id:0 +msgid "Analytic account" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:406 +#, python-format +msgid "Please verify that an account is defined in the journal." +msgstr "" + +#. module: account +#: selection:account.entries.report,move_line_state:0 +msgid "Valid" +msgstr "" + +#. module: account +#: field:account.bank.statement,message_follower_ids:0 +#: field:account.invoice,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: account +#: 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 "" + +#. module: account +#: model:ir.model,name:account.model_product_category +msgid "Product Category" +msgstr "" + +#. module: account +#: code:addons/account/account.py:656 +#, python-format +msgid "" +"You cannot change the type of account to '%s' type as it contains journal " +"items!" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_aged_trial_balance +msgid "Account Aged Trial balance Report" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close.state:0 +msgid "Close Fiscal Year" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_line_quickadd.xml:14 +#, python-format +msgid "Journal :" +msgstr "" + +#. module: account +#: sql_constraint:account.fiscal.position.tax:0 +msgid "A tax fiscal position could be defined only once time on same taxes." +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Tax Definition" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +#: model:ir.actions.act_window,name:account.action_account_config +msgid "Configure Accounting" +msgstr "" + +#. module: account +#: field:account.invoice.report,uom_name:0 +msgid "Reference Unit of Measure" +msgstr "" + +#. module: account +#: help:account.journal,allow_date:0 +msgid "" +"If set to True then do not accept the entry if the entry date is not into " +"the period dates" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_reconciliation.xml:8 +#, python-format +msgid "Good job!" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_asset:0 +msgid "Assets management" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: selection:account.aged.trial.balance,result_selection:0 +#: selection:account.common.partner.report,result_selection:0 +#: selection:account.partner.balance,result_selection:0 +#: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: code:addons/account/report/account_partner_balance.py:299 +#: code:addons/account/report/account_partner_ledger.py:274 +#, python-format +msgid "Payable Accounts" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"The selected account of your Journal Entry forces to provide a secondary " +"currency. You should remove the secondary currency on the account or select " +"a multi-currency view on the journal." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:report.invoice.created:0 +msgid "Untaxed Amount" +msgstr "" + +#. module: account +#: help:account.tax,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the tax " +"without removing it." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Journal Items related to a sale journal." +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Italic Text (smaller)" +msgstr "" + +#. module: account +#: help:account.journal,cash_control:0 +msgid "" +"If you want the journal should be control at opening/closing, check this " +"option" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.invoice:0 +#: selection:account.invoice,state:0 +#: view:account.invoice.report:0 +#: selection:account.invoice.report,state:0 +#: selection:account.journal.period,state:0 +#: view:account.subscription:0 +#: selection:account.subscription,state:0 +#: selection:report.invoice.created,state:0 +msgid "Draft" +msgstr "" + +#. module: account +#: field:account.move.reconcile,line_partial_ids:0 +msgid "Partial Entry lines" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +#: field:account.treasury.report,fiscalyear_id:0 +msgid "Fiscalyear" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_bank_reconcile.py:53 +#, python-format +msgid "Standard Encoding" +msgstr "" + +#. module: account +#: view:account.journal.select:0 +#: view:project.account.analytic.line:0 +msgid "Open Entries" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_refund_sequence_next:0 +msgid "Next supplier credit note number" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,account_ids:0 +msgid "Accounts to Reconcile" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_filestatement0 +msgid "Import of the statement in the system from an electronic file" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_importinvoice0 +msgid "Import from invoice" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "January" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "This F.Year" +msgstr "" + +#. module: account +#: view:account.tax.chart:0 +msgid "Account tax charts" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_net +#: model:account.payment.term,note:account.account_payment_term_net +msgid "30 Net Days" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:256 +#, python-format +msgid "You do not have rights to open this %s journal !" +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_supplier_inv_check_total +msgid "Check Total on supplier invoices" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: view:account.invoice.report:0 +#: selection:account.invoice.report,state:0 +#: selection:report.invoice.created,state:0 +msgid "Pro-forma" +msgstr "" + +#. module: account +#: help:account.account.template,type:0 +#: help:account.entries.report,type:0 +msgid "" +"This type is used to differentiate types with special effects in OpenERP: " +"view can not have entries, consolidation are accounts that can have children " +"accounts for multi-company consolidations, payable/receivable are for " +"partners accounts (for debit/credit computations), closed for depreciated " +"accounts." +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Search Chart of Account Templates" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Customer Code" +msgstr "" + +#. module: account +#: view:account.account.type:0 +#: field:account.account.type,note:0 +#: report:account.invoice:0 +#: field:account.invoice,name:0 +#: field:account.invoice.line,name:0 +#: report:account.overdue:0 +#: field:account.payment.term,note:0 +#: view:account.tax.code:0 +#: field:account.tax.code,info:0 +#: view:account.tax.code.template:0 +#: field:account.tax.code.template,info:0 +#: field:analytic.entries.report,name:0 +#: field:report.invoice.created,name:0 +msgid "Description" +msgstr "" + +#. module: account +#: field:account.tax,price_include:0 +#: field:account.tax.template,price_include:0 +msgid "Tax Included in Price" +msgstr "" + +#. module: account +#: view:account.subscription:0 +#: selection:account.subscription,state:0 +msgid "Running" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:product.category,property_account_income_categ:0 +#: field:product.template,property_account_income:0 +msgid "Income Account" +msgstr "" + +#. module: account +#: help:account.config.settings,default_sale_tax:0 +msgid "This sale tax will be assigned by default on new products." +msgstr "" + +#. module: account +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +msgid "Entries Sorted By" +msgstr "" + +#. module: account +#: field:account.change.currency,currency_id:0 +msgid "Change to" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "# of Products Qty " +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_product_template +msgid "Product Template" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,fiscalyear_id:0 +#: field:account.balance.report,fiscalyear_id:0 +#: report:account.central.journal:0 +#: field:account.central.journal,fiscalyear_id:0 +#: field:account.common.account.report,fiscalyear_id:0 +#: field:account.common.journal.report,fiscalyear_id:0 +#: field:account.common.partner.report,fiscalyear_id:0 +#: field:account.common.report,fiscalyear_id:0 +#: view:account.config.settings:0 +#: view:account.entries.report:0 +#: field:account.entries.report,fiscalyear_id:0 +#: view:account.fiscalyear:0 +#: field:account.fiscalyear,name:0 +#: report:account.general.journal:0 +#: field:account.general.journal,fiscalyear_id: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.journal.period.print.sale.purchase:0 +#: field:account.open.closed.fiscalyear,fyear_id:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,fiscalyear_id:0 +#: field:account.partner.ledger,fiscalyear_id:0 +#: field:account.period,fiscalyear_id:0 +#: field:account.print.journal,fiscalyear_id:0 +#: field:account.report.general.ledger,fiscalyear_id:0 +#: field:account.sequence.fiscalyear,fiscalyear_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,fiscalyear_id:0 +#: field:accounting.report,fiscalyear_id:0 +#: field:accounting.report,fiscalyear_id_cmp:0 +#: model:ir.model,name:account.model_account_fiscalyear +msgid "Fiscal Year" +msgstr "" + +#. module: account +#: help:account.aged.trial.balance,fiscalyear_id:0 +#: help:account.balance.report,fiscalyear_id:0 +#: help:account.central.journal,fiscalyear_id:0 +#: help:account.common.account.report,fiscalyear_id:0 +#: help:account.common.journal.report,fiscalyear_id:0 +#: help:account.common.partner.report,fiscalyear_id:0 +#: help:account.common.report,fiscalyear_id:0 +#: help:account.general.journal,fiscalyear_id:0 +#: help:account.partner.balance,fiscalyear_id:0 +#: help:account.partner.ledger,fiscalyear_id:0 +#: help:account.print.journal,fiscalyear_id:0 +#: help:account.report.general.ledger,fiscalyear_id:0 +#: help:account.vat.declaration,fiscalyear_id:0 +#: help:accounting.report,fiscalyear_id:0 +#: help:accounting.report,fiscalyear_id_cmp:0 +msgid "Keep empty for all open fiscal year" +msgstr "" + +#. module: account +#: code:addons/account/account.py:653 +#, python-format +msgid "" +"You cannot change the type of account from 'Closed' to any other type as it " +"contains journal items!" +msgstr "" + +#. module: account +#: field:account.invoice.report,account_line_id:0 +msgid "Account Line" +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +msgid "Create an Account Based on this Template" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:933 +#, python-format +msgid "" +"Cannot create the invoice.\n" +"The related payment term is probably misconfigured as it gives a computed " +"amount greater than the total invoiced amount. In order to avoid rounding " +"issues, the latest line of your payment term must be of type 'balance'." +msgstr "" + +#. module: account +#: view:account.move:0 +#: model:ir.model,name:account.model_account_move +msgid "Account Entry" +msgstr "" + +#. module: account +#: field:account.sequence.fiscalyear,sequence_main_id:0 +msgid "Main Sequence" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:478 +#, python-format +msgid "" +"In order to delete a bank statement, you must first cancel it to delete " +"related journal items." +msgstr "" + +#. module: account +#: field:account.invoice.report,payment_term:0 +#: view:account.payment.term:0 +#: field:account.payment.term,name:0 +#: view:account.payment.term.line:0 +#: field:account.payment.term.line,payment_id:0 +#: model:ir.model,name:account.model_account_payment_term +msgid "Payment Term" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscal_position_form +#: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form +msgid "Fiscal Positions" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:579 +#, python-format +msgid "You cannot create journal items on a closed account %s %s." +msgstr "" + +#. module: account +#: field:account.period.close,sure:0 +msgid "Check this box" +msgstr "" + +#. module: account +#: view:account.common.report:0 +msgid "Filters" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_draftinvoices0 +#: model:process.node,note:account.process_node_supplierdraftinvoices0 +msgid "Draft state of an invoice" +msgstr "" + +#. module: account +#: view:product.category:0 +msgid "Account Properties" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Create a draft refund" +msgstr "" + +#. module: account +#: view:account.partner.reconcile.process:0 +msgid "Partner Reconciliation" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Fin. Account" +msgstr "" + +#. module: account +#: field:account.tax,tax_code_id:0 +#: view:account.tax.code:0 +msgid "Account Tax Code" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_advance +#: model:account.payment.term,note:account.account_payment_term_advance +msgid "30% Advance End 30 Days" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Unreconciled entries" +msgstr "" + +#. module: account +#: field:account.invoice.tax,base_code_id:0 +#: field:account.tax.template,base_code_id:0 +msgid "Base Code" +msgstr "" + +#. module: account +#: help:account.invoice.tax,sequence:0 +msgid "Gives the sequence order when displaying a list of invoice tax." +msgstr "" + +#. module: account +#: field:account.tax,base_sign:0 +#: field:account.tax,ref_base_sign:0 +#: field:account.tax.template,base_sign:0 +#: field:account.tax.template,ref_base_sign:0 +msgid "Base Code Sign" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Debit Centralisation" +msgstr "" + +#. module: account +#: view:account.invoice.confirm:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_confirm +msgid "Confirm Draft Invoices" +msgstr "" + +#. module: account +#: field:account.entries.report,day:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,day:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,day:0 +msgid "Day" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_renew_view +msgid "Accounts to Renew" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_model_line +msgid "Account Model Entries" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3202 +#, python-format +msgid "EXJ" +msgstr "" + +#. module: account +#: field:product.template,supplier_taxes_id:0 +msgid "Supplier Taxes" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "Bank Details" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_move_journal_line +msgid "" +"

\n" +" Click to create a journal entry.\n" +"

\n" +" A journal entry consists of several journal items, each of\n" +" which is either a debit or a credit transaction.\n" +"

\n" +" OpenERP automatically creates one journal entry per " +"accounting\n" +" document: invoice, refund, supplier payment, bank " +"statements,\n" +" etc. So, you should record journal entries manually " +"only/mainly\n" +" for miscellaneous operations.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: help:account.invoice,payment_term:0 +msgid "" +"If you use payment terms, the due date will be computed automatically at the " +"generation of accounting entries. If you keep the payment term and the due " +"date empty, it means direct payment. The payment term may compute several " +"due dates, for example 50% now, 50% in one month." +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_sequence_next:0 +msgid "Next supplier invoice number" +msgstr "" + +#. module: account +#: view:account.analytic.cost.ledger.journal.report:0 +msgid "Select period" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_pp_statements +msgid "Statements" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "Move Name" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile_writeoff +msgid "Account move line reconcile (writeoff)" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.conf_account_type_tax +#: report:account.invoice:0 +#: field:account.invoice,amount_tax:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.move.line,account_tax_id:0 +#: view:account.tax:0 +#: model:ir.model,name:account.model_account_tax +msgid "Tax" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: view:account.analytic.line:0 +#: field:account.bank.statement.line,analytic_account_id:0 +#: field:account.entries.report,analytic_account_id:0 +#: field:account.invoice.line,account_analytic_id:0 +#: field:account.model.line,analytic_account_id:0 +#: field:account.move.line,analytic_account_id:0 +#: field:account.move.line.reconcile.writeoff,analytic_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: account +#: field:account.config.settings,default_purchase_tax:0 +#: field:account.config.settings,purchase_tax:0 +msgid "Default purchase tax" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.financial.report,account_ids:0 +#: selection:account.financial.report,type:0 +#: view:account.journal:0 +#: model:ir.actions.act_window,name:account.action_account_form +#: model:ir.ui.menu,name:account.account_account_menu +#: model:ir.ui.menu,name:account.account_template_accounts +#: model:ir.ui.menu,name:account.menu_action_account_form +#: model:ir.ui.menu,name:account.menu_analytic +msgid "Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3541 +#: code:addons/account/account_bank_statement.py:405 +#: code:addons/account/account_invoice.py:507 +#: code:addons/account/account_invoice.py:609 +#: code:addons/account/account_invoice.py:624 +#: code:addons/account/account_invoice.py:632 +#: code:addons/account/account_invoice.py:657 +#: code:addons/account/account_move_line.py:536 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:434 +#, python-format +msgid "Statement %s confirmed, journal items were created." +msgstr "" + +#. module: account +#: field:account.invoice.report,price_average:0 +#: field:account.invoice.report,user_currency_price_average:0 +msgid "Average Price" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Date:" +msgstr "" + +#. module: account +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +msgid "Label" +msgstr "" + +#. module: account +#: view:res.partner.bank:0 +msgid "Accounting Information" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Special Computation" +msgstr "" + +#. module: account +#: view:account.move.bank.reconcile:0 +#: model:ir.actions.act_window,name:account.action_account_bank_reconcile_tree +msgid "Bank reconciliation" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Disc.(%)" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.overdue:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Ref" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "Purchase Tax" +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 "" + +#. module: account +#: sql_constraint:account.model.line:0 +msgid "Wrong credit or debit value in model, they must be positive!" +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 "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_automatic_reconcile +msgid "Automatic Reconciliation" +msgstr "" + +#. module: account +#: field:account.invoice,reconciled:0 +msgid "Paid/Reconciled" +msgstr "" + +#. module: account +#: field:account.tax,ref_base_code_id:0 +#: field:account.tax.template,ref_base_code_id:0 +msgid "Refund Base Code" +msgstr "" + +#. module: account +#: 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 "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_fiscalyear +msgid "" +"

\n" +" Click to start a new fiscal year.\n" +"

\n" +" Define your company's financial year according to your " +"needs. A\n" +" financial year is a period at the end of which a company's\n" +" accounts are made up (usually 12 months). The financial year " +"is\n" +" usually referred to by the date in which it ends. For " +"example,\n" +" if a company's financial year ends November 30, 2011, then\n" +" everything between December 1, 2010 and November 30, 2011\n" +" would be referred to as FY 2011.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: view:account.common.report:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:accounting.report:0 +msgid "Dates" +msgstr "" + +#. module: account +#: field:account.chart.template,parent_id:0 +msgid "Parent Chart Template" +msgstr "" + +#. module: account +#: field:account.tax,parent_id:0 +#: field:account.tax.template,parent_id:0 +msgid "Parent Tax Account" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: 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 "" + +#. module: account +#: model:process.transition,name:account.process_transition_entriesreconcile0 +#: model:process.transition,name:account.process_transition_supplierentriesreconcile0 +msgid "Accounting entries" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "Account and Period must belong to the same company." +msgstr "" + +#. module: account +#: field:account.invoice.line,discount:0 +msgid "Discount (%)" +msgstr "" + +#. module: account +#: help:account.journal,entry_posted:0 +msgid "" +"Check this box if you don't want new journal entries to pass through the " +"'draft' state and instead goes directly to the 'posted state' without any " +"manual validation. \n" +"Note that journal entries that are automatically created by the system are " +"always skipping that state." +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,writeoff:0 +msgid "Write-Off amount" +msgstr "" + +#. module: account +#: field:account.bank.statement,message_unread:0 +#: field:account.invoice,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_state.py:44 +#, python-format +msgid "" +"Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-" +"Forma' state." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1071 +#, python-format +msgid "You should choose the periods that belong to the same company." +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 "" + +#. module: account +#: code:addons/account/account.py:1449 +#, python-format +msgid "You cannot delete a posted journal entry \"%s\"." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Accounting Period" +msgstr "" + +#. module: account +#: field:account.config.settings,sale_journal_id:0 +msgid "Sale journal" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2346 +#: code:addons/account/account_invoice.py:775 +#: code:addons/account/account_move_line.py:195 +#, python-format +msgid "You have to define an analytic journal on the '%s' journal!" +msgstr "" + +#. module: account +#: code:addons/account/account.py:781 +#, python-format +msgid "" +"This journal already contains items, therefore you cannot modify its company " +"field." +msgstr "" + +#. module: account +#: code:addons/account/account.py:409 +#, python-format +msgid "" +"You need an Opening journal with centralisation checked to set the initial " +"balance." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_tax_code_list +#: model:ir.ui.menu,name:account.menu_action_tax_code_list +msgid "Tax codes" +msgstr "" + +#. module: account +#: view:account.account:0 +msgid "Unrealized Gains and losses" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_customer +#: model:ir.ui.menu,name:account.menu_finance_receivables +msgid "Customers" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.journal:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Period to" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "August" +msgstr "" + +#. module: account +#: field:accounting.report,debit_credit:0 +msgid "Display Debit/Credit Columns" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "October" +msgstr "" + +#. module: account +#: help:account.move.line,quantity:0 +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.unreconcile:0 +#: view:account.unreconcile.reconcile:0 +msgid "Unreconcile Transactions" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,only_one_chart_template:0 +msgid "Only One Chart Template Available" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:product.category,property_account_expense_categ:0 +#: field:product.template,property_account_expense:0 +msgid "Expense Account" +msgstr "" + +#. module: account +#: field:account.bank.statement,message_summary:0 +#: field:account.invoice,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: account +#: help:account.invoice,period_id:0 +msgid "Keep empty to use the period of the validation(invoice) date." +msgstr "" + +#. module: account +#: help:account.bank.statement,account_id:0 +msgid "" +"used in statement reconciliation domain, but shouldn't be used elswhere." +msgstr "" + +#. module: account +#: field:account.config.settings,date_stop:0 +msgid "End date" +msgstr "" + +#. module: account +#: field:account.invoice.tax,base_amount:0 +msgid "Base Code Amount" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,sale_tax:0 +msgid "Default Sale Tax" +msgstr "" + +#. module: account +#: help:account.model.line,date_maturity:0 +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 "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_accounting +msgid "Financial Accounting" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_report_pl +msgid "Profit And Loss" +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,name:0 +#: field:account.fiscal.position.account,position_id:0 +#: field:account.fiscal.position.tax,position_id:0 +#: field:account.fiscal.position.tax.template,position_id:0 +#: view:account.fiscal.position.template:0 +#: field:account.invoice,fiscal_position:0 +#: field:account.invoice.report,fiscal_position:0 +#: model:ir.model,name:account.model_account_fiscal_position +#: field:res.partner,property_account_position:0 +msgid "Fiscal Position" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:823 +#, python-format +msgid "" +"Tax base different!\n" +"Click on compute to update the tax base." +msgstr "" + +#. module: account +#: field:account.partner.ledger,page_split:0 +msgid "One Partner Per Page" +msgstr "" + +#. module: account +#: field:account.account,child_parent_ids:0 +#: field:account.account.template,child_parent_ids:0 +msgid "Children" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: model:ir.actions.act_window,name:account.action_account_balance_menu +#: model:ir.actions.report.xml,name:account.account_account_balance +#: model:ir.ui.menu,name:account.menu_general_Balance_report +msgid "Trial Balance" +msgstr "" + +#. module: account +#: code:addons/account/account.py:431 +#, python-format +msgid "Unable to adapt the initial balance (negative value)." +msgstr "" + +#. module: account +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: model:process.process,name:account.process_process_invoiceprocess0 +#: selection:report.invoice.created,type:0 +msgid "Customer Invoice" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_open_closed_fiscalyear +msgid "Choose Fiscal Year" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +#: view:account.installer:0 +msgid "Date Range" +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "Search Period" +msgstr "" + +#. module: account +#: view:account.change.currency:0 +msgid "Invoice Currency" +msgstr "" + +#. module: account +#: field:accounting.report,account_report_id:0 +#: model:ir.ui.menu,name:account.menu_account_financial_reports_tree +msgid "Account Reports" +msgstr "" + +#. module: account +#: field:account.payment.term,line_ids:0 +msgid "Terms" +msgstr "" + +#. module: account +#: field:account.chart.template,tax_template_ids:0 +msgid "Tax Template List" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_print_sale_purchase_journal +msgid "Sale/Purchase Journals" +msgstr "" + +#. module: account +#: help:account.account,currency_mode:0 +msgid "" +"This will select how the current currency rate for outgoing transactions is " +"computed. In most countries the legal method is \"average\" but only a few " +"software systems are able to 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." +msgstr "" + +#. module: account +#: code:addons/account/account.py:2678 +#, python-format +msgid "There is no parent code for the template account." +msgstr "" + +#. module: account +#: help:account.chart.template,code_digits:0 +#: help:wizard.multi.charts.accounts,code_digits:0 +msgid "No. of Digits to use for account code" +msgstr "" + +#. module: account +#: field:res.partner,property_supplier_payment_term:0 +msgid "Supplier Payment Term" +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Search Fiscalyear" +msgstr "" + +#. module: account +#: selection:account.tax,applicable_type:0 +msgid "Always" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_accountant:0 +msgid "" +"Full accounting features: journals, legal statements, chart of accounts, etc." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Total Quantity" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile.writeoff,writeoff_acc_id:0 +msgid "Write-Off account" +msgstr "" + +#. module: account +#: field:account.model.line,model_id:0 +#: view:account.subscription:0 +#: field:account.subscription,model_id:0 +msgid "Model" +msgstr "" + +#. module: account +#: help:account.invoice.tax,base_code_id:0 +msgid "The account basis of the tax declaration." +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +#: selection:account.financial.report,type:0 +msgid "View" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3460 +#: code:addons/account/account_bank.py:94 +#, python-format +msgid "BNK" +msgstr "" + +#. module: account +#: field:account.move.line,analytic_lines:0 +msgid "Analytic lines" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma Invoices" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_electronicfile0 +msgid "Electronic File" +msgstr "" + +#. module: account +#: field:account.move.line,reconcile:0 +msgid "Reconcile Ref" +msgstr "" + +#. module: account +#: field:account.config.settings,has_chart_of_accounts:0 +msgid "Company has a chart of accounts" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_tax_code_template +msgid "Tax Code Template" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_ledger +msgid "Account Partner Ledger" +msgstr "" + +#. module: account +#: model:email.template,body_html:account.email_template_edi_invoice +msgid "" +"\n" +"
\n" +"\n" +"

Hello ${object.partner_id.name},

\n" +"\n" +"

A new invoice is available for you:

\n" +" \n" +"

\n" +"   REFERENCES
\n" +"   Invoice number: ${object.number}
\n" +"   Invoice total: ${object.amount_total} " +"${object.currency_id.name}
\n" +"   Invoice date: ${object.date_invoice}
\n" +" % if object.origin:\n" +"   Order reference: ${object.origin}
\n" +" % endif\n" +" % if object.user_id:\n" +"   Your contact: ${object.user_id.name}\n" +" % endif\n" +"

\n" +" \n" +" % if object.paypal_url:\n" +"
\n" +"

It is also possible to directly pay with Paypal:

\n" +" \n" +" \n" +" \n" +" % endif\n" +" \n" +"
\n" +"

If you have any question, do not hesitate to contact us.

\n" +"

Thank you for choosing ${object.company_id.name or 'us'}!

\n" +"
\n" +"
\n" +"
\n" +"

\n" +" ${object.company_id.name}

\n" +"
\n" +"
\n" +" \n" +" % if object.company_id.street:\n" +" ${object.company_id.street}
\n" +" % endif\n" +" % if object.company_id.street2:\n" +" ${object.company_id.street2}
\n" +" % endif\n" +" % if object.company_id.city or object.company_id.zip:\n" +" ${object.company_id.zip} ${object.company_id.city}
\n" +" % endif\n" +" % if object.company_id.country_id:\n" +" ${object.company_id.state_id and ('%s, ' % " +"object.company_id.state_id.name) or ''} ${object.company_id.country_id.name " +"or ''}
\n" +" % endif\n" +"
\n" +" % if object.company_id.phone:\n" +"
\n" +" Phone:  ${object.company_id.phone}\n" +"
\n" +" % endif\n" +" % if object.company_id.website:\n" +"
\n" +" Web : ${object.company_id.website}\n" +"
\n" +" %endif\n" +"

\n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "Account Period" +msgstr "" + +#. module: account +#: help:account.account,currency_id:0 +#: 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 "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_validate_account_move_line +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 +#: model:ir.ui.menu,name:account.menu_action_account_chart_template_form +msgid "Chart of Accounts Templates" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Transactions" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_unreconcile_reconcile +msgid "Account Unreconcile Reconcile" +msgstr "" + +#. module: account +#: help:account.account.type,close_method:0 +msgid "" +"Set here the method that will be used to generate the end of year journal " +"entries for all the accounts of this type.\n" +"\n" +" 'None' means that nothing will be done.\n" +" 'Balance' will generally be used for cash accounts.\n" +" 'Detail' will copy each existing journal item of the previous year, even " +"the reconciled ones.\n" +" 'Unreconciled' will copy only the journal items that were unreconciled on " +"the first day of the new fiscal year." +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Keep empty to use the expense account" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,journal_ids:0 +#: field:account.analytic.cost.ledger.journal.report,journal:0 +#: field:account.balance.report,journal_ids:0 +#: field:account.central.journal,journal_ids:0 +#: field:account.common.account.report,journal_ids:0 +#: field:account.common.journal.report,journal_ids:0 +#: field:account.common.partner.report,journal_ids:0 +#: view:account.common.report:0 +#: field:account.common.report,journal_ids:0 +#: report:account.general.journal:0 +#: field:account.general.journal,journal_ids:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: view:account.journal.period:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,journal_ids:0 +#: field:account.partner.ledger,journal_ids:0 +#: view:account.print.journal:0 +#: field:account.print.journal,journal_ids:0 +#: field:account.report.general.ledger,journal_ids:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,journal_ids:0 +#: field:accounting.report,journal_ids:0 +#: model:ir.actions.act_window,name:account.action_account_journal_form +#: model:ir.actions.act_window,name:account.action_account_journal_period_tree +#: model:ir.ui.menu,name:account.menu_account_print_journal +#: model:ir.ui.menu,name:account.menu_action_account_journal_form +#: model:ir.ui.menu,name:account.menu_journals +#: model:ir.ui.menu,name:account.menu_journals_report +msgid "Journals" +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,to_reconcile:0 +msgid "Remaining Partners" +msgstr "" + +#. module: account +#: view:account.subscription:0 +#: field:account.subscription,lines_id:0 +msgid "Subscription Lines" +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +#: view:account.config.settings:0 +#: view:account.journal:0 +#: selection:account.journal,type:0 +#: view:account.model:0 +#: selection:account.tax,type_tax_use:0 +#: view:account.tax.template:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "Purchase" +msgstr "" + +#. module: account +#: view:account.installer:0 +#: view:wizard.multi.charts.accounts:0 +msgid "Accounting Application Configuration" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_vat_declaration +msgid "Account Tax Declaration" +msgstr "" + +#. module: account +#: help:account.bank.statement,name:0 +msgid "" +"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" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1016 +#, python-format +msgid "" +"You cannot create an invoice on a centralized journal. Uncheck the " +"centralized counterpart box in the related journal from the configuration " +"menu." +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_start:0 +#: field:account.treasury.report,starting_balance:0 +msgid "Starting Balance" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1465 +#, python-format +msgid "No Partner Defined !" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_period_close +#: model:ir.actions.act_window,name:account.action_account_period_tree +#: model:ir.ui.menu,name:account.menu_action_account_period_close_tree +msgid "Close a Period" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.cashbox.line,subtotal_opening:0 +msgid "Opening Subtotal" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"You cannot create journal items with a secondary currency without recording " +"both 'currency' and 'amount currency' field." +msgstr "" + +#. module: account +#: field:account.financial.report,display_detail:0 +msgid "Display details" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "VAT:" +msgstr "" + +#. module: account +#: help:account.analytic.line,amount_currency:0 +msgid "" +"The amount expressed in the related account currency if not equal to the " +"company one." +msgstr "" + +#. module: account +#: help:account.config.settings,paypal_account:0 +msgid "" +"Paypal account (email) for receiving online payments (credit card, etc.) If " +"you set a paypal account, the customer will be able to pay your invoices or " +"quotations with a button \"Pay with Paypal\" in automated emails or through " +"the OpenERP portal." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:536 +#, python-format +msgid "" +"Cannot find any account journal of %s type for this company.\n" +"\n" +"You can create one in the menu: \n" +"Configuration/Journals/Journals." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_unreconcile +#: model:ir.actions.act_window,name:account.action_account_unreconcile_reconcile +#: model:ir.actions.act_window,name:account.action_account_unreconcile_select +msgid "Unreconcile Entries" +msgstr "" + +#. module: account +#: field:account.tax.code,notprintable:0 +#: field:account.tax.code.template,notprintable:0 +msgid "Not Printable in Invoice" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,chart_tax_id:0 +msgid "Chart of Tax" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Search Account Journal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree_pending_invoice +msgid "Pending Invoice" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: selection:account.subscription,period_type:0 +msgid "year" +msgstr "" + +#. module: account +#: field:account.config.settings,date_start:0 +msgid "Start date" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "" +"You will be able to edit and validate this\n" +" credit note directly or keep it draft,\n" +" waiting for the document to be issued " +"by\n" +" your supplier/customer." +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 "" + +#. module: account +#: code:addons/account/account_move_line.py:98 +#, python-format +msgid "" +"You have not supplied enough arguments to compute the initial balance, " +"please select a period and a journal in the context." +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_transfers +msgid "Transfers" +msgstr "" + +#. module: account +#: field:account.config.settings,expects_chart_of_accounts:0 +msgid "This company has its own chart of accounts" +msgstr "" + +#. module: account +#: view:account.chart:0 +msgid "Account charts" +msgstr "" + +#. module: account +#: view:cash.box.out:0 +#: model:ir.actions.act_window,name:account.action_cash_box_out +msgid "Take Money Out" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Tax Amount" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Search Move" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree1 +msgid "" +"

\n" +" Click to create a customer invoice.\n" +"

\n" +" OpenERP's electronic invoicing allows to ease and fasten " +"the\n" +" collection of customer payments. Your customer receives the\n" +" invoice by email and he can pay online and/or import it\n" +" in his own system.\n" +"

\n" +" The discussions with your customer are automatically " +"displayed at\n" +" the bottom of each invoice.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: field:account.tax.code,name:0 +#: field:account.tax.code.template,name:0 +msgid "Tax Case Name" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: model:process.node,name:account.process_node_draftinvoices0 +msgid "Draft Invoice" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Options" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,period_length:0 +msgid "Period Length (days)" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1363 +#, python-format +msgid "" +"You cannot modify a posted entry of this journal.\n" +"First you should set the journal to allow cancelling entries." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal +msgid "Print Sale/Purchase Journal" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "Continue" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,categ_id:0 +msgid "Category of Product" +msgstr "" + +#. module: account +#: code:addons/account/account.py:930 +#, python-format +msgid "" +"There is no fiscal year defined for this date.\n" +"Please create one from the configuration of the accounting menu." +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +#: model:ir.actions.act_window,name:account.action_account_addtmpl_wizard_form +msgid "Create Account" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:62 +#, python-format +msgid "The entries to reconcile should belong to the same company." +msgstr "" + +#. module: account +#: field:account.invoice.tax,tax_amount:0 +msgid "Tax Code Amount" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unreconciled Journal Items" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +msgid "Detail" +msgstr "" + +#. module: account +#: help:account.config.settings,default_purchase_tax:0 +msgid "This purchase tax will be assigned by default on new products." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "VAT :" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: report:account.central.journal:0 +#: view:account.config.settings:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: model:ir.actions.act_window,name:account.action_account_chart +#: model:ir.actions.act_window,name:account.action_account_tree +#: model:ir.ui.menu,name:account.menu_action_account_tree2 +msgid "Chart of Accounts" +msgstr "" + +#. module: account +#: view:account.tax.chart:0 +msgid "(If you do not select period it will take all open periods)" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_journal_cashbox_line +msgid "account.journal.cashbox.line" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_reconcile_process +msgid "Reconcilation Process partner by partner" +msgstr "" + +#. module: account +#: view:account.chart:0 +msgid "(If you do not select Fiscal year it will take all open fiscal years)" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: report:account.analytic.account.journal:0 +#: view:account.analytic.line:0 +#: selection:account.balance.report,filter:0 +#: field:account.bank.statement,date:0 +#: field:account.bank.statement.line,date:0 +#: selection:account.central.journal,filter:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: selection:account.common.report,filter:0 +#: view:account.entries.report:0 +#: 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.refund,date:0 +#: field:account.invoice.report,date:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.move:0 +#: field:account.move,date:0 +#: field:account.move.line.reconcile.writeoff,date_p:0 +#: report:account.overdue:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: selection:account.print.journal,filter:0 +#: selection:account.print.journal,sort_selection:0 +#: selection:account.report.general.ledger,filter:0 +#: selection:account.report.general.ledger,sortby:0 +#: field:account.subscription.line,date:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: xsl:account.transfer:0 +#: selection:account.vat.declaration,filter:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +#: field:analytic.entries.report,date:0 +msgid "Date" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Post" +msgstr "" + +#. module: account +#: view:account.unreconcile:0 +#: view:account.unreconcile.reconcile:0 +msgid "Unreconcile" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Chart of Accounts Template" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2358 +#, 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 "" + +#. module: account +#: report:account.account.balance:0 +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 +#: selection:account.report.general.ledger,display_account:0 +#: selection:account.tax,type_tax_use:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "All" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_reporting_budgets +msgid "Budgets" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: selection:account.balance.report,filter:0 +#: selection:account.central.journal,filter:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: selection:account.common.report,filter:0 +#: selection:account.general.journal,filter:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: selection:account.print.journal,filter:0 +#: selection:account.report.general.ledger,filter:0 +#: selection:account.vat.declaration,filter:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +msgid "No Filters" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: model:res.groups,name:account.group_proforma_invoices +msgid "Pro-forma Invoices" +msgstr "" + +#. module: account +#: view:res.partner:0 +msgid "History" +msgstr "" + +#. module: account +#: help:account.tax,applicable_type:0 +#: help:account.tax.template,applicable_type:0 +msgid "" +"If not applicable (computed through a Python code), the tax won't appear on " +"the invoice." +msgstr "" + +#. module: account +#: field:account.config.settings,group_check_supplier_invoice_total:0 +msgid "Check the total of supplier invoices" +msgstr "" + +#. module: account +#: view:account.tax:0 +#: view:account.tax.template:0 +msgid "Applicable Code (if type=code)" +msgstr "" + +#. module: account +#: help:account.period,state:0 +msgid "" +"When monthly periods are created. The status is 'Draft'. At the end of " +"monthly period it is in 'Done' status." +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,product_qty:0 +msgid "Qty" +msgstr "" + +#. module: account +#: help:account.tax.code,sign:0 +msgid "" +"You can specify here the coefficient that will be used when consolidating " +"the amount of this case into its parent. For example, set 1/-1 if you want " +"to add/substract it." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Search Analytic Lines" +msgstr "" + +#. module: account +#: field:res.partner,property_account_payable:0 +msgid "Account Payable" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:88 +#, python-format +msgid "The periods to generate opening entries cannot be found." +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_supplierpaymentorder0 +msgid "Payment Order" +msgstr "" + +#. module: account +#: help:account.account.template,reconcile:0 +msgid "" +"Check this option if you want the user to reconcile entries in this account." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: field:account.invoice.line,price_unit:0 +msgid "Unit Price" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_tree1 +msgid "Analytic Items" +msgstr "" + +#. module: account +#: field:analytic.entries.report,nbr:0 +msgid "#Entries" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "Open Invoice" +msgstr "" + +#. module: account +#: field:account.invoice.tax,factor_tax:0 +msgid "Multipication factor Tax code" +msgstr "" + +#. module: account +#: field:account.config.settings,complete_tax_set:0 +msgid "Complete set of taxes" +msgstr "" + +#. module: account +#: field:account.account,name:0 +#: field:account.account.template,name:0 +#: report:account.analytic.account.inverted.balance:0 +#: field:account.chart.template,name:0 +#: field:account.model.line,name:0 +#: field:account.move.line,name:0 +#: field:account.move.reconcile,name:0 +#: field:account.subscription,name:0 +msgid "Name" +msgstr "" + +#. module: account +#: code:addons/account/installer.py:115 +#, python-format +msgid "No unconfigured company !" +msgstr "" + +#. module: account +#: field:res.company,expects_chart_of_accounts:0 +msgid "Expects a Chart of Accounts" +msgstr "" + +#. module: account +#: field:account.move.line,date:0 +msgid "Effective date" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:100 +#, python-format +msgid "The journal must have default credit and debit account." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_bank_tree +#: model:ir.ui.menu,name:account.menu_action_bank_tree +msgid "Setup your Bank Accounts" +msgstr "" + +#. module: account +#: xsl:account.transfer:0 +msgid "Partner ID" +msgstr "" + +#. module: account +#: help:account.bank.statement,message_ids:0 +#: help:account.invoice,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: account +#: help:account.journal,analytic_journal_id:0 +msgid "Journal for analytic entries" +msgstr "" + +#. module: account +#: constraint:account.aged.trial.balance:0 +#: constraint:account.balance.report:0 +#: constraint:account.central.journal:0 +#: constraint:account.common.account.report:0 +#: constraint:account.common.journal.report:0 +#: constraint:account.common.partner.report:0 +#: constraint:account.common.report:0 +#: constraint:account.general.journal:0 +#: constraint:account.partner.balance:0 +#: constraint:account.partner.ledger:0 +#: constraint:account.print.journal:0 +#: constraint:account.report.general.ledger:0 +#: constraint:account.vat.declaration:0 +#: constraint:accounting.report:0 +msgid "" +"The fiscalyear, periods or chart of account chosen have to belong to the " +"same company." +msgstr "" + +#. module: account +#: help:account.tax.code.template,notprintable:0 +msgid "" +"Check this box if you don't want any tax related to this tax Code to appear " +"on invoices." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 +#, python-format +msgid "You cannot use an inactive account." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.open_board_account +#: model:ir.ui.menu,name:account.menu_account_config +#: model:ir.ui.menu,name:account.menu_board_account +#: model:ir.ui.menu,name:account.menu_finance +#: model:ir.ui.menu,name:account.menu_finance_reporting +#: model:process.node,name:account.process_node_accountingentries0 +#: model:process.node,name:account.process_node_supplieraccountingentries0 +#: view:product.product:0 +#: view:product.template:0 +#: view:res.partner:0 +msgid "Accounting" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Journal Entries with period in current year" +msgstr "" + +#. module: account +#: field:account.account,child_consol_ids:0 +msgid "Consolidated Children" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:573 +#: code:addons/account/wizard/account_invoice_refund.py:146 +#, python-format +msgid "Insufficient Data!" +msgstr "" + +#. module: account +#: help:account.account,unrealized_gain_loss:0 +msgid "" +"Value of Loss or Gain due to changes in exchange rate when doing multi-" +"currency transactions." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "General Accounting" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,journal_id:0 +msgid "" +"The best practice here is to use a journal dedicated to contain the opening " +"entries of all fiscal years. Note that you should define it with default " +"debit/credit accounts, of type 'situation' and with a centralized " +"counterpart." +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "title" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.subscription:0 +msgid "Set to Draft" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form +msgid "Recurring Lines" +msgstr "" + +#. module: account +#: field:account.partner.balance,display_partner:0 +msgid "Display Partners" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Validate" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_assets0 +msgid "Assets" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Accounting & Finance" +msgstr "" + +#. module: account +#: view:account.invoice.confirm:0 +msgid "Confirm Invoices" +msgstr "" + +#. module: account +#: selection:account.account,currency_mode:0 +msgid "Average Rate" +msgstr "" + +#. module: account +#: field:account.balance.report,display_account:0 +#: field:account.common.account.report,display_account:0 +#: field:account.report.general.ledger,display_account:0 +msgid "Display Accounts" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "(Invoice should be unreconciled if you want to open it)" +msgstr "" + +#. module: account +#: field:account.tax,account_analytic_collected_id:0 +msgid "Invoice Tax Analytic Account" +msgstr "" + +#. module: account +#: field:account.chart,period_from:0 +msgid "Start period" +msgstr "" + +#. module: account +#: field:account.tax,name:0 +#: field:account.tax.template,name:0 +#: report:account.vat.declaration:0 +msgid "Tax Name" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +#: model:ir.ui.menu,name:account.menu_finance_configuration +msgid "Configuration" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term +#: model:account.payment.term,note:account.account_payment_term +msgid "30 Days End of Month" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_balance +#: model:ir.actions.report.xml,name:account.account_analytic_account_balance +msgid "Analytic Balance" +msgstr "" + +#. module: account +#: help:res.partner,property_payment_term:0 +msgid "" +"This payment term will be used instead of the default one for sale orders " +"and customer invoices" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "" +"If you put \"%(year)s\" in the prefix, it will be replaced by the current " +"year." +msgstr "" + +#. module: account +#: help:account.account,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the account " +"without removing it." +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Posted Journal Items" +msgstr "" + +#. module: account +#: field:account.move.line,blocked:0 +msgid "No Follow-up" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Search Tax Templates" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.periodical_processing_journal_entries_validation +msgid "Draft Entries" +msgstr "" + +#. module: account +#: help:account.config.settings,decimal_precision:0 +msgid "" +"As an example, a decimal precision of 2 will allow journal entries like: " +"9.99 EUR, whereas a decimal precision of 4 will allow journal entries like: " +"0.0231 EUR." +msgstr "" + +#. module: account +#: field:account.account,shortcut:0 +#: field:account.account.template,shortcut:0 +msgid "Shortcut" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,user_type:0 +#: view:account.account.template:0 +#: field:account.account.template,user_type:0 +#: view:account.account.type:0 +#: field:account.account.type,name:0 +#: field:account.bank.accounts.wizard,account_type:0 +#: field:account.entries.report,user_type:0 +#: selection:account.financial.report,type:0 +#: model:ir.model,name:account.model_account_account_type +#: field:report.account.receivable,type:0 +#: field:report.account_type.sales,user_type:0 +msgid "Account Type" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Close CashBox" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_cancel +msgid "Cancel the Selected Invoices" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:424 +#, python-format +msgid "You have to assign an analytic journal on the '%s' journal!" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_supplieranalyticcost0 +msgid "" +"Analytic costs (timesheets, some purchased products, ...) come from analytic " +"accounts. These generate draft supplier invoices." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_bank_tree +msgid "" +"

\n" +" Click to setup a new bank account. \n" +"

\n" +" Configure your company's bank account and select those that " +"must\n" +" appear on the report footer.\n" +"

\n" +" If you use the accounting application of OpenERP, journals and\n" +" accounts will be created automatically based on these data.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: constraint:account.tax.code.template:0 +msgid "" +"Error!\n" +"You cannot create recursive Tax Codes." +msgstr "" + +#. module: account +#: constraint:account.period:0 +msgid "" +"Error!\n" +"The duration of the Period(s) is/are invalid." +msgstr "" + +#. module: account +#: field:account.entries.report,month:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,month:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,month:0 +#: field:report.account.sales,month:0 +#: field:report.account_type.sales,month:0 +msgid "Month" +msgstr "" + +#. module: account +#: code:addons/account/account.py:668 +#, python-format +msgid "You cannot change the code of account which contains journal items!" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_sequence_prefix:0 +msgid "Supplier invoice sequence" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:610 +#: code:addons/account/account_invoice.py:625 +#, python-format +msgid "" +"Cannot find a chart of account, you should create one from Settings\\" +"Configuration\\Accounting menu." +msgstr "" + +#. module: account +#: field:account.entries.report,product_uom_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,product_uom_id:0 +msgid "Product Unit of Measure" +msgstr "" + +#. module: account +#: field:res.company,paypal_account:0 +msgid "Paypal Account" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Acc.Type" +msgstr "" + +#. module: account +#: selection:account.journal,type:0 +msgid "Bank and Checks" +msgstr "" + +#. module: account +#: field:account.account.template,note:0 +msgid "Note" +msgstr "" + +#. module: account +#: selection:account.financial.report,sign:0 +msgid "Reverse balance sign" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:191 +#, python-format +msgid "Balance Sheet (Liability account)" +msgstr "" + +#. module: account +#: help:account.invoice,date_invoice:0 +msgid "Keep empty to use the current date" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.cashbox.line,subtotal_closing:0 +msgid "Closing Subtotal" +msgstr "" + +#. module: account +#: field:account.tax,base_code_id:0 +msgid "Account Base Code" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:864 +#, python-format +msgid "" +"You have to provide an account for the write off/exchange difference entry." +msgstr "" + +#. module: account +#: help:res.company,paypal_account:0 +msgid "Paypal username (usually email) for receiving online payments." +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,target_move:0 +#: selection:account.balance.report,target_move:0 +#: selection:account.central.journal,target_move:0 +#: selection:account.chart,target_move:0 +#: selection:account.common.account.report,target_move:0 +#: selection:account.common.journal.report,target_move:0 +#: selection:account.common.partner.report,target_move:0 +#: selection:account.common.report,target_move:0 +#: selection:account.general.journal,target_move:0 +#: selection:account.partner.balance,target_move:0 +#: selection:account.partner.ledger,target_move:0 +#: selection:account.print.journal,target_move:0 +#: selection:account.report.general.ledger,target_move:0 +#: selection:account.tax.chart,target_move:0 +#: selection:account.vat.declaration,target_move:0 +#: selection:accounting.report,target_move:0 +#: code:addons/account/report/common_report_header.py:68 +#, python-format +msgid "All Posted Entries" +msgstr "" + +#. module: account +#: field:report.aged.receivable,name:0 +msgid "Month Range" +msgstr "" + +#. module: account +#: help:account.analytic.balance,empty_acc:0 +msgid "Check if you want to display Accounts with 0 balance too." +msgstr "" + +#. module: account +#: field:account.move.reconcile,opening_reconciliation:0 +msgid "Opening Entries Reconciliation" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/xml/account_move_reconciliation.xml:24 +#, python-format +msgid "Last Reconciliation:" +msgstr "" + +#. module: account +#: selection:account.move.line,state:0 +msgid "Balanced" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_importinvoice0 +msgid "Statement from invoice or payment" +msgstr "" + +#. module: account +#: code:addons/account/installer.py:115 +#, python-format +msgid "" +"There is currently no company without chart of account. The wizard will " +"therefore not be executed." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_wizard_multi_chart +msgid "Set Your Accounting Options" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_chart +msgid "Account chart" +msgstr "" + +#. module: account +#: field:account.invoice,reference_type:0 +msgid "Payment Reference" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Main Title 1 (bold, underlined)" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.central.journal:0 +msgid "Account Name" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close,report_name:0 +msgid "Give name of the new entries" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_report +msgid "Invoices Statistics" +msgstr "" + +#. module: account +#: field:account.account,exchange_rate:0 +msgid "Exchange Rate" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentorderreconcilation0 +msgid "Bank statements are entered in the system." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_reconcile.py:122 +#, python-format +msgid "Reconcile Writeoff" +msgstr "" + +#. module: account +#: view:account.account.template:0 +#: view:account.chart.template:0 +msgid "Account Template" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Closing Balance" +msgstr "" + +#. module: account +#: field:account.chart.template,visible:0 +msgid "Can be Visible?" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_journal_select +msgid "Account Journal Select" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Credit Notes" +msgstr "" + +#. module: account +#: view:account.move.line:0 +#: model:ir.actions.act_window,name:account.action_account_manual_reconcile +msgid "Journal Items to Reconcile" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_tax_template +msgid "Templates for Taxes" +msgstr "" + +#. module: account +#: sql_constraint:account.period:0 +msgid "The name of the period must be unique per company!" +msgstr "" + +#. module: account +#: help:wizard.multi.charts.accounts,currency_id:0 +msgid "Currency as per company's country." +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Tax Computation" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "res_config_contents" +msgstr "" + +#. module: account +#: help:account.chart.template,visible:0 +msgid "" +"Set this to False if you don't want this template to be used actively in the " +"wizard that generate Chart of Accounts from templates, this is useful when " +"you want to generate accounts of this template only when loading its child " +"template." +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Create Entries From Models" +msgstr "" + +#. module: account +#: field:account.account,reconcile:0 +#: field:account.account.template,reconcile:0 +msgid "Allow Reconciliation" +msgstr "" + +#. module: account +#: constraint:account.account:0 +msgid "" +"Error!\n" +"You cannot create an account which has parent account of different company." +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:658 +#, python-format +msgid "" +"Cannot find any account journal of %s type for this company.\n" +"\n" +"You can create one in the menu: \n" +"Configuration\\Journals\\Journals." +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Based On" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3204 +#, python-format +msgid "ECNJ" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report +msgid "Account Analytic Cost Ledger For Journal Report" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_model_form +msgid "Recurring Models" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Children/Sub Taxes" +msgstr "" + +#. module: account +#: xsl:account.transfer:0 +msgid "Change" +msgstr "" + +#. module: account +#: field:account.journal,type_control_ids:0 +msgid "Type Controls" +msgstr "" + +#. module: account +#: help:account.journal,default_credit_account_id:0 +msgid "It acts as a default account for credit amount" +msgstr "" + +#. module: account +#: view:cash.box.out:0 +msgid "Describe why you take money from the cash register:" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: selection:account.invoice.report,state:0 +#: selection:report.invoice.created,state:0 +msgid "Cancelled" +msgstr "" + +#. module: account +#: help:account.config.settings,group_proforma_invoices:0 +msgid "Allows you to put invoices in pro-forma state." +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Unit Of Currency Definition" +msgstr "" + +#. module: account +#: help:account.partner.ledger,amount_currency:0 +#: help:account.report.general.ledger,amount_currency:0 +msgid "" +"It adds the currency column on report if the currency differs from the " +"company currency." +msgstr "" + +#. module: account +#: code:addons/account/account.py:3394 +#, python-format +msgid "Purchase Tax %.2f%%" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +#: model:ir.actions.act_window,name:account.action_account_subscription_generate +#: model:ir.ui.menu,name:account.menu_generate_subscription +msgid "Generate Entries" +msgstr "" + +#. module: account +#: help:account.vat.declaration,chart_tax_id:0 +msgid "Select Charts of Taxes" +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 "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Confirmed" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Cancelled Invoice" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "My Invoices" +msgstr "" + +#. module: account +#: selection:account.bank.statement,state:0 +msgid "New" +msgstr "" + +#. module: account +#: view:wizard.multi.charts.accounts:0 +msgid "Sale Tax" +msgstr "" + +#. module: account +#: field:account.tax,ref_tax_code_id:0 +#: field:account.tax.template,ref_tax_code_id:0 +msgid "Refund Tax Code" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Invoice " +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income:0 +msgid "Income Account on Product Template" +msgstr "" + +#. module: account +#: help:account.journal.period,state:0 +msgid "" +"When journal period is created. The status is 'Draft'. If a report is " +"printed it comes to 'Printed' status. When all transactions are done, it " +"comes in 'Done' status." +msgstr "" + +#. module: account +#: code:addons/account/account.py:3205 +#, python-format +msgid "MISC" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,fy2_id:0 +msgid "New Fiscal Year" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.tax:0 +#: view:account.tax.template:0 +#: selection:account.vat.declaration,based_on:0 +#: model:ir.actions.act_window,name:account.act_res_partner_2_account_invoice_opened +#: model:ir.actions.act_window,name:account.action_invoice_tree +#: model:ir.actions.report.xml,name:account.account_invoices +#: view:report.invoice.created:0 +#: field:res.partner,invoice_ids:0 +msgid "Invoices" +msgstr "" + +#. module: account +#: help:account.config.settings,expects_chart_of_accounts:0 +msgid "Check this box if this company is a legal entity." +msgstr "" + +#. module: account +#: model:account.account.type,name:account.conf_account_type_chk +#: selection:account.bank.accounts.wizard,account_type:0 +msgid "Check" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.analytic.balance:0 +#: view:account.analytic.chart:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.cost.ledger.journal.report:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: view:account.automatic.reconcile:0 +#: view:account.change.currency:0 +#: view:account.chart:0 +#: view:account.common.report:0 +#: view:account.config.settings:0 +#: view:account.fiscalyear.close:0 +#: view:account.fiscalyear.close.state:0 +#: view:account.invoice.cancel:0 +#: view:account.invoice.confirm:0 +#: view:account.invoice.refund:0 +#: view:account.journal.select:0 +#: view:account.move.bank.reconcile:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.select:0 +#: view:account.move.line.reconcile.writeoff:0 +#: view:account.move.line.unreconcile.select:0 +#: view:account.open.closed.fiscalyear:0 +#: view:account.period.close:0 +#: view:account.state.open:0 +#: view:account.subscription.generate:0 +#: view:account.tax.chart:0 +#: view:account.unreconcile:0 +#: view:account.use.model:0 +#: view:account.vat.declaration:0 +#: view:cash.box.in:0 +#: view:cash.box.out:0 +#: view:project.account.analytic.line:0 +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "or" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Invoiced" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Posted Journal Entries" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Use Model" +msgstr "" + +#. module: account +#: help:account.invoice,partner_bank_id:0 +msgid "" +"Bank Account Number to which the invoice will be paid. A Company bank " +"account if this is a Customer Invoice or Supplier Refund, otherwise a " +"Partner bank account number." +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,today_reconciled:0 +msgid "Partners Reconciled Today" +msgstr "" + +#. module: account +#: help:account.invoice.tax,tax_code_id:0 +msgid "The tax basis of the tax declaration." +msgstr "" + +#. module: account +#: view:account.addtmpl.wizard:0 +msgid "Add" +msgstr "" + +#. module: account +#: selection:account.invoice,state:0 +#: report:account.overdue:0 +#: model:mail.message.subtype,name:account.mt_invoice_paid +msgid "Paid" +msgstr "" + +#. module: account +#: field:account.invoice,tax_line:0 +msgid "Tax Lines" +msgstr "" + +#. module: account +#: help:account.move.line,statement_id:0 +msgid "The bank statement used for bank reconciliation" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_suppliercustomerinvoice0 +msgid "Draft invoices are validated. " +msgstr "" + +#. module: account +#: help:account.tax,account_collected_id:0 +msgid "" +"Set the account that will be set by default on invoice tax lines for " +"invoices. Leave empty to use the expense account." +msgstr "" + +#. module: account +#: code:addons/account/account.py:890 +#, python-format +msgid "Opening Period" +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Journal Entries to Review" +msgstr "" + +#. module: account +#: selection:res.company,tax_calculation_rounding_method:0 +msgid "Round Globally" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.subscription:0 +msgid "Compute" +msgstr "" + +#. module: account +#: field:account.tax,type_tax_use:0 +msgid "Tax Application" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:922 +#, python-format +msgid "" +"Please verify the price of the invoice !\n" +"The encoded total does not match the computed total." +msgstr "" + +#. module: account +#: field:account.account,active:0 +#: field:account.analytic.journal,active:0 +#: field:account.fiscal.position,active:0 +#: field:account.journal.period,active:0 +#: field:account.payment.term,active:0 +#: field:account.tax,active:0 +msgid "Active" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.journal,cash_control:0 +msgid "Cash Control" +msgstr "" + +#. module: account +#: field:account.analytic.balance,date2:0 +#: field:account.analytic.cost.ledger,date2:0 +#: field:account.analytic.cost.ledger.journal.report,date2:0 +#: field:account.analytic.inverted.balance,date2:0 +#: field:account.analytic.journal.report,date2:0 +msgid "End of period" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaymentorder0 +msgid "Payment of invoices" +msgstr "" + +#. module: account +#: sql_constraint:account.invoice:0 +msgid "Invoice Number must be unique per Company!" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_receivable_graph +msgid "Balance by Type of Account" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:301 +#, python-format +msgid "There is no %s Account on the journal %s." +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_account_user +msgid "Accountant" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_treasury_report_all +msgid "" +"From this view, have an analysis of your treasury. It sums the balance of " +"every accounting entries made on liquidity accounts per period." +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_account_manager +msgid "Financial Manager" +msgstr "" + +#. module: account +#: field:account.journal,group_invoice_lines:0 +msgid "Group Invoice Lines" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +msgid "Close" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,move_ids:0 +msgid "Moves" +msgstr "" + +#. module: account +#: field:account.bank.statement,details_ids:0 +#: view:account.journal:0 +msgid "CashBox Lines" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_vat_declaration +msgid "Account Vat Declaration" +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_accountant:0 +msgid "" +"If you do not check this box, you will be able to do invoicing & payments, " +"but not accounting (Journal Items, Chart of Accounts, ...)" +msgstr "" + +#. module: account +#: view:account.period:0 +msgid "To Close" +msgstr "" + +#. module: account +#: field:account.treasury.report,date:0 +msgid "Beginning of Period Date" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.account_template_folder +msgid "Templates" +msgstr "" + +#. module: account +#: field:account.invoice.tax,name:0 +msgid "Tax Description" +msgstr "" + +#. module: account +#: field:account.tax,child_ids:0 +msgid "Child Tax Accounts" +msgstr "" + +#. module: account +#: help:account.tax,price_include:0 +#: help:account.tax.template,price_include:0 +msgid "" +"Check this if the price you use on the product and invoices includes this " +"tax." +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +msgid "Analytic Balance -" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,target_move:0 +#: field:account.balance.report,target_move:0 +#: report:account.central.journal:0 +#: field:account.central.journal,target_move:0 +#: field:account.chart,target_move:0 +#: field:account.common.account.report,target_move:0 +#: field:account.common.journal.report,target_move:0 +#: field:account.common.partner.report,target_move:0 +#: field:account.common.report,target_move:0 +#: 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 +#: report:account.journal.period.print.sale.purchase:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,target_move:0 +#: field:account.partner.ledger,target_move:0 +#: field:account.print.journal,target_move:0 +#: field:account.report.general.ledger,target_move:0 +#: field:account.tax.chart,target_move:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,target_move:0 +#: field:accounting.report,target_move:0 +msgid "Target Moves" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1454 +#, python-format +msgid "" +"Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: help:account.cashbox.line,number_opening:0 +msgid "Opening Unit Numbers" +msgstr "" + +#. module: account +#: field:account.subscription,period_type:0 +msgid "Period Type" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,payment_ids:0 +#: selection:account.vat.declaration,based_on:0 +msgid "Payments" +msgstr "" + +#. module: account +#: field:account.subscription.line,move_id:0 +msgid "Entry" +msgstr "" + +#. module: account +#: field:account.tax,python_compute_inv:0 +#: field:account.tax.template,python_compute_inv:0 +msgid "Python Code (reverse)" +msgstr "" + +#. module: account +#: field:account.invoice,payment_term:0 +#: model:ir.actions.act_window,name:account.action_payment_term_form +#: model:ir.ui.menu,name:account.menu_action_payment_term_form +msgid "Payment Terms" +msgstr "" + +#. module: account +#: help:account.chart.template,complete_tax_set:0 +msgid "" +"This boolean helps you to choose if you want to propose to the user to " +"encode the sale and purchase rates or choose from list of taxes. This last " +"choice assumes that the set of tax defined on this template is complete" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +#: field:account.financial.report,children_ids:0 +#: model:ir.model,name:account.model_account_financial_report +msgid "Account Report" +msgstr "" + +#. module: account +#: field:account.entries.report,year:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,year:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,year:0 +#: view:report.account.sales:0 +#: field:report.account.sales,name:0 +#: view:report.account_type.sales:0 +#: field:report.account_type.sales,name:0 +msgid "Year" +msgstr "" + +#. module: account +#: help:account.invoice,sent:0 +msgid "It indicates that the invoice has been sent." +msgstr "" + +#. module: account +#: field:account.tax.template,description:0 +msgid "Internal Name" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1185 +#, python-format +msgid "" +"Cannot create an automatic sequence for this piece.\n" +"Put a sequence in the journal definition for automatic numbering or create a " +"sequence manually for this piece." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Pro Forma Invoice " +msgstr "" + +#. module: account +#: selection:account.subscription,period_type:0 +msgid "month" +msgstr "" + +#. module: account +#: view:account.move.line:0 +#: field:account.partner.reconcile.process,next_partner_id:0 +msgid "Next Partner to Reconcile" +msgstr "" + +#. module: account +#: field:account.invoice.tax,account_id:0 +#: field:account.move.line,tax_code_id:0 +msgid "Tax Account" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_balancesheet0 +#: model:ir.actions.act_window,name:account.action_account_report_bs +#: model:ir.ui.menu,name:account.menu_account_report_bs +msgid "Balance Sheet" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:188 +#, python-format +msgid "Profit & Loss (Income account)" +msgstr "" + +#. module: account +#: field:account.journal,allow_date:0 +msgid "Check Date in Period" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.final_accounting_reports +msgid "Accounting Reports" +msgstr "" + +#. module: account +#: field:account.move,line_id:0 +#: view:analytic.entries.report:0 +#: model:ir.actions.act_window,name:account.action_move_line_form +msgid "Entries" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "This Period" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Compute Code (if type=code)" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:508 +#, python-format +msgid "" +"Cannot find a chart of accounts for this company, you should create one." +msgstr "" + +#. module: account +#: selection:account.analytic.journal,type:0 +#: view:account.config.settings:0 +#: view:account.journal:0 +#: selection:account.journal,type:0 +#: view:account.model:0 +#: selection:account.tax,type_tax_use:0 +#: view:account.tax.template:0 +#: selection:account.tax.template,type_tax_use:0 +msgid "Sale" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_automatic_reconcile +msgid "Automatic Reconcile" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.bank.statement.line,amount:0 +#: report:account.invoice:0 +#: field:account.invoice.line,price_subtotal:0 +#: field:account.invoice.tax,amount:0 +#: view:account.move:0 +#: field:account.move,amount:0 +#: view:account.move.line:0 +#: field:account.tax,amount:0 +#: field:account.tax.template,amount:0 +#: xsl:account.transfer:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,amount:0 +#: field:cash.box.in,amount:0 +#: field:cash.box.out,amount:0 +msgid "Amount" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_fiscalyear_close.py:41 +#, python-format +msgid "End of Fiscal Year Entry" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_customerinvoice0 +#: model:process.transition,name:account.process_transition_paymentorderreconcilation0 +#: model:process.transition,name:account.process_transition_statemententries0 +#: model:process.transition,name:account.process_transition_suppliercustomerinvoice0 +#: model:process.transition,name:account.process_transition_suppliervalidentries0 +#: model:process.transition,name:account.process_transition_validentries0 +msgid "Validation" +msgstr "" + +#. module: account +#: help:account.bank.statement,message_summary:0 +#: help:account.invoice,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: account +#: field:account.tax,child_depend:0 +#: field:account.tax.template,child_depend:0 +msgid "Tax on Children" +msgstr "" + +#. module: account +#: help:res.partner,last_reconciliation_date:0 +msgid "" +"Date on which the partner accounting entries were fully reconciled last " +"time. It differs from the date of the last reconciliation made for this " +"partner, as here we depict the fact that nothing more was to be reconciled " +"at this date. This can be achieved in 2 ways: either the last debit/credit " +"entry was reconciled, either the user pressed the button \"Fully " +"Reconciled\" in the manual reconciliation process" +msgstr "" + +#. module: account +#: field:account.journal,update_posted:0 +msgid "Allow Cancelling Entries" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_use_model.py:44 +#, python-format +msgid "" +"Maturity date of entry line generated by model line '%s' is based on partner " +"payment term!\n" +"Please define partner on it!" +msgstr "" + +#. module: account +#: field:account.tax.code,sign:0 +msgid "Coefficent for parent" +msgstr "" + +#. module: account +#: report:account.partner.balance:0 +msgid "(Account/Partner) Name" +msgstr "" + +#. module: account +#: field:account.partner.reconcile.process,progress:0 +msgid "Progress" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,bank_accounts_id:0 +msgid "Cash and Banks" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_installer +msgid "account.installer" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Recompute taxes and total" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1116 +#, python-format +msgid "You cannot modify/delete a journal with entries for this period." +msgstr "" + +#. module: account +#: field:account.tax.template,include_base_amount:0 +msgid "Include in Base Amount" +msgstr "" + +#. module: account +#: field:account.invoice,supplier_invoice_number:0 +msgid "Supplier Invoice Number" +msgstr "" + +#. module: account +#: help:account.payment.term.line,days:0 +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 "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Amount Computation" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1105 +#, python-format +msgid "You can not add/modify entries in a closed period %s of journal %s." +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Entry Controls" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +#: view:project.account.analytic.line:0 +msgid "(Keep empty to open the current situation)" +msgstr "" + +#. module: account +#: field:account.analytic.balance,date1:0 +#: field:account.analytic.cost.ledger,date1:0 +#: field:account.analytic.cost.ledger.journal.report,date1:0 +#: field:account.analytic.inverted.balance,date1:0 +#: field:account.analytic.journal.report,date1:0 +msgid "Start of period" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_asset_view1 +msgid "Asset View" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_account_report +msgid "Account Common Account Report" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: view:account.bank.statement:0 +#: selection:account.bank.statement,state:0 +#: view:account.fiscalyear:0 +#: selection:account.fiscalyear,state:0 +#: selection:account.invoice,state:0 +#: selection:account.invoice.report,state:0 +#: selection:account.period,state:0 +#: selection:report.invoice.created,state:0 +msgid "Open" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +#: model:ir.ui.menu,name:account.menu_analytic_accounting +msgid "Analytic Accounting" +msgstr "" + +#. module: account +#: help:account.payment.term.line,value:0 +msgid "" +"Select here the kind of valuation related to this payment term line. Note " +"that you should have your last line with the type 'Balance' to ensure that " +"the whole amount will be treated." +msgstr "" + +#. module: account +#: field:account.partner.ledger,initial_balance:0 +#: field:account.report.general.ledger,initial_balance:0 +msgid "Include Initial Balances" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +msgid "Tax Codes" +msgstr "" + +#. module: account +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: selection:report.invoice.created,type:0 +msgid "Customer Refund" +msgstr "" + +#. module: account +#: field:account.tax,ref_tax_sign:0 +#: field:account.tax,tax_sign:0 +#: field:account.tax.template,ref_tax_sign:0 +#: field:account.tax.template,tax_sign:0 +msgid "Tax Code Sign" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_invoice_created +msgid "Report of Invoices Created within Last 15 days" +msgstr "" + +#. module: account +#: field:account.fiscalyear,end_journal_period_id:0 +msgid "End of Year Entries Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Draft Refund " +msgstr "" + +#. module: account +#: view:cash.box.in:0 +msgid "Fill in this form if you put money in the cash register:" +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +#: field:account.payment.term.line,value_amount:0 +msgid "Amount To Pay" +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,to_reconcile:0 +msgid "" +"This is the remaining partners for who you should check if there is " +"something to reconcile or not. This figure already count the current partner " +"as reconciled." +msgstr "" + +#. module: account +#: view:account.subscription.line:0 +msgid "Subscription lines" +msgstr "" + +#. module: account +#: field:account.entries.report,quantity:0 +msgid "Products Quantity" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: selection:account.entries.report,move_state:0 +#: view:account.move:0 +#: selection:account.move,state:0 +#: view:account.move.line:0 +msgid "Unposted" +msgstr "" + +#. module: account +#: view:account.change.currency:0 +#: model:ir.actions.act_window,name:account.action_account_change_currency +#: model:ir.model,name:account.model_account_change_currency +msgid "Change Currency" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_accountingentries0 +#: model:process.node,note:account.process_node_supplieraccountingentries0 +msgid "Accounting entries." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Payment Date" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,opening_details_ids:0 +msgid "Opening Cashbox Lines" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_account_form +#: model:ir.ui.menu,name:account.account_analytic_def_account +msgid "Analytic Accounts" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer Invoices And Refunds" +msgstr "" + +#. module: account +#: field:account.analytic.line,amount_currency:0 +#: field:account.entries.report,amount_currency:0 +#: field:account.model.line,amount_currency:0 +#: field:account.move.line,amount_currency:0 +msgid "Amount Currency" +msgstr "" + +#. module: account +#: selection:res.company,tax_calculation_rounding_method:0 +msgid "Round per Line" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: report:account.invoice:0 +#: field:account.invoice.line,quantity:0 +#: field:account.model.line,quantity:0 +#: field:account.move.line,quantity:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,unit_amount:0 +#: field:report.account.sales,quantity:0 +#: field:report.account_type.sales,quantity:0 +msgid "Quantity" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Number (Move)" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Normal Text" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentreconcile0 +msgid "Payment entries are the second input of the reconciliation." +msgstr "" + +#. module: account +#: help:res.partner,property_supplier_payment_term:0 +msgid "" +"This payment term will be used instead of the default one for purchase " +"orders and supplier invoices" +msgstr "" + +#. module: account +#: help:account.automatic.reconcile,power:0 +msgid "" +"Number of partial amounts that can be combined to find a balance point can " +"be chosen as the power of the automatic reconciliation" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_aged_partner_balance.py:56 +#, python-format +msgid "You must set a period length greater than 0." +msgstr "" + +#. module: account +#: view:account.fiscal.position.template:0 +#: field:account.fiscal.position.template,name:0 +msgid "Fiscal Position Template" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Draft Refund" +msgstr "" + +#. module: account +#: view:account.analytic.chart:0 +#: view:account.chart:0 +#: view:account.tax.chart:0 +msgid "Open Charts" +msgstr "" + +#. module: account +#: field:account.central.journal,amount_currency:0 +#: field:account.common.journal.report,amount_currency:0 +#: field:account.general.journal,amount_currency:0 +#: field:account.partner.ledger,amount_currency:0 +#: field:account.print.journal,amount_currency:0 +#: field:account.report.general.ledger,amount_currency:0 +msgid "With Currency" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Open CashBox" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Automatic formatting" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +msgid "Reconcile With Write-Off" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "You cannot create journal items on an account of type view." +msgstr "" + +#. module: account +#: selection:account.payment.term.line,value:0 +#: selection:account.tax,type:0 +msgid "Fixed Amount" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1056 +#, python-format +msgid "You cannot change the tax, you should remove and recreate lines." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_automatic_reconcile +msgid "Account Automatic Reconcile" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Journal Item" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear_close +#: model:ir.ui.menu,name:account.menu_wizard_fy_close +msgid "Generate Opening Entries" +msgstr "" + +#. module: account +#: help:account.tax,type:0 +msgid "The computation method for the tax amount." +msgstr "" + +#. module: account +#: view:account.payment.term.line:0 +msgid "Due Date Computation" +msgstr "" + +#. module: account +#: field:report.invoice.created,create_date:0 +msgid "Create Date" +msgstr "" + +#. module: account +#: view:account.analytic.journal:0 +#: field:account.analytic.journal.report,analytic_account_journal_id:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_journal_form +#: model:ir.ui.menu,name:account.account_def_analytic_journal +msgid "Analytic Journals" +msgstr "" + +#. module: account +#: field:account.account,child_id:0 +msgid "Child Accounts" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1117 +#, python-format +msgid "Move name (id): %s (%s)" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +#: code:addons/account/account_move_line.py:879 +#, python-format +msgid "Write-Off" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "entries" +msgstr "" + +#. module: account +#: field:res.partner,debit:0 +msgid "Total Payable" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_income +#: model:account.financial.report,name:account.account_financial_report_income0 +msgid "Income" +msgstr "" + +#. module: account +#: selection:account.bank.statement.line,type:0 +#: view:account.config.settings:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:390 +#, python-format +msgid "Supplier" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "March" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "Account n°" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:95 +#, python-format +msgid "Free Reference" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,result_selection:0 +#: selection:account.common.partner.report,result_selection:0 +#: selection:account.partner.balance,result_selection:0 +#: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: code:addons/account/report/account_partner_balance.py:301 +#: code:addons/account/report/account_partner_ledger.py:276 +#, python-format +msgid "Receivable and Payable Accounts" +msgstr "" + +#. module: account +#: field:account.fiscal.position.account.template,position_id:0 +msgid "Fiscal Mapping" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Select Company" +msgstr "" + +#. module: account +#: 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 "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Max Qty:" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_refund +msgid "Refund Invoice" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_entries_report_all +msgid "" +"From this view, have an analysis of your different financial accounts. The " +"document shows your debit and credit taking in consideration some criteria " +"you can choose by using the search tool." +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,progress:0 +msgid "" +"Shows you the progress made today on the reconciliation process. Given by \n" +"Partners Reconciled Today \\ (Remaining Partners + Partners Reconciled Today)" +msgstr "" + +#. module: account +#: field:account.invoice,period_id:0 +#: field:account.invoice.report,period_id:0 +#: field:report.account.sales,period_id:0 +#: field:report.account_type.sales,period_id:0 +msgid "Force Period" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_form +msgid "" +"

\n" +" Click to add an account.\n" +"

\n" +" An account is part of a ledger allowing your company\n" +" to register all kinds of debit and credit transactions.\n" +" Companies present their annual accounts in two main parts: " +"the\n" +" balance sheet and the income statement (profit and loss\n" +" account). The annual accounts of a company are required by " +"law\n" +" to disclose a certain amount of information.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "(update)" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,filter:0 +#: field:account.balance.report,filter:0 +#: field:account.central.journal,filter:0 +#: field:account.common.account.report,filter:0 +#: field:account.common.journal.report,filter:0 +#: field:account.common.partner.report,filter:0 +#: field:account.common.report,filter:0 +#: field:account.general.journal,filter:0 +#: field:account.partner.balance,filter:0 +#: field:account.partner.ledger,filter:0 +#: field:account.print.journal,filter:0 +#: field:account.report.general.ledger,filter:0 +#: field:account.vat.declaration,filter:0 +#: field:accounting.report,filter:0 +#: field:accounting.report,filter_cmp:0 +msgid "Filter by" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2334 +#, python-format +msgid "You have a wrong expression \"%(...)s\" in your model !" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Compute Code for Taxes Included Prices" +msgstr "" + +#. module: account +#: help:account.bank.statement,balance_end:0 +msgid "Balance as calculated based on Starting Balance and transaction lines" +msgstr "" + +#. module: account +#: field:account.journal,loss_account_id:0 +msgid "Loss Account" +msgstr "" + +#. module: account +#: field:account.tax,account_collected_id:0 +#: field:account.tax.template,account_collected_id:0 +msgid "Invoice Tax Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_general_journal +#: model:ir.model,name:account.model_account_general_journal +msgid "Account General Journal" +msgstr "" + +#. module: account +#: help:account.move,state:0 +msgid "" +"All manually created new journal entries are usually in the status " +"'Unposted', but you can set the option to skip that status on the related " +"journal. In that case, they will behave as journal entries automatically " +"created by the system on document validation (invoices, bank statements...) " +"and will be created in 'Posted' status." +msgstr "" + +#. module: account +#: field:account.payment.term.line,days:0 +msgid "Number of Days" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1357 +#, python-format +msgid "" +"You cannot validate this journal entry because account \"%s\" does not " +"belong to chart of accounts \"%s\"." +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Report" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_tax_template +msgid "Template Tax Fiscal Position" +msgstr "" + +#. module: account +#: help:account.tax,name:0 +msgid "This name will be displayed on reports" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Printing date" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,type:0 +msgid "None" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree3 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree3 +msgid "Customer Refunds" +msgstr "" + +#. module: account +#: field:account.account,foreign_balance:0 +msgid "Foreign Balance" +msgstr "" + +#. module: account +#: field:account.journal.period,name:0 +msgid "Journal-Period Name" +msgstr "" + +#. module: account +#: field:account.invoice.tax,factor_base:0 +msgid "Multipication factor for Base code" +msgstr "" + +#. module: account +#: help:account.journal,company_id:0 +msgid "Company related to this journal" +msgstr "" + +#. module: account +#: help:account.config.settings,group_multi_currency:0 +msgid "Allows you multi currency environment" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Running Subscription" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Fiscal Position Remark :" +msgstr "" + +#. module: account +#: view:analytic.entries.report:0 +#: model:ir.actions.act_window,name:account.action_analytic_entries_report +#: model:ir.ui.menu,name:account.menu_action_analytic_entries_report +msgid "Analytic Entries Analysis" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Past" +msgstr "" + +#. module: account +#: help:res.partner.bank,journal_id:0 +msgid "" +"This journal will be created automatically for this bank account when you " +"save the record" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Entry" +msgstr "" + +#. module: account +#: view:res.company:0 +#: field:res.company,overdue_msg:0 +msgid "Overdue Payments Message" +msgstr "" + +#. module: account +#: field:account.entries.report,date_created:0 +msgid "Date Created" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_account_line_extended_form +msgid "account.analytic.line.extended" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_supplierreconcilepaid0 +msgid "" +"As soon as the reconciliation is done, the invoice's state turns to “done” " +"(i.e. paid) in the system." +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,account_root_id:0 +msgid "Root Account" +msgstr "" + +#. module: account +#: field:res.partner,last_reconciliation_date:0 +msgid "Latest Reconciliation Date" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: model:ir.model,name:account.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_action_model_form +msgid "Models" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1124 +#, python-format +msgid "" +"You cannot cancel an invoice which is partially paid. You need to " +"unreconcile related payment entries first." +msgstr "" + +#. module: account +#: field:product.template,taxes_id:0 +msgid "Customer Taxes" +msgstr "" + +#. module: account +#: help:account.model,name:0 +msgid "This is a model for recurring accounting entries" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,sale_tax_rate:0 +msgid "Sales Tax(%)" +msgstr "" + +#. module: account +#: view:account.tax.code:0 +msgid "Reporting Configuration" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_invoice_tree4 +msgid "" +"

\n" +" Click to register a refund you received from a supplier.\n" +"

\n" +" Instead of creating the supplier refund manually, you can " +"generate\n" +" refunds and reconcile them directly from the related " +"supplier invoice.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: field:account.tax,type:0 +#: field:account.tax.template,type:0 +msgid "Tax Type" +msgstr "" + +#. module: account +#: 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 "" + +#. module: account +#: help:account.config.settings,complete_tax_set:0 +#: help:wizard.multi.charts.accounts,complete_tax_set:0 +msgid "" +"This boolean helps you to choose if you want to propose to the user to " +"encode the sales and purchase rates or use the usual m2o fields. This last " +"choice assumes that the set of tax defined for the chosen template is " +"complete" +msgstr "" + +#. module: account +#: report:account.vat.declaration:0 +msgid "Tax Statement" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_res_company +msgid "Companies" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Open and Paid Invoices" +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "Display children flat" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Bank & Cash" +msgstr "" + +#. module: account +#: help:account.fiscalyear.close.state,fy_id:0 +msgid "Select a fiscal year to close" +msgstr "" + +#. module: account +#: help:account.chart.template,tax_template_ids:0 +msgid "List of all the taxes that have to be installed by the wizard" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_intracom +msgid "IntraCom" +msgstr "" + +#. module: account +#: view:account.move.line.reconcile.writeoff:0 +msgid "Information addendum" +msgstr "" + +#. module: account +#: field:account.chart,fiscalyear:0 +#: view:account.fiscalyear:0 +msgid "Fiscal year" +msgstr "" + +#. module: account +#: view:account.move.reconcile:0 +msgid "Partial Reconcile Entries" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.analytic.balance:0 +#: view:account.analytic.chart:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.cost.ledger.journal.report:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: view:account.automatic.reconcile:0 +#: view:account.change.currency:0 +#: view:account.chart:0 +#: view:account.common.report:0 +#: view:account.config.settings:0 +#: view:account.fiscalyear.close:0 +#: view:account.fiscalyear.close.state:0 +#: view:account.invoice.cancel:0 +#: view:account.invoice.confirm:0 +#: view:account.invoice.refund:0 +#: view:account.journal.select:0 +#: view:account.move.bank.reconcile:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.select:0 +#: view:account.move.line.reconcile.writeoff:0 +#: view:account.move.line.unreconcile.select:0 +#: view:account.period.close:0 +#: view:account.state.open:0 +#: view:account.subscription.generate:0 +#: view:account.tax.chart:0 +#: view:account.unreconcile:0 +#: view:account.use.model:0 +#: view:account.vat.declaration:0 +#: view:cash.box.in:0 +#: view:cash.box.out:0 +#: view:project.account.analytic.line:0 +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "Cancel" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: model:account.account.type,name:account.data_account_type_receivable +#: selection:account.entries.report,type:0 +msgid "Receivable" +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "You cannot create journal items on closed account." +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:633 +#, python-format +msgid "Invoice line account's company and invoice's compnay does not match." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Other Info" +msgstr "" + +#. module: account +#: field:account.journal,default_credit_account_id:0 +msgid "Default Credit Account" +msgstr "" + +#. module: account +#: help:account.analytic.line,currency_id:0 +msgid "The related account currency if not equal to the company one." +msgstr "" + +#. module: account +#: code:addons/account/installer.py:69 +#, python-format +msgid "Custom" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Current" +msgstr "" + +#. module: account +#: field:account.journal,cashbox_line_ids:0 +msgid "CashBox" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_cash_equity +#: model:account.account.type,name:account.conf_account_type_equity +msgid "Equity" +msgstr "" + +#. module: account +#: field:account.journal,internal_account_id:0 +msgid "Internal Transfers Account" +msgstr "" + +#. module: account +#: code:addons/account/wizard/pos_box.py:32 +#, python-format +msgid "Please check that the field 'Journal' is set on the Bank Statement" +msgstr "" + +#. module: account +#: selection:account.tax,type:0 +msgid "Percentage" +msgstr "" + +#. module: account +#: selection:account.config.settings,tax_calculation_rounding_method:0 +msgid "Round globally" +msgstr "" + +#. module: account +#: selection:account.report.general.ledger,sortby:0 +msgid "Journal & Partner" +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,power:0 +msgid "Power" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3465 +#, python-format +msgid "Cannot generate an unused journal code." +msgstr "" + +#. module: account +#: view:project.account.analytic.line:0 +msgid "View Account Analytic Lines" +msgstr "" + +#. module: account +#: field:account.invoice,internal_number:0 +#: field:report.invoice.created,number:0 +msgid "Invoice Number" +msgstr "" + +#. module: account +#: field:account.bank.statement,difference:0 +msgid "Difference" +msgstr "" + +#. module: account +#: help:account.tax,include_base_amount:0 +msgid "" +"Indicates if the amount of tax must be included in the base amount for the " +"computation of the next taxes" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_partner_reconcile +msgid "Reconciliation: Go to Next Partner" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_invert_balance +#: model:ir.actions.report.xml,name:account.account_analytic_account_inverted_balance +msgid "Inverted Analytic Balance" +msgstr "" + +#. module: account +#: field:account.tax.template,applicable_type:0 +msgid "Applicable Type" +msgstr "" + +#. module: account +#: help:account.invoice,date_due:0 +msgid "" +"If you use payment terms, the due date will be computed automatically at the " +"generation of accounting entries. The payment term may compute several due " +"dates, for example 50% now and 50% in one month, but if you want to force a " +"due date, make sure that the payment term is not set on the invoice. If you " +"keep the payment term and the due date empty, it means direct payment." +msgstr "" + +#. module: account +#: code:addons/account/account.py:414 +#, python-format +msgid "" +"There is no opening/closing period defined, please create one to set the " +"initial balance." +msgstr "" + +#. module: account +#: help:account.tax.template,sequence:0 +msgid "" +"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." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1448 +#: code:addons/account/account.py:1453 +#: code:addons/account/account.py:1482 +#: code:addons/account/account.py:1489 +#: code:addons/account/account_invoice.py:1015 +#: code:addons/account/account_move_line.py:1005 +#: code:addons/account/wizard/account_automatic_reconcile.py:148 +#: code:addons/account/wizard/account_fiscalyear_close.py:88 +#: code:addons/account/wizard/account_fiscalyear_close.py:99 +#: code:addons/account/wizard/account_fiscalyear_close.py:102 +#: code:addons/account/wizard/account_report_aged_partner_balance.py:56 +#: code:addons/account/wizard/account_report_aged_partner_balance.py:58 +#, python-format +msgid "User Error!" +msgstr "" + +#. module: account +#: view:account.open.closed.fiscalyear:0 +msgid "Discard" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: view:account.journal:0 +msgid "Liquidity" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form +#: model:ir.ui.menu,name:account.account_analytic_journal_entries +msgid "Analytic Journal Items" +msgstr "" + +#. module: account +#: field:account.config.settings,has_default_company:0 +msgid "Has default company" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close:0 +msgid "" +"This wizard will generate the end of year journal entries of selected fiscal " +"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 +msgid "Bank and Cash" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_analytic_entries_report +msgid "" +"From this view, have an analysis of your different analytic entries " +"following the analytic account you defined matching your business need. Use " +"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 "" + +#. module: account +#: field:account.account.template,nocreate:0 +msgid "Optional create" +msgstr "" + +#. module: account +#: code:addons/account/account.py:686 +#, python-format +msgid "" +"You cannot change the owner company of an account that already contains " +"journal items." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1160 +#: selection:report.invoice.created,type:0 +#, python-format +msgid "Supplier Refund" +msgstr "" + +#. module: account +#: field:account.bank.statement,move_line_ids:0 +msgid "Entry lines" +msgstr "" + +#. module: account +#: field:account.move.line,centralisation:0 +msgid "Centralisation" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.account.template:0 +#: view:account.analytic.account:0 +#: view:account.analytic.journal:0 +#: view:account.analytic.line:0 +#: view:account.bank.statement:0 +#: view:account.chart.template:0 +#: view:account.entries.report:0 +#: view:account.financial.report:0 +#: view:account.fiscalyear:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: view:account.journal:0 +#: view:account.model:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.subscription:0 +#: view:account.tax.code.template:0 +#: view:analytic.entries.report:0 +msgid "Group By..." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1024 +#, python-format +msgid "" +"There is no period defined for this date: %s.\n" +"Please create one." +msgstr "" + +#. module: account +#: field:account.analytic.line,product_uom_id:0 +#: field:account.invoice.line,uos_id:0 +#: field:account.move.line,product_uom_id:0 +msgid "Unit of Measure" +msgstr "" + +#. module: account +#: help:account.journal,group_invoice_lines:0 +msgid "" +"If this box is checked, the system will try to group the accounting lines " +"when generating them from invoices." +msgstr "" + +#. module: account +#: field:account.installer,has_default_company:0 +msgid "Has Default Company" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_sequence_fiscalyear +msgid "account.sequence.fiscalyear" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: view:account.analytic.journal:0 +#: field:account.analytic.line,journal_id:0 +#: field:account.journal,analytic_journal_id:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_journal +#: model:ir.actions.report.xml,name:account.analytic_journal_print +#: model:ir.model,name:account.model_account_analytic_journal +#: model:ir.ui.menu,name:account.account_analytic_journal_print +msgid "Analytic Journal" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Reconciled" +msgstr "" + +#. module: account +#: constraint:account.payment.term.line:0 +msgid "" +"Percentages for Payment Term Line must be between 0 and 1, Example: 0.02 for " +"2%." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: field:account.invoice.tax,base:0 +msgid "Base" +msgstr "" + +#. module: account +#: field:account.model,name:0 +msgid "Model Name" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense_categ:0 +msgid "Expense Category Account" +msgstr "" + +#. module: account +#: sql_constraint:account.tax:0 +msgid "Tax Name must be unique per company!" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Cash Transactions" +msgstr "" + +#. module: account +#: view:account.unreconcile:0 +msgid "" +"If you unreconcile transactions, you must also verify all the actions that " +"are linked to those transactions because they will not be disabled" +msgstr "" + +#. module: account +#: view:account.account.template:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement.line,note:0 +#: view:account.fiscal.position:0 +#: field:account.fiscal.position,note:0 +#: field:account.fiscal.position.template,note:0 +msgid "Notes" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_analytic_entries_report +msgid "Analytic Entries Statistics" +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:142 +#: code:addons/account/account_move_line.py:955 +#, python-format +msgid "Entries: " +msgstr "" + +#. module: account +#: help:res.partner.bank,currency_id:0 +msgid "Currency of the related account journal." +msgstr "" + +#. module: account +#: constraint:account.move.line:0 +msgid "" +"You cannot provide a secondary currency if it is the same than the company " +"one." +msgstr "" + +#. module: account +#: selection:account.tax.template,applicable_type:0 +msgid "True" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:190 +#, python-format +msgid "Balance Sheet (Asset account)" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_draftstatement0 +msgid "State is draft" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Total debit" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Next Partner Entries to reconcile" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Fax :" +msgstr "" + +#. module: account +#: help:res.partner,property_account_receivable:0 +msgid "" +"This account will be used instead of the default one as the receivable " +"account for the current partner" +msgstr "" + +#. module: account +#: field:account.tax,python_applicable:0 +#: field:account.tax,python_compute:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,applicable_type:0 +#: field:account.tax.template,python_applicable:0 +#: field:account.tax.template,python_compute:0 +#: selection:account.tax.template,type:0 +msgid "Python Code" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Journal Entries with period in current period" +msgstr "" + +#. module: account +#: help:account.journal,update_posted:0 +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 +msgid "Create" +msgstr "" + +#. module: account +#: model:process.transition.action,name:account.process_transition_action_createentries0 +msgid "Create entry" +msgstr "" + +#. module: account +#: selection:account.account.type,report_type:0 +#: code:addons/account/account.py:189 +#, python-format +msgid "Profit & Loss (Expense account)" +msgstr "" + +#. module: account +#: field:account.bank.statement,total_entry_encoding:0 +msgid "Total Transactions" +msgstr "" + +#. module: account +#: code:addons/account/account.py:636 +#, python-format +msgid "You cannot remove an account that contains journal items." +msgstr "" + +#. module: account +#: code:addons/account/account.py:1024 +#: code:addons/account/account_move_line.py:1105 +#, python-format +msgid "Error !" +msgstr "" + +#. module: account +#: field:account.financial.report,style_overwrite:0 +msgid "Financial Report Style" +msgstr "" + +#. module: account +#: selection:account.financial.report,sign:0 +msgid "Preserve balance sign" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +#: model:ir.actions.report.xml,name:account.account_vat_declaration +#: model:ir.ui.menu,name:account.menu_account_vat_declaration +msgid "Taxes Report" +msgstr "" + +#. module: account +#: selection:account.journal.period,state:0 +msgid "Printed" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Project line" +msgstr "" + +#. module: account +#: field:account.invoice.tax,manual:0 +msgid "Manual" +msgstr "" + +#. module: account +#: selection:account.invoice.refund,filter_refund:0 +msgid "Cancel: create refund and reconcile" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_aged_partner_balance.py:58 +#, python-format +msgid "You must set a start date." +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +msgid "" +"For an invoice to be considered as paid, the invoice entries must be " +"reconciled with counterparts, usually payments. With the automatic " +"reconciliation functionality, OpenERP makes its own search for entries to " +"reconcile in a series of accounts. It finds entries for each partner where " +"the amounts correspond." +msgstr "" + +#. module: account +#: view:account.move:0 +#: field:account.move,to_check:0 +msgid "To Review" +msgstr "" + +#. module: account +#: help:account.partner.ledger,initial_balance:0 +#: help:account.report.general.ledger,initial_balance:0 +msgid "" +"If you selected to filter by date or period, this field allow you to add a " +"row to display the amount of debit/credit/balance that precedes the filter " +"you've set." +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.move:0 +#: model:ir.actions.act_window,name:account.action_move_journal_line +#: model:ir.ui.menu,name:account.menu_action_move_journal_line_form +#: model:ir.ui.menu,name:account.menu_finance_entries +msgid "Journal Entries" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:147 +#, python-format +msgid "No period found on the invoice." +msgstr "" + +#. module: account +#: help:account.partner.ledger,page_split:0 +msgid "Display Ledger Report with One partner per page" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "JRNL" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "Yes" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,target_move:0 +#: selection:account.balance.report,target_move:0 +#: selection:account.central.journal,target_move:0 +#: selection:account.chart,target_move:0 +#: selection:account.common.account.report,target_move:0 +#: selection:account.common.journal.report,target_move:0 +#: selection:account.common.partner.report,target_move:0 +#: selection:account.common.report,target_move:0 +#: selection:account.general.journal,target_move:0 +#: selection:account.partner.balance,target_move:0 +#: selection:account.partner.ledger,target_move:0 +#: selection:account.print.journal,target_move:0 +#: selection:account.report.general.ledger,target_move:0 +#: selection:account.tax.chart,target_move:0 +#: selection:account.vat.declaration,target_move:0 +#: selection:accounting.report,target_move:0 +#: code:addons/account/report/common_report_header.py:67 +#, python-format +msgid "All Entries" +msgstr "" + +#. module: account +#: constraint:account.move.reconcile:0 +msgid "You can only reconcile journal items with the same partner." +msgstr "" + +#. module: account +#: view:account.journal.select:0 +msgid "Journal Select" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: code:addons/account/account.py:422 +#: code:addons/account/account.py:434 +#, python-format +msgid "Opening Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_reconcile +msgid "Account Reconciliation" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_tax +msgid "Taxes Fiscal Position" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape: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 "" + +#. module: account +#: model:process.transition,note:account.process_transition_paymentorderbank0 +msgid "The payment order is sent to the bank." +msgstr "" + +#. module: account +#: help:account.move,to_check:0 +msgid "" +"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." +msgstr "" + +#. module: account +#: field:account.chart.template,complete_tax_set:0 +#: field:wizard.multi.charts.accounts,complete_tax_set:0 +msgid "Complete Set of Taxes" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_validate_account_move.py:61 +#, python-format +msgid "" +"Selected Entry Lines does not have any account move enties in draft state." +msgstr "" + +#. module: account +#: view:account.chart.template:0 +msgid "Properties" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_tax_chart +msgid "Account tax chart" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: report:account.central.journal:0 +#: report:account.general.journal:0 +#: report:account.invoice:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: report:account.partner.balance:0 +msgid "Total:" +msgstr "" + +#. module: account +#: constraint:account.journal:0 +msgid "" +"Configuration error!\n" +"The currency chosen should be shared by the default accounts too." +msgstr "" + +#. module: account +#: code:addons/account/account.py:2304 +#, 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 "" + +#. module: account +#: field:account.invoice,paypal_url:0 +msgid "Paypal Url" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_voucher:0 +msgid "Manage customer payments" +msgstr "" + +#. module: account +#: help:report.invoice.created,origin:0 +msgid "Reference of the document that generated this invoice report." +msgstr "" + +#. module: account +#: field:account.tax.code,child_ids:0 +#: field:account.tax.code.template,child_ids:0 +msgid "Child Codes" +msgstr "" + +#. module: account +#: constraint:account.fiscalyear:0 +msgid "" +"Error!\n" +"The start date of a fiscal year must precede its end date." +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Taxes used in Sales" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree1 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree1 +msgid "Customer Invoices" +msgstr "" + +#. module: account +#: view:account.tax:0 +msgid "Misc" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Sales" +msgstr "" + +#. module: account +#: selection:account.invoice.report,state:0 +#: selection:account.journal.period,state:0 +#: selection:account.subscription,state:0 +#: selection:report.invoice.created,state:0 +msgid "Done" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1319 +#, python-format +msgid "" +"You cannot validate a non-balanced entry.\n" +"Make sure you have configured payment terms properly.\n" +"The latest payment term line should be of the \"Balance\" type." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_invoicemanually0 +msgid "A statement with manual entries becomes a draft statement." +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +msgid "" +"Aged Partner Balance is a more detailed report of your receivables by " +"intervals. When opening that report, OpenERP asks for the name of the " +"company, the fiscal period and the size of the interval to be analyzed (in " +"days). OpenERP then calculates a table of credit balance by period. So if " +"you request an interval of 30 days OpenERP generates an analysis of " +"creditors for the past month, past two months, and so on. " +msgstr "" + +#. module: account +#: field:account.invoice,origin:0 +#: field:account.invoice.line,origin:0 +#: field:report.invoice.created,origin:0 +msgid "Source Document" +msgstr "" + +#. module: account +#: help:account.config.settings,company_footer:0 +msgid "Bank accounts as printed in the footer of each printed document" +msgstr "" + +#. module: account +#: constraint:account.account:0 +msgid "" +"Configuration Error!\n" +"You cannot define children to an account with internal type different of " +"\"View\"." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_accounting_report +msgid "Accounting Report" +msgstr "" + +#. module: account +#: field:account.analytic.line,currency_id:0 +msgid "Account Currency" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Taxes:" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:458 +#, python-format +msgid "" +"You can not delete an invoice which is not cancelled. You should refund it " +"instead." +msgstr "" + +#. module: account +#: help:account.tax,amount:0 +msgid "For taxes of type percentage, enter % ratio between 0-1." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_report_tree_hierarchy +msgid "Financial Reports Hierarchy" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation +msgid "Monthly Turnover" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Analytic Lines" +msgstr "" + +#. module: account +#: field:account.analytic.journal,line_ids:0 +#: field:account.tax.code,line_ids:0 +msgid "Lines" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Account Tax Template" +msgstr "" + +#. module: account +#: view:account.journal.select:0 +msgid "Are you sure you want to open Journal Entries?" +msgstr "" + +#. module: account +#: view:account.state.open:0 +msgid "Are you sure you want to open this invoice ?" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense_opening:0 +msgid "Opening Entries Expense Account" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Customer Reference" +msgstr "" + +#. module: account +#: field:account.account.template,parent_id:0 +msgid "Parent Account Template" +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Price" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement,closing_details_ids:0 +msgid "Closing Cashbox Lines" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: field:account.bank.statement.line,statement_id:0 +#: field:account.move.line,statement_id:0 +#: model:process.process,name:account.process_process_statementprocess0 +msgid "Statement" +msgstr "" + +#. module: account +#: help:account.journal,default_debit_account_id:0 +msgid "It acts as a default account for debit amount" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Posted entries" +msgstr "" + +#. module: account +#: help:account.payment.term.line,value_amount:0 +msgid "For percent enter a ratio between 0-1." +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: field:account.invoice,date_invoice:0 +#: field:report.invoice.created,date_invoice:0 +msgid "Invoice Date" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by year of Invoice Date" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_tax_rate:0 +msgid "Purchase tax (%)" +msgstr "" + +#. module: account +#: help:res.partner,credit:0 +msgid "Total amount this customer owes you." +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Unbalanced Journal Items" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.open_account_charts_modules +msgid "Chart Templates" +msgstr "" + +#. module: account +#: field:account.journal.period,icon:0 +msgid "Icon" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Ok" +msgstr "" + +#. module: account +#: field:account.chart.template,tax_code_root_id:0 +msgid "Root Tax Code" +msgstr "" + +#. module: account +#: help:account.journal,centralisation:0 +msgid "" +"Check this box to determine that each entry of this journal won't create a " +"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 +msgid "Closed On" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,purchase_tax:0 +msgid "Default Purchase Tax" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income_opening:0 +msgid "Opening Entries Income Account" +msgstr "" + +#. module: account +#: field:account.config.settings,group_proforma_invoices:0 +msgid "Allow pro-forma invoices" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Confirm" +msgstr "" + +#. module: account +#: help:account.tax,domain:0 +#: help:account.tax.template,domain:0 +msgid "" +"This field is only used if you develop your own module allowing developers " +"to create specific taxes in a custom domain." +msgstr "" + +#. module: account +#: field:account.invoice,reference:0 +#: field:account.invoice.line,invoice_id:0 +msgid "Invoice Reference" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,report_name:0 +msgid "Name of new entries" +msgstr "" + +#. module: account +#: view:account.use.model:0 +msgid "Create Entries" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_cash_box_out +msgid "cash.box.out" +msgstr "" + +#. module: account +#: help:account.config.settings,currency_id:0 +msgid "Main currency of the company." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_reports +msgid "Reporting" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/account_move_line.py:780 +#: code:addons/account/static/src/js/account_move_reconciliation.js:90 +#, python-format +msgid "Warning" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_analytic_open +msgid "Contracts/Analytic Accounts" +msgstr "" + +#. module: account +#: view:account.journal:0 +#: field:res.partner.bank,journal_id:0 +msgid "Account Journal" +msgstr "" + +#. module: account +#: field:account.config.settings,tax_calculation_rounding_method:0 +msgid "Tax calculation rounding method" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_paidinvoice0 +#: model:process.node,name:account.process_node_supplierpaidinvoice0 +msgid "Paid invoice" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "" +"Use this option if you want to cancel an invoice you should not\n" +" have issued. The credit note will be " +"created, validated and reconciled\n" +" with the invoice. You will not be able " +"to modify the credit note." +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,next_partner_id:0 +msgid "" +"This field shows you the next partner that will be automatically chosen by " +"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 +msgid "Comment" +msgstr "" + +#. module: account +#: field:account.tax,domain:0 +#: field:account.tax.template,domain:0 +msgid "Domain" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_use_model +msgid "Use model" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1490 +#, python-format +msgid "" +"There is no default credit account defined \n" +"on journal \"%s\"." +msgstr "" + +#. module: account +#: view:account.invoice.line:0 +#: field:account.invoice.tax,invoice_id:0 +#: model:ir.model,name:account.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer And Supplier Refunds" +msgstr "" + +#. module: account +#: field:account.financial.report,sign:0 +msgid "Sign on Reports" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_analytic_account_tree2 +msgid "" +"

\n" +" Click to add a new analytic account.\n" +"

\n" +" The normal chart of accounts has a structure defined by the\n" +" legal requirement of the country. The analytic chart of\n" +" accounts structure should reflect your own business needs " +"in\n" +" term of costs/revenues reporting.\n" +"

\n" +" They are usually structured by contracts, projects, products " +"or\n" +" departements. Most of the OpenERP operations (invoices,\n" +" timesheets, expenses, etc) generate analytic entries on the\n" +" related account.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_view +msgid "Root/View" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3206 +#, python-format +msgid "OPEJ" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +msgid "PRO-FORMA" +msgstr "" + +#. module: account +#: selection:account.entries.report,move_line_state:0 +#: view:account.move.line:0 +#: selection:account.move.line,state:0 +msgid "Unbalanced" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +msgid "Normal" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_email_templates +#: model:ir.ui.menu,name:account.menu_email_templates +msgid "Email Templates" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Optional Information" +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 +#: field:analytic.entries.report,user_id:0 +msgid "User" +msgstr "" + +#. module: account +#: selection:account.account,currency_mode:0 +msgid "At Date" +msgstr "" + +#. module: account +#: help:account.move.line,date_maturity:0 +msgid "" +"This field is used for payable and receivable journal entries. You can put " +"the limit date for the payment of this line." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_multi_currency +msgid "Multi-Currencies" +msgstr "" + +#. module: account +#: field:account.model.line,date_maturity:0 +msgid "Maturity Date" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3193 +#, python-format +msgid "Sales Journal" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_invoice_tax +msgid "Invoice Tax" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1185 +#, python-format +msgid "No piece number !" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +#: model:ir.ui.menu,name:account.menu_account_report_tree_hierarchy +msgid "Account Reports Hierarchy" +msgstr "" + +#. module: account +#: help:account.account.template,chart_template_id:0 +msgid "" +"This optional field allow you to link an account template to a specific " +"chart template that may differ from the one its root parent belongs to. This " +"allow you to define chart templates that extend another and complete it with " +"few new accounts (You don't need to define the whole structure that is " +"common to both several times)." +msgstr "" + +#. module: account +#: view:account.move:0 +msgid "Unposted Journal Entries" +msgstr "" + +#. module: account +#: help:account.invoice.refund,date:0 +msgid "" +"This date will be used as the invoice date for credit note and period will " +"be chosen accordingly!" +msgstr "" + +#. module: account +#: view:product.template:0 +msgid "Sales Properties" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3541 +#, python-format +msgid "" +"You have to set a code for the bank account defined on the selected chart of " +"accounts." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_manual_reconcile +msgid "Manual Reconciliation" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Total amount due:" +msgstr "" + +#. module: account +#: field:account.analytic.chart,to_date:0 +#: field:project.account.analytic.line,to_date:0 +msgid "To" +msgstr "" + +#. module: account +#: selection:account.move.line,centralisation:0 +#: code:addons/account/account.py:1541 +#, python-format +msgid "Currency Adjustment" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,fy_id:0 +msgid "Fiscal Year to close" +msgstr "" + +#. module: account +#: view:account.invoice.cancel:0 +#: model:ir.actions.act_window,name:account.action_account_invoice_cancel +msgid "Cancel Selected Invoices" +msgstr "" + +#. module: account +#: help:account.account.type,report_type:0 +msgid "" +"This field is used to generate legal reports: profit and loss, balance sheet." +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "May" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:820 +#, python-format +msgid "Global taxes defined, but they are not in invoice lines !" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_chart_template +msgid "Templates for Account Chart" +msgstr "" + +#. module: account +#: help:account.model.line,sequence:0 +msgid "" +"The sequence field is used to order the resources from lower sequences to " +"higher ones." +msgstr "" + +#. module: account +#: field:account.move.line,amount_residual_currency:0 +msgid "Residual Amount in Currency" +msgstr "" + +#. module: account +#: field:account.config.settings,sale_refund_sequence_prefix:0 +msgid "Credit note sequence" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_validate_account_move +#: model:ir.actions.act_window,name:account.action_validate_account_move_line +#: model:ir.ui.menu,name:account.menu_validate_account_moves +#: view:validate.account.move:0 +#: view:validate.account.move.lines:0 +msgid "Post Journal Entries" +msgstr "" + +#. module: account +#: selection:account.bank.statement.line,type:0 +#: view:account.config.settings:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:388 +#, python-format +msgid "Customer" +msgstr "" + +#. module: account +#: field:account.financial.report,name:0 +msgid "Report Name" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_cash +#: selection:account.analytic.journal,type:0 +#: selection:account.bank.accounts.wizard,account_type:0 +#: selection:account.entries.report,type:0 +#: selection:account.journal,type:0 +#: code:addons/account/account.py:3092 +#, python-format +msgid "Cash" +msgstr "" + +#. module: account +#: field:account.fiscal.position.account,account_dest_id:0 +#: field:account.fiscal.position.account.template,account_dest_id:0 +msgid "Account Destination" +msgstr "" + +#. module: account +#: help:account.invoice.refund,filter_refund:0 +msgid "" +"Refund base on this type. You can not Modify and Cancel if the invoice is " +"already reconciled" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,sequence:0 +#: field:account.financial.report,sequence:0 +#: field:account.invoice.line,sequence:0 +#: field:account.invoice.tax,sequence:0 +#: field:account.model.line,sequence:0 +#: field:account.sequence.fiscalyear,sequence_id:0 +#: field:account.tax,sequence:0 +#: field:account.tax.code,sequence:0 +#: field:account.tax.template,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: account +#: field:account.config.settings,paypal_account:0 +msgid "Paypal account" +msgstr "" + +#. module: account +#: selection:account.print.journal,sort_selection:0 +msgid "Journal Entry Number" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Parent Report" +msgstr "" + +#. module: account +#: constraint:account.account:0 +#: constraint:account.tax.code:0 +msgid "" +"Error!\n" +"You cannot create recursive accounts." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_cash_box_in +msgid "cash.box.in" +msgstr "" + +#. module: account +#: help:account.invoice,move_id:0 +msgid "Link to the automatically generated Journal Items." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_config_settings +msgid "account.config.settings" +msgstr "" + +#. module: account +#: selection:account.config.settings,period:0 +#: selection:account.installer,period:0 +msgid "Monthly" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_asset +msgid "Asset" +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_end:0 +msgid "Computed Balance" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/js/account_move_reconciliation.js:89 +#, python-format +msgid "You must choose at least one record." +msgstr "" + +#. module: account +#: field:account.account,parent_id:0 +#: field:account.financial.report,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:292 +#, python-format +msgid "Profit" +msgstr "" + +#. module: account +#: help:account.payment.term.line,days2:0 +msgid "" +"Day of the month, set -1 for the last day of the current month. If it's " +"positive, it gives the day of the next month. Set 0 for net days (otherwise " +"it's based on the beginning of the month)." +msgstr "" + +#. module: account +#: view:account.move.line.reconcile:0 +msgid "Reconciliation Transactions" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_legal_statement +msgid "Legal Reports" +msgstr "" + +#. module: account +#: field:account.tax.code,sum_period:0 +msgid "Period Sum" +msgstr "" + +#. module: account +#: help:account.tax,sequence:0 +msgid "" +"The sequence field is used to order the tax lines from the lowest sequences " +"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 +msgid "CashBox Line" +msgstr "" + +#. module: account +#: field:account.installer,charts:0 +msgid "Accounting Package" +msgstr "" + +#. module: account +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: model:ir.actions.act_window,name:account.action_account_partner_ledger +#: model:ir.actions.report.xml,name:account.account_3rdparty_ledger +#: model:ir.actions.report.xml,name:account.account_3rdparty_ledger_other +#: model:ir.ui.menu,name:account.menu_account_partner_ledger +msgid "Partner Ledger" +msgstr "" + +#. module: account +#: selection:account.tax.template,type:0 +msgid "Fixed" +msgstr "" + +#. module: account +#: code:addons/account/account.py:653 +#: code:addons/account/account.py:656 +#: code:addons/account/account.py:668 +#: code:addons/account/account.py:1031 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: account +#: help:account.bank.statement,message_unread:0 +#: help:account.invoice,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: account +#: field:res.company,tax_calculation_rounding_method:0 +msgid "Tax Calculation Rounding Method" +msgstr "" + +#. module: account +#: field:account.entries.report,move_line_state:0 +msgid "State of Move Line" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_line_reconcile +msgid "Account move line reconcile" +msgstr "" + +#. module: account +#: view:account.subscription.generate:0 +#: model:ir.model,name:account.model_account_subscription_generate +msgid "Subscription Compute" +msgstr "" + +#. module: account +#: view:account.move.line.unreconcile.select:0 +msgid "Open for Unreconciliation" +msgstr "" + +#. module: account +#: field:account.bank.statement.line,partner_id:0 +#: 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 +#: view:account.invoice.report:0 +#: field:account.invoice.report,partner_id:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,partner_id:0 +#: view:account.move:0 +#: field:account.move,partner_id:0 +#: view:account.move.line:0 +#: field:account.move.line,partner_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,partner_id:0 +#: model:ir.model,name:account.model_res_partner +#: field:report.invoice.created,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: account +#: help:account.change.currency,currency_id:0 +msgid "Select a currency to apply on the invoice" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:901 +#, python-format +msgid "No Invoice Lines !" +msgstr "" + +#. module: account +#: view:account.financial.report:0 +msgid "Report Type" +msgstr "" + +#. module: account +#: help:account.open.closed.fiscalyear,fyear_id:0 +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 +msgid "Tax Use In" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:382 +#, python-format +msgid "" +"The statement balance is incorrect !\n" +"The expected balance (%.2f) is different than the computed one. (%.2f)" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:420 +#, python-format +msgid "The account entries lines are not in valid state." +msgstr "" + +#. module: account +#: field:account.account.type,close_method:0 +msgid "Deferral Method" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_electronicfile0 +msgid "Automatic entry" +msgstr "" + +#. module: account +#: help:account.account,reconcile:0 +msgid "" +"Check this box if this account allows reconciliation of journal items." +msgstr "" + +#. module: account +#: report:account.analytic.account.inverted.balance:0 +msgid "Inverted Analytic Balance -" +msgstr "" + +#. module: account +#: help:account.move.reconcile,opening_reconciliation:0 +msgid "" +"Is this reconciliation produced by the opening of a new fiscal year ?." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_line_form +msgid "Analytic Entries" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Associated Partner" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1465 +#, python-format +msgid "You must first select a partner !" +msgstr "" + +#. module: account +#: field:account.invoice,comment:0 +msgid "Additional Information" +msgstr "" + +#. module: account +#: field:account.invoice.report,residual:0 +#: field:account.invoice.report,user_currency_residual:0 +msgid "Total Residual" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Opening Cash Control" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_invoiceinvoice0 +#: model:process.node,note:account.process_node_supplierinvoiceinvoice0 +msgid "Invoice's state is Open" +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,state:0 +#: field:account.entries.report,move_state:0 +#: view:account.fiscalyear:0 +#: field:account.fiscalyear,state:0 +#: view:account.invoice:0 +#: field:account.invoice,state:0 +#: view:account.invoice.report:0 +#: field:account.journal.period,state:0 +#: field:account.move,state:0 +#: view:account.move.line:0 +#: field:account.move.line,state:0 +#: field:account.period,state:0 +#: view:account.subscription:0 +#: field:account.subscription,state:0 +#: field:report.invoice.created,state:0 +msgid "Status" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: model:ir.actions.act_window,name:account.action_account_analytic_cost +#: model:ir.actions.report.xml,name:account.account_analytic_account_cost_ledger +msgid "Cost Ledger" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "No Fiscal Year Defined for This Company" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Proforma" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +msgid "J.C. /Move name" +msgstr "" + +#. module: account +#: help:account.tax.template,include_base_amount:0 +msgid "" +"Set if the amount of tax must be included in the base amount before " +"computing the next taxes." +msgstr "" + +#. module: account +#: code:addons/account/account.py:3196 +#, python-format +msgid "Purchase Refund Journal" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1333 +#, python-format +msgid "Please define a sequence on the journal." +msgstr "" + +#. module: account +#: help:account.tax.template,amount:0 +msgid "For Tax Type percent enter % ratio between 0-1." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Current Accounts" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by Invoice Date" +msgstr "" + +#. module: account +#: help:account.journal,user_id:0 +msgid "The user responsible for this journal" +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_followup:0 +msgid "" +"This allows to automate letters for unpaid invoices, with multi-level " +"recalls.\n" +" This installs the module account_followup." +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,period_id:0 +#: view:account.bank.statement:0 +#: field:account.bank.statement,period_id:0 +#: 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 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.move:0 +#: field:account.move,period_id:0 +#: view:account.move.line:0 +#: field:account.move.line,period_id:0 +#: view:account.period:0 +#: field:account.subscription,period_nbr:0 +#: field:account.tax.chart,period_id:0 +#: field:account.treasury.report,period_id:0 +#: field:validate.account.move,period_id:0 +msgid "Period" +msgstr "" + +#. module: account +#: help:account.account,adjusted_balance:0 +msgid "" +"Total amount (in Company currency) for transactions held in secondary " +"currency for this account." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Net Total:" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_report_common.py:158 +#, python-format +msgid "Select a starting and an ending period." +msgstr "" + +#. module: account +#: field:account.config.settings,sale_sequence_next:0 +msgid "Next invoice number" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_generic_reporting +msgid "Generic Reporting" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile.writeoff,journal_id:0 +msgid "Write-Off Journal" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_income_categ:0 +msgid "Income Category Account" +msgstr "" + +#. module: account +#: field:account.account,adjusted_balance:0 +msgid "Adjusted Balance" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscal_position_template_form +#: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form_template +msgid "Fiscal Position Templates" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +msgid "Int.Type" +msgstr "" + +#. module: account +#: field:account.move.line,tax_amount:0 +msgid "Tax/Base Amount" +msgstr "" + +#. module: account +#: view:account.open.closed.fiscalyear:0 +msgid "" +"This wizard will remove the end of year journal entries of selected fiscal " +"year. Note that you can run this wizard many times for the same fiscal year." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Tel. :" +msgstr "" + +#. module: account +#: field:account.account,company_currency_id:0 +msgid "Company Currency" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,chart_account_id:0 +#: field:account.balance.report,chart_account_id:0 +#: field:account.central.journal,chart_account_id:0 +#: field:account.common.account.report,chart_account_id:0 +#: field:account.common.journal.report,chart_account_id:0 +#: field:account.common.partner.report,chart_account_id:0 +#: field:account.common.report,chart_account_id:0 +#: view:account.config.settings:0 +#: field:account.general.journal,chart_account_id:0 +#: field:account.partner.balance,chart_account_id:0 +#: field:account.partner.ledger,chart_account_id:0 +#: field:account.print.journal,chart_account_id:0 +#: field:account.report.general.ledger,chart_account_id:0 +#: field:account.vat.declaration,chart_account_id:0 +#: field:accounting.report,chart_account_id:0 +msgid "Chart of Account" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_paymententries0 +#: model:process.transition,name:account.process_transition_reconcilepaid0 +msgid "Payment" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +msgid "Reconciliation Result" +msgstr "" + +#. module: account +#: field:account.bank.statement,balance_end_real:0 +#: field:account.treasury.report,ending_balance:0 +msgid "Ending Balance" +msgstr "" + +#. module: account +#: field:account.journal,centralisation:0 +msgid "Centralized Counterpart" +msgstr "" + +#. module: account +#: help:account.move.line,blocked:0 +msgid "" +"You can check this box to mark this journal item as a litigation with the " +"associated partner" +msgstr "" + +#. module: account +#: field:account.move.line,reconcile_partial_id:0 +#: view:account.move.line.reconcile:0 +msgid "Partial Reconcile" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_inverted_balance +msgid "Account Analytic Inverted Balance" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_common_report +msgid "Account Common Report" +msgstr "" + +#. module: account +#: view:account.invoice.refund:0 +msgid "" +"Use this option if you want to cancel an invoice and create a new\n" +" one. The credit note will be created, " +"validated and reconciled\n" +" with the current invoice. A new, draft, " +"invoice will be created \n" +" so that you can edit it." +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_filestatement0 +msgid "Automatic import of the bank sta" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:381 +#, python-format +msgid "Unknown Error!" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_move_bank_reconcile +msgid "Move bank reconcile" +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Apply" +msgstr "" + +#. module: account +#: field:account.financial.report,account_type_ids:0 +#: model:ir.actions.act_window,name:account.action_account_type_form +#: model:ir.ui.menu,name:account.menu_action_account_type_form +msgid "Account Types" +msgstr "" + +#. module: account +#: model:email.template,subject:account.email_template_edi_invoice +msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1210 +#, python-format +msgid "" +"You cannot use this general account in this journal, check the tab 'Entry " +"Controls' on the related journal." +msgstr "" + +#. module: account +#: field:account.account.type,report_type:0 +msgid "P&L / BS Category" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: view:account.move.line.reconcile:0 +#: view:account.move.line.reconcile.select:0 +#: code:addons/account/wizard/account_move_line_reconcile_select.py:45 +#: model:ir.ui.menu,name:account.periodical_processing_reconciliation +#: model:process.node,name:account.process_node_reconciliation0 +#: model:process.node,name:account.process_node_supplierreconciliation0 +#, python-format +msgid "Reconciliation" +msgstr "" + +#. module: account +#: view:account.tax.template:0 +msgid "Keep empty to use the income account" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "" +"This button only appears when the state of the invoice is 'paid' (showing " +"that it has been fully reconciled) and auto-computed boolean 'reconciled' is " +"False (depicting that it's not the case anymore). In other words, the " +"invoice has been dereconciled and it does not fit anymore the 'paid' state. " +"You should press this button to re-open it and let it continue its normal " +"process after having resolved the eventual exceptions it may have created." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_journal_form +msgid "" +"

\n" +" Click to add a journal.\n" +"

\n" +" A journal is used to record transactions of all accounting " +"data\n" +" related to the day-to-day business.\n" +"

\n" +" A typical company may use one journal per payment method " +"(cash,\n" +" bank accounts, checks), one purchase journal, one sale " +"journal\n" +" and one for miscellaneous information.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscalyear_close_state +msgid "Fiscalyear Close state" +msgstr "" + +#. module: account +#: field:account.invoice.refund,journal_id:0 +msgid "Refund Journal" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: report:account.central.journal:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +msgid "Filter By" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_period_close.py:51 +#, python-format +msgid "" +"In order to close a period, you must first post related journal entries." +msgstr "" + +#. 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 "" + +#. module: account +#: help:account.invoice,account_id:0 +msgid "The partner account used for this invoice." +msgstr "" + +#. module: account +#: code:addons/account/account.py:3391 +#, python-format +msgid "Tax %.2f%%" +msgstr "" + +#. module: account +#: field:account.tax.code,parent_id:0 +#: view:account.tax.code.template:0 +#: field:account.tax.code.template,parent_id:0 +msgid "Parent Code" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_payment_term_line +msgid "Payment Term Line" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3194 +#, python-format +msgid "Purchase Journal" +msgstr "" + +#. module: account +#: field:account.invoice,amount_untaxed:0 +msgid "Subtotal" +msgstr "" + +#. module: account +#: view:account.vat.declaration:0 +msgid "Print Tax Statement" +msgstr "" + +#. module: account +#: view:account.model.line:0 +msgid "Journal Entry Model Line" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,date_due:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,date_due:0 +#: field:report.invoice.created,date_due:0 +msgid "Due Date" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_supplier +#: model:ir.ui.menu,name:account.menu_finance_payables +msgid "Suppliers" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Accounts Type Allowed (empty for no control)" +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in the company currency." +msgstr "" + +#. module: account +#: view:account.tax.code:0 +msgid "Statistics" +msgstr "" + +#. module: account +#: field:account.analytic.chart,from_date:0 +#: field:project.account.analytic.line,from_date:0 +msgid "From" +msgstr "" + +#. module: account +#: help:accounting.report,debit_credit:0 +msgid "" +"This option allows you to get more details about the way your balances are " +"computed. Because it is space consuming, we do not allow to use it while " +"doing a comparison." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscalyear_close +msgid "Fiscalyear Close" +msgstr "" + +#. module: account +#: sql_constraint:account.account:0 +msgid "The code of the account must be unique per company !" +msgstr "" + +#. module: account +#: help:product.category,property_account_expense_categ:0 +#: help:product.template,property_account_expense:0 +msgid "This account will be used to value outgoing stock using cost price." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_invoice_opened +msgid "Unpaid Invoices" +msgstr "" + +#. module: account +#: field:account.move.line.reconcile,debit:0 +msgid "Debit amount" +msgstr "" + +#. module: account +#: view:account.aged.trial.balance:0 +#: view:account.analytic.balance:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.cost.ledger.journal.report:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +#: view:account.common.report:0 +#: view:account.invoice:0 +msgid "Print" +msgstr "" + +#. module: account +#: view:account.period.close:0 +msgid "Are you sure?" +msgstr "" + +#. module: account +#: view:account.journal:0 +msgid "Accounts Allowed (empty for no control)" +msgstr "" + +#. module: account +#: field:account.config.settings,sale_tax_rate:0 +msgid "Sales tax (%)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2 +#: model:ir.actions.act_window,name:account.action_account_analytic_chart +#: model:ir.ui.menu,name:account.menu_action_analytic_account_tree2 +msgid "Chart of Analytic Accounts" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_subscription_form +msgid "" +"

\n" +" Click to define a new recurring entry.\n" +"

\n" +" A recurring entry occurs on a recurrent basis from a " +"specific\n" +" date, i.e. corresponding to the signature of a contract or " +"an\n" +" agreement with a customer or a supplier. You can create " +"such\n" +" entries to automate the postings in the system.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: view:account.journal:0 +#: model:ir.ui.menu,name:account.menu_configuration_misc +msgid "Miscellaneous" +msgstr "" + +#. module: account +#: help:res.partner,debit:0 +msgid "Total amount you have to pay to this supplier." +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_analytic0 +#: model:process.node,name:account.process_node_analyticcost0 +msgid "Analytic Costs" +msgstr "" + +#. module: account +#: field:account.analytic.journal,name:0 +#: report:account.general.journal:0 +#: field:account.journal,name:0 +msgid "Journal Name" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:829 +#, python-format +msgid "Entry \"%s\" is not valid !" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Smallest Text" +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_check_writing:0 +msgid "" +"This allows you to check writing and printing.\n" +" This installs the module account_check_writing." +msgstr "" + +#. module: account +#: model:res.groups,name:account.group_account_invoice +msgid "Invoicing & Payments" +msgstr "" + +#. module: account +#: help:account.invoice,internal_number:0 +msgid "" +"Unique number of the invoice, computed automatically when the invoice is " +"created." +msgstr "" + +#. module: account +#: model:account.account.type,name:account.data_account_type_expense +#: model:account.financial.report,name:account.account_financial_report_expense0 +msgid "Expense" +msgstr "" + +#. module: account +#: help:account.chart,fiscalyear:0 +msgid "Keep empty for all open fiscal years" +msgstr "" + +#. module: account +#: help:account.move.line,amount_currency:0 +msgid "" +"The amount expressed in an optional other currency if it is a multi-currency " +"entry." +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1006 +#, python-format +msgid "The account move (%s) for centralisation has been confirmed." +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: field:account.bank.statement,currency:0 +#: report:account.central.journal:0 +#: view:account.entries.report:0 +#: 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 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,currency_id:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: field:account.move.line,currency_id:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:analytic.entries.report,currency_id:0 +#: model:ir.model,name:account.model_res_currency +#: field:report.account.sales,currency_id:0 +#: field:report.account_type.sales,currency_id:0 +#: field:report.invoice.created,currency_id:0 +#: field:res.partner.bank,currency_id:0 +#: field:wizard.multi.charts.accounts,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: account +#: help:account.invoice.refund,journal_id:0 +msgid "" +"You can select here the journal to use for the credit note that will be " +"created. If you leave that field empty, it will use the same journal as the " +"current invoice." +msgstr "" + +#. module: account +#: help:account.bank.statement.line,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of bank statement lines." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_validentries0 +msgid "Accountant validates the accounting entries coming from the invoice." +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: model:ir.actions.act_window,name:account.act_account_acount_move_line_reconcile_open +msgid "Reconciled entries" +msgstr "" + +#. module: account +#: code:addons/account/account.py:2334 +#, python-format +msgid "Wrong model !" +msgstr "" + +#. module: account +#: view:account.tax.code.template:0 +#: view:account.tax.template:0 +msgid "Tax Template" +msgstr "" + +#. module: account +#: field:account.invoice.refund,period:0 +msgid "Force period" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_partner_balance +msgid "Print Account Partner Balance" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1121 +#, python-format +msgid "" +"You cannot do this modification on a reconciled entry. You can just change " +"some non legal fields or you must unreconcile first.\n" +"%s." +msgstr "" + +#. module: account +#: help:account.financial.report,sign:0 +msgid "" +"For accounts that are typically more debited than credited and that you " +"would like to print as negative amounts in your reports, you should reverse " +"the sign of the balance; e.g.: Expense account. The same applies for " +"accounts that are typically more credited than debited and that you would " +"like to print as positive amounts in your reports; e.g.: Income account." +msgstr "" + +#. module: account +#: field:res.partner,contract_ids:0 +msgid "Contracts" +msgstr "" + +#. module: account +#: field:account.cashbox.line,bank_statement_id:0 +#: field:account.entries.report,reconcile_id:0 +#: field:account.financial.report,balance:0 +#: field:account.financial.report,credit:0 +#: field:account.financial.report,debit:0 +msgid "unknown" +msgstr "" + +#. module: account +#: field:account.fiscalyear.close,journal_id:0 +#: code:addons/account/account.py:3198 +#, python-format +msgid "Opening Entries Journal" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_customerinvoice0 +msgid "Draft invoices are checked, validated and printed." +msgstr "" + +#. module: account +#: field:account.bank.statement,message_is_follower:0 +#: field:account.invoice,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: account +#: view:account.move:0 +#: field:account.move,narration:0 +#: field:account.move.line,narration:0 +msgid "Internal Note" +msgstr "" + +#. module: account +#: constraint:account.account:0 +msgid "" +"Configuration Error!\n" +"You cannot select an account type with a deferral method different of " +"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"." +msgstr "" + +#. module: account +#: field:account.config.settings,has_fiscal_year:0 +msgid "Company has a fiscal year" +msgstr "" + +#. module: account +#: help:account.tax,child_depend:0 +#: help:account.tax.template,child_depend:0 +msgid "" +"Set if the tax computation is based on the computation of child taxes rather " +"than on the total amount." +msgstr "" + +#. module: account +#: code:addons/account/account.py:634 +#, python-format +msgid "You cannot deactivate an account that contains journal items." +msgstr "" + +#. module: account +#: selection:account.tax,applicable_type:0 +msgid "Given by Python Code" +msgstr "" + +#. module: account +#: field:account.analytic.journal,code:0 +msgid "Journal Code" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.move.line,amount_residual:0 +msgid "Residual Amount" +msgstr "" + +#. module: account +#: field:account.invoice,move_lines:0 +#: field:account.move.reconcile,line_id:0 +msgid "Entry Lines" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_open_journal_button +msgid "Open Journal" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +msgid "KI" +msgstr "" + +#. module: account +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.journal:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Period from" +msgstr "" + +#. module: account +#: field:account.cashbox.line,pieces:0 +msgid "Unit of Currency" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3195 +#, python-format +msgid "Sales Refund Journal" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Information" +msgstr "" + +#. module: account +#: view:account.invoice.confirm:0 +msgid "" +"Once draft invoices are confirmed, you will not be able\n" +" to modify them. The invoices will receive a unique\n" +" number and journal items will be created in your " +"chart\n" +" of accounts." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_bankstatement0 +msgid "Registered payment" +msgstr "" + +#. module: account +#: view:account.fiscalyear.close.state:0 +msgid "Close states of Fiscal year and periods" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_refund_journal_id:0 +msgid "Purchase refund journal" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Product Information" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: model:ir.ui.menu,name:account.next_id_40 +msgid "Analytic" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_invoiceinvoice0 +#: model:process.node,name:account.process_node_supplierinvoiceinvoice0 +msgid "Create Invoice" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_configuration_installer +msgid "Configure Accounting Data" +msgstr "" + +#. module: account +#: field:wizard.multi.charts.accounts,purchase_tax_rate:0 +msgid "Purchase Tax(%)" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:901 +#, python-format +msgid "Please create some invoice lines." +msgstr "" + +#. module: account +#: code:addons/account/wizard/pos_box.py:36 +#, python-format +msgid "" +"Please check that the field 'Internal Transfers Account' is set on the " +"payment method '%s'." +msgstr "" + +#. module: account +#: field:account.vat.declaration,display_detail:0 +msgid "Display Detail" +msgstr "" + +#. module: account +#: code:addons/account/account.py:3203 +#, python-format +msgid "SCNJ" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_analyticinvoice0 +msgid "" +"Analytic costs (timesheets, some purchased products, ...) come from analytic " +"accounts. These generate draft invoices." +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: view:analytic.entries.report:0 +msgid "My Entries" +msgstr "" + +#. module: account +#: help:account.invoice,state:0 +msgid "" +" * The 'Draft' status is used when a user is encoding a new and unconfirmed " +"Invoice. \n" +"* The 'Pro-forma' when invoice is in Pro-forma status,invoice does not have " +"an invoice number. \n" +"* The 'Open' status is used when user create invoice,a invoice number is " +"generated.Its in open status till user does not pay invoice. \n" +"* The 'Paid' status is set automatically when the invoice is paid. Its " +"related journal entries may or may not be reconciled. \n" +"* The 'Cancelled' status is used when user cancel invoice." +msgstr "" + +#. module: account +#: field:account.period,date_stop:0 +#: model:ir.ui.menu,name:account.menu_account_end_year_treatments +msgid "End of Period" +msgstr "" + +#. module: account +#: field:account.account,financial_report_ids:0 +#: field:account.account.template,financial_report_ids:0 +#: model:ir.actions.act_window,name:account.action_account_financial_report_tree +#: model:ir.actions.act_window,name:account.action_account_report +#: model:ir.ui.menu,name:account.menu_account_reports +msgid "Financial Reports" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_liability_view1 +msgid "Liability View" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,period_from:0 +#: field:account.balance.report,period_from:0 +#: report:account.central.journal:0 +#: field:account.central.journal,period_from:0 +#: field:account.common.account.report,period_from:0 +#: field:account.common.journal.report,period_from:0 +#: field:account.common.partner.report,period_from:0 +#: field:account.common.report,period_from:0 +#: report:account.general.journal:0 +#: field:account.general.journal,period_from:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,period_from:0 +#: field:account.partner.ledger,period_from:0 +#: field:account.print.journal,period_from:0 +#: field:account.report.general.ledger,period_from:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,period_from:0 +#: field:accounting.report,period_from:0 +#: field:accounting.report,period_from_cmp:0 +msgid "Start Period" +msgstr "" + +#. module: account +#: model:ir.actions.report.xml,name:account.account_central_journal +msgid "Central Journal" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,direction_selection:0 +msgid "Analysis Direction" +msgstr "" + +#. module: account +#: field:res.partner,ref_companies:0 +msgid "Companies that refers to partner" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Ask Refund" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Total credit" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_suppliervalidentries0 +msgid "Accountant validates the accounting entries coming from the invoice. " +msgstr "" + +#. module: account +#: field:account.subscription,period_total:0 +msgid "Number of Periods" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Document: Customer account statement" +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Receivale Accounts" +msgstr "" + +#. module: account +#: field:account.config.settings,purchase_refund_sequence_prefix:0 +msgid "Supplier credit note sequence" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_state_open.py:37 +#, python-format +msgid "Invoice is already reconciled." +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_payment:0 +msgid "" +"This allows you to create and manage your payment orders, with purposes to\n" +" * serve as base for an easy plug-in of various automated " +"payment mechanisms, and\n" +" * provide a more efficient way to manage invoice " +"payments.\n" +" This installs the module account_payment." +msgstr "" + +#. module: account +#: xsl:account.transfer:0 +msgid "Document" +msgstr "" + +#. module: account +#: view:account.chart.template:0 +#: field:account.chart.template,property_account_receivable:0 +msgid "Receivable Account" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 +#, python-format +msgid "To reconcile the entries company should be the same for all entries." +msgstr "" + +#. module: account +#: field:account.account,balance:0 +#: report:account.account.balance:0 +#: selection:account.account.type,close_method:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: field:account.entries.report,balance:0 +#: report:account.general.journal:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: field:account.invoice,residual:0 +#: field:account.move.line,balance:0 +#: report:account.partner.balance:0 +#: selection:account.payment.term.line,value:0 +#: selection:account.tax,type:0 +#: selection:account.tax.template,type:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,balance:0 +#: field:report.account.receivable,balance:0 +#: field:report.aged.receivable,balance:0 +msgid "Balance" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierbankstatement0 +msgid "Manually or automatically entered in the system" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: report:account.general.ledger_landscape:0 +msgid "Display Account" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: model:account.account.type,name:account.data_account_type_payable +#: selection:account.entries.report,type:0 +msgid "Payable" +msgstr "" + +#. module: account +#: view:board.board:0 +msgid "Account Board" +msgstr "" + +#. module: account +#: view:account.model:0 +#: field:account.model,legend:0 +msgid "Legend" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_entriesreconcile0 +msgid "Accounting entries are the first input of the reconciliation." +msgstr "" + +#. module: account +#: view:account.fiscalyear.close:0 +msgid "Generate Fiscal Year Opening Entries" +msgstr "" + +#. module: account +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Filters By" +msgstr "" + +#. module: account +#: field:account.cashbox.line,number_closing:0 +#: field:account.cashbox.line,number_opening:0 +msgid "Number of Units" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_manually0 +#: model:process.transition,name:account.process_transition_invoicemanually0 +msgid "Manual entry" +msgstr "" + +#. module: account +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 +#: report:account.journal.period.print.sale.purchase:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: field:analytic.entries.report,move_id:0 +msgid "Move" +msgstr "" + +#. module: account +#: code:addons/account/account_bank_statement.py:478 +#: code:addons/account/wizard/account_period_close.py:51 +#, python-format +msgid "Invalid Action!" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +msgid "Date / Period" +msgstr "" + +#. module: account +#: report:account.central.journal:0 +msgid "A/C No." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_bank_statement +msgid "Bank statements" +msgstr "" + +#. module: account +#: constraint:account.period:0 +msgid "" +"Error!\n" +"The period is invalid. Either some periods are overlapping or the period's " +"dates are not matching the scope of the fiscal year." +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "There is nothing due with this customer." +msgstr "" + +#. module: account +#: help:account.tax,account_paid_id:0 +msgid "" +"Set the account that will be set by default on invoice tax lines for " +"refunds. Leave empty to use the expense account." +msgstr "" + +#. module: account +#: help:account.addtmpl.wizard,cparent_id:0 +msgid "" +"Creates an account with the selected template under this existing parent." +msgstr "" + +#. module: account +#: report:account.invoice:0 +msgid "Source" +msgstr "" + +#. module: account +#: selection:account.model.line,date_maturity:0 +msgid "Date of the day" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_move_bank_reconcile.py:49 +#, python-format +msgid "" +"You have to define the bank account\n" +"in the journal definition for reconciliation." +msgstr "" + +#. module: account +#: help:account.journal,sequence_id:0 +msgid "" +"This field contains the information related to the numbering of the journal " +"entries of this journal." +msgstr "" + +#. module: account +#: field:account.invoice,sent:0 +msgid "Sent" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_common_menu +msgid "Common Report" +msgstr "" + +#. module: account +#: field:account.config.settings,default_sale_tax:0 +#: field:account.config.settings,sale_tax:0 +msgid "Default sale tax" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Balance :" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1587 +#, python-format +msgid "Cannot create moves for different companies." +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_periodical_processing +msgid "Periodic Processing" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Customer And Supplier Invoices" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_paymententries0 +#: model:process.transition,name:account.process_transition_paymentorderbank0 +#: model:process.transition,name:account.process_transition_paymentreconcile0 +msgid "Payment entries" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "July" +msgstr "" + +#. module: account +#: view:account.account:0 +msgid "Chart of accounts" +msgstr "" + +#. module: account +#: field:account.subscription.line,subscription_id:0 +msgid "Subscription" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_balance +msgid "Account Analytic Balance" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,period_to:0 +#: field:account.balance.report,period_to:0 +#: report:account.central.journal:0 +#: field:account.central.journal,period_to:0 +#: field:account.common.account.report,period_to:0 +#: field:account.common.journal.report,period_to:0 +#: field:account.common.partner.report,period_to:0 +#: field:account.common.report,period_to:0 +#: report:account.general.journal:0 +#: field:account.general.journal,period_to:0 +#: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,period_to:0 +#: field:account.partner.ledger,period_to:0 +#: field:account.print.journal,period_to:0 +#: field:account.report.general.ledger,period_to:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: report:account.vat.declaration:0 +#: field:account.vat.declaration,period_to:0 +#: field:accounting.report,period_to:0 +#: field:accounting.report,period_to_cmp:0 +msgid "End Period" +msgstr "" + +#. module: account +#: model:account.account.type,name:account.account_type_expense_view1 +msgid "Expense View" +msgstr "" + +#. module: account +#: field:account.move.line,date_maturity:0 +msgid "Due date" +msgstr "" + +#. module: account +#: model:account.payment.term,name:account.account_payment_term_immediate +#: model:account.payment.term,note:account.account_payment_term_immediate +msgid "Immediate Payment" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1502 +#, python-format +msgid " Centralisation" +msgstr "" + +#. module: account +#: help:account.journal,type:0 +msgid "" +"Select 'Sale' for customer invoices journals. Select 'Purchase' for supplier " +"invoices journals. Select 'Cash' or 'Bank' for journals that are used in " +"customer or supplier payments. Select 'General' for miscellaneous operations " +"journals. Select 'Opening/Closing Situation' for entries generated for new " +"fiscal years." +msgstr "" + +#. module: account +#: view:account.subscription:0 +#: model:ir.model,name:account.model_account_subscription +msgid "Account Subscription" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity date" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Entry Subscription" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,date_from:0 +#: field:account.balance.report,date_from:0 +#: report:account.central.journal:0 +#: field:account.central.journal,date_from:0 +#: field:account.common.account.report,date_from:0 +#: field:account.common.journal.report,date_from:0 +#: field:account.common.partner.report,date_from:0 +#: field:account.common.report,date_from:0 +#: field:account.fiscalyear,date_start:0 +#: 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.partner.balance:0 +#: field:account.partner.balance,date_from:0 +#: field:account.partner.ledger,date_from:0 +#: field:account.print.journal,date_from:0 +#: field:account.report.general.ledger,date_from:0 +#: field:account.subscription,date_start:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,date_from:0 +#: field:accounting.report,date_from:0 +#: field:accounting.report,date_from_cmp:0 +msgid "Start Date" +msgstr "" + +#. module: account +#: help:account.invoice,reconciled:0 +msgid "" +"It indicates that the invoice has been paid and the journal entry of the " +"invoice has been reconciled with one or several journal entries of payment." +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: model:process.node,name:account.process_node_supplierdraftinvoices0 +msgid "Draft Invoices" +msgstr "" + +#. module: account +#: view:cash.box.in:0 +#: model:ir.actions.act_window,name:account.action_cash_box_in +msgid "Put Money In" +msgstr "" + +#. module: account +#: selection:account.account.type,close_method:0 +#: view:account.entries.report:0 +#: view:account.move.line:0 +msgid "Unreconciled" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:922 +#, python-format +msgid "Bad total !" +msgstr "" + +#. module: account +#: field:account.journal,sequence_id:0 +msgid "Entry Sequence" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period_tree +msgid "" +"A period is a fiscal period of time during which accounting entries should " +"be recorded for accounting related activities. Monthly period is the norm " +"but depending on your countries or company needs, you could also have " +"quarterly periods. Closing a period will make it impossible to record new " +"accounting entries, all new entries should then be made on the following " +"open period. Close a period when you do not want to record new entries and " +"want to lock this period for tax related calculation." +msgstr "" + +#. module: account +#: view:account.analytic.account:0 +msgid "Pending" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_analytic_cost_ledger_journal +#: model:ir.actions.report.xml,name:account.account_analytic_account_quantity_cost_ledger +msgid "Cost Ledger (Only quantities)" +msgstr "" + +#. module: account +#: model:process.transition,name:account.process_transition_analyticinvoice0 +#: model:process.transition,name:account.process_transition_supplieranalyticcost0 +msgid "From analytic accounts" +msgstr "" + +#. module: account +#: view:account.installer:0 +msgid "Configure your Fiscal Year" +msgstr "" + +#. module: account +#: field:account.period,name:0 +msgid "Period Name" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_state.py:68 +#, python-format +msgid "" +"Selected invoice(s) cannot be cancelled as they are already in 'Cancelled' " +"or 'Done' state." +msgstr "" + +#. module: account +#: report:account.analytic.account.quantity_cost_ledger:0 +msgid "Code/Date" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: view:account.move:0 +#: view:account.move.line:0 +#: model:ir.actions.act_window,name:account.act_account_journal_2_account_move_line +#: model:ir.actions.act_window,name:account.act_account_move_to_account_move_line_open +#: model:ir.actions.act_window,name:account.act_account_partner_account_move +#: model:ir.actions.act_window,name:account.action_account_items +#: model:ir.actions.act_window,name:account.action_account_moves_all_a +#: model:ir.actions.act_window,name:account.action_move_line_select +#: model:ir.actions.act_window,name:account.action_tax_code_items +#: model:ir.actions.act_window,name:account.action_tax_code_line_open +#: model:ir.model,name:account.model_account_move_line +#: model:ir.ui.menu,name:account.menu_action_account_moves_all +msgid "Journal Items" +msgstr "" + +#. module: account +#: view:accounting.report:0 +msgid "Comparison" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1119 +#, python-format +msgid "" +"You cannot do this modification on a confirmed entry. You can just change " +"some non legal fields or you must unconfirm the journal entry first.\n" +"%s." +msgstr "" + +#. module: account +#: help:account.config.settings,module_account_budget:0 +msgid "" +"This allows accountants to manage analytic and crossovered budgets.\n" +" Once the master budgets and the budgets are defined,\n" +" the project managers can set the planned amount on each " +"analytic account.\n" +" This installs the module account_budget." +msgstr "" + +#. module: account +#: field:account.bank.statement.line,name:0 +msgid "OBI" +msgstr "" + +#. module: account +#: help:res.partner,property_account_payable:0 +msgid "" +"This account will be used instead of the default one as the payable account " +"for the current partner" +msgstr "" + +#. module: account +#: field:account.period,special:0 +msgid "Opening/Closing Period" +msgstr "" + +#. module: account +#: field:account.account,currency_id:0 +#: field:account.account.template,currency_id:0 +#: field:account.bank.accounts.wizard,currency_id:0 +msgid "Secondary Currency" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move +msgid "Validate Account Move" +msgstr "" + +#. module: account +#: field:account.account,credit:0 +#: report:account.account.balance:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: 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 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,credit:0 +#: field:account.move.line,credit:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,credit:0 +#: report:account.vat.declaration:0 +#: field:report.account.receivable,credit:0 +msgid "Credit" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Draft Invoice " +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_account_general_journal +msgid "General Journals" +msgstr "" + +#. module: account +#: view:account.model:0 +msgid "Journal Entry Model" +msgstr "" + +#. module: account +#: code:addons/account/account.py:1073 +#, python-format +msgid "Start period should precede then end period." +msgstr "" + +#. module: account +#: field:account.invoice,number:0 +#: field:account.move,name:0 +msgid "Number" +msgstr "" + +#. module: account +#: report:account.analytic.account.journal:0 +#: selection:account.analytic.journal,type:0 +#: selection:account.bank.statement.line,type:0 +#: selection:account.journal,type:0 +msgid "General" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +#: field:account.invoice.report,price_total:0 +#: field:account.invoice.report,user_currency_price_total:0 +msgid "Total Without Tax" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,filter:0 +#: selection:account.balance.report,filter:0 +#: selection:account.central.journal,filter:0 +#: view:account.chart:0 +#: selection:account.common.account.report,filter:0 +#: selection:account.common.journal.report,filter:0 +#: selection:account.common.partner.report,filter:0 +#: view:account.common.report:0 +#: selection:account.common.report,filter:0 +#: field:account.config.settings,period:0 +#: field:account.fiscalyear,period_ids:0 +#: selection:account.general.journal,filter:0 +#: field:account.installer,period:0 +#: selection:account.partner.balance,filter:0 +#: selection:account.partner.ledger,filter:0 +#: view:account.print.journal:0 +#: selection:account.print.journal,filter:0 +#: selection:account.report.general.ledger,filter:0 +#: report:account.vat.declaration:0 +#: view:account.vat.declaration:0 +#: selection:account.vat.declaration,filter:0 +#: view:accounting.report:0 +#: selection:accounting.report,filter:0 +#: selection:accounting.report,filter_cmp:0 +#: model:ir.actions.act_window,name:account.action_account_period +#: model:ir.ui.menu,name:account.menu_action_account_period +#: model:ir.ui.menu,name:account.next_id_23 +msgid "Periods" +msgstr "" + +#. module: account +#: field:account.invoice.report,currency_rate:0 +msgid "Currency Rate" +msgstr "" + +#. module: account +#: field:account.account,tax_ids:0 +#: view:account.account.template:0 +#: field:account.account.template,tax_ids:0 +#: view:account.chart.template:0 +msgid "Default Taxes" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "April" +msgstr "" + +#. module: account +#: model:account.financial.report,name:account.account_financial_report_profitloss_toreport0 +msgid "Profit (Loss) to report" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:379 +#, python-format +msgid "There is no Sale/Purchase Journal(s) defined." +msgstr "" + +#. module: account +#: view:account.move.line.reconcile.select:0 +msgid "Open for Reconciliation" +msgstr "" + +#. module: account +#: field:account.account,parent_left:0 +msgid "Parent Left" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Title 2 (bold)" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_invoice_tree2 +#: model:ir.ui.menu,name:account.menu_action_invoice_tree2 +msgid "Supplier Invoices" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +#: field:account.analytic.line,product_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,product_id:0 +#: field:account.invoice.line,product_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,product_id:0 +#: field:account.move.line,product_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,product_id:0 +#: field:report.account.sales,product_id:0 +#: field:report.account_type.sales,product_id:0 +msgid "Product" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_validate_account_move +msgid "" +"The validation of journal entries process is also called 'ledger posting' " +"and is the process of transferring debit and credit amounts from a journal " +"of original entry to a ledger book." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_period +msgid "Account period" +msgstr "" + +#. module: account +#: view:account.subscription:0 +msgid "Remove Lines" +msgstr "" + +#. module: account +#: selection:account.account,type:0 +#: selection:account.account.template,type:0 +#: selection:account.entries.report,type:0 +msgid "Regular" +msgstr "" + +#. module: account +#: view:account.account:0 +#: field:account.account,type:0 +#: view:account.account.template:0 +#: field:account.account.template,type:0 +#: field:account.entries.report,type:0 +msgid "Internal Type" +msgstr "" + +#. module: account +#: field:account.subscription.generate,date:0 +msgid "Generate Entries Before" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_subscription_form_running +msgid "Running Subscriptions" +msgstr "" + +#. module: account +#: view:account.analytic.balance:0 +#: view:account.analytic.cost.ledger:0 +#: view:account.analytic.inverted.balance:0 +#: view:account.analytic.journal.report:0 +msgid "Select Period" +msgstr "" + +#. module: account +#: view:account.entries.report:0 +#: selection:account.entries.report,move_state:0 +#: view:account.move:0 +#: selection:account.move,state:0 +#: view:account.move.line:0 +msgid "Posted" +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,date_to:0 +#: field:account.balance.report,date_to:0 +#: report:account.central.journal:0 +#: field:account.central.journal,date_to:0 +#: field:account.common.account.report,date_to:0 +#: field:account.common.journal.report,date_to:0 +#: field:account.common.partner.report,date_to:0 +#: field:account.common.report,date_to:0 +#: field:account.fiscalyear,date_stop:0 +#: 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.partner.balance:0 +#: field:account.partner.balance,date_to:0 +#: field:account.partner.ledger,date_to:0 +#: field:account.print.journal,date_to:0 +#: field:account.report.general.ledger,date_to:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.vat.declaration,date_to:0 +#: field:accounting.report,date_to:0 +#: field:accounting.report,date_to_cmp:0 +msgid "End Date" +msgstr "" + +#. module: account +#: view:account.open.closed.fiscalyear:0 +#: 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 "" + +#. module: account +#: field:account.payment.term.line,days2:0 +msgid "Day of the Month" +msgstr "" + +#. module: account +#: field:account.fiscal.position.tax,tax_src_id:0 +#: field:account.fiscal.position.tax.template,tax_src_id:0 +msgid "Tax Source" +msgstr "" + +#. module: account +#: view:ir.sequence:0 +msgid "Fiscal Year Sequences" +msgstr "" + +#. module: account +#: selection:account.financial.report,display_detail:0 +msgid "No detail" +msgstr "" + +#. module: account +#: field:account.account,unrealized_gain_loss:0 +#: model:ir.actions.act_window,name:account.action_account_gain_loss +#: model:ir.ui.menu,name:account.menu_unrealized_gains_losses +msgid "Unrealized Gain or Loss" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "States" +msgstr "" + +#. module: account +#: help:product.category,property_account_income_categ:0 +#: help:product.template,property_account_income:0 +msgid "This account will be used to value outgoing stock using sale price." +msgstr "" + +#. module: account +#: field:account.invoice,check_total:0 +msgid "Verification Total" +msgstr "" + +#. module: account +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.analytic.account.quantity_cost_ledger:0 +#: view:account.analytic.line:0 +#: field:account.invoice,amount_total:0 +#: field:report.account.sales,amount_total:0 +#: field:report.account_type.sales,amount_total:0 +#: field:report.invoice.created,amount_total:0 +msgid "Total" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_invoice_refund.py:109 +#, python-format +msgid "Cannot %s draft/proforma/cancel invoice." +msgstr "" + +#. module: account +#: field:account.tax,account_analytic_paid_id:0 +msgid "Refund Tax Analytic Account" +msgstr "" + +#. module: account +#: view:account.move.bank.reconcile:0 +msgid "Open for Bank Reconciliation" +msgstr "" + +#. module: account +#: field:account.account,company_id:0 +#: report:account.account.balance:0 +#: field:account.aged.trial.balance,company_id:0 +#: field:account.analytic.journal,company_id:0 +#: field:account.balance.report,company_id:0 +#: field:account.bank.statement,company_id:0 +#: field:account.bank.statement.line,company_id:0 +#: field:account.central.journal,company_id:0 +#: field:account.common.account.report,company_id:0 +#: field:account.common.journal.report,company_id:0 +#: field:account.common.partner.report,company_id:0 +#: field:account.common.report,company_id:0 +#: field:account.config.settings,company_id:0 +#: view:account.entries.report:0 +#: field:account.entries.report,company_id:0 +#: field:account.fiscal.position,company_id:0 +#: field:account.fiscalyear,company_id:0 +#: report:account.general.journal:0 +#: field:account.general.journal,company_id:0 +#: report:account.general.ledger_landscape:0 +#: field:account.installer,company_id:0 +#: field:account.invoice,company_id:0 +#: field:account.invoice.line,company_id:0 +#: view:account.invoice.report:0 +#: field:account.invoice.report,company_id:0 +#: field:account.invoice.tax,company_id:0 +#: field:account.journal,company_id:0 +#: field:account.journal.period,company_id:0 +#: report:account.journal.period.print:0 +#: field:account.model,company_id:0 +#: field:account.move,company_id:0 +#: field:account.move.line,company_id:0 +#: field:account.partner.balance,company_id:0 +#: field:account.partner.ledger,company_id:0 +#: field:account.period,company_id:0 +#: field:account.print.journal,company_id:0 +#: field:account.report.general.ledger,company_id:0 +#: field:account.tax,company_id:0 +#: field:account.tax.code,company_id:0 +#: field:account.treasury.report,company_id:0 +#: field:account.vat.declaration,company_id:0 +#: field:accounting.report,company_id:0 +#: view:analytic.entries.report:0 +#: field:analytic.entries.report,company_id:0 +#: field:wizard.multi.charts.accounts,company_id:0 +msgid "Company" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_action_subscription_form +msgid "Define Recurring Entries" +msgstr "" + +#. module: account +#: field:account.entries.report,date_maturity:0 +msgid "Date Maturity" +msgstr "" + +#. module: account +#: field:account.invoice.refund,description:0 +#: field:cash.box.in,name:0 +#: field:cash.box.out,name:0 +msgid "Reason" +msgstr "" + +#. module: account +#: selection:account.partner.ledger,filter:0 +#: code:addons/account/report/account_partner_ledger.py:56 +#: model:ir.actions.act_window,name:account.act_account_acount_move_line_open_unreconciled +#, python-format +msgid "Unreconciled Entries" +msgstr "" + +#. module: account +#: help:account.partner.reconcile.process,today_reconciled:0 +msgid "" +"This figure depicts the total number of partners that have gone throught the " +"reconciliation process today. The current partner is counted as already " +"processed." +msgstr "" + +#. module: account +#: view:account.fiscalyear:0 +msgid "Create Monthly Periods" +msgstr "" + +#. module: account +#: field:account.tax.code.template,sign:0 +msgid "Sign For Parent" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_balance_report +msgid "Trial Balance Report" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree +msgid "Draft statements" +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_statemententries0 +msgid "" +"Manual or automatic creation of payment entries according to the statements" +msgstr "" + +#. module: account +#: field:account.analytic.balance,empty_acc:0 +msgid "Empty Accounts ? " +msgstr "" + +#. module: account +#: view:account.unreconcile.reconcile:0 +msgid "" +"If you unreconcile transactions, you must also verify all the actions that " +"are linked to those transactions because they will not be disable" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:1056 +#, python-format +msgid "Unable to change tax!" +msgstr "" + +#. module: account +#: constraint:account.bank.statement:0 +msgid "The journal and period chosen have to belong to the same company." +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Invoice lines" +msgstr "" + +#. module: account +#: field:account.chart,period_to:0 +msgid "End period" +msgstr "" + +#. module: account +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_invoice_report_all +msgid "" +"From this report, you can have an overview of the amount invoiced to your " +"customer. The tool search can also be used to personalise your Invoices " +"reports and so, match this analysis to your needs." +msgstr "" + +#. module: account +#: view:account.partner.reconcile.process:0 +msgid "Go to Next Partner" +msgstr "" + +#. module: account +#: view:account.automatic.reconcile:0 +#: view:account.move.line.reconcile.writeoff:0 +msgid "Write-Off Move" +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_paidinvoice0 +msgid "Invoice's state is Done" +msgstr "" + +#. module: account +#: field:account.config.settings,module_account_followup:0 +msgid "Manage customer payment follow-ups" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_sales +msgid "Report of the Sales by Account" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account +msgid "Accounts Fiscal Position" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: selection:account.invoice,type:0 +#: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1158 +#: model:process.process,name:account.process_process_supplierinvoiceprocess0 +#: selection:report.invoice.created,type:0 +#, python-format +msgid "Supplier Invoice" +msgstr "" + +#. module: account +#: field:account.account,debit:0 +#: report:account.account.balance:0 +#: report:account.analytic.account.balance:0 +#: report:account.analytic.account.cost_ledger:0 +#: report:account.analytic.account.inverted.balance:0 +#: report:account.central.journal:0 +#: 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 +#: report:account.journal.period.print.sale.purchase:0 +#: field:account.model.line,debit:0 +#: field:account.move.line,debit:0 +#: report:account.partner.balance:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +#: field:account.treasury.report,debit:0 +#: report:account.vat.declaration:0 +#: field:report.account.receivable,debit:0 +msgid "Debit" +msgstr "" + +#. module: account +#: selection:account.financial.report,style_overwrite:0 +msgid "Title 3 (bold, smaller)" +msgstr "" + +#. module: account +#: view:account.invoice:0 +#: field:account.invoice,invoice_line:0 +msgid "Invoice Lines" +msgstr "" + +#. module: account +#: help:account.model.line,quantity:0 +msgid "The optional quantity on entries." +msgstr "" + +#. module: account +#: field:account.automatic.reconcile,reconciled:0 +msgid "Reconciled transactions" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_report_account_receivable +msgid "Receivable accounts" +msgstr "" + +#. module: account +#: code:addons/account/account_move_line.py:783 +#, python-format +msgid "Already reconciled." +msgstr "" + +#. module: account +#: selection:account.model.line,date_maturity:0 +msgid "Partner Payment Term" +msgstr "" + +#. module: account +#: field:temp.range,name:0 +msgid "Range" +msgstr "" + +#. module: account +#: view:account.analytic.line:0 +msgid "Analytic Journal Items related to a purchase journal." +msgstr "" + +#. module: account +#: help:account.account,type:0 +msgid "" +"The 'Internal Type' is used for features available on different types of " +"accounts: view can not have journal items, consolidation are accounts that " +"can have children accounts for multi-company consolidations, " +"payable/receivable are for partners accounts (for debit/credit " +"computations), closed for depreciated accounts." +msgstr "" + +#. module: account +#: report:account.account.balance:0 +#: selection:account.balance.report,display_account:0 +#: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 +#: selection:account.report.general.ledger,display_account:0 +msgid "With movements" +msgstr "" + +#. module: account +#: view:account.tax.code.template:0 +msgid "Account Tax Code Template" +msgstr "" + +#. module: account +#: model:process.node,name:account.process_node_manually0 +msgid "Manually" +msgstr "" + +#. module: account +#: help:account.move,balance:0 +msgid "" +"This is a field only used for internal purpose and shouldn't be displayed" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "December" +msgstr "" + +#. module: account +#: view:account.invoice.report:0 +msgid "Group by month of Invoice Date" +msgstr "" + +#. module: account +#: code:addons/account/account_analytic_line.py:99 +#, python-format +msgid "There is no income account defined for this product: \"%s\" (id:%d)." +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_aged_receivable_graph +#: view:report.aged.receivable:0 +msgid "Aged Receivable" +msgstr "" + +#. module: account +#: field:account.tax,applicable_type:0 +msgid "Applicability" +msgstr "" + +#. module: account +#: help:account.move.line,currency_id:0 +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_invoiceimport0 +msgid "" +"Import of the statement in the system from a supplier or customer invoice" +msgstr "" + +#. module: account +#: model:ir.ui.menu,name:account.menu_finance_periodical_processing_billing +msgid "Billing" +msgstr "" + +#. module: account +#: view:account.account:0 +#: view:account.analytic.account:0 +msgid "Parent Account" +msgstr "" + +#. module: account +#: view:report.account.receivable:0 +msgid "Accounts by Type" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_analytic_chart +msgid "Account Analytic Chart" +msgstr "" + +#. module: account +#: help:account.invoice,residual:0 +msgid "Remaining amount due." +msgstr "" + +#. module: account +#: field:account.print.journal,sort_selection:0 +msgid "Entries Sorted by" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:1546 +#, python-format +msgid "" +"The selected unit of measure is not compatible with the unit of measure of " +"the product." +msgstr "" + +#. module: account +#: view:account.fiscal.position:0 +#: view:account.fiscal.position.template:0 +msgid "Accounts Mapping" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_tax_code_list +msgid "" +"

\n" +" Click to define a new tax code.\n" +"

\n" +" Depending on the country, a tax code is usually a cell to " +"fill\n" +" in your legal tax statement. OpenERP allows you to define " +"the\n" +" tax structure and each tax computation will be registered " +"in\n" +" one or several tax code.\n" +"

\n" +" " +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "November" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_moves_all_a +msgid "" +"

\n" +" Select the period and the journal you want to fill.\n" +"

\n" +" This view can be used by accountants in order to quickly " +"record\n" +" entries in OpenERP. If you want to record a supplier " +"invoice,\n" +" start by recording the line of the expense account. OpenERP\n" +" will propose to you automatically the Tax related to this\n" +" account and the counterpart \"Account Payable\".\n" +"

\n" +" " +msgstr "" + +#. module: account +#: help:account.invoice.line,account_id:0 +msgid "The income or expense account related to the selected product." +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Install more chart templates" +msgstr "" + +#. module: account +#: report:account.general.journal:0 +#: model:ir.actions.report.xml,name:account.account_general_journal +msgid "General Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Search Invoice" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:1159 +#, python-format +msgid "Refund" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: account +#: field:res.partner,credit:0 +msgid "Total Receivable" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "General Information" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Accounting Documents" +msgstr "" + +#. module: account +#: code:addons/account/account.py:641 +#, python-format +msgid "" +"You cannot remove/deactivate an account which is set on a customer or " +"supplier." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move_lines +msgid "Validate Account Move Lines" +msgstr "" + +#. module: account +#: help:res.partner,property_account_position:0 +msgid "" +"The fiscal position will determine taxes and accounts used for the partner." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaidinvoice0 +msgid "Invoice's state is Done." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_reconcilepaid0 +msgid "As soon as the reconciliation is done, the invoice can be paid." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:59 +#, python-format +msgid "New currency is not configured properly." +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Search Account Templates" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +msgid "Manual Invoice Taxes" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:573 +#, python-format +msgid "The payment term of supplier does not have a payment term line." +msgstr "" + +#. module: account +#: field:account.account,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/js/account_move_reconciliation.js:74 +#: code:addons/account/static/src/js/account_move_reconciliation.js:80 +#, python-format +msgid "Never" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_addtmpl_wizard +msgid "account.addtmpl.wizard" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,result_selection:0 +#: field:account.common.partner.report,result_selection:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,result_selection:0 +#: field:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Partner's" +msgstr "" + +#. module: account +#: field:account.account,note:0 +msgid "Internal Notes" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear +#: view:ir.sequence:0 +#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear +msgid "Fiscal Years" +msgstr "" + +#. module: account +#: help:account.analytic.journal,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the analytic " +"journal without removing it." +msgstr "" + +#. module: account +#: field:account.analytic.line,ref:0 +msgid "Ref." +msgstr "" + +#. module: account +#: field:account.use.model,model:0 +#: model:ir.model,name:account.model_account_model +msgid "Account Model" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:292 +#, python-format +msgid "Loss" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "February" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: help:account.cashbox.line,number_closing:0 +msgid "Closing Unit Numbers" +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,bank_account_id:0 +#: view:account.chart.template:0 +#: field:account.chart.template,bank_account_view_id:0 +#: field:account.invoice,partner_bank_id:0 +#: field:account.invoice.report,partner_bank_id:0 +msgid "Bank Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_central_journal +#: model:ir.model,name:account.model_account_central_journal +msgid "Account Central Journal" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Future" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Search Journal Items" +msgstr "" + +#. module: account +#: help:account.tax,base_sign:0 +#: help:account.tax,ref_base_sign:0 +#: help:account.tax,ref_tax_sign:0 +#: help:account.tax,tax_sign:0 +#: help:account.tax.template,base_sign:0 +#: help:account.tax.template,ref_base_sign:0 +#: help:account.tax.template,ref_tax_sign:0 +#: help:account.tax.template,tax_sign:0 +msgid "Usually 1 or -1." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account_template +msgid "Template Account Fiscal Mapping" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense:0 +msgid "Expense Account on Product Template" +msgstr "" + +#. module: account +#: field:res.partner,property_payment_term:0 +msgid "Customer Payment Term" +msgstr "" + +#. module: account +#: help:accounting.report,label_filter:0 +msgid "" +"This label will be displayed on report to show the balance computed for the " +"given comparison filter." +msgstr "" + +#. module: account +#: selection:account.config.settings,tax_calculation_rounding_method:0 +msgid "Round per line" +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual_currency:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in its currency (maybe different of the company currency)." +msgstr "" diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index e3b3f080365..c666e4dcf2e 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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-19 11:49+0000\n" +"PO-Revision-Date: 2013-07-02 06:32+0000\n" "Last-Translator: Chertykov Denis \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" -"X-Generator: Launchpad (build 16673)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -1959,7 +1959,7 @@ msgstr "Длительность" #: view:account.bank.statement:0 #: field:account.bank.statement,last_closing_balance:0 msgid "Last Closing Balance" -msgstr "" +msgstr "Последнее конечное сальдо" #. module: account #: model:ir.model,name:account.model_account_common_journal_report @@ -3989,6 +3989,8 @@ msgid "" "You cannot modify a posted entry of this journal.\n" "First you should set the journal to allow cancelling entries." msgstr "" +"Нельзя изменить проводку по этому журналу.\n" +"Прежде, нужно разрешить отмену проводок в журнале." #. module: account #: model:ir.actions.act_window,name:account.action_account_print_sale_purchase_journal @@ -4705,7 +4707,7 @@ msgstr "Месяц" #: code:addons/account/account.py:668 #, python-format msgid "You cannot change the code of account which contains journal items!" -msgstr "" +msgstr "Нальзя изменить код счета который содержит проводки!" #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 @@ -4824,7 +4826,7 @@ msgstr "Отметьте, если хотите выводить счета с 0 #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Сверка проводок открытия" #. module: account #. openerp-web @@ -6524,7 +6526,7 @@ msgstr "Позиция аналитики" #. module: account #: model:ir.ui.menu,name:account.menu_action_model_form msgid "Models" -msgstr "" +msgstr "Модели" #. module: account #: code:addons/account/account_invoice.py:1124 @@ -10311,7 +10313,7 @@ msgstr "Внутренний тип" #. module: account #: field:account.subscription.generate,date:0 msgid "Generate Entries Before" -msgstr "" +msgstr "Генерировать проводки до" #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_running diff --git a/addons/account/i18n/vi.po b/addons/account/i18n/vi.po index 4bab5df9a60..66b82d479b2 100644 --- a/addons/account/i18n/vi.po +++ b/addons/account/i18n/vi.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-05-10 17:34+0000\n" -"Last-Translator: Raphael Collet (OpenERP) \n" +"PO-Revision-Date: 2013-06-29 14:38+0000\n" +"Last-Translator: Hung Tran \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:19+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:55+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -60,7 +60,7 @@ msgid "Residual" msgstr "Còn lại" #. module: account -#: code:addons/account/account_bank_statement.py:368 +#: code:addons/account/account_bank_statement.py:369 #, python-format msgid "Journal item \"%s\" is not valid." msgstr "" @@ -73,12 +73,12 @@ msgstr "Aged Receivable Till Today" #. module: account #: model:process.transition,name:account.process_transition_invoiceimport0 msgid "Import from invoice or payment" -msgstr "Import from invoice or payment" +msgstr "Nhập từ hóa đơn hoặc khoản thanh toán" #. module: account -#: code:addons/account/account_move_line.py:1061 -#: code:addons/account/account_move_line.py:1146 -#: code:addons/account/account_move_line.py:1213 +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 +#: code:addons/account/account_move_line.py:1210 #, python-format msgid "Bad Account!" msgstr "" @@ -94,7 +94,7 @@ msgstr "Tổng Nợ" msgid "" "Error!\n" "You cannot create recursive account templates." -msgstr "" +msgstr "Lỗi!" #. module: account #. openerp-web @@ -132,15 +132,15 @@ msgstr "" #: code:addons/account/account.py:641 #: code:addons/account/account.py:686 #: code:addons/account/account.py:781 -#: code:addons/account/account.py:1049 -#: code:addons/account/account_invoice.py:788 -#: code:addons/account/account_invoice.py:791 -#: code:addons/account/account_invoice.py:794 -#: code:addons/account/account_invoice.py:1514 +#: code:addons/account/account.py:1058 +#: code:addons/account/account_invoice.py:820 +#: code:addons/account/account_invoice.py:823 +#: code:addons/account/account_invoice.py:826 +#: code:addons/account/account_invoice.py:1545 #: code:addons/account/account_move_line.py:98 -#: code:addons/account/account_move_line.py:774 -#: code:addons/account/account_move_line.py:827 -#: code:addons/account/account_move_line.py:867 +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 +#: code:addons/account/account_move_line.py:864 #: code:addons/account/wizard/account_fiscalyear_close.py:62 #: code:addons/account/wizard/account_invoice_state.py:44 #: code:addons/account/wizard/account_invoice_state.py:68 @@ -152,7 +152,7 @@ msgid "Warning!" msgstr "Cảnh báo!" #. module: account -#: code:addons/account/account.py:3159 +#: code:addons/account/account.py:3197 #, python-format msgid "Miscellaneous Journal" msgstr "" @@ -192,12 +192,12 @@ msgstr "Hoá đơn được tạo trong 15 ngày qua" #. module: account #: field:accounting.report,label_filter:0 msgid "Column Label" -msgstr "" +msgstr "Nhãn cột" #. module: account #: help:account.config.settings,code_digits:0 msgid "No. of digits to use for account code" -msgstr "" +msgstr "Số chữ số dùng cho mã tài khoản" #. module: account #: help:account.analytic.journal,type:0 @@ -242,7 +242,7 @@ msgstr "Báo cáo của Bỉ" #. module: account #: model:mail.message.subtype,name:account.mt_invoice_validated msgid "Validated" -msgstr "" +msgstr "Đã xác nhận" #. module: account #: model:account.account.type,name:account.account_type_income_view1 @@ -318,7 +318,7 @@ msgstr "Tài khoản chưa đối soát" #. module: account #: field:account.config.settings,module_account_budget:0 msgid "Budget management" -msgstr "" +msgstr "Quản lý quỹ" #. module: account #: view:product.template:0 @@ -336,10 +336,10 @@ msgstr "" #. module: account #: field:account.config.settings,group_multi_currency:0 msgid "Allow multi currencies" -msgstr "" +msgstr "Cho phép đa tiền tệ" #. module: account -#: code:addons/account/account_invoice.py:74 +#: code:addons/account/account_invoice.py:77 #, python-format msgid "You must define an analytic journal of type '%s'!" msgstr "" @@ -357,7 +357,7 @@ msgstr "Tháng Sáu" #: code:addons/account/wizard/account_automatic_reconcile.py:148 #, python-format msgid "You must select accounts to reconcile." -msgstr "" +msgstr "Bạn phải chọn một tài khoản để đối soát" #. module: account #: help:account.config.settings,group_analytic_accounting:0 @@ -370,7 +370,7 @@ msgstr "" #: view:account.invoice.report:0 #: field:account.invoice.report,user_id:0 msgid "Salesperson" -msgstr "" +msgstr "Nhân viên bán hàng" #. module: account #: view:account.bank.statement:0 @@ -660,7 +660,7 @@ msgid "Profit Account" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1159 +#: code:addons/account/account_move_line.py:1156 #, python-format msgid "No period found or more than one period found for the given date." msgstr "" @@ -671,13 +671,13 @@ msgid "Report of the Sales by Account Type" msgstr "Báo cáo Bán hàng theo Loại Tài khoản" #. module: account -#: code:addons/account/account.py:3163 +#: code:addons/account/account.py:3201 #, python-format msgid "SAJ" msgstr "SAJ" #. module: account -#: code:addons/account/account.py:1553 +#: code:addons/account/account.py:1591 #, python-format msgid "Cannot create move with currency different from .." msgstr "" @@ -730,7 +730,9 @@ msgstr "" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:297 +#: code:addons/account/report/account_partner_ledger.py:272 #, python-format msgid "Receivable Accounts" msgstr "Các tài khoản phải thu" @@ -738,7 +740,7 @@ msgstr "Các tài khoản phải thu" #. module: account #: view:account.config.settings:0 msgid "Configure your company bank accounts" -msgstr "" +msgstr "Cấu hình tài khoản ngân hàng của công ty" #. module: account #: view:account.invoice.refund:0 @@ -768,7 +770,7 @@ msgid "Are you sure you want to create entries?" msgstr "Are you sure you want to create entries?" #. module: account -#: code:addons/account/account_invoice.py:1330 +#: code:addons/account/account_invoice.py:1361 #, python-format msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." msgstr "" @@ -817,7 +819,7 @@ msgstr "" #. module: account #: model:ir.ui.menu,name:account.menu_account_report msgid "Financial Report" -msgstr "" +msgstr "Báo cáo tài chính" #. module: account #: view:account.analytic.account:0 @@ -837,7 +839,7 @@ msgid "Type" msgstr "Loại" #. module: account -#: code:addons/account/account_invoice.py:794 +#: code:addons/account/account_invoice.py:826 #, python-format msgid "" "Taxes are missing!\n" @@ -860,10 +862,10 @@ msgid "Supplier Invoices And Refunds" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:854 +#: code:addons/account/account_move_line.py:851 #, python-format msgid "Entry is already reconciled." -msgstr "" +msgstr "Bút toán đã đối soát xong." #. module: account #: view:account.move.line.unreconcile.select:0 @@ -880,7 +882,7 @@ msgstr "Account Analytic Journal" #. module: account #: view:account.invoice:0 msgid "Send by Email" -msgstr "" +msgstr "Gửi qua Email" #. module: account #: help:account.central.journal,amount_currency:0 @@ -900,7 +902,7 @@ msgstr "J.C./Move name" #. module: account #: view:account.account:0 msgid "Account Code and Name" -msgstr "" +msgstr "Mã tài khoản và tên" #. module: account #: selection:account.entries.report,month:0 @@ -931,9 +933,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Không tìm thấy mục nhật ký.\n" +"

\n" +" " #. module: account -#: code:addons/account/account.py:1639 +#: code:addons/account/account.py:1677 #, python-format msgid "" "You cannot unreconcile journal items if they has been generated by the " @@ -977,7 +983,7 @@ msgstr "Đến hạn" #. module: account #: field:account.config.settings,purchase_journal_id:0 msgid "Purchase journal" -msgstr "" +msgstr "Nhật ký mua hàng" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_paid @@ -1017,7 +1023,7 @@ msgid "Liability" msgstr "Liability" #. module: account -#: code:addons/account/account_invoice.py:867 +#: code:addons/account/account_invoice.py:899 #, python-format msgid "Please define sequence on the journal related to this invoice." msgstr "" @@ -1088,13 +1094,13 @@ msgstr "Mã" #. module: account #: view:account.config.settings:0 msgid "Features" -msgstr "" +msgstr "Tính năng" #. module: account -#: code:addons/account/account.py:2308 -#: code:addons/account/account_bank_statement.py:423 -#: code:addons/account/account_invoice.py:74 -#: code:addons/account/account_invoice.py:744 +#: code:addons/account/account.py:2346 +#: code:addons/account/account_bank_statement.py:424 +#: code:addons/account/account_invoice.py:77 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "No Analytic Journal !" @@ -1220,7 +1226,7 @@ msgstr "" #. module: account #: model:account.account.type,name:account.data_account_type_bank #: selection:account.bank.accounts.wizard,account_type:0 -#: code:addons/account/account.py:3054 +#: code:addons/account/account.py:3092 #, python-format msgid "Bank" msgstr "Ngân hàng" @@ -1309,7 +1315,7 @@ msgstr "Outgoing Currencies Rate" #: view:account.analytic.account:0 #: field:account.config.settings,chart_template_id:0 msgid "Template" -msgstr "" +msgstr "Mẫu" #. module: account #: selection:account.analytic.journal,type:0 @@ -1401,7 +1407,7 @@ msgstr "Mức" #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice." -msgstr "" +msgstr "Bạn chỉ có thể thay đổi đồng tiền cho dự thảo hóa đơn" #. module: account #: report:account.invoice:0 @@ -1427,7 +1433,7 @@ msgstr "Chọn một chu kỳ bắt đầu và một chu kỳ kết thúc" #: model:account.financial.report,name:account.account_financial_report_profitandloss0 #: model:ir.actions.act_window,name:account.action_account_report_pl msgid "Profit and Loss" -msgstr "" +msgstr "Lãi và lỗ" #. module: account #: model:ir.model,name:account.model_account_account_template @@ -1500,7 +1506,7 @@ msgstr "" #. module: account #: field:account.invoice.report,state:0 msgid "Invoice Status" -msgstr "" +msgstr "Tình trạng hóa đơn" #. module: account #: view:account.bank.statement:0 @@ -1522,18 +1528,20 @@ msgstr "Khoản phải thu" #: code:addons/account/account.py:768 #, python-format msgid "%s (copy)" -msgstr "" +msgstr "%s (sao chép)" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.partner.balance,display_partner:0 #: selection:account.report.general.ledger,display_account:0 msgid "With balance is not equal to 0" msgstr "With balance is not equal to 0" #. module: account -#: code:addons/account/account.py:1445 +#: code:addons/account/account.py:1483 #, python-format msgid "" "There is no default debit account defined \n" @@ -1601,7 +1609,7 @@ msgstr "" #. module: account #: view:account.config.settings:0 msgid "eInvoicing & Payments" -msgstr "" +msgstr "Hóa đơn điện tử & Thanh toán" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 @@ -1640,7 +1648,7 @@ msgstr "Case Code" #. module: account #: field:account.config.settings,company_footer:0 msgid "Bank accounts footer preview" -msgstr "" +msgstr "Xem trước lề dưới tài khoản ngân hàng" #. module: account #: selection:account.account,type:0 @@ -1681,7 +1689,7 @@ msgstr "Không bị thuế" #. module: account #: view:account.journal:0 msgid "Advanced Settings" -msgstr "" +msgstr "Thiết lập nâng cao" #. module: account #: view:account.bank.statement:0 @@ -1756,8 +1764,10 @@ msgstr "" #: view:account.invoice:0 #: view:account.invoice.report:0 #: field:account.move.line,invoice:0 +#: code:addons/account/account_invoice.py:1157 #: model:ir.model,name:account.model_account_invoice #: model:res.request.link,name:account.req_link_invoice +#, python-format msgid "Invoice" msgstr "Hóa đơn" @@ -1810,7 +1820,7 @@ msgstr "Doanh số theo loại tài khoản" #: model:account.payment.term,name:account.account_payment_term_15days #: model:account.payment.term,note:account.account_payment_term_15days msgid "15 Days" -msgstr "" +msgstr "15 ngày" #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing @@ -1832,7 +1842,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:857 +#: code:addons/account/account_move_line.py:854 #, python-format msgid "Some entries are already reconciled." msgstr "" @@ -1880,7 +1890,7 @@ msgstr "nếu thiết lập này bị sai. bạn có thể ẩn nó thay vì xó #. module: account #: field:account.report.general.ledger,sortby:0 msgid "Sort by" -msgstr "" +msgstr "Xếp theo" #. module: account #: model:ir.actions.act_window,name:account.act_account_partner_account_move_all @@ -1948,12 +1958,12 @@ msgstr "Draft statement" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_validated msgid "Invoice validated" -msgstr "" +msgstr "Hóa đơn đã xác nhận" #. module: account #: field:account.config.settings,module_account_check_writing:0 msgid "Pay your suppliers by check" -msgstr "" +msgstr "Trả tiền cho NCC bằng séc" #. module: account #: field:account.move.line.reconcile,credit:0 @@ -1984,36 +1994,36 @@ msgstr "" #: code:addons/account/account.py:634 #: code:addons/account/account.py:636 #: code:addons/account/account.py:930 -#: code:addons/account/account.py:1062 -#: code:addons/account/account.py:1064 -#: code:addons/account/account.py:1103 -#: code:addons/account/account.py:1283 -#: code:addons/account/account.py:1297 -#: code:addons/account/account.py:1320 -#: code:addons/account/account.py:1327 -#: code:addons/account/account.py:1549 -#: code:addons/account/account.py:1553 -#: code:addons/account/account.py:1639 -#: code:addons/account/account.py:2320 -#: code:addons/account/account.py:2640 -#: code:addons/account/account.py:3427 +#: code:addons/account/account.py:1071 +#: code:addons/account/account.py:1073 +#: code:addons/account/account.py:1116 +#: code:addons/account/account.py:1319 +#: code:addons/account/account.py:1333 +#: code:addons/account/account.py:1356 +#: code:addons/account/account.py:1363 +#: code:addons/account/account.py:1587 +#: code:addons/account/account.py:1591 +#: code:addons/account/account.py:1677 +#: code:addons/account/account.py:2358 +#: code:addons/account/account.py:2678 +#: code:addons/account/account.py:3465 #: code:addons/account/account_analytic_line.py:89 #: code:addons/account/account_analytic_line.py:98 -#: code:addons/account/account_bank_statement.py:367 -#: code:addons/account/account_bank_statement.py:380 -#: code:addons/account/account_bank_statement.py:418 +#: code:addons/account/account_bank_statement.py:368 +#: code:addons/account/account_bank_statement.py:381 +#: code:addons/account/account_bank_statement.py:419 #: code:addons/account/account_cash_statement.py:256 #: code:addons/account/account_cash_statement.py:300 -#: code:addons/account/account_invoice.py:867 -#: code:addons/account/account_invoice.py:901 -#: code:addons/account/account_invoice.py:1091 -#: code:addons/account/account_move_line.py:578 -#: code:addons/account/account_move_line.py:831 +#: code:addons/account/account_invoice.py:899 +#: code:addons/account/account_invoice.py:933 +#: code:addons/account/account_invoice.py:1124 +#: code:addons/account/account_move_line.py:579 +#: code:addons/account/account_move_line.py:828 +#: code:addons/account/account_move_line.py:851 #: code:addons/account/account_move_line.py:854 -#: code:addons/account/account_move_line.py:857 -#: code:addons/account/account_move_line.py:1122 -#: code:addons/account/account_move_line.py:1124 -#: code:addons/account/account_move_line.py:1159 +#: code:addons/account/account_move_line.py:1119 +#: code:addons/account/account_move_line.py:1121 +#: code:addons/account/account_move_line.py:1156 #: code:addons/account/report/common_report_header.py:92 #: code:addons/account/wizard/account_change_currency.py:38 #: code:addons/account/wizard/account_change_currency.py:59 @@ -2027,11 +2037,11 @@ msgstr "" #: code:addons/account/wizard/account_report_common.py:158 #: code:addons/account/wizard/account_report_common.py:164 #: code:addons/account/wizard/account_use_model.py:44 -#: code:addons/account/wizard/pos_box.py:32 -#: code:addons/account/wizard/pos_box.py:36 +#: code:addons/account/wizard/pos_box.py:31 +#: code:addons/account/wizard/pos_box.py:35 #, python-format msgid "Error!" -msgstr "" +msgstr "Lỗi!" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree2 @@ -2070,7 +2080,7 @@ msgid "period close" msgstr "đóng chu kỳ" #. module: account -#: code:addons/account/account.py:1049 +#: code:addons/account/account.py:1058 #, python-format msgid "" "This journal already contains items for this period, therefore you cannot " @@ -2085,7 +2095,7 @@ msgstr "Entries By Line" #. module: account #: field:account.vat.declaration,based_on:0 msgid "Based on" -msgstr "" +msgstr "Dựa trên" #. module: account #: model:ir.actions.act_window,help:account.action_bank_statement_tree @@ -2133,7 +2143,7 @@ msgstr "Phân tích ngân quỹ" #. module: account #: model:ir.actions.report.xml,name:account.account_journal_sale_purchase msgid "Sale/Purchase Journal" -msgstr "" +msgstr "Nhật ký Mua/Bán hàng" #. module: account #: view:account.analytic.account:0 @@ -2142,7 +2152,7 @@ msgid "Analytic account" msgstr "Tài khoản phân tích" #. module: account -#: code:addons/account/account_bank_statement.py:405 +#: code:addons/account/account_bank_statement.py:406 #, python-format msgid "Please verify that an account is defined in the journal." msgstr "Vui lòng kiểm tra việc gán một tài khoản cho sổ nhật ký này." @@ -2156,7 +2166,7 @@ msgstr "Hợp lệ" #: field:account.bank.statement,message_follower_ids:0 #: field:account.invoice,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Người theo dõi" #. module: account #: model:ir.actions.act_window,name:account.action_account_print_journal @@ -2185,14 +2195,14 @@ msgstr "Account Aged Trial balance Report" #. module: account #: view:account.fiscalyear.close.state:0 msgid "Close Fiscal Year" -msgstr "" +msgstr "Đóng năm tài khóa" #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:14 #, python-format msgid "Journal :" -msgstr "" +msgstr "Nhật ký:" #. module: account #: sql_constraint:account.fiscal.position.tax:0 @@ -2209,12 +2219,12 @@ msgstr "Định nghĩa thuế" #: view:account.config.settings:0 #: model:ir.actions.act_window,name:account.action_account_config msgid "Configure Accounting" -msgstr "" +msgstr "Cấu hình kế toán" #. module: account #: field:account.invoice.report,uom_name:0 msgid "Reference Unit of Measure" -msgstr "" +msgstr "Tham chiếu đơn vị tính" #. module: account #: help:account.journal,allow_date:0 @@ -2230,12 +2240,12 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:8 #, python-format msgid "Good job!" -msgstr "" +msgstr "Tốt lắm!" #. module: account #: field:account.config.settings,module_account_asset:0 msgid "Assets management" -msgstr "" +msgstr "Quản lý tài sản" #. module: account #: view:account.account:0 @@ -2244,7 +2254,9 @@ msgstr "" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:299 +#: code:addons/account/report/account_partner_ledger.py:274 #, python-format msgid "Payable Accounts" msgstr "Các tài khoản phải trả" @@ -2411,7 +2423,7 @@ msgstr "Search Chart of Account Templates" #. module: account #: report:account.invoice:0 msgid "Customer Code" -msgstr "" +msgstr "Mã khách hàng" #. module: account #: view:account.account.type:0 @@ -2554,7 +2566,7 @@ msgid "Create an Account Based on this Template" msgstr "Tạo một Tài khoản dựa trên mẫu này" #. module: account -#: code:addons/account/account_invoice.py:901 +#: code:addons/account/account_invoice.py:933 #, python-format msgid "" "Cannot create the invoice.\n" @@ -2575,7 +2587,7 @@ msgid "Main Sequence" msgstr "Main Sequence" #. module: account -#: code:addons/account/account_bank_statement.py:477 +#: code:addons/account/account_bank_statement.py:478 #, python-format msgid "" "In order to delete a bank statement, you must first cancel it to delete " @@ -2599,7 +2611,7 @@ msgid "Fiscal Positions" msgstr "Fiscal Positions" #. module: account -#: code:addons/account/account_move_line.py:578 +#: code:addons/account/account_move_line.py:579 #, python-format msgid "You cannot create journal items on a closed account %s %s." msgstr "" @@ -2707,7 +2719,7 @@ msgid "Account Model Entries" msgstr "Account Model Entries" #. module: account -#: code:addons/account/account.py:3164 +#: code:addons/account/account.py:3202 #, python-format msgid "EXJ" msgstr "EXJ" @@ -2823,21 +2835,20 @@ msgid "Accounts" msgstr "Các tài khoản" #. module: account -#: code:addons/account/account.py:3503 -#: code:addons/account/account_bank_statement.py:404 -#: code:addons/account/account_invoice.py:378 -#: code:addons/account/account_invoice.py:484 -#: code:addons/account/account_invoice.py:582 -#: code:addons/account/account_invoice.py:597 -#: code:addons/account/account_invoice.py:605 -#: code:addons/account/account_invoice.py:627 -#: code:addons/account/account_move_line.py:535 +#: code:addons/account/account.py:3541 +#: code:addons/account/account_bank_statement.py:405 +#: code:addons/account/account_invoice.py:507 +#: code:addons/account/account_invoice.py:609 +#: code:addons/account/account_invoice.py:624 +#: code:addons/account/account_invoice.py:632 +#: code:addons/account/account_invoice.py:657 +#: code:addons/account/account_move_line.py:536 #, python-format msgid "Configuration Error!" msgstr "Lỗi cấu hình!" #. module: account -#: code:addons/account/account_bank_statement.py:433 +#: code:addons/account/account_bank_statement.py:434 #, python-format msgid "Statement %s confirmed, journal items were created." msgstr "" @@ -3030,7 +3041,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:1062 +#: code:addons/account/account.py:1071 #, python-format msgid "You should choose the periods that belong to the same company." msgstr "" @@ -3043,7 +3054,7 @@ msgid "Sales by Account" msgstr "Doanh thu theo tài khoản" #. module: account -#: code:addons/account/account.py:1411 +#: code:addons/account/account.py:1449 #, python-format msgid "You cannot delete a posted journal entry \"%s\"." msgstr "" @@ -3059,8 +3070,8 @@ msgid "Sale journal" msgstr "" #. module: account -#: code:addons/account/account.py:2308 -#: code:addons/account/account_invoice.py:744 +#: code:addons/account/account.py:2346 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "You have to define an analytic journal on the '%s' journal!" @@ -3227,7 +3238,7 @@ msgid "Fiscal Position" msgstr "Fiscal Position" #. module: account -#: code:addons/account/account_invoice.py:791 +#: code:addons/account/account_invoice.py:823 #, python-format msgid "" "Tax base different!\n" @@ -3325,7 +3336,7 @@ msgstr "" "always use the rate at date." #. module: account -#: code:addons/account/account.py:2640 +#: code:addons/account/account.py:2678 #, python-format msgid "There is no parent code for the template account." msgstr "" @@ -3388,8 +3399,8 @@ msgid "View" msgstr "View" #. module: account -#: code:addons/account/account.py:3422 -#: code:addons/account/account_bank.py:95 +#: code:addons/account/account.py:3460 +#: code:addons/account/account_bank.py:94 #, python-format msgid "BNK" msgstr "BNK" @@ -3659,7 +3670,7 @@ msgstr "" "have the same references than the statement itself" #. module: account -#: code:addons/account/account_invoice.py:984 +#: code:addons/account/account_invoice.py:1016 #, python-format msgid "" "You cannot create an invoice on a centralized journal. Uncheck the " @@ -3674,7 +3685,7 @@ msgid "Starting Balance" msgstr "Số dư ban đầu" #. module: account -#: code:addons/account/account_invoice.py:1434 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "No Partner Defined !" msgstr "Không có đối tác được định nghĩa" @@ -3728,7 +3739,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:535 +#: code:addons/account/account_move_line.py:536 #, python-format msgid "" "Cannot find any account journal of %s type for this company.\n" @@ -3878,7 +3889,7 @@ msgid "Period Length (days)" msgstr "" #. module: account -#: code:addons/account/account.py:1327 +#: code:addons/account/account.py:1363 #, python-format msgid "" "You cannot modify a posted entry of this journal.\n" @@ -3947,9 +3958,13 @@ msgid "VAT :" msgstr "Thuế GTGT :" #. module: account +#: report:account.account.balance:0 #: report:account.central.journal:0 #: view:account.config.settings:0 +#: report:account.general.journal:0 #: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 #: report:account.partner.balance:0 #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 @@ -4041,7 +4056,7 @@ msgid "Chart of Accounts Template" msgstr "Hoạch đồ Kế toán Mẫu" #. module: account -#: code:addons/account/account.py:2320 +#: code:addons/account/account.py:2358 #, python-format msgid "" "Maturity date of entry line generated by model line '%s' of model '%s' is " @@ -4053,8 +4068,10 @@ msgstr "" "Hãy xác định đối tác trên nó" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 @@ -4213,7 +4230,7 @@ msgid "Name" msgstr "Tên" #. module: account -#: code:addons/account/installer.py:94 +#: code:addons/account/installer.py:115 #, python-format msgid "No unconfigured company !" msgstr "" @@ -4284,8 +4301,8 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1061 -#: code:addons/account/account_move_line.py:1146 +#: code:addons/account/account_move_line.py:1058 +#: code:addons/account/account_move_line.py:1143 #, python-format msgid "You cannot use an inactive account." msgstr "" @@ -4315,7 +4332,7 @@ msgid "Consolidated Children" msgstr "Consolidated Children" #. module: account -#: code:addons/account/account_invoice.py:550 +#: code:addons/account/account_invoice.py:573 #: code:addons/account/wizard/account_invoice_refund.py:146 #, python-format msgid "Insufficient Data!" @@ -4523,7 +4540,7 @@ msgid "Cancel the Selected Invoices" msgstr "Hủy bỏ các hóa đơn được chọn" #. module: account -#: code:addons/account/account_bank_statement.py:423 +#: code:addons/account/account_bank_statement.py:424 #, python-format msgid "You have to assign an analytic journal on the '%s' journal!" msgstr "" @@ -4590,8 +4607,8 @@ msgid "Supplier invoice sequence" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:583 -#: code:addons/account/account_invoice.py:598 +#: code:addons/account/account_invoice.py:610 +#: code:addons/account/account_invoice.py:625 #, python-format msgid "" "Cannot find a chart of account, you should create one from Settings\\" @@ -4654,7 +4671,7 @@ msgid "Account Base Code" msgstr "Account Base Code" #. module: account -#: code:addons/account/account_move_line.py:867 +#: code:addons/account/account_move_line.py:864 #, python-format msgid "" "You have to provide an account for the write off/exchange difference entry." @@ -4720,7 +4737,7 @@ msgid "Statement from invoice or payment" msgstr "Statement from invoice or payment" #. module: account -#: code:addons/account/installer.py:94 +#: code:addons/account/installer.py:115 #, python-format msgid "" "There is currently no company without chart of account. The wizard will " @@ -4774,7 +4791,7 @@ msgid "Bank statements are entered in the system." msgstr "Bank statements are entered in the system." #. module: account -#: code:addons/account/wizard/account_reconcile.py:121 +#: code:addons/account/wizard/account_reconcile.py:122 #, python-format msgid "Reconcile Writeoff" msgstr "Reconcile Writeoff" @@ -4864,7 +4881,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:627 +#: code:addons/account/account_invoice.py:658 #, python-format msgid "" "Cannot find any account journal of %s type for this company.\n" @@ -4879,7 +4896,7 @@ msgid "Based On" msgstr "Dựa trên" #. module: account -#: code:addons/account/account.py:3166 +#: code:addons/account/account.py:3204 #, python-format msgid "ECNJ" msgstr "ECNJ" @@ -4945,7 +4962,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:3356 +#: code:addons/account/account.py:3394 #, python-format msgid "Purchase Tax %.2f%%" msgstr "" @@ -5019,7 +5036,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:3167 +#: code:addons/account/account.py:3205 #, python-format msgid "MISC" msgstr "" @@ -5188,7 +5205,7 @@ msgid "Tax Application" msgstr "Tax Application" #. module: account -#: code:addons/account/account_invoice.py:890 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "" "Please verify the price of the invoice !\n" @@ -5362,7 +5379,7 @@ msgid "Target Moves" msgstr "Target Moves" #. module: account -#: code:addons/account/account.py:1416 +#: code:addons/account/account.py:1454 #, python-format msgid "" "Move cannot be deleted if linked to an invoice. (Invoice: %s - Move ID:%s)" @@ -5443,7 +5460,7 @@ msgid "Internal Name" msgstr "Tên nội bộ" #. module: account -#: code:addons/account/account_move_line.py:1188 +#: code:addons/account/account_move_line.py:1185 #, python-format msgid "" "Cannot create an automatic sequence for this piece.\n" @@ -5515,7 +5532,7 @@ msgid "Compute Code (if type=code)" msgstr "Compute Code (if type=code)" #. module: account -#: code:addons/account/account_invoice.py:485 +#: code:addons/account/account_invoice.py:508 #, python-format msgid "" "Cannot find a chart of accounts for this company, you should create one." @@ -5646,7 +5663,7 @@ msgid "Recompute taxes and total" msgstr "" #. module: account -#: code:addons/account/account.py:1103 +#: code:addons/account/account.py:1116 #, python-format msgid "You cannot modify/delete a journal with entries for this period." msgstr "" @@ -5676,7 +5693,7 @@ msgid "Amount Computation" msgstr "Tính toán giá trị" #. module: account -#: code:addons/account/account_move_line.py:1108 +#: code:addons/account/account_move_line.py:1105 #, python-format msgid "You can not add/modify entries in a closed period %s of journal %s." msgstr "" @@ -5976,7 +5993,7 @@ msgid "Fixed Amount" msgstr "Giá trị cố định" #. module: account -#: code:addons/account/account_move_line.py:1059 +#: code:addons/account/account_move_line.py:1056 #, python-format msgid "You cannot change the tax, you should remove and recreate lines." msgstr "" @@ -6027,14 +6044,14 @@ msgid "Child Accounts" msgstr "Tài khoản con" #. module: account -#: code:addons/account/account_move_line.py:1120 +#: code:addons/account/account_move_line.py:1117 #, python-format msgid "Move name (id): %s (%s)" msgstr "" #. module: account #: view:account.move.line.reconcile:0 -#: code:addons/account/account_move_line.py:882 +#: code:addons/account/account_move_line.py:879 #, python-format msgid "Write-Off" msgstr "Miễn bỏ" @@ -6060,7 +6077,7 @@ msgstr "Income" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:355 +#: code:addons/account/account_invoice.py:390 #, python-format msgid "Supplier" msgstr "Nhà cung cấp" @@ -6080,7 +6097,7 @@ msgid "Account n°" msgstr "Tài khoản số" #. module: account -#: code:addons/account/account_invoice.py:92 +#: code:addons/account/account_invoice.py:95 #, python-format msgid "Free Reference" msgstr "Tham chiếu tự do" @@ -6090,7 +6107,9 @@ msgstr "Tham chiếu tự do" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:301 +#: code:addons/account/report/account_partner_ledger.py:276 #, python-format msgid "Receivable and Payable Accounts" msgstr "Các Tài khoản Phải thu và Phải trả" @@ -6199,7 +6218,7 @@ msgid "Filter by" msgstr "Lọc theo" #. module: account -#: code:addons/account/account.py:2296 +#: code:addons/account/account.py:2334 #, python-format msgid "You have a wrong expression \"%(...)s\" in your model !" msgstr "" @@ -6247,7 +6266,7 @@ msgid "Number of Days" msgstr "Số ngày" #. module: account -#: code:addons/account/account.py:1321 +#: code:addons/account/account.py:1357 #, python-format msgid "" "You cannot validate this journal entry because account \"%s\" does not " @@ -6395,7 +6414,7 @@ msgid "Models" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1091 +#: code:addons/account/account_invoice.py:1124 #, python-format msgid "" "You cannot cancel an invoice which is partially paid. You need to " @@ -6567,7 +6586,7 @@ msgid "You cannot create journal items on closed account." msgstr "" #. module: account -#: code:addons/account/account_invoice.py:606 +#: code:addons/account/account_invoice.py:633 #, python-format msgid "Invoice line account's company and invoice's compnay does not match." msgstr "" @@ -6588,7 +6607,7 @@ msgid "The related account currency if not equal to the company one." msgstr "The related account currency if not equal to the company one." #. module: account -#: code:addons/account/installer.py:48 +#: code:addons/account/installer.py:69 #, python-format msgid "Custom" msgstr "" @@ -6615,7 +6634,7 @@ msgid "Internal Transfers Account" msgstr "" #. module: account -#: code:addons/account/wizard/pos_box.py:33 +#: code:addons/account/wizard/pos_box.py:32 #, python-format msgid "Please check that the field 'Journal' is set on the Bank Statement" msgstr "" @@ -6641,7 +6660,7 @@ msgid "Power" msgstr "Power" #. module: account -#: code:addons/account/account.py:3427 +#: code:addons/account/account.py:3465 #, python-format msgid "Cannot generate an unused journal code." msgstr "" @@ -6717,12 +6736,12 @@ msgstr "" "children. In this case, the evaluation order is important." #. module: account -#: code:addons/account/account.py:1410 -#: code:addons/account/account.py:1415 -#: code:addons/account/account.py:1444 -#: code:addons/account/account.py:1451 -#: code:addons/account/account_invoice.py:983 -#: code:addons/account/account_move_line.py:1008 +#: code:addons/account/account.py:1448 +#: code:addons/account/account.py:1453 +#: code:addons/account/account.py:1482 +#: code:addons/account/account.py:1489 +#: code:addons/account/account_invoice.py:1015 +#: code:addons/account/account_move_line.py:1005 #: code:addons/account/wizard/account_automatic_reconcile.py:148 #: code:addons/account/wizard/account_fiscalyear_close.py:88 #: code:addons/account/wizard/account_fiscalyear_close.py:99 @@ -6807,7 +6826,9 @@ msgstr "" #: report:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1160 #: selection:report.invoice.created,type:0 +#, python-format msgid "Supplier Refund" msgstr "Hoàn tiền cho Nhà cung cấp" @@ -6952,7 +6973,7 @@ msgstr "Analytic Entries Statistics" #. module: account #: code:addons/account/account_analytic_line.py:142 -#: code:addons/account/account_move_line.py:958 +#: code:addons/account/account_move_line.py:955 #, python-format msgid "Entries: " msgstr "Các bút toán: " @@ -7065,7 +7086,7 @@ msgstr "" #. module: account #: code:addons/account/account.py:1024 -#: code:addons/account/account_move_line.py:1108 +#: code:addons/account/account_move_line.py:1105 #, python-format msgid "Error !" msgstr "Lỗi !" @@ -7292,7 +7313,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account.py:2266 +#: code:addons/account/account.py:2304 #, python-format msgid "" "You can specify year, month and date in the name of the model using the " @@ -7371,7 +7392,7 @@ msgid "Done" msgstr "Hoàn tất" #. module: account -#: code:addons/account/account.py:1283 +#: code:addons/account/account.py:1319 #, python-format msgid "" "You cannot validate a non-balanced entry.\n" @@ -7667,7 +7688,7 @@ msgstr "Báo cáo" #. module: account #. openerp-web -#: code:addons/account/account_move_line.py:783 +#: code:addons/account/account_move_line.py:780 #: code:addons/account/static/src/js/account_move_reconciliation.js:90 #, python-format msgid "Warning" @@ -7733,7 +7754,7 @@ msgid "Use model" msgstr "Sử dụng mô hình" #. module: account -#: code:addons/account/account.py:1452 +#: code:addons/account/account.py:1490 #, python-format msgid "" "There is no default credit account defined \n" @@ -7784,7 +7805,7 @@ msgid "Root/View" msgstr "" #. module: account -#: code:addons/account/account.py:3168 +#: code:addons/account/account.py:3206 #, python-format msgid "OPEJ" msgstr "" @@ -7853,7 +7874,7 @@ msgid "Maturity Date" msgstr "" #. module: account -#: code:addons/account/account.py:3155 +#: code:addons/account/account.py:3193 #, python-format msgid "Sales Journal" msgstr "Sổ nhật ký Bán hàng" @@ -7864,7 +7885,7 @@ msgid "Invoice Tax" msgstr "Thuế Hóa đơn" #. module: account -#: code:addons/account/account_move_line.py:1188 +#: code:addons/account/account_move_line.py:1185 #, python-format msgid "No piece number !" msgstr "No piece number !" @@ -7903,7 +7924,7 @@ msgid "Sales Properties" msgstr "Các thuộc tính Bán hàng" #. module: account -#: code:addons/account/account.py:3503 +#: code:addons/account/account.py:3541 #, python-format msgid "" "You have to set a code for the bank account defined on the selected chart of " @@ -7928,7 +7949,7 @@ msgstr "Đến" #. module: account #: selection:account.move.line,centralisation:0 -#: code:addons/account/account.py:1503 +#: code:addons/account/account.py:1541 #, python-format msgid "Currency Adjustment" msgstr "" @@ -7960,7 +7981,7 @@ msgid "May" msgstr "Tháng Năm" #. module: account -#: code:addons/account/account_invoice.py:788 +#: code:addons/account/account_invoice.py:820 #, python-format msgid "Global taxes defined, but they are not in invoice lines !" msgstr "" @@ -8001,7 +8022,7 @@ msgstr "Post Journal Entries" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:353 +#: code:addons/account/account_invoice.py:388 #, python-format msgid "Customer" msgstr "Khách hàng" @@ -8017,7 +8038,7 @@ msgstr "" #: selection:account.bank.accounts.wizard,account_type:0 #: selection:account.entries.report,type:0 #: selection:account.journal,type:0 -#: code:addons/account/account.py:3054 +#: code:addons/account/account.py:3092 #, python-format msgid "Cash" msgstr "Tiền mặt" @@ -8187,6 +8208,7 @@ msgstr "Đã sửa" #: code:addons/account/account.py:653 #: code:addons/account/account.py:656 #: code:addons/account/account.py:668 +#: code:addons/account/account.py:1031 #, python-format msgid "Warning !" msgstr "Cảnh báo !" @@ -8254,7 +8276,7 @@ msgid "Select a currency to apply on the invoice" msgstr "Chọn một loại tiền để áp dụng cho hóa đơn" #. module: account -#: code:addons/account/account_invoice.py:869 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "No Invoice Lines !" msgstr "No Invoice Lines !" @@ -8279,7 +8301,7 @@ msgid "Tax Use In" msgstr "Thuế sử dụng trong" #. module: account -#: code:addons/account/account_bank_statement.py:381 +#: code:addons/account/account_bank_statement.py:382 #, python-format msgid "" "The statement balance is incorrect !\n" @@ -8287,7 +8309,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_bank_statement.py:419 +#: code:addons/account/account_bank_statement.py:420 #, python-format msgid "The account entries lines are not in valid state." msgstr "The account entries lines are not in valid state." @@ -8331,7 +8353,7 @@ msgid "Associated Partner" msgstr "Đối tác Liên quan" #. module: account -#: code:addons/account/account_invoice.py:1434 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "You must first select a partner !" msgstr "You must first select a partner !" @@ -8412,13 +8434,13 @@ msgstr "" "tính toán các khoản thuế tiếp theo" #. module: account -#: code:addons/account/account.py:3158 +#: code:addons/account/account.py:3196 #, python-format msgid "Purchase Refund Journal" msgstr "Sổ nhật ký Hoàn tiền Mua hàng" #. module: account -#: code:addons/account/account.py:1297 +#: code:addons/account/account.py:1333 #, python-format msgid "Please define a sequence on the journal." msgstr "" @@ -8663,7 +8685,7 @@ msgid "${object.company_id.name} Invoice (Ref ${object.number or 'n/a'})" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1213 +#: code:addons/account/account_move_line.py:1210 #, python-format msgid "" "You cannot use this general account in this journal, check the tab 'Entry " @@ -8764,7 +8786,7 @@ msgid "The partner account used for this invoice." msgstr "The partner account used for this invoice." #. module: account -#: code:addons/account/account.py:3353 +#: code:addons/account/account.py:3391 #, python-format msgid "Tax %.2f%%" msgstr "" @@ -8782,7 +8804,7 @@ msgid "Payment Term Line" msgstr "Payment Term Line" #. module: account -#: code:addons/account/account.py:3156 +#: code:addons/account/account.py:3194 #, python-format msgid "Purchase Journal" msgstr "Purchase Journal" @@ -8953,7 +8975,7 @@ msgid "Journal Name" msgstr "Journal Name" #. module: account -#: code:addons/account/account_move_line.py:832 +#: code:addons/account/account_move_line.py:829 #, python-format msgid "Entry \"%s\" is not valid !" msgstr "Bút toán \"%s\" không hợp lệ !" @@ -9005,7 +9027,7 @@ msgstr "" "entry." #. module: account -#: code:addons/account/account_move_line.py:1009 +#: code:addons/account/account_move_line.py:1006 #, python-format msgid "The account move (%s) for centralisation has been confirmed." msgstr "" @@ -9067,7 +9089,7 @@ msgid "Reconciled entries" msgstr "Reconciled entries" #. module: account -#: code:addons/account/account.py:2296 +#: code:addons/account/account.py:2334 #, python-format msgid "Wrong model !" msgstr "" @@ -9089,7 +9111,7 @@ msgid "Print Account Partner Balance" msgstr "Print Account Partner Balance" #. module: account -#: code:addons/account/account_move_line.py:1124 +#: code:addons/account/account_move_line.py:1121 #, python-format msgid "" "You cannot do this modification on a reconciled entry. You can just change " @@ -9123,7 +9145,7 @@ msgstr "chưa biết" #. module: account #: field:account.fiscalyear.close,journal_id:0 -#: code:addons/account/account.py:3160 +#: code:addons/account/account.py:3198 #, python-format msgid "Opening Entries Journal" msgstr "Opening Entries Journal" @@ -9220,7 +9242,7 @@ msgid "Unit of Currency" msgstr "" #. module: account -#: code:addons/account/account.py:3157 +#: code:addons/account/account.py:3195 #, python-format msgid "Sales Refund Journal" msgstr "Sales Refund Journal" @@ -9286,13 +9308,13 @@ msgid "Purchase Tax(%)" msgstr "Thuế mua hàng(%)" #. module: account -#: code:addons/account/account_invoice.py:869 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "Please create some invoice lines." msgstr "Please create some invoice lines." #. module: account -#: code:addons/account/wizard/pos_box.py:37 +#: code:addons/account/wizard/pos_box.py:36 #, python-format msgid "" "Please check that the field 'Internal Transfers Account' is set on the " @@ -9305,7 +9327,7 @@ msgid "Display Detail" msgstr "" #. module: account -#: code:addons/account/account.py:3165 +#: code:addons/account/account.py:3203 #, python-format msgid "SCNJ" msgstr "SCNJ" @@ -9467,8 +9489,8 @@ msgid "Receivable Account" msgstr "Tài khoản Phải thu" #. module: account -#: code:addons/account/account_move_line.py:774 -#: code:addons/account/account_move_line.py:827 +#: code:addons/account/account_move_line.py:771 +#: code:addons/account/account_move_line.py:824 #, python-format msgid "To reconcile the entries company should be the same for all entries." msgstr "" @@ -9569,7 +9591,7 @@ msgid "Move" msgstr "Move" #. module: account -#: code:addons/account/account_bank_statement.py:477 +#: code:addons/account/account_bank_statement.py:478 #: code:addons/account/wizard/account_period_close.py:51 #, python-format msgid "Invalid Action!" @@ -9666,7 +9688,7 @@ msgid "Balance :" msgstr "Số dư :" #. module: account -#: code:addons/account/account.py:1549 +#: code:addons/account/account.py:1587 #, python-format msgid "Cannot create moves for different companies." msgstr "" @@ -9757,7 +9779,7 @@ msgid "Immediate Payment" msgstr "" #. module: account -#: code:addons/account/account.py:1464 +#: code:addons/account/account.py:1502 #, python-format msgid " Centralisation" msgstr "" @@ -9846,7 +9868,7 @@ msgid "Unreconciled" msgstr "Chưa được đối soát" #. module: account -#: code:addons/account/account_invoice.py:890 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "Bad total !" msgstr "Tổng không hợp lệ !" @@ -9938,7 +9960,7 @@ msgid "Comparison" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1122 +#: code:addons/account/account_move_line.py:1119 #, python-format msgid "" "You cannot do this modification on a confirmed entry. You can just change " @@ -10027,7 +10049,7 @@ msgid "Journal Entry Model" msgstr "Journal Entry Model" #. module: account -#: code:addons/account/account.py:1064 +#: code:addons/account/account.py:1073 #, python-format msgid "Start period should precede then end period." msgstr "" @@ -10329,6 +10351,7 @@ msgstr "Mở việc đối soát với ngân hàng" #. module: account #: field:account.account,company_id:0 +#: report:account.account.balance:0 #: field:account.aged.trial.balance,company_id:0 #: field:account.analytic.journal,company_id:0 #: field:account.balance.report,company_id:0 @@ -10344,7 +10367,9 @@ msgstr "Mở việc đối soát với ngân hàng" #: field:account.entries.report,company_id:0 #: field:account.fiscal.position,company_id:0 #: field:account.fiscalyear,company_id:0 +#: report:account.general.journal:0 #: field:account.general.journal,company_id:0 +#: report:account.general.ledger_landscape:0 #: field:account.installer,company_id:0 #: field:account.invoice,company_id:0 #: field:account.invoice.line,company_id:0 @@ -10353,6 +10378,7 @@ msgstr "Mở việc đối soát với ngân hàng" #: field:account.invoice.tax,company_id:0 #: field:account.journal,company_id:0 #: field:account.journal.period,company_id:0 +#: report:account.journal.period.print:0 #: field:account.model,company_id:0 #: field:account.move,company_id:0 #: field:account.move.line,company_id:0 @@ -10448,7 +10474,7 @@ msgid "" msgstr "" #. module: account -#: code:addons/account/account_move_line.py:1059 +#: code:addons/account/account_move_line.py:1056 #, python-format msgid "Unable to change tax!" msgstr "" @@ -10517,8 +10543,10 @@ msgstr "Accounts Fiscal Position" #: view:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 +#: code:addons/account/account_invoice.py:1158 #: model:process.process,name:account.process_process_supplierinvoiceprocess0 #: selection:report.invoice.created,type:0 +#, python-format msgid "Supplier Invoice" msgstr "Hóa đơn nhà cung cấp" @@ -10604,8 +10632,10 @@ msgid "" msgstr "" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 msgid "With movements" msgstr "With movements" @@ -10701,7 +10731,7 @@ msgid "Entries Sorted by" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1515 +#: code:addons/account/account_invoice.py:1546 #, python-format msgid "" "The selected unit of measure is not compatible with the unit of measure of " @@ -10782,6 +10812,8 @@ msgstr "Tìm kiếm hóa đơn" #: report:account.invoice:0 #: view:account.invoice:0 #: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:1159 +#, python-format msgid "Refund" msgstr "Hoàn tiền" @@ -10852,7 +10884,7 @@ msgid "Manual Invoice Taxes" msgstr "Manual Invoice Taxes" #. module: account -#: code:addons/account/account_invoice.py:550 +#: code:addons/account/account_invoice.py:573 #, python-format msgid "The payment term of supplier does not have a payment term line." msgstr "" diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py index 897b8366b7a..3b000e40592 100644 --- a/addons/account/report/account_aged_partner_balance.py +++ b/addons/account/report/account_aged_partner_balance.py @@ -366,12 +366,13 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header): return period or 0.0 def _get_partners(self,data): + # TODO: deprecated, to remove in trunk if data['form']['result_selection'] == 'customer': - return 'Receivable Accounts' + return self._translate('Receivable Accounts') elif data['form']['result_selection'] == 'supplier': - return 'Payable Accounts' + return self._translate('Payable Accounts') elif data['form']['result_selection'] == 'customer_supplier': - return 'Receivable and Payable Accounts' + return self._translate('Receivable and Payable Accounts') return '' report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner', diff --git a/addons/account/report/account_aged_partner_balance.rml b/addons/account/report/account_aged_partner_balance.rml index fb79ab0d199..5b5404e9c86 100644 --- a/addons/account/report/account_aged_partner_balance.rml +++ b/addons/account/report/account_aged_partner_balance.rml @@ -147,7 +147,9 @@ [[ data['form']['period_length'] ]] - [[ get_partners(data) ]] + Receivable Accounts[[ data['form']['result_selection'] == 'customer' or removeParentNode('para') ]] + Payable Accounts[[ data['form']['result_selection'] == 'supplier' or removeParentNode('para') ]] + Receivable and Payable Accounts[[ data['form']['result_selection'] == 'customer_supplier' or removeParentNode('para') ]] [[ data['form']['direction_selection'] ]] @@ -166,7 +168,8 @@ Partners - [[ data['form']['direction_selection'] == 'future' and 'Due' or 'Not due' ]] + Due[[ data['form']['direction_selection'] == 'future' and ' ' or removeParentNode('para') ]] + Not due[[ data['form']['direction_selection'] != 'future' and ' ' or removeParentNode('para') ]] [[ data['form']['4']['name'] ]] diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index 88980a9cd97..6ddfc238bff 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -211,8 +211,10 @@ - [[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + + Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] + Fiscal Year @@ -233,7 +235,11 @@ [[ get_fiscalyear(data) or '' ]] - [[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']] + + All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]] + With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]] + With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]] + [[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] [[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]] diff --git a/addons/account/report/account_general_journal.rml b/addons/account/report/account_general_journal.rml index 4ad086d6bd4..dce30e59918 100644 --- a/addons/account/report/account_general_journal.rml +++ b/addons/account/report/account_general_journal.rml @@ -220,8 +220,8 @@ - [[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + Company[[ data['model']=='account.journal.period' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year Journals Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]] diff --git a/addons/account/report/account_general_ledger_landscape.rml b/addons/account/report/account_general_ledger_landscape.rml index 7ae5db98f20..c5d24343148 100644 --- a/addons/account/report/account_general_ledger_landscape.rml +++ b/addons/account/report/account_general_ledger_landscape.rml @@ -360,9 +360,8 @@ - [[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] - + Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year @@ -395,7 +394,9 @@ [[', '.join([ lt or '' for lt in get_journal(data) ]) ]] - [[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']] + All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]] + With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]] + With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]] [[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] diff --git a/addons/account/report/account_journal.py b/addons/account/report/account_journal.py index 769a8335f55..97e19be4b0c 100644 --- a/addons/account/report/account_journal.py +++ b/addons/account/report/account_journal.py @@ -189,11 +189,12 @@ class journal_print(report_sxw.rml_parse, common_report_header): return data['form']['amount_currency'] def _get_sortby(self, data): + # TODO: deprecated, to remove in trunk if self.sort_selection == 'date': - return 'Date' + return self._translate('Date') elif self.sort_selection == 'ref': - return 'Reference Number' - return 'Date' + return self._translate('Reference Number') + return self._translate('Date') report_sxw.report_sxw('report.account.journal.period.print', 'account.journal.period', 'addons/account/report/account_journal.rml', parser=journal_print, header='external') report_sxw.report_sxw('report.account.journal.period.print.sale.purchase', 'account.journal.period', 'addons/account/report/account_journal_sale_purchase.rml', parser=journal_print, header='external') diff --git a/addons/account/report/account_journal.rml b/addons/account/report/account_journal.rml index fb203d4e664..6d606ed1937 100644 --- a/addons/account/report/account_journal.rml +++ b/addons/account/report/account_journal.rml @@ -186,8 +186,8 @@ - [[ data['model']=='account.journal.period'and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + Company[[ data['model']=='account.journal.period'and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year Journal Period @@ -199,8 +199,10 @@ [[ get_fiscalyear(data) or '' ]] [[ o.journal_id.name ]] [[ o.period_id.name ]] - [[ get_sortby(data) ]] - [[ get_target_move(data) ]] + + Date[[ data['form'].get('sort_selection', 'date') == 'date' and ' ' or removeParentNode('para') ]] + Reference Number[[ data['form'].get('sort_selection', 'date') == 'ref' and ' ' or removeParentNode('para') ]] + diff --git a/addons/account/report/account_partner_ledger.py b/addons/account/report/account_partner_ledger.py index 21c1ee3d846..d21323e02fc 100644 --- a/addons/account/report/account_partner_ledger.py +++ b/addons/account/report/account_partner_ledger.py @@ -267,12 +267,13 @@ class third_party_ledger(report_sxw.rml_parse, common_report_header): return result_tmp + result_init def _get_partners(self): + # TODO: deprecated, to remove in trunk if self.result_selection == 'customer': - return 'Receivable Accounts' + return _('Receivable Accounts') elif self.result_selection == 'supplier': - return 'Payable Accounts' + return _('Payable Accounts') elif self.result_selection == 'customer_supplier': - return 'Receivable and Payable Accounts' + return _('Receivable and Payable Accounts') return '' def _sum_currency_amount_account(self, account, form): diff --git a/addons/account/report/account_partner_ledger.rml b/addons/account/report/account_partner_ledger.rml index 0d7122369c6..48ed6d4afe3 100644 --- a/addons/account/report/account_partner_ledger.rml +++ b/addons/account/report/account_partner_ledger.rml @@ -423,7 +423,9 @@ - [[ get_partners() ]] + Receivable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer' or removeParentNode('para') ]] + Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'supplier' or removeParentNode('para') ]] + Receivable and Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer_supplier' or removeParentNode('para') ]] [[ get_target_move(data) ]] diff --git a/addons/account/html/account_illu_01.png b/addons/account/static/description/account_illu_01.png similarity index 100% rename from addons/account/html/account_illu_01.png rename to addons/account/static/description/account_illu_01.png diff --git a/addons/account/html/account_illu_02.png b/addons/account/static/description/account_illu_02.png similarity index 100% rename from addons/account/html/account_illu_02.png rename to addons/account/static/description/account_illu_02.png diff --git a/addons/account/html/account_illu_03.png b/addons/account/static/description/account_illu_03.png similarity index 100% rename from addons/account/html/account_illu_03.png rename to addons/account/static/description/account_illu_03.png diff --git a/addons/account/html/account_sc_00.png b/addons/account/static/description/account_sc_00.png similarity index 100% rename from addons/account/html/account_sc_00.png rename to addons/account/static/description/account_sc_00.png diff --git a/addons/account/html/account_sc_01.png b/addons/account/static/description/account_sc_01.png similarity index 100% rename from addons/account/html/account_sc_01.png rename to addons/account/static/description/account_sc_01.png diff --git a/addons/account/html/account_sc_02.png b/addons/account/static/description/account_sc_02.png similarity index 100% rename from addons/account/html/account_sc_02.png rename to addons/account/static/description/account_sc_02.png diff --git a/addons/account/html/account_sc_03.png b/addons/account/static/description/account_sc_03.png similarity index 100% rename from addons/account/html/account_sc_03.png rename to addons/account/static/description/account_sc_03.png diff --git a/addons/account/html/account_sc_04.png b/addons/account/static/description/account_sc_04.png similarity index 100% rename from addons/account/html/account_sc_04.png rename to addons/account/static/description/account_sc_04.png diff --git a/addons/account/html/account_sc_05.png b/addons/account/static/description/account_sc_05.png similarity index 100% rename from addons/account/html/account_sc_05.png rename to addons/account/static/description/account_sc_05.png diff --git a/addons/account/html/account_sc_06.png b/addons/account/static/description/account_sc_06.png similarity index 100% rename from addons/account/html/account_sc_06.png rename to addons/account/static/description/account_sc_06.png diff --git a/addons/account/html/index.html b/addons/account/static/description/index.html similarity index 98% rename from addons/account/html/index.html rename to addons/account/static/description/index.html index 09a58fb3246..d9b26f11d16 100644 --- a/addons/account/html/index.html +++ b/addons/account/static/description/index.html @@ -17,7 +17,7 @@ By far the most beautiful and full featured accounting software. OpenERP Account Activate features on demand, from integrated analytic accounting to budget, assets and multiple companies consolidation.

diff --git a/addons/account/html/sc00.png b/addons/account/static/description/sc00.png similarity index 100% rename from addons/account/html/sc00.png rename to addons/account/static/description/sc00.png diff --git a/addons/account/html/testimonial_sunil.jpg b/addons/account/static/description/testimonial_sunil.jpg similarity index 100% rename from addons/account/html/testimonial_sunil.jpg rename to addons/account/static/description/testimonial_sunil.jpg diff --git a/addons/account/static/src/js/account_move_line_quickadd.js b/addons/account/static/src/js/account_move_line_quickadd.js index 997b2b03bb6..0b904e19da6 100644 --- a/addons/account/static/src/js/account_move_line_quickadd.js +++ b/addons/account/static/src/js/account_move_line_quickadd.js @@ -84,7 +84,7 @@ openerp.account.quickadd = function (instance) { }, search_by_journal_period: function() { var self = this; - var domain = []; + var domain = ['|',['debit', '!=', 0], ['credit', '!=', 0]]; if (self.current_journal !== null) domain.push(["journal_id", "=", self.current_journal]); if (self.current_period !== null) domain.push(["period_id", "=", self.current_period]); self.last_context["journal_id"] = self.current_journal === null ? false : self.current_journal; diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index c457140684a..871aea9e4d9 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -175,7 +175,7 @@ class account_common_report(osv.osv_memory): data['form'][field] = data['form'][field][0] used_context = self._build_contexts(cr, uid, ids, data, context=context) data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or [] - data['form']['used_context'] = used_context + data['form']['used_context'] = dict(used_context, lang=context.get('lang', 'en_US')) return self._print_report(cr, uid, ids, data, context=context) diff --git a/addons/account_accountant/static/src/img/icon.png b/addons/account_accountant/static/description/icon.png similarity index 100% rename from addons/account_accountant/static/src/img/icon.png rename to addons/account_accountant/static/description/icon.png diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 7fb4091b45f..42b17ae06c3 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -248,9 +248,12 @@ account.analytic.default - + + 1 + + - + diff --git a/addons/account_asset/static/src/img/icon.png b/addons/account_asset/static/description/icon.png similarity index 100% rename from addons/account_asset/static/src/img/icon.png rename to addons/account_asset/static/description/icon.png diff --git a/addons/account_cancel/i18n/vi.po b/addons/account_cancel/i18n/vi.po index 8198e802022..89a7feb7942 100644 --- a/addons/account_cancel/i18n/vi.po +++ b/addons/account_cancel/i18n/vi.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-21 14:22+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2013-06-30 16:08+0000\n" +"Last-Translator: Hung Tran \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:42+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account_cancel #: view:account.invoice:0 msgid "Cancel" -msgstr "" +msgstr "Hủy bỏ" #~ msgid "Account Cancel" #~ msgstr "Hủy bỏ Tài khoản" diff --git a/addons/account_voucher/i18n/nl_BE.po b/addons/account_voucher/i18n/nl_BE.po index a58e655aec6..04366df488e 100644 --- a/addons/account_voucher/i18n/nl_BE.po +++ b/addons/account_voucher/i18n/nl_BE.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.0\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-04-26 16:01+0000\n" +"PO-Revision-Date: 2013-07-10 09:54+0000\n" "Last-Translator: Els Van Vossel (Agaplan) \n" "Language-Team: Els Van Vossel\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-27 05:44+0000\n" -"X-Generator: Launchpad (build 16580)\n" +"X-Launchpad-Export-Date: 2013-07-11 05:17+0000\n" +"X-Generator: Launchpad (build 16696)\n" "Language: nl\n" #. module: account_voucher @@ -28,7 +28,7 @@ msgid "account.config.settings" msgstr "account.config.settings" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:369 +#: code:addons/account_voucher/account_voucher.py:417 #, python-format msgid "Write-Off" msgstr "Afschrijving" @@ -132,7 +132,7 @@ msgid "Voucher Statistics" msgstr "Boekingsstatistieken" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1547 +#: code:addons/account_voucher/account_voucher.py:1641 #, python-format msgid "" "You can not change the journal as you already reconciled some statement " @@ -233,8 +233,8 @@ msgid "Journal Item" msgstr "Boekingslijn" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:508 -#: code:addons/account_voucher/account_voucher.py:981 +#: code:addons/account_voucher/account_voucher.py:558 +#: code:addons/account_voucher/account_voucher.py:1073 #, python-format msgid "Error!" msgstr "Fout" @@ -261,7 +261,7 @@ msgid "Cancelled" msgstr "Geannuleerd" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1153 +#: code:addons/account_voucher/account_voucher.py:1249 #, python-format msgid "" "You have to configure account base code and account tax code on the '%s' tax!" @@ -313,7 +313,7 @@ msgid "Tax" msgstr "Btw" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:879 +#: code:addons/account_voucher/account_voucher.py:971 #, python-format msgid "Invalid Action!" msgstr "Ongeldige actie" @@ -366,10 +366,10 @@ msgid "Import Invoices" msgstr "Facturen importeren" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1112 +#: code:addons/account_voucher/account_voucher.py:1208 #, python-format msgid "Wrong voucher line" -msgstr "" +msgstr "Verkeerde betalingsregel" #. module: account_voucher #: selection:account.voucher,pay_now:0 @@ -385,7 +385,7 @@ msgid "Receipt" msgstr "Reçu" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1018 +#: code:addons/account_voucher/account_voucher.py:1110 #, python-format msgid "" "You should configure the 'Gain Exchange Rate Account' in the accounting " @@ -409,7 +409,7 @@ msgstr "Periode" #. module: account_voucher #: view:account.voucher:0 -#: code:addons/account_voucher/account_voucher.py:211 +#: code:addons/account_voucher/account_voucher.py:231 #, python-format msgid "Supplier" msgstr "Leverancier" @@ -430,7 +430,7 @@ msgid "Debit" msgstr "Debet" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1547 +#: code:addons/account_voucher/account_voucher.py:1641 #, python-format msgid "Unable to change journal !" msgstr "Het dagboek kan niet worden gewijzigd" @@ -469,6 +469,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Klik hier als u een nieuwe leveranciersbetaling wilt maken.\n" +"

\n" +" Met OpenERP kunt u betalingen aan leveranciers opvolgen.\n" +"

\n" +" " #. module: account_voucher #: view:account.voucher:0 @@ -536,7 +542,7 @@ msgid "Pay Invoice" msgstr "Factuur betalen" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1153 +#: code:addons/account_voucher/account_voucher.py:1249 #, python-format msgid "No Account Base Code and Account Tax Code!" msgstr "Geen rekening voor basisvak en btw-vak" @@ -590,15 +596,15 @@ msgid "To Review" msgstr "Te controleren" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1025 -#: code:addons/account_voucher/account_voucher.py:1039 -#: code:addons/account_voucher/account_voucher.py:1194 +#: code:addons/account_voucher/account_voucher.py:1120 +#: code:addons/account_voucher/account_voucher.py:1134 +#: code:addons/account_voucher/account_voucher.py:1286 #, python-format msgid "change" msgstr "wijzigen" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1014 +#: code:addons/account_voucher/account_voucher.py:1106 #, python-format msgid "" "You should configure the 'Loss Exchange Rate Account' in the accounting " @@ -656,6 +662,7 @@ msgstr "Maand" #. module: account_voucher #: field:account.voucher,currency_id:0 #: field:account.voucher.line,currency_id:0 +#: model:ir.model,name:account_voucher.model_res_currency #: field:sale.receipt.report,currency_id:0 msgid "Currency" msgstr "Munt" @@ -699,7 +706,7 @@ msgid "Reconcile Payment Balance" msgstr "Betalingssaldo afpunten" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:975 +#: code:addons/account_voucher/account_voucher.py:1067 #, python-format msgid "Configuration Error !" msgstr "Configuratiefout" @@ -764,7 +771,7 @@ msgid "October" msgstr "Oktober" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:976 +#: code:addons/account_voucher/account_voucher.py:1068 #, python-format msgid "Please activate the sequence of selected journal !" msgstr "Gelieve de nummering van het gekozen journaal te activeren." @@ -844,7 +851,7 @@ msgid "Previous Payments ?" msgstr "Vorige betalingen?" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1112 +#: code:addons/account_voucher/account_voucher.py:1208 #, python-format msgid "The invoice you are willing to pay is not valid anymore." msgstr "De factuur die u wilt betalen, is niet meer geldig." @@ -876,7 +883,7 @@ msgid "Active" msgstr "Actief" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:982 +#: code:addons/account_voucher/account_voucher.py:1074 #, python-format msgid "Please define a sequence on the journal." msgstr "Gelieve een reeks in te stellen voor het journaal." @@ -1004,7 +1011,7 @@ msgid "Journal Items" msgstr "Boekingslijnen" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:508 +#: code:addons/account_voucher/account_voucher.py:558 #, python-format msgid "Please define default credit/debit accounts on the journal \"%s\"." msgstr "Stel een standaard debet-/creditrekening in voor journaal \"%s\"." @@ -1221,7 +1228,7 @@ msgstr "" "Het bedrag van het reçu moet gelijk zijn aan het bedrag op de uittreksellijn." #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:879 +#: code:addons/account_voucher/account_voucher.py:971 #, python-format msgid "Cannot delete voucher(s) which are already opened or paid." msgstr "Een openstaand of betaald reçu kan niet meer worden verwijderd." @@ -1284,8 +1291,8 @@ msgid "Status changed" msgstr "Status vgewijzigd" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1014 -#: code:addons/account_voucher/account_voucher.py:1018 +#: code:addons/account_voucher/account_voucher.py:1106 +#: code:addons/account_voucher/account_voucher.py:1110 #, python-format msgid "Insufficient Configuration!" msgstr "Niet volledig geconfigureerd" diff --git a/addons/account_voucher/html/account_illu_01.png b/addons/account_voucher/static/description/account_illu_01.png similarity index 100% rename from addons/account_voucher/html/account_illu_01.png rename to addons/account_voucher/static/description/account_illu_01.png diff --git a/addons/account_voucher/html/account_sc_00.png b/addons/account_voucher/static/description/account_sc_00.png similarity index 100% rename from addons/account_voucher/html/account_sc_00.png rename to addons/account_voucher/static/description/account_sc_00.png diff --git a/addons/account_voucher/html/account_sc_02.png b/addons/account_voucher/static/description/account_sc_02.png similarity index 100% rename from addons/account_voucher/html/account_sc_02.png rename to addons/account_voucher/static/description/account_sc_02.png diff --git a/addons/account_voucher/html/account_sc_03.png b/addons/account_voucher/static/description/account_sc_03.png similarity index 100% rename from addons/account_voucher/html/account_sc_03.png rename to addons/account_voucher/static/description/account_sc_03.png diff --git a/addons/account_voucher/html/account_sc_04.png b/addons/account_voucher/static/description/account_sc_04.png similarity index 100% rename from addons/account_voucher/html/account_sc_04.png rename to addons/account_voucher/static/description/account_sc_04.png diff --git a/addons/account_voucher/html/account_sc_06.png b/addons/account_voucher/static/description/account_sc_06.png similarity index 100% rename from addons/account_voucher/html/account_sc_06.png rename to addons/account_voucher/static/description/account_sc_06.png diff --git a/addons/account_voucher/html/bazile.png b/addons/account_voucher/static/description/bazile.png similarity index 100% rename from addons/account_voucher/html/bazile.png rename to addons/account_voucher/static/description/bazile.png diff --git a/addons/account_voucher/static/src/img/icon.png b/addons/account_voucher/static/description/icon.png similarity index 100% rename from addons/account_voucher/static/src/img/icon.png rename to addons/account_voucher/static/description/icon.png diff --git a/addons/account_voucher/html/index.html b/addons/account_voucher/static/description/index.html similarity index 96% rename from addons/account_voucher/html/index.html rename to addons/account_voucher/static/description/index.html index d59c110dde5..a363291f12e 100644 --- a/addons/account_voucher/html/index.html +++ b/addons/account_voucher/static/description/index.html @@ -17,7 +17,7 @@ automatically based on your activities.

diff --git a/addons/account_voucher/html/testimonial_sunil.jpg b/addons/account_voucher/static/description/testimonial_sunil.jpg similarity index 100% rename from addons/account_voucher/html/testimonial_sunil.jpg rename to addons/account_voucher/static/description/testimonial_sunil.jpg diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index ce79c4d5ffb..df852181709 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -33,9 +33,9 @@ class account_analytic_account(osv.osv): _description = 'Analytic Account' _track = { 'state': { - 'analytic.mt_account_pending': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'pending', - 'analytic.mt_account_closed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'close', - 'analytic.mt_account_opened': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'open', + 'analytic.mt_account_pending': lambda self, cr, uid, obj, ctx=None: obj.state == 'pending', + 'analytic.mt_account_closed': lambda self, cr, uid, obj, ctx=None: obj.state == 'close', + 'analytic.mt_account_opened': lambda self, cr, uid, obj, ctx=None: obj.state == 'open', }, } diff --git a/addons/auth_oauth_signup/i18n/vi.po b/addons/auth_oauth_signup/i18n/vi.po new file mode 100644 index 00000000000..bdc3eff5b8d --- /dev/null +++ b/addons/auth_oauth_signup/i18n/vi.po @@ -0,0 +1,23 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-27 06:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: auth_oauth_signup +#: model:ir.model,name:auth_oauth_signup.model_res_users +msgid "Users" +msgstr "Người dùng" diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py index 1fcc34c82a0..a4ef1bfa07b 100644 --- a/addons/auth_openid/controllers/main.py +++ b/addons/auth_openid/controllers/main.py @@ -38,6 +38,8 @@ import openerp from openerp import SUPERUSER_ID from openerp.modules.registry import RegistryManager from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect +import openerp.addons.web.http as http +from openerp.addons.web.http import request from .. import utils @@ -88,20 +90,19 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer): return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to) -class OpenIDController(openerp.addons.web.http.Controller): - _cp_path = '/auth_openid/login' +class OpenIDController(http.Controller): _store = filestore.FileOpenIDStore(_storedir) _REQUIRED_ATTRIBUTES = ['email'] _OPTIONAL_ATTRIBUTES = 'nickname fullname postcode country language timezone'.split() - def _add_extensions(self, request): - """Add extensions to the request""" + def _add_extensions(self, oidrequest): + """Add extensions to the oidrequest""" sreg_request = sreg.SRegRequest(required=self._REQUIRED_ATTRIBUTES, optional=self._OPTIONAL_ATTRIBUTES) - request.addExtension(sreg_request) + oidrequest.addExtension(sreg_request) ax_request = ax.FetchRequest() for alias in self._REQUIRED_ATTRIBUTES: @@ -111,7 +112,7 @@ class OpenIDController(openerp.addons.web.http.Controller): uri = utils.SREG2AX[alias] ax_request.add(ax.AttrInfo(uri, required=False, alias=alias)) - request.addExtension(ax_request) + oidrequest.addExtension(ax_request) def _get_attributes_from_success_response(self, success_response): attrs = {} @@ -133,58 +134,58 @@ class OpenIDController(openerp.addons.web.http.Controller): attrs[attr] = value return attrs - def _get_realm(self, req): - return req.httprequest.host_url + def _get_realm(self): + return request.httprequest.host_url - @openerp.addons.web.http.httprequest - def verify_direct(self, req, db, url): - result = self._verify(req, db, url) + @http.route('/auth_openid/login/verify_direct', type='http', auth='none') + def verify_direct(self, db, url): + result = self._verify(db, url) if 'error' in result: return werkzeug.exceptions.BadRequest(result['error']) if result['action'] == 'redirect': return werkzeug.utils.redirect(result['value']) return result['value'] - @openerp.addons.web.http.jsonrequest - def verify(self, req, db, url): - return self._verify(req, db, url) + @http.route('/auth_openid/login/verify', type='json', auth='none') + def verify(self, db, url): + return self._verify(db, url) - def _verify(self, req, db, url): - redirect_to = werkzeug.urls.Href(req.httprequest.host_url + 'auth_openid/login/process')(session_id=req.session_id) - realm = self._get_realm(req) + def _verify(self, db, url): + redirect_to = werkzeug.urls.Href(request.httprequest.host_url + 'auth_openid/login/process')(session_id=request.session_id) + realm = self._get_realm() session = dict(dbname=db, openid_url=url) # TODO add origin page ? oidconsumer = consumer.Consumer(session, self._store) try: - request = oidconsumer.begin(url) + oidrequest = oidconsumer.begin(url) except consumer.DiscoveryFailure, exc: fetch_error_string = 'Error in discovery: %s' % (str(exc[0]),) return {'error': fetch_error_string, 'title': 'OpenID Error'} - if request is None: + if oidrequest is None: return {'error': 'No OpenID services found', 'title': 'OpenID Error'} - req.session.openid_session = session - self._add_extensions(request) + request.session.openid_session = session + self._add_extensions(oidrequest) - if request.shouldSendRedirect(): - redirect_url = request.redirectURL(realm, redirect_to) - return {'action': 'redirect', 'value': redirect_url, 'session_id': req.session_id} + if oidrequest.shouldSendRedirect(): + redirect_url = oidrequest.redirectURL(realm, redirect_to) + return {'action': 'redirect', 'value': redirect_url, 'session_id': request.session_id} else: - form_html = request.htmlMarkup(realm, redirect_to) - return {'action': 'post', 'value': form_html, 'session_id': req.session_id} + form_html = oidrequest.htmlMarkup(realm, redirect_to) + return {'action': 'post', 'value': form_html, 'session_id': request.session_id} - @openerp.addons.web.http.httprequest - def process(self, req, **kw): - session = getattr(req.session, 'openid_session', None) + @http.route('/auth_openid/login/process', type='http', auth='none') + def process(self, **kw): + session = getattr(request.session, 'openid_session', None) if not session: - return set_cookie_and_redirect(req, '/') + return set_cookie_and_redirect('/') oidconsumer = consumer.Consumer(session, self._store, consumer_class=GoogleAppsAwareConsumer) - query = req.httprequest.args - info = oidconsumer.complete(query, req.httprequest.base_url) + query = request.httprequest.args + info = oidconsumer.complete(query, request.httprequest.base_url) display_identifier = info.getDisplayIdentifier() session['status'] = info.status @@ -225,7 +226,7 @@ class OpenIDController(openerp.addons.web.http.Controller): # TODO fill empty fields with the ones from sreg/ax cr.commit() - return login_and_redirect(req, dbname, login, key) + return login_and_redirect(dbname, login, key) session['message'] = 'This OpenID identifier is not associated to any active users' @@ -241,11 +242,11 @@ class OpenIDController(openerp.addons.web.http.Controller): # information in a log. session['message'] = 'Verification failed.' - return set_cookie_and_redirect(req, '/#action=login&loginerror=1') + return set_cookie_and_redirect('/#action=login&loginerror=1') - @openerp.addons.web.http.jsonrequest - def status(self, req): - session = getattr(req.session, 'openid_session', {}) + @http.route('/auth_openid/login/status', type='json', auth='none') + def status(self): + session = getattr(request.session, 'openid_session', {}) return {'status': session.get('status'), 'message': session.get('message')} diff --git a/addons/auth_openid/i18n/vi.po b/addons/auth_openid/i18n/vi.po new file mode 100644 index 00000000000..d1040420132 --- /dev/null +++ b/addons/auth_openid/i18n/vi.po @@ -0,0 +1,97 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-27 16:29+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:24 +#, python-format +msgid "Username" +msgstr "Tên đăng nhập" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:12 +#: view:res.users:0 +#, python-format +msgid "OpenID" +msgstr "OpenID" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:30 +#: field:res.users,openid_url:0 +#, python-format +msgid "OpenID URL" +msgstr "Đường dẫn OpenID" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:9 +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10 +#, python-format +msgid "Google" +msgstr "Google" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:11 +#, python-format +msgid "Launchpad" +msgstr "Launchpad" + +#. module: auth_openid +#: help:res.users,openid_email:0 +msgid "Used for disambiguation in case of a shared OpenID URL" +msgstr "" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:18 +#, python-format +msgid "Google Apps Domain" +msgstr "" + +#. module: auth_openid +#: field:res.users,openid_email:0 +msgid "OpenID Email" +msgstr "OpenID Email" + +#. module: auth_openid +#: field:res.users,openid_key:0 +msgid "OpenID Key" +msgstr "" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:8 +#, python-format +msgid "Password" +msgstr "Mật khẩu" + +#. module: auth_openid +#. openerp-web +#: code:addons/auth_openid/static/src/xml/auth_openid.xml:10 +#, python-format +msgid "Google Apps" +msgstr "" + +#. module: auth_openid +#: model:ir.model,name:auth_openid.model_res_users +msgid "Users" +msgstr "Người dùng" diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 8c61af1f03c..e42dc64151f 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -42,7 +42,7 @@ class Controller(http.Controller): } return config - @http.route('/auth_signup/retrieve', type='json', auth="user") + @http.route('/auth_signup/retrieve', type='json', auth="none") def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) @@ -51,7 +51,7 @@ class Controller(http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @http.route('/auth_signup/signup', type='json', auth="user") + @http.route('/auth_signup/signup', type='json', auth="none") def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: @@ -66,7 +66,7 @@ class Controller(http.Controller): res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @http.route('/auth_signup/reset_password', type='json', auth="user") + @http.route('/auth_signup/reset_password', type='json', auth="none") def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) diff --git a/addons/auth_signup/i18n/vi.po b/addons/auth_signup/i18n/vi.po new file mode 100644 index 00000000000..a79bbcb7bb4 --- /dev/null +++ b/addons/auth_signup/i18n/vi.po @@ -0,0 +1,288 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-27 06:52+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: auth_signup +#: field:res.partner,signup_type:0 +msgid "Signup Token Type" +msgstr "Loại mã đăng ký" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_uninvited:0 +msgid "Allow external users to sign up" +msgstr "Cho phép người dùng bên ngoài đăng ký." + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:19 +#, python-format +msgid "Confirm Password" +msgstr "Xác nhận mật khẩu" + +#. module: auth_signup +#: help:base.config.settings,auth_signup_uninvited:0 +msgid "If unchecked, only invited users may sign up." +msgstr "Nếu không chọn, chỉ những người được mời mới được đăng ký." + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: auth_signup +#: code:addons/auth_signup/res_users.py:266 +#, python-format +msgid "Cannot send email: user has no email address." +msgstr "Không thể gửi email: người dùng không có địa chỉ email" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:31 +#, python-format +msgid "Reset password" +msgstr "Đặt lại mật khẩu" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_template_user_id:0 +msgid "Template user for new users created through signup" +msgstr "Mẫu người dùng sử dụng khi đăng ký" + +#. module: auth_signup +#: model:email.template,subject:auth_signup.reset_password_email +msgid "Password reset" +msgstr "Quên mật khẩu" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#, python-format +msgid "Please enter a password and confirm it." +msgstr "Vui lòng nhập mật khẩu và xác nhận nó" + +#. module: auth_signup +#: view:res.users:0 +msgid "Send an email to the user to (re)set their password." +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:26 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:29 +#, python-format +msgid "Sign Up" +msgstr "" + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "New" +msgstr "" + +#. module: auth_signup +#: code:addons/auth_signup/res_users.py:258 +#, python-format +msgid "Mail sent to:" +msgstr "" + +#. module: auth_signup +#: field:res.users,state:0 +msgid "Status" +msgstr "Trạng thái" + +#. module: auth_signup +#: model:email.template,body_html:auth_signup.reset_password_email +msgid "" +"\n" +"

A password reset was requested for the OpenERP account linked to this " +"email.

\n" +"\n" +"

You may change your password by following this link.

\n" +"\n" +"

Note: If you do not expect this, you can safely ignore this email.

" +msgstr "" +"\n" +"\\n\n" +"

Bạn có một yêu cầu reset mật khẩu từ tài khoản OpenERPA gắn với email " +"này.

\\n\n" +"\\n\n" +"

Bạn có thể thay đổi mật khẩu thông qua đường dẫn này.

\\n\n" +"\\n\n" +"

Lưu ý: Nếu đây không phải chủ ý của bạn. Bạn có thể bỏ qua email này.

" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#, python-format +msgid "Please enter a name." +msgstr "Xin nhập tên." + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_res_users +msgid "Users" +msgstr "Người dùng" + +#. module: auth_signup +#: field:res.partner,signup_url:0 +msgid "Signup URL" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#, python-format +msgid "Please enter a username." +msgstr "" + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "Active" +msgstr "" + +#. module: auth_signup +#: code:addons/auth_signup/res_users.py:270 +#, python-format +msgid "" +"Cannot send email: no outgoing email server configured.\n" +"You can configure it under Settings/General Settings." +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12 +#, python-format +msgid "Username" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8 +#, python-format +msgid "Name" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 +#, python-format +msgid "Please enter a username or email address." +msgstr "" + +#. module: auth_signup +#: selection:res.users,state:0 +msgid "Resetting Password" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13 +#, python-format +msgid "Username (Email)" +msgstr "" + +#. module: auth_signup +#: field:res.partner,signup_expiration:0 +msgid "Signup Expiration" +msgstr "" + +#. module: auth_signup +#: help:base.config.settings,auth_signup_reset_password:0 +msgid "This allows users to trigger a password reset from the Login page." +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25 +#, python-format +msgid "Log in" +msgstr "" + +#. module: auth_signup +#: field:res.partner,signup_valid:0 +msgid "Signup Token is Valid" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 +#: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 +#, python-format +msgid "Login" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:97 +#, python-format +msgid "Invalid signup token" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 +#, python-format +msgid "Passwords do not match; please retype them." +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#, python-format +msgid "No database selected !" +msgstr "" + +#. module: auth_signup +#: view:res.users:0 +msgid "Reset Password" +msgstr "" + +#. module: auth_signup +#: field:base.config.settings,auth_signup_reset_password:0 +msgid "Enable password reset from Login page" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:30 +#, python-format +msgid "Back to Login" +msgstr "" + +#. module: auth_signup +#. openerp-web +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 +#, python-format +msgid "Sign up" +msgstr "" + +#. module: auth_signup +#: model:ir.model,name:auth_signup.model_res_partner +msgid "Partner" +msgstr "" + +#. module: auth_signup +#: field:res.partner,signup_token:0 +msgid "Signup Token" +msgstr "" diff --git a/addons/auth_signup/i18n/zh_CN.po b/addons/auth_signup/i18n/zh_CN.po index aa8d9f952c1..497b872997f 100644 --- a/addons/auth_signup/i18n/zh_CN.po +++ b/addons/auth_signup/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-04-16 04:33+0000\n" -"Last-Translator: Key \n" +"PO-Revision-Date: 2013-07-02 08:11+0000\n" +"Last-Translator: DWXXX \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: 2013-04-17 05:15+0000\n" -"X-Generator: Launchpad (build 16567)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: auth_signup #: field:res.partner,signup_type:0 @@ -29,7 +29,7 @@ msgstr "允许外部用户登录" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:19 #, python-format msgid "Confirm Password" msgstr "确认密码" @@ -37,7 +37,7 @@ msgstr "确认密码" #. module: auth_signup #: help:base.config.settings,auth_signup_uninvited:0 msgid "If unchecked, only invited users may sign up." -msgstr "" +msgstr "如果不勾选,只有被邀请用户才能注册。" #. module: auth_signup #: model:ir.model,name:auth_signup.model_base_config_settings @@ -45,15 +45,15 @@ msgid "base.config.settings" msgstr "base.config.settings" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:265 +#: code:addons/auth_signup/res_users.py:266 #, python-format msgid "Cannot send email: user has no email address." -msgstr "" +msgstr "无法发送邮件:用户邮件地址为空。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24 -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:28 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:31 #, python-format msgid "Reset password" msgstr "重设密码" @@ -70,7 +70,7 @@ msgstr "重置密码" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 #, python-format msgid "Please enter a password and confirm it." msgstr "请输入密码并确认。" @@ -78,12 +78,12 @@ msgstr "请输入密码并确认。" #. module: auth_signup #: view:res.users:0 msgid "Send an email to the user to (re)set their password." -msgstr "" +msgstr "向用户发送重置密码邮件。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23 #: code:addons/auth_signup/static/src/xml/auth_signup.xml:26 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:29 #, python-format msgid "Sign Up" msgstr "注册" @@ -119,10 +119,10 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 #, python-format msgid "Please enter a name." -msgstr "" +msgstr "请输入名字" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_users @@ -136,10 +136,10 @@ msgstr "注册 URL" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 #, python-format msgid "Please enter a username." -msgstr "" +msgstr "请输入您的用户名" #. module: auth_signup #: selection:res.users,state:0 @@ -147,7 +147,7 @@ msgid "Active" msgstr "启用" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:269 +#: code:addons/auth_signup/res_users.py:270 #, python-format msgid "" "Cannot send email: no outgoing email server configured.\n" @@ -170,10 +170,10 @@ msgstr "姓名" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Please enter a username or email address." -msgstr "" +msgstr "请输入用户名和邮件地址" #. module: auth_signup #: selection:res.users,state:0 @@ -199,7 +199,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25 #, python-format msgid "Log in" msgstr "登录" @@ -211,35 +211,35 @@ msgstr "注册令牌( Token )是有效的" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 #: code:addons/auth_signup/static/src/js/auth_signup.js:111 #: code:addons/auth_signup/static/src/js/auth_signup.js:114 #: code:addons/auth_signup/static/src/js/auth_signup.js:117 #: code:addons/auth_signup/static/src/js/auth_signup.js:120 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Login" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:94 +#: code:addons/auth_signup/static/src/js/auth_signup.js:97 #, python-format msgid "Invalid signup token" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #, python-format msgid "Passwords do not match; please retype them." msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:170 #, python-format msgid "No database selected !" msgstr "" @@ -256,7 +256,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:30 #, python-format msgid "Back to Login" msgstr "返回登录页面" @@ -266,12 +266,12 @@ msgstr "返回登录页面" #: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 #, python-format msgid "Sign up" -msgstr "" +msgstr "注册" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_partner msgid "Partner" -msgstr "业务伙伴" +msgstr "合作伙伴" #. module: auth_signup #: field:res.partner,signup_token:0 diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 896349ec5e6..a9061c0afce 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -1510,7 +1510,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), continue if r['class']=='private': for f in r.keys(): - if f not in ('id','date','date_deadline','duration','user_id','state'): + if f not in ('id','date','date_deadline','duration','user_id','state','interval','count'): if isinstance(r[f], list): r[f] = [] else: diff --git a/addons/base_calendar/i18n/zh_CN.po b/addons/base_calendar/i18n/zh_CN.po index ed1cddd716b..a5ede7a80c9 100644 --- a/addons/base_calendar/i18n/zh_CN.po +++ b/addons/base_calendar/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-28 16:50+0000\n" -"Last-Translator: Joshua Jan(SHINEIT) \n" +"PO-Revision-Date: 2013-06-29 05:34+0000\n" +"Last-Translator: David.Xu \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: 2013-03-16 05:45+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 @@ -42,7 +42,7 @@ msgstr "这属性定义循环日程的日期/时间异常列表。" #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Week(s)" -msgstr "" +msgstr "周" #. module: base_calendar #: field:calendar.event,we:0 @@ -248,7 +248,7 @@ msgid "To" msgstr "到" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1260 +#: code:addons/base_calendar/base_calendar.py:1262 #, python-format msgid "Error!" msgstr "错误!" @@ -300,7 +300,7 @@ msgstr "与会者的参与状况" #. module: base_calendar #: view:crm.meeting:0 msgid "Mail To" -msgstr "" +msgstr "收信人" #. module: base_calendar #: field:crm.meeting,name:0 @@ -361,9 +361,9 @@ msgstr "保存复杂的摘要(消息数量,……等)。为了插入到看板视 #. module: base_calendar #: code:addons/base_calendar/base_calendar.py:399 #: code:addons/base_calendar/base_calendar.py:441 -#: code:addons/base_calendar/base_calendar.py:1013 #: code:addons/base_calendar/base_calendar.py:1015 -#: code:addons/base_calendar/base_calendar.py:1460 +#: code:addons/base_calendar/base_calendar.py:1017 +#: code:addons/base_calendar/base_calendar.py:1462 #, python-format msgid "Warning!" msgstr "警告!" @@ -478,7 +478,7 @@ msgstr "日期" #. module: base_calendar #: field:crm.meeting,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "关注者" #. module: base_calendar #: field:calendar.event,location:0 @@ -522,7 +522,7 @@ msgid "Event alarm information" msgstr "事件提醒信息" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1015 +#: code:addons/base_calendar/base_calendar.py:1017 #, python-format msgid "Count cannot be negative or 0." msgstr "" @@ -530,21 +530,21 @@ msgstr "" #. module: base_calendar #: field:crm.meeting,create_date:0 msgid "Creation Date" -msgstr "" +msgstr "创建日期" #. module: base_calendar #: view:crm.meeting:0 #: model:ir.model,name:base_calendar.model_crm_meeting #: model:res.request.link,name:base_calendar.request_link_meeting msgid "Meeting" -msgstr "" +msgstr "会议" #. module: base_calendar #: selection:calendar.event,rrule_type:0 #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Month(s)" -msgstr "" +msgstr "月" #. module: base_calendar #: view:calendar.event:0 @@ -566,7 +566,7 @@ msgstr "Caldav 服务的URL" #. module: base_calendar #: model:ir.model,name:base_calendar.model_mail_wizard_invite msgid "Invite wizard" -msgstr "" +msgstr "邀请向导" #. module: base_calendar #: selection:calendar.event,month_list:0 @@ -590,7 +590,7 @@ msgstr "周四" #. module: base_calendar #: view:crm.meeting:0 msgid "Meeting Details" -msgstr "" +msgstr "会议详情" #. module: base_calendar #: field:calendar.attendee,child_ids:0 @@ -601,21 +601,21 @@ msgstr "代表人" #: code:addons/base_calendar/crm_meeting.py:102 #, python-format msgid "The following contacts have no email address :" -msgstr "" +msgstr "下列联系人没有电子邮件地址:" #. module: base_calendar #: selection:calendar.event,rrule_type:0 #: selection:calendar.todo,rrule_type:0 #: selection:crm.meeting,rrule_type:0 msgid "Year(s)" -msgstr "" +msgstr "年" #. module: base_calendar #: view:crm.meeting.type:0 #: model:ir.actions.act_window,name:base_calendar.action_crm_meeting_type #: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_type msgid "Meeting Types" -msgstr "" +msgstr "会议类型" #. module: base_calendar #: field:calendar.event,create_date:0 @@ -633,7 +633,7 @@ msgstr "全员可见" #. module: base_calendar #: view:crm.meeting:0 msgid "hours" -msgstr "" +msgstr "小时" #. module: base_calendar #: field:calendar.attendee,partner_id:0 @@ -655,7 +655,7 @@ msgstr "重复直到" #. module: base_calendar #: view:crm.meeting:0 msgid "Options" -msgstr "" +msgstr "选项" #. module: base_calendar #: selection:calendar.event,byday:0 @@ -694,7 +694,7 @@ msgstr "周二" #. module: base_calendar #: field:crm.meeting,categ_ids:0 msgid "Tags" -msgstr "" +msgstr "标签" #. module: base_calendar #: view:calendar.event:0 @@ -741,7 +741,7 @@ msgid "Declined" msgstr "已拒绝" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1460 +#: code:addons/base_calendar/base_calendar.py:1462 #, python-format msgid "Group by date is not supported, use the calendar view instead." msgstr "" @@ -1200,7 +1200,7 @@ msgid "Select Weekdays" msgstr "" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1519 +#: code:addons/base_calendar/base_calendar.py:1521 #: selection:calendar.attendee,availability:0 #: selection:calendar.event,show_as:0 #: selection:calendar.todo,show_as:0 @@ -1453,7 +1453,7 @@ msgid "Weekday" msgstr "工作日" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1013 +#: code:addons/base_calendar/base_calendar.py:1015 #, python-format msgid "Interval cannot be negative." msgstr "" diff --git a/addons/base_calendar/static/src/img/icon.png b/addons/base_calendar/static/description/icon.png similarity index 100% rename from addons/base_calendar/static/src/img/icon.png rename to addons/base_calendar/static/description/icon.png diff --git a/addons/base_crypt/i18n/vi.po b/addons/base_crypt/i18n/vi.po index 7ab8f31bc3c..2265e70eb2e 100644 --- a/addons/base_crypt/i18n/vi.po +++ b/addons/base_crypt/i18n/vi.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2011-07-20 09:55+0000\n" -"Last-Translator: OpenBMS JSC \n" +"PO-Revision-Date: 2013-06-30 16:09+0000\n" +"Last-Translator: Hung Tran \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:49+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: base_crypt #: model:ir.model,name:base_crypt.model_res_users msgid "Users" -msgstr "" +msgstr "Người dùng" #, python-format #~ msgid "Error" diff --git a/addons/base_setup/res_config.py b/addons/base_setup/res_config.py index 33c5aa863bf..6b8578bbf47 100644 --- a/addons/base_setup/res_config.py +++ b/addons/base_setup/res_config.py @@ -36,6 +36,8 @@ class base_config_settings(osv.osv_memory): help="""Enable the public part of openerp, openerp becomes a public website."""), 'module_auth_oauth': fields.boolean('Use external authentication providers, sign in with google, facebook, ...'), 'module_base_import': fields.boolean("Allow users to import data from CSV files"), + 'module_google_drive': fields.boolean('Attach Google documents to any record', + help="""This installs the module google_docs."""), } def open_company(self, cr, uid, ids, context=None): diff --git a/addons/base_setup/res_config_view.xml b/addons/base_setup/res_config_view.xml index 8c48f5d7a6b..73685be95df 100644 --- a/addons/base_setup/res_config_view.xml +++ b/addons/base_setup/res_config_view.xml @@ -81,6 +81,15 @@ + +
diff --git a/addons/base_status/i18n/sv.po b/addons/base_status/i18n/sv.po new file mode 100644 index 00000000000..eb1b42e6a53 --- /dev/null +++ b/addons/base_status/i18n/sv.po @@ -0,0 +1,79 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-08 15:10+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-09 05:16+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "Error !" +msgstr "Fel !" + +#. module: base_status +#: code:addons/base_status/base_state.py:166 +#, python-format +msgid "%s has been opened." +msgstr "%s har öppnats." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been renewed." +msgstr "%s har förnyats." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "Error!" +msgstr "Fel!" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "" +"You can not escalate, you are already at the top level regarding your sales-" +"team category." +msgstr "" +"Du kan inte eskalera längre, du har nått toppen för denna säljlags-kategori." + +#. module: base_status +#: code:addons/base_status/base_state.py:193 +#, python-format +msgid "%s is now pending." +msgstr "%s är nu pågående." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been canceled." +msgstr "%s har avbrutits." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "" +"You are already at the top level of your sales-team category.\n" +"Therefore you cannot escalate furthermore." +msgstr "" +"Du har nått översta nivån för din säljlagskategori.\n" +"Det går därför inte att eskalera ytterligare." + +#. module: base_status +#: code:addons/base_status/base_state.py:181 +#, python-format +msgid "%s has been closed." +msgstr "%s har stängts." diff --git a/addons/claim_from_delivery/i18n/vi.po b/addons/claim_from_delivery/i18n/vi.po new file mode 100644 index 00000000000..f308bafb1ea --- /dev/null +++ b/addons/claim_from_delivery/i18n/vi.po @@ -0,0 +1,33 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-30 16:10+0000\n" +"Last-Translator: Hung Tran \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: claim_from_delivery +#: view:stock.picking.out:0 +msgid "Claims" +msgstr "Các khiếu nại" + +#. module: claim_from_delivery +#: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery +msgid "Delivery Order" +msgstr "" + +#. module: claim_from_delivery +#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery +msgid "Claim From Delivery" +msgstr "" diff --git a/addons/contacts/i18n/ko.po b/addons/contacts/i18n/ko.po new file mode 100644 index 00000000000..19e46f9e0b0 --- /dev/null +++ b/addons/contacts/i18n/ko.po @@ -0,0 +1,37 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:32+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"

\n" +" Click to add a contact in your address book.\n" +"

\n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +"

\n" +" " +msgstr "" + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "연락처" diff --git a/addons/contacts/i18n/vi.po b/addons/contacts/i18n/vi.po new file mode 100644 index 00000000000..d404d947fe2 --- /dev/null +++ b/addons/contacts/i18n/vi.po @@ -0,0 +1,45 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-27 16:47+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"

\n" +" Click to add a contact in your address book.\n" +"

\n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +"

\n" +" " +msgstr "" +"

\n" +" Nhấn để thêm liên lạc vào sổ địa chỉ.\n" +"

\n" +" OpenERP giúp bạn theo dõi các hoạt động liên quan tới\n" +" một khách hàng; thảo luận, lịch sử cơ hội kinh doanh,\n" +" tài liệu v.v....\n" +"

\n" +" " + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "Liên hệ" diff --git a/addons/contacts/static/src/img/icon.png b/addons/contacts/static/description/icon.png similarity index 100% rename from addons/contacts/static/src/img/icon.png rename to addons/contacts/static/description/icon.png diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 4c9a60634a5..d1194508b71 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -222,17 +222,13 @@ class crm_case_section(osv.osv): return res def create(self, cr, uid, vals, context=None): - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id'): - alias_name = vals.pop('alias_name', None) or vals.get('name') # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - {'alias_name': alias_name}, - model_name="crm.lead", - context=context) - vals['alias_id'] = alias_id - res = super(crm_case_section, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'section_id': res, 'type': 'lead'}}, context) - return res + if context is None: + context = {} + create_context = dict(context, alias_model_name='crm.lead', alias_parent_model_name=self._name) + section_id = super(crm_case_section, self).create(cr, uid, vals, context=create_context) + section = self.browse(cr, uid, section_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [section.alias_id.id], {'alias_parent_thread_id': section_id, 'alias_defaults': {'section_id': section_id, 'type': 'lead'}}, context=context) + return section_id def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the sales team. diff --git a/addons/crm/crm_case_section_view.xml b/addons/crm/crm_case_section_view.xml index be5611c03c4..c957311b47f 100644 --- a/addons/crm/crm_case_section_view.xml +++ b/addons/crm/crm_case_section_view.xml @@ -94,7 +94,7 @@

- %% + %%
@@ -168,17 +168,6 @@

-
-
@@ -187,12 +176,25 @@ - - + + diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 44ada2ffcc0..af02e3be1bf 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp.addons.base_status.base_stage import base_stage import crm from datetime import datetime from operator import itemgetter @@ -68,7 +67,7 @@ CRM_LEAD_PENDING_STATES = ( crm.AVAILABLE_STATES[4][0], # Pending ) -class crm_lead(base_stage, format_address, osv.osv): +class crm_lead(format_address, osv.osv): """ CRM Lead Case """ _name = "crm.lead" _description = "Lead/Opportunity" @@ -77,12 +76,12 @@ class crm_lead(base_stage, format_address, osv.osv): _track = { 'state': { - 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['new', 'draft'], - 'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done', - 'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel', + 'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj.state in ['new', 'draft'], + 'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj.state == 'done', + 'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.state == 'cancel', }, 'stage_id': { - 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['new', 'draft', 'cancel', 'done'], + 'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj.state not in ['new', 'draft', 'cancel', 'done'], }, } @@ -93,20 +92,6 @@ class crm_lead(base_stage, format_address, osv.osv): context['empty_list_help_document_name'] = _("leads") return super(crm_lead, self).get_empty_list_help(cr, uid, help, context=context) - def create(self, cr, uid, vals, context=None): - if context is None: - context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('section_id'): - ctx['default_section_id'] = vals['section_id'] - if vals.get('type'): - ctx['default_type'] = vals['type'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) - # context: no_log, because subtype already handle this - create_context = dict(context, mail_create_nolog=True) - return super(crm_lead, self).create(cr, uid, vals, context=create_context) - def _get_default_section_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return self._resolve_section_id_from_context(cr, uid, context=context) or False @@ -126,8 +111,7 @@ class crm_lead(base_stage, format_address, osv.osv): if type(context.get('default_section_id')) in (int, long): return context.get('default_section_id') if isinstance(context.get('default_section_id'), basestring): - section_name = context['default_section_id'] - section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=section_name, context=context) + section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=context['default_section_id'], context=context) if len(section_ids) == 1: return int(section_ids[0][0]) return None @@ -326,8 +310,7 @@ class crm_lead(base_stage, format_address, osv.osv): _defaults = { 'active': 1, 'type': 'lead', - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c), @@ -341,30 +324,29 @@ class crm_lead(base_stage, format_address, osv.osv): def onchange_stage_id(self, cr, uid, ids, stage_id, context=None): if not stage_id: - return {'value':{}} + return {'value': {}} stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context) if not stage.on_change: - return {'value':{}} - return {'value':{'probability': stage.probability}} + return {'value': {}} + return {'value': {'probability': stage.probability}} - def on_change_partner(self, cr, uid, ids, partner_id, context=None): - result = {} + def on_change_partner_id(self, cr, uid, ids, partner_id, context=None): values = {} if partner_id: partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) values = { - 'partner_name' : partner.name, - 'street' : partner.street, - 'street2' : partner.street2, - 'city' : partner.city, - 'state_id' : partner.state_id and partner.state_id.id or False, - 'country_id' : partner.country_id and partner.country_id.id or False, - 'email_from' : partner.email, - 'phone' : partner.phone, - 'mobile' : partner.mobile, - 'fax' : partner.fax, + 'partner_name': partner.name, + 'street': partner.street, + 'street2': partner.street2, + 'city': partner.city, + 'state_id': partner.state_id and partner.state_id.id or False, + 'country_id': partner.country_id and partner.country_id.id or False, + 'email_from': partner.email, + 'phone': partner.phone, + 'mobile': partner.mobile, + 'fax': partner.fax, } - return {'value' : values} + return {'value': values} def on_change_user(self, cr, uid, ids, user_id, context=None): """ When changing the user, also set a section_id or restrict section id @@ -405,7 +387,7 @@ class crm_lead(base_stage, format_address, osv.osv): # collect all section_ids section_ids = [] types = ['both'] - if not cases : + if not cases: type = context.get('default_type') types += [type] if section_id: @@ -433,24 +415,18 @@ class crm_lead(base_stage, format_address, osv.osv): return stage_ids[0] return False - def case_cancel(self, cr, uid, ids, context=None): - """ Overrides case_cancel from base_stage to set probability """ - res = super(crm_lead, self).case_cancel(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability' : 0.0}, context=context) - return res - - def case_reset(self, cr, uid, ids, context=None): - """ Overrides case_reset from base_stage to set probability """ - res = super(crm_lead, self).case_reset(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability': 0.0}, context=context) - return res + def stage_set(self, cr, uid, ids, stage_id, context=None): + """ Set the new stage. Now just writes the stage. + TDE TODO: remove me when removing state + """ + return self.write(cr, uid, ids, {'stage_id': stage_id}, context=context) def case_mark_lost(self, cr, uid, ids, context=None): """ Mark the case as lost: state=cancel and probability=0 """ for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) return True def case_mark_won(self, cr, uid, ids, context=None): @@ -458,7 +434,21 @@ class crm_lead(base_stage, format_address, osv.osv): for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) + return True + + def case_escalate(self, cr, uid, ids, context=None): + """ Escalates case to parent level """ + for case in self.browse(cr, uid, ids, context=context): + data = {'active': True} + if case.section_id.parent_id: + data['section_id'] = case.section_id.parent_id.id + if case.section_id.parent_id.change_responsible: + if case.section_id.parent_id.user_id: + data['user_id'] = case.section_id.parent_id.user_id.id + else: + raise osv.except_osv(_('Error!'), _("You are already at the top level of your sales-team category.\nTherefore you cannot escalate furthermore.")) + self.write(cr, uid, [case.id], data, context=context) return True def set_priority(self, cr, uid, ids, priority): @@ -932,12 +922,22 @@ class crm_lead(base_stage, format_address, osv.osv): } return res + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('type') and not context.get('default_type'): + context['default_type'] = vals.get('type') + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + + # context: no_log, because subtype already handle this + create_context = dict(context, mail_create_nolog=True) + return super(crm_lead, self).create(cr, uid, vals, context=create_context) + def write(self, cr, uid, ids, vals, context=None): if vals.get('stage_id') and not vals.get('probability'): - # change probability of lead(s) if required by stage - stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) - if stage.on_change: - vals['probability'] = stage.probability + onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value'] + vals.update(onchange_stage_values) return super(crm_lead, self).write(cr, uid, ids, vals, context=context) def new_mail_send(self, cr, uid, ids, context=None): @@ -1024,7 +1024,7 @@ class crm_lead(base_stage, format_address, osv.osv): 'user_id': False, } if msg.get('author_id'): - defaults.update(self.on_change_partner(cr, uid, None, msg.get('author_id'), context=context)['value']) + defaults.update(self.on_change_partner_id(cr, uid, None, msg.get('author_id'), context=context)['value']) if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES): defaults['priority'] = msg.get('priority') defaults.update(custom_values) diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index e7e6beae33e..3917fadbd32 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -263,13 +263,6 @@ Andrew - - - + diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index df6a4a07a8e..cb4302166a1 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -95,10 +95,6 @@
diff --git a/addons/crm/test/crm_lead_cancel.yml b/addons/crm/test/crm_lead_cancel.yml index 8749675bf23..0f8d9ba1df9 100644 --- a/addons/crm/test/crm_lead_cancel.yml +++ b/addons/crm/test/crm_lead_cancel.yml @@ -4,37 +4,6 @@ !python {model: crm.lead}: | section_id = self.pool.get('crm.case.section').create(cr, uid, {'name': "Phone Marketing", 'parent_id': ref("crm.crm_case_section_2")}) self.write(cr, uid, [ref("crm_case_1")], {'section_id': section_id}) - self.case_cancel(cr, uid, [ref("crm_case_1")]) -- - I check cancelled lead. -- - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_1')) - assert lead.stage_id.id == ref('crm.stage_lead7'), "Stage should be 'Dead' and is %s." % (lead.stage_id.name) - assert lead.state == 'cancel', "Opportunity is not in 'cancel' state." - assert lead.probability == 0.0, 'Opportunity is probably wrong and should be 0.0.' -- - I reset cancelled lead into unqualified lead. -- - !python {model: crm.lead}: | - self.case_reset(cr, uid, [ref("crm_case_1")]) -- - I check unqualified lead after reset. -- - !assert {model: crm.lead, id: crm.crm_case_1, string: Lead is in draft state}: - - state == "draft" -- - I re-open the lead -- - !python {model: crm.lead}: | - self.case_open(cr, uid, [ref("crm_case_1")]) -- - I check stage and state of the re-opened lead -- - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm.crm_case_1')) - assert lead.stage_id.id == ref('crm.stage_lead2'), "Opportunity stage should be 'Qualification'." - assert lead.state == 'open', "Opportunity should be in 'open' state." - I escalate the lead to parent team. - diff --git a/addons/crm/test/crm_lead_onchange.yml b/addons/crm/test/crm_lead_onchange.yml index 9154ffdf513..45e140e890e 100644 --- a/addons/crm/test/crm_lead_onchange.yml +++ b/addons/crm/test/crm_lead_onchange.yml @@ -20,9 +20,4 @@ - !record {model: crm.phonecall, id: crm_phonecall_5}: name: 'Bad time' - partner_id: base.res_partner_5 -- - I set the next stage to "New" for the lead. -- - !python {model: crm.lead}: | - self.stage_next(cr, uid, [ref("crm_case_4")], context={'stage_type': 'lead'}) + partner_id: base.res_partner_5 \ No newline at end of file diff --git a/addons/crm/test/lead2opportunity2win.yml b/addons/crm/test/lead2opportunity2win.yml index 94e7149ef77..23545c61bc1 100644 --- a/addons/crm/test/lead2opportunity2win.yml +++ b/addons/crm/test/lead2opportunity2win.yml @@ -1,25 +1,15 @@ - In order to test the conversion of a lead into a opportunity, -- - I open a lead. -- - !python {model: crm.lead}: | - self.case_open(cr, uid, [ref("crm_case_4")]) -- - I check if the lead state is "Open". -- - !assert {model: crm.lead, id: crm.crm_case_4, string: Lead state is Open}: - - state == "open" - I convert lead into opportunity for exiting customer. - !python {model: crm.lead}: | - self.convert_opportunity(cr, uid ,[ref("crm_case_4")], ref("base.res_partner_2")) + self.convert_opportunity(cr, uid ,[ref("crm_case_1")], ref("base.res_partner_2")) - I check details of converted opportunity. - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_4')) + lead = self.browse(cr, uid, ref('crm_case_1')) assert lead.type == 'opportunity', 'Lead is not converted to opportunity!' assert lead.partner_id.id == ref("base.res_partner_2"), 'Partner mismatch!' assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!' @@ -28,7 +18,7 @@ - !python {model: crm.opportunity2phonecall}: | import time - context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_4')]}) + context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_1')]}) call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'), 'name': "Bonjour M. Jean, Comment allez-vous? J'ai bien reçu votre demande, pourrions-nous en parler quelques minutes?"}, context=context) self.action_schedule(cr, uid, [call_id], context=context) @@ -36,28 +26,28 @@ I check that phonecall is scheduled for that opportunity. - !python {model: crm.phonecall}: | - ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_4'))]) + ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_1'))]) assert len(ids), 'Phonecall is not scheduled' - Now I schedule meeting with customer. - !python {model: crm.lead}: | - self.action_makeMeeting(cr, uid, [ref('crm_case_4')]) + self.action_makeMeeting(cr, uid, [ref('crm_case_1')]) - After communicated with customer, I put some notes with contract details. - !python {model: crm.lead}: | - self.message_post(cr, uid, [ref('crm_case_4')], subject='Test note', body='Détails envoyés par le client sur ​​le FAX pour la qualité') + self.message_post(cr, uid, [ref('crm_case_1')], subject='Test note', body='Détails envoyés par le client sur ​​le FAX pour la qualité') - I win this opportunity - !python {model: crm.lead}: | - self.case_mark_won(cr, uid, [ref("crm_case_4")]) + self.case_mark_won(cr, uid, [ref("crm_case_1")]) - I check details of the opportunity after having won the opportunity. - !python {model: crm.lead}: | - lead = self.browse(cr, uid, ref('crm_case_4')) + lead = self.browse(cr, uid, ref('crm_case_1')) assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'." assert lead.state == 'done', "Opportunity is not in 'done' state!" assert lead.probability == 100.0, "Revenue probability should be 100.0!" @@ -104,7 +94,6 @@ - !python {model: crm.meeting}: | context.update({'active_model': 'crm.meeting'}) - self.case_open(cr, uid, [ref('base_calendar.crm_meeting_4')]) - I invite a user for meeting. - diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 774571b0314..1e3ed2faad1 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -19,20 +19,12 @@ # ############################################################################## -from openerp.addons.base_status.base_stage import base_stage -import binascii from openerp.addons.crm import crm from openerp.osv import fields, osv -import time from openerp import tools from openerp.tools.translate import _ from openerp.tools import html2plaintext -CRM_CLAIM_PENDING_STATES = ( - crm.AVAILABLE_STATES[2][0], # Cancelled - crm.AVAILABLE_STATES[3][0], # Done - crm.AVAILABLE_STATES[4][0], # Pending -) class crm_claim_stage(osv.osv): """ Model for claim stages. This models the main stages of a claim @@ -51,8 +43,6 @@ class crm_claim_stage(osv.osv): 'section_ids':fields.many2many('crm.case.section', 'section_claim_stage_rel', 'stage_id', 'section_id', string='Sections', help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."), 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change regarding the selected stage. For example, if a stage is related to the status 'Close', when your document reaches this stage, it will be automatically have the 'closed' status."), - 'case_refused': fields.boolean('Refused stage', - help='Refused stages are specific stages for done.'), 'case_default': fields.boolean('Common to All Teams', help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."), 'fold': fields.boolean('Hide in Views when Empty', @@ -63,10 +53,9 @@ class crm_claim_stage(osv.osv): 'sequence': lambda *args: 1, 'state': 'draft', 'fold': False, - 'case_refused': False, } -class crm_claim(base_stage, osv.osv): +class crm_claim(osv.osv): """ Crm claim """ _name = "crm.claim" @@ -74,6 +63,15 @@ class crm_claim(base_stage, osv.osv): _order = "priority,date desc" _inherit = ['mail.thread'] + def _get_default_section_id(self, cr, uid, context=None): + """ Gives default section by checking if present in the context """ + return self.pool.get('crm.lead')._resolve_section_id_from_context(cr, uid, context=context) or False + + def _get_default_stage_id(self, cr, uid, context=None): + """ Gives default stage_id """ + section_id = self._get_default_section_id(cr, uid, context=context) + return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft')], context=context) + _columns = { 'id': fields.integer('ID', readonly=True), 'name': fields.char('Claim Subject', size=128, required=True), @@ -117,15 +115,13 @@ class crm_claim(base_stage, osv.osv): } _defaults = { - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), - 'date': fields.datetime.now, + 'date': fields.datetime.now(), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c), 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0], 'active': lambda *a: 1, - 'stage_id':lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c) + 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c) } def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None): @@ -158,27 +154,24 @@ class crm_claim(base_stage, osv.osv): return stage_ids[0] return False - def case_refuse(self, cr, uid, ids, context=None): - """ Mark the case as refused: state=done and case_refused=True """ - for lead in self.browse(cr, uid, ids): - stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, ['&', ('state', '=', 'done'), ('case_refused', '=', True)], context=context) - if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={}, new_stage_id=stage_id, context=context) - return True - - def onchange_partner_id(self, cr, uid, ids, part, email=False): + def onchange_partner_id(self, cr, uid, ids, partner_id, email=False, context=None): """This function returns value of partner address based on partner - :param part: Partner's id :param email: ignored """ - if not part: - return {'value': {'email_from': False, - 'partner_phone': False - } - } - address = self.pool.get('res.partner').browse(cr, uid, part) + if not partner_id: + return {'value': {'email_from': False, 'partner_phone': False}} + address = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) return {'value': {'email_from': address.email, 'partner_phone': address.phone}} + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + + # context: no_log, because subtype already handle this + return super(crm_claim, self).create(cr, uid, vals, context=context) + # ------------------------------------------------------- # Mail gateway # ------------------------------------------------------- diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index 0d2d8b391e7..28d0f7c731c 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -52,7 +52,6 @@ - @@ -102,10 +101,6 @@
-
diff --git a/addons/crm_claim/test/process/claim.yml b/addons/crm_claim/test/process/claim.yml index a843372956e..f6c6f6d315c 100644 --- a/addons/crm_claim/test/process/claim.yml +++ b/addons/crm_claim/test/process/claim.yml @@ -21,25 +21,9 @@ - !python {model: crm.claim}: | claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right ')]) - self.case_open(cr, uid, claim_ids) - - I check Claim Details after open. + I check Claim Details after open. - !python {model: crm.claim}: | claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right ')]) claim = self.browse(cr, uid, claim_ids[0]) - assert claim.state == "open", "Claim is not in Open state" - assert claim.stage_id.id == ref("crm.stage_lead2"), "Claim is not in Qualification stage" -- - After complete all service from our side, I close this claim. -- - !python {model: crm.claim}: | - claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right ')]) - self.case_close(cr, uid, claim_ids) -- - I check Claim details after closed. -- - !python {model: crm.claim}: | - claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right ')]) - claim = self.browse(cr, uid, claim_ids[0]) - assert claim.state == "done", "Claim is not in close state" diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index 2d0383962b1..ea58016b4c1 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -20,20 +20,14 @@ ############################################################################## from openerp.addons.base_status.base_state import base_state -from openerp.addons.base_status.base_stage import base_stage from openerp.addons.crm import crm from openerp.osv import fields, osv from openerp import tools from openerp.tools.translate import _ from openerp.tools import html2plaintext -CRM_HELPDESK_STATES = ( - crm.AVAILABLE_STATES[2][0], # Cancelled - crm.AVAILABLE_STATES[3][0], # Done - crm.AVAILABLE_STATES[4][0], # Pending -) -class crm_helpdesk(base_state, base_stage, osv.osv): +class crm_helpdesk(base_state, osv.osv): """ Helpdesk Cases """ _name = "crm.helpdesk" @@ -80,9 +74,7 @@ class crm_helpdesk(base_state, base_stage, osv.osv): _defaults = { 'active': lambda *a: 1, - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'state': lambda *a: 'draft', 'date': lambda *a: fields.datetime.now(), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), diff --git a/addons/decimal_precision/i18n/ko.po b/addons/decimal_precision/i18n/ko.po new file mode 100644 index 00000000000..0b3df57f440 --- /dev/null +++ b/addons/decimal_precision/i18n/ko.po @@ -0,0 +1,49 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:31+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: decimal_precision +#: field:decimal.precision,digits:0 +msgid "Digits" +msgstr "자리수" + +#. module: decimal_precision +#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form +#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form +msgid "Decimal Accuracy" +msgstr "소숫점 정확성" + +#. module: decimal_precision +#: field:decimal.precision,name:0 +msgid "Usage" +msgstr "사용량" + +#. module: decimal_precision +#: sql_constraint:decimal.precision:0 +msgid "Only one value can be defined for each given usage!" +msgstr "" + +#. module: decimal_precision +#: view:decimal.precision:0 +msgid "Decimal Precision" +msgstr "소수점 정확성" + +#. module: decimal_precision +#: model:ir.model,name:decimal_precision.model_decimal_precision +msgid "decimal.precision" +msgstr "decimal.precision" diff --git a/addons/document_page/document_page.py b/addons/document_page/document_page.py index f74cfe02a21..7f885018001 100644 --- a/addons/document_page/document_page.py +++ b/addons/document_page/document_page.py @@ -66,7 +66,7 @@ class document_page(osv.osv): 'create_date': fields.datetime("Created on", select=True, readonly=True), 'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True), 'write_date': fields.datetime("Modification Date", select=True, readonly=True), - 'write_uid': fields.many2one('res.users', "Last Contributor", select=True), + 'write_uid': fields.many2one('res.users', "Last Contributor", select=True, readonly=True), } _defaults = { 'type':'content', diff --git a/addons/edi/i18n/is.po b/addons/edi/i18n/is.po new file mode 100644 index 00000000000..c3b37f49f46 --- /dev/null +++ b/addons/edi/i18n/is.po @@ -0,0 +1,87 @@ +# Icelandic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-10 12:09+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Icelandic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-11 05:17+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: edi +#. openerp-web +#: code:addons/edi/static/src/js/edi.js:67 +#, python-format +msgid "Reason:" +msgstr "Ástæða:" + +#. module: edi +#. openerp-web +#: code:addons/edi/static/src/js/edi.js:60 +#, python-format +msgid "The document has been successfully imported!" +msgstr "" + +#. module: edi +#. openerp-web +#: code:addons/edi/static/src/js/edi.js:65 +#, python-format +msgid "Sorry, the document could not be imported." +msgstr "" + +#. module: edi +#: model:ir.model,name:edi.model_res_company +msgid "Companies" +msgstr "" + +#. module: edi +#: model:ir.model,name:edi.model_res_currency +msgid "Currency" +msgstr "Gjaldmiðill" + +#. module: edi +#. openerp-web +#: code:addons/edi/static/src/js/edi.js:71 +#, python-format +msgid "Document Import Notification" +msgstr "" + +#. module: edi +#: code:addons/edi/models/edi.py:130 +#, python-format +msgid "Missing application." +msgstr "" + +#. module: edi +#: code:addons/edi/models/edi.py:131 +#, python-format +msgid "" +"The document you are trying to import requires the OpenERP `%s` application. " +"You can install it by connecting as the administrator and opening the " +"configuration assistant." +msgstr "" + +#. module: edi +#: code:addons/edi/models/edi.py:47 +#, python-format +msgid "'%s' is an invalid external ID" +msgstr "" + +#. module: edi +#: model:ir.model,name:edi.model_res_partner +msgid "Partner" +msgstr "Viðskipta aðili" + +#. module: edi +#: model:ir.model,name:edi.model_edi_edi +msgid "EDI Subsystem" +msgstr "" diff --git a/addons/event/event.py b/addons/event/event.py index eb18afd747c..3c04f5c1baa 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -172,6 +172,12 @@ class event_event(osv.osv): continue return res + def _get_visibility_selection(self, cr, uid, context=None): + return [('public', 'All Users'), + ('employees', 'Employees Only')] + # Lambda indirection method to avoid passing a copy of the overridable method when declaring the field + _visibility_selection = lambda self, *args, **kwargs: self._get_visibility_selection(*args, **kwargs) + _columns = { 'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}), 'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}), @@ -209,11 +215,14 @@ class event_event(osv.osv): 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), 'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'), + 'visibility': fields.selection(_visibility_selection, 'Privacy / Visibility', + select=True, required=True), } _defaults = { 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c), 'user_id': lambda obj, cr, uid, context: uid, + 'visibility': 'employees', } def subscribe_to_event(self, cr, uid, ids, context=None): diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 4f5e33eeafd..a9831720abf 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -76,6 +76,7 @@
diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index 83039ca4686..90a232731a7 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -25,25 +25,35 @@ - - Event multi-company + + Event: multi-company - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + ['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + - - - Event Registration multi-company + + Event/Registration: multi-company - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + ['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + - - - Report Event Registration multi-company + + Event/Report Registration: multi-company - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + ['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + diff --git a/addons/event/static/src/img/icon.png b/addons/event/static/description/icon.png similarity index 100% rename from addons/event/static/src/img/icon.png rename to addons/event/static/description/icon.png diff --git a/addons/fetchmail/i18n/ko.po b/addons/fetchmail/i18n/ko.po new file mode 100644 index 00000000000..a4b6e4e03b9 --- /dev/null +++ b/addons/fetchmail/i18n/ko.po @@ -0,0 +1,322 @@ +# Korean translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-28 09:25+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Confirmed" +msgstr "확정됨" + +#. module: fetchmail +#: field:fetchmail.server,server:0 +msgid "Server Name" +msgstr "서버 이름" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP" +msgstr "POP" + +#. module: fetchmail +#: help:fetchmail.server,priority:0 +msgid "Defines the order of processing, lower values mean higher priority" +msgstr "" + +#. module: fetchmail +#: help:fetchmail.server,is_ssl:0 +msgid "" +"Connections are encrypted with SSL/TLS through a dedicated port (default: " +"IMAPS=993, POP3S=995)" +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,attach:0 +msgid "Keep Attachments" +msgstr "첨부파일 보관" + +#. module: fetchmail +#: field:fetchmail.server,is_ssl:0 +msgid "SSL/TLS" +msgstr "SSL/TLS" + +#. module: fetchmail +#: help:fetchmail.server,original:0 +msgid "" +"Whether a full original copy of each email should be kept for referenceand " +"attached to each processed message. This will usually double the size of " +"your message database." +msgstr "" + +#. module: fetchmail +#: view:base.config.settings:0 +msgid "Configure the incoming email gateway" +msgstr "수신 이메일 게이트웨이 구성" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Fetch Now" +msgstr "지금 가져오기" + +#. module: fetchmail +#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree +#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree +msgid "Incoming Mail Servers" +msgstr "수신 메일 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type IMAP." +msgstr "서버유형 IMAP." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "POP/IMAP Servers" +msgstr "POP/IMAP 서버" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "Local Server" +msgstr "로컬 서버" + +#. module: fetchmail +#: field:fetchmail.server,state:0 +msgid "Status" +msgstr "상태" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_server +msgid "POP/IMAP Server" +msgstr "POP/IMAP 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Reset Confirmation" +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "SSL" +msgstr "SSL" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_fetchmail_config_settings +msgid "fetchmail.config.settings" +msgstr "fetchmail.config.settings" + +#. module: fetchmail +#: field:fetchmail.server,date:0 +msgid "Last Fetch Date" +msgstr "마지막으로 가져온 날짜" + +#. module: fetchmail +#: help:fetchmail.server,action_id:0 +msgid "" +"Optional custom server action to trigger for each incoming mail, on the " +"record that was created or updated by this mail" +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "# of emails" +msgstr "이메일 개수" + +#. module: fetchmail +#: field:fetchmail.server,original:0 +msgid "Keep Original" +msgstr "원본 유지" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced Options" +msgstr "고급 옵션" + +#. module: fetchmail +#: view:fetchmail.server:0 +#: field:fetchmail.server,configuration:0 +msgid "Configuration" +msgstr "구성" + +#. module: fetchmail +#: field:fetchmail.server,script:0 +msgid "Script" +msgstr "스크립트" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Incoming Mail Server" +msgstr "수신 메일 서버" + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:163 +#, python-format +msgid "Connection test failed!" +msgstr "연결 시험에 실패함!" + +#. module: fetchmail +#: field:fetchmail.server,user:0 +msgid "Username" +msgstr "사용자명" + +#. module: fetchmail +#: help:fetchmail.server,server:0 +msgid "Hostname or IP of the mail server" +msgstr "메일서버의 호스트이름 또는 IP" + +#. module: fetchmail +#: field:fetchmail.server,name:0 +msgid "Name" +msgstr "이름" + +#. module: fetchmail +#: code:addons/fetchmail/fetchmail.py:163 +#, python-format +msgid "" +"Here is what we got instead:\n" +" %s." +msgstr "" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Test & Confirm" +msgstr "시험 & 확정" + +#. module: fetchmail +#: field:fetchmail.server,action_id:0 +msgid "Server Action" +msgstr "서버 동작" + +#. module: fetchmail +#: field:mail.mail,fetchmail_server_id:0 +msgid "Inbound Mail Server" +msgstr "수신메일서버" + +#. module: fetchmail +#: field:fetchmail.server,message_ids:0 +#: model:ir.actions.act_window,name:fetchmail.act_server_history +msgid "Messages" +msgstr "메시지" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Search Incoming Mail Servers" +msgstr "수신메일서버 검색" + +#. module: fetchmail +#: field:fetchmail.server,active:0 +msgid "Active" +msgstr "활성" + +#. module: fetchmail +#: help:fetchmail.server,attach:0 +msgid "" +"Whether attachments should be downloaded. If not enabled, incoming emails " +"will be stripped of any attachments before being processed" +msgstr "" + +#. module: fetchmail +#: model:ir.model,name:fetchmail.model_mail_mail +msgid "Outgoing Mails" +msgstr "발신 이메일" + +#. module: fetchmail +#: field:fetchmail.server,priority:0 +msgid "Server Priority" +msgstr "서버 우선 순위" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "IMAP Server" +msgstr "IMAP 서버" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "IMAP" +msgstr "IMAP" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server type POP." +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,password:0 +msgid "Password" +msgstr "암호" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Actions to Perform on Incoming Mails" +msgstr "수신 메일에 실행할 동작" + +#. module: fetchmail +#: field:fetchmail.server,type:0 +msgid "Server Type" +msgstr "서버 유형" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Login Information" +msgstr "로그인 정보" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server Information" +msgstr "서버 정보" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "If SSL required." +msgstr "SSL이 필요할 경우." + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Advanced" +msgstr "고급" + +#. module: fetchmail +#: view:fetchmail.server:0 +msgid "Server & Login" +msgstr "서버 & 로그인" + +#. module: fetchmail +#: help:fetchmail.server,object_id:0 +msgid "" +"Process each incoming mail as part of a conversation corresponding to this " +"document type. This will create new documents for new conversations, or " +"attach follow-up emails to the existing conversations (documents)." +msgstr "" + +#. module: fetchmail +#: field:fetchmail.server,object_id:0 +msgid "Create a New Record" +msgstr "" + +#. module: fetchmail +#: selection:fetchmail.server,state:0 +msgid "Not Confirmed" +msgstr "확정되지 않음" + +#. module: fetchmail +#: selection:fetchmail.server,type:0 +msgid "POP Server" +msgstr "POP 서버" + +#. module: fetchmail +#: field:fetchmail.server,port:0 +msgid "Port" +msgstr "포트" diff --git a/addons/fleet/static/src/img/icon.png b/addons/fleet/static/description/icon.png similarity index 100% rename from addons/fleet/static/src/img/icon.png rename to addons/fleet/static/description/icon.png diff --git a/addons/google_base_account/__init__.py b/addons/google_base_account/__init__.py index e1a476431af..44a5aabe277 100644 --- a/addons/google_base_account/__init__.py +++ b/addons/google_base_account/__init__.py @@ -20,7 +20,6 @@ ############################################################################## 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 index b4d996f2807..99678d2785d 100644 --- a/addons/google_base_account/__openerp__.py +++ b/addons/google_base_account/__openerp__.py @@ -30,10 +30,9 @@ The module adds google user in res user. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['base'], + 'depends': ['base_setup'], 'data': [ - 'google_base_account_view.xml', - 'wizard/google_login_view.xml', + 'google_base_account_data.xml', ], 'demo': [], 'installable': True, diff --git a/addons/google_base_account/google_base_account.py b/addons/google_base_account/google_base_account.py index 06e5643344c..a6cf67bbe62 100644 --- a/addons/google_base_account/google_base_account.py +++ b/addons/google_base_account/google_base_account.py @@ -19,14 +19,48 @@ # ############################################################################## -from openerp.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), - } +from openerp.osv import osv +from openerp import SUPERUSER_ID +from openerp.tools.translate import _ + +import urllib +import urllib2 +import simplejson + + +class google_service(osv.osv): + _name = 'google.service' + + def generate_refresh_token(self, cr, uid, service, authorization_code, context=None): + if authorization_code: + ir_config = self.pool['ir.config_parameter'] + client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service) + client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_secret' % service) + redirect_uri = ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri') + + #Get the Refresh Token From Google And store it in ir.config_parameter + headers = {"Content-type": "application/x-www-form-urlencoded"} + data = dict(code=authorization_code, client_id=client_id, client_secret=client_secret, redirect_uri=redirect_uri, grant_type="authorization_code") + data = urllib.urlencode(data) + try: + req = urllib2.Request("https://accounts.google.com/o/oauth2/token", data, headers) + content = urllib2.urlopen(req).read() + except urllib2.HTTPError: + raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during your token generation. Maybe your Authorization Code is invalid or already expired"), context=context) + + content = simplejson.loads(content) + return content.get('refresh_token') + + def _get_google_token_uri(self, cr, uid, service, context=None): + ir_config = self.pool['ir.config_parameter'] + params = { + 'scope': 'https://www.googleapis.com/auth/drive', + 'redirect_uri': ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri'), + 'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service), + 'response_type': 'code', + 'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service), + } + uri = 'https://accounts.google.com/o/oauth2/auth?%s' % urllib.urlencode(params) + return uri # vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/google_base_account/google_base_account_data.xml b/addons/google_base_account/google_base_account_data.xml new file mode 100644 index 00000000000..c6748df7dc9 --- /dev/null +++ b/addons/google_base_account/google_base_account_data.xml @@ -0,0 +1,9 @@ + + + + + google_redirect_uri + urn:ietf:wg:oauth:2.0:oob + + + \ No newline at end of file diff --git a/addons/google_base_account/google_base_account_view.xml b/addons/google_base_account/google_base_account_view.xml deleted file mode 100644 index 8613582692f..00000000000 --- a/addons/google_base_account/google_base_account_view.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - res.users.google.form1 - res.users - - - - - - - - - - - - - - diff --git a/addons/google_base_account/wizard/google_login.py b/addons/google_base_account/wizard/google_login.py deleted file mode 100644 index 1771d99b51e..00000000000 --- a/addons/google_base_account/wizard/google_login.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- 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 openerp.osv import fields,osv -from openerp.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.service.ContactsService() - elif type == 'contact': - gd_client = gdata.contacts.service.ContactsService() - elif type == 'calendar': - gd_client = gdata.calendar.service.CalendarService() - elif type =='docs_client': - gd_client = gdata.docs.client.DocsClient() - 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 failed. 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'} - - -# 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 deleted file mode 100644 index ed345ab5a0f..00000000000 --- a/addons/google_base_account/wizard/google_login_view.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - google.login.form - google.login - - - - - - -
-
- -
-
- - - - Google Login - ir.actions.act_window - google.login - form - form - new - - -
-
diff --git a/addons/google_docs/__init__.py b/addons/google_docs/__init__.py deleted file mode 100644 index dd6285502c0..00000000000 --- a/addons/google_docs/__init__.py +++ /dev/null @@ -1 +0,0 @@ -import google_docs diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py deleted file mode 100644 index 2fd1976ae3b..00000000000 --- a/addons/google_docs/google_docs.py +++ /dev/null @@ -1,193 +0,0 @@ -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2012 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 logging -from datetime import datetime - -from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -_logger = logging.getLogger(__name__) - -try: - import gdata.docs.data - import gdata.docs.client - - # API breakage madness in the gdata API - those guys are insane. - try: - # gdata 2.0.15+ - gdata.docs.client.DocsClient.copy_resource - except AttributeError: - # gdata 2.0.14- : copy_resource() was copy() - gdata.docs.client.DocsClient.copy_resource = gdata.docs.client.DocsClient.copy - - try: - # gdata 2.0.16+ - gdata.docs.client.DocsClient.get_resource_by_id - except AttributeError: - try: - # gdata 2.0.15+ - gdata.docs.client.DocsClient.get_resource_by_self_link - def get_resource_by_id_2_0_16(self, resource_id, **kwargs): - return self.GetResourceBySelfLink( - gdata.docs.client.RESOURCE_FEED_URI + ('/%s' % resource_id), **kwargs) - gdata.docs.client.DocsClient.get_resource_by_id = get_resource_by_id_2_0_16 - except AttributeError: - # gdata 2.0.14- : alias get_resource_by_id() - gdata.docs.client.DocsClient.get_resource_by_id = gdata.docs.client.DocsClient.get_doc - - try: - import atom.http_interface - _logger.info('GData lib version `%s` detected' % atom.http_interface.USER_AGENT) - except (ImportError, AttributeError): - _logger.debug('GData lib version could not be detected', exc_info=True) - -except ImportError: - _logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list") - - -class google_docs_ir_attachment(osv.osv): - _inherit = 'ir.attachment' - - def _auth(self, cr, uid, context=None): - ''' - Connexion with google base account - @return client object for connexion - ''' - #pool the google.login in google_base_account - google_pool = self.pool.get('google.login') - #get gmail password and login. We use default_get() instead of a create() followed by a read() on the - # google.login object, because it is easier. The keys 'user' and 'password' ahve to be passed in the dict - # but the values will be replaced by the user gmail password and login. - user_config = google_pool.default_get(cr, uid, {'user' : '' , 'password' : ''}, context=context) - #login gmail account - client = google_pool.google_login(user_config['user'], user_config['password'], type='docs_client', context=context) - if not client: - raise osv.except_osv(_('Google Docs Error!'), _("Check your google configuration in Users/Users/Synchronization tab.")) - _logger.info('Logged into google docs as %s', user_config['user']) - return client - - def create_empty_google_doc(self, cr, uid, res_model, res_id, context=None): - '''Create a new google document, empty and with a default type (txt) - :param res_model: the object for which the google doc is created - :param res_id: the Id of the object for which the google doc is created - :return: the ID of the google document object created - ''' - #login with the base account google module - client = self._auth(cr, uid, context=context) - # create the document in google docs - title = "%s %s" % (context.get("name","Untitled Document."), datetime.today().strftime(DEFAULT_SERVER_DATETIME_FORMAT)) - local_resource = gdata.docs.data.Resource(gdata.docs.data.DOCUMENT_LABEL,title=title) - #create a new doc in Google Docs - gdocs_resource = client.post(entry=local_resource, uri='https://docs.google.com/feeds/default/private/full/') - # create an ir.attachment into the db - self.create(cr, uid, { - 'res_model': res_model, - 'res_id': res_id, - 'type': 'url', - 'name': title, - 'url': gdocs_resource.get_alternate_link().href, - }, context=context) - return {'resource_id': gdocs_resource.resource_id.text, - 'title': title, - 'url': gdocs_resource.get_alternate_link().href} - - def copy_gdoc(self, cr, uid, res_model, res_id, name_gdocs, gdoc_template_id, context=None): - ''' - copy an existing document in google docs - :param res_model: the object for which the google doc is created - :param res_id: the Id of the object for which the google doc is created - :param name_gdocs: the name of the future ir.attachment that will be created. Based on the google doc template foun. - :param gdoc_template_id: the id of the google doc document to copy - :return: the ID of the google document object created - ''' - #login with the base account google module - client = self._auth(cr, uid) - # fetch and copy the original document - try: - doc = client.get_resource_by_id(gdoc_template_id) - #copy the document you choose in the configuration - copy_resource = client.copy_resource(doc, name_gdocs) - except: - raise osv.except_osv(_('Google Docs Error!'), _("Your resource id is not correct. You can find the id in the google docs URL.")) - # create an ir.attachment - self.create(cr, uid, { - 'res_model': res_model, - 'res_id': res_id, - 'type': 'url', - 'name': name_gdocs, - 'url': copy_resource.get_alternate_link().href - }, context=context) - return copy_resource.resource_id.text - - def google_doc_get(self, cr, uid, res_model, ids, context=None): - ''' - Function called by the js, when no google doc are yet associated with a record, with the aim to create one. It - will first seek for a google.docs.config associated with the model `res_model` to find out what's the template - of google doc to copy (this is usefull if you want to start with a non-empty document, a type or a name - different than the default values). If no config is associated with the `res_model`, then a blank text document - with a default name is created. - :param res_model: the object for which the google doc is created - :param ids: the list of ids of the objects for which the google doc is created. This list is supposed to have - a length of 1 element only (batch processing is not supported in the code, though nothing really prevent it) - :return: the google document object created - ''' - if len(ids) != 1: - raise osv.except_osv(_('Google Docs Error!'), _("Creating google docs may only be done by one at a time.")) - res_id = ids[0] - pool_ir_attachment = self.pool.get('ir.attachment') - pool_gdoc_config = self.pool.get('google.docs.config') - name_gdocs = '' - model_fields_dic = self.pool[res_model].read(cr, uid, res_id, [], context=context) - - # check if a model is configured with a template - google_docs_config = pool_gdoc_config.search(cr, uid, [('model_id', '=', res_model)], context=context) - if google_docs_config: - name_gdocs = pool_gdoc_config.browse(cr, uid, google_docs_config, context=context)[0].name_template - try: - name_gdocs = name_gdocs % model_fields_dic - except: - raise osv.except_osv(_('Key Error!'), _("Your Google Doc Name Pattern's key does not found in object.")) - google_template_id = pool_gdoc_config.browse(cr, uid, google_docs_config[0], context=context).gdocs_resource_id - google_document = pool_ir_attachment.copy_gdoc(cr, uid, res_model, res_id, name_gdocs, google_template_id, context=context) - else: - google_document = pool_ir_attachment.create_empty_google_doc(cr, uid, res_model, res_id, context=context) - return google_document - -class config(osv.osv): - _name = 'google.docs.config' - _description = "Google Docs templates config" - - _columns = { - 'model_id': fields.many2one('ir.model', 'Model', required=True), - 'gdocs_resource_id': fields.char('Google Resource ID to Use as Template', size=64, help=''' -This is the id of the template document, on google side. You can find it thanks to its URL: -*for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789` -*for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789` -*for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789` -*for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789` -... -''', required=True), - 'name_template': fields.char('Google Doc Name Pattern', size=64, help='Choose how the new google docs will be named, on google side. Eg. gdoc_%(field_name)s', required=True), - } - - _defaults = { - 'name_template': 'gdoc_%(name)s', - } diff --git a/addons/google_docs/i18n/ar.po b/addons/google_docs/i18n/ar.po deleted file mode 100644 index bf8df78b926..00000000000 --- a/addons/google_docs/i18n/ar.po +++ /dev/null @@ -1,188 +0,0 @@ -# Arabic translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-25 21:35+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Arabic \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/cs.po b/addons/google_docs/i18n/cs.po deleted file mode 100644 index 38cda3eccca..00000000000 --- a/addons/google_docs/i18n/cs.po +++ /dev/null @@ -1,188 +0,0 @@ -# Czech translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-31 16:49+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-01 05:06+0000\n" -"X-Generator: Launchpad (build 16546)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/de.po b/addons/google_docs/i18n/de.po deleted file mode 100644 index 017a0860244..00000000000 --- a/addons/google_docs/i18n/de.po +++ /dev/null @@ -1,226 +0,0 @@ -# German translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-10 11:38+0000\n" -"Last-Translator: Thorsten Vocks (OpenBig.org) \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: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Fehler im 'Key' !" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"Am Beispiel einer Präsentation (slide show) unter einer URL wie " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, ist die ID die folgende `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"Am Beispiel eines textdokuments (doc) unter einer URL wie " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ist die " -"ID die folgende `document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "Google Resource ID als Vorlage" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"Am Beispiel einer Zeichnung (drawings) unter einer URL wie " -"'https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, ist die " -"ID die folgende `drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Google Doc hinzufügen ..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Dieses ist die ID Ihrer Textvorlage auf der Google Seite. Sie können diese " -"dank Ihrer URL finden unter:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Konfiguration Google Docs Vorlage" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Die google Anmeldedaten für den Benutzer wurden nicht hinterlegt. Bitte " -"kontaktieren Sie Ihren Administrator." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"Am Beispiel einer Tabelle (spreadsheet) unter einer URL wie " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"ist die ID die folgende `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Die ID der Resource ist nicht korrekt. Sie können die ID über Ihre google " -"docs URL finden." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "Es kann nur ein google doc zur gleichen Zeit bearbeitet werden" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google Docs Fehler !" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Prüfen Sie Ihre google Einstellungen unter dem Aktenreiter Benutzer / " -"Benutzer / Synchronisation." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Google Docs Konfiguration" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Die google Anmeldedaten wurden noch nicht hinterlegt." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "Ihr google doc Bezeichnungsmuster konnte hier nicht gefunden werden" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Wählen Sie aus wie das google doc in google side bezeichnet werden soll, " -"z.B. gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Google Docs Konfiguration" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Dies ist die ID der Dokumenten Vorlage unter google sides. Sie können diese " -"dank seiner URL einfach finden:\n" -"* für ein Textdokument mit einer url wie " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ist die " -"ID `document: 123456789`\n" -"* für eine Tabellenkalkulation mit einer url wie " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789 # gid = " -"0`, ist die ID `spreadsheet: 123456789`\n" -"* für eine Präsentation (slide show) mit einer url wie " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit # slide " -"= id.p`, ist die ID `presentation: 123456789 `\n" -"* für eine Zeichnung mit einer url wie " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, ist die " -"ID `drawings: 123456789`\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Google Doc Bezeichnungsmuster" diff --git a/addons/google_docs/i18n/es.po b/addons/google_docs/i18n/es.po deleted file mode 100644 index 71bb08ece9a..00000000000 --- a/addons/google_docs/i18n/es.po +++ /dev/null @@ -1,230 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-12 12:51+0000\n" -"Last-Translator: Pedro Manuel Baeza \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "¡Error de clave!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"para un documento de presentación (muestra de diapositivas) con una " -"dirección como " -"'https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p', el id. es 'presentation:123456789'" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"para un documento de texto con una dirección como " -"'https://docs.google.com/a/openerp.com/document/d/123456789/edit', el id. es " -"'document:123456789'" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "Id. del recurso de Google a usar como plantilla" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"para un documento de dibujo con la dirección " -"'https://docs.google.com/a/openerp.com/drawings/d/123456789/edit', el id. es " -"'drawings:123456789'" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Añadir documento google..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Éste es el id de la plantilla del documento, de la parte de Google. Puede " -"averiguarlo gracias a su dirección:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Configurar plantillas Google Docs" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Los credenciales del usuario de Google no están establecidos aún. Contacte " -"con su administrador para más ayuda." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"para una hoja de cálculo con la dirección " -"'https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0', " -"el id. es `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Su id de recurso no es correcto. Puede encontrar el id en la URL de google " -"docs." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" -"Crear un documento google solo puede ser hecho por uno al mismo tiempo." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "¡Error Google Dos!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Verifique su configuración google en Usuarios/usuarios/pestaña sincronización" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Configuración Google Docs" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Configuración de modelos" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modelo" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Las credenciales de usuario Google aún no se han establecido." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" -"No se ha encontrado la clave del patrón de nombre del documento de Google en " -"el objeto." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Escoja cómo serán nombrados los nuevos documentos de Google, en la parte de " -"Google. Por ejemplo, gdoc_%(field_name)s." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Configuración de Google docs" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Éste es el id. del documento plantilla, en la parte de Google. Puede " -"averiguarlo gracias a su dirección:\n" -"* para un documento de texto con una dirección como " -"'https://docs.google.com/a/openerp.com/document/d/123456789/edit', el id. es " -"'document:123456789'\n" -"* para una hoja de cálculo con la dirección " -"'https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0', " -"el id. es `spreadsheet:123456789`\n" -"* para un documento de presentación (muestra de diapositivas) con una " -"dirección como " -"'https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p', el id. es 'presentation:123456789'\n" -"* para un documento de dibujo con la dirección " -"'https://docs.google.com/a/openerp.com/drawings/d/123456789/edit', el id. es " -"'drawings:123456789'\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "Adjunto" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Patrón de nombre del documento Google" diff --git a/addons/google_docs/i18n/fr.po b/addons/google_docs/i18n/fr.po deleted file mode 100644 index cf9ffdaccc8..00000000000 --- a/addons/google_docs/i18n/fr.po +++ /dev/null @@ -1,230 +0,0 @@ -# French translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 13:47+0000\n" -"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " -"\n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Erreur de clé!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"pour une présentation (diaporama) ayant une url " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, l'ID est `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"pour un document ayant l'url " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID est " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "L'identifiant Google de la ressource à utiliser comme modèle" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"pour un dessin ayant l'url " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID est " -"`drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Ajouter un document Google..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Ceci est l'identifiant du modèle de document, du côté de Google. Vous pouvez " -"le trouver grâce à son url:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Configuration des modèles de documents Google" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Vous n'avez pas renseigné les identifiants Google sur votre compte " -"utilisateur. Contactez votre administrateur si vous souhaitez de l'aide." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"pour un document tableur ayant l'url " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -" l'ID est `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"L'identifiant de la ressource est incorrecte. Vous pouvez le trouver dans " -"l'url associée document Google." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "Vous ne pouvez créer qu'un seul document google à la fois." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Erreur Google Docs!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Vérifiez votre configuration Google dans l'onglet Synchronisation du " -"formulaire Utilisateurs" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Configuration Google Documents" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Configuration des Modèles" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modèles" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" -"Les paramètres d'authentification Google de l'utilisateur n'ont pas encoré " -"été configurés" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "Le nom du document google associé n'a pas été trouvé dans cet objet." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Choisissez le nom du nouveau document google sur les serveurs Google. ex: " -"gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Configuration de Google documents" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Ceci est l'identifiant du modèle de document, du côté de Google. Vous pouvez " -"le trouver grâce à son URL: \n" -" \n" -"*Pour un document texte dont l'url est " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID est " -"`document:123456789`\n" -"*Pour un document tableur dont l'url est " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"l'ID est `spreadsheet:123456789`\n" -"*Pour une présentation dont l'url est " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, l'ID est `presentation:123456789`\n" -"* Pour un dessin dont l'url est " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID est " -"`drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Motif de nom de document Google" diff --git a/addons/google_docs/i18n/google_docs.pot b/addons/google_docs/i18n/google_docs.pot deleted file mode 100644 index 8da7c5d2f70..00000000000 --- a/addons/google_docs/i18n/google_docs.pot +++ /dev/null @@ -1,159 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * google_docs -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0alpha\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 17:05+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:139 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "This is the id of the template document, on google side. You can find it thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "The user google credentials are not set yet. Contact your administrator for help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:101 -#, python-format -msgid "Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:125 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:56 -#: code:addons/google_docs/google_docs.py:101 -#: code:addons/google_docs/google_docs.py:125 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:56 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:139 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "Choose how the new google docs will be named, on google side. Eg. gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "\n" -"This is the id of the template document, on google side. You can find it thanks to its URL: \n" -"*for a text document with url like `https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is `document:123456789`\n" -"*for a spreadsheet document with url like `https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like `https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id.p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like `https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is `drawings:123456789`\n" -"...\n" -"" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" - diff --git a/addons/google_docs/i18n/hr.po b/addons/google_docs/i18n/hr.po deleted file mode 100644 index ac1a64cd1e2..00000000000 --- a/addons/google_docs/i18n/hr.po +++ /dev/null @@ -1,190 +0,0 @@ -# Croatian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-09 20:25+0000\n" -"Last-Translator: Goran Kliska \n" -"Language-Team: Croatian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Dodaj Google Doc..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google Docs greška!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Postave Google Docs-a" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Model" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Odaberite kako će se nazivati novi google dokumenti, on google side. Eg. " -"gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/hu.po b/addons/google_docs/i18n/hu.po deleted file mode 100644 index 344e01173a9..00000000000 --- a/addons/google_docs/i18n/hu.po +++ /dev/null @@ -1,226 +0,0 @@ -# Hungarian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-02 09:35+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Hungarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Kulcs hiba!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"a bemutatóhoz (diavetítés) a dokumentum URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, az ID azonosítója `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"egy szöveges dokumantum URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, az ID " -"azonosítója `document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "Google forrás ID azonosító sablonként való használathoz" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"egy ábra dokumantum URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, az ID " -"azonosítója `drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Google Doc hozzáadása..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Eza samlon dokumentum ID azonosítója, a google oldalról. Megtalálhatja az " -"URL elérési úrjának köszönhetően:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Google Docs sablon beállítás" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"A felhasználó google igazolásai még nincsenek beállítva. Lépjen kapcsolatba " -"az adminnal segítségért." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"egy táblázatkezelő dokumentumhoz ilyen URL elérési úttal mint " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"ai ID azonosítója `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"A forrás ID azonosítója nem helyes. Megtalálhatja az ID azonosítót a google " -"dokumentum URL elérési útjában." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "Lehet, hogy egyszerre csak egy google dokumentumot hozhat létre." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google dokumentum hiba!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Ellenőrizze a google beállításokat az " -"Felhsználók/Felhasználók/Szinkronizáció fülön." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Google dokumentum beállítás" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Modell beállítás" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modell" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Google személyi okmányok nincsenek beállítva." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "A Google dokumentum náv minta kulcs nem található az objektumban." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Vállassza ki a Google dokumentum új név alkotási módját, a google oldalról. " -"Pl. gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Google dokumentum beállítás" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Ez a sablon dokumentum ID azonosító, a google oldalon. Megtalálja az URL " -"elérési útnak köszönhetően: \n" -"*a szöveges dokumentumnak az URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, az ID " -"azonosítója `document:123456789`\n" -"*a táblázatkezelő dokumentumnak az URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"az ID azonosítója `spreadsheet:123456789`\n" -"*a bemutató (diavetítés) dokumentumnak az URL elérési útja " -"mint`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slid" -"e=id.p`, az ID azonosítója `presentation:123456789`\n" -"*a grafikai dokumentumnak az URL elérési útja mint " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, az ID " -"azonosítója `drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Google dokumentum név minta" diff --git a/addons/google_docs/i18n/it.po b/addons/google_docs/i18n/it.po deleted file mode 100644 index 2eca676d6c7..00000000000 --- a/addons/google_docs/i18n/it.po +++ /dev/null @@ -1,227 +0,0 @@ -# Italian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-18 22:11+0000\n" -"Last-Translator: Sergio Corato \n" -"Language-Team: Italian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Errore Chiave!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"per un documento di presentazione (proiezione diapositive) con un url come " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, l'ID è `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"per un documento di testo con un url come " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID è " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "ID risorsa google da usare come modello" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"per un documento di disegno con url come " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID è " -"`drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Aggiungi google doc" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Questo è l'id del modello di documento, sul lato google. E' possibile " -"trovarlo tramite il suo URL:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Config. modello google docs" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Le credeziali dell'utente google non sono ancora impostate. Contattare " -"l'amministratore per aiuto." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"per un foglio di calcolo con url come " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"l'ID è `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Il vostro ID risorsa non è corretto. Potete trovarlo nell'URL di google docs" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" -"La creazione di documenti google può essere fatto solo uno alla volta." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Errore Google Docs!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Controllare la configurazione google nella scheda " -"Utenti/Utenti/Sincronizzazione" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Configurazione Google Docs" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Configurazione modelli" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modello" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Credenziali utente google non ancora impostate." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" -"La chiave dello Schema Nome di Google Doc non è stata trovata nell'oggetto." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Scegliere come il nuovo google docs sarà nominato, sul lato google. Es.: " -"gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Configurazione Google Docs" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Questo è l'id del modello di documento, sul lato google. E' possibile " -"trovarlo grazie al suo URL:\n" -"*per un documento di testo con url come " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, l'ID è " -"`document:123456789`\n" -"*per un foglio di calcolo con url come " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"l'ID è `spreadsheet:123456789`\n" -"*per un documento di presentazione (proiezione diapositive) con url come " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, l'ID è `presentation:123456789`\n" -"*per un documento di disegno con url come " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, l'ID è " -"`drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Schema Nome Google Doc" diff --git a/addons/google_docs/i18n/ln.po b/addons/google_docs/i18n/ln.po deleted file mode 100644 index 24c26b98920..00000000000 --- a/addons/google_docs/i18n/ln.po +++ /dev/null @@ -1,188 +0,0 @@ -# Lingala translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-06-05 13:00+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Lingala \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n" -"X-Generator: Launchpad (build 16667)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/mk.po b/addons/google_docs/i18n/mk.po deleted file mode 100644 index 1dfd2120b5b..00000000000 --- a/addons/google_docs/i18n/mk.po +++ /dev/null @@ -1,204 +0,0 @@ -# Macedonian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-08 14:39+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Macedonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Грешка во клуч!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"за презентација (слајдшоу) документ со url како " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, ID е `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"за текст документ со урл " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ID е " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"за цртеж со урл како " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, ID е " -"`drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Додади Google док..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Конфигурација на Google Docs шаблони" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Google креденциите за корисникот сеуште не се сетирани. Контактирајте го " -"администраторот." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "Креирање на google docs може да се направи едно по едно." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google Docs Грешка!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Провери ја google конфигурацијата во Корисници/Корисници/Синхронизација " -"табот." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Google Docs конфигурација" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Конфигурација на модели" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Модел" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Google креденциите за корисникот сеуште не се поставени." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Google Docs конфигурација" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/mn.po b/addons/google_docs/i18n/mn.po deleted file mode 100644 index 68380d3592f..00000000000 --- a/addons/google_docs/i18n/mn.po +++ /dev/null @@ -1,188 +0,0 @@ -# Mongolian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-19 02:49+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Mongolian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Моделийн тохиргоо" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Модел" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/nl.po b/addons/google_docs/i18n/nl.po deleted file mode 100644 index 91b4d963e01..00000000000 --- a/addons/google_docs/i18n/nl.po +++ /dev/null @@ -1,226 +0,0 @@ -# Dutch translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-01 16:42+0000\n" -"Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" -"Language-Team: Dutch \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Key fout!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"voor een presentatie (dia weergave) document met een website adres, zoals: " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"voor een tekst document met een met een website adres, zoals: " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "Google Resource ID te gebruiken als sjabloon" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"voor een tekening met een met een website adres, zoals: " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Google Doc toevoegen..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Dit is het ID van het sjabloon document op de Google site. U kunt deze " -"vinden, dankzij dit website adres:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Google Docs sjablonen instellingen" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"De Google gebruiker referenties zijn nog niet ingesteld. Neem contact op met " -"de beheerder voor hulp." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"voor een spreadsheet document met een met een website adres, zoals: " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Uw resource ID is niet correct. U kunt deze vinden in het Google docs " -"website adres." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "U kunt maar één Google doc tegelijk aanmaken." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google Docs fout!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Controleer uw Google docs instellingen op het tabblad 'Synchronisatie' bij " -"in Instellingen/Gebruikers." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Google Docs instellingen" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Models configuratie" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Model" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Google gebruiker referenties zijn niet ingesteld." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "Uw Google Doc 'Name Pattern's key' is niet gevonden in object." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Kies welke naam de nieuw aangemaakte Google docs krijgen op de Google " -"website. Bijv. gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Google Docs Instellingen" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Dit is het id van het sjabloon document aan de google kant. Je kunt hem " -"vinden dankzij dit adres:\n" -"*voor een tekstdocument met een adres als " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, het ID is " -"`document:123456789`\n" -"*voor een spreadsheet met een adres als " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"het ID is `spreadsheet:123456789`\n" -"*voor een presentatie met een adres " -"als`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide" -"=id.p`, het ID is `presentation:123456789`\n" -"*voor een tekening met een adres als " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, het ID is " -"`drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Google Doc naam patroon" diff --git a/addons/google_docs/i18n/pl.po b/addons/google_docs/i18n/pl.po deleted file mode 100644 index dcd97078a6f..00000000000 --- a/addons/google_docs/i18n/pl.po +++ /dev/null @@ -1,188 +0,0 @@ -# Polish translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-16 11:28+0000\n" -"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Błąd klucza" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Dodaj Google doc..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/pt.po b/addons/google_docs/i18n/pt.po deleted file mode 100644 index 1539bcbedb6..00000000000 --- a/addons/google_docs/i18n/pt.po +++ /dev/null @@ -1,188 +0,0 @@ -# Portuguese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-10 17:49+0000\n" -"Last-Translator: Andrei Talpa (multibase.pt) \n" -"Language-Team: Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modelo" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/pt_BR.po b/addons/google_docs/i18n/pt_BR.po deleted file mode 100644 index 38e3c400c25..00000000000 --- a/addons/google_docs/i18n/pt_BR.po +++ /dev/null @@ -1,227 +0,0 @@ -# Brazilian Portuguese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-07 22:47+0000\n" -"Last-Translator: Fábio Martinelli - http://zupy.com.br " -"\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: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Erro de Chave!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"para um documento de apresentação (slide) com a url como " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, o ID é `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"para um documento de texto com a url como " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, o ID é " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "Id de Recurso do Google para usar como Modelo" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"para um documento de desenho com a url como " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, o ID " -"é`drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Adicionar um Documento do Google..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Este é o id do modelo do documento, no lado do google. Você pode encontrá-lo " -"graças à url:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Configuração dos modelos do Google Docs" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"As credenciais do usuário do google ainda não foram definidas. Para mais " -"informações, solicite auxílio ao Administrador do Sistema." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"para uma planilha de cálculo com url como " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"o ID é `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Sua id de recurso não está correta. Você encontra a id na url do google docs." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "A criação de documentos do google deve ser feita um de cada vez." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Erro do Google Docs!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Verifique a sua configuração do google na aba " -"Usuários/Usuários/Sincronização." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Configuração do Google Docs" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Configuração de modelos" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Modelo" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "As credenciais de usuário do Google ainda não foram definidas." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" -"A chave do seu Padrão de Nome do Google Docs não foi encontrada no objeto." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Escolha como os novos documentos do google serão nomeados, no lado do " -"google. Ex: gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Configuração do Google Docs" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Este é o ID do modelo de documento no Google. Você pode encontra-lo graças a " -"essa URL: \n" -"*para um documento de texto com uma url como " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, o ID é " -"`document:123456789`\n" -"*para uma planilha com url como " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"o ID é `spreadsheet:123456789`\n" -"*para uma apresentação (slide show) com url como " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, o ID é `presentation:123456789`\n" -"*para um documento de desenho com url como " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, o ID é " -"`drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "Anexo" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Padrão de Nome do Google Docs" diff --git a/addons/google_docs/i18n/ro.po b/addons/google_docs/i18n/ro.po deleted file mode 100644 index 716b970f190..00000000000 --- a/addons/google_docs/i18n/ro.po +++ /dev/null @@ -1,226 +0,0 @@ -# Romanian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-01-27 09:26+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Romanian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Eroare Cheie!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"pentru un document de prezentare (slide show) cu url-ul " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, ID-ul este `prezentare:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"pentru un document text cu url-ul " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ID-ul " -"este `document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "ID Resurse Google pentru a fi folosite ca Sablon" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"pentru un document desen cu url-ul " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, ID-ul " -"este`desene:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Adauga Document Google..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" -"Acesta este id-ul documentului sablon, pe partea google. Il puteti gasi cu " -"ajutorul URL-ului:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "configurarea sabloanelor documentelor Google" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" -"Acreditarile utilizatorului google nu sunt inca configurate. Contactati " -"administratorul pentru ajutor." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"pentru un document cu tabele cu url-ul: " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"ID-ul este `tabele:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" -"Id-ul resursei dumneavoastra nu este corect. Puteti gasi id-ul in URL " -"documente google." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "Crearea de documente google poate fi facuta numai pe rand." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Eroare Documente Google!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Verificati configurarea google in tabul Utilizatori/Utilizatori/Sincronizare." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Configurarea Documentelor Google" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "Configurare modele" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Model" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Acreditarile utilizatorului Google nu sunt inca configurate." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" -"Cheia modelului numelui documentului Google nu a fost gasita in obiect." - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" -"Alegeti modul in care vor fi numite documentele google, pe partea google. De " -"exemplu gdoc_%(nume_camp)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Configurarea Documentelor Google" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" -"\n" -"Acesta este id-ul documentului tipar, pe partea google. Il puteti gasi cu " -"ajutorul URL-ului: \n" -"*pentru un document text cu url-ul " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ID-ul " -"este `document:123456789`\n" -"*pentru un document cu tabele cu url-ul " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"ID-ul este `spreadsheet:123456789`\n" -"*pentru un document prezentare (slide show) cu url-ul " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, ID-ul este `presentation:123456789`\n" -"*pentru un document cu desene cu url-ul " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, ID-ul " -"este `drawings:123456789`\n" -"...\n" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment (ir.atasament)" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Tiparul Numelui Documentului Google" diff --git a/addons/google_docs/i18n/ru.po b/addons/google_docs/i18n/ru.po deleted file mode 100644 index 33f24ed557f..00000000000 --- a/addons/google_docs/i18n/ru.po +++ /dev/null @@ -1,196 +0,0 @@ -# Russian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-01 11:29+0000\n" -"Last-Translator: Эдуард \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: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Ошибка ключа!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"для документа-презентации (слайд шоу) с url как " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, ID - `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"для текстового документа с url как " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, ID - " -"`document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "ID ресурса Google для использования в качестве шаблона" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Добавить Google Документ..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "Конфигурация шаблонов Документов Google" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Ошибка Документов Google!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" -"Проверьте ваши google настройки во вкладке " -"Пользователи/Пользователи/Синхронизация." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Настройки Документов Google" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Модель" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Настройки Документов Google" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "Шаблон имени Документа Google" diff --git a/addons/google_docs/i18n/sl.po b/addons/google_docs/i18n/sl.po deleted file mode 100644 index a93afe16703..00000000000 --- a/addons/google_docs/i18n/sl.po +++ /dev/null @@ -1,188 +0,0 @@ -# Slovenian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-01-26 12:19+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Slovenian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "Model" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "ir.attachment" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/sv.po b/addons/google_docs/i18n/sv.po deleted file mode 100644 index 24e7c63ea39..00000000000 --- a/addons/google_docs/i18n/sv.po +++ /dev/null @@ -1,188 +0,0 @@ -# Swedish translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-15 14:26+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Swedish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "Nyckelfel!" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "Lägg till Google-dokument..." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/tr.po b/addons/google_docs/i18n/tr.po deleted file mode 100644 index 349d71a96b8..00000000000 --- a/addons/google_docs/i18n/tr.po +++ /dev/null @@ -1,188 +0,0 @@ -# Turkish translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-04 14:07+0000\n" -"Last-Translator: FULL NAME \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: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "" - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/i18n/zh_CN.po b/addons/google_docs/i18n/zh_CN.po deleted file mode 100644 index 3ca3b5cadf9..00000000000 --- a/addons/google_docs/i18n/zh_CN.po +++ /dev/null @@ -1,197 +0,0 @@ -# Chinese (Simplified) translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-01-04 11:38+0000\n" -"Last-Translator: Roc Wu \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: 2013-03-16 05:53+0000\n" -"X-Generator: Launchpad (build 16532)\n" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Key Error!" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`" -msgstr "" -"网址如`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide" -"=id.p`,的演示文档(幻灯片) 其 ID 为 `presentation:123456789`" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`" -msgstr "" -"网址如 `https://docs.google.com/a/openerp.com/document/d/123456789/edit`的文本文档, " -"其 ID 为 `document:123456789`" - -#. module: google_docs -#: field:google.docs.config,gdocs_resource_id:0 -msgid "Google Resource ID to Use as Template" -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`" -msgstr "" -"网址如`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`的绘图文档, 其 " -"ID 为 `drawings:123456789`" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/xml/gdocs.xml:6 -#, python-format -msgid "Add Google Doc..." -msgstr "" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL:" -msgstr "这是位于Google端的模板文档的 ID. 你可以通过其网址找到它:" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_google_docs_config -msgid "Google Docs templates config" -msgstr "配置Google文档模板" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:25 -#, python-format -msgid "" -"The user google credentials are not set yet. Contact your administrator for " -"help." -msgstr "用户 google 用户授权尚未被设定. 联系你的管理员以获得帮助." - -#. module: google_docs -#: view:google.docs.config:0 -msgid "" -"for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`" -msgstr "" -"网址如 " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`的电" -"子表格文档, 其 ID 为 `spreadsheet:123456789`" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:129 -#, python-format -msgid "" -"Your resource id is not correct. You can find the id in the google docs URL." -msgstr "你的源 id 不正确. 你可以在 google 文档的网址中找到它." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Creating google docs may only be done by one at a time." -msgstr "一次只能生成一份google 文档." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#: code:addons/google_docs/google_docs.py:129 -#: code:addons/google_docs/google_docs.py:153 -#, python-format -msgid "Google Docs Error!" -msgstr "Google 文档错误!" - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:83 -#, python-format -msgid "Check your google configuration in Users/Users/Synchronization tab." -msgstr "在Users/Users/Synchronization 标签中检查你的google 配置." - -#. module: google_docs -#: model:ir.ui.menu,name:google_docs.menu_gdocs_config -msgid "Google Docs configuration" -msgstr "Google 文档配置" - -#. module: google_docs -#: model:ir.actions.act_window,name:google_docs.action_google_docs_users_config -#: model:ir.ui.menu,name:google_docs.menu_gdocs_model_config -msgid "Models configuration" -msgstr "模块配置" - -#. module: google_docs -#: field:google.docs.config,model_id:0 -msgid "Model" -msgstr "模块" - -#. module: google_docs -#. openerp-web -#: code:addons/google_docs/static/src/js/gdocs.js:28 -#, python-format -msgid "User Google credentials are not yet set." -msgstr "Google的用户证书尚未设定." - -#. module: google_docs -#: code:addons/google_docs/google_docs.py:167 -#, python-format -msgid "Your Google Doc Name Pattern's key does not found in object." -msgstr "" - -#. module: google_docs -#: help:google.docs.config,name_template:0 -msgid "" -"Choose how the new google docs will be named, on google side. Eg. " -"gdoc_%(field_name)s" -msgstr "选择在Google端如何命名新的google 文档. 如. gdoc_%(field_name)s" - -#. module: google_docs -#: view:google.docs.config:0 -msgid "Google Docs Configuration" -msgstr "Google 文档设置" - -#. module: google_docs -#: help:google.docs.config,gdocs_resource_id:0 -msgid "" -"\n" -"This is the id of the template document, on google side. You can find it " -"thanks to its URL: \n" -"*for a text document with url like " -"`https://docs.google.com/a/openerp.com/document/d/123456789/edit`, the ID is " -"`document:123456789`\n" -"*for a spreadsheet document with url like " -"`https://docs.google.com/a/openerp.com/spreadsheet/ccc?key=123456789#gid=0`, " -"the ID is `spreadsheet:123456789`\n" -"*for a presentation (slide show) document with url like " -"`https://docs.google.com/a/openerp.com/presentation/d/123456789/edit#slide=id" -".p`, the ID is `presentation:123456789`\n" -"*for a drawing document with url like " -"`https://docs.google.com/a/openerp.com/drawings/d/123456789/edit`, the ID is " -"`drawings:123456789`\n" -"...\n" -msgstr "" - -#. module: google_docs -#: model:ir.model,name:google_docs.model_ir_attachment -msgid "ir.attachment" -msgstr "" - -#. module: google_docs -#: field:google.docs.config,name_template:0 -msgid "Google Doc Name Pattern" -msgstr "" diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml deleted file mode 100644 index e6c4223735f..00000000000 --- a/addons/google_docs/res_config_user_view.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - google_docs.config.tree - google.docs.config - - - - - - - - - - google_docs.config.form - google.docs.config - -
- - - -
-
-
- - - Models configuration - google.docs.config - ir.actions.act_window - form - - - - -
-
diff --git a/addons/google_docs/security/ir.model.access.csv b/addons/google_docs/security/ir.model.access.csv deleted file mode 100644 index 9393d586fb8..00000000000 --- a/addons/google_docs/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_google_docs,google.docs.config,model_google_docs_config,,1,0,0,0 -access_google_docs,google.docs.config,model_google_docs_config,base.group_system,1,1,1,1 \ No newline at end of file diff --git a/addons/google_docs/static/src/js/gdocs.js b/addons/google_docs/static/src/js/gdocs.js deleted file mode 100644 index 1cc511ef4d9..00000000000 --- a/addons/google_docs/static/src/js/gdocs.js +++ /dev/null @@ -1,40 +0,0 @@ -openerp.google_docs = function(instance, m) { -var _t = instance.web._t, - QWeb = instance.web.qweb; - - instance.web.Sidebar.include({ - redraw: function() { - var self = this; - this._super.apply(this, arguments); - self.$el.find('.oe_sidebar_add_attachment').after(QWeb.render('AddGoogleDocumentItem', {widget: self})) - self.$el.find('.oe_sidebar_add_google_doc').on('click', function (e) { - self.on_google_doc(); - }); - }, - on_google_doc: function() { - var self = this; - var view = self.getParent(); - var ids = ( view.fields_view.type != "form" )? view.groups.get_selection().ids : [ view.datarecord.id ]; - if( !_.isEmpty(ids) ){ - view.sidebar_eval_context().done(function (context) { - var ds = new instance.web.DataSet(this, 'ir.attachment', context); - ds.call('google_doc_get', [view.dataset.model, ids, context]).done(function(r) { - if (r == 'False') { - var params = { - error: response, - message: _t("The user google credentials are not set yet. Contact your administrator for help.") - } - $(openerp.web.qweb.render("DialogWarning", params)).dialog({ - title: _t("User Google credentials are not yet set."), - modal: true, - }); - } - }).done(function(r){ - window.open(r.url,"_blank"); - view.reload(); - }); - }); - } - } - }); -}; diff --git a/addons/google_drive/__init__.py b/addons/google_drive/__init__.py new file mode 100644 index 00000000000..e1cf2d00f3c --- /dev/null +++ b/addons/google_drive/__init__.py @@ -0,0 +1 @@ +import google_drive diff --git a/addons/google_docs/__openerp__.py b/addons/google_drive/__openerp__.py similarity index 63% rename from addons/google_docs/__openerp__.py rename to addons/google_drive/__openerp__.py index 2d064fdb8a9..9e6c73d2649 100644 --- a/addons/google_docs/__openerp__.py +++ b/addons/google_drive/__openerp__.py @@ -20,22 +20,31 @@ ############################################################################## { - 'name': 'Google Docs integration', + 'name': 'Google Drive™ integration', 'version': '0.2', 'author': 'OpenERP SA', 'website': 'http://openerp.com', 'category': 'Tools', 'installable': True, 'auto_install': False, - 'js': ['static/src/js/gdocs.js'], - 'qweb': ['static/src/xml/gdocs.xml'], + 'js': [ + 'static/lib/gapi/client.js', + 'static/src/js/gdrive.js', + ], 'data': [ 'security/ir.model.access.csv', - 'res_config_user_view.xml' + 'res_config_user_view.xml', + 'google_drive_data.xml' ], - 'depends': ['google_base_account','document'], + 'demo': [ + 'google_drive_demo.xml' + ], + 'depends': ['base_setup', 'google_base_account'], 'description': """ -Module to attach a google document to any model. -================================================ +Integrate google document to OpenERP record. +============================================ + +This module allows you to integrate google documents to any of your OpenERP record quickly and easily using OAuth 2.0 for Installed Applications, +You can configure your google Authorization Code from Settings > Configuration > General Settings by clicking on "Generate Google Authorization Code" """ } diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py new file mode 100644 index 00000000000..1dc6b25f27c --- /dev/null +++ b/addons/google_drive/google_drive.py @@ -0,0 +1,211 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2012 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 logging + +from openerp import SUPERUSER_ID +from openerp.osv import fields, osv +from openerp.tools.translate import _ + +import urllib +import urllib2 +import json +import re + +_logger = logging.getLogger(__name__) + + +class config(osv.osv): + _name = 'google.drive.config' + _description = "Google Drive templates config" + + def get_google_drive_url(self, cr, uid, config_id, res_id, template_id, context=None): + config = self.browse(cr, SUPERUSER_ID, config_id, context=context) + model = config.model_id + filter_name = config.filter_id and config.filter_id.name or False + record = self.pool.get(model.model).read(cr, uid, res_id, [], context=context) + record.update({'model': model.name, 'filter': filter_name}) + name_gdocs = config.name_template + try: + name_gdocs = name_gdocs % record + except: + raise osv.except_osv(_('Key Error!'), _("At least one key cannot be found in your Google Drive name pattern")) + + attach_pool = self.pool.get("ir.attachment") + attach_ids = attach_pool.search(cr, uid, [('res_model', '=', model.model), ('name', '=', name_gdocs), ('res_id', '=', res_id)]) + url = False + if attach_ids: + attachment = attach_pool.browse(cr, uid, attach_ids[0], context) + url = attachment.url + else: + url = self.copy_doc(cr, uid, res_id, template_id, name_gdocs, model.model, context) + return url + + def copy_doc(self, cr, uid, res_id, template_id, name_gdocs, res_model, context=None): + ir_config = self.pool['ir.config_parameter'] + google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token') + if not google_drive_refresh_token: + raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context) + google_drive_client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_id') + google_drive_client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_secret') + google_web_base_url = ir_config.get_param(cr, SUPERUSER_ID, 'web.base.url') + + #For Getting New Access Token With help of old Refresh Token + headers = {"Content-type": "application/x-www-form-urlencoded", "Accept-Encoding": "gzip, deflate"} + data = dict(client_id=google_drive_client_id, + refresh_token=google_drive_refresh_token, + client_secret=google_drive_client_secret, + grant_type="refresh_token") + + data = urllib.urlencode(data) + try: + req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers) + content = urllib2.urlopen(req).read() + except urllib2.HTTPError: + raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context) + content = json.loads(content) + + # Copy template in to drive with help of new access token + if 'access_token' in content: + request_url = "https://www.googleapis.com/drive/v2/files/%s?fields=parents/id&access_token=%s" % (template_id, content['access_token']) + try: + req = urllib2.Request(request_url, None, headers) + parents = urllib2.urlopen(req).read() + except urllib2.HTTPError: + raise self.pool.get('res.config.settings').get_config_warning(cr, _("The Google Template cannot be found. Maybe it has been deleted."), context=context) + parents_dict = json.loads(parents) + + record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model) + data = {"title": name_gdocs, "description": record_url, "parents": parents_dict['parents']} + request_url = "https://www.googleapis.com/drive/v2/files/%s/copy?access_token=%s" % (template_id, content['access_token']) + headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} + data_json = json.dumps(data) + # resp, content = Http().request(request_url, "POST", data_json, headers) + req = urllib2.Request(request_url, data_json, headers) + content = urllib2.urlopen(req).read() + content = json.loads(content) + res = False + if 'alternateLink' in content.keys(): + attach_pool = self.pool.get("ir.attachment") + attach_vals = {'res_model': res_model, 'name': name_gdocs, 'res_id': res_id, 'type': 'url', 'url': content['alternateLink']} + attach_pool.create(cr, uid, attach_vals) + res = content['alternateLink'] + return res + + def get_google_drive_config(self, cr, uid, res_model, res_id, context=None): + ''' + Function called by the js, when no google doc are yet associated with a record, with the aim to create one. It + will first seek for a google.docs.config associated with the model `res_model` to find out what's the template + of google doc to copy (this is usefull if you want to start with a non-empty document, a type or a name + different than the default values). If no config is associated with the `res_model`, then a blank text document + with a default name is created. + :param res_model: the object for which the google doc is created + :param ids: the list of ids of the objects for which the google doc is created. This list is supposed to have + a length of 1 element only (batch processing is not supported in the code, though nothing really prevent it) + :return: the config id and config name + ''' + if not res_id: + raise osv.except_osv(_('Google Drive Error!'), _("Creating google drive may only be done by one at a time.")) + # check if a model is configured with a template + config_ids = self.search(cr, uid, [('model_id', '=', res_model)], context=context) + configs = [] + for config in self.browse(cr, uid, config_ids, context=context): + if config.filter_id: + if (config.filter_id.user_id and config.filter_id.user_id.id != uid): + #Private + continue + domain = [('id', 'in', [res_id])] + eval(config.filter_id.domain) + local_context = context and context.copy() or {} + local_context.update(eval(config.filter_id.context)) + google_doc_configs = self.pool.get(config.filter_id.model_id).search(cr, uid, domain, context=local_context) + if google_doc_configs: + configs.append({'id': config.id, 'name': config.name}) + else: + configs.append({'id': config.id, 'name': config.name}) + return configs + + def _resource_get(self, cr, uid, ids, name, arg, context=None): + result = {} + for data in self.browse(cr, uid, ids, context): + mo = re.search("(key=|/d/)([A-Za-z0-9-_]+)", data.google_drive_template_url) + if mo: + result[data.id] = mo.group(2) + else: + raise osv.except_osv(_('Incorrect URL!'), _("Please enter a valid Google Document URL.")) + return result + + def _client_id_get(self, cr, uid, ids, name, arg, context=None): + result = {} + client_id = self.pool['ir.config_parameter'].get_param(cr, SUPERUSER_ID, 'google_drive_client_id') + for config_id in ids: + result[config_id] = client_id + return result + + _columns = { + 'name': fields.char('Template Name', required=True, size=1024), + 'model_id': fields.many2one('ir.model', 'Model', ondelete='set null', required=True), + 'model': fields.related('model_id', 'model', type='char', string='Model', readonly=True), + 'filter_id': fields.many2one('ir.filters', 'Filter', domain="[('model_id', '=', model)]"), + 'google_drive_template_url': fields.char('Template URL', required=True, size=1024), + 'google_drive_resource_id': fields.function(_resource_get, type="char", string='Resource Id'), + 'google_drive_client_id': fields.function(_client_id_get, type="char", string='Google Client '), + 'name_template': fields.char('Google Drive Name Pattern', size=64, help='Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s', required=True), + } + + def onchange_model_id(self, cr, uid, ids, model_id, context=None): + res = {} + if model_id: + model = self.pool['ir.model'].browse(cr, uid, model_id, context=context) + res['value'] = {'model': model.model} + else: + res['value'] = {'filter_id': False, 'model': False} + return res + + _defaults = { + 'name_template': 'Document %(name)s', + } + + def _check_model_id(self, cr, uid, ids, context=None): + config_id = self.browse(cr, uid, ids[0], context=context) + if config_id.filter_id and config_id.model_id.model != config_id.filter_id.model_id: + return False + return True + + _constraints = [ + (_check_model_id, 'Model of selected filter is not matching with model of current template.', ['model_id', 'filter_id']), + ] + +config() + + +class base_config_settings(osv.osv): + _inherit = "base.config.settings" + + _columns = { + 'google_drive_authorization_code': fields.char('Authorization Code', size=124), + 'google_drive_uri': fields.char('URI', readonly=True, help="The URL to generate the authorization code from Google"), + } + _defaults = { + 'google_drive_uri': lambda s, cr, uid, c: s.pool['google.service']._get_google_token_uri(cr, uid, 'drive', context=c), + } + + def set_google_authorization_code(self, cr, uid, ids, context=None): + config = self.browse(cr, uid, ids[0], context) + refresh_token = self.pool['google.service'].generate_refresh_token(cr, uid, 'drive', config.google_drive_authorization_code, context=context) + self.pool['ir.config_parameter'].set_param(cr, uid, 'google_drive_refresh_token', refresh_token) diff --git a/addons/google_drive/google_drive_data.xml b/addons/google_drive/google_drive_data.xml new file mode 100644 index 00000000000..c9266547969 --- /dev/null +++ b/addons/google_drive/google_drive_data.xml @@ -0,0 +1,16 @@ + + + + + + google_drive_client_id + 39623646228-eg3ggo3mk6o40m7rguobi3rkl9frh4tb.apps.googleusercontent.com + + + + google_drive_client_secret + Ul-PtmnSWs3euWs20fdono0e + + + + \ No newline at end of file diff --git a/addons/google_drive/google_drive_demo.xml b/addons/google_drive/google_drive_demo.xml new file mode 100644 index 00000000000..ebe73f40ec2 --- /dev/null +++ b/addons/google_drive/google_drive_demo.xml @@ -0,0 +1,24 @@ + + + + + + + Customer + res.partner + [['customer', '=', 1]] + + + + + + Partner Review + + + https://docs.google.com/spreadsheet/ccc?key=0Ah2qnrLAoZmUdGRvdVdmS1VoSDctWk1kd18taGZ4ckE#gid=0 + Partner Review %(name)s + + + + + diff --git a/addons/google_drive/i18n/ar.po b/addons/google_drive/i18n/ar.po new file mode 100644 index 00000000000..119cd48268c --- /dev/null +++ b/addons/google_drive/i18n/ar.po @@ -0,0 +1,259 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-02-25 21:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/cs.po b/addons/google_drive/i18n/cs.po new file mode 100644 index 00000000000..8d076ddc8e4 --- /dev/null +++ b/addons/google_drive/i18n/cs.po @@ -0,0 +1,259 @@ +# Czech translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-03-31 16:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/de.po b/addons/google_drive/i18n/de.po new file mode 100644 index 00000000000..95e051fea35 --- /dev/null +++ b/addons/google_drive/i18n/de.po @@ -0,0 +1,260 @@ +# German translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-10 11:38+0000\n" +"Last-Translator: Thorsten Vocks (OpenBig.org) \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: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Fehler im 'Key' !" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modul" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/es.po b/addons/google_drive/i18n/es.po new file mode 100644 index 00000000000..65d28726ba4 --- /dev/null +++ b/addons/google_drive/i18n/es.po @@ -0,0 +1,259 @@ +# Spanish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-12 12:51+0000\n" +"Last-Translator: Pedro Manuel Baeza \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "¡Error de clave!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modelo" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/fr.po b/addons/google_drive/i18n/fr.po new file mode 100644 index 00000000000..c32125d1989 --- /dev/null +++ b/addons/google_drive/i18n/fr.po @@ -0,0 +1,260 @@ +# French translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-21 13:47+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Erreur de clé!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modèles" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/google_drive.pot b/addons/google_drive/i18n/google_drive.pot new file mode 100644 index 00000000000..4472e9c0ed1 --- /dev/null +++ b/addons/google_drive/i18n/google_drive.pot @@ -0,0 +1,227 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * google_drive +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 8.0alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-06-27 16:03+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "The name of the attached document can use fixed or variable data. To distinguish between documents in\n" +" Google Drive, use fixed words and fields. For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "- If filter is not specified, link of google document will appear in \"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of OpenERP. If you have really specific documents you want your collaborator fill in, e.g. Use a spreadsheet to control the quality of your product or review the delivery checklist for each order in a foreign country, ... Its very easy to manage them, link them to OpenERP and use them to collaborate with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "- Go to the OpenERP document you want to filter. For instance, go to Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "- In this \"Search\" view, select the option \"Save Current Filter\", enter the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "- If you select \"Share with all users\", link of google document in \"More\" options will appear for all users in opportunities of Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "- If you don't select \"Share with all users\", link of google document in \"More\" options will not appear for other users in opportunities of Sales Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcua4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + diff --git a/addons/google_drive/i18n/hr.po b/addons/google_drive/i18n/hr.po new file mode 100644 index 00000000000..be76be7ef99 --- /dev/null +++ b/addons/google_drive/i18n/hr.po @@ -0,0 +1,259 @@ +# Croatian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-09 20:25+0000\n" +"Last-Translator: Goran Kliska \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Model" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/hu.po b/addons/google_drive/i18n/hu.po new file mode 100644 index 00000000000..5ff6354f18b --- /dev/null +++ b/addons/google_drive/i18n/hu.po @@ -0,0 +1,259 @@ +# Hungarian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-03-02 09:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Kulcs hiba!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modell" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/it.po b/addons/google_drive/i18n/it.po new file mode 100644 index 00000000000..0dc867b43ad --- /dev/null +++ b/addons/google_drive/i18n/it.po @@ -0,0 +1,259 @@ +# Italian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-18 22:11+0000\n" +"Last-Translator: Sergio Corato \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Errore Chiave!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modello" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/ln.po b/addons/google_drive/i18n/ln.po new file mode 100644 index 00000000000..100033037fc --- /dev/null +++ b/addons/google_drive/i18n/ln.po @@ -0,0 +1,259 @@ +# Lingala translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-06-05 13:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Lingala \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/mk.po b/addons/google_drive/i18n/mk.po new file mode 100644 index 00000000000..d2f329517c1 --- /dev/null +++ b/addons/google_drive/i18n/mk.po @@ -0,0 +1,259 @@ +# Macedonian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-03-08 14:39+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Macedonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Грешка во клуч!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Модел" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/mn.po b/addons/google_drive/i18n/mn.po new file mode 100644 index 00000000000..060c1e7b596 --- /dev/null +++ b/addons/google_drive/i18n/mn.po @@ -0,0 +1,259 @@ +# Mongolian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-02-19 02:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Модел" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/nl.po b/addons/google_drive/i18n/nl.po new file mode 100644 index 00000000000..771e7b754d5 --- /dev/null +++ b/addons/google_drive/i18n/nl.po @@ -0,0 +1,259 @@ +# Dutch translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-01 16:42+0000\n" +"Last-Translator: Erwin van der Ploeg (Endian Solutions) \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Key fout!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Model" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/pl.po b/addons/google_drive/i18n/pl.po new file mode 100644 index 00000000000..4c7ec91b703 --- /dev/null +++ b/addons/google_drive/i18n/pl.po @@ -0,0 +1,259 @@ +# Polish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-16 11:28+0000\n" +"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Błąd klucza" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/pt.po b/addons/google_drive/i18n/pt.po new file mode 100644 index 00000000000..11edb4ffc2a --- /dev/null +++ b/addons/google_drive/i18n/pt.po @@ -0,0 +1,259 @@ +# Portuguese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-10 17:49+0000\n" +"Last-Translator: Andrei Talpa (multibase.pt) \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modelo" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/pt_BR.po b/addons/google_drive/i18n/pt_BR.po new file mode 100644 index 00000000000..574eb5abc0c --- /dev/null +++ b/addons/google_drive/i18n/pt_BR.po @@ -0,0 +1,260 @@ +# Brazilian Portuguese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2012-12-07 22:47+0000\n" +"Last-Translator: Fábio Martinelli - http://zupy.com.br " +"\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: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Erro de Chave!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Modelo" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/ro.po b/addons/google_drive/i18n/ro.po new file mode 100644 index 00000000000..8f4d9a1169f --- /dev/null +++ b/addons/google_drive/i18n/ro.po @@ -0,0 +1,259 @@ +# Romanian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-01-27 09:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Eroare Cheie!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Model" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/ru.po b/addons/google_drive/i18n/ru.po new file mode 100644 index 00000000000..9579b8a93c5 --- /dev/null +++ b/addons/google_drive/i18n/ru.po @@ -0,0 +1,259 @@ +# Russian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-03-01 11:29+0000\n" +"Last-Translator: Эдуард \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: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Ошибка ключа!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Модель" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/sl.po b/addons/google_drive/i18n/sl.po new file mode 100644 index 00000000000..eb7ef7ed79c --- /dev/null +++ b/addons/google_drive/i18n/sl.po @@ -0,0 +1,259 @@ +# Slovenian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-01-26 12:19+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Model" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/sv.po b/addons/google_drive/i18n/sv.po new file mode 100644 index 00000000000..c0435c8bd9e --- /dev/null +++ b/addons/google_drive/i18n/sv.po @@ -0,0 +1,259 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-02-15 14:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Nyckelfel!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/tr.po b/addons/google_drive/i18n/tr.po new file mode 100644 index 00000000000..a3e3b6b791b --- /dev/null +++ b/addons/google_drive/i18n/tr.po @@ -0,0 +1,259 @@ +# Turkish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-02-04 14:07+0000\n" +"Last-Translator: FULL NAME \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: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "Anahtar Hatası!" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "Model" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/i18n/zh_CN.po b/addons/google_drive/i18n/zh_CN.po new file mode 100644 index 00000000000..f7171c9225e --- /dev/null +++ b/addons/google_drive/i18n/zh_CN.po @@ -0,0 +1,259 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-27 16:03+0000\n" +"PO-Revision-Date: 2013-06-29 04:39+0000\n" +"Last-Translator: David.Xu \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: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: google_drive +#: model:ir.ui.menu,name:google_drive.menu_google_drive_config +msgid "Google Drive configuration" +msgstr "Google Drive配置" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "Key Error!" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"The name of the attached document can use fixed or variable data. To " +"distinguish between documents in\n" +" Google Drive, use fixed words and fields. " +"For instance, in the example above, if you wrote Agrolait_%(name)s_Sales\n" +" in the Google Drive name field, the document " +"in your Google Drive and in OpenERP attachment will be named\n" +" 'Agrolait_SO0001_Sales'." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If filter is not specified, link of google document will appear in " +"\"More\" option for all users for all opportunities." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "To create a new filter:" +msgstr "创建新过滤器" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_base_config_settings +msgid "base.config.settings" +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config +msgid "" +"

\n" +" Click to add a new template.\n" +"

\n" +"

\n" +" Link your own google drive templates to any record of " +"OpenERP. If you have really specific documents you want your collaborator " +"fill in, e.g. Use a spreadsheet to control the quality of your product or " +"review the delivery checklist for each order in a foreign country, ... Its " +"very easy to manage them, link them to OpenERP and use them to collaborate " +"with your employees.\n" +"

\n" +" " +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Incorrect URL!" +msgstr "错误的URL" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "Configure your templates" +msgstr "配置你的模版" + +#. module: google_drive +#: help:google.drive.config,name_template:0 +msgid "" +"Choose how the new google drive will be named, on google side. Eg. " +"gdoc_%(field_name)s" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- Go to the OpenERP document you want to filter. For instance, go to " +"Opportunities and search on Sales Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- In this \"Search\" view, select the option \"Save Current Filter\", enter " +"the name (Ex: Sales Department)" +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you select \"Share with all users\", link of google document in " +"\"More\" options will appear for all users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"- If you don't select \"Share with all users\", link of google document in " +"\"More\" options will not appear for other users in opportunities of Sales " +"Department." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:48 +#, python-format +msgid "At least one key cannot be found in your Google Drive name pattern" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:150 +#, python-format +msgid "Please enter a valid Google Document URL." +msgstr "请输入一个有效的Google文档URL" + +#. module: google_drive +#: field:google.drive.config,google_drive_client_id:0 +msgid "Google Client " +msgstr "" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,filter_id:0 +msgid "Filter" +msgstr "过滤器" + +#. module: google_drive +#: field:google.drive.config,name_template:0 +msgid "Google Drive Name Pattern" +msgstr "" + +#. module: google_drive +#: help:base.config.settings,google_drive_uri:0 +msgid "The URL to generate the authorization code from Google" +msgstr "" + +#. module: google_drive +#: model:ir.filters,name:google_drive.filter_partner +msgid "Customer" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_resource_id:0 +msgid "Resource Id" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:91 +#, python-format +msgid "The Google Template cannot be found. Maybe it has been deleted." +msgstr "" + +#. module: google_drive +#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config +#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config +msgid "Google Drive Templates" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:81 +#, python-format +msgid "" +"Something went wrong during the token generation. Please request again an " +"authorization code in %(menu:base_setup.menu_general_configuration)s." +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Google Drive Error!" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_uri:0 +msgid "URI" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:124 +#, python-format +msgid "Creating google drive may only be done by one at a time." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,model:0 +#: field:google.drive.config,model_id:0 +msgid "Model" +msgstr "模块" + +#. module: google_drive +#: view:google.drive.config:0 +msgid "Google Drive Configuration" +msgstr "" + +#. module: google_drive +#: field:google.drive.config,name:0 +msgid "Template Name" +msgstr "模板名称" + +#. module: google_drive +#: constraint:google.drive.config:0 +msgid "" +"Model of selected filter is not matching with model of current template." +msgstr "" + +#. module: google_drive +#: field:google.drive.config,google_drive_template_url:0 +msgid "Template URL" +msgstr "" + +#. module: google_drive +#: view:base.config.settings:0 +msgid "and paste it here" +msgstr "" + +#. module: google_drive +#: field:base.config.settings,google_drive_authorization_code:0 +msgid "Authorization Code" +msgstr "授权码" + +#. module: google_drive +#: model:ir.model,name:google_drive.model_google_drive_config +msgid "Google Drive templates config" +msgstr "" + +#. module: google_drive +#: code:addons/google_drive/google_drive.py:64 +#, python-format +msgid "" +"You haven't configured 'Authorization Code' generated from google, Please " +"generate and configure it in %(menu:base_setup.menu_general_configuration)s." +msgstr "" diff --git a/addons/google_drive/res_config_user_view.xml b/addons/google_drive/res_config_user_view.xml new file mode 100644 index 00000000000..728ef03c5dd --- /dev/null +++ b/addons/google_drive/res_config_user_view.xml @@ -0,0 +1,93 @@ + + + + + + + + google_drive.config.tree + google.drive.config + + + + + + + + + + google_drive.config.form + google.drive.config + +
+ + + + + + +
+
+ + + Google Drive Templates + google.drive.config + ir.actions.act_window + form + + +

+ Click to add a new template. +

+

+ Link your own google drive templates to any record of OpenERP. If you have really specific documents you want your collaborator fill in, e.g. Use a spreadsheet to control the quality of your product or review the delivery checklist for each order in a foreign country, ... Its very easy to manage them, link them to OpenERP and use them to collaborate with your employees. +

+
+
+ + + General Settings + base.config.settings + + + +
+
+ + and paste it here + +
+
+
+
+
+ + + +
+
diff --git a/addons/google_drive/security/ir.model.access.csv b/addons/google_drive/security/ir.model.access.csv new file mode 100644 index 00000000000..ae98cb36976 --- /dev/null +++ b/addons/google_drive/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_google_drive_all,google.drive.config,model_google_drive_config,,1,0,0,0 +access_google_drive,google.drive.config,model_google_drive_config,base.group_system,1,1,1,1 \ No newline at end of file diff --git a/addons/google_drive/static/description/icon.png b/addons/google_drive/static/description/icon.png new file mode 100644 index 00000000000..3989ab57b30 Binary files /dev/null and b/addons/google_drive/static/description/icon.png differ diff --git a/addons/google_drive/static/lib/gapi/client.js b/addons/google_drive/static/lib/gapi/client.js new file mode 100644 index 00000000000..7f40ec55ef9 --- /dev/null +++ b/addons/google_drive/static/lib/gapi/client.js @@ -0,0 +1,7 @@ +var gapi=window.gapi=window.gapi||{};gapi._bs=new Date().getTime();(function(){var f=null,g=encodeURIComponent,k=window,m=decodeURIComponent,n="push",r="test",t="shift",u="replace",y="length",B="split",C="join";var D=k,E=document,aa=D.location,ba=function(){},ca=/\[native code\]/,G=function(a,b,c){return a[b]=a[b]||c},da=function(a){for(var b=0;bda.call(b,e)&&c[n](e)}return c},sa=function(a){"loading"!=E.readyState?Z(a):E.write("<"+X+' src="'+encodeURI(a)+'">")},Z=function(a){var b=E.createElement(X);b.setAttribute("src",a);b.async="true";(a=E.getElementsByTagName(X)[0])?a.parentNode.insertBefore(b,a):(E.head||E.body||E.documentElement).appendChild(b)},ta=function(a,b){var c=b&&b._c;if(c)for(var d=0;d', + config_id: res.id, + res_id: res_id, + res_model: view.dataset.model, + callback: self.on_google_doc, + classname: 'oe_share_gdoc' + }, + ]); + }) + } + }); + }); + } + }, + + fetch: function (model, fields, domain, ctx) { + return new instance.web.Model(model).query(fields).filter(domain).context(ctx).all() + }, + + on_google_doc: function (doc_item) { + var self = this; + self.config = doc_item; + var loaded = self.fetch('google.drive.config', ['google_drive_resource_id', 'google_drive_client_id'], [['id', '=', doc_item.config_id]]) + .then(function (configs) { + var ds = new instance.web.DataSet(self, 'google.drive.config'); + ds.call('get_google_drive_url', [doc_item.config_id, doc_item.res_id,configs[0].google_drive_resource_id]).done(function (url) { + if (url){ + window.open(url, '_blank'); + } + }); + }); + }, + + }); +}; \ No newline at end of file diff --git a/addons/google_docs/static/src/xml/gdocs.xml b/addons/google_drive/static/src/xml/gdocs.xml similarity index 100% rename from addons/google_docs/static/src/xml/gdocs.xml rename to addons/google_drive/static/src/xml/gdocs.xml diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 19a6d70839f..eb1bbe451b4 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -348,12 +348,10 @@

- + - - diff --git a/addons/hr/html/crm_game_01.png b/addons/hr/static/description/crm_game_01.png similarity index 100% rename from addons/hr/html/crm_game_01.png rename to addons/hr/static/description/crm_game_01.png diff --git a/addons/hr/html/crm_game_02.png b/addons/hr/static/description/crm_game_02.png similarity index 100% rename from addons/hr/html/crm_game_02.png rename to addons/hr/static/description/crm_game_02.png diff --git a/addons/hr/html/crm_game_03.png b/addons/hr/static/description/crm_game_03.png similarity index 100% rename from addons/hr/html/crm_game_03.png rename to addons/hr/static/description/crm_game_03.png diff --git a/addons/hr/html/hr_appraisal.png b/addons/hr/static/description/hr_appraisal.png similarity index 100% rename from addons/hr/html/hr_appraisal.png rename to addons/hr/static/description/hr_appraisal.png diff --git a/addons/hr/html/hr_employee.png b/addons/hr/static/description/hr_employee.png similarity index 100% rename from addons/hr/html/hr_employee.png rename to addons/hr/static/description/hr_employee.png diff --git a/addons/hr/html/hr_expense.png b/addons/hr/static/description/hr_expense.png similarity index 100% rename from addons/hr/html/hr_expense.png rename to addons/hr/static/description/hr_expense.png diff --git a/addons/hr/html/hr_illu_01.png b/addons/hr/static/description/hr_illu_01.png similarity index 100% rename from addons/hr/html/hr_illu_01.png rename to addons/hr/static/description/hr_illu_01.png diff --git a/addons/hr/html/hr_illu_02.png b/addons/hr/static/description/hr_illu_02.png similarity index 100% rename from addons/hr/html/hr_illu_02.png rename to addons/hr/static/description/hr_illu_02.png diff --git a/addons/hr/html/hr_kanban.png b/addons/hr/static/description/hr_kanban.png similarity index 100% rename from addons/hr/html/hr_kanban.png rename to addons/hr/static/description/hr_kanban.png diff --git a/addons/hr/html/hr_recruitment.png b/addons/hr/static/description/hr_recruitment.png similarity index 100% rename from addons/hr/html/hr_recruitment.png rename to addons/hr/static/description/hr_recruitment.png diff --git a/addons/hr/html/hr_social.png b/addons/hr/static/description/hr_social.png similarity index 100% rename from addons/hr/html/hr_social.png rename to addons/hr/static/description/hr_social.png diff --git a/addons/hr/html/hr_timesheet.png b/addons/hr/static/description/hr_timesheet.png similarity index 100% rename from addons/hr/html/hr_timesheet.png rename to addons/hr/static/description/hr_timesheet.png diff --git a/addons/hr/static/src/img/icon.png b/addons/hr/static/description/icon.png similarity index 100% rename from addons/hr/static/src/img/icon.png rename to addons/hr/static/description/icon.png diff --git a/addons/hr/html/index.html b/addons/hr/static/description/index.html similarity index 98% rename from addons/hr/html/index.html rename to addons/hr/static/description/index.html index 0bc3db084a4..f97cb462fe3 100644 --- a/addons/hr/html/index.html +++ b/addons/hr/static/description/index.html @@ -17,7 +17,7 @@ Get all your HR operations managed easily: knowledge sharing, recruitments, appr Each need is provided by a specific app that you activate on demand.

diff --git a/addons/hr_evaluation/static/src/img/icon.png b/addons/hr_evaluation/static/description/icon.png similarity index 100% rename from addons/hr_evaluation/static/src/img/icon.png rename to addons/hr_evaluation/static/description/icon.png diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 8d707baa50e..5d5be0eec97 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -65,9 +65,9 @@ class hr_expense_expense(osv.osv): _order = "id desc" _track = { 'state': { - 'hr_expense.mt_expense_approved': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'accepted', - 'hr_expense.mt_expense_refused': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancelled', - 'hr_expense.mt_expense_confirmed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'confirm', + 'hr_expense.mt_expense_approved': lambda self, cr, uid, obj, ctx=None: obj.state == 'accepted', + 'hr_expense.mt_expense_refused': lambda self, cr, uid, obj, ctx=None: obj.state == 'cancelled', + 'hr_expense.mt_expense_confirmed': lambda self, cr, uid, obj, ctx=None: obj.state == 'confirm', }, } diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index a383f72e2ab..0d9e2a247fd 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -86,7 +86,7 @@
- +
diff --git a/addons/hr_expense/static/src/img/icon.png b/addons/hr_expense/static/description/icon.png similarity index 100% rename from addons/hr_expense/static/src/img/icon.png rename to addons/hr_expense/static/description/icon.png diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 0eb3c0cbf16..f2be4844d27 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -110,9 +110,9 @@ class hr_holidays(osv.osv): _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { 'state': { - 'hr_holidays.mt_holidays_approved': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'validate', - 'hr_holidays.mt_holidays_refused': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'refuse', - 'hr_holidays.mt_holidays_confirmed': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'confirm', + 'hr_holidays.mt_holidays_approved': lambda self, cr, uid, obj, ctx=None: obj.state == 'validate', + 'hr_holidays.mt_holidays_refused': lambda self, cr, uid, obj, ctx=None: obj.state == 'refuse', + 'hr_holidays.mt_holidays_confirmed': lambda self, cr, uid, obj, ctx=None: obj.state == 'confirm', }, } diff --git a/addons/hr_holidays/static/src/img/icon.png b/addons/hr_holidays/static/description/icon.png similarity index 100% rename from addons/hr_holidays/static/src/img/icon.png rename to addons/hr_holidays/static/description/icon.png diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml index ccd87ba2616..a856bcdfdd4 100644 --- a/addons/hr_payroll/hr_payroll_view.xml +++ b/addons/hr_payroll/hr_payroll_view.xml @@ -322,7 +322,7 @@ - + diff --git a/addons/hr_payroll/static/src/img/icon.png b/addons/hr_payroll/static/description/icon.png similarity index 100% rename from addons/hr_payroll/static/src/img/icon.png rename to addons/hr_payroll/static/description/icon.png diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index e83c546af04..23eaef1b886 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -47,7 +47,6 @@ You can define the different phases of interviews and easily rate the applicant 'fetchmail', ], 'data': [ - 'wizard/hr_recruitment_employee_hired.xml', 'wizard/hr_recruitment_create_partner_job_view.xml', 'hr_recruitment_view.xml', 'hr_recruitment_menu.xml', diff --git a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml index 79e09937705..2bec80858a5 100644 --- a/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml +++ b/addons/hr_recruitment/board_hr_recruitment_statistical_view.xml @@ -22,7 +22,7 @@ hr.applicant form tree,form - [('state','in',('draft','open'))] + [('stage_id.fold', '!=', True)] diff --git a/addons/hr_recruitment/doc/changelog.rst b/addons/hr_recruitment/doc/changelog.rst new file mode 100644 index 00000000000..404b94ee6d1 --- /dev/null +++ b/addons/hr_recruitment/doc/changelog.rst @@ -0,0 +1,16 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- Stage/state update + + - ``hr.applicant``: removed inheritance from ``base_stage`` class and removed + ``state`` field. Added ``date_last_stage_update`` field holding last stage_id + modification. Removed ``date`` field not used anywhere. Updated reports. + - ``hr.recruitment.stage``: removed ``state`` field. + +- Removed ``hired.employee`` wizard. diff --git a/addons/hr_recruitment/doc/index.rst b/addons/hr_recruitment/doc/index.rst new file mode 100644 index 00000000000..d9e83fc9c10 --- /dev/null +++ b/addons/hr_recruitment/doc/index.rst @@ -0,0 +1,22 @@ +===================== +HR Recruitment DevDoc +===================== + +Hr Recruitment module documentation +=================================== + +Documentation topics +'''''''''''''''''''' + +.. toctree:: + :maxdepth: 1 + + stage_status.rst + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/hr_recruitment/doc/stage_status.rst b/addons/hr_recruitment/doc/stage_status.rst new file mode 100644 index 00000000000..111c43db250 --- /dev/null +++ b/addons/hr_recruitment/doc/stage_status.rst @@ -0,0 +1,54 @@ +.. _stage_status: + +Stage and Status +================ + +.. versionchanged:: 8.0 saas-2 state/stage cleaning + +Stage ++++++ + +This revision removed the concept of state on hr.applicant objects. The ``state`` +field has been totally removed and replaced by stages, using ``stage_id``. The +following models are impacted: + + - ``hr.applicant`` now use only stages. However a convention still exists about + 'New' stage. An applicant is consdered as ``new`` when it has the following + properties: + + - ``stage_id and stage_id.sequence = 1`` + + - ``hr.recruitment.stage`` do not have any ``state`` field anymore. + - ``hr.recruitment.report`` do not have any ``state`` field anymore. + +By default a newly created applicant be in a new stage. It means that it will +fetch the stage having ``sequence = 1``. Stage mangement is done using the +kanban view or the clikable statusbar. It is not done using buttons anymore. +Employee creation is still feasible directly from a link button in the form view. + +Stage analysis +++++++++++++++ + +Stage analysis can be performed using the newly introduced ``date_last_stage_update`` +datetime field. This field is updated everytime ``stage_id`` is updated. + +``hr.recruitment.report`` model also uses the ``date_last_stage_update`` field. +This allows to group and analyse the time spend in the various stages. + +Open / Assignation date ++++++++++++++++++++++++ + +The ``date_open`` field meaning has been updated. It is now set when the ``user_id`` +(responsible) is set. It is therefore the assignation date. + +Subtypes +++++++++ + +The following subtypes are triggered on ``hr.applicant``: + + - ``mt_applicant_new``: new applicants. Condition: ``obj.stage_id and obj.stage_id.sequence == 1`` + - ``mt_applicant_stage_changed``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1`` + +The following subtype is trigerred on ``hr.job``: + + - ``mt_job_new_applicant``: new applicant in the job. diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 503e7f7805c..a6d74efc6fe 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -19,23 +19,13 @@ # ############################################################################## -import time from openerp import tools -from openerp.addons.base_status.base_stage import base_stage from datetime import datetime from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp.tools import html2plaintext -AVAILABLE_STATES = [ - ('draft', 'New'), - ('cancel', 'Refused'), - ('open', 'In Progress'), - ('pending', 'Pending'), - ('done', 'Hired') -] - AVAILABLE_PRIORITIES = [ ('', ''), ('5', 'Not Good'), @@ -62,13 +52,11 @@ class hr_recruitment_stage(osv.osv): 'name': fields.char('Name', size=64, required=True, translate=True), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."), 'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep this field empty."), - 'state': fields.selection(AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change according to the selected stage. Example, a stage is related to the status 'Close', when your document reach this stage, it will be automatically closed."), 'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), 'requirements': fields.text('Requirements'), } _defaults = { 'sequence': 1, - 'state': 'draft', 'fold': False, } @@ -87,18 +75,15 @@ class hr_recruitment_degree(osv.osv): ('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!') ] -class hr_applicant(base_stage, osv.Model): +class hr_applicant(osv.Model): _name = "hr.applicant" _description = "Applicant" _order = "id desc" _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { - 'state': { - 'hr_recruitment.mt_applicant_hired': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'done', - 'hr_recruitment.mt_applicant_refused': lambda self, cr, uid, obj, ctx=None: obj['state'] == 'cancel', - }, 'stage_id': { - 'hr_recruitment.mt_stage_changed': lambda self, cr, uid, obj, ctx=None: obj['state'] not in ['done', 'cancel'], + 'hr_recruitment.mt_applicant_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1, + 'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence != 1, }, } @@ -109,7 +94,7 @@ class hr_applicant(base_stage, osv.Model): def _get_default_stage_id(self, cr, uid, context=None): """ Gives default stage_id """ department_id = self._get_default_department_id(cr, uid, context=context) - return self.stage_find(cr, uid, [], department_id, [('state', '=', 'draft')], context=context) + return self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context) def _resolve_department_id_from_context(self, cr, uid, context=None): """ Returns ID of department based on the value of 'default_department_id' @@ -197,20 +182,12 @@ class hr_applicant(base_stage, osv.Model): 'write_date': fields.datetime('Update Date', readonly=True), 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', track_visibility='onchange', domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"), - 'state': fields.related('stage_id', 'state', type="selection", store=True, - selection=AVAILABLE_STATES, string="Status", readonly=True, - help='The status is set to \'Draft\', when a case is created.\ - If the case is in progress the status is set to \'Open\'.\ - When the case is over, the status is set to \'Done\'.\ - If the case needs to be reviewed then the status is \ - set to \'Pending\'.'), 'categ_ids': fields.many2many('hr.applicant_category', string='Tags'), 'company_id': fields.many2one('res.company', 'Company'), 'user_id': fields.many2one('res.users', 'Responsible', track_visibility='onchange'), - # Applicant Columns 'date_closed': fields.datetime('Closed', readonly=True, select=True), - 'date_open': fields.datetime('Opened', readonly=True, select=True), - 'date': fields.datetime('Date'), + 'date_open': fields.datetime('Assigned', readonly=True, select=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'date_action': fields.date('Next Action Date'), 'title_action': fields.char('Next Action', size=64), 'priority': fields.selection(AVAILABLE_PRIORITIES, 'Appreciation'), @@ -234,44 +211,42 @@ class hr_applicant(base_stage, osv.Model): 'day_close': fields.function(_compute_day, string='Days to Close', \ multi='day_close', type="float", store=True), 'color': fields.integer('Color Index'), - 'emp_id': fields.many2one('hr.employee', 'employee'), + 'emp_id': fields.many2one('hr.employee', string='Employee', + help='Employee linked to the applicant.'), 'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True), 'previous_stage_id': fields.many2one ('hr.recruitment.stage', 'Previous Stage'), } _defaults = { 'active': lambda *a: 1, - 'user_id': lambda s, cr, uid, c: uid, - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.applicant', context=c), 'color': 0, + 'date_last_stage_update': fields.datetime.now(), } _group_by_full = { 'stage_id': _read_group_stage_ids } - + def write(self, cr, uid, ids, vals, context=None): for data in self.browse(cr, uid, ids, context=context): if vals.get('stage_id'): vals['previous_stage_id'] = data.stage_id.id return super(hr_applicant, self).write(cr, uid, ids, vals, context=context) - - def onchange_job(self, cr, uid, ids, job, context=None): - result = {} - if job: - job_obj = self.pool.get('hr.job') - result['department_id'] = job_obj.browse(cr, uid, job, context=context).department_id.id - return {'value': result} - return {'value': {'department_id': False}} + def onchange_job(self, cr, uid, ids, job_id=False, context=None): + if job_id: + job_record = self.pool.get('hr.job').browse(cr, uid, job_id, context=context) + if job_record and job_record.department_id: + return {'value': {'department_id': job_record.department_id.id}} + return {} - def onchange_department_id(self, cr, uid, ids, department_id=False, context=None): - obj_recru_stage = self.pool.get('hr.recruitment.stage') - stage_ids = obj_recru_stage.search(cr, uid, ['|',('department_id','=',department_id),('department_id','=',False)], context=context) - stage_id = stage_ids and stage_ids[0] or False + def onchange_department_id(self, cr, uid, ids, department_id=False, stage_id=False, context=None): + if not stage_id: + stage_id = self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context) return {'value': {'stage_id': stage_id}} def onchange_partner_id(self, cr, uid, ids, partner_id, context=None): @@ -410,27 +385,31 @@ class hr_applicant(base_stage, osv.Model): return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('department_id') and not context.get('default_department_id'): + context['default_department_id'] = vals.get('department_id') + obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context) applicant = self.browse(cr, uid, obj_id, context=context) if applicant.job_id: self.pool.get('hr.job').message_post(cr, uid, [applicant.job_id.id], body=_('Applicant created'), subtype="hr_recruitment.mt_job_new_applicant", context=context) return obj_id - def case_open(self, cr, uid, ids, context=None): - """ - open Request of the applicant for the hr_recruitment - """ - res = super(hr_applicant, self).case_open(cr, uid, ids, context) - date = self.read(cr, uid, ids, ['date_open'])[0] - if not date['date_open']: - self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),}) - return res + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + # stage change: update date_last_stage_update + if 'stage_id' in vals: + vals['date_last_stage_update'] = fields.datetime.now() + # user_id change: update date_start + if vals.get('user_id'): + vals['date_start'] = fields.datetime.now() - def case_close(self, cr, uid, ids, context=None): - res = super(hr_applicant, self).case_close(cr, uid, ids, context) - return res + return super(hr_applicant, self).write(cr, uid, ids, vals, context=context) - def case_close_with_emp(self, cr, uid, ids, context=None): + def create_employee_from_applicant(self, cr, uid, ids, context=None): + """ Create an hr.employee from the hr.applicants """ if context is None: context = {} hr_employee = self.pool.get('hr.employee') @@ -440,17 +419,16 @@ class hr_applicant(base_stage, osv.Model): for applicant in self.browse(cr, uid, ids, context=context): address_id = contact_name = False if applicant.partner_id: - address_id = self.pool.get('res.partner').address_get(cr,uid,[applicant.partner_id.id],['contact'])['contact'] - contact_name = self.pool.get('res.partner').name_get(cr,uid,[applicant.partner_id.id])[0][1] + address_id = self.pool.get('res.partner').address_get(cr, uid, [applicant.partner_id.id], ['contact'])['contact'] + contact_name = self.pool.get('res.partner').name_get(cr, uid, [applicant.partner_id.id])[0][1] if applicant.job_id and (applicant.partner_name or contact_name): applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1}) - emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or contact_name, + emp_id = hr_employee.create(cr, uid, {'name': applicant.partner_name or contact_name, 'job_id': applicant.job_id.id, 'address_home_id': address_id, 'department_id': applicant.department_id.id }) self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context) - self.case_close(cr, uid, [applicant.id], context) else: raise osv.except_osv(_('Warning!'), _('You must define an Applied Job and a Contact Name for this applicant.')) @@ -461,26 +439,6 @@ class hr_applicant(base_stage, osv.Model): dict_act_window['view_mode'] = 'form,tree' return dict_act_window - def case_cancel(self, cr, uid, ids, context=None): - """Overrides cancel for crm_case for setting probability - """ - res = super(hr_applicant, self).case_cancel(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability': 0.0}) - return res - - def case_pending(self, cr, uid, ids, context=None): - """Marks case as pending""" - res = super(hr_applicant, self).case_pending(cr, uid, ids, context) - self.write(cr, uid, ids, {'probability': 0.0}) - return res - - def case_reset(self, cr, uid, ids, context=None): - """Resets case as draft - """ - res = super(hr_applicant, self).case_reset(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_open': False, 'date_closed': False}) - return res - def set_priority(self, cr, uid, ids, priority, *args): """Set applicant priority """ @@ -513,33 +471,18 @@ class hr_job(osv.osv): help="Email alias for this job position. New emails will automatically " "create new applicants for this job position."), } - _defaults = { - 'alias_domain': False, # always hide alias during creation - } def _auto_init(self, cr, context=None): """Installation hook to create aliases for all jobs and avoid constraint errors.""" - if context is None: - context = {} - alias_context = dict(context, alias_model_name='hr.applicant') - res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job, self)._auto_init, - self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=alias_context) - return res + return self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job, self)._auto_init, + 'hr.applicant', self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=context) def create(self, cr, uid, vals, context=None): - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id'): - vals.pop('alias_name', None) # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - # Using '+' allows using subaddressing for those who don't - # have a catchall domain setup. - {'alias_name': 'jobs+'+vals['name']}, - model_name="hr.applicant", - context=context) - vals['alias_id'] = alias_id - res = super(hr_job, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {"alias_defaults": {'job_id': res}}, context) - return res + alias_context = dict(context, alias_model_name='hr.applicant', alias_parent_model_name=self._name) + job_id = super(hr_job, self).create(cr, uid, vals, context=alias_context) + job = self.browse(cr, uid, job_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [job.alias_id.id], {'alias_parent_thread_id': job_id, "alias_defaults": {'job_id': job_id}}, context) + return job_id def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the job position. @@ -557,15 +500,16 @@ class hr_job(osv.osv): if record.survey_id: datas['ids'] = [record.survey_id.id] datas['model'] = 'survey.print' - context.update({'response_id': [0], 'response_no': 0,}) + context.update({'response_id': [0], 'response_no': 0}) return { 'type': 'ir.actions.report.xml', 'report_name': 'survey.form', 'datas': datas, - 'context' : context, - 'nodestroy':True, + 'context': context, + 'nodestroy': True, } + class applicant_category(osv.osv): """ Category of applicant """ _name = "hr.applicant_category" diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index f3f1b3e712d..854dea0548f 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -51,34 +51,29 @@ Doctoral Degree 4 + Initial Qualification - draft 1 First Interview - open 2 Second Interview - open 3 Contract Proposed - pending 4 Contract Signed - done 5 Refused - cancel 6 @@ -467,24 +462,24 @@ hr.job - + + New Applicant + hr.applicant + + Applicant created + + Stage Changed hr.applicant Stage changed - + Applicant Hired hr.applicant Applicant hired - - Applicant Refused - hr.applicant - - Applicant refused - Reserve diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 652b3804493..c61b4a45d1f 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -39,10 +39,11 @@ Applicants hr.applicant - + + @@ -59,7 +60,6 @@ - @@ -70,13 +70,7 @@
-
@@ -94,9 +88,12 @@
@@ -116,7 +113,6 @@ - @@ -124,7 +120,7 @@ - +
@@ -166,7 +163,7 @@ - + @@ -175,23 +172,23 @@ Jobs - Recruitment Search hr.applicant - + + + + - - - - - - + + + @@ -203,6 +200,7 @@ + @@ -319,18 +317,19 @@ attrs="{'invisible':[('survey_id','=',False)]}"/> - -
+ -
+
@@ -344,7 +343,6 @@ - @@ -362,7 +360,6 @@
- diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 8490e73ec3a..8c8255328aa 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -18,30 +18,24 @@ # along with this program. If not, see . # ############################################################################## + from openerp import tools -from openerp.osv import fields,osv +from openerp.osv import fields, osv from .. import hr_recruitment from openerp.addons.decimal_precision import decimal_precision as dp -AVAILABLE_STATES = [ - ('draft','New'), - ('open','Open'), - ('cancel', 'Refused'), - ('done', 'Hired'), - ('pending','Pending') -] - -class hr_recruitment_report(osv.osv): +class hr_recruitment_report(osv.Model): _name = "hr.recruitment.report" _description = "Recruitments Statistics" _auto = False - _rec_name = 'date' + _rec_name = 'date_create' + _order = 'date_create desc' _columns = { 'user_id': fields.many2one('res.users', 'User', readonly=True), 'nbr': fields.integer('# of Applications', readonly=True), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), + # TDE TODO: use MONTHS 'month':fields.selection([('01', 'January'), ('02', 'February'), \ ('03', 'March'), ('04', 'April'),\ ('05', 'May'), ('06', 'June'), \ @@ -51,7 +45,8 @@ class hr_recruitment_report(osv.osv): 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'year': fields.char('Year', size=4, readonly=True), - 'date': fields.date('Date', readonly=True), + 'date_create': fields.date('Create Date', readonly=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True), 'date_closed': fields.date('Closed', readonly=True), 'job_id': fields.many2one('hr.job', 'Applied Job',readonly=True), 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'), @@ -68,19 +63,19 @@ class hr_recruitment_report(osv.osv): help="Number of Days to close the project issue"), 'previous_stage_id': fields.many2one ('hr.recruitment.stage', 'Previous Stage'), } - _order = 'date desc' + def init(self, cr): tools.drop_view_if_exists(cr, 'hr_recruitment_report') cr.execute(""" create or replace view hr_recruitment_report as ( select min(s.id) as id, - date_trunc('day',s.create_date) as date, + date_trunc('day',s.create_date) as date_create, date_trunc('day',s.date_closed) as date_closed, + date_trunc('day',s.date_last_stage_update) as date_last_stage_update, to_char(s.create_date, 'YYYY') as year, to_char(s.create_date, 'MM') as month, to_char(s.create_date, 'YYYY-MM-DD') as day, - s.state, s.partner_id, s.company_id, s.user_id, @@ -95,7 +90,7 @@ class hr_recruitment_report(osv.osv): (sum(salary_proposed)/count(*)) as salary_prop_avg, sum(salary_expected) as salary_exp, (sum(salary_expected)/count(*)) as salary_exp_avg, - extract('epoch' from (s.date_closed-s.create_date))/(3600*24) as delay_close, + extract('epoch' from (s.date_closed-s.create_date))/(3600*24) as delay_close, count(*) as nbr from hr_applicant s group by @@ -107,7 +102,7 @@ class hr_recruitment_report(osv.osv): s.date_open, s.create_date, s.date_closed, - s.state, + s.date_last_stage_update, s.partner_id, s.company_id, s.user_id, diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml index dfb9cecd415..b8dc7803c4e 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml +++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml @@ -6,7 +6,7 @@ hr.recruitment.report - + @@ -15,10 +15,10 @@ - + @@ -47,35 +47,34 @@ hr.recruitment.report - - - - - - - + + + + + + - - + - - - - - - + + + + + + - - - - + + + + + diff --git a/addons/hr_recruitment/static/src/img/icon.png b/addons/hr_recruitment/static/description/icon.png similarity index 100% rename from addons/hr_recruitment/static/src/img/icon.png rename to addons/hr_recruitment/static/description/icon.png diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml index 335edc71892..a48b70a5683 100644 --- a/addons/hr_recruitment/test/recruitment_process.yml +++ b/addons/hr_recruitment/test/recruitment_process.yml @@ -17,33 +17,8 @@ resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.pdf'),('res_model','=',self._name),('res_id','=',applicant.id)]) assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match." assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name) - assert applicant.state == "draft", "Applicant state should be 'draft'." + assert applicant.stage_id.sequence == 1, "Applicant stage sequence should be 1." assert len(resume_ids), "Resume is not attached." -- - I refuse the applicant (hr_case_programmer) -- - !python {model: hr.applicant}: | - self.case_cancel(cr, uid, [ref("hr_case_programmer")]) -- - I check the details of the refused applicant. -- - !python {model: hr.applicant}: | - applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context) - assert applicant.stage_id.id == ref('hr_recruitment.stage_job6'), "Stage should be 'Refused' and is %s." % (applicant.stage_id.name) - assert applicant.state == 'cancel', "Applicant is not in 'cancel' state." -- - I reset and re-open the previously refused applicant. -- - !python {model: hr.applicant}: | - self.case_reset(cr, uid, [ref("hr_case_programmer")]) - self.case_open(cr, uid, [ref("hr_case_programmer")]) -- - I check the details of the re-opened applicant. -- - !python {model: hr.applicant}: | - applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context) - assert applicant.stage_id.id == ref('hr_recruitment.stage_job2'), "Stage should be 'First interview' and is '%s'." % (applicant.stage_id.name) - assert applicant.state == "open", "Applicant state should be 'open'." - I assign the Job position to the applicant - @@ -54,21 +29,6 @@ - !python {model: hr.applicant}: | self.action_makeMeeting(cr, uid, [ref('hr_case_programmer')]) -- - I check Initial Qualification of applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) -- - I schedule First Interview of applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) -- - On a successful First Interview of applicant, I schedule Second Interview. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) - Applicant fillup the answer of the interview quetion. - @@ -83,40 +43,8 @@ I print Applicant fill up the interview quetion - !python {model: hr.applicant}: | - self.action_print_survey(cr, uid, [ref('hr_case_programmer')]) -- - On a successful Second Interview of applicant Contract is Proposed to applicant. -- - !python {model: hr.applicant}: | - self.stage_next(cr, uid, [ref('hr_case_programmer')]) - self.stage_previous(cr, uid, [ref('hr_case_programmer')]) -- - I Hired Applicant. -- - !python {model: hr.applicant}: | - self.case_close_with_emp(cr, uid, [ref('hr_case_programmer')]) -- - I check that applicant is "Hired". -- - !assert {model: hr.applicant, id: hr_case_programmer, string: Applicant state is done}: - - state == 'done' -- - I do not give employment to the hired the applicant. -- - !python {model: hired.employee}: | context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")}) - emp_id = self.create(cr, uid, {}, context=context) - self.case_close(cr, uid, [emp_id], context=context) -- - Now I give employment to hired applicant . -- - !python {model: hr.applicant}: | - hired_emp_obj = self.pool.get('hired.employee') - self.case_reset(cr, uid, [ref("hr_case_programmer")]) - self.case_open(cr, uid, [ref("hr_case_programmer")]) - context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")}) - emp_hr_id = hired_emp_obj.create(cr, uid, {}, context=context) - hired_emp_obj.case_close_with_emp(cr, uid, [emp_hr_id], context=context) + self.action_print_survey(cr, uid, [ref('hr_case_programmer')]) - Now hired employee want to be a partner of company. - diff --git a/addons/hr_recruitment/wizard/__init__.py b/addons/hr_recruitment/wizard/__init__.py index fde7df63456..d52c7a9113a 100644 --- a/addons/hr_recruitment/wizard/__init__.py +++ b/addons/hr_recruitment/wizard/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2004-Today OpenERP (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,9 +19,7 @@ # ############################################################################## - import hr_recruitment_create_partner_job -import hr_recruitment_employee_hired # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py deleted file mode 100644 index 60d31e74eee..00000000000 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved -# $Id$ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -class hired_employee(osv.osv_memory): - _name = 'hired.employee' - _description = 'Create Employee' - - def case_close(self, cr, uid, ids, context=None): - """ - @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's Ids - @param *args: Give Tuple Value - """ - if context is None: - context = {} - self.pool.get('hr.applicant').case_close(cr, uid,context.get('active_ids',[])) - return {} - - def case_close_with_emp(self, cr, uid, ids, context=None): - """ - @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's Ids - """ - if context is None: - context = {} - return self.pool.get('hr.applicant').case_close_with_emp(cr, uid,context.get('active_ids', [])) - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml b/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml deleted file mode 100644 index d014bd54aa8..00000000000 --- a/addons/hr_recruitment/wizard/hr_recruitment_employee_hired.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - hr.recruitment.hired2employee.form - hired.employee - - -
-
-
-
- - Create Employee - ir.actions.act_window - hired.employee - form - form - new - - -
-
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py index 6c4f6022c39..b950b85ac48 100644 --- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py +++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py @@ -173,7 +173,10 @@ class account_analytic_line(osv.osv): data = {} journal_types = {} + price = 0.0 for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): + price += line.amount*-1 + line_name = line.name if line.journal_id.type not in journal_types: journal_types[line.journal_id.type] = set() journal_types[line.journal_id.type].add(line.account_id.id) @@ -204,7 +207,6 @@ class account_analytic_line(osv.osv): 'date_due': date_due, 'fiscal_position': account.partner_id.property_account_position.id } - context2 = context.copy() context2['lang'] = partner.lang # set company_id in context, so the correct default journal will be selected @@ -225,36 +227,42 @@ class account_analytic_line(osv.osv): if data.get('product'): product_id = data['product'][0] product = product_obj.browse(cr, uid, product_id, context=context2) - if not product: - raise osv.except_osv(_('Error!'), _('There is no product defined. Please select one or force the product through the wizard.')) factor = invoice_factor_obj.browse(cr, uid, factor_id, context=context2) - factor_name = product_obj.name_get(cr, uid, [product_id], context=context2)[0][1] - if factor.customer_name: - factor_name += ' - ' + factor.customer_name - - ctx = context.copy() - ctx.update({'uom':uom}) - - price = self._get_invoice_price(cr, uid, account, product_id, user_id, qty, ctx) - - general_account = product.property_account_income or product.categ_id.property_account_income_categ - if not general_account: - raise osv.except_osv(_("Configuration Error!"), _("Please define income account for product '%s'.") % product.name) - taxes = product.taxes_id or general_account.tax_ids - tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) + factor_name = factor.customer_name and line_name + ' - ' + factor.customer_name or line_name curr_line = { 'price_unit': price, 'quantity': qty, - 'discount':factor.factor, - 'invoice_line_tax_id': [(6,0,tax )], + 'discount': factor.factor, 'invoice_id': last_invoice, 'name': factor_name, - 'product_id': product_id, - 'invoice_line_tax_id': [(6,0,tax)], 'uos_id': uom, - 'account_id': general_account.id, 'account_analytic_id': account.id, } + if product: + factor_name = product_obj.name_get(cr, uid, [product_id], context=context2)[0][1] + if factor.customer_name: + factor_name += ' - ' + factor.customer_name + + ctx = context.copy() + ctx.update({'uom': uom}) + + # check force product + if data.get('product'): + price = self._get_invoice_price(cr, uid, account, product_id, user_id, qty, ctx) + + general_account = product.property_account_income or product.categ_id.property_account_income_categ + if not general_account: + raise osv.except_osv(_("Configuration Error!"), _("Please define income account for product '%s'.") % product.name) + taxes = product.taxes_id or general_account.tax_ids + tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes) + curr_line.update({ + 'price_unit': price, + 'invoice_line_tax_id': [(6,0,tax )], + 'name': factor_name, + 'product_id': product_id, + 'invoice_line_tax_id': [(6,0,tax)], + 'account_id': general_account.id, + }) # # Compute for lines diff --git a/addons/hr_timesheet_sheet/static/src/img/icon.png b/addons/hr_timesheet_sheet/static/description/icon.png similarity index 100% rename from addons/hr_timesheet_sheet/static/src/img/icon.png rename to addons/hr_timesheet_sheet/static/description/icon.png diff --git a/addons/idea/__init__.py b/addons/idea/__init__.py index e6f7333e055..2b8966f9e7a 100644 --- a/addons/idea/__init__.py +++ b/addons/idea/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# Copyright (C) 2004-Today 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 @@ -19,5 +19,4 @@ # ############################################################################## -import idea - +import models diff --git a/addons/idea/__openerp__.py b/addons/idea/__openerp__.py index 8f32e1e91c4..7d8560a2cf4 100644 --- a/addons/idea/__openerp__.py +++ b/addons/idea/__openerp__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# Copyright (C) 2004-Today 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 @@ -22,29 +22,39 @@ { 'name': 'Ideas', - 'version': '0.1', + 'summary': 'Share and Discuss your Ideas', + 'version': '1.0', 'category': 'Tools', 'description': """ -This module allows user to easily and efficiently participate in enterprise innovation. -======================================================================================= +Share your ideas and participate in enterprise innovation +========================================================= -It allows everybody to express ideas about different subjects. -Then, other users can comment on these ideas and vote for particular ideas. -Each idea has a score based on the different votes. +The Ideas module give users a way to express and discuss ideas, allowing everybody +to participate in enterprise innovation. Every user can suggest, comment ideas. The managers can obtain an easy view of best ideas from all the users. Once installed, check the menu 'Ideas' in the 'Tools' main menu.""", 'author': 'OpenERP SA', - 'website': 'http://openerp.com', + 'website': 'http://www.openerp.com', 'depends': ['mail'], 'data': [ - 'security/idea_security.xml', + 'security/idea.xml', 'security/ir.model.access.csv', - 'idea_view.xml', - 'idea_workflow.xml', + 'views/idea.xml', + 'views/category.xml', + 'data/idea.xml', + 'data/idea_workflow.xml', + ], + 'demo': [ + 'demo/idea.xml', ], - 'demo': ['idea_data.xml'], - 'test':[], 'installable': True, + 'application': True, 'images': [], + 'css': [ + 'static/src/css/idea_idea.css', + ], + 'js': [], + 'qweb': [], } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/idea/data/idea.xml b/addons/idea/data/idea.xml new file mode 100644 index 00000000000..c057868d6de --- /dev/null +++ b/addons/idea/data/idea.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/addons/idea/data/idea_workflow.xml b/addons/idea/data/idea_workflow.xml new file mode 100644 index 00000000000..b460c73a6ed --- /dev/null +++ b/addons/idea/data/idea_workflow.xml @@ -0,0 +1,57 @@ + + + + + idea.wkf + idea.idea + True + + + + + True + normal + function + idea_set_normal_priority() + + + + + low + function + idea_set_low_priority() + + + + + high + function + idea_set_high_priority() + + + + + + idea_set_low_priority + + + + + + idea_set_normal_priority + + + + + + idea_set_high_priority + + + + + + idea_set_normal_priority + + + + diff --git a/addons/idea/demo/idea.xml b/addons/idea/demo/idea.xml new file mode 100644 index 00000000000..2b4ff58b973 --- /dev/null +++ b/addons/idea/demo/idea.xml @@ -0,0 +1,68 @@ + + + + + + Sales + + + Organization + + + Technical + + + + Docking station along with tablet PC + When you sell a tablet PC, maybe we could propose a docking station with it. I offer 20% on the docking stating (not the tablet). + + + + + + Communicate using emails + I start communicating with prospects more by email than phonecalls. I send an email to create a sense of emergency, like "can I call you this week about our quote?" and I call only those that answer this email. + + open + + + + + + Use a two-stages testing phase + We should perform testing using two levels of validation. + + open + + + + + + Write some functional documentation about procurements + We receive many questions about OpenChatter. Maybe some functional doc could save us some time. + + open + + + + + Better management of smtp errors + There should be away to store the reason why some emails are not sent. + + close + + + + + + Kitten mode enabled by default + As this is the most loved feature, the kitten mode should be enabled by default. And maybe even impossible to remove. + + cancel + + + + + + + diff --git a/addons/idea/idea.py b/addons/idea/idea.py deleted file mode 100644 index d1e250ce9a5..00000000000 --- a/addons/idea/idea.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- 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 openerp.osv import osv -from openerp.osv import fields -from openerp.tools.translate import _ -import time - -VoteValues = [('-1', 'Not Voted'), ('0', 'Very Bad'), ('25', 'Bad'), \ - ('50', 'Normal'), ('75', 'Good'), ('100', 'Very Good') ] -DefaultVoteValue = '50' - -class idea_category(osv.osv): - """ Category of Idea """ - _name = "idea.category" - _description = "Idea Category" - _columns = { - 'name': fields.char('Category Name', size=64, required=True), - } - _sql_constraints = [ - ('name', 'unique(name)', 'The name of the category must be unique') - ] - _order = 'name asc' - - -class idea_idea(osv.osv): - """ Idea """ - _name = 'idea.idea' - _inherit = ['mail.thread'] - _columns = { - 'create_uid': fields.many2one('res.users', 'Creator', required=True, readonly=True), - 'name': fields.char('Idea Summary', size=64, required=True, readonly=True, oldname='title', states={'draft': [('readonly', False)]}), - 'description': fields.text('Description', help='Content of the idea', readonly=True, states={'draft': [('readonly', False)]}), - 'category_ids': fields.many2many('idea.category', string='Tags', readonly=True, states={'draft': [('readonly', False)]}), - 'state': fields.selection([('draft', 'New'), - ('open', 'Accepted'), - ('cancel', 'Refused'), - ('close', 'Done')], - 'Status', readonly=True, track_visibility='onchange', - ) - } - _sql_constraints = [ - ('name', 'unique(name)', 'The name of the idea must be unique') - ] - _defaults = { - 'state': lambda *a: 'draft', - } - _order = 'name asc' - - def idea_cancel(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state': 'cancel'}, context=context) - - def idea_open(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'open'}, context=context) - - def idea_close(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'close'}, context=context) - - def idea_draft(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'draft'}, context=context) diff --git a/addons/idea/idea_data.xml b/addons/idea/idea_data.xml deleted file mode 100644 index 421cb6a9eef..00000000000 --- a/addons/idea/idea_data.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Sales - - - Organization - - - Technical - - - - - - - - - diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml deleted file mode 100644 index 53734d53919..00000000000 --- a/addons/idea/idea_view.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - idea.category.search - idea.category - - - - - - - - - - idea.category.form - idea.category - -
- - - -
-
-
- - - - idea.category.tree - idea.category - - - - - - - - - - - - Categories - idea.category - form - tree,form - - - - - - - - - - - - - - idea.idea.form - idea.idea - -
-
-
- - -
- - -
-
-
-
- - - - - idea.idea.tree - idea.idea - - - - - - - - - - - - - idea.idea.search - idea.idea - - - - - - - - - - - - - - - - - - Ideas - idea.idea - form - tree,form - - - - - -
-
diff --git a/addons/idea/idea_workflow.xml b/addons/idea/idea_workflow.xml deleted file mode 100644 index 649541ae349..00000000000 --- a/addons/idea/idea_workflow.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - idea.wkf - idea.idea - True - - - - - True - draft - function - idea_draft() - - - - - open - function - idea_open() - - - - - close - function - idea_close() - True - - - - - cancel - function - idea_cancel() - True - - - - - - idea_open - - - - - - idea_close - - - - - - idea_cancel - - - - diff --git a/addons/idea/models/__init__.py b/addons/idea/models/__init__.py new file mode 100644 index 00000000000..e8a48771771 --- /dev/null +++ b/addons/idea/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY 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 idea diff --git a/addons/idea/models/idea.py b/addons/idea/models/idea.py new file mode 100644 index 00000000000..61934cfc3b2 --- /dev/null +++ b/addons/idea/models/idea.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-Today 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 openerp.osv import osv +from openerp.osv import fields + + +class IdeaCategory(osv.Model): + """ Category of Idea """ + _name = "idea.category" + _description = "Idea Category" + + _order = 'name asc' + + _columns = { + 'name': fields.char('Category Name', size=64, required=True), + } + + _sql_constraints = [ + ('name', 'unique(name)', 'The name of the category must be unique') + ] + + +class IdeaIdea(osv.Model): + """ Model of an Idea """ + _name = 'idea.idea' + _description = 'Propose and Share your Ideas' + + _rec_name = 'name' + _order = 'name asc' + + def _get_state_list(self, cr, uid, context=None): + return [('draft', 'New'), + ('open', 'In discussion'), + ('close', 'Accepted'), + ('cancel', 'Refused')] + + def _get_color(self, cr, uid, ids, fields, args, context=None): + res = dict.fromkeys(ids, 3) + for idea in self.browse(cr, uid, ids, context=context): + if idea.priority == 'low': + res[idea.id] = 0 + elif idea.priority == 'high': + res[idea.id] = 7 + return res + + _columns = { + 'user_id': fields.many2one('res.users', 'Responsible', required=True), + 'name': fields.char('Summary', required=True, readonly=True, + states={'draft': [('readonly', False)]}, + oldname='title'), + 'description': fields.text('Description', required=True, + states={'draft': [('readonly', False)]}, + help='Content of the idea'), + 'category_ids': fields.many2many('idea.category', string='Tags'), + 'state': fields.selection(_get_state_list, string='Status', required=True), + 'priority': fields.selection([('low', 'Low'), ('normal', 'Normal'), ('high', 'High')], + string='Priority', required=True), + 'color': fields.function(_get_color, type='integer', string='Color Index'), + } + + _sql_constraints = [ + ('name', 'unique(name)', 'The name of the idea must be unique') + ] + + _defaults = { + 'user_id': lambda self, cr, uid, ctx=None: uid, + 'state': lambda self, cr, uid, ctx=None: self._get_state_list(cr, uid, ctx)[0][0], + 'priority': 'normal', + } + + #------------------------------------------------------ + # Technical stuff + #------------------------------------------------------ + + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): + """ Override read_group to always display all states. """ + if groupby and groupby[0] == "state": + # Default result structure + states = self._get_state_list(cr, uid, context=context) + read_group_all_states = [{ + '__context': {'group_by': groupby[1:]}, + '__domain': domain + [('state', '=', state_value)], + 'state': state_value, + 'state_count': 0, + } for state_value, state_name in states] + # Get standard results + read_group_res = super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset, limit, context, orderby) + # Update standard results with default results + result = [] + for state_value, state_name in states: + res = filter(lambda x: x['state'] == state_value, read_group_res) + if not res: + res = filter(lambda x: x['state'] == state_value, read_group_all_states) + res[0]['state'] = [state_value, state_name] + result.append(res[0]) + return result + else: + return super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) + + #------------------------------------------------------ + # Workflow / Actions + #------------------------------------------------------ + + def idea_set_low_priority(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'priority': 'low'}, context=context) + + def idea_set_normal_priority(self, cr, uid, ids, context={}): + return self.write(cr, uid, ids, {'priority': 'normal'}, context=context) + + def idea_set_high_priority(self, cr, uid, ids, context={}): + return self.write(cr, uid, ids, {'priority': 'high'}, context=context) diff --git a/addons/idea/security/idea.xml b/addons/idea/security/idea.xml new file mode 100644 index 00000000000..e7a0d800187 --- /dev/null +++ b/addons/idea/security/idea.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/addons/idea/security/idea_security.xml b/addons/idea/security/idea_security.xml deleted file mode 100644 index 8743252c9e5..00000000000 --- a/addons/idea/security/idea_security.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - User - - - - - - diff --git a/addons/idea/security/ir.model.access.csv b/addons/idea/security/ir.model.access.csv index 78b8deeaf57..761ada8132c 100644 --- a/addons/idea/security/ir.model.access.csv +++ b/addons/idea/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_idea_category_user,idea.category user,model_idea_category,base.group_tool_user,1,1,1,1 -access_idea_idea_user,idea.idea user,model_idea_idea,base.group_tool_user,1,1,1,1 +access_idea_category_user,idea.category.user,model_idea_category,base.group_user,1,1,1,1 +access_idea_idea_user,idea.idea.user,model_idea_idea,base.group_user,1,1,1,1 diff --git a/addons/idea/static/description/icon.png b/addons/idea/static/description/icon.png new file mode 100644 index 00000000000..1f0cba223bb Binary files /dev/null and b/addons/idea/static/description/icon.png differ diff --git a/addons/idea/static/src/css/idea_idea.css b/addons/idea/static/src/css/idea_idea.css new file mode 100644 index 00000000000..08daffd902a --- /dev/null +++ b/addons/idea/static/src/css/idea_idea.css @@ -0,0 +1,21 @@ +.openerp .oe_kanban_view .oe_kanban_idea_idea { + width: 200px; +} + +.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars { + text-align: right; + margin: -5px 0 -10px 0; +} + +.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars img { + width: 30px; + height: 30px; + padding-left: 0px; + margin-top: 3px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + -box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} diff --git a/addons/google_base_account/wizard/__init__.py b/addons/idea/tests/__init__.py similarity index 82% rename from addons/google_base_account/wizard/__init__.py rename to addons/idea/tests/__init__.py index a6b9c644a1e..a53567a380b 100644 --- a/addons/google_base_account/wizard/__init__.py +++ b/addons/idea/tests/__init__.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY 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 @@ -15,11 +15,14 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## -import google_login +from openerp.addons.idea.tests import test_idea + +checks = [ + test_idea, +] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/portal_event/event.py b/addons/idea/tests/test_idea.py similarity index 54% rename from addons/portal_event/event.py rename to addons/idea/tests/test_idea.py index 45026da4eba..4ca9bb9dcb9 100644 --- a/addons/portal_event/event.py +++ b/addons/idea/tests/test_idea.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY 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 @@ -19,21 +19,21 @@ # ############################################################################## -from openerp.osv import fields, osv +from openerp.tests import common -class event_event(osv.osv): - _description = 'Portal event' - _inherit = 'event.event' - """ - ``visibility``: defines if the event appears on the portal's event page - - 'public' means the event will appear for everyone (anonymous) - - 'private' means the event won't appear - """ - _columns = { - 'visibility': fields.selection([('public', 'Public'),('private', 'Private')], - string='Visibility', help='Event\'s visibility in the portal\'s contact page'), - } - _defaults = { - 'visibility': 'private', - } +class TestIdeaBase(common.TransactionCase): + + def setUp(self): + super(TestIdeaBase, self).setUp() + cr, uid = self.cr, self.uid + + # Usefull models + self.idea_category = self.registry('idea.category') + self.idea_idea = self.registry('idea.idea') + + def tearDown(self): + super(TestIdeaBase, self).tearDown() + + def test_OO(self): + pass diff --git a/addons/idea/views/category.xml b/addons/idea/views/category.xml new file mode 100644 index 00000000000..79725fad73f --- /dev/null +++ b/addons/idea/views/category.xml @@ -0,0 +1,56 @@ + + + + + + + + idea.category.search + idea.category + + + + + + + + + idea.category.form + idea.category + +
+ + + +
+
+
+ + + idea.category.tree + idea.category + + + + + + + + + + Categories + idea.category + form + tree,form + + + + + + + +
+
diff --git a/addons/idea/views/idea.xml b/addons/idea/views/idea.xml new file mode 100644 index 00000000000..7df21f99f11 --- /dev/null +++ b/addons/idea/views/idea.xml @@ -0,0 +1,117 @@ + + + + + + idea.idea.kanban + idea.idea + + + + + + +
+
+ í + +
+
+

+
+ +
+ +
+
+
+
+
+
+
+
+ + + idea.idea.form + idea.idea + +
+
+
+ + +
+
+
+ + + idea.idea.tree + idea.idea + + + + + + + + + + + + idea.idea.search + idea.idea + + + + + + + + + + + + + + + + + + Ideas + idea.idea + form + kanban,tree,form + + + + + + + +
+
diff --git a/addons/im/im.py b/addons/im/im.py index 4a867789cbc..505ca3627b6 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -101,17 +101,19 @@ class LongPollingController(http.Controller): raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: - request.session.authenticate(db=db, uid=uid, password=password) + openerp.service.security.check(db, uid, password) else: - request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password) + uid = request.session.uid + db = request.session.db - with request.registry.cursor() as cr: - request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context) - my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"] + registry = openerp.modules.registry.RegistryManager.get(db) + with registry.cursor() as cr: + registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) + my_id = registry.get('im.user').get_by_user_id(cr, uid, uuid or uid, request.context)["id"] num = 0 while True: - with request.registry.cursor() as cr: - res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context) + with registry.cursor() as cr: + res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] diff --git a/addons/im/static/src/img/icon.png b/addons/im/static/description/icon.png similarity index 100% rename from addons/im/static/src/img/icon.png rename to addons/im/static/description/icon.png diff --git a/addons/im_livechat/im_livechat.py b/addons/im_livechat/im_livechat.py index adceebc7cba..b68a0079c3a 100644 --- a/addons/im_livechat/im_livechat.py +++ b/addons/im_livechat/im_livechat.py @@ -37,36 +37,45 @@ env.filters["json"] = json.dumps class LiveChatController(http.Controller): - @http.route('/im_livechat/loader') + def _auth(self, db): + reg = openerp.modules.registry.RegistryManager.get(db) + uid = openerp.netsvc.dispatch_rpc('common', 'authenticate', [db, "anonymous", "anonymous", None]) + return reg, uid + + @http.route('/im_livechat/loader', auth="none") def loader(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] user_name = p.get("user_name", None) - request.session.authenticate(db=db, login="anonymous", password="anonymous") - info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) - info["db"] = db - info["channel"] = channel - info["userName"] = user_name - return request.make_response(env.get_template("loader.js").render(info), - headers=[('Content-Type', "text/javascript")]) - @http.route('/im_livechat/web_page') + reg, uid = self._auth(db) + with reg.cursor() as cr: + info = reg.get('im_livechat.channel').get_info_for_chat_src(cr, uid, channel) + info["db"] = db + info["channel"] = channel + info["userName"] = user_name + return request.make_response(env.get_template("loader.js").render(info), + headers=[('Content-Type', "text/javascript")]) + + @http.route('/im_livechat/web_page', auth="none") def web_page(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] - request.session.authenticate(db=db, login="anonymous", password="anonymous") - script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"] - info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) - info["script"] = script - return request.make_response(env.get_template("web_page.html").render(info), - headers=[('Content-Type', "text/html")]) + reg, uid = self._auth(db) + with reg.cursor() as cr: + script = reg.get('im_livechat.channel').read(cr, uid, channel, ["script"])["script"] + info = reg.get('im_livechat.channel').get_info_for_chat_src(cr, uid, channel) + info["script"] = script + return request.make_response(env.get_template("web_page.html").render(info), + headers=[('Content-Type', "text/html")]) - @http.route('/im_livechat/available', type='json') + @http.route('/im_livechat/available', type='json', auth="none") def available(self, db, channel): - request.session.authenticate(db=db, login="anonymous", password="anonymous") - return request.session.model('im_livechat.channel').get_available_user(channel) > 0 + reg, uid = self._auth(db) + with reg.cursor() as cr: + return reg.get('im_livechat.channel').get_available_user(cr, uid, channel) > 0 class im_livechat_channel(osv.osv): _name = 'im_livechat.channel' diff --git a/addons/im_livechat/static/src/img/icon.png b/addons/im_livechat/static/description/icon.png similarity index 100% rename from addons/im_livechat/static/src/img/icon.png rename to addons/im_livechat/static/description/icon.png diff --git a/addons/knowledge/static/src/img/icon.png b/addons/knowledge/static/description/icon.png similarity index 100% rename from addons/knowledge/static/src/img/icon.png rename to addons/knowledge/static/description/icon.png diff --git a/addons/l10n_ar/static/src/img/icon.png b/addons/l10n_ar/static/description/icon.png similarity index 100% rename from addons/l10n_ar/static/src/img/icon.png rename to addons/l10n_ar/static/description/icon.png diff --git a/addons/l10n_at/static/src/img/icon.png b/addons/l10n_at/static/description/icon.png similarity index 100% rename from addons/l10n_at/static/src/img/icon.png rename to addons/l10n_at/static/description/icon.png diff --git a/addons/l10n_be/static/src/img/icon.png b/addons/l10n_be/static/description/icon.png similarity index 100% rename from addons/l10n_be/static/src/img/icon.png rename to addons/l10n_be/static/description/icon.png diff --git a/addons/l10n_be_coda/wizard/account_coda_import.py b/addons/l10n_be_coda/wizard/account_coda_import.py index 8aabe601bc8..aed99345fba 100644 --- a/addons/l10n_be_coda/wizard/account_coda_import.py +++ b/addons/l10n_be_coda/wizard/account_coda_import.py @@ -117,6 +117,8 @@ class account_coda_import(osv.osv_memory): # and so a 'like' operator would return the first account number in the database which matches. cr.execute("select id from res_partner_bank where replace(replace(acc_number,' ',''),'-','') = %s", (statement['acc_number'],)) bank_ids = [id[0] for id in cr.fetchall()] + # Filter bank accounts which are not allowed + bank_ids = self.pool.get('res.partner.bank').search(cr, uid, [('id', 'in', bank_ids)]) if bank_ids and len(bank_ids) > 0: bank_accs = self.pool.get('res.partner.bank').browse(cr, uid, bank_ids) for bank_acc in bank_accs: @@ -248,7 +250,7 @@ class account_coda_import(osv.osv_memory): elif line[0] == '9': statement['balanceMin'] = float(rmspaces(line[22:37])) / 1000 statement['balancePlus'] = float(rmspaces(line[37:52])) / 1000 - if not statement['balance_end_real']: + if not statement.get('balance_end_real'): statement['balance_end_real'] = statement['balance_start'] + statement['balancePlus'] - statement['balanceMin'] for i, statement in enumerate(statements): statement['coda_note'] = '' @@ -266,6 +268,8 @@ class account_coda_import(osv.osv_memory): raise osv.except_osv(_('Error'), _("Configuration Error in journal %s!\nPlease verify the Default Debit and Credit Account settings.") % statement['journal_id'].name) if balance_start_check != statement['balance_start']: statement['coda_note'] = _("The CODA Statement %s Starting Balance (%.2f) does not correspond with the previous Closing Balance (%.2f) in journal %s!") % (statement['description'] + ' #' + statement['paperSeqNumber'], statement['balance_start'], balance_start_check, statement['journal_id'].name) + if not(statement.get('period_id')): + raise osv.except_osv(_('Error') + ' R3006', _(' No transactions or no period in coda file !')) data = { 'name': statement['paperSeqNumber'], 'date': statement['date'], diff --git a/addons/l10n_be_hr_payroll/static/src/img/icon.png b/addons/l10n_be_hr_payroll/static/description/icon.png similarity index 100% rename from addons/l10n_be_hr_payroll/static/src/img/icon.png rename to addons/l10n_be_hr_payroll/static/description/icon.png diff --git a/addons/l10n_be_hr_payroll_account/static/src/img/icon.png b/addons/l10n_be_hr_payroll_account/static/description/icon.png similarity index 100% rename from addons/l10n_be_hr_payroll_account/static/src/img/icon.png rename to addons/l10n_be_hr_payroll_account/static/description/icon.png diff --git a/addons/l10n_be_invoice_bba/invoice.py b/addons/l10n_be_invoice_bba/invoice.py index a23dabd7c51..fca743928bf 100644 --- a/addons/l10n_be_invoice_bba/invoice.py +++ b/addons/l10n_be_invoice_bba/invoice.py @@ -153,25 +153,33 @@ class account_invoice(osv.osv): return {'value': {'reference': reference}} def create(self, cr, uid, vals, context=None): - if vals.has_key('reference_type'): - reference_type = vals['reference_type'] + reference = vals.get('reference', False) + reference_type = vals.get('reference_type', False) + if vals.get('type') == 'out_invoice' and not reference_type: + # fallback on default communication type for partner + reference_type = self.pool.get('res.partner').browse(cr, uid, vals['partner_id']).out_inv_comm_type if reference_type == 'bba': - if vals.has_key('reference'): - bbacomm = vals['reference'] - else: + reference = self.generate_bbacomm(cr, uid, [], vals['type'], reference_type, vals['partner_id'], '', context={})['value']['reference'] + vals.update({ + 'reference_type': reference_type or 'none', + 'reference': reference, + }) + + if reference_type == 'bba': + if not reference: + raise osv.except_osv(_('Warning!'), + _('Empty BBA Structured Communication!' \ + '\nPlease fill in a unique BBA Structured Communication.')) + if self.check_bbacomm(reference): + reference = re.sub('\D', '', reference) + vals['reference'] = '+++' + reference[0:3] + '/' + reference[3:7] + '/' + reference[7:] + '+++' + same_ids = self.search(cr, uid, + [('type', '=', 'out_invoice'), ('reference_type', '=', 'bba'), + ('reference', '=', vals['reference'])]) + if same_ids: raise osv.except_osv(_('Warning!'), - _('Empty BBA Structured Communication!' \ - '\nPlease fill in a unique BBA Structured Communication.')) - if self.check_bbacomm(bbacomm): - reference = re.sub('\D', '', bbacomm) - vals['reference'] = '+++' + reference[0:3] + '/' + reference[3:7] + '/' + reference[7:] + '+++' - same_ids = self.search(cr, uid, - [('type', '=', 'out_invoice'), ('reference_type', '=', 'bba'), - ('reference', '=', vals['reference'])]) - if same_ids: - raise osv.except_osv(_('Warning!'), - _('The BBA Structured Communication has already been used!' \ - '\nPlease create manually a unique BBA Structured Communication.')) + _('The BBA Structured Communication has already been used!' \ + '\nPlease create manually a unique BBA Structured Communication.')) return super(account_invoice, self).create(cr, uid, vals, context=context) def write(self, cr, uid, ids, vals, context=None): diff --git a/addons/l10n_bo/static/src/img/icon.png b/addons/l10n_bo/static/description/icon.png similarity index 100% rename from addons/l10n_bo/static/src/img/icon.png rename to addons/l10n_bo/static/description/icon.png diff --git a/addons/l10n_br/static/src/img/icon.png b/addons/l10n_br/static/description/icon.png similarity index 100% rename from addons/l10n_br/static/src/img/icon.png rename to addons/l10n_br/static/description/icon.png diff --git a/addons/l10n_ca/account_tax_en.xml b/addons/l10n_ca/account_tax_en.xml index afe505f27f5..f0d2670d077 100644 --- a/addons/l10n_ca/account_tax_en.xml +++ b/addons/l10n_ca/account_tax_en.xml @@ -101,8 +101,8 @@ - GST + TVQ for sales - GSTTVQ_SALE + GST + QST for sales + GSTQST_SALE sale 1 percent @@ -127,8 +127,8 @@ - TVQ for sales - 9.975% - TVQ + QST for sales - 9.975% + QST sale 0.099750 percent @@ -192,8 +192,8 @@ - TVH for sales - 12% - TVH12_SALE + HST for sales - 12% + HST12_SALE sale 0.120000 percent @@ -207,8 +207,8 @@ - TVH for sales - 13% - TVH13_SALE + HST for sales - 13% + HST13_SALE sale 0.130000 percent @@ -222,8 +222,8 @@ - TVH for sales - 13.5% - TVH135_SALE + HST for sales - 13.5% + HST135_SALE sale 0.135000 percent @@ -237,8 +237,8 @@ - TVH for sales - 15% - TVH15_SALE + HST for sales - 15% + HST15_SALE sale 0.150000 percent @@ -367,8 +367,8 @@ - GST + TVQ for purchases - GSTTVQ_PURC + GST + QST for purchases + GSTQST_PURC purchase 1 percent @@ -393,8 +393,8 @@ - TVQ for purchases - 9.975% - TVQ + QST for purchases - 9.975% + QST purchase 0.099750 percent @@ -458,8 +458,8 @@ - TVH for purchases - 12% - TVH12_PURC + HST for purchases - 12% + HST12_PURC purchase 0.120000 percent @@ -473,8 +473,8 @@ - TVH for purchases - 13% - TVH13_PURC + HST for purchases - 13% + HST13_PURC purchase 0.130000 percent @@ -488,8 +488,8 @@ - TVH for purchases - 13.5% - TVH135_PURC + HST for purchases - 13.5% + HST135_PURC purchase 0.135000 percent @@ -503,8 +503,8 @@ - TVH for purchases - 15% - TVH15_PURC + HST for purchases - 15% + HST15_PURC purchase 0.150000 percent diff --git a/addons/l10n_ca/static/src/img/icon.png b/addons/l10n_ca/static/description/icon.png similarity index 100% rename from addons/l10n_ca/static/src/img/icon.png rename to addons/l10n_ca/static/description/icon.png diff --git a/addons/l10n_ch/__openerp__.py b/addons/l10n_ch/__openerp__.py index 8960224891d..a7830784340 100644 --- a/addons/l10n_ch/__openerp__.py +++ b/addons/l10n_ch/__openerp__.py @@ -24,8 +24,8 @@ {'name': 'Switzerland - Accounting', 'description': """ - Swiss localization : - ==================== +Swiss localization +================== **Multilang swiss STERCHI account chart and taxes** **Author:** Camptocamp SA diff --git a/addons/l10n_ch/static/src/img/icon.png b/addons/l10n_ch/static/description/icon.png similarity index 100% rename from addons/l10n_ch/static/src/img/icon.png rename to addons/l10n_ch/static/description/icon.png diff --git a/addons/l10n_cl/static/src/img/icon.png b/addons/l10n_cl/static/description/icon.png similarity index 100% rename from addons/l10n_cl/static/src/img/icon.png rename to addons/l10n_cl/static/description/icon.png diff --git a/addons/l10n_cn/static/src/img/icon.png b/addons/l10n_cn/static/description/icon.png similarity index 100% rename from addons/l10n_cn/static/src/img/icon.png rename to addons/l10n_cn/static/description/icon.png diff --git a/addons/l10n_co/static/src/img/icon.png b/addons/l10n_co/static/description/icon.png similarity index 100% rename from addons/l10n_co/static/src/img/icon.png rename to addons/l10n_co/static/description/icon.png diff --git a/addons/l10n_cr/static/src/img/icon.png b/addons/l10n_cr/static/description/icon.png similarity index 100% rename from addons/l10n_cr/static/src/img/icon.png rename to addons/l10n_cr/static/description/icon.png diff --git a/addons/l10n_de/static/src/img/icon.png b/addons/l10n_de/static/description/icon.png similarity index 100% rename from addons/l10n_de/static/src/img/icon.png rename to addons/l10n_de/static/description/icon.png diff --git a/addons/l10n_ec/static/src/img/icon.png b/addons/l10n_ec/static/description/icon.png similarity index 100% rename from addons/l10n_ec/static/src/img/icon.png rename to addons/l10n_ec/static/description/icon.png diff --git a/addons/l10n_es/static/src/img/icon.png b/addons/l10n_es/static/description/icon.png similarity index 100% rename from addons/l10n_es/static/src/img/icon.png rename to addons/l10n_es/static/description/icon.png diff --git a/addons/l10n_et/static/src/img/icon.png b/addons/l10n_et/static/description/icon.png similarity index 100% rename from addons/l10n_et/static/src/img/icon.png rename to addons/l10n_et/static/description/icon.png diff --git a/addons/l10n_fr/static/src/img/icon.png b/addons/l10n_fr/static/description/icon.png similarity index 100% rename from addons/l10n_fr/static/src/img/icon.png rename to addons/l10n_fr/static/description/icon.png diff --git a/addons/l10n_gr/static/src/img/icon.png b/addons/l10n_gr/static/description/icon.png similarity index 100% rename from addons/l10n_gr/static/src/img/icon.png rename to addons/l10n_gr/static/description/icon.png diff --git a/addons/l10n_gt/static/src/img/icon.png b/addons/l10n_gt/static/description/icon.png similarity index 100% rename from addons/l10n_gt/static/src/img/icon.png rename to addons/l10n_gt/static/description/icon.png diff --git a/addons/l10n_hn/static/src/img/icon.png b/addons/l10n_hn/static/description/icon.png similarity index 100% rename from addons/l10n_hn/static/src/img/icon.png rename to addons/l10n_hn/static/description/icon.png diff --git a/addons/l10n_hr/static/src/img/icon.png b/addons/l10n_hr/static/description/icon.png similarity index 100% rename from addons/l10n_hr/static/src/img/icon.png rename to addons/l10n_hr/static/description/icon.png diff --git a/addons/l10n_in/l10n_in_private_chart.xml b/addons/l10n_in/l10n_in_private_chart.xml index 671fdc334d9..4b8e4be55bf 100644 --- a/addons/l10n_in/l10n_in_private_chart.xml +++ b/addons/l10n_in/l10n_in_private_chart.xml @@ -135,11 +135,47 @@ Tax Receivable 189 - other + view - + + + Purchase Tax Receivable + 189100 + other + + + + + + + VAT Receivable + 189200 + other + + + + + + + Service Tax Receivable + 189300 + other + + + + + + + Exice Duty Receivable + 189400 + other + + + + + diff --git a/addons/l10n_in/l10n_in_private_tax_template.xml b/addons/l10n_in/l10n_in_private_tax_template.xml index 7aec30f0575..5cb835d950c 100644 --- a/addons/l10n_in/l10n_in_private_tax_template.xml +++ b/addons/l10n_in/l10n_in_private_tax_template.xml @@ -2,269 +2,403 @@ - + - Sale Tax-15% - + Sales Tax 15% + Sales Tax 15% 0.15 percent sale - - - - - - + + + + + + + - + - Sale Tax-12% - + Sales Tax 12% + Sales Tax 12% 0.12 percent sale - - - - - - + + + + + + + - + - Sale Tax-4% - + Sales Tax 4% + Sales Tax 4% 0.04 percent sale - - - - - + + + + + + - + - Purchase Tax-15% + Purchase Tax 15% + Purchase Tax 15% - - + 0.15 percent purchase - - - - + + + + + + - + - - - VAT-5%(4% VAT+1% Add. Tax.) - + + + Output VAT 5% (VAT 4% + Add. VAT 1%) + Output VAT 5% + sale + percent + 0.04 + + + + + + + + + + + + + Input VAT 5% (VAT 4% + Add. VAT 1%) + Input VAT 5% 0.05 percent - all - - - - 1 - - 1 - - 1 - - 1 - + purchase + + + + + + + + - - - VAT-15%(12.5% VAT+2.5% Add. Tax.) - + + + Input VAT 15% (VAT 12.5% + Add. VAT 2.5%) + Input VAT 15% 0.15 percent - all - - - - 1 - - 1 - - 1 - - 1 - + purchase + + + + + + + + - - - VAT-8% - + + + Output VAT 15% (VAT 12.5% + Add. VAT 2.5%) + Output VAT 15% + 0.15 + percent + sale + + + + + + + + + + + + + Input VAT 8% + Input VAT 8% 0.08 percent - all - - - - - - - + purchase + + + + + + + + - - VAT-10% - + + Output VAT 8% + Output VAT 8% + 0.08 + percent + sale + + + + + + + + + + + + + Input VAT 10% + Input VAT 10% 0.10 percent - all - - - - - - - + purchase + + + + + + + + - - VAT-12.5% - - 12.5 - percent - all - - - - - - - - - - - - - - Excise Duty-10.30% - + + Output VAT 10% + Output VAT 10% 0.10 percent sale - - - - 1 - - 1 - - 1 - - 1 - + + + + + + + + - - - Excise Duty-2% - 0.02 + + + Input VAT 12.5% + Input VAT 12.5% + 0.125 + percent + purchase + + + + + + + + + + + + + Output VAT 12.5% + Output VAT 12.5% + 0.125 percent sale - - - - - 1 - - 1 - - 1 - - 1 + + + + + + + + - - - Excise Duty-1% - 0.01 - percent + + + + + Excise Duty 12% - Sales + Excise Duty 12% - Sales sale + percent + 0.1200 - - - 1 - - 1 - - 1 - - 1 - + + + + + + + - + + + Excise Duty 2% - Sales + Excise Duty 2% - Sales + sale + percent + 0.020 + + + + + + + + + + + + + Output Excise Duty 1% + Output Excise Duty 1% + sale + percent + 0.0100 + + + + + + + + + + + - - - all - Service Tax-12.30% - + + + Output Service Tax 12% + Output Service Tax 12% + sale + percent 0.12 - percent + 1 - - - - - - + + + + + + + - - - Service Tax-%2 + + + Output Sales Service Tax 2% + Output Sales Service Tax 2% + sale + percent 0.02 - percent - all + 3 - - - - - - + + + + + - - - Service Tax-%1 + + + Output Service Tax 1% + Output Service Tax 1% + sale + percent 0.01 - percent - all + 5 - - - - - - + + + + + - + + + Input Service Tax 12% + Input Service Tax 12% + purchase + percent + 0.1200 + 1 + + + + + + + + + + + + + Input Service Tax Edu. Cess. 2% + Input Service Tax Edu. Cess. 2% + purchase + percent + 0.0200 + 3 + + + + + + + + + + + Input Service Tax Seco. & HEC 1% + Input Service Tax Seco. & HEC 1% + purchase + percent + 0.0100 + 5 + + + + + + + + + \ No newline at end of file diff --git a/addons/l10n_in/l10n_in_public_chart.xml b/addons/l10n_in/l10n_in_public_chart.xml index 9612afddc39..91d285408d5 100644 --- a/addons/l10n_in/l10n_in_public_chart.xml +++ b/addons/l10n_in/l10n_in_public_chart.xml @@ -116,7 +116,7 @@ Tax Receivable 15400 - other + view @@ -658,7 +658,327 @@ - + + + Input CST 5% + 154001 + other + + + + + + Input Service Tax Seco. & HEC 1% + 154002 + other + + + + + + Input Credit - URD + 154003 + other + + + + + + TDS on Audit Fees - 94J + 154004 + other + + + + + + TDS on Commission Or Brokerage - 94H + 154005 + other + + + + + + Input Credit - Import Duty + 154006 + other + + + + + + Additional Duty (Imports) 4% + 154007 + other + + + + + + Input Service Tax 12% + 154008 + other + + + + + + Input Service Tax Edu. Cess. 2% + 154009 + other + + + + + + TDS on Salary - 92B + 154010 + other + + + + + + Input Excise Duty 6% + 154011 + other + + + + + + Input Excise Duty 5% + 154012 + other + + + + + + Input Excise Duty 12% + 154013 + other + + + + + + Education Cess 2% - Purchase + 154014 + other + + + + + + Seco. & Higher Edu. Cess 1% - Purchase + 154015 + other + + + + + + Excise Duty 12% - Sales + 247001 + other + + + + + + Education Cess 2% - Sales + 247010 + other + + + + + + Seco. & Higher Edu. Cess 1% - Sales + 247002 + other + + + + + + Input Sec. & HEC - Capital Goods + 154016 + other + + + + + + TDS on Contractor - 94C + 154017 + other + + + + + + TDS on Director's Interest + 154018 + other + + + + + + TDS on Director's Remuneration - 92B + 154019 + other + + + + + + TDS on Interest + 154020 + other + + + + + + TDS on Professional Fees - 94J + 154021 + other + + + + + + TDS on Rent - 94I + 154022 + other + + + + + + Input Edu. Cess - Capital Goods + 154023 + other + + + + + + Input Excise Duty 12% - Capital Goods + 154024 + other + + + + + + Input VAT 4% + 154025 + other + + + + + + Input Additional VAT 1% + 154026 + other + + + + + + Input VAT 15% + 154027 + other + + + + + + Output VAT 4% + 247003 + other + + + + + + Output Adi. VAT 1% + 247004 + other + + + + + + CST 2% on Sales - Against Form - C + 247005 + other + + + + + + CST 5% on Sales + 247006 + other + + + + + + Input VAT 12.5% + 154028 + other + + + + + + Input Additional VAT 2.5% + 154029 + other + + + + + + Input CST 2% + 154030 + other + + + + + + CST 2% on Sales - CT3 Against Form C + 247007 + other + + + + + + Output VAT 4% on Sales - CT3 + 247008 + other + + + + + + Output Adi. VAT 1% Sales CT3 + 247009 + other + + + + India - Chart of Accounts for Public Ltd diff --git a/addons/l10n_in/l10n_in_public_tax_template.xml b/addons/l10n_in/l10n_in_public_tax_template.xml index 03dbfa7cc75..887e051121a 100644 --- a/addons/l10n_in/l10n_in_public_tax_template.xml +++ b/addons/l10n_in/l10n_in_public_tax_template.xml @@ -1,295 +1,865 @@ - - - - - Sale Tax-15% - - - - 0.15 - percent - sale - - - - - - - - - Sale Tax-12% - - - - 0.12 - percent - sale - - - - - - - - - Sale Tax-4% - - - - 0.04 - percent - sale - - - - - - - - - - - Purchase Tax-15% - - - - 0.15 - percent + + + Input CST 5% + Input CST 5% purchase - - - - - - - - - - - - - VAT-5%(4% VAT+1% Add. Tax.) - - - - 0.05 percent - all - - 1 - - 1 - - 1 - - 1 - + 0.01 + + + + + + + + - - VAT-15% (12.5% VAT + 2.5% Add. Tax.) - - - - 0.15 + + Input Credit - URD + Input Credit - URD + purchase percent - all - - 1 - - 1 - - 1 - - 1 - - - - - - VAT-8% - - - - 0.08 - percent - all - - 1 - - 1 - - 1 - - 1 - - - - - - VAT-10% - - - - 0.10 - percent - all - - 1 - - 1 - - 1 - - 1 - + 0.0400 + + + + + + + + - - VAT-12.5% - - - - 12.5 + + TDS on Audit Fees - 94J + TDS on Audit Fees - 94J + purchase percent - all - - 1 - - 1 - - 1 - - 1 - + 0.1000 + + + + + + + + - - - - Service Tax-12.30% - - + + TDS on Commission Or Brokerage- 94H + TDS on Commission Or Brokerage- 94H + purchase + percent + 0.1000 + + + + + + + + + + + + + Input Credit - Import Duty + Input Credit - Import Duty + purchase + percent + 0.0750 + 1 + + + + + + + + + + + + + Additional Duty (Imports) 4% + Additional Duty (Imports) 4% + purchase + percent + 0.0400 + 1 + + + + + + + + + + + + + Service Tax 12% - Purchase + Service Tax 12% - Purchase + purchase + percent + 0.1200 + 1 + + + + + + + + + + + + + Service Tax Edu. Cess. 2% - Purchase + Service Tax Edu. Cess. 2% - Purchase + purchase + percent + 0.0200 + 3 + + + + + + + + + + + Service Tax Seco. & HEC 1% - Purchase + Service Tax Seco. & HEC 1% - Purchase + purchase + percent + 0.0100 + 5 + + + + + + + + + + + TDS on Salary - 92B + TDS on Salary - 92B + purchase + percent + 0.3000 + + + + + + + + + + + + + Input Excise Duty 5% + Input Excise Duty 5% + purchase + percent + 0.0500 + + + + + + + + + + + + + Input Excise Duty 12% + Input Excise Duty 12% + purchase + percent + 0.1200 + + + + + + + + + + + + + Education Cess 2% - Purchase + Education Cess 2% - Purchase + purchase + percent + 0.0200 + 21 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% - Purchase + Seco. & Higher Edu. Cess 1% - Purchase + all + percent + 0.0100 + 22 + + + + + + + + + + + Excise Duty 12% - Sales + Excise Duty 12% - Sales + sale + percent + 0.1200 + + + + + + + + + + + + + + Education Cess 2% - Sales + Education Cess 2% - Sales + sale + percent + 0.0200 + 3 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% - Sales + Seco. & Higher Edu. Cess 1% - Sales + sale + percent + 0.0100 + 5 + + + + + + + + + + + Input Sec. & HEC - Capital Goods + Input Sec. & HEC - Capital Goods + purchase + percent + 0.01 + + + + + + + + + + + + + TDS on Contractor - 94C + TDS on Contractor - 94C + purchase + percent + 0.0200 + + + + + + + + + + + + + TDS on Director's Interest + TDS on Director's Interest + purchase + percent + 0.1 + + + + + + + + + + + + + TDS on Director's Remuneration - 92B + TDS on Director's Remuneration - 92B + purchase + percent + 0.3 + + + + + + + + + + + + + TDS on Interest + TDS on Interest + purchase + percent + 0.1 + + + + + + + + + + + + + TDS on Professional Fees - 94J + TDS on Professional Fees - 94J + purchase + percent + 0.1 + 1 + + + + + + + + + + + + + TDS on Rent - 94I + TDS on Rent-94I + purchase + percent + 0.1 + + + + + + + + + + + + + Input Edu. Cess - Capital Goods + Input Edu. Cess - Capital Goods + purchase + percent + 0.02 + + + + + + + + + + + + + Input Excise Duty 12% - Capital Goods + Input Excise Duty 12% - Capital Goods + purchase + percent 0.12 - percent - all - - 1 - - 1 - - 1 - - 1 - + + + + + + + + - - Service Tax-%2 - - - - - 1 - - 1 - - 1 - - 1 - 0.02 - percent - all - - - - - - Service Tax-%1 - 0.01 - - - - - 1 - - 1 - - 1 - - 1 - percent - all - - - - - - - Excise Duty-10.30% - - - - 0.10 + + Input VAT 4% + Input VAT 4% + purchase percent - sale - - 1 - - 1 - - 1 - - 1 - + 0.04 + 4 + + + + + + + + - - - Excise Duty-2% - 0.02 + + + Input Additional VAT 1% + Input Additional VAT 1% + purchase percent - sale - - - - 1 - - 1 - - 1 - - 1 - - - - - - Excise Duty-1% 0.01 - percent - sale - - - - 1 - - 1 - - 1 - - 1 - + 5 + + + + + + + + - + + + Input VAT 15% + Input VAT 15% + purchase + percent + 0.15 + 7 + + + + + + + + + + + + + Output VAT 4% + Output VAT 4% + sale + percent + 0.04 + 11 + + + + + + + + + + + + + Output Adi. VAT 1% + Output Adi. VAT 1% + sale + percent + 0.01 + 12 + + + + + + + + + + + + + CST 2% on Sales - Against Form - C + CST 2% on Sales - Against Form - C + sale + percent + 0.02 + 13 + + + + + + + + + + + + + + CST 5% on Sales + CST 5% on Sales + sale + percent + 0.05 + 14 + + + + + + + + + + + + + Input VAT 12.5% + Input VAT 12.5% + purchase + percent + 0.1250 + 60 + + + + + + + + + + + + + Input Additional VAT 2.5% + Input Additional VAT 2.5% + purchase + percent + 0.0250 + 80 + + + + + + + + + + + + + Input CST 2% + Input CST 2% + purchase + percent + 0.02 + 9333 + + + + + + + + + + + + + No Tax Form H + No Tax Form H + sale + percent + 0.02 + + + + + + + + + + + CST 2% on Sales - CT3 Against Form - C + CST 2% on Sales - CT3 Against Form - C + sale + percent + 0.02 + + + + + + + + + + + + + Output VAT 4% on Sales - CT3 + Output VAT 4% on Sales - CT3 + sale + percent + 0.04 + + + + + + + + + + + + + Output Adi. VAT 1% on Sales - CT3 + Output Adi. VAT 1% on Sales - CT3 + sale + percent + 0.01 + + + + + + + + + + + + + No Tax SEZ OGS + No Tax SEZ OGS + sale + fixed + + + + + + + + + + + No Tax SEZ Gujarat + No Tax SEZ Gujarat + sale + percent + + + + + + + + + + + No Tax Form H with BED + No Tax Form H with BED + sale + percent + + + + + + + + + + + No Tax Exports - Out of Country + No Tax Exports - Out of Country + sale + percent + + + + + + + + + + + No Tax Projects + No Tax Projects + sale + percent + + + + + + + + + + + Input Excise Duty 6% + Input Excise Duty 6% + purchase + percent + 0.0600 + 1 + + + + + + + + + + + + + Education Cess 2% Purchase + Education Cess 2% Purchase + purchase + percent + 0.0200 + 21 + + + + + + + + + + + Seco. & Higher Edu. Cess 1% Purchase + Seco. & Higher Edu. Cess 1% Purchase + purchase + percent + 0.0100 + 22 + + + + + + + + + + + Service Tax 12% - Sales + Service Tax 12% - Sales + sale + percent + 0.12 + 1 + + + + + + + + + + + + + Service Tax 2% - Sales + Service Tax 2% - Sales + sale + percent + 0.02 + 3 + + + + + + + + + + + Service Tax 1% - Sales + Service Tax 1% - Sales + sale + percent + 0.01 + 5 + + + + + + + + + \ No newline at end of file diff --git a/addons/l10n_in/l10n_in_tax_code_template.xml b/addons/l10n_in/l10n_in_tax_code_template.xml index 94217d79c3c..983d2fa4910 100644 --- a/addons/l10n_in/l10n_in_tax_code_template.xml +++ b/addons/l10n_in/l10n_in_tax_code_template.xml @@ -19,6 +19,7 @@ Tax Paid + -1 @@ -27,16 +28,540 @@ - - Base of Taxed Sales + Taxable Sale Bases - Base of Taxed Purchases + Taxable Purchase Bases + + Input CST 5% + + + + + Purchase CST 5% + + + + + Purchase Service Tax 12% + + + + + Sales Service Tax 12% + + + + + Excise Duty 12.36% - Sales + + + + + Excise Duty 12% - Sales + + + + + Excise Duty 2% - Sales + + + + + Excise Duty 1% - Sales + + + + + Excise Duty 12.36% - Purchase + + + + + Excise Duty 12% - Purchase + + + + + Education Cess 2% - Sales + + + + + Education Cess 2% - Purchase + + + + + Input Credit - Import Duty + + + + + Input Credit On Capital Goods - Edu. Cess + + + + + Input Excise Duty 12% - Capital Goods + + + + + Input Credit on Capital Goods - Seco. & HEC + + + + + Input Service Tax 12.36% + + + + + Input Service Tax 12% + + + + + Input Service Tax Edu. Cess. 2% + + + + + Input Service Tax Seco. & HEC 1% + + + + + Seco. & Higher Edu. Cess 1% - Purchase + + + + + Seco. & Higher Edu. Cess 1% - Sales + + + + + CST 2% on Sales + + + + + CST 5% on Sales + + + + + Input Additional VAT 1% + + + + + Input Additional Vat 2.5% + + + + + Input VAT 12.5% + + + + + Input VAT 15% + + + + + Input VAT 10% + + + + + Input VAT 8% + + + + + Input VAT 5% + + + + + Input VAT 4% + + + + + Output VAT 15% + + + + + Output VAT 12.5% + + + + + Output VAT 10% + + + + + Output VAT 8% + + + + + Output VAT 5% + + + + + Output VAT 4% + + + + + Output Adi. VAT 1% + + + + + CST 2% on Purchase + + + + + Input Excise Duty 5% + + + + + Input Excise Duty 6% + + + + + Input Credit - URD + + + + + TDS on Audit Fees - 94J + + + + + TDS on Commission Or Brokerage- 94H + + + + + TDS on Contractor-94C + + + + + TDS on Director's Interest + + + + + TDS on Director's Remuneration - 92B + + + + + TDS on Interest + + + + + TDS on Professional Fees - 94J + + + + + TDS on Rent - 94I + + + + + TDS on Salary - 92B + + + + + Import Purchase + + + + + Purchase VAT 4% / VAT 12.5% / VAT 15% / CST 2% / CST 5% + + + + + Plant & Machinery + + + + + Expense Accounts + + + + + Sales Excise + + + + + Sales CST 2% + + + + + Sales CST 5% + + + + + Purchase VAT 15% + + + + + Purchase VAT 12.5% + + + + + Purchase VAT 10% + + + + + Purchase VAT 8% + + + + + Purchase VAT 5% + + + + + Purchase VAT 4% + + + + + Purchase VAT 2.5% + + + + + Sales VAT 15% + + + + + Sales VAT 12.5% + + + + + Sales VAT 10% + + + + + Sales VAT 8% + + + + + Sales VAT 5% + + + + + Sales VAT 4% + + + + + Input CST 2% + + + + + Purchase URD + + + + + Base Expenses for TDS + + + + + Additional Duty (Imports) 4% + + + + + Sales Export - Form H - With Tax + + + + + CST 2% on Sales CT3 + + + + + Sales CT3 VAT + + + + + Output VAT 4% on Sales CT3 + + + + + Output Adi. VAT 1% on Sales CT3 + + + + + Sales CT3 CST + + + + + Sales Export - Form H - With CT1 + + + + + Sales Export - SEZ - Out of Gujarat + + + + + Sales Export - SEZ - In Gujarat + + + + + No Tax SEZ OGS + + + + + No Tax SEZ Gujarat + + + + + Sales Export - Out of Country + + + + + Sales Others (Projects) + + + + + No Tax Form H with BED + + + + + No Tax Form H + + + + + No Tax Export Out of Country + + + + + No Tax Projects + + + + + Service Tax 12.36% - Sales + + + + + Service Tax 12% - Sales + + + + + Service Tax 2% - Sales + + + + + Service Tax 1% - Sales + + + + + Sales Tax 15% + + + + + Sales Tax - 15% + + + + + Sales Tax 12% + + + + + Sales Tax - 12% + + + + + Sales Tax 4% + + + + + Sales Tax - 4% + + + + + Purchase Tax 15% + + + + + Purchase Tax - 15% + + + diff --git a/addons/l10n_in/static/src/img/icon.png b/addons/l10n_in/static/description/icon.png similarity index 100% rename from addons/l10n_in/static/src/img/icon.png rename to addons/l10n_in/static/description/icon.png diff --git a/addons/l10n_in_hr_payroll/i18n/zh_CN.po b/addons/l10n_in_hr_payroll/i18n/zh_CN.po new file mode 100644 index 00000000000..8ee2c7f2028 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/zh_CN.po @@ -0,0 +1,1013 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-11-24 02:53+0000\n" +"PO-Revision-Date: 2013-06-24 10:15+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: 2013-06-25 05:14+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "E-mail地址" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "员工银行帐号" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "职位" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +#: view:payslip.report:0 +msgid "Group By..." +msgstr "分组于..." + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "基本补贴:" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are in done state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +#: view:payslip.report:0 +#: field:payslip.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payslip.report,nbr:0 +msgid "# Payslip lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +#: view:payslip.report:0 +#: field:payslip.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payslip_report_all +msgid "This report performs analysis on Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +#: field:payslip.report,struct_id:0 +msgid "Structure" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:134 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "# Payslip Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Day of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "" +"If this box is checked which means that Payment Advice exists for current " +"batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:108 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:134 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:190 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:207 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payslip.report,paid:0 +msgid "Made Payment Order ? " +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payslip.report,state:0 +msgid "Rejected" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Year of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslip Line" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "" +"This wizard will print report which displays employees break-up of Net Head " +"for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,date_to:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +#: view:payslip.report:0 +#: field:payslip.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +#: view:payslip.report:0 +#: field:payslip.report,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:190 +#, python-format +msgid "" +"Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +#: view:payslip.report:0 +#: selection:payslip.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,date_from:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,state:0 +#: view:payslip.report:0 +#: field:payslip.report,state:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "" +"VPF is a safe option wherein you can contribute more than the PF ceiling of " +"12% that has been mandated by the government and VPF computed as " +"percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: view:payslip.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Month of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,supplementary_allowance:0 +msgid "Supplementary Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +#: field:payslip.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +#: selection:payslip.report,state:0 +msgid "Done" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "" +"This wizard will print report which display a pay head employee breakup for " +"a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +#: view:payslip.report:0 +#: field:payslip.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: field:payslip.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payslip_report_all +#: model:ir.model,name:l10n_in_hr_payroll.model_payslip_report +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payslip +#: view:payslip.report:0 +msgid "Payslip Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:108 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:207 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund (%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,house_rent_allowance_metro_nonmetro:0 +msgid "House Rent Allowance (%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +#: view:payslip.report:0 +#: field:payslip.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,total:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,house_rent_allowance_metro_nonmetro:0 +msgid "" +"HRA is an allowance given by the employer to the employee for taking care of " +"his rental or accommodation expenses for metro city it is 50 % and for non " +"metro 40%.HRA computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr "" diff --git a/addons/l10n_in_hr_payroll/static/src/img/icon.png b/addons/l10n_in_hr_payroll/static/description/icon.png similarity index 100% rename from addons/l10n_in_hr_payroll/static/src/img/icon.png rename to addons/l10n_in_hr_payroll/static/description/icon.png diff --git a/addons/l10n_it/static/src/img/icon.png b/addons/l10n_it/static/description/icon.png similarity index 100% rename from addons/l10n_it/static/src/img/icon.png rename to addons/l10n_it/static/description/icon.png diff --git a/addons/l10n_lu/static/src/img/icon.png b/addons/l10n_lu/static/description/icon.png similarity index 100% rename from addons/l10n_lu/static/src/img/icon.png rename to addons/l10n_lu/static/description/icon.png diff --git a/addons/l10n_ma/static/src/img/icon.png b/addons/l10n_ma/static/description/icon.png similarity index 100% rename from addons/l10n_ma/static/src/img/icon.png rename to addons/l10n_ma/static/description/icon.png diff --git a/addons/l10n_mx/static/src/img/icon.png b/addons/l10n_mx/static/description/icon.png similarity index 100% rename from addons/l10n_mx/static/src/img/icon.png rename to addons/l10n_mx/static/description/icon.png diff --git a/addons/l10n_nl/static/src/img/icon.png b/addons/l10n_nl/static/description/icon.png similarity index 100% rename from addons/l10n_nl/static/src/img/icon.png rename to addons/l10n_nl/static/description/icon.png diff --git a/addons/l10n_pa/static/src/img/icon.png b/addons/l10n_pa/static/description/icon.png similarity index 100% rename from addons/l10n_pa/static/src/img/icon.png rename to addons/l10n_pa/static/description/icon.png diff --git a/addons/l10n_pe/static/src/img/icon.png b/addons/l10n_pe/static/description/icon.png similarity index 100% rename from addons/l10n_pe/static/src/img/icon.png rename to addons/l10n_pe/static/description/icon.png diff --git a/addons/l10n_pl/static/src/img/icon.png b/addons/l10n_pl/static/description/icon.png similarity index 100% rename from addons/l10n_pl/static/src/img/icon.png rename to addons/l10n_pl/static/description/icon.png diff --git a/addons/l10n_ro/static/src/img/icon.png b/addons/l10n_ro/static/description/icon.png similarity index 100% rename from addons/l10n_ro/static/src/img/icon.png rename to addons/l10n_ro/static/description/icon.png diff --git a/addons/l10n_si/static/src/img/icon.png b/addons/l10n_si/static/description/icon.png similarity index 100% rename from addons/l10n_si/static/src/img/icon.png rename to addons/l10n_si/static/description/icon.png diff --git a/addons/l10n_th/static/src/img/icon.png b/addons/l10n_th/static/description/icon.png similarity index 100% rename from addons/l10n_th/static/src/img/icon.png rename to addons/l10n_th/static/description/icon.png diff --git a/addons/l10n_tr/static/src/img/icon.png b/addons/l10n_tr/static/description/icon.png similarity index 100% rename from addons/l10n_tr/static/src/img/icon.png rename to addons/l10n_tr/static/description/icon.png diff --git a/addons/l10n_uk/static/src/img/icon.png b/addons/l10n_uk/static/description/icon.png similarity index 100% rename from addons/l10n_uk/static/src/img/icon.png rename to addons/l10n_uk/static/description/icon.png diff --git a/addons/l10n_us/static/src/img/icon.png b/addons/l10n_us/static/description/icon.png similarity index 100% rename from addons/l10n_us/static/src/img/icon.png rename to addons/l10n_us/static/description/icon.png diff --git a/addons/l10n_uy/static/src/img/icon.png b/addons/l10n_uy/static/description/icon.png similarity index 100% rename from addons/l10n_uy/static/src/img/icon.png rename to addons/l10n_uy/static/description/icon.png diff --git a/addons/l10n_ve/static/src/img/icon.png b/addons/l10n_ve/static/description/icon.png similarity index 100% rename from addons/l10n_ve/static/src/img/icon.png rename to addons/l10n_ve/static/description/icon.png diff --git a/addons/l10n_vn/static/src/img/icon.png b/addons/l10n_vn/static/description/icon.png similarity index 100% rename from addons/l10n_vn/static/src/img/icon.png rename to addons/l10n_vn/static/description/icon.png diff --git a/addons/lunch/static/src/img/icon.png b/addons/lunch/static/description/icon.png similarity index 100% rename from addons/lunch/static/src/img/icon.png rename to addons/lunch/static/description/icon.png diff --git a/addons/mail/i18n/th.po b/addons/mail/i18n/th.po new file mode 100644 index 00000000000..a80d1aad14f --- /dev/null +++ b/addons/mail/i18n/th.po @@ -0,0 +1,1702 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-28 17:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Thai \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: mail +#: view:mail.followers:0 +msgid "Followers Form" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "" + +#. module: mail +#: field:mail.compose.message,author_id:0 +#: view:mail.mail:0 +#: field:mail.message,author_id:0 +msgid "Author" +msgstr "ผู้สร้าง" + +#. module: mail +#: view:mail.mail:0 +msgid "Message Details" +msgstr "รายละเอียดข้อความ" + +#. module: mail +#: help:mail.mail,email_to:0 +msgid "Message recipients" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,default:0 +msgid "Activated by default when subscribing." +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Comments" +msgstr "ความคิดเห็น" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "Group By..." +msgstr "กลุ่มตาม..." + +#. module: mail +#: help:mail.compose.message,body:0 +#: help:mail.message,body:0 +msgid "Automatically sanitized HTML contents" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_name:0 +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard +#: view:mail.compose.message:0 +msgid "Compose Email" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:132 +#, python-format +msgid "Add them into recipients and followers" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group Name" +msgstr "ชื่อกลุ่ม" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Public" +msgstr "เปิดเผย" + +#. module: mail +#: view:mail.mail:0 +msgid "Body" +msgstr "เนื้อหา" + +#. module: mail +#: view:mail.message:0 +msgid "Show messages to read" +msgstr "แสดงข้อความที่จะอ่าน" + +#. module: mail +#: help:mail.compose.message,email_from:0 +#: help:mail.message,email_from:0 +msgid "" +"Email address of the sender. This field is set when no matching partner is " +"found for incoming emails." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:23 +#, python-format +msgid "Add others" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: mail +#: field:mail.group,message_unread:0 +#: field:mail.thread,message_unread:0 +#: field:res.partner,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ยังไม่ได้อ่าน" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "show" +msgstr "" + +#. module: mail +#: help:mail.group,group_ids:0 +msgid "" +"Members of those groups will automatically added as followers. Note that " +"they will be able to manage their subscription manually if necessary." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:1029 +#, python-format +msgid "Do you really want to delete this message?" +msgstr "" + +#. module: mail +#: view:mail.message:0 +#: field:mail.notification,read:0 +msgid "Read" +msgstr "อ่าน" + +#. module: mail +#: view:mail.group:0 +msgid "Search Groups" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:157 +#, python-format +msgid "followers" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:737 +#, python-format +msgid "Access Denied" +msgstr "ไม่ได้รับอนุญาตให้เข้าใช้" + +#. module: mail +#: help:mail.group,image_medium:0 +msgid "" +"Medium-sized photo of the group. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:212 +#, python-format +msgid "Uploading error" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_support +msgid "Support" +msgstr "สนับสนุน" + +#. module: mail +#: code:addons/mail/mail_message.py:738 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Received" +msgstr "ได้รับ" + +#. module: mail +#: view:mail.mail:0 +msgid "Thread" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "Open the full mail composer" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "ò" +msgstr "" + +#. module: mail +#: field:base.config.settings,alias_domain:0 +msgid "Alias Domain" +msgstr "" + +#. module: mail +#: field:mail.group,group_ids:0 +msgid "Auto Subscription" +msgstr "" + +#. module: mail +#: field:mail.mail,references:0 +msgid "References" +msgstr "แหล่งอ้างอิง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:206 +#, python-format +msgid "No messages." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_group +msgid "Discussion group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:96 +#: code:addons/mail/static/src/xml/mail.xml:108 +#, python-format +msgid "uploading" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "more." +msgstr "" + +#. module: mail +#: help:mail.compose.message,type:0 +#: help:mail.message,type:0 +msgid "" +"Message type: email for email message, notification for system message, " +"comment for other messages such as user replies" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,relation_field:0 +msgid "" +"Field used to link the related model to the subtype model when using " +"automatic subscription on a related document. The field is used to compute " +"getattr(related_document.relation_field)." +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Cancelled" +msgstr "ยกเลิกแล้ว" + +#. module: mail +#: field:mail.mail,reply_to:0 +msgid "Reply-To" +msgstr "ตอบกลับไปยัง" + +#. module: mail +#: code:addons/mail/wizard/invite.py:37 +#, python-format +msgid "
You have been invited to follow %s.
" +msgstr "" + +#. module: mail +#: help:mail.group,message_unread:0 +#: help:mail.thread,message_unread:0 +#: help:res.partner,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: mail +#: field:mail.group,image_medium:0 +msgid "Medium-sized photo" +msgstr "ภาพขนาดกลาง" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_to_me_feeds +#: model:ir.ui.menu,name:mail.mail_tomefeeds +msgid "To: me" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,name:0 +msgid "Message Type" +msgstr "ประเภทข้อความ" + +#. module: mail +#: field:mail.mail,auto_delete:0 +msgid "Auto Delete" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:12 +#: view:mail.group:0 +#, python-format +msgid "Unfollow" +msgstr "เลิกติดตาม" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:312 +#, python-format +msgid "show one more message" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "Invalid Action!" +msgstr "การกระทำไม่ถูกต้อง!" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:25 +#, python-format +msgid "User img" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_mail +#: model:ir.ui.menu,name:mail.menu_mail_mail +#: view:mail.mail:0 +#: view:mail.message:0 +msgid "Emails" +msgstr "อีเมล์" + +#. module: mail +#: field:mail.followers,partner_id:0 +msgid "Related Partner" +msgstr "" + +#. module: mail +#: help:mail.group,message_summary:0 +#: help:mail.thread,message_summary:0 +#: help:res.partner,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: mail +#: help:mail.alias,alias_model_id:0 +msgid "" +"The model (OpenERP Document Kind) to which this alias corresponds. Any " +"incoming email that does not reply to an existing record will cause the " +"creation of a new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,relation_field:0 +msgid "Relation field" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: selection:mail.message,type:0 +msgid "System notification" +msgstr "การแจ้งเตือนระบบ" + +#. module: mail +#: model:ir.model,name:mail.model_res_partner +msgid "Partner" +msgstr "พาร์ทเนอร์" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_my_stuff +msgid "Organizer" +msgstr "ผู้จัด" + +#. module: mail +#: field:mail.compose.message,subject:0 +#: field:mail.message,subject:0 +msgid "Subject" +msgstr "ชื่อเรื่อง" + +#. module: mail +#: field:mail.wizard.invite,partner_ids:0 +msgid "Partners" +msgstr "พาร์ทเนอร์" + +#. module: mail +#: view:mail.mail:0 +msgid "Retry" +msgstr "ลองใหม่" + +#. module: mail +#: field:mail.compose.message,email_from:0 +#: field:mail.mail,email_from:0 +#: field:mail.message,email_from:0 +msgid "From" +msgstr "จาก" + +#. module: mail +#: view:mail.mail:0 +#: view:mail.message.subtype:0 +msgid "Email message" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_base_config_settings +msgid "base.config.settings" +msgstr "base.config.settings" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:36 +#: view:mail.compose.message:0 +#, python-format +msgid "Send" +msgstr "ส่ง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:153 +#, python-format +msgid "No followers" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Failed" +msgstr "ล้มเหลว" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:22 +#: model:ir.actions.act_window,name:mail.action_view_followers +#: model:ir.ui.menu,name:mail.menu_email_followers +#: view:mail.followers:0 +#: field:mail.group,message_follower_ids:0 +#: field:mail.thread,message_follower_ids:0 +#: field:res.partner,message_follower_ids:0 +#, python-format +msgid "Followers" +msgstr "ติดตาม" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_archives_feeds +#: model:ir.ui.menu,name:mail.mail_archivesfeeds +msgid "Archives" +msgstr "ที่เก็บถาวร" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:95 +#: code:addons/mail/static/src/xml/mail.xml:107 +#, python-format +msgid "Delete this attachment" +msgstr "ลบสิ่งที่แนบมานี้" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:245 +#: view:mail.mail:0 +#, python-format +msgid "Reply" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:155 +#, python-format +msgid "One follower" +msgstr "" + +#. module: mail +#: field:mail.compose.message,type:0 +#: field:mail.message,type:0 +msgid "Type" +msgstr "ชนิด" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Email" +msgstr "อีเมล์" + +#. module: mail +#: field:ir.ui.menu,mail_group_id:0 +msgid "Mail Group" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Comments and Emails" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_defaults:0 +msgid "Default Values" +msgstr "ค่าปริยาย" + +#. module: mail +#: code:addons/mail/res_users.py:89 +#, python-format +msgid "%s has joined the %s network." +msgstr "" + +#. module: mail +#: help:mail.group,image_small:0 +msgid "" +"Small-sized photo of the group. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: field:mail.message,partner_ids:0 +msgid "Recipients" +msgstr "ผู้รับ" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:140 +#, python-format +msgid "<<<" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:43 +#, python-format +msgid "Write to the followers of this document..." +msgstr "" + +#. module: mail +#: field:mail.group,group_public_id:0 +msgid "Authorized Group" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Join Group" +msgstr "" + +#. module: mail +#: help:mail.mail,email_from:0 +msgid "Message sender, taken from user preferences." +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/invite.py:40 +#, python-format +msgid "
You have been invited to follow a new document.
" +msgstr "" + +#. module: mail +#: field:mail.compose.message,parent_id:0 +#: field:mail.message,parent_id:0 +msgid "Parent Message" +msgstr "" + +#. module: mail +#: field:mail.compose.message,res_id:0 +#: field:mail.followers,res_id:0 +#: field:mail.message,res_id:0 +#: field:mail.wizard.invite,res_id:0 +msgid "Related Document ID" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_to_me_feeds +msgid "" +"

\n" +" No private message.\n" +"

\n" +" This list contains messages sent to you.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_rd +msgid "R&D" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:61 +#, python-format +msgid "/web/binary/upload_attachment" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Advanced" +msgstr "ขั้นสูง" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:244 +#, python-format +msgid "Move to Inbox" +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/mail_compose_message.py:193 +#, python-format +msgid "Re:" +msgstr "" + +#. module: mail +#: field:mail.compose.message,to_read:0 +#: field:mail.message,to_read:0 +msgid "To read" +msgstr "" + +#. module: mail +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "" +"You may not create a user. To create new users, you should use the " +"\"Settings > Users\" menu." +msgstr "" + +#. module: mail +#: help:mail.followers,res_model:0 +#: help:mail.wizard.invite,res_model:0 +msgid "Model of the followed resource" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:337 +#, python-format +msgid "like" +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:47 +#, python-format +msgid "Share with my followers..." +msgstr "" + +#. module: mail +#: field:mail.notification,partner_id:0 +msgid "Contact" +msgstr "ที่อยู่ติดต่อ" + +#. module: mail +#: view:mail.group:0 +msgid "" +"Only the invited followers can read the\n" +" discussions on this group." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_ir_ui_menu +msgid "ir.ui.menu" +msgstr "ir.ui.menu" + +#. module: mail +#: view:mail.message:0 +msgid "Has attachments" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "on" +msgstr "เปิด" + +#. module: mail +#: code:addons/mail/mail_message.py:926 +#, python-format +msgid "" +"The following partners chosen as recipients for the email have no email " +"address linked :" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_defaults:0 +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message_subtype +msgid "Message subtypes" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notified_partner_ids:0 +#: help:mail.message,notified_partner_ids:0 +msgid "" +"Partners that have a notification pushing this message in their mailboxes" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Comment" +msgstr "ความคิดเห็น" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_inbox_feeds +msgid "" +"

\n" +" Good Job! Your inbox is empty.\n" +"

\n" +" Your inbox contains private messages or emails sent to " +"you\n" +" as well as information related to documents or people " +"you\n" +" follow.\n" +"

\n" +" " +msgstr "" +"

\n" +" เยี่ยมยอด! คุณอ่านข้อความหมดแล้ว\n" +"

\n" +" ขอความร่วมมือ ภาษาไทยสำหรับ OpenERP นั้น " +"ยังไม่สมบรูณ์และถูกต้อง \n" +"

เลือกหมวด Translations เพื่อแนะนำการแปลได้ที่

\n" +"\n" +" https://launchpad.net/openobject-addons : business " +"application modules\n" +" https://launchpad.net/openobject-server : the " +"framework\n" +" https://launchpad.net/openerp-web : web " +"modules and frontend\n" +"

\n" +" " + +#. module: mail +#: field:mail.mail,notification:0 +msgid "Is Notification" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:188 +#, python-format +msgid "Compose a new message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Send Now" +msgstr "ส่งทันที" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#, python-format +msgid "" +"Unable to send email, please configure the sender's email address or alias." +msgstr "" + +#. module: mail +#: help:res.users,alias_id:0 +msgid "" +"Email address internally associated with this user. Incoming emails will " +"appear in the user's notifications." +msgstr "" + +#. module: mail +#: field:mail.group,image:0 +msgid "Photo" +msgstr "รูปภาพ" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:54 +#: code:addons/mail/static/src/xml/mail.xml:191 +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +#, python-format +msgid "or" +msgstr "หรือ" + +#. module: mail +#: help:mail.compose.message,vote_user_ids:0 +#: help:mail.message,vote_user_ids:0 +msgid "Users that voted for this message" +msgstr "" + +#. module: mail +#: help:mail.group,alias_id:0 +msgid "" +"The email address associated with this group. New emails received will " +"automatically create new topics." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Month" +msgstr "เดือน" + +#. module: mail +#: view:mail.mail:0 +msgid "Email Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,child_ids:0 +#: field:mail.message,child_ids:0 +msgid "Child Messages" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_user_id:0 +msgid "Owner" +msgstr "เจ้าของ" + +#. module: mail +#: model:ir.model,name:mail.model_res_users +msgid "Users" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message +#: field:mail.mail,mail_message_id:0 +#: view:mail.message:0 +#: field:mail.notification,message_id:0 +#: field:mail.wizard.invite,message:0 +msgid "Message" +msgstr "ข้อความ" + +#. module: mail +#: help:mail.followers,res_id:0 +#: help:mail.wizard.invite,res_id:0 +msgid "Id of the followed resource" +msgstr "" + +#. module: mail +#: field:mail.compose.message,body:0 +#: field:mail.message,body:0 +msgid "Contents" +msgstr "เนื้อหา" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_alias +#: model:ir.ui.menu,name:mail.mail_alias_menu +msgid "Aliases" +msgstr "นามแฝง" + +#. module: mail +#: help:mail.message.subtype,description:0 +msgid "" +"Description that will be added in the message posted for this subtype. If " +"void, the name will be added instead." +msgstr "" + +#. module: mail +#: field:mail.compose.message,vote_user_ids:0 +#: field:mail.message,vote_user_ids:0 +msgid "Votes" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group" +msgstr "กลุ่ม" + +#. module: mail +#: help:mail.compose.message,starred:0 +#: help:mail.message,starred:0 +msgid "Current user has a starred notification linked to this message" +msgstr "" + +#. module: mail +#: field:mail.group,public:0 +msgid "Privacy" +msgstr "ความเป็นส่วนตัว" + +#. module: mail +#: view:mail.mail:0 +msgid "Notification" +msgstr "การแจ้งเตือน" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:654 +#, python-format +msgid "Please complete partner's informations" +msgstr "" + +#. module: mail +#: view:mail.wizard.invite:0 +msgid "Add Followers" +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +msgid "Followers of selected items and" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_force_thread_id:0 +msgid "Record Thread ID" +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_group_root +msgid "My Groups" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_archives_feeds +msgid "" +"

\n" +" No message found and no message sent yet.\n" +"

\n" +" Click on the top-right icon to compose a message. This\n" +" message will be sent by email if it's an internal " +"contact.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: field:mail.mail,state:0 +msgid "Status" +msgstr "สถานะ" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Outgoing" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "All feeds" +msgstr "" + +#. module: mail +#: help:mail.compose.message,record_name:0 +#: help:mail.message,record_name:0 +msgid "Name get of the related document." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_notifications +#: model:ir.model,name:mail.model_mail_notification +#: model:ir.ui.menu,name:mail.menu_email_notifications +#: field:mail.compose.message,notification_ids:0 +#: view:mail.message:0 +#: field:mail.message,notification_ids:0 +#: view:mail.notification:0 +msgid "Notifications" +msgstr "การแจ้งให้ทราบ" + +#. module: mail +#: view:mail.alias:0 +msgid "Search Alias" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_force_thread_id:0 +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: mail +#: help:mail.message.subtype,name:0 +msgid "" +"Message subtype gives a more precise type on the message, especially for " +"system notifications. For example, it can be a notification related to a new " +"record (New), or to a stage change in a process (Stage change). Message " +"subtypes allow to precisely tune the notifications the user want to receive " +"on its wall." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "by" +msgstr "โดย" + +#. module: mail +#: model:mail.group,name:mail.group_best_sales_practices +msgid "Best Sales Practices" +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Selected Group Only" +msgstr "" + +#. module: mail +#: field:mail.group,message_is_follower:0 +#: field:mail.thread,message_is_follower:0 +#: field:res.partner,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "User" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Groups" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Messages Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,date:0 +#: field:mail.message,date:0 +msgid "Date" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:34 +#, python-format +msgid "Post" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Extended Filters..." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:120 +#, python-format +msgid "To:" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:193 +#, python-format +msgid "Write to my followers" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,default:0 +msgid "Default" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:311 +#, python-format +msgid "show more message" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:246 +#, python-format +msgid "Mark as Todo" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,parent_id:0 +msgid "Parent subtype, used for automatic subscription." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_wizard_invite +msgid "Invite wizard" +msgstr "" + +#. module: mail +#: field:mail.group,message_summary:0 +#: field:mail.thread,message_summary:0 +#: field:res.partner,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,res_model:0 +msgid "" +"Model the subtype applies to. If False, this subtype applies to all models." +msgstr "" + +#. module: mail +#: field:mail.compose.message,subtype_id:0 +#: field:mail.followers,subtype_ids:0 +#: field:mail.message,subtype_id:0 +#: view:mail.message.subtype:0 +msgid "Subtype" +msgstr "ประเภทย่อย" + +#. module: mail +#: view:mail.group:0 +msgid "Group Form" +msgstr "" + +#. module: mail +#: field:mail.compose.message,starred:0 +#: field:mail.message,starred:0 +#: field:mail.notification,starred:0 +msgid "Starred" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "more messages" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:13 +#, python-format +msgid "Following" +msgstr "" + +#. module: mail +#: sql_constraint:mail.alias:0 +msgid "" +"Unfortunately this email alias is already used, please choose a unique one" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_user_id:0 +msgid "" +"The owner of records created upon receiving emails on this alias. If this " +"field is not set the system will attempt to find the right owner based on " +"the sender (From) address, or will use the Administrator account if no " +"system user is found for that address." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "And" +msgstr "" + +#. module: mail +#: field:mail.compose.message,message_id:0 +#: field:mail.message,message_id:0 +msgid "Message-Id" +msgstr "" + +#. module: mail +#: help:mail.group,image:0 +msgid "" +"This field holds the image used as photo for the group, limited to " +"1024x1024px." +msgstr "" + +#. module: mail +#: field:mail.compose.message,attachment_ids:0 +#: view:mail.mail:0 +#: field:mail.message,attachment_ids:0 +msgid "Attachments" +msgstr "" + +#. module: mail +#: field:mail.compose.message,record_name:0 +#: field:mail.message,record_name:0 +msgid "Message Record Name" +msgstr "" + +#. module: mail +#: field:mail.mail,email_cc:0 +msgid "Cc" +msgstr "" + +#. module: mail +#: help:mail.notification,starred:0 +msgid "Starred message that goes into the todo mailbox" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:123 +#: view:mail.compose.message:0 +#, python-format +msgid "Followers of" +msgstr "" + +#. module: mail +#: help:mail.mail,auto_delete:0 +msgid "Permanently delete this email after sending it, to save space" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_group_feeds +msgid "Discussion Group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:242 +#, python-format +msgid "Done" +msgstr "" + +#. module: mail +#: model:mail.message.subtype,name:mail.mt_comment +msgid "Discussions" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:11 +#, python-format +msgid "Follow" +msgstr "" + +#. module: mail +#: field:mail.group,name:0 +msgid "Name" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_all_employees +msgid "Whole Company" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:129 +#: code:addons/mail/static/src/xml/mail.xml:292 +#: view:mail.compose.message:0 +#, python-format +msgid "and" +msgstr "" + +#. module: mail +#: help:mail.mail,body_html:0 +msgid "Rich-text/HTML message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Creation Month" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:323 +#, python-format +msgid "Compose new Message" +msgstr "" + +#. module: mail +#: field:mail.group,menu_id:0 +msgid "Related Menu" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Content" +msgstr "" + +#. module: mail +#: field:mail.mail,email_to:0 +msgid "To" +msgstr "" + +#. module: mail +#: field:mail.compose.message,notified_partner_ids:0 +#: field:mail.message,notified_partner_ids:0 +msgid "Notified partners" +msgstr "" + +#. module: mail +#: help:mail.group,public:0 +msgid "" +"This group is visible by non members. Invisible groups can add " +"members through the invite button." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_board +msgid "Board meetings" +msgstr "" + +#. module: mail +#: constraint:mail.alias:0 +msgid "" +"Invalid expression, it must be a literal python dictionary definition e.g. " +"\"{'field': 'value'}\"" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_model_id:0 +msgid "Aliased Model" +msgstr "" + +#. module: mail +#: help:mail.compose.message,message_id:0 +#: help:mail.message,message_id:0 +msgid "Message unique identifier" +msgstr "" + +#. module: mail +#: field:mail.group,description:0 +#: field:mail.message.subtype,description:0 +msgid "Description" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_followers +msgid "Document Followers" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:35 +#, python-format +msgid "Remove this follower" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Never" +msgstr "" + +#. module: mail +#: field:mail.mail,mail_server_id:0 +msgid "Outgoing mail server" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:930 +#, python-format +msgid "Partners email addresses not found" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Sent" +msgstr "" + +#. module: mail +#: field:mail.mail,body_html:0 +msgid "Rich-text Contents" +msgstr "" + +#. module: mail +#: help:mail.compose.message,to_read:0 +#: help:mail.message,to_read:0 +msgid "Current user has an unread notification linked to this message" +msgstr "" + +#. module: mail +#: help:res.partner,notification_email_send:0 +msgid "" +"Choose in which case you want to receive an email when you receive new feeds." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_groups +#: model:ir.ui.menu,name:mail.mail_allgroups +msgid "Join a group" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_group_feeds +msgid "" +"

\n" +" No message in this group.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:213 +#, python-format +msgid "Please, wait while the file is uploading." +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "" +"This group is visible by everyone,\n" +" including your customers if you " +"installed\n" +" the portal module." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:243 +#, python-format +msgid "Set back to Todo" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:126 +#, python-format +msgid "this document" +msgstr "" + +#. module: mail +#: field:mail.compose.message,filter_id:0 +msgid "Filters" +msgstr "" + +#. module: mail +#: field:res.partner,notification_email_send:0 +msgid "Receive Feeds by Email" +msgstr "" + +#. module: mail +#: help:base.config.settings,alias_domain:0 +msgid "" +"If you have setup a catch-all email domain redirected to the OpenERP server, " +"enter the domain name here." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_message +#: model:ir.ui.menu,name:mail.menu_mail_message +#: field:mail.group,message_ids:0 +#: view:mail.message:0 +#: field:mail.thread,message_ids:0 +#: field:res.partner,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:139 +#, python-format +msgid "others..." +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_star_feeds +#: model:ir.ui.menu,name:mail.mail_starfeeds +msgid "To-do" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.alias,alias_name:0 +#: field:mail.group,alias_id:0 +#: field:res.users,alias_id:0 +msgid "Alias" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notification_ids:0 +#: help:mail.message,notification_ids:0 +msgid "" +"Technical field holding the message notifications. Use notified_partner_ids " +"to access notified partners." +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_feeds +#: model:ir.ui.menu,name:mail.mail_feeds_main +msgid "Messaging" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.message.subtype,res_model:0 +msgid "Model" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Unread" +msgstr "" + +#. module: mail +#: help:mail.followers,subtype_ids:0 +msgid "" +"Message subtypes followed, meaning subtypes that will be pushed onto the " +"user's Wall." +msgstr "" + +#. module: mail +#: help:mail.group,message_ids:0 +#: help:mail.thread,message_ids:0 +#: help:res.partner,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: mail +#: help:mail.mail,references:0 +msgid "Message references, such as identifiers of previous messages" +msgstr "" + +#. module: mail +#: field:mail.compose.message,composition_mode:0 +msgid "Composition mode" +msgstr "" + +#. module: mail +#: field:mail.compose.message,model:0 +#: field:mail.followers,res_model:0 +#: field:mail.message,model:0 +#: field:mail.wizard.invite,res_model:0 +msgid "Related Document Model" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:338 +#, python-format +msgid "unlike" +msgstr "" + +#. module: mail +#: help:mail.compose.message,author_id:0 +#: help:mail.message,author_id:0 +msgid "" +"Author of the message. If not set, email_from may hold an email address that " +"did not match any partner." +msgstr "" + +#. module: mail +#: help:mail.mail,email_cc:0 +msgid "Carbon copy message recipients" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_domain:0 +msgid "Alias domain" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error during communication with the publisher warranty server." +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Private" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_star_feeds +msgid "" +"

\n" +" No todo.\n" +"

\n" +" When you process messages in your inbox, you can mark " +"some\n" +" as todo. From this menu, you can process all your " +"todo.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Delivery Failed" +msgstr "" + +#. module: mail +#: field:mail.compose.message,partner_ids:0 +msgid "Additional contacts" +msgstr "" + +#. module: mail +#: help:mail.compose.message,parent_id:0 +#: help:mail.message,parent_id:0 +msgid "Initial thread message." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_hr_policies +msgid "HR Policies" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Emails only" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_inbox_feeds +#: model:ir.ui.menu,name:mail.mail_inboxfeeds +msgid "Inbox" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:58 +#, python-format +msgid "File" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/many2many_tags_email.js:63 +#, python-format +msgid "Please complete partner's informations and Email" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_message_subtype +#: model:ir.ui.menu,name:mail.menu_message_subtype +msgid "Subtypes" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_alias +msgid "Email Aliases" +msgstr "" + +#. module: mail +#: field:mail.group,image_small:0 +msgid "Small-sized photo" +msgstr "" + +#. module: mail +#: help:mail.mail,reply_to:0 +msgid "Preferred response address for the message" +msgstr "" diff --git a/addons/mail/i18n/vi.po b/addons/mail/i18n/vi.po new file mode 100644 index 00000000000..9f7569bddf7 --- /dev/null +++ b/addons/mail/i18n/vi.po @@ -0,0 +1,1687 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-27 06:35+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: mail +#: view:mail.followers:0 +msgid "Followers Form" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_publisher_warranty_contract +msgid "publisher_warranty.contract" +msgstr "" + +#. module: mail +#: field:mail.compose.message,author_id:0 +#: view:mail.mail:0 +#: field:mail.message,author_id:0 +msgid "Author" +msgstr "Tác giả" + +#. module: mail +#: view:mail.mail:0 +msgid "Message Details" +msgstr "Chi tiết tin nhắn" + +#. module: mail +#: help:mail.mail,email_to:0 +msgid "Message recipients" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,default:0 +msgid "Activated by default when subscribing." +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Comments" +msgstr "Bình luận" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "Group By..." +msgstr "Nhóm theo..." + +#. module: mail +#: help:mail.compose.message,body:0 +#: help:mail.message,body:0 +msgid "Automatically sanitized HTML contents" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_name:0 +msgid "" +"The name of the email alias, e.g. 'jobs' if you want to catch emails for " +"" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard +#: view:mail.compose.message:0 +msgid "Compose Email" +msgstr "Soạn thư mới" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:132 +#, python-format +msgid "Add them into recipients and followers" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group Name" +msgstr "Tên nhóm" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Public" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Body" +msgstr "Nội dung" + +#. module: mail +#: view:mail.message:0 +msgid "Show messages to read" +msgstr "" + +#. module: mail +#: help:mail.compose.message,email_from:0 +#: help:mail.message,email_from:0 +msgid "" +"Email address of the sender. This field is set when no matching partner is " +"found for incoming emails." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:23 +#, python-format +msgid "Add others" +msgstr "Thêm" + +#. module: mail +#: field:mail.message.subtype,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: mail +#: field:mail.group,message_unread:0 +#: field:mail.thread,message_unread:0 +#: field:res.partner,message_unread:0 +msgid "Unread Messages" +msgstr "Tin chưa đọc" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "show" +msgstr "hiển thị" + +#. module: mail +#: help:mail.group,group_ids:0 +msgid "" +"Members of those groups will automatically added as followers. Note that " +"they will be able to manage their subscription manually if necessary." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:1029 +#, python-format +msgid "Do you really want to delete this message?" +msgstr "Bạn có chắc muốn xóa tin nhắn này?" + +#. module: mail +#: view:mail.message:0 +#: field:mail.notification,read:0 +msgid "Read" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Search Groups" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:157 +#, python-format +msgid "followers" +msgstr "theo dõi" + +#. module: mail +#: code:addons/mail/mail_message.py:737 +#, python-format +msgid "Access Denied" +msgstr "Từ chối truy cập" + +#. module: mail +#: help:mail.group,image_medium:0 +msgid "" +"Medium-sized photo of the group. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:212 +#, python-format +msgid "Uploading error" +msgstr "Lỗi tải lên" + +#. module: mail +#: model:mail.group,name:mail.group_support +msgid "Support" +msgstr "Hỗ trợ" + +#. module: mail +#: code:addons/mail/mail_message.py:738 +#, python-format +msgid "" +"The requested operation cannot be completed due to security restrictions. " +"Please contact your system administrator.\n" +"\n" +"(Document type: %s, Operation: %s)" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Received" +msgstr "Đã nhận" + +#. module: mail +#: view:mail.mail:0 +msgid "Thread" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "Open the full mail composer" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:29 +#, python-format +msgid "ò" +msgstr "" + +#. module: mail +#: field:base.config.settings,alias_domain:0 +msgid "Alias Domain" +msgstr "" + +#. module: mail +#: field:mail.group,group_ids:0 +msgid "Auto Subscription" +msgstr "" + +#. module: mail +#: field:mail.mail,references:0 +msgid "References" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:206 +#, python-format +msgid "No messages." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_group +msgid "Discussion group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:96 +#: code:addons/mail/static/src/xml/mail.xml:108 +#, python-format +msgid "uploading" +msgstr "đang tải lên" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "more." +msgstr "thêm nữa." + +#. module: mail +#: help:mail.compose.message,type:0 +#: help:mail.message,type:0 +msgid "" +"Message type: email for email message, notification for system message, " +"comment for other messages such as user replies" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,relation_field:0 +msgid "" +"Field used to link the related model to the subtype model when using " +"automatic subscription on a related document. The field is used to compute " +"getattr(related_document.relation_field)." +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Cancelled" +msgstr "Đã hủy" + +#. module: mail +#: field:mail.mail,reply_to:0 +msgid "Reply-To" +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/invite.py:37 +#, python-format +msgid "
You have been invited to follow %s.
" +msgstr "" + +#. module: mail +#: help:mail.group,message_unread:0 +#: help:mail.thread,message_unread:0 +#: help:res.partner,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: mail +#: field:mail.group,image_medium:0 +msgid "Medium-sized photo" +msgstr "Ảnh cỡ trung" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_to_me_feeds +#: model:ir.ui.menu,name:mail.mail_tomefeeds +msgid "To: me" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,name:0 +msgid "Message Type" +msgstr "" + +#. module: mail +#: field:mail.mail,auto_delete:0 +msgid "Auto Delete" +msgstr "Tự động xóa" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:12 +#: view:mail.group:0 +#, python-format +msgid "Unfollow" +msgstr "Hủy theo dõi" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:312 +#, python-format +msgid "show one more message" +msgstr "hiện theo một tin nữa" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "Invalid Action!" +msgstr "Hành động không hợp lệ!" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:25 +#, python-format +msgid "User img" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_mail +#: model:ir.ui.menu,name:mail.menu_mail_mail +#: view:mail.mail:0 +#: view:mail.message:0 +msgid "Emails" +msgstr "" + +#. module: mail +#: field:mail.followers,partner_id:0 +msgid "Related Partner" +msgstr "Đối tác liên quan" + +#. module: mail +#: help:mail.group,message_summary:0 +#: help:mail.thread,message_summary:0 +#: help:res.partner,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: mail +#: help:mail.alias,alias_model_id:0 +msgid "" +"The model (OpenERP Document Kind) to which this alias corresponds. Any " +"incoming email that does not reply to an existing record will cause the " +"creation of a new record of this model (e.g. a Project Task)" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,relation_field:0 +msgid "Relation field" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: selection:mail.message,type:0 +msgid "System notification" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_res_partner +msgid "Partner" +msgstr "Đối tác" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_my_stuff +msgid "Organizer" +msgstr "Tổ chức" + +#. module: mail +#: field:mail.compose.message,subject:0 +#: field:mail.message,subject:0 +msgid "Subject" +msgstr "Chủ đề" + +#. module: mail +#: field:mail.wizard.invite,partner_ids:0 +msgid "Partners" +msgstr "Các đối tác" + +#. module: mail +#: view:mail.mail:0 +msgid "Retry" +msgstr "Thử lại" + +#. module: mail +#: field:mail.compose.message,email_from:0 +#: field:mail.mail,email_from:0 +#: field:mail.message,email_from:0 +msgid "From" +msgstr "Từ" + +#. module: mail +#: view:mail.mail:0 +#: view:mail.message.subtype:0 +msgid "Email message" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_base_config_settings +msgid "base.config.settings" +msgstr "base.config.settings" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:36 +#: view:mail.compose.message:0 +#, python-format +msgid "Send" +msgstr "Gửi" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:153 +#, python-format +msgid "No followers" +msgstr "Không có theo dõi" + +#. module: mail +#: view:mail.mail:0 +msgid "Failed" +msgstr "Thất bại" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:22 +#: model:ir.actions.act_window,name:mail.action_view_followers +#: model:ir.ui.menu,name:mail.menu_email_followers +#: view:mail.followers:0 +#: field:mail.group,message_follower_ids:0 +#: field:mail.thread,message_follower_ids:0 +#: field:res.partner,message_follower_ids:0 +#, python-format +msgid "Followers" +msgstr "Người theo dõi" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_archives_feeds +#: model:ir.ui.menu,name:mail.mail_archivesfeeds +msgid "Archives" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:95 +#: code:addons/mail/static/src/xml/mail.xml:107 +#, python-format +msgid "Delete this attachment" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:245 +#: view:mail.mail:0 +#, python-format +msgid "Reply" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail_followers.js:155 +#, python-format +msgid "One follower" +msgstr "" + +#. module: mail +#: field:mail.compose.message,type:0 +#: field:mail.message,type:0 +msgid "Type" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Email" +msgstr "" + +#. module: mail +#: field:ir.ui.menu,mail_group_id:0 +msgid "Mail Group" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Comments and Emails" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_defaults:0 +msgid "Default Values" +msgstr "" + +#. module: mail +#: code:addons/mail/res_users.py:89 +#, python-format +msgid "%s has joined the %s network." +msgstr "" + +#. module: mail +#: help:mail.group,image_small:0 +msgid "" +"Small-sized photo of the group. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: field:mail.message,partner_ids:0 +msgid "Recipients" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:140 +#, python-format +msgid "<<<" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:43 +#, python-format +msgid "Write to the followers of this document..." +msgstr "" + +#. module: mail +#: field:mail.group,group_public_id:0 +msgid "Authorized Group" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Join Group" +msgstr "" + +#. module: mail +#: help:mail.mail,email_from:0 +msgid "Message sender, taken from user preferences." +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/invite.py:40 +#, python-format +msgid "
You have been invited to follow a new document.
" +msgstr "" + +#. module: mail +#: field:mail.compose.message,parent_id:0 +#: field:mail.message,parent_id:0 +msgid "Parent Message" +msgstr "" + +#. module: mail +#: field:mail.compose.message,res_id:0 +#: field:mail.followers,res_id:0 +#: field:mail.message,res_id:0 +#: field:mail.wizard.invite,res_id:0 +msgid "Related Document ID" +msgstr "ID tài liệu liên quan" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_to_me_feeds +msgid "" +"

\n" +" No private message.\n" +"

\n" +" This list contains messages sent to you.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_rd +msgid "R&D" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:61 +#, python-format +msgid "/web/binary/upload_attachment" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Advanced" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:244 +#, python-format +msgid "Move to Inbox" +msgstr "" + +#. module: mail +#: code:addons/mail/wizard/mail_compose_message.py:193 +#, python-format +msgid "Re:" +msgstr "" + +#. module: mail +#: field:mail.compose.message,to_read:0 +#: field:mail.message,to_read:0 +msgid "To read" +msgstr "" + +#. module: mail +#: code:addons/mail/res_users.py:69 +#, python-format +msgid "" +"You may not create a user. To create new users, you should use the " +"\"Settings > Users\" menu." +msgstr "" + +#. module: mail +#: help:mail.followers,res_model:0 +#: help:mail.wizard.invite,res_model:0 +msgid "Model of the followed resource" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:337 +#, python-format +msgid "like" +msgstr "" + +#. module: mail +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +msgid "Cancel" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:47 +#, python-format +msgid "Share with my followers..." +msgstr "" + +#. module: mail +#: field:mail.notification,partner_id:0 +msgid "Contact" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "" +"Only the invited followers can read the\n" +" discussions on this group." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_ir_ui_menu +msgid "ir.ui.menu" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Has attachments" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "on" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:926 +#, python-format +msgid "" +"The following partners chosen as recipients for the email have no email " +"address linked :" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_defaults:0 +msgid "" +"A Python dictionary that will be evaluated to provide default values when " +"creating new records for this alias." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message_subtype +msgid "Message subtypes" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notified_partner_ids:0 +#: help:mail.message,notified_partner_ids:0 +msgid "" +"Partners that have a notification pushing this message in their mailboxes" +msgstr "" + +#. module: mail +#: selection:mail.compose.message,type:0 +#: view:mail.mail:0 +#: selection:mail.message,type:0 +msgid "Comment" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_inbox_feeds +msgid "" +"

\n" +" Good Job! Your inbox is empty.\n" +"

\n" +" Your inbox contains private messages or emails sent to " +"you\n" +" as well as information related to documents or people " +"you\n" +" follow.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: field:mail.mail,notification:0 +msgid "Is Notification" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:188 +#, python-format +msgid "Compose a new message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Send Now" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_mail.py:75 +#, python-format +msgid "" +"Unable to send email, please configure the sender's email address or alias." +msgstr "" + +#. module: mail +#: help:res.users,alias_id:0 +msgid "" +"Email address internally associated with this user. Incoming emails will " +"appear in the user's notifications." +msgstr "" + +#. module: mail +#: field:mail.group,image:0 +msgid "Photo" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:54 +#: code:addons/mail/static/src/xml/mail.xml:191 +#: view:mail.compose.message:0 +#: view:mail.wizard.invite:0 +#, python-format +msgid "or" +msgstr "" + +#. module: mail +#: help:mail.compose.message,vote_user_ids:0 +#: help:mail.message,vote_user_ids:0 +msgid "Users that voted for this message" +msgstr "" + +#. module: mail +#: help:mail.group,alias_id:0 +msgid "" +"The email address associated with this group. New emails received will " +"automatically create new topics." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Month" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Email Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,child_ids:0 +#: field:mail.message,child_ids:0 +msgid "Child Messages" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_user_id:0 +msgid "Owner" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_res_users +msgid "Users" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_message +#: field:mail.mail,mail_message_id:0 +#: view:mail.message:0 +#: field:mail.notification,message_id:0 +#: field:mail.wizard.invite,message:0 +msgid "Message" +msgstr "" + +#. module: mail +#: help:mail.followers,res_id:0 +#: help:mail.wizard.invite,res_id:0 +msgid "Id of the followed resource" +msgstr "" + +#. module: mail +#: field:mail.compose.message,body:0 +#: field:mail.message,body:0 +msgid "Contents" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_alias +#: model:ir.ui.menu,name:mail.mail_alias_menu +msgid "Aliases" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,description:0 +msgid "" +"Description that will be added in the message posted for this subtype. If " +"void, the name will be added instead." +msgstr "" + +#. module: mail +#: field:mail.compose.message,vote_user_ids:0 +#: field:mail.message,vote_user_ids:0 +msgid "Votes" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group" +msgstr "" + +#. module: mail +#: help:mail.compose.message,starred:0 +#: help:mail.message,starred:0 +msgid "Current user has a starred notification linked to this message" +msgstr "" + +#. module: mail +#: field:mail.group,public:0 +msgid "Privacy" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Notification" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/mail.js:654 +#, python-format +msgid "Please complete partner's informations" +msgstr "" + +#. module: mail +#: view:mail.wizard.invite:0 +msgid "Add Followers" +msgstr "Thêm theo dõi" + +#. module: mail +#: view:mail.compose.message:0 +msgid "Followers of selected items and" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_force_thread_id:0 +msgid "Record Thread ID" +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_group_root +msgid "My Groups" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_archives_feeds +msgid "" +"

\n" +" No message found and no message sent yet.\n" +"

\n" +" Click on the top-right icon to compose a message. This\n" +" message will be sent by email if it's an internal " +"contact.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: field:mail.mail,state:0 +msgid "Status" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Outgoing" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "All feeds" +msgstr "" + +#. module: mail +#: help:mail.compose.message,record_name:0 +#: help:mail.message,record_name:0 +msgid "Name get of the related document." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_notifications +#: model:ir.model,name:mail.model_mail_notification +#: model:ir.ui.menu,name:mail.menu_email_notifications +#: field:mail.compose.message,notification_ids:0 +#: view:mail.message:0 +#: field:mail.message,notification_ids:0 +#: view:mail.notification:0 +msgid "Notifications" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +msgid "Search Alias" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_force_thread_id:0 +msgid "" +"Optional ID of a thread (record) to which all incoming messages will be " +"attached, even if they did not reply to it. If set, this will disable the " +"creation of new records completely." +msgstr "" + +#. module: mail +#: help:mail.message.subtype,name:0 +msgid "" +"Message subtype gives a more precise type on the message, especially for " +"system notifications. For example, it can be a notification related to a new " +"record (New), or to a stage change in a process (Stage change). Message " +"subtypes allow to precisely tune the notifications the user want to receive " +"on its wall." +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "by" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_best_sales_practices +msgid "Best Sales Practices" +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Selected Group Only" +msgstr "" + +#. module: mail +#: field:mail.group,message_is_follower:0 +#: field:mail.thread,message_is_follower:0 +#: field:res.partner,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: view:mail.mail:0 +msgid "User" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Groups" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Messages Search" +msgstr "" + +#. module: mail +#: field:mail.compose.message,date:0 +#: field:mail.message,date:0 +msgid "Date" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:34 +#, python-format +msgid "Post" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Extended Filters..." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:120 +#, python-format +msgid "To:" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:193 +#, python-format +msgid "Write to my followers" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: mail +#: field:mail.message.subtype,default:0 +msgid "Default" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:311 +#, python-format +msgid "show more message" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:246 +#, python-format +msgid "Mark as Todo" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,parent_id:0 +msgid "Parent subtype, used for automatic subscription." +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_wizard_invite +msgid "Invite wizard" +msgstr "" + +#. module: mail +#: field:mail.group,message_summary:0 +#: field:mail.thread,message_summary:0 +#: field:res.partner,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: mail +#: help:mail.message.subtype,res_model:0 +msgid "" +"Model the subtype applies to. If False, this subtype applies to all models." +msgstr "" + +#. module: mail +#: field:mail.compose.message,subtype_id:0 +#: field:mail.followers,subtype_ids:0 +#: field:mail.message,subtype_id:0 +#: view:mail.message.subtype:0 +msgid "Subtype" +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "Group Form" +msgstr "" + +#. module: mail +#: field:mail.compose.message,starred:0 +#: field:mail.message,starred:0 +#: field:mail.notification,starred:0 +msgid "Starred" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:313 +#, python-format +msgid "more messages" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:13 +#, python-format +msgid "Following" +msgstr "" + +#. module: mail +#: sql_constraint:mail.alias:0 +msgid "" +"Unfortunately this email alias is already used, please choose a unique one" +msgstr "" + +#. module: mail +#: help:mail.alias,alias_user_id:0 +msgid "" +"The owner of records created upon receiving emails on this alias. If this " +"field is not set the system will attempt to find the right owner based on " +"the sender (From) address, or will use the Administrator account if no " +"system user is found for that address." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:52 +#, python-format +msgid "And" +msgstr "" + +#. module: mail +#: field:mail.compose.message,message_id:0 +#: field:mail.message,message_id:0 +msgid "Message-Id" +msgstr "" + +#. module: mail +#: help:mail.group,image:0 +msgid "" +"This field holds the image used as photo for the group, limited to " +"1024x1024px." +msgstr "" + +#. module: mail +#: field:mail.compose.message,attachment_ids:0 +#: view:mail.mail:0 +#: field:mail.message,attachment_ids:0 +msgid "Attachments" +msgstr "" + +#. module: mail +#: field:mail.compose.message,record_name:0 +#: field:mail.message,record_name:0 +msgid "Message Record Name" +msgstr "" + +#. module: mail +#: field:mail.mail,email_cc:0 +msgid "Cc" +msgstr "" + +#. module: mail +#: help:mail.notification,starred:0 +msgid "Starred message that goes into the todo mailbox" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:123 +#: view:mail.compose.message:0 +#, python-format +msgid "Followers of" +msgstr "" + +#. module: mail +#: help:mail.mail,auto_delete:0 +msgid "Permanently delete this email after sending it, to save space" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_group_feeds +msgid "Discussion Group" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:242 +#, python-format +msgid "Done" +msgstr "" + +#. module: mail +#: model:mail.message.subtype,name:mail.mt_comment +msgid "Discussions" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:11 +#, python-format +msgid "Follow" +msgstr "" + +#. module: mail +#: field:mail.group,name:0 +msgid "Name" +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_all_employees +msgid "Whole Company" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:129 +#: code:addons/mail/static/src/xml/mail.xml:292 +#: view:mail.compose.message:0 +#, python-format +msgid "and" +msgstr "" + +#. module: mail +#: help:mail.mail,body_html:0 +msgid "Rich-text/HTML message" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +msgid "Creation Month" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:323 +#, python-format +msgid "Compose new Message" +msgstr "Soạn tin nhắn mới" + +#. module: mail +#: field:mail.group,menu_id:0 +msgid "Related Menu" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Content" +msgstr "" + +#. module: mail +#: field:mail.mail,email_to:0 +msgid "To" +msgstr "" + +#. module: mail +#: field:mail.compose.message,notified_partner_ids:0 +#: field:mail.message,notified_partner_ids:0 +msgid "Notified partners" +msgstr "" + +#. module: mail +#: help:mail.group,public:0 +msgid "" +"This group is visible by non members. Invisible groups can add " +"members through the invite button." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_board +msgid "Board meetings" +msgstr "" + +#. module: mail +#: constraint:mail.alias:0 +msgid "" +"Invalid expression, it must be a literal python dictionary definition e.g. " +"\"{'field': 'value'}\"" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_model_id:0 +msgid "Aliased Model" +msgstr "" + +#. module: mail +#: help:mail.compose.message,message_id:0 +#: help:mail.message,message_id:0 +msgid "Message unique identifier" +msgstr "" + +#. module: mail +#: field:mail.group,description:0 +#: field:mail.message.subtype,description:0 +msgid "Description" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_followers +msgid "Document Followers" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail_followers.xml:35 +#, python-format +msgid "Remove this follower" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Never" +msgstr "" + +#. module: mail +#: field:mail.mail,mail_server_id:0 +msgid "Outgoing mail server" +msgstr "" + +#. module: mail +#: code:addons/mail/mail_message.py:930 +#, python-format +msgid "Partners email addresses not found" +msgstr "" + +#. module: mail +#: view:mail.mail:0 +#: selection:mail.mail,state:0 +msgid "Sent" +msgstr "" + +#. module: mail +#: field:mail.mail,body_html:0 +msgid "Rich-text Contents" +msgstr "" + +#. module: mail +#: help:mail.compose.message,to_read:0 +#: help:mail.message,to_read:0 +msgid "Current user has an unread notification linked to this message" +msgstr "" + +#. module: mail +#: help:res.partner,notification_email_send:0 +msgid "" +"Choose in which case you want to receive an email when you receive new feeds." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_groups +#: model:ir.ui.menu,name:mail.mail_allgroups +msgid "Join a group" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_group_feeds +msgid "" +"

\n" +" No message in this group.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:213 +#, python-format +msgid "Please, wait while the file is uploading." +msgstr "" + +#. module: mail +#: view:mail.group:0 +msgid "" +"This group is visible by everyone,\n" +" including your customers if you " +"installed\n" +" the portal module." +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:243 +#, python-format +msgid "Set back to Todo" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:126 +#, python-format +msgid "this document" +msgstr "" + +#. module: mail +#: field:mail.compose.message,filter_id:0 +msgid "Filters" +msgstr "Các bộ lọc" + +#. module: mail +#: field:res.partner,notification_email_send:0 +msgid "Receive Feeds by Email" +msgstr "" + +#. module: mail +#: help:base.config.settings,alias_domain:0 +msgid "" +"If you have setup a catch-all email domain redirected to the OpenERP server, " +"enter the domain name here." +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_mail_message +#: model:ir.ui.menu,name:mail.menu_mail_message +#: field:mail.group,message_ids:0 +#: view:mail.message:0 +#: field:mail.thread,message_ids:0 +#: field:res.partner,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:139 +#, python-format +msgid "others..." +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_star_feeds +#: model:ir.ui.menu,name:mail.mail_starfeeds +msgid "To-do" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.alias,alias_name:0 +#: field:mail.group,alias_id:0 +#: field:res.users,alias_id:0 +msgid "Alias" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail +#: help:mail.compose.message,notification_ids:0 +#: help:mail.message,notification_ids:0 +msgid "" +"Technical field holding the message notifications. Use notified_partner_ids " +"to access notified partners." +msgstr "" + +#. module: mail +#: model:ir.ui.menu,name:mail.mail_feeds +#: model:ir.ui.menu,name:mail.mail_feeds_main +msgid "Messaging" +msgstr "" + +#. module: mail +#: view:mail.alias:0 +#: field:mail.message.subtype,res_model:0 +msgid "Model" +msgstr "" + +#. module: mail +#: view:mail.message:0 +msgid "Unread" +msgstr "" + +#. module: mail +#: help:mail.followers,subtype_ids:0 +msgid "" +"Message subtypes followed, meaning subtypes that will be pushed onto the " +"user's Wall." +msgstr "" + +#. module: mail +#: help:mail.group,message_ids:0 +#: help:mail.thread,message_ids:0 +#: help:res.partner,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: mail +#: help:mail.mail,references:0 +msgid "Message references, such as identifiers of previous messages" +msgstr "" + +#. module: mail +#: field:mail.compose.message,composition_mode:0 +msgid "Composition mode" +msgstr "" + +#. module: mail +#: field:mail.compose.message,model:0 +#: field:mail.followers,res_model:0 +#: field:mail.message,model:0 +#: field:mail.wizard.invite,res_model:0 +msgid "Related Document Model" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:338 +#, python-format +msgid "unlike" +msgstr "" + +#. module: mail +#: help:mail.compose.message,author_id:0 +#: help:mail.message,author_id:0 +msgid "" +"Author of the message. If not set, email_from may hold an email address that " +"did not match any partner." +msgstr "" + +#. module: mail +#: help:mail.mail,email_cc:0 +msgid "Carbon copy message recipients" +msgstr "" + +#. module: mail +#: field:mail.alias,alias_domain:0 +msgid "Alias domain" +msgstr "" + +#. module: mail +#: code:addons/mail/update.py:93 +#, python-format +msgid "Error during communication with the publisher warranty server." +msgstr "" + +#. module: mail +#: selection:mail.group,public:0 +msgid "Private" +msgstr "" + +#. module: mail +#: model:ir.actions.client,help:mail.action_mail_star_feeds +msgid "" +"

\n" +" No todo.\n" +"

\n" +" When you process messages in your inbox, you can mark " +"some\n" +" as todo. From this menu, you can process all your " +"todo.\n" +"

\n" +" " +msgstr "" + +#. module: mail +#: selection:mail.mail,state:0 +msgid "Delivery Failed" +msgstr "" + +#. module: mail +#: field:mail.compose.message,partner_ids:0 +msgid "Additional contacts" +msgstr "" + +#. module: mail +#: help:mail.compose.message,parent_id:0 +#: help:mail.message,parent_id:0 +msgid "Initial thread message." +msgstr "" + +#. module: mail +#: model:mail.group,name:mail.group_hr_policies +msgid "HR Policies" +msgstr "" + +#. module: mail +#: selection:res.partner,notification_email_send:0 +msgid "Emails only" +msgstr "" + +#. module: mail +#: model:ir.actions.client,name:mail.action_mail_inbox_feeds +#: model:ir.ui.menu,name:mail.mail_inboxfeeds +msgid "Inbox" +msgstr "Hộp thư đến" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/xml/mail.xml:58 +#, python-format +msgid "File" +msgstr "" + +#. module: mail +#. openerp-web +#: code:addons/mail/static/src/js/many2many_tags_email.js:63 +#, python-format +msgid "Please complete partner's informations and Email" +msgstr "" + +#. module: mail +#: model:ir.actions.act_window,name:mail.action_view_message_subtype +#: model:ir.ui.menu,name:mail.menu_message_subtype +msgid "Subtypes" +msgstr "" + +#. module: mail +#: model:ir.model,name:mail.model_mail_alias +msgid "Email Aliases" +msgstr "" + +#. module: mail +#: field:mail.group,image_small:0 +msgid "Small-sized photo" +msgstr "Ảnh cỡ nhỏ" + +#. module: mail +#: help:mail.mail,reply_to:0 +msgid "Preferred response address for the message" +msgstr "" diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 870695e074e..97d2842d15c 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -39,6 +39,7 @@ def remove_accents(input_str): nkfd_form = unicodedata.normalize('NFKD', input_str) return u''.join([c for c in nkfd_form if not unicodedata.combining(c)]) + class mail_alias(osv.Model): """A Mail Alias is a mapping of an email address with a given OpenERP Document model. It is used by OpenERP's mail gateway when processing incoming emails @@ -47,7 +48,7 @@ class mail_alias(osv.Model): of that alias. If the message is a reply it will be attached to the existing discussion on the corresponding record, otherwise a new record of the corresponding model will be created. - + This is meant to be used in combination with a catch-all email configuration on the company's mail server, so that as soon as a new mail.alias is created, it becomes immediately usable and OpenERP will accept email for it. @@ -63,9 +64,8 @@ class mail_alias(osv.Model): return dict.fromkeys(ids, domain or "") _columns = { - 'alias_name': fields.char('Alias', required=True, - help="The name of the email alias, e.g. 'jobs' " - "if you want to catch emails for ",), + 'alias_name': fields.char('Alias', + help="The name of the email alias, e.g. 'jobs' if you want to catch emails for ",), 'alias_model_id': fields.many2one('ir.model', 'Aliased Model', required=True, ondelete="cascade", help="The model (OpenERP Document Kind) to which this alias " "corresponds. Any incoming email that does not reply to an " @@ -87,13 +87,29 @@ class mail_alias(osv.Model): "messages will be attached, even if they did not reply to it. " "If set, this will disable the creation of new records completely."), 'alias_domain': fields.function(_get_alias_domain, string="Alias domain", type='char', size=None), + 'alias_parent_model_id': fields.many2one('ir.model', 'Parent Model', + help="Parent model holding the alias. The model holding the alias reference\n" + "is not necessarily the model given by alias_model_id\n" + "(example: project (parent_model) and task (model))"), + 'alias_parent_thread_id': fields.integer('Parent Record Thread ID', + help="ID of the parent record holding the alias (example: project holding the task creation alias)"), + 'alias_contact': fields.selection([ + ('everyone', 'Everyone'), + ('partners', 'Authenticated Partners'), + ('followers', 'Followers only'), + ], string='Alias Contact Security', required=True, + help="Policy to post a message on the document using the mailgateway.\n" + "- everyone: everyone can post\n" + "- partners: only authenticated partners\n" + "- followers: only followers of the related document\n"), } _defaults = { 'alias_defaults': '{}', - 'alias_user_id': lambda self,cr,uid,context: uid, + 'alias_user_id': lambda self, cr, uid, context: uid, # looks better when creating new aliases - even if the field is informative only - 'alias_domain': lambda self,cr,uid,context: self._get_alias_domain(cr, SUPERUSER_ID,[1],None,None)[1] + 'alias_domain': lambda self, cr, uid, context: self._get_alias_domain(cr, SUPERUSER_ID, [1], None, None)[1], + 'alias_contact': 'everyone', } _sql_constraints = [ @@ -139,13 +155,15 @@ class mail_alias(osv.Model): return new_name def migrate_to_alias(self, cr, child_model_name, child_table_name, child_model_auto_init_fct, - alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, context=None): + alias_model_name, alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, + alias_generate_name=False, context=None): """ Installation hook to create aliases for all users and avoid constraint errors. :param child_model_name: model name of the child class (i.e. res.users) :param child_table_name: table name of the child class (i.e. res_users) :param child_model_auto_init_fct: pointer to the _auto_init function (i.e. super(res_users,self)._auto_init(cr, context=context)) + :param alias_model_name: name of the aliased model :param alias_id_column: alias_id column (i.e. self._columns['alias_id']) :param alias_key: name of the column used for the unique name (i.e. 'login') :param alias_prefix: prefix for the unique name (i.e. 'jobs' + ...) @@ -153,6 +171,8 @@ class mail_alias(osv.Model): if empty string, not taken into account :param alias_defaults: dict, keys = mail.alias columns, values = child model column name used for default values (i.e. {'job_id': 'id'}) + :param alias_generate_name: automatically generate alias name using prefix / alias key; + default alias_name value is False because since 8.0 it is not required anymore """ if context is None: context = {} @@ -170,13 +190,17 @@ class mail_alias(osv.Model): no_alias_ids = child_class_model.search(cr, SUPERUSER_ID, [('alias_id', '=', False)], context={'active_test': False}) # Use read() not browse(), to avoid prefetching uninitialized inherited fields for obj_data in child_class_model.read(cr, SUPERUSER_ID, no_alias_ids, [alias_key]): - alias_vals = {'alias_name': '%s%s' % (alias_prefix, obj_data[alias_key])} + alias_vals = {'alias_name': False} + if alias_generate_name: + alias_vals['alias_name'] = '%s%s' % (alias_prefix, obj_data[alias_key]) if alias_force_key: alias_vals['alias_force_thread_id'] = obj_data[alias_force_key] alias_vals['alias_defaults'] = dict((k, obj_data[v]) for k, v in alias_defaults.iteritems()) - alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, alias_vals, model_name=context.get('alias_model_name', child_model_name)) + alias_vals['alias_parent_thread_id'] = obj_data['id'] + alias_create_ctx = dict(context, alias_model_name=alias_model_name, alias_parent_model_name=child_model_name) + alias_id = mail_alias.create(cr, SUPERUSER_ID, alias_vals, context=alias_create_ctx) child_class_model.write(cr, SUPERUSER_ID, obj_data['id'], {'alias_id': alias_id}) - _logger.info('Mail alias created for %s %s (uid %s)', child_model_name, obj_data[alias_key], obj_data['id']) + _logger.info('Mail alias created for %s %s (id %s)', child_model_name, obj_data[alias_key], obj_data['id']) # Finally attempt to reinstate the missing constraint try: @@ -189,22 +213,53 @@ class mail_alias(osv.Model): # set back the unique alias_id constraint alias_id_column.required = True - return res - def create_unique_alias(self, cr, uid, vals, model_name=None, context=None): - """Creates an email.alias record according to the values provided in ``vals``, - with 2 alterations: the ``alias_name`` value may be suffixed in order to - make it unique (and certain unsafe characters replaced), and - he ``alias_model_id`` value will set to the model ID of the ``model_name`` - value, if provided, + def create(self, cr, uid, vals, context=None): + """ Creates an email.alias record according to the values provided in ``vals``, + with 2 alterations: the ``alias_name`` value may be suffixed in order to + make it unique (and certain unsafe characters replaced), and + he ``alias_model_id`` value will set to the model ID of the ``model_name`` + context value, if provided. """ - # when an alias name appears to already be an email, we keep the local part only - alias_name = remove_accents(vals['alias_name']).lower().split('@')[0] - alias_name = re.sub(r'[^\w+.]+', '-', alias_name) - alias_name = self._find_unique(cr, uid, alias_name, context=context) - vals['alias_name'] = alias_name + if context is None: + context = {} + model_name = context.get('alias_model_name') + parent_model_name = context.get('alias_parent_model_name') + if vals.get('alias_name'): + # when an alias name appears to already be an email, we keep the local part only + alias_name = remove_accents(vals['alias_name']).lower().split('@')[0] + alias_name = re.sub(r'[^\w+.]+', '-', alias_name) + alias_name = self._find_unique(cr, uid, alias_name, context=context) + vals['alias_name'] = alias_name if model_name: model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', model_name)], context=context)[0] vals['alias_model_id'] = model_id - return self.create(cr, uid, vals, context=context) + if parent_model_name: + model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', parent_model_name)], context=context)[0] + vals['alias_parent_model_id'] = model_id + return super(mail_alias, self).create(cr, uid, vals, context=context) + + def open_document(self, cr, uid, ids, context=None): + alias = self.browse(cr, uid, ids, context=context)[0] + if not alias.alias_model_id or not alias.alias_force_thread_id: + return False + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': alias.alias_model_id.model, + 'res_id': alias.alias_force_thread_id, + 'type': 'ir.actions.act_window', + } + + def open_parent_document(self, cr, uid, ids, context=None): + alias = self.browse(cr, uid, ids, context=context)[0] + if not alias.alias_parent_model_id or not alias.alias_parent_thread_id: + return False + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': alias.alias_parent_model_id.model, + 'res_id': alias.alias_parent_thread_id, + 'type': 'ir.actions.act_window', + } diff --git a/addons/mail/mail_alias_view.xml b/addons/mail/mail_alias_view.xml index e0d8e173ebc..248bf7e8f3a 100644 --- a/addons/mail/mail_alias_view.xml +++ b/addons/mail/mail_alias_view.xml @@ -9,13 +9,23 @@
-
@@ -32,6 +42,7 @@ +
@@ -44,8 +55,13 @@ + + + + + - + @@ -55,6 +71,10 @@ Aliases mail.alias + { + 'search_default_active': True, + } +

- %% + %%
@@ -78,17 +78,19 @@

-
-
+
diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index d9e00353d49..d45ae04ddd1 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -176,7 +176,7 @@ class mail_mail(osv.Model): if context is None: context = {} if not ids: - filters = ['&', ('state', '=', 'outgoing'), ('type', '=', 'email')] + filters = [('state', '=', 'outgoing')] if 'filters' in context: filters.extend(context['filters']) ids = self.search(cr, uid, filters, context=context) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index c6b0dd9f5fa..2744e6df231 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -25,7 +25,6 @@ import dateutil import email import logging import pytz -import re import time import xmlrpclib from email.message import Message @@ -102,21 +101,22 @@ class mail_thread(osv.AbstractModel): if catchall_domain and model and res_id: # specific res_id -> find its alias (i.e. section_id specified) object_id = self.pool.get(model).browse(cr, uid, res_id, context=context) # check that the alias effectively creates new records - if object_id.alias_id and object_id.alias_id.alias_model_id and \ + if object_id.alias_id and object_id.alias_id.alias_name and \ + object_id.alias_id.alias_model_id and \ object_id.alias_id.alias_model_id.model == self._name and \ object_id.alias_id.alias_force_thread_id == 0: alias = object_id.alias_id elif catchall_domain and model: # no specific res_id given -> generic help message, take an example alias (i.e. alias of some section_id) model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0] alias_obj = self.pool.get('mail.alias') - alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC') + alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ("alias_name", "!=", False), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC') if alias_ids and len(alias_ids) == 1: # if several aliases -> incoherent to propose one guessed from nowhere, therefore avoid if several aliases alias = alias_obj.browse(cr, uid, alias_ids[0], context=context) if alias: alias_email = alias.name_get()[0][1] return _("""

- Click here to add a new %(document)s or send an email to: %(email)s + Click here to add new %(document)s or send an email to: %(email)s

%(static_help)s""" ) % { @@ -126,7 +126,7 @@ class mail_thread(osv.AbstractModel): } if document_name != 'document' and help and help.find("oe_view_nocontent_create") == -1: - return _("

Click here to add a new %(document)s

%(static_help)s") % { + return _("

Click here to add new %(document)s

%(static_help)s") % { 'document': document_name, 'static_help': help or '', } @@ -257,7 +257,6 @@ class mail_thread(osv.AbstractModel): def _search_is_follower(self, cr, uid, obj, name, args, context): """Search function for message_is_follower""" - fol_obj = self.pool.get('mail.followers') res = [] for field, operator, value in args: assert field == name @@ -313,7 +312,12 @@ class mail_thread(osv.AbstractModel): # subscribe uid unless asked not to if not context.get('mail_create_nosubscribe'): self.message_subscribe_users(cr, uid, [thread_id], [uid], context=context) - self.message_auto_subscribe(cr, uid, [thread_id], values.keys(), context=context) + # auto_subscribe: take values and defaults into account + create_values = set(values.keys()) + for key, val in context.iteritems(): + if key.startswith('default_'): + create_values.add(key[8:]) + self.message_auto_subscribe(cr, uid, [thread_id], list(create_values), context=context) # track values tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) @@ -329,8 +333,8 @@ class mail_thread(osv.AbstractModel): # Track initial values of tracked fields tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) if tracked_fields: - initial = self.read(cr, uid, ids, tracked_fields.keys(), context=context) - initial_values = dict((item['id'], item) for item in initial) + records = self.browse(cr, uid, ids, context=context) + initial_values = dict((this.id, dict((key, getattr(this, key)) for key in tracked_fields.keys())) for this in records) # Perform write, update followers result = super(mail_thread, self).write(cr, uid, ids, values, context=context) @@ -389,7 +393,7 @@ class mail_thread(osv.AbstractModel): if not value: return '' if col_info['type'] == 'many2one': - return value[1] + return value.name_get()[0][1] if col_info['type'] == 'selection': return dict(col_info['selection'])[value] return value @@ -408,23 +412,26 @@ class mail_thread(osv.AbstractModel): if not tracked_fields: return True - for record in self.read(cr, uid, ids, tracked_fields.keys(), context=context): - initial = initial_values[record['id']] - changes = [] + for browse_record in self.browse(cr, uid, ids, context=context): + initial = initial_values[browse_record.id] + changes = set() tracked_values = {} # generate tracked_values data structure: {'col_name': {col_info, new_value, old_value}} for col_name, col_info in tracked_fields.items(): - if record[col_name] == initial[col_name] and getattr(self._all_columns[col_name].column, 'track_visibility', None) == 'always': + initial_value = initial[col_name] + record_value = getattr(browse_record, col_name) + + if record_value == initial_value and getattr(self._all_columns[col_name].column, 'track_visibility', None) == 'always': tracked_values[col_name] = dict(col_info=col_info['string'], - new_value=convert_for_display(record[col_name], col_info)) - elif record[col_name] != initial[col_name]: + new_value=convert_for_display(record_value, col_info)) + elif record_value != initial_value and (record_value or initial_value): # because browse null != False if getattr(self._all_columns[col_name].column, 'track_visibility', None) in ['always', 'onchange']: tracked_values[col_name] = dict(col_info=col_info['string'], - old_value=convert_for_display(initial[col_name], col_info), - new_value=convert_for_display(record[col_name], col_info)) + old_value=convert_for_display(initial_value, col_info), + new_value=convert_for_display(record_value, col_info)) if col_name in tracked_fields: - changes.append(col_name) + changes.add(col_name) if not changes: continue @@ -434,7 +441,7 @@ class mail_thread(osv.AbstractModel): if field not in changes: continue for subtype, method in track_info.items(): - if method(self, cr, uid, record, context): + if method(self, cr, uid, browse_record, context): subtypes.append(subtype) posted = False @@ -445,11 +452,11 @@ class mail_thread(osv.AbstractModel): _logger.debug('subtype %s not found, giving error "%s"' % (subtype, e)) continue message = format_message(subtype_rec.description if subtype_rec.description else subtype_rec.name, tracked_values) - self.message_post(cr, uid, record['id'], body=message, subtype=subtype, context=context) + self.message_post(cr, uid, browse_record.id, body=message, subtype=subtype, context=context) posted = True if not posted: message = format_message('', tracked_values) - self.message_post(cr, uid, record['id'], body=message, context=context) + self.message_post(cr, uid, browse_record.id, body=message, context=context) return True #------------------------------------------------------ @@ -564,6 +571,8 @@ class mail_thread(osv.AbstractModel): #------------------------------------------------------ def message_get_reply_to(self, cr, uid, ids, context=None): + """ Returns the preferred reply-to email address that is basically + the alias of the document, if it exists. """ if not self._inherits.get('mail.alias'): return [False for id in ids] return ["%s@%s" % (record['alias_name'], record['alias_domain']) @@ -587,27 +596,123 @@ class mail_thread(osv.AbstractModel): def _message_find_partners(self, cr, uid, message, header_fields=['From'], context=None): """ Find partners related to some header fields of the message. - TDE TODO: merge me with other partner finding methods in 8.0 """ - partner_obj = self.pool.get('res.partner') - partner_ids = [] + :param string message: an email.message instance """ s = ', '.join([decode(message.get(h)) for h in header_fields if message.get(h)]) - for email_address in tools.email_split(s): - related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context) - if not related_partners: - related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address)], limit=1, context=context) - partner_ids += related_partners - return partner_ids + return filter(lambda x: x, self._find_partner_from_emails(cr, uid, None, tools.email_split(s), context=context)) - def _message_find_user_id(self, cr, uid, message, context=None): - """ TDE TODO: check and maybe merge me with other user finding methods in 8.0 """ - from_local_part = tools.email_split(decode(message.get('From')))[0] - # FP Note: canonification required, the minimu: .lower() - user_ids = self.pool.get('res.users').search(cr, uid, ['|', - ('login', '=', from_local_part), - ('email', '=', from_local_part)], context=context) - return user_ids[0] if user_ids else uid + def message_route_verify(self, cr, uid, message, message_dict, route, update_author=True, assert_model=True, create_fallback=True, context=None): + """ Verify route validity. Check and rules: + 1 - if thread_id -> check that document effectively exists; otherwise + fallback on a message_new by resetting thread_id + 2 - check that message_update exists if thread_id is set; or at least + that message_new exist + [ - find author_id if udpate_author is set] + 3 - if there is an alias, check alias_contact: + 'followers' and thread_id: + check on target document that the author is in the followers + 'followers' and alias_parent_thread_id: + check on alias parent document that the author is in the + followers + 'partners': check that author_id id set + """ - def message_route(self, cr, uid, message, model=None, thread_id=None, + assert isinstance(route, (list, tuple)), 'A route should be a list or a tuple' + assert len(route) == 5, 'A route should contain 5 elements: model, thread_id, custom_values, uid, alias record' + + message_id = message.get('Message-Id') + email_from = decode_header(message, 'From') + author_id = message_dict.get('author_id') + model, thread_id, alias = route[0], route[1], route[4] + model_pool = None + + def _create_bounce_email(): + mail_mail = self.pool.get('mail.mail') + mail_id = mail_mail.create(cr, uid, { + 'body_html': '

Hello,

' + '

The following email sent to %s cannot be accepted because this is ' + 'a private email address. Only allowed people can contact us at this address.

' + '
%s
' % (message.get('to'), message_dict.get('body')), + 'subject': 'Re: %s' % message.get('subject'), + 'email_to': message.get('from'), + 'auto_delete': True, + }, context=context) + mail_mail.send(cr, uid, [mail_id], context=context) + + def _warn(message): + _logger.warning('Routing mail with Message-Id %s: route %s: %s', + message_id, route, message) + + # Wrong model + if model and not model in self.pool: + if assert_model: + assert model in self.pool, 'Routing: unknown target model %s' % model + _warn('unknown target model %s' % model) + return () + elif model: + model_pool = self.pool[model] + + # Private message: should not contain any thread_id + if not model and thread_id: + if assert_model: + assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).' + _warn('posting a message without model should be with a null res_id (private message), resetting thread_id') + thread_id = 0 + + # Existing Document: check if exists; if not, fallback on create if allowed + if thread_id and not model_pool.exists(cr, uid, thread_id): + if create_fallback: + _warn('reply to missing document (%s,%s), fall back on new document creation' % (model, thread_id)) + thread_id = None + elif assert_model: + assert model_pool.exists(cr, uid, thread_id), 'Routing: reply to missing document (%s,%s)' % (model, thread_id) + else: + _warn('reply to missing document (%s,%s), skipping' % (model, thread_id)) + return () + + # Existing Document: check model accepts the mailgateway + if thread_id and not hasattr(model_pool, 'message_update'): + if create_fallback: + _warn('model %s does not accept document update, fall back on document creation' % model) + thread_id = None + elif assert_model: + assert hasattr(model_pool, 'message_update'), 'Routing: model %s does not accept document update, crashing' % model + else: + _warn('model %s does not accept document update, skipping' % model) + return () + + # New Document: check model accepts the mailgateway + if not thread_id and not hasattr(model_pool, 'message_new'): + if assert_model: + assert hasattr(model_pool, 'message_new'), 'Model %s does not accept document creation, crashing' % model + _warn('model %s does not accept document creation, skipping' % model) + return () + + # Update message author if asked + # We do it now because we need it for aliases (contact settings) + if not author_id and update_author: + author_ids = self._find_partner_from_emails(cr, uid, thread_id, [email_from], model=model, context=context) + if author_ids: + author_id = author_ids[0] + message_dict['author_id'] = author_id + + # Alias: check alias_contact settings + if alias and alias.alias_contact == 'followers' and (thread_id or alias.alias_parent_thread_id): + if thread_id: + obj = self.pool[model].browse(cr, uid, thread_id, context=context) + else: + obj = self.pool[alias.alias_parent_model_id.model].browse(cr, uid, alias.alias_parent_thread_id, context=context) + if not author_id or not author_id in [fol.id for fol in obj.message_follower_ids]: + _warn('alias %s restricted to internal followers, skipping' % alias.alias_name) + _create_bounce_email() + return () + elif alias and alias.alias_contact == 'partners' and not author_id: + _warn('alias %s does not accept unknown author, skipping' % alias.alias_name) + _create_bounce_email() + return () + + return (model, thread_id, route[2], route[3], route[4]) + + def message_route(self, cr, uid, message, message_dict, model=None, thread_id=None, custom_values=None, context=None): """Attempt to figure out the correct target model, thread_id, custom_values and user_id to use for an incoming message. @@ -627,6 +732,7 @@ class mail_thread(osv.AbstractModel): 4. If all the above fails, raise an exception. :param string message: an email.message instance + :param dict message_dict: dictionary holding message variables :param string model: the fallback model to use if the message does not match any of the currently configured mail aliases (may be None if a matching alias is supposed to be present) @@ -637,9 +743,12 @@ class mail_thread(osv.AbstractModel): :param int thread_id: optional ID of the record/thread from ``model`` to which this mail should be attached. Only used if the message does not reply to an existing thread and does not match any mail alias. - :return: list of [model, thread_id, custom_values, user_id] + :return: list of [model, thread_id, custom_values, user_id, alias] """ assert isinstance(message, Message), 'message must be an email.message.Message at this point' + fallback_model = model + + # Get email.message.Message variables for future processing message_id = message.get('Message-Id') email_from = decode_header(message, 'From') email_to = decode_header(message, 'To') @@ -649,18 +758,20 @@ class mail_thread(osv.AbstractModel): # 1. Verify if this is a reply to an existing thread thread_references = references or in_reply_to ref_match = thread_references and tools.reference_re.search(thread_references) - if ref_match: thread_id = int(ref_match.group(1)) - model = ref_match.group(2) or model + model = ref_match.group(2) or fallback_model if thread_id and model in self.pool: model_obj = self.pool[model] if model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', email_from, email_to, message_id, model, thread_id, custom_values, uid) - return [(model, thread_id, custom_values, uid)] + route = self.message_route_verify(cr, uid, message, message_dict, + (model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) + return route and [route] or [] - # Verify whether this is a reply to a private message + # 2. Reply to a private message if in_reply_to: message_ids = self.pool.get('mail.message').search(cr, uid, [ ('message_id', '=', in_reply_to), @@ -670,9 +781,12 @@ class mail_thread(osv.AbstractModel): message = self.pool.get('mail.message').browse(cr, uid, message_ids[0], context=context) _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s', email_from, email_to, message_id, message.id, custom_values, uid) - return [(message.model, message.res_id, custom_values, uid)] + route = self.message_route_verify(cr, uid, message, message_dict, + (message.model, message.res_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) + return route and [route] or [] - # 2. Look for a matching mail.alias entry + # 3. Look for a matching mail.alias entry # Delivered-To is a safe bet in most modern MTAs, but we have to fallback on To + Cc values # for all the odd MTAs out there, as there is no standard header for the envelope's `rcpt_to` value. rcpt_tos = \ @@ -697,14 +811,16 @@ class mail_thread(osv.AbstractModel): # user_id = self._message_find_user_id(cr, uid, message, context=context) user_id = uid _logger.info('No matching user_id for the alias %s', alias.alias_name) - routes.append((alias.alias_model_id.model, alias.alias_force_thread_id, \ - eval(alias.alias_defaults), user_id)) - _logger.info('Routing mail from %s to %s with Message-Id %s: direct alias match: %r', - email_from, email_to, message_id, routes) + route = (alias.alias_model_id.model, alias.alias_force_thread_id, eval(alias.alias_defaults), user_id, alias) + _logger.info('Routing mail from %s to %s with Message-Id %s: direct alias match: %r', + email_from, email_to, message_id, route) + route = self.message_route_verify(cr, uid, message, message_dict, route, + update_author=True, assert_model=True, create_fallback=True, context=context) + if route: + routes.append(route) return routes - # 3. Fallback to the provided parameters, if they work - model_pool = self.pool.get(model) + # 4. Fallback to the provided parameters, if they work if not thread_id: # Legacy: fallback to matching [ID] in the Subject match = tools.res_re.search(decode_header(message, 'Subject')) @@ -714,16 +830,18 @@ class mail_thread(osv.AbstractModel): thread_id = int(thread_id) except: thread_id = False - assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \ + _logger.info('Routing mail from %s to %s with Message-Id %s: fallback to model:%s, thread_id:%s, custom_values:%s, uid:%s', + email_from, email_to, message_id, fallback_model, thread_id, custom_values, uid) + route = self.message_route_verify(cr, uid, message, message_dict, + (fallback_model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, context=context) + if route: + return [route] + + # AssertionError if no routes found and if no bounce occured + assert False, \ "No possible route found for incoming message from %s to %s (Message-Id %s:)." \ "Create an appropriate mail.alias or force the destination model." % (email_from, email_to, message_id) - if thread_id and not model_pool.exists(cr, uid, thread_id): - _logger.warning('Received mail reply to missing document %s! Ignoring and creating new document instead for Message-Id %s', - thread_id, message_id) - thread_id = None - _logger.info('Routing mail from %s to %s with Message-Id %s: fallback to model:%s, thread_id:%s, custom_values:%s, uid:%s', - email_from, email_to, message_id, model, thread_id, custom_values, uid) - return [(model, thread_id, custom_values, uid)] def message_process(self, cr, uid, model, message, custom_values=None, save_original=False, strip_attachments=False, @@ -777,25 +895,21 @@ class mail_thread(osv.AbstractModel): msg = self.message_parse(cr, uid, msg_txt, save_original=save_original, context=context) if strip_attachments: msg.pop('attachments', None) + # postpone setting msg.partner_ids after message_post, to avoid double notifications + partner_ids = msg.pop('partner_ids', []) if msg.get('message_id'): # should always be True as message_parse generate one if missing existing_msg_ids = self.pool.get('mail.message').search(cr, SUPERUSER_ID, [ ('message_id', '=', msg.get('message_id')), ], context=context) if existing_msg_ids: - _logger.info('Ignored mail from %s to %s with Message-Id %s:: found duplicated Message-Id during processing', + _logger.info('Ignored mail from %s to %s with Message-Id %s: found duplicated Message-Id during processing', msg.get('from'), msg.get('to'), msg.get('message_id')) return False # find possible routes for the message - routes = self.message_route(cr, uid, msg_txt, model, - thread_id, custom_values, - context=context) - - # postpone setting msg.partner_ids after message_post, to avoid double notifications - partner_ids = msg.pop('partner_ids', []) - + routes = self.message_route(cr, uid, msg_txt, msg, model, thread_id, custom_values, context=context) thread_id = False - for model, thread_id, custom_values, user_id in routes: + for model, thread_id, custom_values, user_id, alias in routes: if self._name == 'mail.thread': context.update({'thread_model': model}) if model: @@ -806,11 +920,10 @@ class mail_thread(osv.AbstractModel): # disabled subscriptions during message_new/update to avoid having the system user running the # email gateway become a follower of all inbound messages - nosub_ctx = dict(context, mail_create_nosubscribe=True) + nosub_ctx = dict(context, mail_create_nosubscribe=True, mail_create_nolog=True) if thread_id and hasattr(model_pool, 'message_update'): model_pool.message_update(cr, user_id, [thread_id], msg, context=nosub_ctx) else: - nosub_ctx = dict(nosub_ctx, mail_create_nolog=True) thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=nosub_ctx) else: assert thread_id == 0, "Posting a message without model should be with a null res_id, to create a private message." @@ -947,7 +1060,6 @@ class mail_thread(osv.AbstractModel): """ msg_dict = { 'type': 'email', - 'author_id': False, } if not isinstance(message, Message): if isinstance(message, unicode): @@ -970,12 +1082,7 @@ class mail_thread(osv.AbstractModel): msg_dict['from'] = decode(message.get('from')) msg_dict['to'] = decode(message.get('to')) msg_dict['cc'] = decode(message.get('cc')) - - if message.get('From'): - author_ids = self._message_find_partners(cr, uid, message, ['From'], context=context) - if author_ids: - msg_dict['author_id'] = author_ids[0] - msg_dict['email_from'] = decode(message.get('from')) + msg_dict['email_from'] = decode(message.get('from')) partner_ids = self._message_find_partners(cr, uid, message, ['To', 'Cc'], context=context) msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids] @@ -1029,7 +1136,7 @@ class mail_thread(osv.AbstractModel): partner_id, partner_name or partner_name, reason """ if email and not partner: # get partner info from email - partner_info = self.message_get_partner_info_from_emails(cr, uid, [email], context=context, res_id=obj.id)[0] + partner_info = self.message_partner_info_from_emails(cr, uid, obj.id, [email], context=context)[0] if partner_info.get('partner_id'): partner = self.pool.get('res.partner').browse(cr, SUPERUSER_ID, [partner_info.get('partner_id')], context=context)[0] if email and email in [val[1] for val in result[obj.id]]: # already existing email -> skip @@ -1057,53 +1164,76 @@ class mail_thread(osv.AbstractModel): self._message_add_suggested_recipient(cr, uid, result, obj, partner=obj.user_id.partner_id, reason=self._all_columns['user_id'].column.string, context=context) return result - def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None, res_id=None): - """ Wrapper with weird order parameter because of 7.0 fix. + def _find_partner_from_emails(self, cr, uid, id, emails, model=None, context=None, check_followers=True): + """ Utility method to find partners from email addresses. The rules are : + 1 - check in document (model | self, id) followers + 2 - try to find a matching partner that is also an user + 3 - try to find a matching partner - TDE TODO: remove me in 8.0 """ - return self.message_find_partner_from_emails(cr, uid, res_id, emails, link_mail=link_mail, context=context) - - def message_find_partner_from_emails(self, cr, uid, id, emails, link_mail=False, context=None): - """ Convert a list of emails into a list partner_ids and a list - new_partner_ids. The return value is non conventional because - it is meant to be used by the mail widget. - - :return dict: partner_ids and new_partner_ids - - TDE TODO: merge me with other partner finding methods in 8.0 """ - mail_message_obj = self.pool.get('mail.message') - partner_obj = self.pool.get('res.partner') - result = list() - if id and self._name != 'mail.thread': - obj = self.browse(cr, SUPERUSER_ID, id, context=context) - else: - obj = None - for email in emails: - partner_info = {'full_name': email, 'partner_id': False} - m = re.search(r"((.+?)\s*<)?([^<>]+@[^<>]+)>?", email, re.IGNORECASE | re.DOTALL) - if not m: + :param list emails: list of email addresses + :param string model: model to fetch related record; by default self + is used. + :param boolean check_followers: check in document followers + """ + partner_obj = self.pool['res.partner'] + partner_ids = [] + obj = None + if id and (model or self._name != 'mail.thread') and check_followers: + if model: + obj = self.pool[model].browse(cr, uid, id, context=context) + else: + obj = self.browse(cr, uid, id, context=context) + for contact in emails: + partner_id = False + email_address = tools.email_split(contact) + if not email_address: + partner_ids.append(partner_id) continue - email_address = m.group(3) + email_address = email_address[0] # first try: check in document's followers if obj: for follower in obj.message_follower_ids: if follower.email == email_address: - partner_info['partner_id'] = follower.id - # second try: check in partners - if not partner_info.get('partner_id'): - ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context) - if not ids: - ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address)], limit=1, context=context) + partner_id = follower.id + # second try: check in partners that are also users + if not partner_id: + ids = partner_obj.search(cr, SUPERUSER_ID, [ + ('email', 'ilike', email_address), + ('user_ids', '!=', False) + ], limit=1, context=context) if ids: - partner_info['partner_id'] = ids[0] + partner_id = ids[0] + # third try: check in partners + if not partner_id: + ids = partner_obj.search(cr, SUPERUSER_ID, [ + ('email', 'ilike', email_address) + ], limit=1, context=context) + if ids: + partner_id = ids[0] + partner_ids.append(partner_id) + return partner_ids + + def message_partner_info_from_emails(self, cr, uid, id, emails, link_mail=False, context=None): + """ Convert a list of emails into a list partner_ids and a list + new_partner_ids. The return value is non conventional because + it is meant to be used by the mail widget. + + :return dict: partner_ids and new_partner_ids """ + mail_message_obj = self.pool.get('mail.message') + partner_ids = self._find_partner_from_emails(cr, uid, id, emails, context=context) + result = list() + for idx in range(len(emails)): + email_address = emails[idx] + partner_id = partner_ids[idx] + partner_info = {'full_name': email_address, 'partner_id': partner_id} result.append(partner_info) # link mail with this from mail to the new partner id if link_mail and partner_info['partner_id']: message_ids = mail_message_obj.search(cr, SUPERUSER_ID, [ '|', - ('email_from', '=', email), - ('email_from', 'ilike', '<%s>' % email), + ('email_from', '=', email_address), + ('email_from', 'ilike', '<%s>' % email_address), ('author_id', '=', False) ], context=context) if message_ids: @@ -1156,18 +1286,7 @@ class mail_thread(osv.AbstractModel): del context['thread_model'] return self.pool[model].message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs) - # 0: Parse email-from, try to find a better author_id based on document's followers for incoming emails - email_from = kwargs.get('email_from') - if email_from and thread_id and type == 'email' and kwargs.get('author_id'): - email_list = tools.email_split(email_from) - doc = self.browse(cr, uid, thread_id, context=context) - if email_list and doc: - author_ids = self.pool.get('res.partner').search(cr, uid, [ - ('email', 'ilike', email_list[0]), - ('id', 'in', [f.id for f in doc.message_follower_ids]) - ], limit=1, context=context) - if author_ids: - kwargs['author_id'] = author_ids[0] + #0: Find the message's author, because we need it for private discussion author_id = kwargs.get('author_id') if author_id is None: # keep False values author_id = self.pool.get('mail.message')._get_default_author(cr, uid, context=context) @@ -1278,21 +1397,6 @@ class mail_thread(osv.AbstractModel): self.message_subscribe(cr, uid, [thread_id], [message.author_id.id], context=context) return msg_id - #------------------------------------------------------ - # Compatibility methods: do not use - # TDE TODO: remove me in 8.0 - #------------------------------------------------------ - - def message_create_partners_from_emails(self, cr, uid, emails, context=None): - return {'partner_ids': [], 'new_partner_ids': []} - - def message_post_user_api(self, cr, uid, thread_id, body='', parent_id=False, - attachment_ids=None, content_subtype='plaintext', - context=None, **kwargs): - return self.message_post(cr, uid, thread_id, body=body, parent_id=parent_id, - attachment_ids=attachment_ids, content_subtype=content_subtype, - context=context, **kwargs) - #------------------------------------------------------ # Followers API #------------------------------------------------------ @@ -1337,7 +1441,7 @@ class mail_thread(osv.AbstractModel): ], context=context) mail_followers_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context) # subtype_ids not specified: do not update already subscribed partner, fetch default subtypes for new partners - else: + elif subtype_ids is None: subtype_ids = subtype_obj.search(cr, uid, [ ('default', '=', True), '|', diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index b9883489ca6..7bc39c438d1 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -23,6 +23,7 @@ from openerp.osv import fields, osv from openerp import SUPERUSER_ID from openerp.tools.translate import _ + class res_users(osv.Model): """ Update of res.users class - add a preference about sending emails about notifications @@ -42,7 +43,6 @@ class res_users(osv.Model): } _defaults = { - 'alias_domain': False, # always hide alias during creation 'display_groups_suggestions': True, } @@ -63,25 +63,20 @@ class res_users(osv.Model): def _auto_init(self, cr, context=None): """ Installation hook: aliases, partner following themselves """ # create aliases for all users and avoid constraint errors - res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, - self._columns['alias_id'], 'login', alias_force_key='id', context=context) - return res + return self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, + self._name, self._columns['alias_id'], 'login', alias_force_key='id', context=context) def create(self, cr, uid, data, context=None): - # create default alias same as the login if not data.get('login', False): raise osv.except_osv(_('Invalid Action!'), _('You may not create a user. To create new users, you should use the "Settings > Users" menu.')) + if context is None: + context = {} - mail_alias = self.pool.get('mail.alias') - alias_id = mail_alias.create_unique_alias(cr, uid, {'alias_name': data['login']}, model_name=self._name, context=context) - data['alias_id'] = alias_id - data.pop('alias_name', None) # prevent errors during copy() - - # create user - user_id = super(res_users, self).create(cr, uid, data, context=context) + create_context = dict(context, alias_model_name=self._name, alias_parent_model_name=self._name) + user_id = super(res_users, self).create(cr, uid, data, context=create_context) user = self.browse(cr, uid, user_id, context=context) - # alias - mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context) + self.pool.get('mail.alias').write(cr, SUPERUSER_ID, [user.alias_id.id], {"alias_force_thread_id": user_id, "alias_parent_thread_id": user_id}, context) + # create a welcome message self._create_welcome_message(cr, uid, user, context=context) return user_id @@ -95,12 +90,6 @@ class res_users(osv.Model): return self.pool.get('res.partner').message_post(cr, SUPERUSER_ID, [user.partner_id.id], body=body, context=context) - def write(self, cr, uid, ids, vals, context=None): - # User alias is sync'ed with login - if vals.get('login'): - vals['alias_name'] = vals['login'] - return super(res_users, self).write(cr, uid, ids, vals, context=context) - def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the user. alias_pool = self.pool.get('mail.alias') diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml index babe922d975..2bf54b4bafd 100644 --- a/addons/mail/res_users_view.xml +++ b/addons/mail/res_users_view.xml @@ -22,21 +22,25 @@ res.users - - - - - - - - - - - - - - + + + + + + diff --git a/addons/mail/static/src/img/icon.png b/addons/mail/static/description/icon.png similarity index 100% rename from addons/mail/static/src/img/icon.png rename to addons/mail/static/description/icon.png diff --git a/addons/mail/html/index.html b/addons/mail/static/description/index.html similarity index 97% rename from addons/mail/html/index.html rename to addons/mail/static/description/index.html index b564cf3ab1e..aa55e63008d 100644 --- a/addons/mail/html/index.html +++ b/addons/mail/static/description/index.html @@ -21,7 +21,7 @@ email overload.

diff --git a/addons/mail/html/mail_illustration.png b/addons/mail/static/description/mail_illustration.png similarity index 100% rename from addons/mail/html/mail_illustration.png rename to addons/mail/static/description/mail_illustration.png diff --git a/addons/mail/html/mail_sc_00.png b/addons/mail/static/description/mail_sc_00.png similarity index 100% rename from addons/mail/html/mail_sc_00.png rename to addons/mail/static/description/mail_sc_00.png diff --git a/addons/mail/html/mail_sc_01.png b/addons/mail/static/description/mail_sc_01.png similarity index 100% rename from addons/mail/html/mail_sc_01.png rename to addons/mail/static/description/mail_sc_01.png diff --git a/addons/mail/html/mail_sc_02.png b/addons/mail/static/description/mail_sc_02.png similarity index 100% rename from addons/mail/html/mail_sc_02.png rename to addons/mail/static/description/mail_sc_02.png diff --git a/addons/mail/html/mail_sc_03.png b/addons/mail/static/description/mail_sc_03.png similarity index 100% rename from addons/mail/html/mail_sc_03.png rename to addons/mail/static/description/mail_sc_03.png diff --git a/addons/mail/html/mail_sc_04.png b/addons/mail/static/description/mail_sc_04.png similarity index 100% rename from addons/mail/html/mail_sc_04.png rename to addons/mail/static/description/mail_sc_04.png diff --git a/addons/mail/html/mail_sc_05.png b/addons/mail/static/description/mail_sc_05.png similarity index 100% rename from addons/mail/html/mail_sc_05.png rename to addons/mail/static/description/mail_sc_05.png diff --git a/addons/mail/html/mail_sc_06.png b/addons/mail/static/description/mail_sc_06.png similarity index 100% rename from addons/mail/html/mail_sc_06.png rename to addons/mail/static/description/mail_sc_06.png diff --git a/addons/mail/html/mail_sc_07.png b/addons/mail/static/description/mail_sc_07.png similarity index 100% rename from addons/mail/html/mail_sc_07.png rename to addons/mail/static/description/mail_sc_07.png diff --git a/addons/mail/html/photo.png b/addons/mail/static/description/photo.png similarity index 100% rename from addons/mail/html/photo.png rename to addons/mail/static/description/photo.png diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index c969d3f3b16..211133afaf8 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -26,6 +26,16 @@ border-radius: 0px; } +/* ---- GENERIC FOR MAIL-RELATED STUFF ---- */ +.openerp .oe_e.oe_e_alias { + font-size: 30px; + line-height: 15px; + vertical-align: top; + margin-right: 3px; + color: white; + text-shadow: 0px 0px 2px black; +} + /* ------------ MAIL WIDGET --------------- */ .openerp .oe_mail, .openerp .oe_mail *{ -webkit-box-sizing: border-box; diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 83ac92404f1..5d54a6acc48 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -632,10 +632,7 @@ openerp.mail = function (session) { // have unknown names -> call message_get_partner_info_from_emails to try to find partner_id var find_done = $.Deferred(); if (names_to_find.length > 0) { - var values = { - 'res_id': this.context.default_res_id, - } - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find], values); + find_done = self.parent_thread.ds_thread._model.call('message_partner_info_from_emails', [this.context.default_res_id, names_to_find]); } else { find_done.resolve([]); @@ -681,11 +678,7 @@ openerp.mail = function (session) { var new_names_to_find = _.difference(names_to_find, names_to_remove); find_done = $.Deferred(); if (new_names_to_find.length > 0) { - var values = { - 'link_mail': true, - 'res_id': self.context.default_res_id, - } - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [new_names_to_find], values); + find_done = self.parent_thread.ds_thread._model.call('message_partner_info_from_emails', [self.context.default_res_id, new_names_to_find, true]); } else { find_done.resolve([]); @@ -974,6 +967,24 @@ openerp.mail = function (session) { this.$('.oe_reply').on('click', this.on_message_reply); this.$('.oe_star').on('click', this.on_star); this.$('.oe_msg_vote').on('click', this.on_vote); + this.$('.oe_mail_action_model').on('click', this.on_record_clicked); + }, + + on_record_clicked: function (event) { + event.stopPropagation(); + var state = { + 'model': this.model, + 'id': this.res_id, + 'title': this.record_name + }; + session.webclient.action_manager.do_push_state(state); + this.do_action({ + res_model: state.model, + res_id: state.id, + type: 'ir.actions.act_window', + views: [[false, 'form']] + }); + return false; }, /* Call the on_compose_message on the thread of this message. */ diff --git a/addons/mail/tests/test_mail_base.py b/addons/mail/tests/test_mail_base.py index 7ca8b93135c..b0f9f72b6f7 100644 --- a/addons/mail/tests/test_mail_base.py +++ b/addons/mail/tests/test_mail_base.py @@ -71,9 +71,9 @@ class TestMailBase(common.TransactionCase): # Test users to use through the various tests self.res_users.write(cr, uid, uid, {'name': 'Administrator'}) self.user_raoul_id = self.res_users.create(cr, uid, - {'name': 'Raoul Grosbedon', 'signature': 'SignRaoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]}) + {'name': 'Raoul Grosbedon', 'signature': 'SignRaoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'alias_name': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]}) self.user_bert_id = self.res_users.create(cr, uid, - {'name': 'Bert Tartignole', 'signature': 'SignBert', 'email': 'bert@bert.fr', 'login': 'bert', 'groups_id': [(6, 0, [])]}) + {'name': 'Bert Tartignole', 'signature': 'SignBert', 'email': 'bert@bert.fr', 'login': 'bert', 'alias_name': 'bert', 'groups_id': [(6, 0, [])]}) self.user_raoul = self.res_users.browse(cr, uid, self.user_raoul_id) self.user_bert = self.res_users.browse(cr, uid, self.user_bert_id) self.user_admin = self.res_users.browse(cr, uid, uid) @@ -83,7 +83,7 @@ class TestMailBase(common.TransactionCase): # Test 'pigs' group to use through the various tests self.group_pigs_id = self.mail_group.create(cr, uid, - {'name': 'Pigs', 'description': 'Fans of Pigs, unite !'}, + {'name': 'Pigs', 'description': 'Fans of Pigs, unite !', 'alias_name': 'group+pigs'}, {'mail_create_nolog': True}) self.group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id) diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py index ca9c156c8cb..148b5faba87 100644 --- a/addons/mail/tests/test_mail_features.py +++ b/addons/mail/tests/test_mail_features.py @@ -32,17 +32,17 @@ class test_mail(TestMailBase): """ Test basic mail.alias setup works, before trying to use them for routing """ cr, uid = self.cr, self.uid self.user_valentin_id = self.res_users.create(cr, uid, - {'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', 'login': 'valentin.cognito'}) + {'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', 'login': 'valentin.cognito', 'alias_name': 'valentin.cognito'}) self.user_valentin = self.res_users.browse(cr, uid, self.user_valentin_id) self.assertEquals(self.user_valentin.alias_name, self.user_valentin.login, "Login should be used as alias") self.user_pagan_id = self.res_users.create(cr, uid, - {'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', 'login': 'plmarchant@gmail.com'}) + {'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', 'login': 'plmarchant@gmail.com', 'alias_name': 'plmarchant@gmail.com'}) self.user_pagan = self.res_users.browse(cr, uid, self.user_pagan_id) self.assertEquals(self.user_pagan.alias_name, 'plmarchant', "If login is an email, the alias should keep only the local part") self.user_barty_id = self.res_users.create(cr, uid, - {'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', 'login': 'b4r+_#_R3wl$$'}) + {'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', 'login': 'b4r+_#_R3wl$$', 'alias_name': 'b4r+_#_R3wl$$'}) self.user_barty = self.res_users.browse(cr, uid, self.user_barty_id) self.assertEquals(self.user_barty.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens') @@ -739,18 +739,21 @@ class test_mail(TestMailBase): self.ir_model_data.create(cr, uid, {'name': 'mt_private', 'model': 'mail.message.subtype', 'module': 'mail', 'res_id': mt_private_id}) mt_name_supername_id = self.mail_message_subtype.create(cr, uid, {'name': 'name_supername', 'description': 'Supername name'}) self.ir_model_data.create(cr, uid, {'name': 'mt_name_supername', 'model': 'mail.message.subtype', 'module': 'mail', 'res_id': mt_name_supername_id}) + mt_group_public_set_id = self.mail_message_subtype.create(cr, uid, {'name': 'group_public_set', 'description': 'Group set'}) + self.ir_model_data.create(cr, uid, {'name': 'mt_group_public_set', 'model': 'mail.message.subtype', 'module': 'mail', 'res_id': mt_group_public_set_id}) mt_group_public_id = self.mail_message_subtype.create(cr, uid, {'name': 'group_public', 'description': 'Group changed'}) self.ir_model_data.create(cr, uid, {'name': 'mt_group_public', 'model': 'mail.message.subtype', 'module': 'mail', 'res_id': mt_group_public_id}) # Data: alter mail_group model for testing purposes (test on classic, selection and many2one fields) self.mail_group._track = { 'public': { - 'mail.mt_private': lambda self, cr, uid, obj, ctx=None: obj['public'] == 'private', + 'mail.mt_private': lambda self, cr, uid, obj, ctx=None: obj.public == 'private', }, 'name': { - 'mail.mt_name_supername': lambda self, cr, uid, obj, ctx=None: obj['name'] == 'supername', + 'mail.mt_name_supername': lambda self, cr, uid, obj, ctx=None: obj.name == 'supername', }, 'group_public_id': { + 'mail.mt_group_public_set': lambda self, cr, uid, obj, ctx=None: obj.group_public_id, 'mail.mt_group_public': lambda self, cr, uid, obj, ctx=None: True, }, } @@ -787,21 +790,37 @@ class test_mail(TestMailBase): self.assertIn(u'Public\u2192Private', _strip_string_spaces(last_msg.body), 'tracked: message body incorrect') self.assertIn(u'Pigs\u2192supername', _strip_string_spaces(last_msg.body), 'tracked feature: message body does not hold always tracked field') - # Test: change public as public, group_public_id -> 1 subtype, name always tracked + # Test: change public as public, group_public_id -> 2 subtypes, name always tracked self.mail_group.write(cr, self.user_raoul_id, [self.group_pigs_id], {'public': 'public', 'group_public_id': group_system_id}) self.group_pigs.refresh() - self.assertEqual(len(self.group_pigs.message_ids), 4, 'tracked: one message should have been produced') - # Test: first produced message: mt_group_public_id, with name always tracked, public tracked on change + self.assertEqual(len(self.group_pigs.message_ids), 5, 'tracked: one message should have been produced') + # Test: first produced message: mt_group_public_set_id, with name always tracked, public tracked on change last_msg = self.group_pigs.message_ids[-4] - self.assertEqual(last_msg.subtype_id.id, mt_group_public_id, 'tracked: message should not be linked to any subtype') + self.assertEqual(last_msg.subtype_id.id, mt_group_public_set_id, 'tracked: message should be linked to mt_group_public_set_id') + self.assertIn('Group set', last_msg.body, 'tracked: message body does not hold the subtype description') + self.assertIn(u'Private\u2192Public', _strip_string_spaces(last_msg.body), 'tracked: message body does not hold changed tracked field') + self.assertIn(u'HumanResources/Employee\u2192Administration/Settings', _strip_string_spaces(last_msg.body), 'tracked: message body does not hold always tracked field') + # Test: second produced message: mt_group_public_id, with name always tracked, public tracked on change + last_msg = self.group_pigs.message_ids[-5] + self.assertEqual(last_msg.subtype_id.id, mt_group_public_id, 'tracked: message should be linked to mt_group_public_id') self.assertIn('Group changed', last_msg.body, 'tracked: message body does not hold the subtype description') self.assertIn(u'Private\u2192Public', _strip_string_spaces(last_msg.body), 'tracked: message body does not hold changed tracked field') self.assertIn(u'HumanResources/Employee\u2192Administration/Settings', _strip_string_spaces(last_msg.body), 'tracked: message body does not hold always tracked field') + # Test: change group_public_id to False -> 1 subtype, name always tracked + self.mail_group.write(cr, self.user_raoul_id, [self.group_pigs_id], {'group_public_id': False}) + self.group_pigs.refresh() + self.assertEqual(len(self.group_pigs.message_ids), 6, 'tracked: one message should have been produced') + # Test: first produced message: mt_group_public_set_id, with name always tracked, public tracked on change + last_msg = self.group_pigs.message_ids[-6] + self.assertEqual(last_msg.subtype_id.id, mt_group_public_id, 'tracked: message should be linked to mt_group_public_id') + self.assertIn('Group changed', last_msg.body, 'tracked: message body does not hold the subtype description') + self.assertIn(u'Administration/Settings\u2192', _strip_string_spaces(last_msg.body), 'tracked: message body does not hold always tracked field') + # Test: change not tracked field, no tracking message self.mail_group.write(cr, self.user_raoul_id, [self.group_pigs_id], {'description': 'Dummy'}) self.group_pigs.refresh() - self.assertEqual(len(self.group_pigs.message_ids), 4, 'tracked: No message should have been produced') + self.assertEqual(len(self.group_pigs.message_ids), 6, 'tracked: No message should have been produced') # Data: removed changes public_col.track_visibility = None diff --git a/addons/mail/tests/test_mail_gateway.py b/addons/mail/tests/test_mail_gateway.py index 9e05bb049c1..2e0ba336dc4 100644 --- a/addons/mail/tests/test_mail_gateway.py +++ b/addons/mail/tests/test_mail_gateway.py @@ -99,20 +99,20 @@ class TestMailgateway(TestMailBase): # -------------------------------------------------- # Do: find partner with email -> first partner should be found - partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul '], link_mail=False)[0] + partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul '], link_mail=False)[0] self.assertEqual(partner_info['full_name'], 'Maybe Raoul ', - 'mail_thread: message_find_partner_from_emails did not handle email') + 'mail_thread: message_partner_info_from_emails did not handle email') self.assertEqual(partner_info['partner_id'], p_a_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') # Data: add some data about partners # 2 - User BRaoul p_b_id = self.res_partner.create(cr, uid, {'name': 'BRaoul', 'email': 'test@test.fr', 'user_ids': [(4, user_raoul.id)]}) # Do: find partner with email -> first user should be found - partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul '], link_mail=False)[0] + partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul '], link_mail=False)[0] self.assertEqual(partner_info['partner_id'], p_b_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') # -------------------------------------------------- # CASE1: with object @@ -120,9 +120,9 @@ class TestMailgateway(TestMailBase): # Do: find partner in group where there is a follower with the email -> should be taken self.mail_group.message_subscribe(cr, uid, [group_pigs.id], [p_b_id]) - partner_info = self.mail_group.message_find_partner_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul '], link_mail=False)[0] + partner_info = self.mail_group.message_partner_info_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul '], link_mail=False)[0] self.assertEqual(partner_info['partner_id'], p_b_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') def test_05_mail_message_mail_mail(self): """ Tests designed for testing email values based on mail.message, aliases, ... """ @@ -189,6 +189,7 @@ class TestMailgateway(TestMailBase): # Data: set catchall domain self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', alias_domain) + self.registry('ir.config_parameter').unlink(cr, uid, self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.alias')])) # Update message self.mail_message.write(cr, user_raoul_id, [msg_id], {'email_from': False, 'reply_to': False}) @@ -220,87 +221,6 @@ class TestMailgateway(TestMailBase): self.assertEqual(mail.reply_to, msg.email_from, 'mail_mail: incorrect reply_to: should be message email_from') - def test_05_mail_message_mail_mail(self): - """ Tests designed for testing email values based on mail.message, aliases, ... """ - cr, uid = self.cr, self.uid - - # Data: clean catchall domain - param_ids = self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.domain')]) - self.registry('ir.config_parameter').unlink(cr, uid, param_ids) - - # Do: create a mail_message with a reply_to, without message-id - msg_id = self.mail_message.create(cr, uid, {'subject': 'Subject', 'body': 'Body', 'reply_to': 'custom@example.com'}) - msg = self.mail_message.browse(cr, uid, msg_id) - # Test: message content - self.assertIn('reply_to', msg.message_id, - 'mail_message: message_id should be specific to a mail_message with a given reply_to') - self.assertEqual('custom@example.com', msg.reply_to, - 'mail_message: incorrect reply_to') - # Do: create a mail_mail with the previous mail_message and specified reply_to - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'reply_to': 'other@example.com', 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(mail.reply_to, 'other@example.com', - 'mail_mail: reply_to should be equal to the one coming from creation values') - # Do: create a mail_mail with the previous mail_message - self.mail_message.write(cr, uid, [msg_id], {'reply_to': 'custom@example.com'}) - msg.refresh() - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(mail.reply_to, msg.reply_to, - 'mail_mail: reply_to should be equal to the one coming from the mail_message') - - # Do: create a mail_message without a reply_to - msg_id = self.mail_message.create(cr, uid, {'subject': 'Subject', 'body': 'Body', 'model': 'mail.group', 'res_id': self.group_pigs_id, 'email_from': False}) - msg = self.mail_message.browse(cr, uid, msg_id) - # Test: message content - self.assertIn('mail.group', msg.message_id, - 'mail_message: message_id should contain model') - self.assertIn('%s' % self.group_pigs_id, msg.message_id, - 'mail_message: message_id should contain res_id') - self.assertFalse(msg.reply_to, - 'mail_message: should not generate a reply_to address when not specified') - # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertFalse(mail.reply_to, - 'mail_mail: reply_to should not have been guessed') - # Update message - self.mail_message.write(cr, uid, [msg_id], {'email_from': 'someone@example.com'}) - msg.refresh() - # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(email_split(mail.reply_to), email_split(msg.email_from), - 'mail_mail: reply_to should be equal to mail_message.email_from when having no document or default alias') - - # Data: set catchall domain - self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', 'schlouby.fr') - self.registry('ir.config_parameter').unlink(cr, uid, self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.alias')])) - - # Update message - self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False}) - msg.refresh() - # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(mail.reply_to, '"Followers of Pigs" ', - 'mail_mail: reply_to should equal the mail.group alias') - - # Update message - self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False}) - msg.refresh() - # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(mail.reply_to, msg.email_from, - 'mail_mail: reply_to should equal the mail_message email_from') - # Data: set catchall alias self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.alias', 'gateway') @@ -310,7 +230,7 @@ class TestMailgateway(TestMailBase): # Do: create a mail_mail based on the previous mail_message mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content + # Test: mail_mail Content-Type self.assertEqual(mail.reply_to, 'gateway@schlouby.fr', 'mail_mail: reply_to should equal the catchall email alias') @@ -351,7 +271,10 @@ class TestMailgateway(TestMailBase): alias_id = self.mail_alias.create(cr, uid, { 'alias_name': 'groups', 'alias_user_id': False, - 'alias_model_id': self.mail_group_model_id}) + 'alias_model_id': self.mail_group_model_id, + 'alias_parent_model_id': self.mail_group_model_id, + 'alias_parent_thread_id': self.group_pigs_id, + 'alias_contact': 'everyone'}) # -------------------------------------------------- # Test1: new record creation @@ -392,12 +315,42 @@ class TestMailgateway(TestMailBase): # Data: unlink group frog_group.unlink() - # Do: incoming email from a known partner on an alias with known recipients, alias is owned by user that can create a group - self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id}) - p1id = self.res_partner.create(cr, uid, {'name': 'Sylvie Lelitre', 'email': 'test.sylvie.lelitre@agrolait.com'}) - p2id = self.res_partner.create(cr, uid, {'name': 'Other Poilvache', 'email': 'other@gmail.com'}) + # Do: incoming email from an unknown partner on a Partners only alias -> bounce self._init_mock_build_email() - frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com') + self.mail_alias.write(cr, uid, [alias_id], {'alias_contact': 'partners'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other2@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Partners alias should send a bounce email') + self.assertIn('Frogs', sent_emails[0].get('subject'), + 'message_process: bounce email on Partners alias should contain the original subject') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'), + 'message_process: bounce email on Partners alias should have original email sender as recipient') + + # Do: incoming email from an unknown partner on a Followers only alias -> bounce + self._init_mock_build_email() + self.mail_alias.write(cr, uid, [alias_id], {'alias_contact': 'followers'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other3@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Followers alias should send a bounce email') + self.assertIn('Frogs', sent_emails[0].get('subject'), + 'message_process: bounce email on Followers alias should contain the original subject') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'), + 'message_process: bounce email on Followers alias should have original email sender as recipient') + + # Do: incoming email from a known partner on a Partners alias -> ok (+ test on alias.user_id) + self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id, 'alias_contact': 'partners'}) + p1id = self.res_partner.create(cr, uid, {'name': 'Sylvie Lelitre', 'email': 'test.sylvie.lelitre@agrolait.com'}) + p2id = self.res_partner.create(cr, uid, {'name': 'Other Poilvache', 'email': 'other4@gmail.com'}) + self._init_mock_build_email() + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other4@gmail.com') sent_emails = self._build_email_kwargs_list # Test: one group created by Raoul self.assertEqual(len(frog_groups), 1, 'message_process: a new mail.group should have been created') @@ -409,24 +362,37 @@ class TestMailgateway(TestMailBase): self.assertEqual(len(frog_group.message_ids), 1, 'message_process: newly created group should have the incoming email in message_ids') msg = frog_group.message_ids[0] - # Test: message: unknown email address -> message has email_from, not author_id + # Test: message: author found self.assertEqual(p1id, msg.author_id.id, 'message_process: message on created group should have Sylvie as author_id') self.assertIn('Sylvie Lelitre ', msg.email_from, 'message_process: message on created group should have have an email_from') - # Test: author (not recipient and not raoul (as alias owner)) added as follower + # Test: author (not recipient and not Raoul (as alias owner)) added as follower frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) self.assertEqual(frog_follower_ids, set([p1id]), 'message_process: newly created group should have 1 follower (author, not creator, not recipients)') # Test: sent emails: no-one, no bounce effet + sent_emails = self._build_email_kwargs_list self.assertEqual(len(sent_emails), 0, 'message_process: should not bounce incoming emails') # Data: unlink group frog_group.unlink() - # Do: incoming email from a known partner that is also an user that can create a mail.group - self.res_users.create(cr, uid, {'partner_id': p1id, 'login': 'sylvie', 'groups_id': [(6, 0, [self.group_employee_id])]}) - frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com') + # Do: incoming email from a not follower Partner on a Followers only alias -> bounce + self._init_mock_build_email() + self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': False, 'alias_contact': 'followers'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other5@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Partners alias should send a bounce email') + + # Do: incoming email from a parent document follower on a Followers only alias -> ok + self._init_mock_build_email() + self.mail_group.message_subscribe(cr, uid, [self.group_pigs_id], [p1id]) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other6@gmail.com') # Test: one group created by Raoul (or Sylvie maybe, if we implement it) self.assertEqual(len(frog_groups), 1, 'message_process: a new mail.group should have been created') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) @@ -438,15 +404,63 @@ class TestMailgateway(TestMailBase): self.assertEqual(frog_follower_ids, set([p1id]), 'message_process: newly created group should have 1 follower (author, not creator, not recipients)') # Test: sent emails: no-one, no bounce effet + sent_emails = self._build_email_kwargs_list self.assertEqual(len(sent_emails), 0, 'message_process: should not bounce incoming emails') # -------------------------------------------------- - # Test2: discussion update + # Test2: update-like alias + # -------------------------------------------------- + + # Do: Pigs alias is restricted, should bounce + self._init_mock_build_email() + self.mail_group.write(cr, uid, [frog_group.id], {'alias_name': 'frogs', 'alias_contact': 'followers', 'alias_force_thread_id': frog_group.id}) + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', + msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', + to='frogs@example.com>', subject='Re: news') + # Test: no group 'Re: news' created, still only 1 Frogs group + self.assertEqual(len(frog_groups), 0, + 'message_process: reply on Frogs should not have created a new group with new subject') + frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) + self.assertEqual(len(frog_groups), 1, + 'message_process: reply on Frogs should not have created a duplicate group with old subject') + frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Followers alias should send a bounce email') + self.assertIn('Re: news', sent_emails[0].get('subject'), + 'message_process: bounce email on Followers alias should contain the original subject') + + # Do: Pigs alias is restricted, should accept Followers + self._init_mock_build_email() + self.mail_group.message_subscribe(cr, uid, [frog_group.id], [p2id]) + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', + msg_id='<1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>', + to='frogs@example.com>', subject='Re: cats') + # Test: no group 'Re: news' created, still only 1 Frogs group + self.assertEqual(len(frog_groups), 0, + 'message_process: reply on Frogs should not have created a new group with new subject') + frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) + self.assertEqual(len(frog_groups), 1, + 'message_process: reply on Frogs should not have created a duplicate group with old subject') + frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) + # Test: one new message + self.assertEqual(len(frog_group.message_ids), 2, 'message_process: group should contain 2 messages after reply') + # Test: sent emails: 1 (Sylvie copy of the incoming email, but no bounce) + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: one email should have been generated') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to')[0], + 'message_process: email should be sent to Sylvie') + self.mail_group.message_unsubscribe(cr, uid, [frog_group.id], [p2id]) + + # -------------------------------------------------- + # Test3: discussion and replies # -------------------------------------------------- # Do: even with a wrong destination, a reply should end up in the correct thread - frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other@gmail.com', + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', to='erroneous@example.com>', subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) @@ -458,14 +472,14 @@ class TestMailgateway(TestMailBase): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: one new message - self.assertEqual(len(frog_group.message_ids), 2, 'message_process: group should contain 2 messages after reply') + self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 2 messages after reply') # Test: author (and not recipient) added as follower frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) self.assertEqual(frog_follower_ids, set([p1id, p2id]), 'message_process: after reply, group should have 2 followers') # Do: due to some issue, same email goes back into the mailgateway - frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other@gmail.com', + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) # Test: no group 'Re: news' created, still only 1 Frogs group @@ -476,20 +490,18 @@ class TestMailgateway(TestMailBase): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: no new message - self.assertEqual(len(frog_group.message_ids), 2, 'message_process: message with already existing message_id should not have been duplicated') + self.assertEqual(len(frog_group.message_ids), 3, 'message_process: message with already existing message_id should not have been duplicated') # Test: message_id is still unique msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')]) self.assertEqual(len(msg_ids), 1, 'message_process: message with already existing message_id should not have been duplicated') # -------------------------------------------------- - # Test3: email_from and partner finding + # Test4: email_from and partner finding # -------------------------------------------------- # Data: extra partner with Raoul's email -> test the 'better author finding' extra_partner_id = self.res_partner.create(cr, uid, {'name': 'A-Raoul', 'email': 'test_raoul@email.com'}) - # extra_user_id = self.res_users.create(cr, uid, {'name': 'B-Raoul', 'email': self.user_raoul.email}) - # extra_user_pid = self.res_users.browse(cr, uid, extra_user_id).partner_id.id # Do: post a new message, with a known partner -> duplicate emails -> partner format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik ', @@ -534,7 +546,7 @@ class TestMailgateway(TestMailBase): self.res_users.write(cr, uid, self.user_raoul_id, {'email': raoul_email}) # -------------------------------------------------- - # Test4: misc gateway features + # Test5: misc gateway features # -------------------------------------------------- # Do: incoming email with model that does not accepts incoming emails must raise @@ -568,7 +580,7 @@ class TestMailgateway(TestMailBase): frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) msg = frog_group.message_ids[0] # Test: plain text content should be wrapped and stored as html - self.assertEqual(msg.body, '
\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n
', + self.assertIn('
\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n
', msg.body, 'message_process: plaintext incoming email incorrectly parsed') @mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm') diff --git a/addons/mrp/html/coppernic.png b/addons/mrp/static/description/coppernic.png similarity index 100% rename from addons/mrp/html/coppernic.png rename to addons/mrp/static/description/coppernic.png diff --git a/addons/mrp/static/src/img/icon.png b/addons/mrp/static/description/icon.png similarity index 100% rename from addons/mrp/static/src/img/icon.png rename to addons/mrp/static/description/icon.png diff --git a/addons/mrp/html/index.html b/addons/mrp/static/description/index.html similarity index 97% rename from addons/mrp/html/index.html rename to addons/mrp/static/description/index.html index 5777eb5f147..d44da3f37b1 100644 --- a/addons/mrp/html/index.html +++ b/addons/mrp/static/description/index.html @@ -20,7 +20,7 @@ planning with the smart kanban and gantt views. Use the advanced analytics features to detect bottleneck in resources capacities and inventory locations.

diff --git a/addons/mrp/html/manufacturing_illu_01.png b/addons/mrp/static/description/manufacturing_illu_01.png similarity index 100% rename from addons/mrp/html/manufacturing_illu_01.png rename to addons/mrp/static/description/manufacturing_illu_01.png diff --git a/addons/mrp/html/manufacturing_illu_02.png b/addons/mrp/static/description/manufacturing_illu_02.png similarity index 100% rename from addons/mrp/html/manufacturing_illu_02.png rename to addons/mrp/static/description/manufacturing_illu_02.png diff --git a/addons/mrp/html/mrp_bom.png b/addons/mrp/static/description/mrp_bom.png similarity index 100% rename from addons/mrp/html/mrp_bom.png rename to addons/mrp/static/description/mrp_bom.png diff --git a/addons/mrp/html/mrp_calendar.png b/addons/mrp/static/description/mrp_calendar.png similarity index 100% rename from addons/mrp/html/mrp_calendar.png rename to addons/mrp/static/description/mrp_calendar.png diff --git a/addons/mrp/html/mrp_gantt.png b/addons/mrp/static/description/mrp_gantt.png similarity index 100% rename from addons/mrp/html/mrp_gantt.png rename to addons/mrp/static/description/mrp_gantt.png diff --git a/addons/mrp/html/mrp_integrate.png b/addons/mrp/static/description/mrp_integrate.png similarity index 100% rename from addons/mrp/html/mrp_integrate.png rename to addons/mrp/static/description/mrp_integrate.png diff --git a/addons/mrp/html/mrp_list.png b/addons/mrp/static/description/mrp_list.png similarity index 100% rename from addons/mrp/html/mrp_list.png rename to addons/mrp/static/description/mrp_list.png diff --git a/addons/mrp/html/mrp_mo.png b/addons/mrp/static/description/mrp_mo.png similarity index 100% rename from addons/mrp/html/mrp_mo.png rename to addons/mrp/static/description/mrp_mo.png diff --git a/addons/mrp/html/mrp_product.png b/addons/mrp/static/description/mrp_product.png similarity index 100% rename from addons/mrp/html/mrp_product.png rename to addons/mrp/static/description/mrp_product.png diff --git a/addons/note/static/src/img/icon.png b/addons/note/static/description/icon.png similarity index 100% rename from addons/note/static/src/img/icon.png rename to addons/note/static/description/icon.png diff --git a/addons/note/html/index.html b/addons/note/static/description/index.html similarity index 97% rename from addons/note/html/index.html rename to addons/note/static/description/index.html index 7ef37c646e9..dc688859334 100644 --- a/addons/note/html/index.html +++ b/addons/note/static/description/index.html @@ -15,7 +15,7 @@ Organize yourself with efficient todo lists and notes. From personnal tasks to collaborative meeting minutes, increase your user's productivity by giving them the tools to prioritize their work, share their ideas and collaborate on documents.

diff --git a/addons/note/html/notes_illu_01.png b/addons/note/static/description/notes_illu_01.png similarity index 100% rename from addons/note/html/notes_illu_01.png rename to addons/note/static/description/notes_illu_01.png diff --git a/addons/note/html/notes_sc_00.png b/addons/note/static/description/notes_sc_00.png similarity index 100% rename from addons/note/html/notes_sc_00.png rename to addons/note/static/description/notes_sc_00.png diff --git a/addons/note/html/notes_sc_01.png b/addons/note/static/description/notes_sc_01.png similarity index 100% rename from addons/note/html/notes_sc_01.png rename to addons/note/static/description/notes_sc_01.png diff --git a/addons/note/html/notes_sc_02.png b/addons/note/static/description/notes_sc_02.png similarity index 100% rename from addons/note/html/notes_sc_02.png rename to addons/note/static/description/notes_sc_02.png diff --git a/addons/note/html/notes_sc_03.png b/addons/note/static/description/notes_sc_03.png similarity index 100% rename from addons/note/html/notes_sc_03.png rename to addons/note/static/description/notes_sc_03.png diff --git a/addons/note_pad/i18n/vi.po b/addons/note_pad/i18n/vi.po new file mode 100644 index 00000000000..76bed331d8a --- /dev/null +++ b/addons/note_pad/i18n/vi.po @@ -0,0 +1,28 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-27 16:48+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" +"X-Generator: Launchpad (build 16681)\n" + +#. module: note_pad +#: model:ir.model,name:note_pad.model_note_note +msgid "Note" +msgstr "Ghi chú" + +#. module: note_pad +#: field:note.note,note_pad_url:0 +msgid "Pad Url" +msgstr "Đường dẫn Pad" diff --git a/addons/point_of_sale/controllers/main.py b/addons/point_of_sale/controllers/main.py index b189c8f204a..db5d5a25018 100644 --- a/addons/point_of_sale/controllers/main.py +++ b/addons/point_of_sale/controllers/main.py @@ -4,29 +4,31 @@ import simplejson import os import openerp +from openerp.addons.web import http +from openerp.addons.web.http import request from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template -class PointOfSaleController(openerp.addons.web.http.Controller): - _cp_path = '/pos' +class PointOfSaleController(http.Controller): - @openerp.addons.web.http.httprequest - def app(self, req, s_action=None, **kw): - js = "\n ".join('' % i for i in manifest_list(req, None, 'js')) - css = "\n ".join('' % i for i in manifest_list(req, None, 'css')) + @http.route('/pos/app', type='http', auth='admin') + def app(self): + js = "\n ".join('' % i for i in manifest_list('js',db=request.db)) + css = "\n ".join('' % i for i in manifest_list('css',db=request.db)) - cookie = req.httprequest.cookies.get("instance0|session_id") + cookie = request.httprequest.cookies.get("instance0|session_id") session_id = cookie.replace("%22","") - template = html_template.replace(' 0) elif data_type == 'tax': - key = ('tax', values['partner_id'], values['tax_code_id'],) + key = ('tax', values['partner_id'], values['tax_code_id'], values['debit'] > 0) elif data_type == 'counter_part': - key = ('counter_part', values['partner_id'], values['account_id']) + key = ('counter_part', values['partner_id'], values['account_id'], values['debit'] > 0) else: return diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index dbd5e731db1..f87fc9603a8 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -794,6 +794,7 @@ +
diff --git a/addons/point_of_sale/static/src/img/icon.png b/addons/point_of_sale/static/description/icon.png similarity index 100% rename from addons/point_of_sale/static/src/img/icon.png rename to addons/point_of_sale/static/description/icon.png diff --git a/addons/point_of_sale/html/index.html b/addons/point_of_sale/static/description/index.html similarity index 98% rename from addons/point_of_sale/html/index.html rename to addons/point_of_sale/static/description/index.html index 130806ddb11..7f1b7a5c097 100644 --- a/addons/point_of_sale/html/index.html +++ b/addons/point_of_sale/static/description/index.html @@ -22,7 +22,7 @@ consolidations amongst all shops without the hassle of integrating several applications.

diff --git a/addons/point_of_sale/html/pos_checkout.jpg b/addons/point_of_sale/static/description/pos_checkout.jpg similarity index 100% rename from addons/point_of_sale/html/pos_checkout.jpg rename to addons/point_of_sale/static/description/pos_checkout.jpg diff --git a/addons/point_of_sale/html/pos_customer_form.png b/addons/point_of_sale/static/description/pos_customer_form.png similarity index 100% rename from addons/point_of_sale/html/pos_customer_form.png rename to addons/point_of_sale/static/description/pos_customer_form.png diff --git a/addons/point_of_sale/html/pos_customers.png b/addons/point_of_sale/static/description/pos_customers.png similarity index 100% rename from addons/point_of_sale/html/pos_customers.png rename to addons/point_of_sale/static/description/pos_customers.png diff --git a/addons/point_of_sale/html/pos_devices.png b/addons/point_of_sale/static/description/pos_devices.png similarity index 100% rename from addons/point_of_sale/html/pos_devices.png rename to addons/point_of_sale/static/description/pos_devices.png diff --git a/addons/point_of_sale/html/pos_invoice.png b/addons/point_of_sale/static/description/pos_invoice.png similarity index 100% rename from addons/point_of_sale/html/pos_invoice.png rename to addons/point_of_sale/static/description/pos_invoice.png diff --git a/addons/point_of_sale/html/pos_offline.png b/addons/point_of_sale/static/description/pos_offline.png similarity index 100% rename from addons/point_of_sale/html/pos_offline.png rename to addons/point_of_sale/static/description/pos_offline.png diff --git a/addons/point_of_sale/html/pos_product_form.png b/addons/point_of_sale/static/description/pos_product_form.png similarity index 100% rename from addons/point_of_sale/html/pos_product_form.png rename to addons/point_of_sale/static/description/pos_product_form.png diff --git a/addons/point_of_sale/html/pos_products.png b/addons/point_of_sale/static/description/pos_products.png similarity index 100% rename from addons/point_of_sale/html/pos_products.png rename to addons/point_of_sale/static/description/pos_products.png diff --git a/addons/point_of_sale/html/pos_sc_01.jpg b/addons/point_of_sale/static/description/pos_sc_01.jpg similarity index 100% rename from addons/point_of_sale/html/pos_sc_01.jpg rename to addons/point_of_sale/static/description/pos_sc_01.jpg diff --git a/addons/point_of_sale/html/pos_sc_02.jpg b/addons/point_of_sale/static/description/pos_sc_02.jpg similarity index 100% rename from addons/point_of_sale/html/pos_sc_02.jpg rename to addons/point_of_sale/static/description/pos_sc_02.jpg diff --git a/addons/point_of_sale/html/pos_sc_03.jpg b/addons/point_of_sale/static/description/pos_sc_03.jpg similarity index 100% rename from addons/point_of_sale/html/pos_sc_03.jpg rename to addons/point_of_sale/static/description/pos_sc_03.jpg diff --git a/addons/point_of_sale/html/pos_ui_01.png b/addons/point_of_sale/static/description/pos_ui_01.png similarity index 100% rename from addons/point_of_sale/html/pos_ui_01.png rename to addons/point_of_sale/static/description/pos_ui_01.png diff --git a/addons/point_of_sale/html/pos_ui_02.png b/addons/point_of_sale/static/description/pos_ui_02.png similarity index 100% rename from addons/point_of_sale/html/pos_ui_02.png rename to addons/point_of_sale/static/description/pos_ui_02.png diff --git a/addons/point_of_sale/html/pos_ui_03.png b/addons/point_of_sale/static/description/pos_ui_03.png similarity index 100% rename from addons/point_of_sale/html/pos_ui_03.png rename to addons/point_of_sale/static/description/pos_ui_03.png diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index d9a4d6d00a9..e328054aa28 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -291,10 +291,15 @@ display: inline-block; text-align: center; vertical-align: top; + width: 205px; + max-height: 232px; + overflow-y: auto; + overflow-x: hidden; } .point-of-sale #paypad button { height: 50px; - width: 208px; + display: block; + width: 100%; margin: 0px -6px 4px -2px; font-weight: bold; vertical-align: middle; @@ -302,6 +307,17 @@ border-top: 1px solid #efefef; font-size: 14px; } +.point-of-sale #paypad button, .point-of-sale #numpad button, .point-of-sale .popup button{ + position: relative; + top: 0; + -webkit-transition: top 150ms linear; + -moz-transition: top 150ms linear; + -ms-transition: top 150ms linear; + transition: top 150ms linear; +} +.point-of-sale #paypad button:active, .point-of-sale #numpad button:active, .point-of-sale .popup button:active{ + top:3px; +} .point-of-sale #paypad button:hover, .point-of-sale #numpad button:hover, .point-of-sale #numpad .selected-mode, .point-of-sale .popup button:hover { border: none; color: white; diff --git a/addons/point_of_sale/static/src/img/icons/png48/invoice.png b/addons/point_of_sale/static/src/img/icons/png48/invoice.png new file mode 100644 index 00000000000..e65d2ec5a67 Binary files /dev/null and b/addons/point_of_sale/static/src/img/icons/png48/invoice.png differ diff --git a/addons/point_of_sale/static/src/js/db.js b/addons/point_of_sale/static/src/js/db.js index e47ce66f648..d16ba5a53dd 100644 --- a/addons/point_of_sale/static/src/js/db.js +++ b/addons/point_of_sale/static/src/js/db.js @@ -267,11 +267,21 @@ function openerp_pos_db(instance, module){ return results; }, add_order: function(order){ - var last_id = this.load('last_order_id',0); + var order_id = order.uid; var orders = this.load('orders',[]); - orders.push({id: last_id + 1, data: order}); - this.save('last_order_id',last_id+1); + + // if the order was already stored, we overwrite its data + for(var i = 0, len = orders.length; i < len; i++){ + if(orders[i].id === order_id){ + orders[i].data = order; + this.save('orders',orders); + return order_id; + } + } + + orders.push({id: order_id, data: order}); this.save('orders',orders); + return order_id; }, remove_order: function(order_id){ var orders = this.load('orders',[]); @@ -283,5 +293,14 @@ function openerp_pos_db(instance, module){ get_orders: function(){ return this.load('orders',[]); }, + get_order: function(order_id){ + var orders = this.get_orders(); + for(var i = 0, len = orders.length; i < len; i++){ + if(orders[i].id === order_id){ + return orders[i]; + } + } + return undefined; + }, }); } diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 8cb88303dd1..8375377b31c 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -104,7 +104,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal return self.fetch('res.currency',['symbol','position','rounding','accuracy'],[['id','=',self.get('company').currency_id[0]]]); }).then(function(currencies){ - console.log('Currency:',currencies[0]); self.set('currency',currencies[0]); return self.fetch('product.uom', null, null); @@ -145,7 +144,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal ['name','journal_ids','warehouse_id','journal_id','pricelist_id', 'iface_self_checkout', 'iface_led', 'iface_cashdrawer', 'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard', - 'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'], + 'iface_print_via_proxy','iface_cashdrawer','iface_invoicing','state','sequence_id','session_ids'], [['id','=', self.get('pos_session').config_id[0]]] ); }).then(function(configs){ @@ -156,6 +155,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal self.iface_vkeyboard = !!pos_config.iface_vkeyboard; self.iface_self_checkout = !!pos_config.iface_self_checkout; self.iface_cashdrawer = !!pos_config.iface_cashdrawer; + self.iface_invoicing = !!pos_config.iface_invoicing; return self.fetch('stock.warehouse',[],[['id','=',pos_config.warehouse_id[0]]]); }).then(function(shops){ @@ -240,12 +240,6 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal } }, - // saves the order locally and try to send it to the backend. 'record' is a bizzarely defined JSON version of the Order - push_order: function(record) { - this.db.add_order(record); - this.flush(); - }, - //creates a new empty order and sets it as the current order add_new_order: function(){ var order = new module.Order({pos:this}); @@ -253,45 +247,161 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal this.set('selectedOrder', order); }, + // saves the order locally and try to send it to the backend. + // it returns a deferred that succeeds after having tried to send the order and all the other pending orders. + push_order: function(order) { + var self = this; + var order_id = this.db.add_order(order.export_as_JSON()); + var pushed = new $.Deferred(); + + this.set('nbr_pending_operations',self.db.get_orders().length); + + this.flush_mutex.exec(function(){ + var flushed = self._flush_all_orders(); + + flushed.always(function(){ + pushed.resolve(); + }); + + return flushed; + }); + return pushed; + }, + + // saves the order locally and try to send it to the backend and make an invoice + // returns a deferred that succeeds when the order has been posted and successfully generated + // an invoice. This method can fail in various ways: + // error-no-client: the order must have an associated partner_id. You can retry to make an invoice once + // this error is solved + // error-transfer: there was a connection error during the transfer. You can retry to make the invoice once + // the network connection is up + + push_and_invoice_order: function(order){ + var self = this; + var invoiced = new $.Deferred(); + + if(!order.get_client()){ + invoiced.reject('error-no-client'); + return invoiced; + } + + var order_id = this.db.add_order(order.export_as_JSON()); + + this.set('nbr_pending_operations',self.db.get_orders().length); + + this.flush_mutex.exec(function(){ + var done = new $.Deferred(); // holds the mutex + + // send the order to the server + // we have a 30 seconds timeout on this push. + // FIXME: if the server takes more than 30 seconds to accept the order, + // the client will believe it wasn't successfully sent, and very bad + // things will happen as a duplicate will be sent next time + // so we must make sure the server detects and ignores duplicated orders + + var transfer = self._flush_order(order_id, {timeout:30000, to_invoice:true}); + + transfer.fail(function(){ + invoiced.reject('error-transfer'); + done.reject(); + }); + + // on success, get the order id generated by the server + transfer.pipe(function(order_server_id){ + // generate the pdf and download it + self.pos_widget.do_action('point_of_sale.pos_invoice_report',{additional_context:{ + active_ids:order_server_id, + }}); + invoiced.resolve(); + done.resolve(); + }); + + return done; + + }); + + return invoiced; + }, + // attemps to send all pending orders ( stored in the pos_db ) to the server, // and remove the successfully sent ones from the db once // it has been confirmed that they have been sent correctly. flush: function() { - //TODO make the mutex work - //this makes sure only one _int_flush is called at the same time - /* - return this.flush_mutex.exec(_.bind(function() { - return this._flush(0); - }, this)); - */ - this._flush(0); + var self = this; + var flushed = new $.Deferred(); + + this.flush_mutex.exec(function(){ + var done = new $.Deferred(); + + self._flush_all_orders() + .done( function(){ flushed.resolve();}) + .fail( function(){ flushed.reject(); }) + .always(function(){ done.resolve(); }); + + return done; + }); + + return flushed; }, - // attempts to send an order of index 'index' in the list of order to send. The index - // is used to skip orders that failed. do not call this method outside the mutex provided - // by flush() - _flush: function(index){ + + // attempts to send the locally stored order of id 'order_id' + // the sending is asynchronous and can take some time to decide if it is successful or not + // it is therefore important to only call this method from inside a mutex + // this method returns a deferred indicating wether the sending was successful or not + // there is a timeout parameter which is set to 2 seconds by default. + _flush_order: function(order_id, options){ + var self = this; + options = options || {}; + timeout = typeof options.timeout === 'number' ? options.timeout : 5000; + + var order = this.db.get_order(order_id); + order.to_invoice = options.to_invoice || false; + + if(!order){ + // flushing a non existing order always fails + return (new $.Deferred()).reject(); + } + + // we try to send the order. shadow prevents a spinner if it takes too long. (unless we are sending an invoice, + // then we want to notify the user that we are waiting on something ) + var rpc = (new instance.web.Model('pos.order')).call('create_from_ui',[[order]],undefined,{shadow: !options.to_invoice, timeout:timeout}); + + rpc.fail(function(unused,event){ + // prevent an error popup creation by the rpc failure + // we want the failure to be silent as we send the orders in the background + event.preventDefault(); + console.error('Failed to send order:',order); + }); + + rpc.done(function(){ + self.db.remove_order(order_id); + self.set('nbr_pending_operations',self.db.get_orders().length); + }); + + return rpc; + }, + + // attempts to send all the locally stored orders. As with _flush_order, it should only be + // called from within a mutex. + // this method returns a deferred that always succeeds when all orders have been tried to be sent, + // even if none of them could actually be sent. + _flush_all_orders: function(){ var self = this; var orders = this.db.get_orders(); - self.set('nbr_pending_operations',orders.length); + var tried_all = new $.Deferred(); - var order = orders[index]; - if(!order){ - return; + function rec_flush(index){ + if(index < orders.length){ + self._flush_order(orders[index].id).always(function(){ + rec_flush(index+1); + }) + }else{ + tried_all.resolve(); + } } - //try to push an order to the server - // shadow : true is to prevent a spinner to appear in case of timeout - (new instance.web.Model('pos.order')).call('create_from_ui',[[order]],undefined,{ shadow:true }) - .fail(function(unused, event){ - //don't show error popup if it fails - event.preventDefault(); - console.error('Failed to send order:',order); - self._flush(index+1); - }) - .done(function(){ - //remove from db if success - self.db.remove_order(order.id); - self._flush(index); - }); + rec_flush(0); + + return tried_all; }, scan_product: function(parsed_ean){ @@ -590,11 +700,12 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal module.Order = Backbone.Model.extend({ initialize: function(attributes){ Backbone.Model.prototype.initialize.apply(this, arguments); + this.uid = this.generateUniqueId(); this.set({ creationDate: new Date(), orderLines: new module.OrderlineCollection(), paymentLines: new module.PaymentlineCollection(), - name: "Order " + this.generateUniqueId(), + name: "Order " + this.uid, client: null, }); this.pos = attributes.pos; @@ -770,7 +881,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal currency: this.pos.get('currency'), }; }, - exportAsJSON: function() { + export_as_JSON: function() { var orderLines, paymentLines; orderLines = []; (this.get('orderLines')).each(_.bind( function(item) { @@ -789,8 +900,9 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal lines: orderLines, statement_ids: paymentLines, pos_session_id: this.pos.get('pos_session').id, - partner_id: this.pos.get('client') ? this.pos.get('client').id : undefined, + partner_id: this.get_client() ? this.get_client().id : false, user_id: this.pos.get('cashier') ? this.pos.get('cashier').id : this.pos.get('user').id, + uid: this.uid, }; }, getSelectedLine: function(){ diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 7a01732c353..e0a8ba4b71c 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -434,6 +434,14 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa template:'ErrorNegativePricePopupWidget', }); + module.ErrorNoClientPopupWidget = module.ErrorPopupWidget.extend({ + template: 'ErrorNoClientPopupWidget', + }); + + module.ErrorInvoiceTransferPopupWidget = module.ErrorPopupWidget.extend({ + template: 'ErrorInvoiceTransferPopupWidget', + }); + module.ScaleInviteScreenWidget = module.ScreenWidget.extend({ template:'ScaleInviteScreenWidget', @@ -452,7 +460,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa clearInterval(this.intervalID); self.pos_widget.screen_selector.set_current_screen(self.next_screen); } - },500); + },100); this.add_action_button({ label: _t('Back'), @@ -507,7 +515,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa self.weight = weight; self.renderElement(); } - },200); + },100); }, renderElement: function(){ var self = this; @@ -640,7 +648,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa var cashregister = selfCheckoutRegisters[0] || self.pos.get('cashRegisters').models[0]; currentOrder.addPaymentLine(cashregister); - self.pos.push_order(currentOrder.exportAsJSON()) + self.pos.push_order(currentOrder) currentOrder.destroy(); self.pos.proxy.transaction_end(); self.pos_widget.screen_selector.set_current_screen(self.next_screen); @@ -808,19 +816,42 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this._super(); var self = this; - this.add_action_button({ + var print_button = this.add_action_button({ label: _t('Print'), icon: '/point_of_sale/static/src/img/icons/png48/printer.png', click: function(){ self.print(); }, }); - this.add_action_button({ + var finish_button = this.add_action_button({ label: _t('Next Order'), icon: '/point_of_sale/static/src/img/icons/png48/go-next.png', click: function() { self.finishOrder(); }, }); window.print(); + + // THIS IS THE HACK OF THE CENTURY + // + // The problem is that in chrome the print() is asynchronous and doesn't + // execute until all rpc are finished. So it conflicts with the rpc used + // to send the orders to the backend, and the user is able to go to the next + // screen before the printing dialog is opened. The problem is that what's + // printed is whatever is in the page when the dialog is opened and not when it's called, + // and so you end up printing the product list instead of the receipt... + // + // Fixing this would need a re-architecturing + // of the code to postpone sending of orders after printing. + // + // But since the print dialog also blocks the other asynchronous calls, the + // button enabling in the setTimeout() is blocked until the printing dialog is + // closed. But the timeout has to be big enough or else it doesn't work + // 2 seconds is the same as the default timeout for sending orders and so the dialog + // should have appeared before the timeout... so yeah that's not ultra reliable. + + finish_button.set_disabled(true); + setTimeout(function(){ + finish_button.set_disabled(false); + }, 2000); }, print: function() { window.print(); @@ -870,15 +901,15 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.set_numpad_state(this.pos_widget.numpad.state); - this.back_button = this.add_action_button({ + this.add_action_button({ label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ self.pos_widget.screen_selector.set_current_screen(self.back_screen); }, }); - - this.validate_button = this.add_action_button({ + + this.add_action_button({ label: _t('Validate'), name: 'validation', icon: '/point_of_sale/static/src/img/icons/png48/validate.png', @@ -886,6 +917,17 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa self.validateCurrentOrder(); }, }); + + if(this.pos.iface_invoicing){ + this.add_action_button({ + label: 'Invoice', + name: 'invoice', + icon: '/point_of_sale/static/src/img/icons/png48/invoice.png', + click: function(){ + self.validateCurrentOrder({invoice: true}); + }, + }); + } this.updatePaymentSummary(); this.line_refocus(); @@ -898,15 +940,44 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa back: function() { this.pos_widget.screen_selector.set_current_screen(self.back_screen); }, - validateCurrentOrder: function() { + validateCurrentOrder: function(options) { + var self = this; + options = options || {}; + var currentOrder = this.pos.get('selectedOrder'); - this.pos.push_order(currentOrder.exportAsJSON()) - if(this.pos.iface_print_via_proxy){ - this.pos.proxy.print_receipt(currentOrder.export_for_printing()); - this.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen + + if(options.invoice){ + // deactivate the validation button while we try to send the order + this.pos_widget.action_bar.set_button_disabled('validation',true); + this.pos_widget.action_bar.set_button_disabled('invoice',true); + + var invoiced = this.pos.push_and_invoice_order(currentOrder); + + invoiced.fail(function(error){ + if(error === 'error-no-client'){ + self.pos_widget.screen_selector.show_popup('error-no-client'); + }else{ + self.pos_widget.screen_selector.show_popup('error-invoice-transfer'); + } + self.pos_widget.action_bar.set_button_disabled('validation',false); + self.pos_widget.action_bar.set_button_disabled('invoice',false); + }); + + invoiced.done(function(){ + self.pos_widget.action_bar.set_button_disabled('validation',false); + self.pos_widget.action_bar.set_button_disabled('invoice',false); + self.pos.get('selectedOrder').destroy(); + }); + }else{ - this.pos_widget.screen_selector.set_current_screen(this.next_screen); + this.pos.push_order(currentOrder) + if(this.pos.iface_print_via_proxy){ + this.pos.proxy.print_receipt(currentOrder.export_for_printing()); + this.pos.get('selectedOrder').destroy(); //finish order and go back to scan screen + }else{ + this.pos_widget.screen_selector.set_current_screen(this.next_screen); + } } }, bindPaymentLineEvents: function() { @@ -985,6 +1056,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa if(this.pos_widget.action_bar){ this.pos_widget.action_bar.set_button_disabled('validation', remaining > 0.000001); + this.pos_widget.action_bar.set_button_disabled('invoice', remaining > 0.000001); } }, set_numpad_state: function(numpadState) { diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index 5d56943de73..911d8cd321b 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -838,6 +838,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa instance.web.blockUI(); this.pos = new module.PosModel(this.session); + this.pos.pos_widget = this; this.pos_widget = this; //So that pos_widget's childs have pos_widget set automatically this.numpad_visible = true; @@ -952,6 +953,12 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa this.error_negative_price_popup = new module.ErrorNegativePricePopupWidget(this, {}); this.error_negative_price_popup.appendTo($('.point-of-sale')); + this.error_no_client_popup = new module.ErrorNoClientPopupWidget(this, {}); + this.error_no_client_popup.appendTo($('.point-of-sale')); + + this.error_invoice_transfer_popup = new module.ErrorInvoiceTransferPopupWidget(this, {}); + this.error_invoice_transfer_popup.appendTo($('.point-of-sale')); + // -------- Misc --------- this.notification = new module.SynchNotificationWidget(this,{}); @@ -1013,6 +1020,8 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa 'error-session': this.error_session_popup, 'error-negative-price': this.error_negative_price_popup, 'choose-receipt': this.choose_receipt_popup, + 'error-no-client': this.error_no_client_popup, + 'error-invoice-transfer': this.error_invoice_transfer_popup, }, default_client_screen: 'welcome', default_cashier_screen: 'products', diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml index 3da76ec12d8..e28ea1c06b0 100644 --- a/addons/point_of_sale/static/src/xml/pos.xml +++ b/addons/point_of_sale/static/src/xml/pos.xml @@ -336,11 +336,11 @@ - @@ -361,6 +361,33 @@ + + + + + + + + diff --git a/addons/purchase/html/purchase_compose.png b/addons/purchase/static/description/purchase_compose.png similarity index 100% rename from addons/purchase/html/purchase_compose.png rename to addons/purchase/static/description/purchase_compose.png diff --git a/addons/purchase/html/purchase_dashboard.png b/addons/purchase/static/description/purchase_dashboard.png similarity index 100% rename from addons/purchase/html/purchase_dashboard.png rename to addons/purchase/static/description/purchase_dashboard.png diff --git a/addons/purchase/html/purchase_import.png b/addons/purchase/static/description/purchase_import.png similarity index 100% rename from addons/purchase/html/purchase_import.png rename to addons/purchase/static/description/purchase_import.png diff --git a/addons/purchase/html/purchase_incoming.png b/addons/purchase/static/description/purchase_incoming.png similarity index 100% rename from addons/purchase/html/purchase_incoming.png rename to addons/purchase/static/description/purchase_incoming.png diff --git a/addons/purchase/html/purchase_po.png b/addons/purchase/static/description/purchase_po.png similarity index 100% rename from addons/purchase/html/purchase_po.png rename to addons/purchase/static/description/purchase_po.png diff --git a/addons/purchase/html/purchase_procurement.png b/addons/purchase/static/description/purchase_procurement.png similarity index 100% rename from addons/purchase/html/purchase_procurement.png rename to addons/purchase/static/description/purchase_procurement.png diff --git a/addons/purchase/html/purchase_product.png b/addons/purchase/static/description/purchase_product.png similarity index 100% rename from addons/purchase/html/purchase_product.png rename to addons/purchase/static/description/purchase_product.png diff --git a/addons/purchase/html/purchase_product_form.png b/addons/purchase/static/description/purchase_product_form.png similarity index 100% rename from addons/purchase/html/purchase_product_form.png rename to addons/purchase/static/description/purchase_product_form.png diff --git a/addons/purchase/html/purchase_tender.png b/addons/purchase/static/description/purchase_tender.png similarity index 100% rename from addons/purchase/html/purchase_tender.png rename to addons/purchase/static/description/purchase_tender.png diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index b66c7ce6f3b..1a642463df9 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -173,7 +173,7 @@ class WebKitParser(report_sxw): ), 'w' ) - head_file.write(header) + head_file.write(header.encode('utf-8')) head_file.close() file_to_del.append(head_file.name) command.extend(['--header-html', head_file.name]) @@ -184,7 +184,7 @@ class WebKitParser(report_sxw): ), 'w' ) - foot_file.write(footer) + foot_file.write(footer.encode('utf-8')) foot_file.close() file_to_del.append(foot_file.name) command.extend(['--footer-html', foot_file.name]) @@ -205,7 +205,7 @@ class WebKitParser(report_sxw): for html in html_list : html_file = file(os.path.join(tmp_dir, str(time.time()) + str(count) +'.body.html'), 'w') count += 1 - html_file.write(html) + html_file.write(html.encode('utf-8')) html_file.close() file_to_del.append(html_file.name) command.append(html_file.name) diff --git a/addons/sale/i18n/hu.po b/addons/sale/i18n/hu.po index 0e90d3aae1d..912ef4fe2d1 100644 --- a/addons/sale/i18n/hu.po +++ b/addons/sale/i18n/hu.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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-01-11 08:34+0000\n" +"PO-Revision-Date: 2013-07-09 07:56+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:22+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-10 05:26+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: sale #: model:res.groups,name:sale.group_analytic_accounting @@ -129,7 +129,7 @@ msgid "March" msgstr "Március" #. module: sale -#: code:addons/sale/sale.py:567 +#: code:addons/sale/sale.py:565 #, python-format msgid "First cancel all invoices attached to this sales order." msgstr "Először vonja vissza a megrendelés összes számla mellékletét." @@ -173,7 +173,7 @@ msgstr "Árajánlat megerősítve" #: selection:sale.order,state:0 #: selection:sale.report,state:0 msgid "Invoice Exception" -msgstr "Számlázási hiba" +msgstr "Számlázási kivétel" #. module: sale #: view:sale.order:0 @@ -183,7 +183,7 @@ msgstr "Árajánlat " #. module: sale #: selection:sale.order,state:0 msgid "Draft Quotation" -msgstr "Árajánlat sablon" +msgstr "Árajánlat tervezet" #. module: sale #: field:sale.order,partner_shipping_id:0 @@ -205,7 +205,7 @@ msgstr "Engedélyezi a köteg számlázást a megrendeléseken a naplók alapjá #. module: sale #: field:sale.order.line,price_subtotal:0 msgid "Subtotal" -msgstr "Részösszeg" +msgstr "Nettó érték" #. module: sale #: view:sale.report:0 @@ -259,12 +259,12 @@ msgstr "Lehetővé teszi a megrendelés soraihoz árengedmény alkalmazását" #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines that are in 'done' state" -msgstr "Megrendelés sorai melyek 'elvégezve' állapotúak" +msgstr "'Elvégzett' állapotú megrendelési sorok" #. module: sale #: selection:sale.order.line,type:0 msgid "on order" -msgstr "Megendelésre" +msgstr "megrendelésre" #. module: sale #: field:sale.order,message_ids:0 @@ -285,7 +285,7 @@ msgstr "Adók" #. module: sale #: field:sale.order,amount_untaxed:0 msgid "Untaxed Amount" -msgstr "Nettó érték" +msgstr "Nettó összeg" #. module: sale #: field:sale.config.settings,module_project:0 @@ -294,9 +294,9 @@ msgstr "Projekt" #. module: sale #: code:addons/sale/sale.py:185 -#: code:addons/sale/sale.py:368 -#: code:addons/sale/sale.py:509 -#: code:addons/sale/sale.py:600 +#: code:addons/sale/sale.py:363 +#: code:addons/sale/sale.py:504 +#: code:addons/sale/sale.py:598 #: code:addons/sale/sale.py:763 #: code:addons/sale/sale.py:780 #, python-format @@ -306,7 +306,7 @@ msgstr "Hiba!" #. module: sale #: report:sale.order:0 msgid "Net Total :" -msgstr "Nettó ár:" +msgstr "Nettó érték :" #. module: sale #: help:sale.order.line,type:0 @@ -315,9 +315,9 @@ msgid "" "replenishment.\n" "On order: When needed, the product is purchased or produced." msgstr "" -"Raktárról: Ha kell, a terméket a raktárról vesszük vagy várunk az alkatrész " -"feltöltésre.\n" -"Megrendelve: Ha kell, a terméket megvásároljuk vagy legyártjuk." +"Raktárról: Ha szükség van rá, a terméket a raktárról vesszük vagy várunk az " +"alkatrész feltöltésre.\n" +"Megrendelve: Ha szükség van rá, a terméket megvásároljuk vagy legyártjuk." #. module: sale #: help:sale.config.settings,module_analytic_user_function:0 @@ -344,7 +344,7 @@ msgstr "" #: selection:sale.order.line,state:0 #: selection:sale.report,state:0 msgid "Cancelled" -msgstr "Visszavonva" +msgstr "Érvénytelenített" #. module: sale #: view:sale.order.line:0 @@ -416,11 +416,11 @@ msgid "" msgstr "" "Használja mindet a végszámla elkészítéséhez.\n" " Használjon százalékot a teljes mennyiség bizonyos " -"százalékának szálázásához.\n" +"százalékának számlázásához.\n" " Használjon fix árat egy bizonyos mennyiség díjbekérőjéhez / " "előlegéhez.\n" " Használjon egyes megrendelés sorokat a kiválasztott " -"megrendelés sorainak számlázásáahoz." +"megrendelés sorainak számlázásához." #. module: sale #: view:sale.make.invoice:0 @@ -431,10 +431,10 @@ msgstr "Számlák létrehozása" #. module: sale #: report:sale.order:0 msgid "Tax" -msgstr "ÁFA" +msgstr "Adó" #. module: sale -#: code:addons/sale/sale.py:278 +#: code:addons/sale/sale.py:277 #: code:addons/sale/sale.py:820 #: code:addons/sale/sale.py:983 #, python-format @@ -456,7 +456,7 @@ msgstr "" "elvégzésekkor egy számla érvényesítésekor (Számla kizárás) " "vagy a kiválogatási lista műveletekben (Szállítási kizárás).\n" "A 'Ütemezésre várakozás' állapot lesz beállítva, ha a számla megerősített " -" de vár egy, a megrendelés dátumára futó ütemezésre." +" de vár egy, a megrendelés dátumán futó ütemezésre." #. module: sale #: field:sale.report,date_confirm:0 @@ -467,7 +467,7 @@ msgstr "Megerősítés dátuma" #: view:sale.report:0 #: field:sale.report,nbr:0 msgid "# of Lines" -msgstr "Sorok száma" +msgstr "# sorok száma" #. module: sale #: help:sale.order,message_summary:0 @@ -482,7 +482,7 @@ msgstr "" #: help:sale.order.line,sequence:0 msgid "Gives the sequence order when displaying a list of sales order lines." msgstr "" -"A megrendelés sorrendet adja ha a megrendelési sorok listáját jelzi ki." +"A megrendelés sorrendet adja a megrendelési sorok listájának kijelzésekor." #. module: sale #: view:sale.report:0 @@ -496,7 +496,7 @@ msgid "Fax :" msgstr "Fax:" #. module: sale -#: code:addons/sale/sale.py:278 +#: code:addons/sale/sale.py:277 #, python-format msgid "" "In order to delete a confirmed sales order, you must cancel it before !" @@ -507,7 +507,7 @@ msgstr "" #. module: sale #: view:sale.order:0 msgid "(update)" -msgstr "(Frissítés)" +msgstr "(frissítés)" #. module: sale #: model:ir.model,name:sale.model_res_partner @@ -522,8 +522,8 @@ msgid "Contract Features" msgstr "Szerződés tulajdonságai" #. module: sale -#: code:addons/sale/sale.py:288 -#: code:addons/sale/sale.py:586 +#: code:addons/sale/sale.py:287 +#: code:addons/sale/sale.py:584 #: model:ir.model,name:sale.model_sale_order #: model:process.node,name:sale.process_node_order0 #: model:process.node,name:sale.process_node_saleorder0 @@ -533,7 +533,7 @@ msgstr "Szerződés tulajdonságai" #: selection:sale.order,state:0 #, python-format msgid "Sales Order" -msgstr "Értékesítési megbízás" +msgstr "Vevői megrendelés" #. module: sale #: model:res.groups,name:sale.group_invoice_so_lines @@ -543,7 +543,7 @@ msgstr "Megrendelés sorai számlázásának engedélyezése" #. module: sale #: model:ir.model,name:sale.model_sale_order_line msgid "Sales Order Line" -msgstr "Értékesítési megbízási sor" +msgstr "Vevői megrendelés sor" #. module: sale #: field:sale.advance.payment.inv,amount:0 @@ -553,7 +553,7 @@ msgstr "Előleg összege" #. module: sale #: help:sale.order,invoice_exists:0 msgid "It indicates that sales order has at least one invoice." -msgstr "Ez mutatja, hogy a megrendelének legalább egy számlája van." +msgstr "Ez mutatja, hogy a megrendelésnek legalább egy számlája van." #. module: sale #: help:sale.config.settings,group_sale_pricelist:0 @@ -568,7 +568,7 @@ msgstr "" #. module: sale #: field:sale.config.settings,module_analytic_user_function:0 msgid "One employee can have different roles per contract" -msgstr "Egy munkavállalónak különböző funkciója lehet egy szerződésen belül" +msgstr "Egy alkalmazottnak különböző funkciója lehet egy szerződésen belül" #. module: sale #: selection:sale.advance.payment.inv,advance_payment_method:0 @@ -583,19 +583,19 @@ msgstr "Alapértelmezett fizetési feltétel" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_confirm0 msgid "Confirm" -msgstr "Megerősítés" +msgstr "Jóváhagyás" #. module: sale #: field:sale.config.settings,timesheet:0 msgid "Prepare invoices based on timesheets" -msgstr "Az időkimutatások alapján készítsen elő számlát" +msgstr "Az időkimutatások alapján készítsen elő, számlát" #. module: sale #: code:addons/sale/sale.py:820 #, python-format msgid "You cannot cancel a sales order line that has already been invoiced." msgstr "" -"Nem tud olyan megrendelési sort visszavonni amelyik már számlázva volt." +"Nem tud olyan vevői megrendelési sort visszavonni amelyik már számlázva volt." #. module: sale #: view:account.invoice.report:0 @@ -644,7 +644,7 @@ msgstr "Megrendelés száma" #: view:sale.order:0 #: field:sale.order,order_line:0 msgid "Order Lines" -msgstr "Megrendelési tételek" +msgstr "Megrendelés sorok" #. module: sale #: report:sale.order:0 @@ -673,7 +673,7 @@ msgstr "Összérték" #: help:account.config.settings,group_analytic_account_for_sales:0 msgid "Allows you to specify an analytic account on sales orders." msgstr "" -"Lehetővé teszi az analitikus/elemző könyvelés meghatározását a " +"Lehetővé teszi az analitikus/elemző könyvelés gyűjtőkód meghatározását a " "megrendeléseken." #. module: sale @@ -711,7 +711,7 @@ msgstr "Óra" #. module: sale #: field:res.partner,sale_order_count:0 msgid "# of Sales Order" -msgstr "# megrendelésből" +msgstr "# megrendelésszámból" #. module: sale #: help:sale.config.settings,timesheet:0 @@ -742,7 +742,7 @@ msgstr "Számlázandó" #. module: sale #: help:sale.order,partner_invoice_id:0 msgid "Invoice address for current sales order." -msgstr "Az aktuális értékesítési megbízás számlázási címe." +msgstr "Az aktuális megrendelés számlázási címe." #. module: sale #: selection:sale.order,invoice_quantity:0 @@ -769,7 +769,7 @@ msgstr "Mennyiség" #. module: sale #: report:sale.order:0 msgid "Total :" -msgstr "Bruttó ár:" +msgstr "Összesen :" #. module: sale #: view:sale.order.line:0 @@ -837,7 +837,7 @@ msgstr "Beállítási hiba!" #. module: sale #: field:account.config.settings,group_analytic_account_for_sales:0 msgid "Analytic accounting for sales" -msgstr "Analitikus/elemző könyvelés az értékesítésekhez" +msgstr "Analitikus/elemző könyvelési gyűjtőkód az értékesítésekhez" #. module: sale #: view:sale.order:0 @@ -889,7 +889,7 @@ msgid "Sales Order done" msgstr "Megrendelés elvégezve" #. module: sale -#: code:addons/sale/sale.py:369 +#: code:addons/sale/sale.py:364 #, python-format msgid "Please define sales journal for this company: \"%s\" (id:%d)." msgstr "" @@ -945,7 +945,7 @@ msgid "Sales Make Invoice" msgstr "Számla generálása értékesítésből" #. module: sale -#: code:addons/sale/sale.py:308 +#: code:addons/sale/sale.py:307 #, python-format msgid "Pricelist Warning!" msgstr "Árlista figyelmeztés!" @@ -956,7 +956,7 @@ msgid "Discount (%)" msgstr "Árengedmény (%)" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:110 +#: code:addons/sale/wizard/sale_line_invoice.py:107 #, python-format msgid "" "Invoice cannot be created for this Sales Order Line due to one of the " @@ -1009,7 +1009,7 @@ msgstr "Hónap" #. module: sale #: field:sale.order,currency_id:0 msgid "Currency" -msgstr "Valuta" +msgstr "Pénznem" #. module: sale #: view:sale.order.line:0 @@ -1023,7 +1023,7 @@ msgid "Category of Product" msgstr "Termékkaterógia" #. module: sale -#: code:addons/sale/sale.py:566 +#: code:addons/sale/sale.py:564 #, python-format msgid "Cannot cancel this sales order!" msgstr "Nem lehet megszakítani ezt a megrendelést!" @@ -1080,7 +1080,7 @@ msgid "Open Sale Menu" msgstr "Értékesítési menü megnyitása" #. module: sale -#: code:addons/sale/sale.py:600 +#: code:addons/sale/sale.py:598 #, python-format msgid "You cannot confirm a sales order which has no line." msgstr "Nem tud megerősíteni sor nélküli megrendelést" @@ -1520,7 +1520,7 @@ msgid "TVA :" msgstr "ÁFA:" #. module: sale -#: code:addons/sale/sale.py:449 +#: code:addons/sale/sale.py:444 #, python-format msgid "Customer Invoices" msgstr "Kimenő számlák" @@ -1546,7 +1546,7 @@ msgid "Sales" msgstr "Értékesítés" #. module: sale -#: code:addons/sale/sale.py:309 +#: code:addons/sale/sale.py:308 #, python-format msgid "" "If you change the pricelist of this order (and eventually the currency), " @@ -1591,7 +1591,8 @@ msgid "Invoice address :" msgstr "Számlázási cím:" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:124 +#: code:addons/sale/wizard/sale_line_invoice.py:121 +#: model:ir.model,name:sale.model_account_invoice #: model:process.node,name:sale.process_node_invoice0 #: view:sale.order:0 #, python-format @@ -1678,7 +1679,7 @@ msgid "Shipping address :" msgstr "Szállítási cím:" #. module: sale -#: code:addons/sale/sale.py:510 +#: code:addons/sale/sale.py:505 #, python-format msgid "" "You cannot group sales having different currencies for the same partner." @@ -2196,8 +2197,9 @@ msgid "Manual In Progress" msgstr "Manuális vezérléssel folyamatban" #. module: sale -#: code:addons/sale/wizard/sale_line_invoice.py:110 -#: code:addons/sale/wizard/sale_make_invoice.py:43 +#: code:addons/sale/wizard/sale_line_invoice.py:107 +#: code:addons/sale/wizard/sale_make_invoice.py:42 +#: code:addons/sale/wizard/sale_make_invoice.py:55 #, python-format msgid "Warning!" msgstr "Figyelem!" @@ -2466,9 +2468,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Compute" #~ msgstr "Számítás" -#~ msgid "Partial Delivery" -#~ msgstr "Részleges kiszállítás" - #~ msgid "UoM" #~ msgstr "ME" @@ -2779,9 +2778,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Open Advance Invoice" #~ msgstr "Előzetes számla megnyitása" -#~ msgid "Sales Management" -#~ msgstr "Értékesítési menedzsment" - #~ msgid "Deliver" #~ msgstr "Szállítás" @@ -2792,9 +2788,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Sale Order Line" #~ msgstr "Rendelési tétel" -#~ msgid "Cancel Assignation" -#~ msgstr "Számla sztornó" - #~ msgid "Invoice from the Packing" #~ msgstr "Számla a csomagolási listából" @@ -2850,9 +2843,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Related invoices" #~ msgstr "Kapcsolódó számlák" -#~ msgid "Payment Before Delivery" -#~ msgstr "Fizetés szállítás előtt" - #~ msgid "" #~ "This is the list of invoices that have been generated for this sale order. " #~ "The same sale order may have been invoiced in several times (by line for " @@ -2877,6 +2867,9 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Sale Order line" #~ msgstr "Rendelési sor" +#~ msgid "Payment Before Delivery" +#~ msgstr "Szállítás előtti fizetés" + #~ msgid "All at Once" #~ msgstr "Egyszerre" @@ -2892,9 +2885,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Notes" #~ msgstr "Megjegyzések" -#~ msgid "Lines to Invoice" -#~ msgstr "Számla sorai" - #~ msgid "All Quotations" #~ msgstr "Összes árajánlat" @@ -2922,9 +2912,6 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Picking List" #~ msgstr "Kiszedési lista" -#~ msgid "Picking List & Delivery Order" -#~ msgstr "Kiszedési lista és Szállítás megrendelése" - #~ msgid "Invoicing" #~ msgstr "Számlázás" @@ -2950,18 +2937,21 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Shipped Qty" #~ msgstr "Szállított mennyiség" -#~ msgid "Shipping Default Policy" -#~ msgstr "Alapértelmezett szállítási politika" - #~ msgid "Close" #~ msgstr "Zárás" +#~ msgid "Cancel Assignation" +#~ msgstr "Hozzárendelés megszüntetése" + #~ msgid "State" #~ msgstr "Állapot" #~ msgid "Configure" #~ msgstr "Beállítás" +#~ msgid "Lines to Invoice" +#~ msgstr "Kiszámlázandó sorok" + #~ msgid "Order State" #~ msgstr "Megrendelés állapota" @@ -3675,3 +3665,15 @@ msgstr "A megrendelés megrendelési dátuma" #~ msgid "Invoice Policy" #~ msgstr "Számlázási szabály" + +#~ msgid "Partial Delivery" +#~ msgstr "Rész-szállítmány" + +#~ msgid "Shipping Default Policy" +#~ msgstr "Alapértelmezett számlázási szabály" + +#~ msgid "Sales Management" +#~ msgstr "Értékesítés kezelés" + +#~ msgid "Picking List & Delivery Order" +#~ msgstr "Kiválogatási lista & Kézbesítési bizonylat/szállító levél" diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 67c6f82ced3..55bd34009bf 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -34,8 +34,8 @@ class sale_order(osv.osv): _description = "Sales Order" _track = { 'state': { - 'sale.mt_order_confirmed': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['manual'], - 'sale.mt_order_sent': lambda self, cr, uid, obj, ctx=None: obj['state'] in ['sent'] + 'sale.mt_order_confirmed': lambda self, cr, uid, obj, ctx=None: obj.state in ['manual'], + 'sale.mt_order_sent': lambda self, cr, uid, obj, ctx=None: obj.state in ['sent'] }, } diff --git a/addons/sale/html/Gunther-Rombouts.png b/addons/sale/static/description/Gunther-Rombouts.png similarity index 100% rename from addons/sale/html/Gunther-Rombouts.png rename to addons/sale/static/description/Gunther-Rombouts.png diff --git a/addons/sale/html/Philippe-Leruth.png b/addons/sale/static/description/Philippe-Leruth.png similarity index 100% rename from addons/sale/html/Philippe-Leruth.png rename to addons/sale/static/description/Philippe-Leruth.png diff --git a/addons/sale/static/src/img/icon.png b/addons/sale/static/description/icon.png similarity index 100% rename from addons/sale/static/src/img/icon.png rename to addons/sale/static/description/icon.png diff --git a/addons/sale/html/index.html b/addons/sale/static/description/index.html similarity index 98% rename from addons/sale/html/index.html rename to addons/sale/static/description/index.html index 1eb6215db2f..52c84b82f12 100644 --- a/addons/sale/html/index.html +++ b/addons/sale/static/description/index.html @@ -17,7 +17,7 @@ you need, easily accessible. Keep track of long term contracts, automate invoici and notify sales when they have things to do.

diff --git a/addons/sale/html/sale_invoice.png b/addons/sale/static/description/sale_invoice.png similarity index 100% rename from addons/sale/html/sale_invoice.png rename to addons/sale/static/description/sale_invoice.png diff --git a/addons/sale/html/sale_sc_00.png b/addons/sale/static/description/sale_sc_00.png similarity index 100% rename from addons/sale/html/sale_sc_00.png rename to addons/sale/static/description/sale_sc_00.png diff --git a/addons/sale/html/sale_sc_01.png b/addons/sale/static/description/sale_sc_01.png similarity index 100% rename from addons/sale/html/sale_sc_01.png rename to addons/sale/static/description/sale_sc_01.png diff --git a/addons/sale/html/sale_sc_02.png b/addons/sale/static/description/sale_sc_02.png similarity index 100% rename from addons/sale/html/sale_sc_02.png rename to addons/sale/static/description/sale_sc_02.png diff --git a/addons/sale/html/sale_sc_03.png b/addons/sale/static/description/sale_sc_03.png similarity index 100% rename from addons/sale/html/sale_sc_03.png rename to addons/sale/static/description/sale_sc_03.png diff --git a/addons/sale/html/sale_sc_04.png b/addons/sale/static/description/sale_sc_04.png similarity index 100% rename from addons/sale/html/sale_sc_04.png rename to addons/sale/static/description/sale_sc_04.png diff --git a/addons/sale/html/sale_sc_05.png b/addons/sale/static/description/sale_sc_05.png similarity index 100% rename from addons/sale/html/sale_sc_05.png rename to addons/sale/static/description/sale_sc_05.png diff --git a/addons/sale/html/sale_sc_06.png b/addons/sale/static/description/sale_sc_06.png similarity index 100% rename from addons/sale/html/sale_sc_06.png rename to addons/sale/static/description/sale_sc_06.png diff --git a/addons/sale/html/sale_sc_07.png b/addons/sale/static/description/sale_sc_07.png similarity index 100% rename from addons/sale/html/sale_sc_07.png rename to addons/sale/static/description/sale_sc_07.png diff --git a/addons/sale/html/sale_sc_08.png b/addons/sale/static/description/sale_sc_08.png similarity index 100% rename from addons/sale/html/sale_sc_08.png rename to addons/sale/static/description/sale_sc_08.png diff --git a/addons/sale/html/sale_sc_10.png b/addons/sale/static/description/sale_sc_10.png similarity index 100% rename from addons/sale/html/sale_sc_10.png rename to addons/sale/static/description/sale_sc_10.png diff --git a/addons/sale/html/sales_illu_01.png b/addons/sale/static/description/sales_illu_01.png similarity index 100% rename from addons/sale/html/sales_illu_01.png rename to addons/sale/static/description/sales_illu_01.png diff --git a/addons/sale/html/sales_target.png b/addons/sale/static/description/sales_target.png similarity index 100% rename from addons/sale/html/sales_target.png rename to addons/sale/static/description/sales_target.png diff --git a/addons/stock/html/Didier-Georgieff.jpg b/addons/stock/static/description/Didier-Georgieff.jpg similarity index 100% rename from addons/stock/html/Didier-Georgieff.jpg rename to addons/stock/static/description/Didier-Georgieff.jpg diff --git a/addons/stock/html/Mario-Riva.png b/addons/stock/static/description/Mario-Riva.png similarity index 100% rename from addons/stock/html/Mario-Riva.png rename to addons/stock/static/description/Mario-Riva.png diff --git a/addons/stock/static/src/img/icon.png b/addons/stock/static/description/icon.png similarity index 100% rename from addons/stock/static/src/img/icon.png rename to addons/stock/static/description/icon.png diff --git a/addons/stock/html/index.html b/addons/stock/static/description/index.html similarity index 98% rename from addons/stock/html/index.html rename to addons/stock/static/description/index.html index aac71e529ae..dd7fbe568f7 100644 --- a/addons/stock/html/index.html +++ b/addons/stock/static/description/index.html @@ -17,7 +17,7 @@ Decrease your process times, automate transactions, reduce your stock levels and get complete traceability on all operations with the OpenERP double entry inventory system.

diff --git a/addons/stock/html/stock_calendar.png b/addons/stock/static/description/stock_calendar.png similarity index 100% rename from addons/stock/html/stock_calendar.png rename to addons/stock/static/description/stock_calendar.png diff --git a/addons/stock/html/stock_integrate.png b/addons/stock/static/description/stock_integrate.png similarity index 100% rename from addons/stock/html/stock_integrate.png rename to addons/stock/static/description/stock_integrate.png diff --git a/addons/stock/html/stock_main.png b/addons/stock/static/description/stock_main.png similarity index 100% rename from addons/stock/html/stock_main.png rename to addons/stock/static/description/stock_main.png diff --git a/addons/stock/html/stock_procurement.png b/addons/stock/static/description/stock_procurement.png similarity index 100% rename from addons/stock/html/stock_procurement.png rename to addons/stock/static/description/stock_procurement.png diff --git a/addons/stock/html/stock_product.png b/addons/stock/static/description/stock_product.png similarity index 100% rename from addons/stock/html/stock_product.png rename to addons/stock/static/description/stock_product.png diff --git a/addons/stock/html/stock_product_form.png b/addons/stock/static/description/stock_product_form.png similarity index 100% rename from addons/stock/html/stock_product_form.png rename to addons/stock/static/description/stock_product_form.png diff --git a/addons/stock/html/stock_reporting.png b/addons/stock/static/description/stock_reporting.png similarity index 100% rename from addons/stock/html/stock_reporting.png rename to addons/stock/static/description/stock_reporting.png diff --git a/addons/stock/html/warehouse_illu_01.png b/addons/stock/static/description/warehouse_illu_01.png similarity index 100% rename from addons/stock/html/warehouse_illu_01.png rename to addons/stock/static/description/warehouse_illu_01.png diff --git a/addons/stock/html/warehouse_illu_02.png b/addons/stock/static/description/warehouse_illu_02.png similarity index 100% rename from addons/stock/html/warehouse_illu_02.png rename to addons/stock/static/description/warehouse_illu_02.png diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index b1a1fa048be..14b3ba04eb5 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -918,7 +918,7 @@ - + @@ -1045,7 +1045,7 @@