diff options
| author | Nimesh Contractor (OpenERP) <nco@tinyerp.com> | 2013-07-22 11:14:25 +0530 |
|---|---|---|
| committer | Nimesh Contractor (OpenERP) <nco@tinyerp.com> | 2013-07-22 11:14:25 +0530 |
| commit | eebb294427e185f14e894eecdbd112de3589b23f (patch) | |
| tree | 09188ad91eea483cf6c2034c6d2e65079a5608df | |
| parent | 59a1efef9ff955633217b8fdc9732872b673d276 (diff) | |
| parent | 1d82442202c9a632ef67b10e12d75c2ed9861a00 (diff) | |
[MERGE] with trunk,
bzr revid: nco@tinyerp.com-20130722054425-idq5mgulodzlrxpx
160 files changed, 15357 insertions, 2550 deletions
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/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 <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-07-10 11:49+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Icelandic <is@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a fiscal period.\n" +" </p><p>\n" +" An accounting period typically is a month or a quarter. It\n" +" usually corresponds to the periods of the tax declaration.\n" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a customer refund. \n" +" </p><p>\n" +" A refund is a document that credits an invoice completely " +"or\n" +" partially.\n" +" </p><p>\n" +" Instead of manually creating a customer refund, you\n" +" can generate it directly from the related customer invoice.\n" +" </p>\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 "" +"<p>\n" +" No journal items found.\n" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add an account.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new cash log.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to define a new account type.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to record a new supplier invoice.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to register a bank statement.\n" +" </p><p>\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" +" </p><p>\n" +" OpenERP allows you to reconcile a statement line directly " +"with\n" +" the related sale or puchase invoices.\n" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a journal entry.\n" +" </p><p>\n" +" A journal entry consists of several journal items, each of\n" +" which is either a debit or a credit transaction.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to start a new fiscal year.\n" +" </p><p>\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" +" </p>\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" +"<div style=\"font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-" +"serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; \">\n" +"\n" +" <p>Hello ${object.partner_id.name},</p>\n" +"\n" +" <p>A new invoice is available for you: </p>\n" +" \n" +" <p style=\"border-left: 1px solid #8e0000; margin-left: 30px;\">\n" +" <strong>REFERENCES</strong><br />\n" +" Invoice number: <strong>${object.number}</strong><br />\n" +" Invoice total: <strong>${object.amount_total} " +"${object.currency_id.name}</strong><br />\n" +" Invoice date: ${object.date_invoice}<br />\n" +" % if object.origin:\n" +" Order reference: ${object.origin}<br />\n" +" % endif\n" +" % if object.user_id:\n" +" Your contact: <a href=\"mailto:${object.user_id.email or " +"''}?subject=Invoice%20${object.number}\">${object.user_id.name}</a>\n" +" % endif\n" +" </p> \n" +" \n" +" % if object.paypal_url:\n" +" <br/>\n" +" <p>It is also possible to directly pay with Paypal:</p>\n" +" <a style=\"margin-left: 120px;\" href=\"${object.paypal_url}\">\n" +" <img class=\"oe_edi_paypal_button\" " +"src=\"https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif\"/>\n" +" </a>\n" +" % endif\n" +" \n" +" <br/>\n" +" <p>If you have any question, do not hesitate to contact us.</p>\n" +" <p>Thank you for choosing ${object.company_id.name or 'us'}!</p>\n" +" <br/>\n" +" <br/>\n" +" <div style=\"width: 375px; margin: 0px; padding: 0px; background-color: " +"#8E0000; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; " +"background-repeat: repeat no-repeat;\">\n" +" <h3 style=\"margin: 0px; padding: 2px 14px; font-size: 12px; color: " +"#DDD;\">\n" +" <strong style=\"text-" +"transform:uppercase;\">${object.company_id.name}</strong></h3>\n" +" </div>\n" +" <div style=\"width: 347px; margin: 0px; padding: 5px 14px; line-height: " +"16px; background-color: #F2F2F2;\">\n" +" <span style=\"color: #222; margin-bottom: 5px; display: block; \">\n" +" % if object.company_id.street:\n" +" ${object.company_id.street}<br/>\n" +" % endif\n" +" % if object.company_id.street2:\n" +" ${object.company_id.street2}<br/>\n" +" % endif\n" +" % if object.company_id.city or object.company_id.zip:\n" +" ${object.company_id.zip} ${object.company_id.city}<br/>\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 ''}<br/>\n" +" % endif\n" +" </span>\n" +" % if object.company_id.phone:\n" +" <div style=\"margin-top: 0px; margin-right: 0px; margin-bottom: " +"0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: " +"0px; padding-left: 0px; \">\n" +" Phone: ${object.company_id.phone}\n" +" </div>\n" +" % endif\n" +" % if object.company_id.website:\n" +" <div>\n" +" Web : <a " +"href=\"${object.company_id.website}\">${object.company_id.website}</a>\n" +" </div>\n" +" %endif\n" +" <p></p>\n" +" </div>\n" +"</div>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a customer invoice.\n" +" </p><p>\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" +" </p><p>\n" +" The discussions with your customer are automatically " +"displayed at\n" +" the bottom of each invoice.\n" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to setup a new bank account. \n" +" </p><p>\n" +" Configure your company's bank account and select those that " +"must\n" +" appear on the report footer.\n" +" </p><p>\n" +" If you use the accounting application of OpenERP, journals and\n" +" accounts will be created automatically based on these data.\n" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add an account.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to register a refund you received from a supplier.\n" +" </p><p>\n" +" Instead of creating the supplier refund manually, you can " +"generate\n" +" refunds and reconcile them directly from the related " +"supplier invoice.\n" +" </p>\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 "" +"<p>\n" +" Click to add a new analytic account.\n" +" </p><p>\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" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a journal.\n" +" </p><p>\n" +" A journal is used to record transactions of all accounting " +"data\n" +" related to the day-to-day business.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to define a new recurring entry.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to define a new tax code.\n" +" </p><p>\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" +" </p>\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 "" +"<p class=\"oe_view_nocontent_create\">\n" +" Select the period and the journal you want to fill.\n" +" </p><p>\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" +" </p>\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 6e2fd083b54..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-27 14:01+0000\n" +"PO-Revision-Date: 2013-07-02 06:32+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\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 @@ -4707,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 @@ -4826,7 +4826,7 @@ msgstr "Отметьте, если хотите выводить счета с 0 #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Сверка проводок открытия" #. module: account #. openerp-web 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 @@ <para style="terp_default_Centre_8">[[ data['form']['period_length'] ]]</para> </td> <td> - <para style="terp_default_Centre_8">[[ get_partners(data) ]]</para> + <para style="terp_default_Centre_8">Receivable Accounts[[ data['form']['result_selection'] == 'customer' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Payable Accounts[[ data['form']['result_selection'] == 'supplier' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form']['result_selection'] == 'customer_supplier' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_8">[[ data['form']['direction_selection'] ]]</para> @@ -166,7 +168,8 @@ <para style="terp_tblheader_Details">Partners</para> </td> <td> - <para style="terp_tblheader_Details_Right">[[ data['form']['direction_selection'] == 'future' and 'Due' or 'Not due' ]]</para> + <para style="terp_tblheader_Details_Right">Due[[ data['form']['direction_selection'] == 'future' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_Details_Right">Not due[[ data['form']['direction_selection'] != 'future' and ' ' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_tblheader_Details_Right">[[ data['form']['4']['name'] ]]</para> 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 @@ </para> <blockTable colWidths="130.0,80.0,100.0,140.0,90.0" style="Table8"> <tr> - <td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td> + <para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para> + </td> <td> <para style="terp_tblheader_General_Centre">Fiscal Year</para> </td> @@ -233,7 +235,11 @@ <td> <para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para> </td> - <td><para style="terp_default_Centre_8">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para></td> + <td> + <para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para> + </td> <td> <para style="terp_default_Centre_8">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] </para> <blockTable colWidths="60.0,60.0" style="Table5">[[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]] <tr> 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 @@ </blockTable> <blockTable colWidths="80.0,100,80.0,150.0,100.0" style="Table2"> <tr> - <td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td> <td><para style="terp_tblheader_General_Centre">Journals</para></td> <td><para style="terp_tblheader_General_Centre">Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]]</para></td> 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 @@ <blockTable colWidths="110.0,110.0,110.0,110.0,128.0,93.0,110.0" style="Table1"> <tr> <td> - <para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para> - </td> + <para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td> <para style="terp_tblheader_General_Centre">Fiscal Year</para> </td> @@ -395,7 +394,9 @@ <para style="terp_default_Centre_7">[[', '.join([ lt or '' for lt in get_journal(data) ]) ]]</para> </td> <td> - <para style="terp_default_Centre_7">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para> + <para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_7">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]]</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 @@ </para> <blockTable colWidths="85.0,80.0,80.0,120.0,70.0,100.0" style="Table2"> <tr> - <td><para style="terp_tblheader_General_Centre"> [[ data['model']=='account.journal.period'and 'Company' or removeParentNode('para') ]]</para> - <para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td> + <td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period'and ' ' or removeParentNode('para') ]]</para> + <para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td> <td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td> <td><para style="terp_tblheader_General_Centre">Journal</para></td> <td><para style="terp_tblheader_General_Centre">Period</para></td> @@ -199,8 +199,10 @@ <td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td> <td><para style="terp_default_Centre_8">[[ o.journal_id.name ]]</para></td> <td><para style="terp_default_Centre_8">[[ o.period_id.name ]] </para></td> - <td><para style="terp_default_Centre_8">[[ get_sortby(data) ]]</para></td> - <td><para style="terp_default_Centre_8">[[ get_target_move(data) ]] </para></td> + <td> + <para style="terp_default_Centre_8">Date[[ data['form'].get('sort_selection', 'date') == 'date' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Reference Number[[ data['form'].get('sort_selection', 'date') == 'ref' and ' ' or removeParentNode('para') ]]</para> + </td> </tr> </blockTable> <para style="P9"> 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 @@ </para> </td> <td> - <para style="terp_default_Centre_8">[[ get_partners() ]]</para> + <para style="terp_default_Centre_8">Receivable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'supplier' or removeParentNode('para') ]]</para> + <para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer_supplier' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Centre_8">[[ get_target_move(data) ]]</para> diff --git a/addons/account/static/description/index.html b/addons/account/static/description/index.html index 09a58fb3246..d9b26f11d16 100644 --- a/addons/account/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=account" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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_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 @@ <field name="model">account.analytic.default</field> <field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/> <field name="arch" type="xml"> - <field name="analytic_id" required="1" position="replace"> + <xpath expr="//field[@name='analytic_id']" position="attributes"> + <attribute name="invisible">1</attribute> + </xpath> + <xpath expr="//field[@name='analytic_id']" position="after"> <field name="analytics_id" required="1"/> - </field> + </xpath> </field> </record> 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 <EMAIL@ADDRESS>\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 <Unknown>\n" +"PO-Revision-Date: 2013-06-30 16:08+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" "Language-Team: Vietnamese <vi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 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) <Unknown>\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 "" " </p>\n" " " msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" Klik hier als u een nieuwe leveranciersbetaling wilt maken.\n" +" </p><p>\n" +" Met OpenERP kunt u betalingen aan leveranciers opvolgen.\n" +" </p>\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 <b>changed</b>" msgstr "Status <b>vgewijzigd</b>" #. 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/static/description/index.html b/addons/account_voucher/static/description/index.html index d59c110dde5..a363291f12e 100644 --- a/addons/account_voucher/static/description/index.html +++ b/addons/account_voucher/static/description/index.html @@ -17,7 +17,7 @@ automatically based on your activities. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=account_voucher" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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/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 <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-04-16 04:33+0000\n" -"Last-Translator: Key <key.diagram@gmail.com>\n" +"PO-Revision-Date: 2013-07-02 08:11+0000\n" +"Last-Translator: DWXXX <Unknown>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-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_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 <EMAIL@ADDRESS>\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 <Unknown>\n" +"PO-Revision-Date: 2013-06-30 16:09+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" "Language-Team: Vietnamese <vi@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 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_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 <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-08 15:10+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Swedish <sv@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-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 <b>opened</b>." +msgstr "%s har <b>öppnats</b>." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been <b>renewed</b>." +msgstr "%s har <b>förnyats</b>." + +#. 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 <b>pending</b>." +msgstr "%s är nu <b>pågående</b>." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been <b>canceled</b>." +msgstr "%s har <b>avbrutits</b>." + +#. 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 <b>closed</b>." +msgstr "%s har <b>stängts</b>." 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 <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-30 16:10+0000\n" +"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n" +"Language-Team: Vietnamese <vi@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 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/crm/crm_lead.py b/addons/crm/crm_lead.py index 1070af22b3c..46a3f6e199e 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" @@ -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): @@ -631,7 +621,7 @@ class crm_lead(base_stage, format_address, osv.osv): attachment.write(values) return True - def merge_opportunity(self, cr, uid, ids, context=None): + def merge_opportunity(self, cr, uid, ids, user_id=False, section_id=False, context=None): """ Different cases of merge: - merge leads together = 1 new lead @@ -665,6 +655,11 @@ class crm_lead(base_stage, format_address, osv.osv): fields = list(CRM_LEAD_FIELDS_TO_MERGE) merged_data = self._merge_data(cr, uid, ids, highest, fields, context=context) + if user_id: + merged_data['user_id'] = user_id + if section_id: + merged_data['section_id'] = section_id + # Merge messages and attachements into the first opportunity self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context) self._merge_opportunity_attachments(cr, uid, highest.id, tail_opportunities, context=context) @@ -932,12 +927,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 +1029,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 4c6cf47c4f7..3917fadbd32 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -263,13 +263,6 @@ Andrew</field> <field eval="1" name="active"/> </record> - <!-- Call Function to Cancel the leads (set as Dead) --> - <function model="crm.lead" name="case_cancel" - eval="[ ref('crm_case_12'), ref('crm_case_7'), - ref('crm_case_3'), ref('crm_case_8')], - {'install_mode': True}" - /> - <!-- Call Function to set the leads as Unread --> <function model="crm.lead" name="message_mark_as_unread" eval="[ ref('crm_case_1'), ref('crm_case_2'), 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 @@ <header> <button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action" states="draft,open,pending" help="Convert to Opportunity" class="oe_highlight"/> - <button name="case_reset" string="Reset" type="object" - states="cancel"/> - <button name="case_cancel" string="Cancel Case" type="object" - states="draft,open,pending"/> <field name="stage_id" widget="statusbar" clickable="True" domain="['&', '|', ('case_default', '=', True), ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]" on_change="onchange_stage_id(stage_id)"/> @@ -118,7 +114,7 @@ <field name="partner_name" string="Company Name"/> <!-- Preload all the partner's information --> <field name="partner_id" string="Customer" - on_change="on_change_partner(partner_id)" + on_change="on_change_partner_id(partner_id)" options='{"create_name_field": "name"}' context="{'default_name': contact_name, 'default_street': street, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_function': function, 'default_phone': phone, 'default_mobile': mobile, 'default_fax': fax, 'default_email': email_from, 'default_user_id': user_id, 'default_section_id': section_id}"/> <label for="street" string="Address"/> @@ -617,7 +613,7 @@ <field name="state">code</field> <field name="code"> if context.get('active_model') == 'crm.lead' and context.get('active_ids'): - self.case_cancel(cr, uid, context['active_ids'], context=context) + self.case_mark_lost(cr, uid, context['active_ids'], context=context) </field> <field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/> </record> diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml index 2344604a294..f6f94547173 100644 --- a/addons/crm/crm_phonecall_menu.xml +++ b/addons/crm/crm_phonecall_menu.xml @@ -58,7 +58,7 @@ <field name="view_mode">tree,calendar</field> <field name="view_id" ref="crm_case_inbound_phone_tree_view"/> <field name="domain">[]</field> - <field name="context">{}</field> + <field name="context">{'default_state': 'done'}</field> <field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/> <field name="help" type="html"> <p class="oe_view_nocontent_create"> diff --git a/addons/crm/doc/changelog.rst b/addons/crm/doc/changelog.rst new file mode 100644 index 00000000000..cb1602a8d39 --- /dev/null +++ b/addons/crm/doc/changelog.rst @@ -0,0 +1,11 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- ``crm``, ``crm_claim``: removed inheritance from ``base_stage`` class. Missing + methods have been added into ``crm`` and ``crm_claim``. Also removed inheritance + in ``crm_helpdesk`` because it uses states, not stages.
\ No newline at end of file diff --git a/addons/crm/doc/index.rst b/addons/crm/doc/index.rst new file mode 100644 index 00000000000..d70e045befe --- /dev/null +++ b/addons/crm/doc/index.rst @@ -0,0 +1,13 @@ +CRM module documentation +======================== + +CRM documentation topics +''''''''''''''''''''''''' + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/crm/i18n/hu.po b/addons/crm/i18n/hu.po index 6673d2da235..0289fac77cf 100644 --- a/addons/crm/i18n/hu.po +++ b/addons/crm/i18n/hu.po @@ -7,14 +7,19 @@ 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-21 07:11+0000\n" +"PO-Revision-Date: 2013-07-09 07:36+0000\n" "Last-Translator: krnkris <Unknown>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-22 05:36+0000\n" -"X-Generator: Launchpad (build 16677)\n" +"X-Launchpad-Export-Date: 2013-07-10 05:25+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: crm +#: model:crm.case.stage,name:crm.stage_lead3 +msgid "Qualification" +msgstr "Besorolás" #. module: crm #: view:crm.lead.report:0 @@ -2687,11 +2692,6 @@ msgid "My Phone Calls" msgstr "Telefonhívásaim" #. module: crm -#: model:crm.case.stage,name:crm.stage_lead3 -msgid "Qualification" -msgstr "Besorolás" - -#. module: crm #: field:crm.lead2opportunity.partner,name:0 #: field:crm.lead2opportunity.partner.mass,name:0 msgid "Conversion Action" @@ -3961,10 +3961,20 @@ msgstr "" #~ msgid "Can not add note!" #~ msgstr "Nem lehet hozzáadni megjegyzést!" +#, python-format +#~ msgid "" +#~ "Opportunity must have Partner assigned before merging with other Opportunity." +#~ msgstr "" +#~ "Csak a Partnerhez rendelt Lehetőséget lehet más Lehetőséggel összefűzni." + #~ msgid "_Merge" #~ msgstr "Össze_fésülés" #, python-format +#~ msgid "The opportunity '%s' has been marked as lost." +#~ msgstr "A '%s' lehetőséget elvesztettnek jelöltem." + +#, python-format #~ msgid "Lead '%s' has been converted to an opportunity." #~ msgstr "A '%s'" @@ -3991,3 +4001,17 @@ msgstr "" #~ msgid "Convert To Opportunity" #~ msgstr "Átalakítás lehetőséggé" + +#~ msgid "Edit all Occurrences of recurrent Meeting." +#~ msgstr "Az ismétlődő találkozók összes eseményének szerkesztése." + +#~ msgid "" +#~ "Leads Analysis allows you to check different CRM related information. Check " +#~ "for treatment delays, number of responses given and emails sent. You can " +#~ "sort out your leads analysis by different groups to get accurate grained " +#~ "analysis." +#~ msgstr "" +#~ "Az érdeklődések elemzése több CRM-hez kapcsolódó információt nyújt. " +#~ "Ellenőrizhetjük az eljárás elnapolását, a kiküldött válaszok és e-mailek " +#~ "számát. A részletes eredmény érdekében az érdeklődéseket különféle " +#~ "csoportosítások szerint is elemezhetjük." diff --git a/addons/crm/res_partner.py b/addons/crm/res_partner.py index f25b1303c02..fca9222082d 100644 --- a/addons/crm/res_partner.py +++ b/addons/crm/res_partner.py @@ -56,7 +56,7 @@ class res_partner(osv.osv): default.update({'opportunity_ids': [], 'meeting_ids' : [], 'phonecall_ids' : []}) - super(res_partner, self).copy(cr, uid, record_id, default, context) + return super(res_partner, self).copy(cr, uid, record_id, default, context) def redirect_partner_form(self, cr, uid, partner_id, context=None): search_view = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'view_res_partner_filter') diff --git a/addons/crm/static/description/index.html b/addons/crm/static/description/index.html index 5ae542f5c91..70f52d0ca87 100644 --- a/addons/crm/static/description/index.html +++ b/addons/crm/static/description/index.html @@ -17,7 +17,7 @@ Manage your sales funnel with no effort. Attract leads, follow-up on phone calls and meetings. Analyse the quality of your leads to make informed decisions and save time by integrating emails directly into the application. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=crm" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py index 3c847ade42a..342ef13f17e 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity.py +++ b/addons/crm/wizard/crm_lead_to_opportunity.py @@ -35,6 +35,8 @@ class crm_lead2opportunity_partner(osv.osv_memory): ('merge', 'Merge with existing opportunities') ], 'Conversion Action', required=True), 'opportunity_ids': fields.many2many('crm.lead', string='Opportunities'), + 'user_id': fields.many2one('res.users', 'Salesperson', select=True), + 'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True), } def default_get(self, cr, uid, fields, context=None): @@ -74,9 +76,27 @@ class crm_lead2opportunity_partner(osv.osv_memory): res.update({'name' : len(tomerge) >= 2 and 'merge' or 'convert'}) if 'opportunity_ids' in fields and len(tomerge) >= 2: res.update({'opportunity_ids': list(tomerge)}) - + if lead.user_id: + res.update({'user_id': lead.user_id.id}) + if lead.section_id: + res.update({'section_id': lead.section_id.id}) return res + def on_change_user(self, cr, uid, ids, user_id, section_id, context=None): + """ When changing the user, also set a section_id or restrict section id + to the ones user_id is member of. """ + if user_id: + if section_id: + user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True) + else: + user_in_section = False + if not user_in_section: + section_id = False + section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context) + if section_ids: + section_id = section_ids[0] + return {'value': {'section_id': section_id}} + def view_init(self, cr, uid, fields, context=None): """ Check some preconditions before the wizard executes. @@ -118,15 +138,15 @@ class crm_lead2opportunity_partner(osv.osv_memory): w = self.browse(cr, uid, ids, context=context)[0] opp_ids = [o.id for o in w.opportunity_ids] if w.name == 'merge': - lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, context=context) + lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, w.user_id.id, w.section_id.id, context=context) lead_ids = [lead_id] lead = self.pool.get('crm.lead').read(cr, uid, lead_id, ['type'], context=context) if lead['type'] == "lead": context.update({'active_ids': lead_ids}) - self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context) + self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context) else: lead_ids = context.get('active_ids', []) - self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context) + self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context) return self.pool.get('crm.lead').redirect_opportunity_view(cr, uid, lead_ids[0], context=context) diff --git a/addons/crm/wizard/crm_lead_to_opportunity_view.xml b/addons/crm/wizard/crm_lead_to_opportunity_view.xml index 9ddd1fc701f..4f6522c27de 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity_view.xml +++ b/addons/crm/wizard/crm_lead_to_opportunity_view.xml @@ -10,6 +10,10 @@ <group name="name"> <field name="name" class="oe_inline"/> </group> + <group string="Assign opportunities to"> + <field name="user_id" class="oe_inline" on_change="on_change_user(user_id, section_id, context)"/> + <field name="section_id" class="oe_inline"/> + </group> <group string="Opportunities"> <field name="opportunity_ids" attrs="{'invisible': [('name', '!=', 'merge')]}" nolabel="1"> <tree> @@ -56,6 +60,10 @@ attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}" class="oe_inline"/> </group> + <group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}"> + <field name="section_id" groups="base.group_multi_salesteams"/> + <field name="user_ids" widget="many2many_tags"/> + </group> <group string="Select Opportunities" attrs="{'invisible': [('name', '!=', 'merge')]}"> <field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}"> <tree> @@ -72,12 +80,6 @@ </tree> </field> </group> - - <group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}"> - <field name="section_id" groups="base.group_multi_salesteams"/> - <field name="user_ids" widget="many2many_tags"/> - </group> - <footer> <button name="mass_convert" string="Convert to Opportunities" type="object" class="oe_highlight"/> or diff --git a/addons/crm/wizard/crm_merge_opportunities.py b/addons/crm/wizard/crm_merge_opportunities.py index 8b78c039007..43fbaa786ea 100644 --- a/addons/crm/wizard/crm_merge_opportunities.py +++ b/addons/crm/wizard/crm_merge_opportunities.py @@ -34,6 +34,8 @@ class crm_merge_opportunity(osv.osv_memory): _description = 'Merge opportunities' _columns = { 'opportunity_ids': fields.many2many('crm.lead', rel='merge_opportunity_rel', id1='merge_id', id2='opportunity_id', string='Leads/Opportunities'), + 'user_id': fields.many2one('res.users', 'Salesperson', select=True), + 'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True), } def action_merge(self, cr, uid, ids, context=None): @@ -47,7 +49,7 @@ class crm_merge_opportunity(osv.osv_memory): #TODO: why is this passed through the context ? context['lead_ids'] = [opportunity2merge_ids[0].id] - merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], context=context) + merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], wizard.user_id.id, wizard.section_id.id, context=context) # The newly created lead might be a lead or an opp: redirect toward the right view merge_result = lead_obj.browse(cr, uid, merge_id, context=context) @@ -79,4 +81,19 @@ class crm_merge_opportunity(osv.osv_memory): return res + def on_change_user(self, cr, uid, ids, user_id, section_id, context=None): + """ When changing the user, also set a section_id or restrict section id + to the ones user_id is member of. """ + if user_id: + if section_id: + user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True) + else: + user_in_section = False + if not user_in_section: + section_id = False + section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context) + if section_ids: + section_id = section_ids[0] + return {'value': {'section_id': section_id}} + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/wizard/crm_merge_opportunities_view.xml b/addons/crm/wizard/crm_merge_opportunities_view.xml index 60693c13e19..d43993b8389 100644 --- a/addons/crm/wizard/crm_merge_opportunities_view.xml +++ b/addons/crm/wizard/crm_merge_opportunities_view.xml @@ -8,20 +8,25 @@ <field name="model">crm.merge.opportunity</field> <field name="arch" type="xml"> <form string="Merge Leads/Opportunities" version="7.0"> - <separator string="Select Leads/Opportunities"/> - <field name="opportunity_ids"> - <tree> - <field name="create_date"/> - <field name="name"/> - <field name="type"/> - <field name="contact_name"/> - <field name="email_from"/> - <field name="phone"/> - <field name="stage_id"/> - <field name="user_id"/> - <field name="section_id" groups="base.group_multi_salesteams"/> - </tree> - </field> + <group string="Assign opportunities to"> + <field name="user_id" class="oe_inline" on_change="on_change_user(user_id, context)"/> + <field name="section_id" class="oe_inline"/> + </group> + <group string="Select Leads/Opportunities"> + <field name="opportunity_ids" nolabel="1"> + <tree> + <field name="create_date"/> + <field name="name"/> + <field name="type"/> + <field name="contact_name"/> + <field name="email_from"/> + <field name="phone"/> + <field name="stage_id"/> + <field name="user_id"/> + <field name="section_id" groups="base.group_multi_salesteams"/> + </tree> + </field> + </group> <footer> <button name="action_merge" type="object" string="Merge" class="oe_highlight"/> or 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 @@ <field name="case_default"/> <field name="sequence"/> <field name="state"/> - <field name="case_refused"/> <field name="fold"/> </form> </field> @@ -102,10 +101,6 @@ <field name="arch" type="xml"> <form string="Claim" version="7.0"> <header> - <button name="case_close" string="Settle" type="object" class="oe_highlight" - states="draft,open,pending" groups="base.group_user"/> - <button name="case_cancel" string="Reject" type="object" groups="base.group_user" - states="draft,open,pending"/> <field name="stage_id" widget="statusbar" clickable="True"/> </header> <sheet string="Claims"> 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 <info@customer.com>')]) - 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 <info@customer.com>')]) 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 <info@customer.com>')]) - 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 <info@customer.com>')]) - 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/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py index 37a8c5a3d6b..e0f1d78558a 100644 --- a/addons/crm_partner_assign/__openerp__.py +++ b/addons/crm_partner_assign/__openerp__.py @@ -38,7 +38,7 @@ You can also use the geolocalization without using the GPS coordinates. """, 'author': 'OpenERP SA', 'depends': ['crm', 'account', 'portal'], - 'demo': ['res_partner_demo.xml'], + 'demo': ['res_partner_demo.xml', 'crm_lead_demo.xml'], 'data': [ 'security/ir.model.access.csv', 'res_partner_view.xml', diff --git a/addons/crm_partner_assign/crm_lead_demo.xml b/addons/crm_partner_assign/crm_lead_demo.xml new file mode 100644 index 00000000000..6631131d054 --- /dev/null +++ b/addons/crm_partner_assign/crm_lead_demo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openerp> + <data noupdate="1"> + + <!-- Demo Leads --> + <record id="crm_case_partner_assign_1" model="crm.lead"> + <field name="type">lead</field> + <field name="name">Specifications and price of your phones</field> + <field name="contact_name">Steve Martinez</field> + <field name="partner_name"></field> + <field name="partner_id" ref=""/> + <field name="function">Reseller</field> + <field name="country_id" ref="base.uk"/> + <field name="city">Edinburgh</field> + <field name="type_id" ref="crm.type_lead8"/> + <field name="categ_ids" eval="[(6, 0, [ref('crm.categ_oppor1')])]"/> + <field name="channel_id" ref="crm.crm_case_channel_email"/> + <field name="priority">2</field> + <field name="section_id" ref="crm.crm_case_section_2"/> + <field name="user_id" ref=""/> + <field name="stage_id" ref="crm.stage_lead1"/> + <field name="description">Hi, + + Please, can you give me more details about your phones, including their specifications and their prices. + + Regards, + Steve</field> + <field eval="1" name="active"/> + <field name="partner_assigned_id" ref="portal.partner_demo_portal"/> + </record> + </data> +</openerp>
\ No newline at end of file diff --git a/addons/crm_todo/crm_todo_view.xml b/addons/crm_todo/crm_todo_view.xml index 851c2abfba4..96d00e76932 100644 --- a/addons/crm_todo/crm_todo_view.xml +++ b/addons/crm_todo/crm_todo_view.xml @@ -16,12 +16,8 @@ <field name="user_id"/> <field string="Timebox" name="timebox_id"/> - <button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open"/> - <button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open"/> - - <field name="state"/> - <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/> + <button name="prev_timebox" type="object" string="Previous"/> + <button name="next_timebox" type="object" string="Next"/> </tree> </field> </page> 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 <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-10 12:09+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Icelandic <is@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-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/google_drive/i18n/pt_BR.po b/addons/google_drive/i18n/pt_BR.po index 574eb5abc0c..be9806e4c66 100644 --- a/addons/google_drive/i18n/pt_BR.po +++ b/addons/google_drive/i18n/pt_BR.po @@ -8,20 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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 " -"<webmaster@guaru.net>\n" +"PO-Revision-Date: 2013-07-20 22:32+0000\n" +"Last-Translator: Claudio de Araujo Santos <claudioaraujosantos@gmail.com>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-07-22 05:34+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: google_drive #: model:ir.ui.menu,name:google_drive.menu_google_drive_config msgid "Google Drive configuration" -msgstr "" +msgstr "Configuração do Google Drive" #. module: google_drive #: code:addons/google_drive/google_drive.py:48 @@ -40,6 +39,13 @@ msgid "" "in your Google Drive and in OpenERP attachment will be named\n" " 'Agrolait_SO0001_Sales'." msgstr "" +"O nome do documento em anexo pode usar dados fixos ou variáveis. Para " +"distinguir entre documentos\n" +" Google Drive, usar palavras fixos e campos. " +"Por exemplo, no exemplo acima, se escreveu Agrolait_% (nome) s_Sales\n" +" no campo Nome da unidade do Google, o " +"documento em seu Google Drive e em OpenERP anexo será nomeado\n" +" 'Agrolait_SO0001_Sales \"." #. module: google_drive #: view:google.drive.config:0 @@ -47,16 +53,18 @@ msgid "" "- If filter is not specified, link of google document will appear in " "\"More\" option for all users for all opportunities." msgstr "" +"- Se o filtro não for especificado, ligação de documento google aparecerá na " +"opção \"Mais\" para todos os usuários de todas as oportunidades." #. module: google_drive #: view:google.drive.config:0 msgid "To create a new filter:" -msgstr "" +msgstr "Para criar um novo filtro:" #. module: google_drive #: model:ir.model,name:google_drive.model_base_config_settings msgid "base.config.settings" -msgstr "" +msgstr "base.config.settings" #. module: google_drive #: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config @@ -74,17 +82,30 @@ msgid "" " </p>\n" " " msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" Clique para adicionar um novo modelo.\n" +" </ P>\n" +" <p>\n" +" Vincular seus próprios modelos Google Drive para " +"qualquer registro de OpenERP. Se você tem documentos específicos que você " +"realmente deseja que seu colaborador preencher, por exemplo, usar uma " +"planilha para controlar a qualidade do seu produto ou rever a lista de " +"entrega para cada ordem em um país estrangeiro, ... É muito fácil de " +"gerenciá-los, associá-los a OpenERP e usá-los para colaborar com seus " +"empregados.\n" +" </ P>\n" +" " #. module: google_drive #: code:addons/google_drive/google_drive.py:150 #, python-format msgid "Incorrect URL!" -msgstr "" +msgstr "URL incorreto!" #. module: google_drive #: view:base.config.settings:0 msgid "Configure your templates" -msgstr "" +msgstr "Configure seus modelos" #. module: google_drive #: help:google.drive.config,name_template:0 @@ -92,6 +113,8 @@ msgid "" "Choose how the new google drive will be named, on google side. Eg. " "gdoc_%(field_name)s" msgstr "" +"Escolha como a nova unidade google será nomeado, no lado google. Por " +"exemplo. gdoc_% (field_name) s" #. module: google_drive #: view:google.drive.config:0 @@ -99,6 +122,8 @@ msgid "" "- Go to the OpenERP document you want to filter. For instance, go to " "Opportunities and search on Sales Department." msgstr "" +"- Vá para o documento OpenERP você deseja filtrar. Por exemplo, ir para " +"Oportunidades e de pesquisa no Departamento de Vendas." #. module: google_drive #: view:google.drive.config:0 @@ -106,6 +131,8 @@ msgid "" "- In this \"Search\" view, select the option \"Save Current Filter\", enter " "the name (Ex: Sales Department)" msgstr "" +"- Neste ponto de vista \"Pesquisar\", selecione a opção \"Salvar Filtro " +"Atual\", digite o nome (Ex: Departamento de Vendas)" #. module: google_drive #: view:google.drive.config:0 @@ -114,6 +141,9 @@ msgid "" "\"More\" options will appear for all users in opportunities of Sales " "Department." msgstr "" +"- Se você selecionar \"Compartilhar com todos os usuários\", ligação de " +"documento google na opção \"Mais\" será exibido para todos os usuários em " +"oportunidades do Departamento de Vendas." #. module: google_drive #: view:google.drive.config:0 @@ -122,23 +152,28 @@ msgid "" "\"More\" options will not appear for other users in opportunities of Sales " "Department." msgstr "" +"- Se você não selecionar \"Compartilhar com todos os usuários\", link do " +"documento google em \"More\" opções não aparecerá para outros usuários em " +"oportunidades do Departamento de Vendas." #. 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 "" +"Pelo menos uma chave não pode ser encontrado em seu padrão de nome de Google " +"Drive" #. module: google_drive #: code:addons/google_drive/google_drive.py:150 #, python-format msgid "Please enter a valid Google Document URL." -msgstr "" +msgstr "Por favor insira um URL Documento Google válida." #. module: google_drive #: field:google.drive.config,google_drive_client_id:0 msgid "Google Client " -msgstr "" +msgstr "Google Cliente " #. module: google_drive #: view:google.drive.config:0 @@ -146,43 +181,46 @@ msgid "" "https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" "a4/edit" msgstr "" +"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu" +"a4/edit" #. module: google_drive #: field:google.drive.config,filter_id:0 msgid "Filter" -msgstr "" +msgstr "Filtro" #. module: google_drive #: field:google.drive.config,name_template:0 msgid "Google Drive Name Pattern" -msgstr "" +msgstr "Nome Padrão Google Drive" #. module: google_drive #: help:base.config.settings,google_drive_uri:0 msgid "The URL to generate the authorization code from Google" -msgstr "" +msgstr "O URL para gerar o código de autorização do Google" #. module: google_drive #: model:ir.filters,name:google_drive.filter_partner msgid "Customer" -msgstr "" +msgstr "Cliente" #. module: google_drive #: field:google.drive.config,google_drive_resource_id:0 msgid "Resource Id" -msgstr "" +msgstr "ID Recurso" #. 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 "" +"O modelo do Google não pode ser encontrado. Talvez tenha sido excluído." #. 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 "" +msgstr "Templates do Google Drive" #. module: google_drive #: code:addons/google_drive/google_drive.py:81 @@ -191,23 +229,25 @@ msgid "" "Something went wrong during the token generation. Please request again an " "authorization code in %(menu:base_setup.menu_general_configuration)s." msgstr "" +"Algo deu errado durante a geração de token. Por favor, solicite novamente um " +"código de autorização em%(menu:base_setup.menu_general_configuration)s." #. module: google_drive #: code:addons/google_drive/google_drive.py:124 #, python-format msgid "Google Drive Error!" -msgstr "" +msgstr "Google Drive Error!" #. module: google_drive #: field:base.config.settings,google_drive_uri:0 msgid "URI" -msgstr "" +msgstr "URL" #. 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 "" +msgstr "Criação de unidade google só pode ser feito por um de cada vez." #. module: google_drive #: field:google.drive.config,model:0 @@ -218,38 +258,40 @@ msgstr "Modelo" #. module: google_drive #: view:google.drive.config:0 msgid "Google Drive Configuration" -msgstr "" +msgstr "Configuração do acionamento Google" #. module: google_drive #: field:google.drive.config,name:0 msgid "Template Name" -msgstr "" +msgstr "Nome do modelo" #. module: google_drive #: constraint:google.drive.config:0 msgid "" "Model of selected filter is not matching with model of current template." msgstr "" +"Modelo de filtro selecionado não está combinando com o modelo do modelo " +"atual." #. module: google_drive #: field:google.drive.config,google_drive_template_url:0 msgid "Template URL" -msgstr "" +msgstr "Modelo de URL" #. module: google_drive #: view:base.config.settings:0 msgid "and paste it here" -msgstr "" +msgstr "e cole-o aqui" #. module: google_drive #: field:base.config.settings,google_drive_authorization_code:0 msgid "Authorization Code" -msgstr "" +msgstr "Código de Autorização" #. module: google_drive #: model:ir.model,name:google_drive.model_google_drive_config msgid "Google Drive templates config" -msgstr "" +msgstr "Google Drive templates de configuração" #. module: google_drive #: code:addons/google_drive/google_drive.py:64 @@ -258,3 +300,6 @@ msgid "" "You haven't configured 'Authorization Code' generated from google, Please " "generate and configure it in %(menu:base_setup.menu_general_configuration)s." msgstr "" +"Você não configurou \"Código de Autorização\" gerado a partir do Google, por " +"favor, gerar e configurá-lo em " +"%(menu:base_setup.menu_general_configuration)s." diff --git a/addons/hr/static/description/index.html b/addons/hr/static/description/index.html index 0bc3db084a4..f97cb462fe3 100644 --- a/addons/hr/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=hr" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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 @@ </group> <notebook> <page string="Description"> - <field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account')}"> + <field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account', '')}"> <form string="Expense Lines" version="7.0"> <group> <group> 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 @@ </tree> </field> </page> - <page string="Other Information"> + <page string="Accounting Information"> <group> <group string="Miscellaneous"> <field name="company_id" groups="base.group_multi_company"/> 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 @@ <field name="res_model">hr.applicant</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="domain">[('state','in',('draft','open'))]</field> + <field name="domain">[('stage_id.fold', '!=', True)]</field> <field name="view_id" ref="view_applicants_status_tree"/> </record> 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 d8c00c40a31..ce6f60669c4 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,37 +211,35 @@ 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), } _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 onchange_job(self, cr, uid, ids, job, context=None): - result = {} + 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 {} - 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_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): @@ -403,27 +378,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 <b>created</b>'), 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') @@ -433,17 +412,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.')) @@ -454,26 +432,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 """ 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 @@ <field name="name">Doctoral Degree</field> <field name="sequence">4</field> </record> + <record model="hr.recruitment.stage" id="stage_job1"> <field name="name">Initial Qualification</field> - <field name="state">draft</field> <field name="sequence">1</field> </record> <record model="hr.recruitment.stage" id="stage_job2"> <field name="name">First Interview</field> - <field name="state">open</field> <field name="sequence">2</field> </record> <record model="hr.recruitment.stage" id="stage_job3"> <field name="name">Second Interview</field> - <field name="state">open</field> <field name="sequence">3</field> </record> <record model="hr.recruitment.stage" id="stage_job4"> <field name="name">Contract Proposed</field> - <field name="state">pending</field> <field name="sequence">4</field> </record> <record model="hr.recruitment.stage" id="stage_job5"> <field name="name">Contract Signed</field> - <field name="state">done</field> <field name="sequence">5</field> </record> <record model="hr.recruitment.stage" id="stage_job6"> <field name="name">Refused</field> - <field name="state">cancel</field> <field name="sequence">6</field> <field name="fold" eval="True"/> </record> @@ -467,24 +462,24 @@ <field name="res_model">hr.job</field> </record> <!-- Applicant-related subtypes for messaging / Chatter --> - <record id="mt_stage_changed" model="mail.message.subtype"> + <record id="mt_applicant_new" model="mail.message.subtype"> + <field name="name">New Applicant</field> + <field name="res_model">hr.applicant</field> + <field name="default" eval="False"/> + <field name="description">Applicant created</field> + </record> + <record id="mt_applicant_stage_changed" model="mail.message.subtype"> <field name="name">Stage Changed</field> <field name="res_model">hr.applicant</field> <field name="default" eval="False"/> <field name="description">Stage changed</field> </record> - <record id="mt_applicant_hired" model="mail.message.subtype"> + <record id="mt_applicant_employee" model="mail.message.subtype"> <field name="name">Applicant Hired</field> <field name="res_model">hr.applicant</field> <field name="default" eval="False"/> <field name="description">Applicant hired</field> </record> - <record id="mt_applicant_refused" model="mail.message.subtype"> - <field name="name">Applicant Refused</field> - <field name="res_model">hr.applicant</field> - <field name="default" eval="False"/> - <field name="description">Applicant refused</field> - </record> <!-- Applicant Categories(Tag) --> <record id="tag_applicant_reserve" model="hr.applicant_category"> <field name="name">Reserve</field> diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 9cbfd4560e7..d743a280691 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -39,9 +39,10 @@ <field name="name">Applicants</field> <field name="model">hr.applicant</field> <field name="arch" type="xml"> - <tree string="Applicants" fonts="bold:message_unread==True" colors="grey:state in ('cancel','done');blue:state=='pending'"> + <tree string="Applicants" fonts="bold:message_unread==True"> <field name="message_unread" invisible="1"/> <field name="create_date"/> + <field name="date_last_stage_update" invisible="1"/> <field name="name" string="Subject"/> <field name="partner_name"/> <field name="email_from"/> @@ -58,7 +59,6 @@ <field name="availability" invisible="1"/> <field name="department_id" invisible="context.get('invisible_department', True)"/> <field name="user_id"/> - <field name="state" invisible="1"/> </tree> </field> </record> @@ -69,13 +69,7 @@ <field name="arch" type="xml"> <form string="Jobs - Recruitment Form" version="7.0"> <header> - <button name="case_close_with_emp" string="Hire & Create Employee" type="object" - class="oe_highlight" - attrs="{'invisible':['|', ('emp_id','!=',False), ('state','=','cancel')]}"/> - <button name="case_cancel" string="Refuse" type="object" - states="draft,open,pending" class="oe_highlight"/> <field name="stage_id" widget="statusbar" clickable="True"/> - <field name="emp_id" invisible="1"/> </header> <sheet> <div class="oe_right oe_button_box"> @@ -93,9 +87,12 @@ <label for="name" class="oe_edit_only"/> <h1><field name="name"/></h1> <label for="partner_name" class="oe_edit_only"/> - <h2> + <h2 style="display: inline-block;"> <field name="partner_name" class="oe_inline"/> </h2> + <button string="Create Employee" name="create_employee_from_applicant" type="object" + class="oe_link oe_inline" style="margin-left: 8px;" + attrs="{'invisible': [('emp_id', '!=', False)]}"/> </div> <group> <group> @@ -115,7 +112,6 @@ <field name="title_action" class="oe_inline" placeholder="e.g. Call for interview"/> </div> <field name="priority"/> - <field name="state" invisible="1"/> <field name="source_id"/> <field name="reference"/> </group> @@ -123,7 +119,7 @@ <field name="survey" invisible="1"/> <field name="response" invisible="1"/> <field name="job_id" on_change="onchange_job(job_id)"/> - <field name="department_id" on_change="onchange_department_id(department_id)"/> + <field name="department_id" on_change="onchange_department_id(department_id, stage_id)"/> <label for="availability"/> <div> <field name="availability" class="oe_inline"/> <label string="Day(s)" class="oe_inline"/> @@ -142,6 +138,7 @@ <span class="oe_inline" attrs="{'invisible':[('salary_proposed_extra','=',False)]}"> + </span> <field name="salary_proposed_extra" class="oe_inline" placeholder="Extra advantages..."/> </div> + <field name="emp_id" readonly="1"/> </group> </group> <group> @@ -165,7 +162,7 @@ <graph string="Cases By Stage and Estimates" type="bar" orientation="vertical"> <field name="job_id"/> <field name="salary_expected" operator="+"/> - <field name="state" group="True"/> + <field name="stage_id" group="True"/> </graph> </field> </record> @@ -174,22 +171,22 @@ <field name="name">Jobs - Recruitment Search</field> <field name="model">hr.applicant</field> <field name="arch" type="xml"> - <search string="Search Jobs"> + <search string="Search Applicants"> <field name="partner_name" filter_domain="['|','|',('name','ilike',self),('partner_name','ilike',self),('email_from','ilike',self)]" string="Subject / Applicant"/> - <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> - <separator/> - <filter string="New" domain="[('state','=','draft')]" help="All Initial Jobs"/> - <filter string="In Progress" domain="[('state','=','open')]" help="Open Jobs"/> - <filter string="Pending" domain="[('state','=','pending')]" help="Pending Jobs"/> + <filter string="Unassigned" domain="[('user_id', '=', False)]"/> + <filter string="My" domain="[('user_id', '=', uid)]"/> <separator/> - <filter string="Unassigned Recruitments" domain="[('user_id','=',False)]" help="Unassigned Recruitments"/> + <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> <filter string="Next Actions" context="{'invisible_next_action':False, 'invisible_next_date':False}" domain="[('date_action','<>',False)]" help="Filter and view on next actions and date"/> <field name="job_id"/> + <field name="department_id"/> <field name="user_id"/> + <field name="stage_id" domain="[]"/> <separator/> <field name="categ_ids"/> + <separator/> <group expand="0" string="Group By..."> <filter string="Responsible" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Department" domain="[]" context="{'group_by':'department_id'}"/> @@ -200,6 +197,7 @@ <filter string="Stage" domain="[]" context="{'group_by':'stage_id'}"/> <filter string="Source" domain="[]" context="{'group_by':'source_id'}"/> <filter string="Creation Date" domain="[]" context="{'group_by':'create_date'}"/> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/> </group> </search> </field> @@ -342,7 +340,6 @@ <field name="sequence" invisible="1"/> <field name="name"/> <field name="department_id"/> - <field name="state"/> </tree> </field> </record> @@ -360,7 +357,6 @@ <field name="department_id"/> </group> <group> - <field name="state"/> <field name="sequence"/> <field name="fold"/> </group> diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 8c365b10070..93384c95ed4 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 <http://www.gnu.org/licenses/>. # ############################################################################## + 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'), @@ -67,19 +62,19 @@ class hr_recruitment_report(osv.osv): 'delay_close': fields.float('Avg. Delay to Close', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the project issue"), } - _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, @@ -93,7 +88,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 @@ -105,7 +100,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 b33b2eaa053..d75c29c17a2 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 @@ <field name="model">hr.recruitment.report</field> <field name="arch" type="xml"> <tree string="Recruitment Analysis" create="false"> - <field name="date" invisible="1"/> + <field name="date_create" invisible="1"/> <field name="user_id" invisible="1"/> <field name="job_id"/> <field name="stage_id" invisible="1" /> @@ -14,10 +14,10 @@ <field name="type_id" invisible="1"/> <field name="partner_id" invisible="1"/> <field name="company_id" groups="base.group_multi_company" invisible="1"/> - <field name="state" invisible="1"/> <field name="year" invisible="1"/> <field name="day" invisible="1"/> <field name="month" invisible="1"/> + <field name="date_last_stage_update" invisible="1"/> <field name="nbr" sum="# of Applications"/> <field name="available" sum="Available"/> <field name="salary_exp" sum="Expected Salary"/> @@ -46,34 +46,33 @@ <field name="model">hr.recruitment.report</field> <field name="arch" type="xml"> <search string="Recruitment Analysis"> - <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help = "Draft recruitment"/> - <filter string="In progress" icon="terp-camera_test" domain="[('state', '=' ,'open')]" help = "In progress recruitment"/> - <filter string="Pending" icon="terp-gtk-media-pause" domain="[('state','=','pending')]" help = "Pending recruitment"/> - <filter string="Hired" icon="terp-camera_test" domain="[('state','=','done')]" help = "Hired employees"/> - <separator/> - <filter icon="terp-personal" string="My Recruitment" help="My Recruitment" domain="[('user_id','=',uid)]"/> <field name="job_id"/> <field name="department_id"/> - <field name="user_id" string="Responsible"/> + <field name="user_id"/> + <filter string="New" domain="[('sequence', '=', 1)]"/> + <separator/> + <filter string="Unassigned" domain="[('user_id', '=', False)]"/> + <filter string="My" domain="[('user_id', '=', uid)]"/> + <separator/> <group expand="0" string="Extended Filters..."> - <!--field name="job_id"/--> <field name="priority"/> <field name="stage_id"/> <field name="company_id" groups="base.group_multi_company"/> - <field name="date" string="Creation Date"/> + <field name="date_create"/> <field name="date_closed"/> </group> <group expand="1" string="Group By ..."> - <filter string="Responsible" name='User' icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> - <filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> - <filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}" /> - <filter string="Jobs" name="job" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'job_id'}"/> - <filter string="Department" name="department" icon="terp-personal+" domain="[]" context="{'group_by':'department_id'}"/> - <filter string="Degree" name="degree" icon="terp-gtk-select-all" domain="[]" context="{'group_by':'type_id'}"/> - <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}" /> - <filter string="Day" name = "day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}" help="Creation Date"/> - <filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}" help="Creation Date"/> - <filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'year'}" help="Creation Date"/> + <filter string="Responsible" name='User' context="{'group_by':'user_id'}"/> + <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Partner" context="{'group_by':'partner_id'}" /> + <filter string="Jobs" name="job" context="{'group_by':'job_id'}"/> + <filter string="Department" name="department" context="{'group_by':'department_id'}"/> + <filter string="Degree" name="degree" context="{'group_by':'type_id'}"/> + <filter string="Stage" context="{'group_by':'stage_id'}" /> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" /> + <filter string="Day" name="day" context="{'group_by':'day'}" help="Creation Date"/> + <filter string="Month" context="{'group_by':'month'}" help="Creation Date"/> + <filter string="Year" context="{'group_by':'year'}" help="Creation Date"/> </group> </search> </field> 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,34 +17,9 @@ 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 - !python {model: hr.applicant}: | @@ -55,21 +30,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. - !python {model: survey.question.wiz}: | @@ -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 (<http://tiny.be>). +# Copyright (C) 2004-Today OpenERP (<http://www.openerp.com>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -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 (<http://tiny.be>). All Rights Reserved -# $Id$ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -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 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <record id="view_hr_recruitment_hired_employee" model="ir.ui.view"> - <field name="name">hr.recruitment.hired2employee.form</field> - <field name="model">hired.employee</field> - <field name="arch" type="xml"> - <form string="Create New Employee" version="7.0"> - <header> - <button name="case_close_with_emp" string="Yes" type="object" class="oe_highlight" /> - <button name="case_close" string="No" type="object"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> - <label string="Would you like to create an employee ?"/> - </form> - </field> - </record> - <record id="action_hr_recruitment_hired_employee" model="ir.actions.act_window"> - <field name="name">Create Employee</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">hired.employee</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="target">new</field> - </record> - - </data> -</openerp> 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/idea/views/idea.xml b/addons/idea/views/idea.xml index b228af2da45..7df21f99f11 100644 --- a/addons/idea/views/idea.xml +++ b/addons/idea/views/idea.xml @@ -93,7 +93,6 @@ help="Accepted Ideas" /> <group expand="0" string="Group By..."> <filter string="Creator" help="By Responsible" context="{'group_by': 'user_id'}"/> - <filter string="Category" help="By Category" context="{'group_by': 'category_ids'}"/> <filter string="Status" help="By State" context="{'group_by': 'state'}"/> </group> </search> 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_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")]) - - @http.route('/im_livechat/available', type='json') + 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', 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/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_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_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 @@ <record id="gsttvq_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">GST + TVQ for sales</field> - <field name="description">GSTTVQ_SALE</field> + <field name="name">GST + QST for sales</field> + <field name="description">GSTQST_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">1</field> <field name="type">percent</field> @@ -127,8 +127,8 @@ <record id="tvq_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVQ for sales - 9.975%</field> - <field name="description">TVQ</field> + <field name="name">QST for sales - 9.975%</field> + <field name="description">QST</field> <field name="type_tax_use">sale</field> <field name="amount">0.099750</field> <field name="type">percent</field> @@ -192,8 +192,8 @@ <record id="hst12_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 12%</field> - <field name="description">TVH12_SALE</field> + <field name="name">HST for sales - 12%</field> + <field name="description">HST12_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.120000</field> <field name="type">percent</field> @@ -207,8 +207,8 @@ <record id="hst13_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 13%</field> - <field name="description">TVH13_SALE</field> + <field name="name">HST for sales - 13%</field> + <field name="description">HST13_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.130000</field> <field name="type">percent</field> @@ -222,8 +222,8 @@ <record id="hst135_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 13.5%</field> - <field name="description">TVH135_SALE</field> + <field name="name">HST for sales - 13.5%</field> + <field name="description">HST135_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.135000</field> <field name="type">percent</field> @@ -237,8 +237,8 @@ <record id="hst15_sale_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for sales - 15%</field> - <field name="description">TVH15_SALE</field> + <field name="name">HST for sales - 15%</field> + <field name="description">HST15_SALE</field> <field name="type_tax_use">sale</field> <field name="amount">0.150000</field> <field name="type">percent</field> @@ -367,8 +367,8 @@ <record id="gsttvq_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">GST + TVQ for purchases</field> - <field name="description">GSTTVQ_PURC</field> + <field name="name">GST + QST for purchases</field> + <field name="description">GSTQST_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">1</field> <field name="type">percent</field> @@ -393,8 +393,8 @@ <record id="tvq_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVQ for purchases - 9.975%</field> - <field name="description">TVQ</field> + <field name="name">QST for purchases - 9.975%</field> + <field name="description">QST</field> <field name="type_tax_use">purchase</field> <field name="amount">0.099750</field> <field name="type">percent</field> @@ -458,8 +458,8 @@ <record id="hst12_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 12%</field> - <field name="description">TVH12_PURC</field> + <field name="name">HST for purchases - 12%</field> + <field name="description">HST12_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.120000</field> <field name="type">percent</field> @@ -473,8 +473,8 @@ <record id="hst13_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 13%</field> - <field name="description">TVH13_PURC</field> + <field name="name">HST for purchases - 13%</field> + <field name="description">HST13_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.130000</field> <field name="type">percent</field> @@ -488,8 +488,8 @@ <record id="hst135_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 13.5%</field> - <field name="description">TVH135_PURC</field> + <field name="name">HST for purchases - 13.5%</field> + <field name="description">HST135_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.135000</field> <field name="type">percent</field> @@ -503,8 +503,8 @@ <record id="hst15_purc_en" model="account.tax.template"> <field name="chart_template_id" ref="ca_en_chart_template_en"/> - <field name="name">TVH for purchases - 15%</field> - <field name="description">TVH15_PURC</field> + <field name="name">HST for purchases - 15%</field> + <field name="description">HST15_PURC</field> <field name="type_tax_use">purchase</field> <field name="amount">0.150000</field> <field name="type">percent</field> 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_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 @@ <record model="account.account.template" id="a189"> <field name="name">Tax Receivable</field> <field name="code">189</field> - <field name="type">other</field> + <field name="type">view</field> <field name="user_type" ref="account.data_account_type_asset"/> - <field name="reconcile" eval="False"/> <field name="parent_id" ref="a10"/> </record> + + <record model="account.account.template" id="a189100"> + <field name="name">Purchase Tax Receivable</field> + <field name="code">189100</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="reconcile" eval="True"/> + <field name="parent_id" ref="a189"/> + </record> + + <record model="account.account.template" id="a189200"> + <field name="name">VAT Receivable</field> + <field name="code">189200</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="reconcile" eval="True"/> + <field name="parent_id" ref="a189"/> + </record> + + <record model="account.account.template" id="a189300"> + <field name="name">Service Tax Receivable</field> + <field name="code">189300</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="reconcile" eval="True"/> + <field name="parent_id" ref="a189"/> + </record> + + <record model="account.account.template" id="a189400"> + <field name="name">Exice Duty Receivable</field> + <field name="code">189400</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="reconcile" eval="True"/> + <field name="parent_id" ref="a189"/> + </record> + <!-- Liabilities --> <record model="account.account.template" id="a20"> 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 @@ <openerp> <data noupdate="1"> <!-- Taxes Sale Tax --> - + <record id="sales_private" model="account.tax.template"> - <field name="name">Sale Tax-15%</field> - <field name="price_include" eval="0"/> + <field name="name">Sales Tax 15%</field> + <field name="description">Sales Tax 15%</field> <field name="amount">0.15</field> <field name="type">percent</field> <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2161"/> - <field name="account_paid_id" ref="a2161"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2161"/> + <field name="base_code_id" ref="vat_code_base_tax_sale15"/> + <field name="tax_code_id" ref="vat_code_rec_sale15"/> + <field name="ref_base_code_id" ref="vat_code_base_tax_sale15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_rec_sale15"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - + <record id="sales_private_main" model="account.tax.template"> - <field name="name">Sale Tax-12%</field> - <field name="price_include" eval="0"/> + <field name="name">Sales Tax 12%</field> + <field name="description">Sales Tax 12%</field> <field name="amount">0.12</field> <field name="type">percent</field> <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2161"/> - <field name="account_paid_id" ref="a2161"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2161"/> + <field name="base_code_id" ref="vat_code_base_tax_sale12"/> + <field name="tax_code_id" ref="vat_code_rec_sale12"/> + <field name="ref_base_code_id" ref="vat_code_base_tax_sale12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_rec_sale12"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - + <record id="sales_private_main_4" model="account.tax.template"> - <field name="name">Sale Tax-4%</field> - <field name="price_include" eval="0"/> + <field name="name">Sales Tax 4%</field> + <field name="description">Sales Tax 4%</field> <field name="amount">0.04</field> <field name="type">percent</field> <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2161"/> <field name="account_paid_id" ref="a2161"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="base_code_id" ref="vat_code_base_tax_sale4"/> + <field name="tax_code_id" ref="vat_code_rec_sale4"/> + <field name="ref_base_code_id" ref="vat_code_base_tax_sale4"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_rec_sale4"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> <!-- Purchase tax --> - + <record id="purchase_tax_private" model="account.tax.template"> - <field name="name">Purchase Tax-15%</field> + <field name="name">Purchase Tax 15%</field> + <field name="description">Purchase Tax 15%</field> <field name="account_collected_id" ref="a189"/> - <field name="account_paid_id" ref="a189"/> - <field name="price_include" eval="0"/> + <field name="account_paid_id" ref="a189"/> <field name="amount">0.15</field> <field name="type">percent</field> <field name="type_tax_use">purchase</field> - <field name="base_code_id" ref="vat_code_base_tax_purchase"/> - <field name="tax_code_id" ref="vat_code_payable"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_purchase"/> - <field name="ref_tax_code_id" ref="vat_code_payable"/> + <field name="base_code_id" ref="vat_code_base_tax_pur15"/> + <field name="tax_code_id" ref="vat_code_pay_pur4"/> + <field name="ref_base_code_id" ref="vat_code_base_tax_pur15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_pay_pur4"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - + <!-- vat --> - - <record id="vat_private_main" model="account.tax.template"> - <field name="name">VAT-5%(4% VAT+1% Add. Tax.)</field> - <field name="price_include" eval="0"/> - <field name="amount">0.05</field> + + <record id="vat_private_out_vat5" model="account.tax.template"> + <field name="name">Output VAT 5% (VAT 4% + Add. VAT 1%)</field> + <field name="description">Output VAT 5%</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="amount">0.04</field> <field name="account_collected_id" ref="a2162"/> - <field name="account_paid_id" ref="a2162"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2162"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat5"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat5"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat5"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat5"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="vat_private_main_tax" model="account.tax.template"> - <field name="name">VAT-15%(12.5% VAT+2.5% Add. Tax.)</field> - <field name="price_include" eval="0"/> + + <record id="vat_private_in_vat5" model="account.tax.template"> + <field name="name">Input VAT 5% (VAT 4% + Add. VAT 1%)</field> + <field name="description">Input VAT 5%</field> + <field name="amount">0.05</field> + <field name="type">percent</field> + <field name="type_tax_use">purchase</field> + <field name="account_collected_id" ref="a189200"/> + <field name="account_paid_id" ref="a189200"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat5"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat5"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat5"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat5"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="vat_private_in_vat15" model="account.tax.template"> + <field name="name">Input VAT 15% (VAT 12.5% + Add. VAT 2.5%)</field> + <field name="description">Input VAT 15%</field> <field name="amount">0.15</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="type_tax_use">purchase</field> + <field name="account_collected_id" ref="a189200"/> + <field name="account_paid_id" ref="a189200"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat15"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat15"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat15"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="vat_private_out_vat15" model="account.tax.template"> + <field name="name">Output VAT 15% (VAT 12.5% + Add. VAT 2.5%)</field> + <field name="description">Output VAT 15%</field> + <field name="amount">0.15</field> + <field name="type">percent</field> + <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2162"/> - <field name="account_paid_id" ref="a2162"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2162"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat15"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat15"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat15"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="vat_private_tax" model="account.tax.template"> - <field name="name">VAT-8%</field> - <field name="price_include" eval="0"/> + + <record id="vat_private_in_vat8" model="account.tax.template"> + <field name="name">Input VAT 8%</field> + <field name="description">Input VAT 8%</field> + <field name="amount">0.08</field> + <field name="type">percent</field> + <field name="type_tax_use">purchase</field> + <field name="account_collected_id" ref="a189200"/> + <field name="account_paid_id" ref="a189200"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat8"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat8"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat8"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat8"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="vat_private_out_vat8" model="account.tax.template"> + <field name="name">Output VAT 8%</field> + <field name="description">Output VAT 8%</field> <field name="amount">0.08</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2162"/> <field name="account_paid_id" ref="a2162"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat8"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat8"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat8"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat8"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - <record id="vat_private_tax_10" model="account.tax.template"> - <field name="name">VAT-10%</field> - <field name="price_include" eval="0"/> + <record id="vat_private_in_vat10" model="account.tax.template"> + <field name="name">Input VAT 10%</field> + <field name="description">Input VAT 10%</field> <field name="amount">0.10</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="account_collected_id" ref="a2162"/> - <field name="account_paid_id" ref="a2162"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="type_tax_use">purchase</field> + <field name="account_collected_id" ref="a189200"/> + <field name="account_paid_id" ref="a189200"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat10"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat10"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat10"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat10"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - <record id="vat_private_tax_12" model="account.tax.template"> - <field name="name">VAT-12.5%</field> - <field name="price_include" eval="0"/> - <field name="amount">12.5</field> + <record id="vat_private_out_vat10" model="account.tax.template"> + <field name="name">Output VAT 10%</field> + <field name="description">Output VAT 10%</field> + <field name="amount">0.10</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="type_tax_use">sale</field> <field name="account_collected_id" ref="a2162"/> - <field name="account_paid_id" ref="a2162"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2162"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat10"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat10"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat10"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat10"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> -<!-- Exice Duty --> + <record id="vat_private_in_vat12" model="account.tax.template"> + <field name="name">Input VAT 12.5%</field> + <field name="description">Input VAT 12.5%</field> + <field name="amount">0.125</field> + <field name="type">percent</field> + <field name="type_tax_use">purchase</field> + <field name="account_collected_id" ref="a189200"/> + <field name="account_paid_id" ref="a189200"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat12"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat12"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat12"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> - <record id="exice_duty_private_main" model="account.tax.template"> - <field name="name">Excise Duty-10.30%</field> - <field name="include_base_amount" eval="True"/> - <field name="amount">0.10</field> + <record id="vat_private_out_vat12" model="account.tax.template"> + <field name="name">Output VAT 12.5%</field> + <field name="description">Output VAT 12.5%</field> + <field name="amount">0.125</field> <field name="type">percent</field> <field name="type_tax_use">sale</field> - <field name="account_collected_id" ref="a2164"/> - <field name="account_paid_id" ref="a2164"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> + <field name="account_collected_id" ref="a2162"/> + <field name="account_paid_id" ref="a2162"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat12"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat12"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat12"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="exice_private_duty_parent" model="account.tax.template"> - <field name="name">Excise Duty-2%</field> - <field name="amount">0.02</field> - <field name="type">percent</field> + + <!-- Exice Duty --> + + <record id="exice_duty_private_sale12" model="account.tax.template"> + <field name="name">Excise Duty 12% - Sales</field> + <field name="description">Excise Duty 12% - Sales</field> <field name="type_tax_use">sale</field> - <field name="parent_id" ref="exice_duty_private_main"/> + <field name="type">percent</field> + <field name="amount">0.1200</field> <field name="account_collected_id" ref="a2164"/> - <field name="account_paid_id" ref="a2164"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> + <field name="account_paid_id" ref="a2164"/> + <field name="base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="tax_code_id" ref="vat_code_tax_rec_exice12"/> + <field name="ref_base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_exice12"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="exice_private_duty" model="account.tax.template"> - <field name="name">Excise Duty-1%</field> - <field name="amount">0.01</field> + + <record id="exice_duty_private_sale2" model="account.tax.template"> + <field name="name">Excise Duty 2% - Sales</field> + <field name="description">Excise Duty 2% - Sales</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> + <field name="amount">0.020</field> + <field name="account_collected_id" ref="a2164"/> + <field name="account_paid_id" ref="a2164"/> + <field name="base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="tax_code_id" ref="vat_code_tax_rec_exice2"/> + <field name="ref_base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_exice2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="exice_duty_private_sale1" model="account.tax.template"> + <field name="name">Output Excise Duty 1%</field> + <field name="description">Output Excise Duty 1%</field> <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.0100</field> <field name="account_collected_id" ref="a2164"/> - <field name="account_paid_id" ref="a2164"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="parent_id" ref="exice_duty_private_main"/> + <field name="account_paid_id" ref="a2164"/> + <field name="base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="tax_code_id" ref="vat_code_tax_rec_exice1"/> + <field name="ref_base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_exice1"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - + <!-- Service Tax --> - - <record id="service_private_main" model="account.tax.template"> - <field name="type_tax_use">all</field> - <field name="name">Service Tax-12.30%</field> - <field name="include_base_amount" eval="True"/> - <field name="amount">0.12</field> + + <record id="service_private_ser12_sale" model="account.tax.template"> + <field name="name">Output Service Tax 12%</field> + <field name="description">Output Service Tax 12%</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> + <field name="amount">0.12</field> + <field name="sequence">1</field> <field name="account_collected_id" ref="a2163"/> - <field name="account_paid_id" ref="a2163"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="child_depend" eval="0"/> + <field name="account_paid_id" ref="a2163"/> + <field name="base_code_id" ref="vat_code_tax_sale_ser12"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st12"/> + <field name="ref_base_code_id" ref="vat_code_tax_sale_ser12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st12"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="service_private_tax_parent" model="account.tax.template"> - <field name="name">Service Tax-%2</field> - <field name="amount">0.02</field> + + <record id="service_private_ser2_sale" model="account.tax.template"> + <field name="name">Output Sales Service Tax 2%</field> + <field name="description">Output Sales Service Tax 2%</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="amount">0.02</field> + <field name="sequence">3</field> <field name="account_collected_id" ref="a2163"/> - <field name="account_paid_id" ref="a2163"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="parent_id" ref="service_private_main"/> + <field name="account_paid_id" ref="a2163"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st2"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="service_private_ser12_sale"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - - <record id="service_private_tax" model="account.tax.template"> - <field name="name">Service Tax-%1</field> - <field name="amount">0.01</field> + + <record id="service_private_ser1_sale" model="account.tax.template"> + <field name="name">Output Service Tax 1%</field> + <field name="description">Output Service Tax 1%</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> + <field name="amount">0.01</field> + <field name="sequence">5</field> <field name="account_collected_id" ref="a2163"/> - <field name="account_paid_id" ref="a2163"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="parent_id" ref="service_private_main"/> + <field name="account_paid_id" ref="a2163"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st1"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="service_private_ser12_sale"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="service_private_ser12_purchase" model="account.tax.template"> + <field name="name">Input Service Tax 12%</field> + <field name="description">Input Service Tax 12%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1200</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="a189300"/> + <field name="account_paid_id" ref="a189300"/> + <field name="base_code_id" ref="vat_code_tax_pur_ser12"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_st"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_ser12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_ic_st"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_private"/> </record> - + + <record id="service_private_ser2_purchase" model="account.tax.template"> + <field name="name">Input Service Tax Edu. Cess. 2%</field> + <field name="description">Input Service Tax Edu. Cess. 2%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0200</field> + <field name="sequence">3</field> + <field name="account_collected_id" ref="a189300"/> + <field name="account_paid_id" ref="a189300"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_edu_cess"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pur_PCST5"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="service_private_ser12_purchase"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + + <record id="service_private_ser1_purchase" model="account.tax.template"> + <field name="name">Input Service Tax Seco. & HEC 1%</field> + <field name="description">Input Service Tax Seco. & HEC 1%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0100</field> + <field name="sequence">5</field> + <field name="account_collected_id" ref="a189300"/> + <field name="account_paid_id" ref="a189300"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_seco_hec"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_ic_seco_hec"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="service_private_ser12_purchase"/> + <field name="chart_template_id" ref="indian_chart_template_private"/> + </record> + </data> </openerp>
\ 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 @@ <record model="account.account.template" id="p15400"> <field name="name">Tax Receivable</field> <field name="code">15400</field> - <field name="type">other</field> + <field name="type">view</field> <field name="user_type" ref="account.data_account_type_asset"/> <field name="reconcile" eval="False"/> <field name="parent_id" ref="p10000"/> @@ -658,7 +658,327 @@ <field name="reconcile" eval="False"/> <field name="parent_id" ref="p96000"/> </record> - + + <record model="account.account.template" id="p154001"> + <field name="name">Input CST 5%</field> + <field name="code">154001</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_expense"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154002"> + <field name="name">Input Service Tax Seco. & HEC 1%</field> + <field name="code">154002</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154003"> + <field name="name">Input Credit - URD</field> + <field name="code">154003</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154004"> + <field name="name">TDS on Audit Fees - 94J</field> + <field name="code">154004</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154005"> + <field name="name">TDS on Commission Or Brokerage - 94H</field> + <field name="code">154005</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154006"> + <field name="name">Input Credit - Import Duty</field> + <field name="code">154006</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154007"> + <field name="name">Additional Duty (Imports) 4%</field> + <field name="code">154007</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154008"> + <field name="name">Input Service Tax 12%</field> + <field name="code">154008</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154009"> + <field name="name">Input Service Tax Edu. Cess. 2%</field> + <field name="code">154009</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154010"> + <field name="name">TDS on Salary - 92B</field> + <field name="code">154010</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154011"> + <field name="name">Input Excise Duty 6%</field> + <field name="code">154011</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154012"> + <field name="name">Input Excise Duty 5%</field> + <field name="code">154012</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154013"> + <field name="name">Input Excise Duty 12%</field> + <field name="code">154013</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154014"> + <field name="name">Education Cess 2% - Purchase</field> + <field name="code">154014</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154015"> + <field name="name">Seco. & Higher Edu. Cess 1% - Purchase</field> + <field name="code">154015</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p247001"> + <field name="name">Excise Duty 12% - Sales</field> + <field name="code">247001</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247010"> + <field name="name">Education Cess 2% - Sales</field> + <field name="code">247010</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247002"> + <field name="name">Seco. & Higher Edu. Cess 1% - Sales</field> + <field name="code">247002</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p154016"> + <field name="name">Input Sec. & HEC - Capital Goods</field> + <field name="code">154016</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154017"> + <field name="name">TDS on Contractor - 94C</field> + <field name="code">154017</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154018"> + <field name="name">TDS on Director's Interest</field> + <field name="code">154018</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154019"> + <field name="name">TDS on Director's Remuneration - 92B</field> + <field name="code">154019</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154020"> + <field name="name">TDS on Interest</field> + <field name="code">154020</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154021"> + <field name="name">TDS on Professional Fees - 94J</field> + <field name="code">154021</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154022"> + <field name="name">TDS on Rent - 94I</field> + <field name="code">154022</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154023"> + <field name="name">Input Edu. Cess - Capital Goods</field> + <field name="code">154023</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154024"> + <field name="name">Input Excise Duty 12% - Capital Goods</field> + <field name="code">154024</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154025"> + <field name="name">Input VAT 4%</field> + <field name="code">154025</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154026"> + <field name="name">Input Additional VAT 1%</field> + <field name="code">154026</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154027"> + <field name="name">Input VAT 15%</field> + <field name="code">154027</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p247003"> + <field name="name">Output VAT 4%</field> + <field name="code">247003</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247004"> + <field name="name">Output Adi. VAT 1%</field> + <field name="code">247004</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247005"> + <field name="name">CST 2% on Sales - Against Form - C</field> + <field name="code">247005</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247006"> + <field name="name">CST 5% on Sales</field> + <field name="code">247006</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p154028"> + <field name="name">Input VAT 12.5%</field> + <field name="code">154028</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154029"> + <field name="name">Input Additional VAT 2.5%</field> + <field name="code">154029</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p154030"> + <field name="name">Input CST 2%</field> + <field name="code">154030</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_expense"/> + <field name="parent_id" ref="p15400"/> + </record> + + <record model="account.account.template" id="p247007"> + <field name="name">CST 2% on Sales - CT3 Against Form C</field> + <field name="code">247007</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247008"> + <field name="name">Output VAT 4% on Sales - CT3</field> + <field name="code">247008</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + + <record model="account.account.template" id="p247009"> + <field name="name">Output Adi. VAT 1% Sales CT3</field> + <field name="code">247009</field> + <field name="type">other</field> + <field name="user_type" ref="account.data_account_type_liability"/> + <field name="parent_id" ref="p24700"/> + </record> + <record id="indian_chart_template_public" model="account.chart.template"> <field name="name">India - Chart of Accounts for Public Ltd</field> <field name="account_root_id" ref="p0"/> 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 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data noupdate="1"> - - <!-- Sales Tax --> - - <record id="sales_tax_public_main" model="account.tax.template"> - <field name="name">Sale Tax-15%</field> - <field name="account_collected_id" ref="p24710"/> - <field name="account_paid_id" ref="p24710"/> - <field name="price_include" eval="0"/> - <field name="amount">0.15</field> + + <record id="account_tax_cst_pur5" model="account.tax.template"> + <field name="name">Input CST 5%</field> + <field name="description">Input CST 5%</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">sale</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="sales_tax_public" model="account.tax.template"> - <field name="name">Sale Tax-12%</field> - <field name="account_collected_id" ref="p24710"/> - <field name="account_paid_id" ref="p24710"/> - <field name="price_include" eval="0"/> - <field name="amount">0.12</field> + <field name="amount">0.01</field> + <field name="account_collected_id" ref="p154001"/> + <field name="account_paid_id" ref="p154001"/> + <field name="base_code_id" ref="vat_code_tax_pur_PCST5"/> + <field name="tax_code_id" ref="vat_code_tax_pur_CSTP5"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_PCST5"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pur_CSTP5"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_cradit_urd" model="account.tax.template"> + <field name="name">Input Credit - URD</field> + <field name="description">Input Credit - URD</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">sale</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="sales_tax_public_4" model="account.tax.template"> - <field name="name">Sale Tax-4%</field> - <field name="account_collected_id" ref="p24710"/> - <field name="account_paid_id" ref="p24710"/> - <field name="price_include" eval="0"/> - <field name="amount">0.04</field> + <field name="amount">0.0400</field> + <field name="account_collected_id" ref="p154003"/> + <field name="account_paid_id" ref="p154003"/> + <field name="base_code_id" ref="vat_code_tax_pur_urd"/> + <field name="tax_code_id" ref="vat_code_tax_pay_urd"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_urd"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_urd"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_audit_fee" model="account.tax.template"> + <field name="name">TDS on Audit Fees - 94J</field> + <field name="description">TDS on Audit Fees - 94J</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">sale</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <!-- Purchase tax --> - - <record id="purchase_tax_public" model="account.tax.template"> - <field name="name">Purchase Tax-15%</field> - <field name="account_collected_id" ref="p15400"/> - <field name="account_paid_id" ref="p15400"/> - <field name="price_include" eval="0"/> - <field name="amount">0.15</field> + <field name="amount">0.1000</field> + <field name="account_collected_id" ref="p154004"/> + <field name="account_paid_id" ref="p154004"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_audit_fee"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_audit_fee"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_brok" model="account.tax.template"> + <field name="name">TDS on Commission Or Brokerage- 94H</field> + <field name="description">TDS on Commission Or Brokerage- 94H</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> + <field name="amount">0.1000</field> + <field name="account_collected_id" ref="p154005"/> + <field name="account_paid_id" ref="p154005"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_brokerage"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_brokerage"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ic_import_duty" model="account.tax.template"> + <field name="name">Input Credit - Import Duty</field> + <field name="description">Input Credit - Import Duty</field> <field name="type_tax_use">purchase</field> - <field name="base_code_id" ref="vat_code_base_tax_purchase"/> - <field name="tax_code_id" ref="vat_code_payable"/> - <field name="ref_base_code_id" ref="vat_code_base_tax_purchase"/> - <field name="ref_tax_code_id" ref="vat_code_payable"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <!-- --> - - <!-- VAT --> - - <record id="vat_public_main" model="account.tax.template"> - <field name="name">VAT-5%(4% VAT+1% Add. Tax.)</field> - <field name="account_collected_id" ref="p24720"/> - <field name="account_paid_id" ref="p24720"/> - <field name="price_include" eval="0"/> - <field name="amount">0.05</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="vat_public_main_tax" model="account.tax.template"> - <field name="name">VAT-15% (12.5% VAT + 2.5% Add. Tax.)</field> - <field name="account_collected_id" ref="p24720"/> - <field name="account_paid_id" ref="p24720"/> - <field name="price_include" eval="0"/> - <field name="amount">0.15</field> + <field name="amount">0.0750</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p154006"/> + <field name="account_paid_id" ref="p154006"/> + <field name="base_code_id" ref="vat_code_tax_tds_pur_import"/> + <field name="tax_code_id" ref="vat_code_tax_pay_import_duty"/> + <field name="ref_base_code_id" ref="vat_code_tax_tds_pur_import"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_import_duty"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_add_duty4" model="account.tax.template"> + <field name="name">Additional Duty (Imports) 4%</field> + <field name="description">Additional Duty (Imports) 4%</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="vat_public_tax" model="account.tax.template"> - <field name="name">VAT-8%</field> - <field name="account_collected_id" ref="p24720"/> - <field name="account_paid_id" ref="p24720"/> - <field name="price_include" eval="0"/> - <field name="amount">0.08</field> + <field name="amount">0.0400</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p154007"/> + <field name="account_paid_id" ref="p154007"/> + <field name="base_code_id" ref="vat_code_tax_tds_pur_import"/> + <field name="tax_code_id" ref="vat_code_tax_pay_add_imp_duty"/> + <field name="ref_base_code_id" ref="vat_code_tax_tds_pur_import"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_add_imp_duty"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ic_st" model="account.tax.template"> + <field name="name">Service Tax 12% - Purchase</field> + <field name="description">Service Tax 12% - Purchase</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="vat_public_tax_10" model="account.tax.template"> - <field name="name">VAT-10%</field> - <field name="account_collected_id" ref="p24720"/> - <field name="account_paid_id" ref="p24720"/> - <field name="price_include" eval="0"/> - <field name="amount">0.10</field> + <field name="amount">0.1200</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p154008"/> + <field name="account_paid_id" ref="p154008"/> + <field name="base_code_id" ref="vat_code_tax_pur_ser12"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_st"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_ser12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_ic_st"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_edu_cess_st" model="account.tax.template"> + <field name="name">Service Tax Edu. Cess. 2% - Purchase</field> + <field name="description">Service Tax Edu. Cess. 2% - Purchase</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> + <field name="amount">0.0200</field> + <field name="sequence">3</field> + <field name="account_collected_id" ref="p154009"/> + <field name="account_paid_id" ref="p154009"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_edu_cess"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_ic_edu_cess"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_ic_st"/> <field name="chart_template_id" ref="indian_chart_template_public"/> </record> - <record id="vat_public_tax_12" model="account.tax.template"> - <field name="name">VAT-12.5%</field> - <field name="account_collected_id" ref="p24720"/> - <field name="account_paid_id" ref="p24720"/> - <field name="price_include" eval="0"/> - <field name="amount">12.5</field> + <record id="account_tax_in_credit_ser_tax_seco_hec" model="account.tax.template"> + <field name="name">Service Tax Seco. & HEC 1% - Purchase</field> + <field name="description">Service Tax Seco. & HEC 1% - Purchase</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <!-- Service Tax --> - - <record id="service_public_main" model="account.tax.template"> - <field name="name">Service Tax-12.30%</field> - <field name="account_collected_id" ref="p24740"/> - <field name="account_paid_id" ref="p24740"/> + <field name="amount">0.0100</field> + <field name="sequence">5</field> + <field name="account_collected_id" ref="p154002"/> + <field name="account_paid_id" ref="p154002"/> + <field name="tax_code_id" ref="vat_code_tax_pay_ic_seco_hec"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_ic_seco_hec"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_ic_st"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_sal" model="account.tax.template"> + <field name="name">TDS on Salary - 92B</field> + <field name="description">TDS on Salary - 92B</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.3000</field> + <field name="account_collected_id" ref="p154010"/> + <field name="account_paid_id" ref="p154010"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_sal"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_sal"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exic5_pur" model="account.tax.template"> + <field name="name">Input Excise Duty 5%</field> + <field name="description">Input Excise Duty 5%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0500</field> + <field name="account_collected_id" ref="p154012"/> + <field name="account_paid_id" ref="p154012"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="tax_code_id" ref="vat_code_tax_pay_exice5"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_exice5"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exice12_pur" model="account.tax.template"> + <field name="name">Input Excise Duty 12%</field> + <field name="description">Input Excise Duty 12%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1200</field> <field name="include_base_amount" eval="True"/> - <field name="amount">0.12</field> + <field name="account_collected_id" ref="p154013"/> + <field name="account_paid_id" ref="p154013"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="tax_code_id" ref="vat_code_tax_pay_exice12"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_exice12"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_edu_cess2_pur" model="account.tax.template"> + <field name="name">Education Cess 2% - Purchase</field> + <field name="description">Education Cess 2% - Purchase</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> + <field name="amount">0.0200</field> + <field name="sequence">21</field> + <field name="account_collected_id" ref="p154014"/> + <field name="account_paid_id" ref="p154014"/> + <field name="tax_code_id" ref="vat_code_tax_pay_cess2"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_cess2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exice12_pur"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_seco_high_cess_pur" model="account.tax.template"> + <field name="name">Seco. & Higher Edu. Cess 1% - Purchase</field> + <field name="description">Seco. & Higher Edu. Cess 1% - Purchase</field> <field name="type_tax_use">all</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - <record id="service_tax_parent" model="account.tax.template"> - <field name="name">Service Tax-%2</field> - <field name="account_collected_id" ref="p24740"/> - <field name="account_paid_id" ref="p24740"/> + <field name="type">percent</field> + <field name="amount">0.0100</field> + <field name="sequence">22</field> + <field name="account_collected_id" ref="p154015"/> + <field name="account_paid_id" ref="p154015"/> + <field name="tax_code_id" ref="vat_code_tax_pay_sec_hig_edu"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_sec_hig_edu"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exice12_pur"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exice12_sale" model="account.tax.template"> + <field name="name">Excise Duty 12% - Sales</field> + <field name="description">Excise Duty 12% - Sales</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.1200</field> <field name="include_base_amount" eval="True"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> + <field name="account_collected_id" ref="p247001"/> + <field name="account_paid_id" ref="p247001"/> + <field name="base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="tax_code_id" ref="vat_code_tax_rec_exice12"/> + <field name="ref_base_code_id" ref="vat_code_tax_sales_excise"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_exice12"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_edu_cess2" model="account.tax.template"> + <field name="name">Education Cess 2% - Sales</field> + <field name="description">Education Cess 2% - Sales</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.0200</field> + <field name="sequence">3</field> + <field name="account_collected_id" ref="p247010"/> + <field name="account_paid_id" ref="p247010"/> + <field name="tax_code_id" ref="vat_code_tax_rec_cess2"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_cess2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exice12_sale"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_seco_high_cess1" model="account.tax.template"> + <field name="name">Seco. & Higher Edu. Cess 1% - Sales</field> + <field name="description">Seco. & Higher Edu. Cess 1% - Sales</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.0100</field> + <field name="sequence">5</field> + <field name="account_collected_id" ref="p247002"/> + <field name="account_paid_id" ref="p247002"/> + <field name="tax_code_id" ref="vat_code_tax_rec_sec_hig_cess"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_sec_hig_cess"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exice12_sale"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_sec_high_cap_good" model="account.tax.template"> + <field name="name">Input Sec. & HEC - Capital Goods</field> + <field name="description">Input Sec. & HEC - Capital Goods</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.01</field> + <field name="account_collected_id" ref="p154016"/> + <field name="account_paid_id" ref="p154016"/> + <field name="base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="tax_code_id" ref="vat_code_tax_pay_seco_hec"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_seco_hec"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_contr" model="account.tax.template"> + <field name="name">TDS on Contractor - 94C</field> + <field name="description">TDS on Contractor - 94C</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0200</field> + <field name="account_collected_id" ref="p154017"/> + <field name="account_paid_id" ref="p154017"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_contractor"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_contractor"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_dir_intrest" model="account.tax.template"> + <field name="name">TDS on Director's Interest</field> + <field name="description">TDS on Director's Interest</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1</field> + <field name="account_collected_id" ref="p154018"/> + <field name="account_paid_id" ref="p154018"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_dir_intrest"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_dir_intrest"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_dir_renum" model="account.tax.template"> + <field name="name">TDS on Director's Remuneration - 92B</field> + <field name="description">TDS on Director's Remuneration - 92B</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.3</field> + <field name="account_collected_id" ref="p154019"/> + <field name="account_paid_id" ref="p154019"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_dir_ren"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_dir_ren"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_intrest" model="account.tax.template"> + <field name="name">TDS on Interest</field> + <field name="description">TDS on Interest</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1</field> + <field name="account_collected_id" ref="p154020"/> + <field name="account_paid_id" ref="p154020"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_intrest"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_intrest"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_prof_fee" model="account.tax.template"> + <field name="name">TDS on Professional Fees - 94J</field> + <field name="description">TDS on Professional Fees - 94J</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p154021"/> + <field name="account_paid_id" ref="p154021"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_prof_fee"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_prof_fee"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_tds_rent" model="account.tax.template"> + <field name="name">TDS on Rent - 94I</field> + <field name="description">TDS on Rent-94I</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1</field> + <field name="account_collected_id" ref="p154022"/> + <field name="account_paid_id" ref="p154022"/> + <field name="base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="tax_code_id" ref="vat_code_tax_pay_tds_rent"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_base_tds"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_tds_rent"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ic_cap_edu_cess" model="account.tax.template"> + <field name="name">Input Edu. Cess - Capital Goods</field> + <field name="description">Input Edu. Cess - Capital Goods</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> <field name="amount">0.02</field> + <field name="account_collected_id" ref="p154023"/> + <field name="account_paid_id" ref="p154023"/> + <field name="base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="tax_code_id" ref="vat_code_tax_pay_edu_cess"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_edu_cess"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ie12_cap_goods" model="account.tax.template"> + <field name="name">Input Excise Duty 12% - Capital Goods</field> + <field name="description">Input Excise Duty 12% - Capital Goods</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="parent_id" ref="service_public_main"/> + <field name="amount">0.12</field> + <field name="account_collected_id" ref="p154024"/> + <field name="account_paid_id" ref="p154024"/> + <field name="base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="tax_code_id" ref="vat_code_tax_pay_cap_goods"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_plant_machinery"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_cap_goods"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_public"/> </record> - - <record id="service_tax" model="account.tax.template"> - <field name="name">Service Tax-%1</field> + + <record id="account_tax_in_vat4" model="account.tax.template"> + <field name="name">Input VAT 4%</field> + <field name="description">Input VAT 4%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.04</field> + <field name="sequence">4</field> + <field name="account_collected_id" ref="p154025"/> + <field name="account_paid_id" ref="p154025"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat4"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat4"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat4"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat4"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_add_vat1" model="account.tax.template"> + <field name="name">Input Additional VAT 1%</field> + <field name="description">Input Additional VAT 1%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> <field name="amount">0.01</field> - <field name="account_collected_id" ref="p24740"/> - <field name="account_paid_id" ref="p24740"/> - <field name="include_base_amount" eval="True"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> + <field name="sequence">5</field> + <field name="account_collected_id" ref="p154026"/> + <field name="account_paid_id" ref="p154026"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat4"/> + <field name="tax_code_id" ref="vat_code_tax_pay_add_vat1"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat4"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_add_vat1"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_vat15" model="account.tax.template"> + <field name="name">Input VAT 15%</field> + <field name="description">Input VAT 15%</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> - <field name="type_tax_use">all</field> - <field name="parent_id" ref="service_public_main"/> + <field name="amount">0.15</field> + <field name="sequence">7</field> + <field name="account_collected_id" ref="p154027"/> + <field name="account_paid_id" ref="p154027"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat15"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat15"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat15"/> + <field name="ref_tax_sign" eval="-1"/> <field name="chart_template_id" ref="indian_chart_template_public"/> </record> - -<!-- Excise duty --> - <record id="exice_public_main" model="account.tax.template"> - <field name="name">Excise Duty-10.30%</field> - <field name="account_collected_id" ref="p24730"/> - <field name="account_paid_id" ref="p24730"/> + <record id="account_tax_out_vat4" model="account.tax.template"> + <field name="name">Output VAT 4%</field> + <field name="description">Output VAT 4%</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.04</field> + <field name="sequence">11</field> + <field name="account_collected_id" ref="p247003"/> + <field name="account_paid_id" ref="p247003"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat4"/> + <field name="tax_code_id" ref="vat_code_tax_rec_vat4"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat4"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_vat4"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_out_adi_vat1" model="account.tax.template"> + <field name="name">Output Adi. VAT 1%</field> + <field name="description">Output Adi. VAT 1%</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.01</field> + <field name="sequence">12</field> + <field name="account_collected_id" ref="p247004"/> + <field name="account_paid_id" ref="p247004"/> + <field name="base_code_id" ref="vat_code_tax_sal_vat4"/> + <field name="tax_code_id" ref="vat_code_tax_rec_add_vat1"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_vat4"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_add_vat1"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_cst2_sale" model="account.tax.template"> + <field name="name">CST 2% on Sales - Against Form - C</field> + <field name="description">CST 2% on Sales - Against Form - C</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.02</field> + <field name="sequence">13</field> <field name="include_base_amount" eval="True"/> - <field name="amount">0.10</field> + <field name="account_collected_id" ref="p247005"/> + <field name="account_paid_id" ref="p247005"/> + <field name="base_code_id" ref="vat_code_tax_sale_cst2"/> + <field name="tax_code_id" ref="vat_code_tax_rec_cst2"/> + <field name="ref_base_code_id" ref="vat_code_tax_sale_cst2"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_cst2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_cst5_sale" model="account.tax.template"> + <field name="name">CST 5% on Sales</field> + <field name="description">CST 5% on Sales</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> + <field name="amount">0.05</field> + <field name="sequence">14</field> + <field name="account_collected_id" ref="p247006"/> + <field name="account_paid_id" ref="p247006"/> + <field name="base_code_id" ref="vat_code_tax_sale_cst15"/> + <field name="tax_code_id" ref="vat_code_tax_rec_cst5"/> + <field name="ref_base_code_id" ref="vat_code_tax_sale_cst15"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_cst5"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_vat12" model="account.tax.template"> + <field name="name">Input VAT 12.5%</field> + <field name="description">Input VAT 12.5%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.1250</field> + <field name="sequence">60</field> + <field name="account_collected_id" ref="p154028"/> + <field name="account_paid_id" ref="p154028"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat12"/> + <field name="tax_code_id" ref="vat_code_tax_pay_vat12"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_vat12"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_in_add_vat25" model="account.tax.template"> + <field name="name">Input Additional VAT 2.5%</field> + <field name="description">Input Additional VAT 2.5%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0250</field> + <field name="sequence">80</field> + <field name="account_collected_id" ref="p154029"/> + <field name="account_paid_id" ref="p154029"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat25"/> + <field name="tax_code_id" ref="vat_code_tax_pay_add_vat2"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat25"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_add_vat2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_cst2_pur" model="account.tax.template"> + <field name="name">Input CST 2%</field> + <field name="description">Input CST 2%</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.02</field> + <field name="sequence">9333</field> + <field name="account_collected_id" ref="p154030"/> + <field name="account_paid_id" ref="p154030"/> + <field name="base_code_id" ref="vat_code_tax_pur_cst2"/> + <field name="tax_code_id" ref="vat_code_tax_pay_cst2"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_cst2"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_cst2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_no_form_h" model="account.tax.template"> + <field name="name">No Tax Form H</field> + <field name="description">No Tax Form H</field> <field name="type_tax_use">sale</field> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="child_depend" eval="0"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="exice_duty_parent" model="account.tax.template"> - <field name="name">Excise Duty-2%</field> + <field name="type">percent</field> <field name="amount">0.02</field> + <field name="base_code_id" ref="vat_code_tax_sal_exp_ct1"/> + <field name="tax_code_id" ref="vat_code_tax_rec_fomh"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_exp_ct1"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_fomh"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_cst2_sale_cst3_against_c" model="account.tax.template"> + <field name="name">CST 2% on Sales - CT3 Against Form - C</field> + <field name="description">CST 2% on Sales - CT3 Against Form - C</field> + <field name="type_tax_use">sale</field> <field name="type">percent</field> + <field name="amount">0.02</field> + <field name="account_collected_id" ref="p247007"/> + <field name="account_paid_id" ref="p247007"/> + <field name="base_code_id" ref="vat_code_tax_sal_ct3_cst"/> + <field name="tax_code_id" ref="vat_code_tax_rec_cst2_on_sal_cst3"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_ct3_cst"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_cst2_on_sal_cst3"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_out_vat4_sal_ct3" model="account.tax.template"> + <field name="name">Output VAT 4% on Sales - CT3</field> + <field name="description">Output VAT 4% on Sales - CT3</field> <field name="type_tax_use">sale</field> - <field name="account_collected_id" ref="p24730"/> - <field name="account_paid_id" ref="p24730"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="parent_id" ref="exice_public_main"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - - <record id="exice_duty" model="account.tax.template"> - <field name="name">Excise Duty-1%</field> + <field name="type">percent</field> + <field name="amount">0.04</field> + <field name="account_collected_id" ref="p247008"/> + <field name="account_paid_id" ref="p247008"/> + <field name="base_code_id" ref="vat_code_tax_sal_cst3"/> + <field name="tax_code_id" ref="vat_code_tax_rec_out4_sal_cst3"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_cst3"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_out4_sal_cst3"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_out_add1_sal_ct3" model="account.tax.template"> + <field name="name">Output Adi. VAT 1% on Sales - CT3</field> + <field name="description">Output Adi. VAT 1% on Sales - CT3</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> <field name="amount">0.01</field> + <field name="account_collected_id" ref="p247009"/> + <field name="account_paid_id" ref="p247009"/> + <field name="base_code_id" ref="vat_code_tax_sal_cst3"/> + <field name="tax_code_id" ref="vat_code_tax_rec_out_add1_sale_cst3"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_cst3"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_out_add1_sale_cst3"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_no_tax_sez_ogs" model="account.tax.template"> + <field name="name">No Tax SEZ OGS</field> + <field name="description">No Tax SEZ OGS</field> + <field name="type_tax_use">sale</field> + <field name="type">fixed</field> + <field name="base_code_id" ref="vat_code_tax_sal_sez_out_guj"/> + <field name="tax_code_id" ref="vat_code_tax_no_saz_ogs"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_sez_out_guj"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_no_saz_ogs"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_no_tax_sez_guj" model="account.tax.template"> + <field name="name">No Tax SEZ Gujarat</field> + <field name="description">No Tax SEZ Gujarat</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="base_code_id" ref="vat_code_tax_sal_sez_in_guj"/> + <field name="tax_code_id" ref="vat_code_tax_no_sez_guj"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_sez_in_guj"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_no_sez_guj"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_no_tax_h_with_bed" model="account.tax.template"> + <field name="name">No Tax Form H with BED</field> + <field name="description">No Tax Form H with BED</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="base_code_id" ref="vat_code_tax_sal_formh_tax"/> + <field name="tax_code_id" ref="vat_code_tax_rec_formh_bed"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_formh_tax"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_formh_bed"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_no_tax_export_out_country" model="account.tax.template"> + <field name="name">No Tax Exports - Out of Country</field> + <field name="description">No Tax Exports - Out of Country</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="base_code_id" ref="vat_code_tax_sal_out_country"/> + <field name="tax_code_id" ref="vat_code_tax_rec_no_out_country"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_out_country"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_no_out_country"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_no_tax_proj" model="account.tax.template"> + <field name="name">No Tax Projects</field> + <field name="description">No Tax Projects</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="base_code_id" ref="vat_code_tax_sal_proj"/> + <field name="tax_code_id" ref="vat_code_tax_rec_no_proj"/> + <field name="ref_base_code_id" ref="vat_code_tax_sal_proj"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_no_proj"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exic6_pur" model="account.tax.template"> + <field name="name">Input Excise Duty 6%</field> + <field name="description">Input Excise Duty 6%</field> + <field name="type_tax_use">purchase</field> <field name="type">percent</field> + <field name="amount">0.0600</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p154011"/> + <field name="account_paid_id" ref="p154011"/> + <field name="base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="tax_code_id" ref="vat_code_tax_pay_exice6"/> + <field name="ref_base_code_id" ref="vat_code_tax_pur_vat"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_exice6"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exice6_edu_cess2_pur" model="account.tax.template"> + <field name="name">Education Cess 2% Purchase</field> + <field name="description">Education Cess 2% Purchase</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0200</field> + <field name="sequence">21</field> + <field name="account_collected_id" ref="p154014"/> + <field name="account_paid_id" ref="p154014"/> + <field name="tax_code_id" ref="vat_code_tax_pay_cess2"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_cess2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exic6_pur"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_exice6_seco_high_cess_pur" model="account.tax.template"> + <field name="name">Seco. & Higher Edu. Cess 1% Purchase</field> + <field name="description">Seco. & Higher Edu. Cess 1% Purchase</field> + <field name="type_tax_use">purchase</field> + <field name="type">percent</field> + <field name="amount">0.0100</field> + <field name="sequence">22</field> + <field name="account_collected_id" ref="p154015"/> + <field name="account_paid_id" ref="p154015"/> + <field name="tax_code_id" ref="vat_code_tax_pay_sec_hig_edu"/> + <field name="ref_tax_code_id" ref="vat_code_tax_pay_sec_hig_edu"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_exic6_pur"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ser12_sale" model="account.tax.template"> + <field name="name">Service Tax 12% - Sales</field> + <field name="description">Service Tax 12% - Sales</field> <field name="type_tax_use">sale</field> - <field name="account_collected_id" ref="p24730"/> - <field name="account_paid_id" ref="p24730"/> - <field name="base_code_id" ref="vat_code_base_tax_sale"/> - <field name="base_sign">1</field> - <field name="tax_code_id" ref="vat_code_tax_rec"/> - <field name="tax_sign">1</field> - <field name="ref_base_code_id" ref="vat_code_base_tax_sale"/> - <field name="ref_base_sign">1</field> - <field name="ref_tax_code_id" ref="vat_code_tax_rec"/> - <field name="ref_tax_sign">1</field> - <field name="parent_id" ref="exice_public_main"/> - <field name="chart_template_id" ref="indian_chart_template_public"/> - </record> - + <field name="type">percent</field> + <field name="amount">0.12</field> + <field name="sequence">1</field> + <field name="account_collected_id" ref="p24740"/> + <field name="account_paid_id" ref="p24740"/> + <field name="base_code_id" ref="vat_code_tax_sale_ser12"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st12"/> + <field name="ref_base_code_id" ref="vat_code_tax_sale_ser12"/> + <field name="ref_base_sign" eval="-1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st12"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ser2_sale" model="account.tax.template"> + <field name="name">Service Tax 2% - Sales</field> + <field name="description">Service Tax 2% - Sales</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.02</field> + <field name="sequence">3</field> + <field name="account_collected_id" ref="p24740"/> + <field name="account_paid_id" ref="p24740"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st2"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st2"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_ser12_sale"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + + <record id="account_tax_ser1_sale" model="account.tax.template"> + <field name="name">Service Tax 1% - Sales</field> + <field name="description">Service Tax 1% - Sales</field> + <field name="type_tax_use">sale</field> + <field name="type">percent</field> + <field name="amount">0.01</field> + <field name="sequence">5</field> + <field name="account_collected_id" ref="p24740"/> + <field name="account_paid_id" ref="p24740"/> + <field name="tax_code_id" ref="vat_code_tax_rec_st1"/> + <field name="ref_tax_code_id" ref="vat_code_tax_rec_st1"/> + <field name="ref_tax_sign" eval="-1"/> + <field name="parent_id" ref="account_tax_ser12_sale"/> + <field name="chart_template_id" ref="indian_chart_template_public"/> + </record> + </data> </openerp>
\ 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 @@ <record model="account.tax.code.template" id="vat_code_payable"> <field name="name">Tax Paid</field> + <field name="sign">-1</field> <field name="parent_id" ref="vat_code_balance_net"/> </record> @@ -27,16 +28,540 @@ <field name="parent_id" ref="vat_code_tax"/> </record> - <record model="account.tax.code.template" id="vat_code_base_tax_sale"> - <field name="name">Base of Taxed Sales</field> + <field name="name">Taxable Sale Bases</field> <field name="parent_id" ref="vat_code_base_net"/> </record> <record model="account.tax.code.template" id="vat_code_base_tax_purchase"> - <field name="name">Base of Taxed Purchases</field> + <field name="name">Taxable Purchase Bases</field> <field name="parent_id" ref="vat_code_base_net"/> </record> + <record model="account.tax.code.template" id="vat_code_tax_pur_CSTP5"> + <field name="name">Input CST 5%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_PCST5"> + <field name="name">Purchase CST 5%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_ser12"> + <field name="name">Purchase Service Tax 12%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sale_ser12"> + <field name="name">Sales Service Tax 12%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_exice_salebase"> + <field name="name">Excise Duty 12.36% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_exice12"> + <field name="name">Excise Duty 12% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_exice_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_exice2"> + <field name="name">Excise Duty 2% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_exice1"> + <field name="name">Excise Duty 1% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_ic_st_purbase"> + <field name="name">Excise Duty 12.36% - Purchase</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_exice12"> + <field name="name">Excise Duty 12% - Purchase</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_purbase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_cess2"> + <field name="name">Education Cess 2% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_exice_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_cess2"> + <field name="name">Education Cess 2% - Purchase</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_purbase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_import_duty"> + <field name="name">Input Credit - Import Duty</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_edu_cess"> + <field name="name">Input Credit On Capital Goods - Edu. Cess</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_cap_goods"> + <field name="name">Input Excise Duty 12% - Capital Goods</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_seco_hec"> + <field name="name">Input Credit on Capital Goods - Seco. & HEC</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_ic_st_base"> + <field name="name">Input Service Tax 12.36%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_ic_st"> + <field name="name">Input Service Tax 12%</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_base"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_ic_edu_cess"> + <field name="name">Input Service Tax Edu. Cess. 2%</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_base"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_ic_seco_hec"> + <field name="name">Input Service Tax Seco. & HEC 1%</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_base"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_sec_hig_edu"> + <field name="name">Seco. & Higher Edu. Cess 1% - Purchase</field> + <field name="parent_id" ref="vat_code_tax_pay_ic_st_purbase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_sec_hig_cess"> + <field name="name">Seco. & Higher Edu. Cess 1% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_exice_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_cst2"> + <field name="name">CST 2% on Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_cst5"> + <field name="name">CST 5% on Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_add_vat1"> + <field name="name">Input Additional VAT 1%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_add_vat2"> + <field name="name">Input Additional Vat 2.5%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat12"> + <field name="name">Input VAT 12.5%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat15"> + <field name="name">Input VAT 15%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat10"> + <field name="name">Input VAT 10%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat8"> + <field name="name">Input VAT 8%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat5"> + <field name="name">Input VAT 5%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_vat4"> + <field name="name">Input VAT 4%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat15"> + <field name="name">Output VAT 15%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat12"> + <field name="name">Output VAT 12.5%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat10"> + <field name="name">Output VAT 10%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat8"> + <field name="name">Output VAT 8%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat5"> + <field name="name">Output VAT 5%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_vat4"> + <field name="name">Output VAT 4%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_add_vat1"> + <field name="name">Output Adi. VAT 1%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_cst2"> + <field name="name">CST 2% on Purchase</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_exice5"> + <field name="name">Input Excise Duty 5%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_exice6"> + <field name="name">Input Excise Duty 6%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_urd"> + <field name="name">Input Credit - URD</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_audit_fee"> + <field name="name">TDS on Audit Fees - 94J</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_brokerage"> + <field name="name">TDS on Commission Or Brokerage- 94H</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_contractor"> + <field name="name">TDS on Contractor-94C</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_dir_intrest"> + <field name="name">TDS on Director's Interest</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_dir_ren"> + <field name="name">TDS on Director's Remuneration - 92B</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_intrest"> + <field name="name">TDS on Interest</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_prof_fee"> + <field name="name">TDS on Professional Fees - 94J</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_rent"> + <field name="name">TDS on Rent - 94I</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_tds_sal"> + <field name="name">TDS on Salary - 92B</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_tds_pur_import"> + <field name="name">Import Purchase</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat"> + <field name="name">Purchase VAT 4% / VAT 12.5% / VAT 15% / CST 2% / CST 5%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_plant_machinery"> + <field name="name">Plant & Machinery</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_exp_act"> + <field name="name">Expense Accounts</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sales_excise"> + <field name="name">Sales Excise</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sale_cst2"> + <field name="name">Sales CST 2%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sale_cst15"> + <field name="name">Sales CST 5%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat15"> + <field name="name">Purchase VAT 15%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat12"> + <field name="name">Purchase VAT 12.5%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat10"> + <field name="name">Purchase VAT 10%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat8"> + <field name="name">Purchase VAT 8%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat5"> + <field name="name">Purchase VAT 5%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat4"> + <field name="name">Purchase VAT 4%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_vat25"> + <field name="name">Purchase VAT 2.5%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat15"> + <field name="name">Sales VAT 15%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat12"> + <field name="name">Sales VAT 12.5%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat10"> + <field name="name">Sales VAT 10%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat8"> + <field name="name">Sales VAT 8%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat5"> + <field name="name">Sales VAT 5%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_vat4"> + <field name="name">Sales VAT 4%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_cst2"> + <field name="name">Input CST 2%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_urd"> + <field name="name">Purchase URD</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pur_base_tds"> + <field name="name">Base Expenses for TDS</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_pay_add_imp_duty"> + <field name="name">Additional Duty (Imports) 4%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_formh_tax"> + <field name="name">Sales Export - Form H - With Tax</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_cst2_on_sal_cst3"> + <field name="name">CST 2% on Sales CT3</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_cst3"> + <field name="name">Sales CT3 VAT</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_out4_sal_cst3"> + <field name="name">Output VAT 4% on Sales CT3</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_out_add1_sale_cst3"> + <field name="name">Output Adi. VAT 1% on Sales CT3</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_ct3_cst"> + <field name="name">Sales CT3 CST</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_exp_ct1"> + <field name="name">Sales Export - Form H - With CT1</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_sez_out_guj"> + <field name="name">Sales Export - SEZ - Out of Gujarat</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_sez_in_guj"> + <field name="name">Sales Export - SEZ - In Gujarat</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_no_saz_ogs"> + <field name="name">No Tax SEZ OGS</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_no_sez_guj"> + <field name="name">No Tax SEZ Gujarat</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_out_country"> + <field name="name">Sales Export - Out of Country</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_sal_proj"> + <field name="name">Sales Others (Projects)</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_formh_bed"> + <field name="name">No Tax Form H with BED</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_fomh"> + <field name="name">No Tax Form H</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_no_out_country"> + <field name="name">No Tax Export Out of Country</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_no_proj"> + <field name="name">No Tax Projects</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_st_salebase"> + <field name="name">Service Tax 12.36% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_st12"> + <field name="name">Service Tax 12% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_st_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_st2"> + <field name="name">Service Tax 2% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_st_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_tax_rec_st1"> + <field name="name">Service Tax 1% - Sales</field> + <field name="parent_id" ref="vat_code_tax_rec_st_salebase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_base_tax_sale15"> + <field name="name">Sales Tax 15%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_rec_sale15"> + <field name="name">Sales Tax - 15%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_base_tax_sale12"> + <field name="name">Sales Tax 12%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_rec_sale12"> + <field name="name">Sales Tax - 12%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_base_tax_sale4"> + <field name="name">Sales Tax 4%</field> + <field name="parent_id" ref="vat_code_base_tax_sale"/> + </record> + + <record model="account.tax.code.template" id="vat_code_rec_sale4"> + <field name="name">Sales Tax - 4%</field> + <field name="parent_id" ref="vat_code_tax_rec"/> + </record> + + <record model="account.tax.code.template" id="vat_code_base_tax_pur15"> + <field name="name">Purchase Tax 15%</field> + <field name="parent_id" ref="vat_code_base_tax_purchase"/> + </record> + + <record model="account.tax.code.template" id="vat_code_pay_pur4"> + <field name="name">Purchase Tax - 15%</field> + <field name="parent_id" ref="vat_code_payable"/> + </record> + </data> </openerp> 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 1b5d520cd42..2744e6df231 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -312,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) @@ -1436,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/static/description/index.html b/addons/mail/static/description/index.html index b564cf3ab1e..aa55e63008d 100644 --- a/addons/mail/static/description/index.html +++ b/addons/mail/static/description/index.html @@ -21,7 +21,7 @@ email overload. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=mail" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 21b0f5a9a87..5d54a6acc48 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -967,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/mrp/static/description/index.html b/addons/mrp/static/description/index.html index 5777eb5f147..d44da3f37b1 100644 --- a/addons/mrp/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=mrp" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> diff --git a/addons/note/static/description/index.html b/addons/note/static/description/index.html index 7ef37c646e9..dc688859334 100644 --- a/addons/note/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=note" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> diff --git a/addons/pad_project/project_task.xml b/addons/pad_project/project_task.xml index 24efbc9dad0..c8cbbe1c626 100644 --- a/addons/pad_project/project_task.xml +++ b/addons/pad_project/project_task.xml @@ -6,7 +6,7 @@ <field name="inherit_id" ref="project.view_task_form2"/> <field name="arch" type="xml"> <field name="description" position="replace"> - <field name="description_pad" attrs="{'readonly':[('state','=','done')]}" widget="pad"/> + <field name="description_pad" widget="pad"/> </field> </field> </record> 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('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, None, 'js')) - css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, None, 'css')) + @http.route('/pos/app', type='http', auth='admin') + def app(self): + js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list('js',db=request.db)) + css = "\n ".join('<link rel="stylesheet" href="%s">' % 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('<html','<html manifest="/pos/manifest?session_id=%s"'%session_id) + template = html_template.replace('<html','<html manifest="/pos/manifest?session_id=%s"' % request.session_id) + r = template % { 'js': js, 'css': css, - 'modules': simplejson.dumps(module_boot(req)), + 'modules': simplejson.dumps(module_boot(request)), 'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));' } return r - @openerp.addons.web.http.httprequest - def manifest(self, req, **kwargs): + @http.route('/pos/manifest',type='http', auth='admin') + def manifest(self): """ This generates a HTML5 cache manifest files that preloads the categories and products thumbnails and other ressources necessary for the point of sale to work offline """ @@ -45,16 +47,16 @@ class PointOfSaleController(openerp.addons.web.http.Controller): imgdir = openerp.modules.get_module_resource('point_of_sale','static/src/img'); load_css_img(imgdir,'/point_of_sale/static/src/img') - products = req.session.model('product.product') - for p in products.search_read([('pos_categ_id','!=',False)], ['name']): + products = request.registry.get('product.product') + for p in products.search_read(request.cr, request.uid, [('pos_categ_id','!=',False)], ['name']): product_id = p['id'] - url = "/web/binary/image?session_id=%s&model=product.product&field=image&id=%s" % (req.session_id, product_id) + url = "/web/binary/image?session_id=%s&model=product.product&field=image&id=%s" % (request.session_id, product_id) ml.append(url) - categories = req.session.model('pos.category') - for c in categories.search_read([],['name']): + categories = request.registry.get('pos.category') + for c in categories.search_read(request.cr, request.uid, [], ['name']): category_id = c['id'] - url = "/web/binary/image?session_id=%s&model=pos.category&field=image&id=%s" % (req.session_id, category_id) + url = "/web/binary/image?session_id=%s&model=pos.category&field=image&id=%s" % (request.session_id, category_id) ml.append(url) ml += ["NETWORK:","*"] @@ -62,108 +64,103 @@ class PointOfSaleController(openerp.addons.web.http.Controller): return m - @openerp.addons.web.http.jsonrequest - def dispatch(self, request, iface, **kwargs): - method = 'iface_%s' % iface - return getattr(self, method)(request, **kwargs) - - @openerp.addons.web.http.jsonrequest - def scan_item_success(self, request, ean): + @http.route('/pos/scan_item_success', type='json', auth='admin') + def scan_item_success(self, ean): """ A product has been scanned with success """ print 'scan_item_success: ' + str(ean) return - @openerp.addons.web.http.jsonrequest - def scan_item_error_unrecognized(self, request, ean): + @http.route('/pos/scan_item_error_unrecognized') + def scan_item_error_unrecognized(self, ean): """ A product has been scanned without success """ print 'scan_item_error_unrecognized: ' + str(ean) return - @openerp.addons.web.http.jsonrequest - def help_needed(self, request): + @http.route('/pos/help_needed', type='json', auth='admin') + def help_needed(self): """ The user wants an help (ex: light is on) """ print "help_needed" return - @openerp.addons.web.http.jsonrequest - def help_canceled(self, request): + @http.route('/pos/help_canceled', type='json', auth='admin') + def help_canceled(self): """ The user stops the help request """ print "help_canceled" return - @openerp.addons.web.http.jsonrequest - def weighting_start(self, request): + @http.route('/pos/weighting_start', type='json', auth='admin') + def weighting_start(self): print "weighting_start" return - @openerp.addons.web.http.jsonrequest - def weighting_read_kg(self, request): + @http.route('/pos/weighting_read_kg', type='json', auth='admin') + def weighting_read_kg(self): print "weighting_read_kg" - return 0.0 + return 3.14 - @openerp.addons.web.http.jsonrequest - def weighting_end(self, request): + @http.route('/pos/weighting_end', type='json', auth='admin') + def weighting_end(self): print "weighting_end" return - @openerp.addons.web.http.jsonrequest - def payment_request(self, request, price): + @http.route('/pos/payment_request', type='json', auth='admin') + def payment_request(self, price): """ The PoS will activate the method payment """ print "payment_request: price:"+str(price) return 'ok' - @openerp.addons.web.http.jsonrequest - def payment_status(self, request): + @http.route('/pos/payment_status', type='json', auth='admin') + def payment_status(self): print "payment_status" return { 'status':'waiting' } - @openerp.addons.web.http.jsonrequest - def payment_cancel(self, request): + @http.route('/pos/payment_cancel', type='json', auth='admin') + def payment_cancel(self): print "payment_cancel" return - @openerp.addons.web.http.jsonrequest - def transaction_start(self, request): + @http.route('/pos/transaction_start', type='json', auth='admin') + def transaction_start(self): print 'transaction_start' return - @openerp.addons.web.http.jsonrequest - def transaction_end(self, request): + @http.route('/pos/transaction_end', type='json', auth='admin') + def transaction_end(self): print 'transaction_end' return - @openerp.addons.web.http.jsonrequest - def cashier_mode_activated(self, request): + @http.route('/pos/cashier_mode_activated', type='json', auth='admin') + def cashier_mode_activated(self): print 'cashier_mode_activated' return - @openerp.addons.web.http.jsonrequest - def cashier_mode_deactivated(self, request): + @http.route('/pos/cashier_mode_deactivated', type='json', auth='admin') + def cashier_mode_deactivated(self): print 'cashier_mode_deactivated' return - @openerp.addons.web.http.jsonrequest - def open_cashbox(self, request): + @http.route('/pos/open_cashbox', type='json', auth='admin') + def open_cashbox(self): print 'open_cashbox' return - @openerp.addons.web.http.jsonrequest - def print_receipt(self, request, receipt): + @http.route('/pos/print_receipt', type='json', auth='admin') + def print_receipt(self, receipt): print 'print_receipt' + str(receipt) return - @openerp.addons.web.http.jsonrequest - def print_pdf_invoice(self, request, pdfinvoice): + @http.route('/pos/print_pdf_invoice', type='json', auth='admin') + def print_pdf_invoice(self, pdfinvoice): print 'print_pdf_invoice' + str(pdfinvoice) return diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 370aa2e55ff..efe8cd98689 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -63,6 +63,7 @@ class pos_config(osv.osv): 'iface_electronic_scale' : fields.boolean('Electronic Scale Interface'), 'iface_vkeyboard' : fields.boolean('Virtual KeyBoard Interface'), 'iface_print_via_proxy' : fields.boolean('Print via Proxy'), + 'iface_invoicing': fields.boolean('Invoicing',help='Enables invoice generation from the Point of Sale'), 'state' : fields.selection(POS_CONFIG_STATE, 'Status', required=True, readonly=True), 'sequence_id' : fields.many2one('ir.sequence', 'Order IDs Sequence', readonly=True, @@ -127,7 +128,8 @@ class pos_config(osv.osv): 'warehouse_id': _default_warehouse, 'journal_id': _default_sale_journal, 'group_by' : True, - 'pricelist_id': _default_pricelist + 'pricelist_id': _default_pricelist, + 'iface_invoicing': True, } def set_active(self, cr, uid, ids, context=None): @@ -492,13 +494,17 @@ class pos_order(osv.osv): #_logger.info("orders: %r", orders) order_ids = [] for tmp_order in orders: + to_invoice = tmp_order['to_invoice'] order = tmp_order['data'] + + order_id = self.create(cr, uid, { 'name': order['name'], 'user_id': order['user_id'] or False, 'session_id': order['pos_session_id'], 'lines': order['lines'], - 'pos_reference':order['name'] + 'pos_reference':order['name'], + 'partner_id': order['partner_id'] or False }, context) for payments in order['statement_ids']: @@ -529,6 +535,12 @@ class pos_order(osv.osv): }, context=context) order_ids.append(order_id) self.signal_paid(cr, uid, [order_id]) + + if to_invoice: + self.action_invoice(cr, uid, [order_id], context) + order_obj = self.browse(cr, uid, order_id, context) + self.pool['account.invoice'].signal_invoice_open(cr, uid, [order_obj.invoice_id.id]) + return order_ids def write(self, cr, uid, ids, vals, context=None): @@ -881,6 +893,7 @@ class pos_order(osv.osv): inv_line_ref.create(cr, uid, inv_line, context=context) inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context) self.signal_invoice(cr, uid, [order.id]) + inv_ref.signal_validate(cr, uid, [inv_id]) if not inv_ids: return {} @@ -975,11 +988,11 @@ class pos_order(osv.osv): }) if data_type == 'product': - key = ('product', values['partner_id'], values['product_id']) + key = ('product', values['partner_id'], values['product_id'], values['debit'] > 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 @@ <field name="iface_self_checkout" /> <field name="iface_cashdrawer" /> <field name="iface_payment_terminal" /> + <field name="iface_invoicing" /> </group> <group> <field name="iface_electronic_scale" /> diff --git a/addons/point_of_sale/static/description/index.html b/addons/point_of_sale/static/description/index.html index 130806ddb11..7f1b7a5c097 100644 --- a/addons/point_of_sale/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=point_of_sale" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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 Binary files differnew file mode 100644 index 00000000000..e65d2ec5a67 --- /dev/null +++ b/addons/point_of_sale/static/src/img/icons/png48/invoice.png 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 @@ <div class="modal-dialog"> <div class="popup popup-help"> <p class="message">The scanned product was not recognized<br /> Please wait, a cashier is on the way</p> - </div> - </div> - <div class="footer"> - <div class="button"> - Ok + <div class="footer"> + <div class="button"> + Ok + </div> + </div> </div> </div> </t> @@ -361,6 +361,33 @@ </div> </t> + <t t-name="ErrorNoClientPopupWidget"> + <div class="modal-dialog"> + <div class="popup popup-help"> + <p class="message">An anonymous order cannot be invoiced</p> + <div class="footer"> + <div class="button"> + Ok + </div> + </div> + </div> + </div> + </t> + + <t t-name="ErrorInvoiceTransferPopupWidget"> + <div class="modal-dialog"> + <div class="popup popup-help"> + <p class="message">The Order could not be sent to the server for invoicing. Invoices cannot be generated + in offline mode. Please check your internet connection and try again.</p> + <div class="footer"> + <div class="button"> + Ok + </div> + </div> + </div> + </div> + </t> + <t t-name="ErrorPopupWidget"> <div class="modal-dialog"> <div class="popup popup-help"> @@ -538,7 +565,6 @@ <button class="paypad-button" t-att-cash-register-id="widget.cashRegister.get('id')"> <t t-esc="widget.cashRegister.get('journal').name"/> </button> - <br /> </t> <t t-name="OrderButtonWidget"> diff --git a/addons/point_of_sale/wizard/pos_session_opening.py b/addons/point_of_sale/wizard/pos_session_opening.py index 39e7c564831..3d6e314d033 100644 --- a/addons/point_of_sale/wizard/pos_session_opening.py +++ b/addons/point_of_sale/wizard/pos_session_opening.py @@ -85,6 +85,7 @@ class pos_session_opening(osv.osv_memory): session_ids = proxy.search(cr, uid, [ ('state', '!=', 'closed'), ('config_id', '=', config_id), + ('user_id', '=', uid), ], context=context) if session_ids: session = proxy.browse(cr, uid, session_ids[0], context=context) diff --git a/addons/portal_anonymous/i18n/zh_CN.po b/addons/portal_anonymous/i18n/zh_CN.po new file mode 100644 index 00000000000..53ca3f03a6a --- /dev/null +++ b/addons/portal_anonymous/i18n/zh_CN.po @@ -0,0 +1,25 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-03 15:17+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-04 05:12+0000\n" +"X-Generator: Launchpad (build 16692)\n" + +#. module: portal_anonymous +#. openerp-web +#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8 +#, python-format +msgid "Login" +msgstr "用户名" diff --git a/addons/portal_project/tests/test_access_rights.py b/addons/portal_project/tests/test_access_rights.py index a7d56cb3895..1b98a140b68 100644 --- a/addons/portal_project/tests/test_access_rights.py +++ b/addons/portal_project/tests/test_access_rights.py @@ -19,35 +19,17 @@ # ############################################################################## +from openerp.addons.project.tests.test_project_base import TestProjectBase from openerp.osv.orm import except_orm -from openerp.tests import common from openerp.tools import mute_logger -class TestPortalProject(common.TransactionCase): +class TestPortalProjectBase(TestProjectBase): def setUp(self): - super(TestPortalProject, self).setUp() + super(TestPortalProjectBase, self).setUp() cr, uid = self.cr, self.uid - # Useful models - self.project_project = self.registry('project.project') - self.project_task = self.registry('project.task') - self.res_users = self.registry('res.users') - self.res_partner = self.registry('res.partner') - - # Find Employee group - group_employee_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'base', 'group_user') - self.group_employee_id = group_employee_ref and group_employee_ref[1] or False - - # Find Project User group - group_project_user_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'project', 'group_project_user') - self.group_project_user_id = group_project_user_ref and group_project_user_ref[1] or False - - # Find Project Manager group - group_project_manager_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'project', 'group_project_manager') - self.group_project_manager_id = group_project_manager_ref and group_project_manager_ref[1] or False - # Find Portal group group_portal_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_portal') self.group_portal_id = group_portal_ref and group_portal_ref[1] or False @@ -56,62 +38,39 @@ class TestPortalProject(common.TransactionCase): group_anonymous_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_anonymous') self.group_anonymous_id = group_anonymous_ref and group_anonymous_ref[1] or False - # Test users to use through the various tests - self.user_alfred_id = self.res_users.create(cr, uid, { - 'name': 'Alfred EmployeeUser', - 'login': 'alfred', - 'alias_name': 'alfred', - 'groups_id': [(6, 0, [self.group_employee_id, self.group_project_user_id])] - }) - self.user_bert_id = self.res_users.create(cr, uid, { - 'name': 'Bert Nobody', - 'login': 'bert', - 'alias_name': 'bert', - 'groups_id': [(6, 0, [])] - }) - self.user_chell_id = self.res_users.create(cr, uid, { - 'name': 'Chell Portal', - 'login': 'chell', - 'alias_name': 'chell', - 'groups_id': [(6, 0, [self.group_portal_id])] - }) - self.user_donovan_id = self.res_users.create(cr, uid, { - 'name': 'Donovan Anonymous', - 'login': 'donovan', - 'alias_name': 'donovan', - 'groups_id': [(6, 0, [self.group_anonymous_id])] - }) - self.user_ernest_id = self.res_users.create(cr, uid, { - 'name': 'Ernest Manager', - 'login': 'ernest', - 'alias_name': 'ernest', - 'groups_id': [(6, 0, [self.group_project_manager_id])] - }) + # # Test users to use through the various tests + self.user_portal_id = self.res_users.create(cr, uid, { + 'name': 'Chell Portal', + 'login': 'chell', + 'alias_name': 'chell', + 'groups_id': [(6, 0, [self.group_portal_id])] + }) + self.user_anonymous_id = self.res_users.create(cr, uid, { + 'name': 'Donovan Anonymous', + 'login': 'donovan', + 'alias_name': 'donovan', + 'groups_id': [(6, 0, [self.group_anonymous_id])] + }) # Test 'Pigs' project - self.project_pigs_id = self.project_project.create(cr, uid, - {'name': 'Pigs', 'privacy_visibility': 'public'}, - {'mail_create_nolog': True}) + self.project_pigs_id = self.project_project.create(cr, uid, { + 'name': 'Pigs', 'privacy_visibility': 'public'}, {'mail_create_nolog': True}) # Various test tasks - self.task_1_id = self.project_task.create(cr, uid, - {'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_2_id = self.project_task.create(cr, uid, - {'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_3_id = self.project_task.create(cr, uid, - {'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_4_id = self.project_task.create(cr, uid, - {'name': 'Test4', 'user_id': self.user_alfred_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_5_id = self.project_task.create(cr, uid, - {'name': 'Test5', 'user_id': self.user_chell_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_6_id = self.project_task.create(cr, uid, - {'name': 'Test6', 'user_id': self.user_donovan_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - + self.task_1_id = self.project_task.create(cr, uid, { + 'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_2_id = self.project_task.create(cr, uid, { + 'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_3_id = self.project_task.create(cr, uid, { + 'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_4_id = self.project_task.create(cr, uid, { + 'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_5_id = self.project_task.create(cr, uid, { + 'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_6_id = self.project_task.create(cr, uid, { + 'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + + +class TestPortalProject(TestPortalProjectBase): @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') def test_00_project_access_rights(self): """ Test basic project access rights, for project and portal_project """ @@ -122,53 +81,47 @@ class TestPortalProject(common.TransactionCase): # ---------------------------------------- # Do: Alfred reads project -> ok (employee ok public) - self.project_project.read(cr, self.user_alfred_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_projectuser_id, pigs_id, ['name']) # Test: all project tasks visible - task_ids = self.project_task.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_2_id, self.task_3_id, self.task_4_id, self.task_5_id, self.task_6_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a public project') + 'access rights: project user cannot see all tasks of a public project') # Test: all project tasks readable - self.project_task.read(cr, self.user_alfred_id, task_ids, ['name']) + self.project_task.read(cr, self.user_projectuser_id, task_ids, ['name']) # Test: all project tasks writable - self.project_task.write(cr, self.user_alfred_id, task_ids, {'description': 'TestDescription'}) + self.project_task.write(cr, self.user_projectuser_id, task_ids, {'description': 'TestDescription'}) # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_bert_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Test: no project task visible - self.assertRaises(except_orm, self.project_task.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_task.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Test: no project task readable - self.assertRaises(except_orm, self.project_task.read, - cr, self.user_bert_id, task_ids, ['name']) + self.assertRaises(except_orm, self.project_task.read, cr, self.user_none_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_bert_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_none_id, task_ids, {'description': 'TestDescription'}) # Do: Chell reads project -> ok (portal ok public) - self.project_project.read(cr, self.user_chell_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_portal_id, pigs_id, ['name']) # Test: all project tasks visible - task_ids = self.project_task.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a public project') + 'access rights: project user cannot see all tasks of a public project') # Test: all project tasks readable - self.project_task.read(cr, self.user_chell_id, task_ids, ['name']) + self.project_task.read(cr, self.user_portal_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_chell_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_portal_id, task_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) - self.project_project.read(cr, self.user_donovan_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_anonymous_id, pigs_id, ['name']) # Test: all project tasks visible - task_ids = self.project_task.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: anonymous user cannot see all tasks of a public project') + 'access rights: anonymous user cannot see all tasks of a public project') # Test: all project tasks readable - self.project_task.read(cr, self.user_donovan_id, task_ids, ['name']) + self.project_task.read(cr, self.user_anonymous_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_donovan_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_anonymous_id, task_ids, {'description': 'TestDescription'}) # ---------------------------------------- # CASE2: portal project @@ -176,39 +129,36 @@ class TestPortalProject(common.TransactionCase): self.project_project.write(cr, uid, [pigs_id], {'privacy_visibility': 'portal'}) # Do: Alfred reads project -> ok (employee ok public) - self.project_project.read(cr, self.user_alfred_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_projectuser_id, pigs_id, ['name']) # Test: all project tasks visible - task_ids = self.project_task.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a portal project') + 'access rights: project user cannot see all tasks of a portal project') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_bert_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Test: no project task searchable - self.assertRaises(except_orm, self.project_task.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_task.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Data: task follower - self.project_task.message_subscribe_users(cr, self.user_alfred_id, [self.task_1_id, self.task_3_id], [self.user_chell_id]) + self.project_task.message_subscribe_users(cr, self.user_projectuser_id, [self.task_1_id, self.task_3_id], [self.user_portal_id]) # Do: Chell reads project -> ok (portal ok public) - self.project_project.read(cr, self.user_chell_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_portal_id, pigs_id, ['name']) # Test: only followed project tasks visible + assigned - task_ids = self.project_task.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: portal user should see the followed tasks of a portal project') + 'access rights: portal user should see the followed tasks of a portal project') # Do: Donovan reads project -> ko (anonymous ko portal) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_donovan_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible - task_ids = self.project_task.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of a portal project') # Data: task follower cleaning - self.project_task.message_unsubscribe_users(cr, self.user_alfred_id, [self.task_1_id, self.task_3_id], [self.user_chell_id]) + self.project_task.message_unsubscribe_users(cr, self.user_projectuser_id, [self.task_1_id, self.task_3_id], [self.user_portal_id]) # ---------------------------------------- # CASE3: employee project @@ -216,29 +166,26 @@ class TestPortalProject(common.TransactionCase): self.project_project.write(cr, uid, [pigs_id], {'privacy_visibility': 'employees'}) # Do: Alfred reads project -> ok (employee ok employee) - self.project_project.read(cr, self.user_alfred_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_projectuser_id, pigs_id, ['name']) # Test: all project tasks visible - task_ids = self.project_task.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_2_id, self.task_3_id, self.task_4_id, self.task_5_id, self.task_6_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of an employees project') + 'access rights: project user cannot see all tasks of an employees project') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_bert_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Do: Chell reads project -> ko (portal ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_chell_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_portal_id, pigs_id, ['name']) # Test: no project task visible + assigned - task_ids = self.project_task.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: portal user should not see tasks of an employees project, even if assigned') # Do: Donovan reads project -> ko (anonymous ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_donovan_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible - task_ids = self.project_task.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of an employees project') # ---------------------------------------- @@ -247,54 +194,49 @@ class TestPortalProject(common.TransactionCase): self.project_project.write(cr, uid, [pigs_id], {'privacy_visibility': 'followers'}) # Do: Alfred reads project -> ko (employee ko followers) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_alfred_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_projectuser_id, pigs_id, ['name']) # Test: no project task visible - task_ids = self.project_task.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_4_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see tasks of a not-followed followers project, only assigned') + 'access rights: employee user should not see tasks of a not-followed followers project, only assigned') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_bert_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Do: Chell reads project -> ko (portal ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_chell_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_portal_id, pigs_id, ['name']) # Test: no project task visible - task_ids = self.project_task.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: portal user should not see tasks of a not-followed followers project, only assigned') + 'access rights: portal user should not see tasks of a not-followed followers project, only assigned') # Do: Donovan reads project -> ko (anonymous ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_donovan_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible - task_ids = self.project_task.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of a followers project') # Data: subscribe Alfred, Chell and Donovan as follower - self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_alfred_id, self.user_chell_id, self.user_donovan_id]) - self.project_task.message_subscribe_users(cr, self.user_alfred_id, [self.task_1_id, self.task_3_id], [self.user_chell_id, self.user_alfred_id]) + self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_projectuser_id, self.user_portal_id, self.user_anonymous_id]) + self.project_task.message_subscribe_users(cr, self.user_projectuser_id, [self.task_1_id, self.task_3_id], [self.user_portal_id, self.user_projectuser_id]) # Do: Alfred reads project -> ok (follower ok followers) - self.project_project.read(cr, self.user_alfred_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_projectuser_id, pigs_id, ['name']) # Test: followed + assigned tasks visible - task_ids = self.project_task.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_4_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see followed + assigned tasks of a follower project') + 'access rights: employee user should not see followed + assigned tasks of a follower project') # Do: Chell reads project -> ok (follower ok follower) - self.project_project.read(cr, self.user_chell_id, pigs_id, ['name']) + self.project_project.read(cr, self.user_portal_id, pigs_id, ['name']) # Test: followed + assigned tasks visible - task_ids = self.project_task.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see followed + assigned tasks of a follower project') + 'access rights: employee user should not see followed + assigned tasks of a follower project') # Do: Donovan reads project -> ko (anonymous ko follower even if follower) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_donovan_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) diff --git a/addons/portal_project_issue/portal_project_issue_view.xml b/addons/portal_project_issue/portal_project_issue_view.xml index 2750edf300f..c4f1e0aca57 100644 --- a/addons/portal_project_issue/portal_project_issue_view.xml +++ b/addons/portal_project_issue/portal_project_issue_view.xml @@ -26,7 +26,7 @@ </div> <div><field name="categ_ids" widget="many2many_tags" class="oe_left"/></div> <div class="oe_text_right"> - <h1><field name="state" readonly="1"/></h1> + <h1><field name="stage_id" readonly="1"/></h1> </div> </div> <div> diff --git a/addons/portal_project_issue/tests/test_access_rights.py b/addons/portal_project_issue/tests/test_access_rights.py index 28d337a4965..a7721b489a0 100644 --- a/addons/portal_project_issue/tests/test_access_rights.py +++ b/addons/portal_project_issue/tests/test_access_rights.py @@ -19,40 +19,36 @@ # ############################################################################## -from openerp.addons.portal_project.tests.test_access_rights import TestPortalProject +from openerp.addons.portal_project.tests.test_access_rights import TestPortalProjectBase from openerp.osv.orm import except_orm from openerp.tools import mute_logger -class TestPortalIssueProject(TestPortalProject): +class TestPortalProjectBase(TestPortalProjectBase): def setUp(self): - super(TestPortalIssueProject, self).setUp() + super(TestPortalProjectBase, self).setUp() cr, uid = self.cr, self.uid # Useful models self.project_issue = self.registry('project.issue') # Various test issues - self.issue_1_id = self.project_issue.create(cr, uid, - {'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_2_id = self.project_issue.create(cr, uid, - {'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_3_id = self.project_issue.create(cr, uid, - {'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_4_id = self.project_issue.create(cr, uid, - {'name': 'Test4', 'user_id': self.user_alfred_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_5_id = self.project_issue.create(cr, uid, - {'name': 'Test5', 'user_id': self.user_chell_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_6_id = self.project_issue.create(cr, uid, - {'name': 'Test6', 'user_id': self.user_donovan_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - + self.issue_1_id = self.project_issue.create(cr, uid, { + 'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_2_id = self.project_issue.create(cr, uid, { + 'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_3_id = self.project_issue.create(cr, uid, { + 'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_4_id = self.project_issue.create(cr, uid, { + 'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_5_id = self.project_issue.create(cr, uid, { + 'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_6_id = self.project_issue.create(cr, uid, { + 'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + + +class TestPortalIssue(TestPortalProjectBase): @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') def test_00_project_access_rights(self): """ Test basic project access rights, for project and portal_project """ @@ -64,42 +60,38 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_alfred_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_projectuser_id, issue_ids, ['name']) # Test: all project issues writable - self.project_issue.write(cr, self.user_alfred_id, issue_ids, {'description': 'TestDescription'}) + self.project_issue.write(cr, self.user_projectuser_id, issue_ids, {'description': 'TestDescription'}) # Do: Bert reads project -> crash, no group # Test: no project issue visible - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Test: no project issue readable - self.assertRaises(except_orm, self.project_issue.read, - cr, self.user_bert_id, issue_ids, ['name']) + self.assertRaises(except_orm, self.project_issue.read, cr, self.user_none_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_bert_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_none_id, issue_ids, {'description': 'TestDescription'}) # Do: Chell reads project -> ok (portal ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_chell_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_portal_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_chell_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_portal_id, issue_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # ---------------------------------------- # CASE2: portal project @@ -108,27 +100,26 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a portal project') + 'access rights: project user cannot see all issues of a portal project') # Do: Bert reads project -> crash, no group # Test: no project issue searchable - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Data: issue follower - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # Do: Chell reads project -> ok (portal ok public) # Test: only followed project issues visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should see the followed issues of a portal project') + 'access rights: portal user should see the followed issues of a portal project') # Data: issue follower cleaning - self.project_issue.message_unsubscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_unsubscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # ---------------------------------------- # CASE3: employee project @@ -137,14 +128,14 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok employee) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of an employees project') + 'access rights: project user cannot see all issues of an employees project') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertFalse(issue_ids, 'access rights: portal user should not see issues of an employees project, even if assigned') # ---------------------------------------- @@ -154,32 +145,32 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ko (employee ko followers) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see issues of a not-followed followers project, only assigned') + 'access rights: employee user should not see issues of a not-followed followers project, only assigned') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should not see issues of a not-followed followers project, only assigned') + 'access rights: portal user should not see issues of a not-followed followers project, only assigned') # Data: subscribe Alfred, Chell and Donovan as follower - self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_alfred_id, self.user_chell_id, self.user_donovan_id]) - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id, self.user_alfred_id]) + self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_projectuser_id, self.user_portal_id, self.user_anonymous_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id, self.user_projectuser_id]) # Do: Alfred reads project -> ok (follower ok followers) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') # Do: Chell reads project -> ok (follower ok follower) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') diff --git a/addons/procurement/procurement_data.xml b/addons/procurement/procurement_data.xml index 6a83d525c68..52503e76c44 100644 --- a/addons/procurement/procurement_data.xml +++ b/addons/procurement/procurement_data.xml @@ -12,7 +12,7 @@ <field eval="False" name="doall"/> <field eval="'procurement.order'" name="model"/> <field eval="'run_scheduler'" name="function"/> - <field eval="'(False,)'" name="args"/> + <field eval="'(False,True)'" name="args"/> </record> <record id="sequence_mrp_op_type" model="ir.sequence.type"> diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 7c9d5ec3290..6f326ccf1c5 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -36,6 +36,8 @@ class procurement_order(osv.osv): ''' Runs through scheduler. @param use_new_cursor: False or the dbname ''' + if use_new_cursor: + use_new_cursor = cr.dbname self._procure_confirm(cr, uid, use_new_cursor=use_new_cursor, context=context) self._procure_orderpoint_confirm(cr, uid, automatic=automatic,\ use_new_cursor=use_new_cursor, context=context) diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index c0a516cf555..f5ba24c41cb 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -40,7 +40,6 @@ ], 'depends': [ 'base_setup', - 'base_status', 'product', 'analytic', 'board', @@ -66,7 +65,6 @@ Dashboard / Reports for Project Management will include: 'data': [ 'security/project_security.xml', 'wizard/project_task_delegate_view.xml', - 'wizard/project_task_reevaluate_view.xml', 'security/ir.model.access.csv', 'project_data.xml', 'project_view.xml', @@ -79,9 +77,6 @@ Dashboard / Reports for Project Management will include: ], 'demo': ['project_demo.xml'], 'test': [ - 'test/project_demo.yml', - 'test/project_process.yml', - 'test/task_process.yml', ], 'installable': True, 'auto_install': False, diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml index 931c661d211..3a14f7b6274 100644 --- a/addons/project/board_project_view.xml +++ b/addons/project/board_project_view.xml @@ -16,7 +16,6 @@ <field name="effective_hours" widget="float_time"/> <field name="progress" widget="progressbar"/> <field name="stage_id" invisible="context.get('set_visible',False)"/> - <field name="state" invisible="1"/> </tree> </field> </record> @@ -26,7 +25,7 @@ <field name="res_model">project.task</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="domain">[('user_id','=',uid),('state','not in',('cancel','done'))]</field> + <field name="domain">[('user_id', '=', uid), ('stage_id.fold', '!=', True)]</field> <field name="view_id" ref="view_task_tree"/> </record> diff --git a/addons/project/doc/changelog.rst b/addons/project/doc/changelog.rst new file mode 100644 index 00000000000..ba5b242f1c0 --- /dev/null +++ b/addons/project/doc/changelog.rst @@ -0,0 +1,16 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- Stage/state update + + - ``project.task``: removed inheritance from ``base_stage`` class and removed + ``state`` field. Added ``date_last_stage_update`` field holding last stage_id + modification. Updated reports. + - ``project.task.type``: removed ``state`` field. + +- Removed ``project.task.reevaluate`` wizard. diff --git a/addons/project/doc/index.rst b/addons/project/doc/index.rst new file mode 100644 index 00000000000..118b8e7006b --- /dev/null +++ b/addons/project/doc/index.rst @@ -0,0 +1,22 @@ +===================== +Project DevDoc +===================== + +Project module documentation +=================================== + +Documentation topics +'''''''''''''''''''' + +.. toctree:: + :maxdepth: 1 + + stage_status.rst + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/project/doc/stage_status.rst b/addons/project/doc/stage_status.rst new file mode 100644 index 00000000000..cc2a64c2fbf --- /dev/null +++ b/addons/project/doc/stage_status.rst @@ -0,0 +1,55 @@ +.. _stage_status: + +Stage and Status +================ + +.. versionchanged:: 8.0 saas-2 state/stage cleaning + +Stage ++++++ + +This revision removed the concept of state on project.task objects. The ``state`` +field has been totally removed and replaced by stages, using ``stage_id``. The +following models are impacted: + + - ``project.task`` now use only stages. However a convention still exists about + 'New' stage. A task is consdered as ``new`` when it has the following + properties: + + - ``stage_id and stage_id.sequence = 1`` + + - ``project.task.type`` do not have any ``state`` field anymore. + - ``project.task.report`` do not have any ``state`` field anymore. + +By default a newly created task is 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. + +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. + +``project.task.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 ``project.task``: + + - ``mt_task_new``: new tasks. Condition: ``obj.stage_id and obj.stage_id.sequence == 1`` + - ``mt_task_stage``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1`` + - ``mt_task_assigned``: user assigned. condition: ``obj.user_id and obj.user_id.id`` + - ``mt_task_blocked``: kanban state blocked. Condition: ``obj.kanban_state == 'blocked'`` + + +Those subtypes are also available on the ``project.project`` model and are used +for the auto subscription. diff --git a/addons/project/i18n/zh_CN.po b/addons/project/i18n/zh_CN.po index 885dbd1266c..8d5f0a04018 100644 --- a/addons/project/i18n/zh_CN.po +++ b/addons/project/i18n/zh_CN.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-27 03:25+0000\n" +"PO-Revision-Date: 2013-07-14 04:15+0000\n" "Last-Translator: Alan <shuchuan.wu@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-07-15 04:51+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: project #: view:project.project:0 @@ -38,7 +38,7 @@ msgstr "进度" #. module: project #: model:process.node,name:project.process_node_taskbydelegate0 msgid "Task by delegate" -msgstr "委派任务" +msgstr "委派的任务" #. module: project #: view:project.project:0 @@ -58,18 +58,18 @@ msgstr "阶段名称" #. module: project #: model:process.transition.action,name:project.process_transition_action_openpendingtask0 msgid "Set pending" -msgstr "设为未决" +msgstr "设置为等待状态" #. module: project #: view:project.project:0 msgid "New Project Based on Template" -msgstr "新的基于模板的项目" +msgstr "基于该模板新建项目" #. module: project #: view:report.project.task.user:0 #: field:report.project.task.user,day:0 msgid "Day" -msgstr "天数" +msgstr "天" #. module: project #: model:project.task.type,name:project.project_tt_merge @@ -91,7 +91,7 @@ msgstr "警告!" #: help:project.project,message_unread:0 #: help:project.task,message_unread:0 msgid "If checked new messages require your attention." -msgstr "如果要求你关注新消息,勾选此项" +msgstr "如果选中此项,你需要注意新的消息。" #. module: project #: model:process.node,name:project.process_node_donetask0 @@ -101,12 +101,12 @@ msgstr "完成任务" #. module: project #: model:process.node,note:project.process_node_donetask0 msgid "Task is Completed" -msgstr "任务完成" +msgstr "任务已经完成" #. module: project #: view:res.partner:0 msgid "False" -msgstr "否" +msgstr "错误的" #. module: project #: model:project.task.type,name:project.project_tt_testing @@ -121,7 +121,7 @@ msgstr "辅助核算科目" #. module: project #: field:project.config.settings,group_time_work_estimation_tasks:0 msgid "Manage time estimation on tasks" -msgstr "估计管理任务的时间" +msgstr "管理任务的估计时间" #. module: project #: help:project.project,message_summary:0 @@ -129,7 +129,7 @@ msgstr "估计管理任务的时间" msgid "" "Holds the Chatter summary (number of messages, ...). This summary is " "directly in html format in order to be inserted in kanban views." -msgstr "保存复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。" +msgstr "保存对话概要信息,这些概要信息将为直接以HTML格式插入到看板视图。" #. module: project #: code:addons/project/project.py:444 @@ -163,12 +163,12 @@ msgstr "重设项目" #. module: project #: view:report.project.task.user:0 msgid "In progress tasks" -msgstr "进行中任务" +msgstr "进行中的任务" #. module: project #: help:project.project,progress_rate:0 msgid "Percent of tasks closed according to the total of tasks todo." -msgstr "结束任务和全部要做任务的百分比" +msgstr "已结束任务和未结束任务的百分比。" #. module: project #: model:ir.actions.client,name:project.action_client_project_menu @@ -224,7 +224,7 @@ msgstr "分配给" #: model:mail.message.subtype,name:project.mt_project_task_closed #: model:mail.message.subtype,name:project.mt_task_closed msgid "Task Done" -msgstr "" +msgstr "已完成的任务" #. module: project #: view:project.project:0 @@ -265,7 +265,7 @@ msgstr "任务分派" #: model:mail.message.subtype,name:project.mt_project_task_started #: model:mail.message.subtype,name:project.mt_task_started msgid "Task Started" -msgstr "" +msgstr "已开始的任务" #. module: project #: view:project.task:0 @@ -458,7 +458,7 @@ msgstr "延期的任务" #. module: project #: view:project.task:0 msgid "Delegation" -msgstr "代表" +msgstr "任务委派" #. module: project #: field:project.task,create_date:0 @@ -636,6 +636,15 @@ msgid "" " </p>\n" " " msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" 创建一个新项目\n" +" </p><p>\n" +" " +"项目是组织活动,计划任务,跟踪问题,记录人力资源成本的组织形式。项目可以分为内部项目(研发活动,加快销售进度),私有项目或者客户参与的项目。\n" +" </p><p>\n" +" 内部用户以项目成员的方式参与到项目中,也可以邀请客户加入到项目中分享项目活动。\n" +" </p>\n" +" " #. module: project #: view:project.config.settings:0 @@ -647,7 +656,7 @@ msgstr "计划" #: field:project.task,date_deadline:0 #: field:report.project.task.user,date_deadline:0 msgid "Deadline" -msgstr "最后期限" +msgstr "计划完成日期" #. module: project #: view:project.task.history.cumulative:0 @@ -1137,7 +1146,7 @@ msgstr "您的文档的状态将自动更改选定的阶段。例如,如果某 #. module: project #: view:project.task:0 msgid "Extra Info" -msgstr "额外信息" +msgstr "其它信息" #. module: project #: view:project.task:0 @@ -1479,7 +1488,7 @@ msgstr "总小时数" #. module: project #: model:ir.model,name:project.model_project_config_settings msgid "project.config.settings" -msgstr "" +msgstr "项目配置" #. module: project #: model:project.task.type,name:project.project_tt_development @@ -1717,7 +1726,7 @@ msgstr "文档" #. module: project #: model:mail.message.subtype,description:project.mt_task_new msgid "Task created" -msgstr "" +msgstr "任务已创建" #. module: project #: view:report.project.task.user:0 @@ -1981,7 +1990,7 @@ msgstr "请删除与此科目关联的项目" #: model:mail.message.subtype,name:project.mt_project_task_new #: model:mail.message.subtype,name:project.mt_task_new msgid "Task Created" -msgstr "" +msgstr "任务已创建" #. module: project #: view:report.project.task.user:0 @@ -2046,7 +2055,7 @@ msgstr "" #. module: project #: model:mail.message.subtype,description:project.mt_task_closed msgid "Task closed" -msgstr "" +msgstr "已关闭的任务" #. module: project #: selection:report.project.task.user,month:0 diff --git a/addons/project/project.py b/addons/project/project.py index 587d60ff86f..c8b900c9e84 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -25,13 +25,10 @@ import time from openerp import SUPERUSER_ID from openerp import tools +from openerp.addons.resource.faces import task as Task from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp.addons.base_status.base_stage import base_stage -from openerp.addons.resource.faces import task as Task - -_TASK_STATE = [('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')] class project_task_type(osv.osv): _name = 'project.task.type' @@ -44,33 +41,18 @@ class project_task_type(osv.osv): 'case_default': fields.boolean('Default for New Projects', help="If you check this field, this stage will be proposed by default on each new project. It will not assign this stage to existing projects."), 'project_ids': fields.many2many('project.project', 'project_task_type_rel', 'type_id', 'project_id', 'Projects'), - 'state': fields.selection(_TASK_STATE, 'Related Status', required=True, - help="The status of your document is automatically changed regarding the selected stage. " \ - "For example, if a stage is related to the status 'Close', when your document reaches this stage, it is automatically closed."), 'fold': fields.boolean('Folded by Default', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."), } - def _get_default_project_id(self, cr, uid, ctx={}): - proj = ctx.get('default_project_id', False) - if type(proj) is int: - return [proj] - return proj + _defaults = { 'sequence': 1, - 'state': 'open', 'fold': False, 'case_default': False, - 'project_ids': _get_default_project_id + 'project_ids': lambda self, cr, uid, ctx=None: self.pool['project.task']._get_default_project_id(cr, uid, context=ctx), } _order = 'sequence' -def short_name(name): - """Keep first word(s) of name to make it small enough - but distinctive""" - if not name: return name - # keep 7 chars + end of the last word - keep_words = name[:7].strip().split() - return ' '.join(name.split()[:len(keep_words)]) class project(osv.osv): _name = "project.project" @@ -99,9 +81,9 @@ class project(osv.osv): def onchange_partner_id(self, cr, uid, ids, part=False, context=None): partner_obj = self.pool.get('res.partner') - if not part: - return {'value':{}} val = {} + if not part: + return {'value': val} if 'pricelist_id' in self.fields_get(cr, uid, context=context): pricelist = partner_obj.read(cr, uid, part, ['property_product_pricelist'], context=context) pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False @@ -152,11 +134,13 @@ class project(osv.osv): cr.execute(""" SELECT project_id, COALESCE(SUM(planned_hours), 0.0), COALESCE(SUM(total_hours), 0.0), COALESCE(SUM(effective_hours), 0.0) - FROM project_task WHERE project_id IN %s AND state <> 'cancelled' + FROM project_task + LEFT JOIN project_task_type ON project_task.stage_id = project_task_type.id + WHERE project_task.project_id IN %s AND project_task_type.fold = False GROUP BY project_id """, (tuple(child_parent.keys()),)) # aggregate results into res - res = dict([(id, {'planned_hours':0.0,'total_hours':0.0,'effective_hours':0.0}) for id in ids]) + res = dict([(id, {'planned_hours':0.0, 'total_hours':0.0, 'effective_hours':0.0}) for id in ids]) for id, planned, total, effective in cr.fetchall(): # add the values specific to id to all parent projects of id in the result while id: @@ -253,22 +237,22 @@ class project(osv.osv): 'planned_hours': fields.function(_progress_rate, multi="progress", string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'effective_hours': fields.function(_progress_rate, multi="progress", string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'total_hours': fields.function(_progress_rate, multi="progress", string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'progress_rate': fields.function(_progress_rate, multi="progress", string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo.", store = { 'project.project': (_get_project_and_parents, ['tasks', 'parent_id', 'child_ids'], 10), - 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'state'], 20), + 'project.task': (_get_projects_from_tasks, ['planned_hours', 'remaining_hours', 'work_ids', 'stage_id'], 20), }), 'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report", states={'close':[('readonly',True)]} ), 'type_ids': fields.many2many('project.task.type', 'project_task_type_rel', 'project_id', 'type_id', 'Tasks Stages', states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), @@ -323,26 +307,19 @@ class project(osv.osv): ] def set_template(self, cr, uid, ids, context=None): - res = self.setActive(cr, uid, ids, value=False, context=context) - return res + return self.setActive(cr, uid, ids, value=False, context=context) def set_done(self, cr, uid, ids, context=None): - task_obj = self.pool.get('project.task') - task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', 'not in', ('cancelled', 'done'))]) - task_obj.case_close(cr, uid, task_ids, context=context) - return self.write(cr, uid, ids, {'state':'close'}, context=context) + return self.write(cr, uid, ids, {'state': 'close'}, context=context) def set_cancel(self, cr, uid, ids, context=None): - task_obj = self.pool.get('project.task') - task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')]) - task_obj.case_cancel(cr, uid, task_ids, context=context) - return self.write(cr, uid, ids, {'state':'cancelled'}, context=context) + return self.write(cr, uid, ids, {'state': 'cancelled'}, context=context) def set_pending(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'pending'}, context=context) + return self.write(cr, uid, ids, {'state': 'pending'}, context=context) def set_open(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state':'open'}, context=context) + return self.write(cr, uid, ids, {'state': 'open'}, context=context) def reset_project(self, cr, uid, ids, context=None): return self.setActive(cr, uid, ids, value=True, context=context) @@ -459,8 +436,6 @@ class project(osv.osv): if project.user_id and (project.user_id.id not in u_ids): u_ids.append(project.user_id.id) for task in project.tasks: - if task.state in ('done','cancelled'): - continue if task.user_id and (task.user_id.id not in u_ids): u_ids.append(task.user_id.id) calendar_id = project.resource_calendar_id and project.resource_calendar_id.id or False @@ -525,7 +500,7 @@ def Project(): for project in projects: project_gantt = getattr(projects_gantt, 'Project_%d' % (project.id,)) for task in project.tasks: - if task.state in ('done', 'cancelled'): + if task.stage_id and task.stage_id.fold: continue p = getattr(project_gantt, 'Task_%d' % (task.id,)) @@ -540,16 +515,13 @@ def Project(): }, context=context) return True - # ------------------------------------------------ - # OpenChatter methods and notifications - # ------------------------------------------------ - def create(self, cr, uid, vals, context=None): if context is None: context = {} # Prevent double project creation when 'use_tasks' is checked + alias management create_context = dict(context, project_creation_in_progress=True, - alias_model_name=vals.get('alias_model', 'project.task'), alias_parent_model_name=self._name) + alias_model_name=vals.get('alias_model', 'project.task'), + alias_parent_model_name=self._name) if vals.get('type', False) not in ('template', 'contract'): vals['type'] = 'contract' @@ -566,26 +538,35 @@ def Project(): vals.update(alias_model_id=model_ids[0]) return super(project, self).write(cr, uid, ids, vals, context=context) -class task(base_stage, osv.osv): + +class task(osv.osv): _name = "project.task" _description = "Task" _date_name = "date_start" _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { - 'state': { - 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj.state in ['new', 'draft'], - 'project.mt_task_started': lambda self, cr, uid, obj, ctx=None: obj.state == 'open', - 'project.mt_task_closed': lambda self, cr, uid, obj, ctx=None: obj.state == 'done', - }, 'stage_id': { - 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj.state not in ['new', 'draft', 'done', 'open'], + 'project.mt_task_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1, + 'project.mt_task_stage': lambda self, cr, uid, obj, ctx=None: obj.stage_id.sequence != 1, }, - 'kanban_state': { # kanban state: tracked, but only block subtype + 'user_id': { + 'project.mt_task_assigned': lambda self, cr, uid, obj, ctx=None: obj.user_id and obj.user_id.id, + }, + 'kanban_state': { 'project.mt_task_blocked': lambda self, cr, uid, obj, ctx=None: obj.kanban_state == 'blocked', }, } + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return project.partner_id.id + return False + def _get_default_project_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return (self._resolve_project_id_from_context(cr, uid, context=context) or False) @@ -593,14 +574,15 @@ class task(base_stage, osv.osv): def _get_default_stage_id(self, cr, uid, context=None): """ Gives default stage_id """ project_id = self._get_default_project_id(cr, uid, context=context) - return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context) + return self.stage_find(cr, uid, [], project_id, [('sequence', '=', '1')], context=context) def _resolve_project_id_from_context(self, cr, uid, context=None): """ Returns ID of project based on the value of 'default_project_id' context key, or None if it cannot be resolved to a single project. """ - if context is None: context = {} + if context is None: + context = {} if type(context.get('default_project_id')) in (int, long): return context['default_project_id'] if isinstance(context.get('default_project_id'), basestring): @@ -669,27 +651,32 @@ class task(base_stage, osv.osv): res[task.id]['progress'] = 0.0 if (task.remaining_hours + hours.get(task.id, 0.0)): res[task.id]['progress'] = round(min(100.0 * hours.get(task.id, 0.0) / res[task.id]['total_hours'], 99.99),2) - if task.state in ('done','cancelled'): + # TDE CHECK: if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: res[task.id]['progress'] = 100.0 return res def onchange_remaining(self, cr, uid, ids, remaining=0.0, planned=0.0): if remaining and not planned: - return {'value':{'planned_hours': remaining}} + return {'value': {'planned_hours': remaining}} return {} def onchange_planned(self, cr, uid, ids, planned=0.0, effective=0.0): - return {'value':{'remaining_hours': planned - effective}} - - def onchange_project(self, cr, uid, id, project_id): - if not project_id: - return {} - data = self.pool.get('project.project').browse(cr, uid, [project_id]) - partner_id=data and data[0].partner_id - if partner_id: - return {'value':{'partner_id':partner_id.id}} + return {'value': {'remaining_hours': planned - effective}} + + def onchange_project(self, cr, uid, id, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} + def onchange_user_id(self, cr, uid, ids, user_id, context=None): + vals = {} + if user_id: + vals['date_start'] = fields.datetime.now() + return {'value': vals} + def duplicate_task(self, cr, uid, map_ids, context=None): for new in map_ids.values(): task = self.browse(cr, uid, new, context) @@ -747,13 +734,6 @@ class task(base_stage, osv.osv): 'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of tasks."), 'stage_id': fields.many2one('project.task.type', 'Stage', track_visibility='onchange', domain="[('project_ids', '=', project_id)]"), - 'state': fields.related('stage_id', 'state', type="selection", store=True, - selection=_TASK_STATE, 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('project.category', string='Tags'), 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', track_visibility='onchange', @@ -766,6 +746,7 @@ class task(base_stage, osv.osv): 'date_start': fields.datetime('Starting Date',select=True), 'date_end': fields.datetime('Ending Date',select=True), 'date_deadline': fields.date('Deadline',select=True), + 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'project_id': fields.many2one('project.project', 'Project', ondelete='set null', select="1", track_visibility='onchange'), 'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'), 'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'), @@ -782,7 +763,7 @@ class task(base_stage, osv.osv): 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours'], 10), 'project.task.work': (_get_task, ['hours'], 10), }), - 'progress': fields.function(_hours_get, string='Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time", + 'progress': fields.function(_hours_get, string='Working Time Progress (%)', multi='hours', group_operator="avg", help="If the task has a progress of 99.99% you should close the task if it's finished or reevaluate the time", store = { 'project.task': (lambda self, cr, uid, ids, c={}: ids, ['work_ids', 'remaining_hours', 'planned_hours','state'], 10), 'project.task.work': (_get_task, ['hours'], 10), @@ -805,13 +786,15 @@ class task(base_stage, osv.osv): _defaults = { 'stage_id': _get_default_stage_id, 'project_id': _get_default_project_id, + 'date_last_stage_update': lambda *a: fields.datetime.now(), 'kanban_state': 'normal', 'priority': '2', 'progress': 0, 'sequence': 10, 'active': True, - 'user_id': lambda obj, cr, uid, context: uid, - 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c), + 'user_id': lambda obj, cr, uid, ctx=None: uid, + 'company_id': lambda self, cr, uid, ctx=None: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=ctx), + 'partner_id': lambda self, cr, uid, ctx=None: self._get_default_partner(cr, uid, context=ctx), } _order = "priority, sequence, date_start, name, id" @@ -931,7 +914,7 @@ class task(base_stage, osv.osv): section_ids.append(task.project_id.id) search_domain = [] if section_ids: - search_domain = [('|')] * (len(section_ids)-1) + search_domain = [('|')] * (len(section_ids) - 1) for section_id in section_ids: search_domain.append(('project_ids', '=', section_id)) search_domain += list(domain) @@ -948,82 +931,10 @@ class task(base_stage, osv.osv): for task in tasks: if task.child_ids: for child in task.child_ids: - if child.state in ['draft', 'open', 'pending']: + if child.stage_id and not child.stage_id.fold: raise osv.except_osv(_("Warning!"), _("Child task still open.\nPlease cancel or complete child task first.")) return True - def action_close(self, cr, uid, ids, context=None): - """ This action closes the task - """ - task_id = len(ids) and ids[0] or False - self._check_child_task(cr, uid, ids, context=context) - if not task_id: return False - return self.do_close(cr, uid, [task_id], context=context) - - def do_close(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_close. """ - return self.case_close(cr, uid, ids, context=context) - - def case_close(self, cr, uid, ids, context=None): - """ Closes Task """ - if not isinstance(ids, list): ids = [ids] - for task in self.browse(cr, uid, ids, context=context): - vals = {} - project = task.project_id - for parent_id in task.parent_ids: - if parent_id.state in ('pending','draft'): - reopen = True - for child in parent_id.child_ids: - if child.id != task.id and child.state not in ('done','cancelled'): - reopen = False - if reopen: - self.do_reopen(cr, uid, [parent_id.id], context=context) - # close task - vals['remaining_hours'] = 0.0 - if not task.date_end: - vals['date_end'] = fields.datetime.now() - self.case_set(cr, uid, [task.id], 'done', vals, context=context) - return True - - def do_reopen(self, cr, uid, ids, context=None): - for task in self.browse(cr, uid, ids, context=context): - project = task.project_id - self.case_set(cr, uid, [task.id], 'open', {}, context=context) - return True - - def do_cancel(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_cancel. """ - return self.case_cancel(cr, uid, ids, context=context) - - def case_cancel(self, cr, uid, ids, context=None): - tasks = self.browse(cr, uid, ids, context=context) - self._check_child_task(cr, uid, ids, context=context) - for task in tasks: - self.case_set(cr, uid, [task.id], 'cancelled', {'remaining_hours': 0.0}, context=context) - return True - - def do_open(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_open. """ - return self.case_open(cr, uid, ids, context=context) - - def case_open(self, cr, uid, ids, context=None): - if not isinstance(ids,list): ids = [ids] - return self.case_set(cr, uid, ids, 'open', {'date_start': fields.datetime.now()}, context=context) - - def do_draft(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_draft. """ - return self.case_draft(cr, uid, ids, context=context) - - def case_draft(self, cr, uid, ids, context=None): - return self.case_set(cr, uid, ids, 'draft', {}, context=context) - - def do_pending(self, cr, uid, ids, context=None): - """ Compatibility when changing to case_pending. """ - return self.case_pending(cr, uid, ids, context=context) - - def case_pending(self, cr, uid, ids, context=None): - return self.case_set(cr, uid, ids, 'pending', {}, context=context) - def _delegate_task_attachments(self, cr, uid, task_id, delegated_task_id, context=None): attachment = self.pool.get('ir.attachment') attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', task_id)], context=context) @@ -1044,6 +955,7 @@ class task(base_stage, osv.osv): delegated_task_id = self.copy(cr, uid, task.id, { 'name': delegate_data['name'], 'project_id': delegate_data['project_id'] and delegate_data['project_id'][0] or False, + 'stage_id': delegate_data.get('stage_id') and delegate_data.get('stage_id')[0] or False, 'user_id': delegate_data['user_id'] and delegate_data['user_id'][0] or False, 'planned_hours': delegate_data['planned_hours'] or 0.0, 'parent_ids': [(6, 0, [task.id])], @@ -1058,16 +970,12 @@ class task(base_stage, osv.osv): 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0), 'name': newname, }, context=context) - if delegate_data['state'] == 'pending': - self.do_pending(cr, uid, [task.id], context=context) - elif delegate_data['state'] == 'done': - self.do_close(cr, uid, [task.id], context=context) delegated_tasks[task.id] = delegated_task_id return delegated_tasks def set_remaining_time(self, cr, uid, ids, remaining_time=1.0, context=None): for task in self.browse(cr, uid, ids, context=context): - if (task.state=='draft') or (task.planned_hours==0.0): + if (task.stage_id and task.stage_id.sequence == 1) or (task.planned_hours == 0.0): self.write(cr, uid, [task.id], {'planned_hours': remaining_time}, context=context) self.write(cr, uid, ids, {'remaining_hours': remaining_time}, context=context) return True @@ -1102,50 +1010,56 @@ class task(base_stage, osv.osv): 'planned_hours': task.planned_hours, 'kanban_state': task.kanban_state, 'type_id': task.stage_id.id, - 'state': task.state, 'user_id': task.user_id.id }, context=context) return True + # ------------------------------------------------ + # CRUD overrides + # ------------------------------------------------ + 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('project_id'): - ctx['default_project_id'] = vals['project_id'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + + # for default stage + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + # user_id change: update date_start + if vals.get('user_id'): + vals['date_start'] = fields.datetime.now() + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) task_id = super(task, self).create(cr, uid, vals, context=create_context) self._store_history(cr, uid, [task_id], context=context) return task_id - # Overridden to reset the kanban_state to normal whenever - # the stage (stage_id) of the task changes. def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] - if vals.get('project_id'): - project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context) - if project_id: - vals.setdefault('message_follower_ids', []) - vals['message_follower_ids'] += [(6, 0,[follower.id]) for follower in project_id.message_follower_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() + + # Overridden to reset the kanban_state to normal whenever + # the stage (stage_id) of the task changes. if vals and not 'kanban_state' in vals and 'stage_id' in vals: new_stage = vals.get('stage_id') vals_reset_kstate = dict(vals, kanban_state='normal') for t in self.browse(cr, uid, ids, context=context): - #TO FIX:Kanban view doesn't raise warning - #stages = [stage.id for stage in t.project_id.type_ids] - #if new_stage not in stages: - #raise osv.except_osv(_('Warning!'), _('Stage is not defined in the project.')) write_vals = vals_reset_kstate if t.stage_id != new_stage else vals super(task, self).write(cr, uid, [t.id], write_vals, context=context) result = True else: result = super(task, self).write(cr, uid, ids, vals, context=context) - if ('stage_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals): + + if any(item in vals for item in ['stage_id', 'remaining_hours', 'user_id', 'kanban_state']): self._store_history(cr, uid, ids, context=context) return result @@ -1161,7 +1075,7 @@ class task(base_stage, osv.osv): result = "" ident = ' '*ident for task in tasks: - if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: continue result += ''' %sdef Task_%s(): @@ -1231,24 +1145,10 @@ class task(base_stage, osv.osv): update_vals[field] = float(res.group(2).lower()) except (ValueError, TypeError): pass - elif match.lower() == 'state' \ - and res.group(2).lower() in ['cancel','close','draft','open','pending']: - act = 'do_%s' % res.group(2).lower() if act: getattr(self,act)(cr, uid, ids, context=context) return super(task,self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) - def project_task_reevaluate(self, cr, uid, ids, context=None): - if self.pool.get('res.users').has_group(cr, uid, 'project.group_time_work_estimation_tasks'): - return { - 'view_type': 'form', - "view_mode": 'form', - 'res_model': 'project.task.reevaluate', - 'type': 'ir.actions.act_window', - 'target': 'new', - } - return self.do_reopen(cr, uid, ids, context=context) - class project_work(osv.osv): _name = "project.task.work" _description = "Project Task Work" @@ -1369,7 +1269,7 @@ class project_task_history(osv.osv): def _get_date(self, cr, uid, ids, name, arg, context=None): result = {} for history in self.browse(cr, uid, ids, context=context): - if history.state in ('done','cancelled'): + if history.type_id and history.type_id.fold: result[history.id] = history.date continue cr.execute('''select @@ -1403,14 +1303,13 @@ class project_task_history(osv.osv): _columns = { 'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True, select=True), 'type_id': fields.many2one('project.task.type', 'Stage'), - 'state': fields.selection([('draft', 'New'), ('cancelled', 'Cancelled'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done')], 'Status'), - 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', required=False), + 'kanban_state': fields.selection([('normal', 'Normal'), ('blocked', 'Blocked'), ('done', 'Ready for next stage')], 'Kanban State', required=False), 'date': fields.date('Date', select=True), 'end_date': fields.function(_get_date, string='End Date', type="date", store={ 'project.task.history': (_get_related_date, None, 20) }), - 'remaining_hours': fields.float('Remaining Time', digits=(16,2)), - 'planned_hours': fields.float('Planned Time', digits=(16,2)), + 'remaining_hours': fields.float('Remaining Time', digits=(16, 2)), + 'planned_hours': fields.float('Planned Time', digits=(16, 2)), 'user_id': fields.many2one('res.users', 'Responsible'), } _defaults = { @@ -1440,7 +1339,7 @@ class project_task_history_cumulative(osv.osv): SELECT h.id AS history_id, h.date+generate_series(0, CAST((coalesce(h.end_date, DATE 'tomorrow')::date - h.date) AS integer)-1) AS date, - h.task_id, h.type_id, h.user_id, h.kanban_state, h.state, + h.task_id, h.type_id, h.user_id, h.kanban_state, greatest(h.remaining_hours, 1) AS remaining_hours, greatest(h.planned_hours, 1) AS planned_hours, t.project_id FROM diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index 7bf1a623a2c..0f48dfe9a2b 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -30,51 +30,43 @@ <record id="project_tt_analysis" model="project.task.type"> <field name="sequence">1</field> <field name="name">Analysis</field> - <field name="state">draft</field> - <field name="case_default" eval="False"/> + <field name="case_default" eval="True"/> </record> <record id="project_tt_specification" model="project.task.type"> - <field name="sequence">2</field> + <field name="sequence">10</field> <field name="name">Specification</field> - <field name="state">pending</field> <field name="case_default" eval="True"/> </record> <record id="project_tt_design" model="project.task.type"> - <field name="sequence">2</field> + <field name="sequence">11</field> <field name="name">Design</field> - <field name="state">open</field> <field name="case_default" eval="True"/> </record> <record id="project_tt_development" model="project.task.type"> - <field name="sequence">3</field> + <field name="sequence">12</field> <field name="name">Development</field> - <field name="state">open</field> <field name="case_default" eval="True"/> </record> <record id="project_tt_testing" model="project.task.type"> - <field name="sequence">4</field> + <field name="sequence">13</field> <field name="name">Testing</field> - <field name="state">open</field> <field name="case_default" eval="True"/> </record> <record id="project_tt_merge" model="project.task.type"> - <field name="sequence">5</field> + <field name="sequence">14</field> <field name="name">Merge</field> - <field name="state">open</field> <field name="case_default" eval="False"/> <field name="fold" eval="True"/> </record> <record id="project_tt_deployment" model="project.task.type"> - <field name="sequence">100</field> + <field name="sequence">20</field> <field name="name">Done</field> - <field name="state">done</field> <field name="case_default" eval="True"/> <field name="fold" eval="True"/> </record> <record id="project_tt_cancel" model="project.task.type"> - <field name="sequence">200</field> + <field name="sequence">30</field> <field name="name">Cancelled</field> - <field name="state">cancelled</field> <field name="case_default" eval="True"/> <field name="fold" eval="True"/> </record> @@ -86,11 +78,11 @@ <field name="default" eval="False"/> <field name="description">Task created</field> </record> - <record id="mt_task_started" model="mail.message.subtype"> - <field name="name">Task Started</field> + <record id="mt_task_assigned" model="mail.message.subtype"> + <field name="name">Task Assigned</field> <field name="res_model">project.task</field> <field name="default" eval="False"/> - <field name="description">Task started</field> + <field name="description">Task Assigned</field> </record> <record id="mt_task_blocked" model="mail.message.subtype"> <field name="name">Task Blocked</field> @@ -98,12 +90,6 @@ <field name="default" eval="False"/> <field name="description">Task blocked</field> </record> - <record id="mt_task_closed" model="mail.message.subtype"> - <field name="name">Task Done</field> - <field name="res_model">project.task</field> - <field name="default" eval="False"/> - <field name="description">Task closed</field> - </record> <record id="mt_task_stage" model="mail.message.subtype"> <field name="name">Stage Changed</field> <field name="res_model">project.task</field> @@ -118,11 +104,11 @@ <field name="parent_id" eval="ref('mt_task_new')"/> <field name="relation_field">project_id</field> </record> - <record id="mt_project_task_started" model="mail.message.subtype"> - <field name="name">Task Started</field> + <record id="mt_project_task_assigned" model="mail.message.subtype"> + <field name="name">Task Assigned</field> <field name="res_model">project.project</field> <field name="default" eval="False"/> - <field name="parent_id" eval="ref('mt_task_started')"/> + <field name="parent_id" eval="ref('mt_task_assigned')"/> <field name="relation_field">project_id</field> </record> <record id="mt_project_task_blocked" model="mail.message.subtype"> @@ -131,12 +117,6 @@ <field name="parent_id" eval="ref('mt_task_blocked')"/> <field name="relation_field">project_id</field> </record> - <record id="mt_project_task_closed" model="mail.message.subtype"> - <field name="name">Task Done</field> - <field name="res_model">project.project</field> - <field name="parent_id" eval="ref('mt_task_closed')"/> - <field name="relation_field">project_id</field> - </record> <record id="mt_project_task_stage" model="mail.message.subtype"> <field name="name">Task Stage Changed</field> <field name="res_model">project.project</field> diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index b7e1524c2c8..12e373642fd 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -225,7 +225,6 @@ ref('project.project_category_04')])]"/> <field name="stage_id" ref="project_tt_merge"/> </record> - <function model="project.task" name="do_close" eval="[ref('project_task_11')], {'install_mode': True}"/> <record id="project_task_12" model="project.task"> <field name="planned_hours" eval="40.0"/> @@ -237,7 +236,6 @@ <field name="stage_id" ref="project_tt_merge"/> <field name="color">6</field> </record> - <function model="project.task" name="do_close" eval="[ref('project_task_12')], {'install_mode': True}"/> <record id="project_task_13" model="project.task"> <field name="planned_hours" eval="12.0"/> @@ -248,7 +246,6 @@ <field name="name">Design Use Cases</field> <field name="stage_id" ref="project_tt_analysis"/> </record> - <function model="project.task" name="do_pending" eval="[ref('project_task_13')], {'install_mode': True}"/> <record id="project_task_14" model="project.task"> <field name="planned_hours" eval="12.0"/> @@ -282,7 +279,6 @@ <field name="name">Set target for all deparments</field> <field name="stage_id" ref="project_tt_development"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_16')], {'install_mode': True}"/> <record id="project_task_17" model="project.task"> <field name="planned_hours" eval="34.0"/> @@ -293,7 +289,6 @@ <field name="name">Integration of core components</field> <field name="stage_id" ref="project_tt_testing"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_17')], {'install_mode': True}"/> <record id="project_task_18" model="project.task"> <field name="planned_hours" eval="16.0"/> @@ -315,7 +310,6 @@ <field name="categ_ids" eval="[(6, 0, [ ref('project_category_03')])]"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_19')], {'install_mode': True}"/> <record id="project_task_20" model="project.task"> <field name="planned_hours">42.0</field> @@ -325,7 +319,6 @@ <field name="project_id" ref="project.project_project_4"/> <field name="name">Create new components</field> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_20')], {'install_mode': True}"/> <record id="project_task_21" model="project.task"> <field name="planned_hours">14.0</field> @@ -337,7 +330,6 @@ <field name="categ_ids" eval="[(6, 0, [ ref('project_category_04')])]"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_21')], {'install_mode': True}"/> <record id="project_task_22" model="project.task"> <field name="planned_hours">12.0</field> @@ -371,7 +363,6 @@ <field name="categ_ids" eval="[(6, 0, [ ref('project_category_01')])]"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_24')], {'install_mode': True}"/> <record id="project_task_25" model="project.task"> <field name="sequence">20</field> @@ -382,7 +373,6 @@ <field name="name">Data importation + Doc</field> <field name="stage_id" ref="project_tt_development"/> </record> - <function model="project.task" name="do_open" eval="[ref('project_task_25')], {'install_mode': True}"/> <record id="project_task_26" model="project.task"> <field name="sequence">20</field> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 33842a9a19c..fd44353b177 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -18,29 +18,26 @@ <search string="Tasks"> <field name="name" string="Tasks"/> <field name="categ_ids"/> + <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/> + <filter string="New" name="draft" domain="[('stage_id.sequence', '=', 1)]"/> <separator/> - <filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> - <separator/> - <filter name="draft" string="New" domain="[('state','=','draft')]" help="New Tasks" icon="terp-check"/> - <filter name="open" string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/> - <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/> + <filter string="My Tasks" domain="[('user_id','=',uid)]"/> <separator/> - <filter name="My project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/> - <separator/> - <filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal"/> - <filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-"/> + <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> <filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','<>',False)]" - help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/> + help="Show only tasks having a deadline"/> <field name="partner_id"/> <field name="project_id"/> <field name="user_id"/> + <field name="stage_id" domain="[]"/> <group expand="0" string="Group By..."> <filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/> <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/> + <filter string="Last Stage Update" icon="terp-go-month" domain="[]" context="{'group_by':'date_last_stage_update'}"/> <filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/> - <filter string="Start Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}" groups="base.group_no_one"/> + <filter string="Start Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}"/> <filter string="End Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_end'}" groups="base.group_no_one"/> </group> </search> @@ -371,18 +368,6 @@ <field name="arch" type="xml"> <form string="Project" version="7.0"> <header> - <!-- - <button name="do_open" string="Start Task" type="object" - states="draft,pending" class="oe_highlight"/> - <button name="do_draft" string="Draft" type="object" - states="cancel,done"/> - --> - <button name="project_task_reevaluate" string="Reactivate" type="object" - states="cancelled,done" context="{'button_reactivate':True}" groups="base.group_user"/> - <button name="action_close" string="Done" type="object" - states="draft,open,pending" groups="base.group_user"/> - <button name="do_cancel" string="Cancel Task" type="object" - states="draft,open,pending" groups="base.group_user"/> <field name="stage_id" widget="statusbar" clickable="True"/> </header> <sheet string="Task"> @@ -396,8 +381,7 @@ <group> <group> <field name="project_id" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/> - <field name="user_id" - attrs="{'readonly':[('state','in',['done', 'cancelled'])]}" + <field name="user_id" options='{"no_open": True}' context="{'default_groups_ref': ['base.group_user', 'project.group_project_user']}"/> <field name="planned_hours" widget="float_time" @@ -405,15 +389,15 @@ on_change="onchange_planned(planned_hours, effective_hours)"/> </group> <group> - <field name="date_deadline" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/> + <field name="date_deadline"/> <field name="categ_ids" widget="many2many_tags"/> <field name="progress" widget="progressbar" - groups="project.group_time_work_estimation_tasks" attrs="{'invisible':[('state','=','cancelled')]}"/> + groups="project.group_time_work_estimation_tasks"/> </group> </group> <notebook> <page string="Description"> - <field name="description" attrs="{'readonly':[('state','=','done')]}" placeholder="Add a Description..."/> + <field name="description" placeholder="Add a Description..."/> <field name="work_ids" groups="project.group_tasks_work_on_tasks"> <tree string="Task Work" editable="top"> <field name="name"/> @@ -427,7 +411,7 @@ <field name="effective_hours" widget="float_time"/> <label for="remaining_hours" string="Remaining" groups="project.group_time_work_estimation_tasks"/> <div> - <field name="remaining_hours" widget="float_time" attrs="{'readonly':[('state','in',('done','cancelled'))]}" groups="project.group_time_work_estimation_tasks"/> + <field name="remaining_hours" widget="float_time" groups="project.group_time_work_estimation_tasks"/> </div> <field name="total_hours" widget="float_time" class="oe_subtotal_footer_separator"/> </group> @@ -436,7 +420,7 @@ </page> <page string="Delegation" groups="project.group_delegate_task"> <button name="%(action_project_task_delegate)d" string="Delegate" type="action" - states="pending,open,draft" groups="project.group_delegate_task"/> + groups="project.group_delegate_task"/> <separator string="Parent Tasks"/> <field name="parent_ids"/> <separator string="Delegated tasks"/> @@ -445,7 +429,6 @@ <field name="name"/> <field name="user_id"/> <field name="stage_id"/> - <field name="state" invisible="1"/> <field name="effective_hours" widget="float_time"/> <field name="progress" widget="progressbar"/> <field name="remaining_hours" widget="float_time"/> @@ -453,12 +436,11 @@ </tree> </field> </page> - <page string="Extra Info" attrs="{'readonly':[('state','=','done')]}"> + <page string="Extra Info"> <group col="4"> <field name="priority" groups="base.group_user"/> <field name="sequence"/> <field name="partner_id"/> - <field name="state" invisible="1"/> <field name="company_id" groups="base.group_multi_company" widget="selection"/> </group> <group> @@ -467,6 +449,7 @@ <field name="date_end"/> </group> <group> + <field name="date_last_stage_update" groups="base.group_no_one"/> </group> </group> </page> @@ -493,7 +476,6 @@ <field name="user_email"/> <field name="description"/> <field name="sequence"/> - <field name="state" groups="base.group_no_one"/> <field name="kanban_state"/> <field name="remaining_hours" sum="Remaining Time" groups="project.group_time_work_estimation_tasks"/> <field name="date_deadline"/> @@ -513,7 +495,6 @@ <li><a name="set_remaining_time_2" type="object" class="oe_kanban_button">2</a></li> <li><a name="set_remaining_time_5" type="object" class="oe_kanban_button">5</a></li> <li><a name="set_remaining_time_10" type="object" class="oe_kanban_button">10</a></li> - <li><a name="do_open" states="draft" string="Validate planned time" type="object" class="oe_kanban_button oe_kanban_button_active">!</a></li> </ul> </li> <br/> @@ -562,7 +543,7 @@ <field name="model">project.task</field> <field eval="2" name="priority"/> <field name="arch" type="xml"> - <tree fonts="bold:message_unread==True" colors="grey:state in ('cancelled','done');blue:state == 'pending';red:date_deadline and (date_deadline<current_date) and (state in ('draft','pending','open'))" string="Tasks"> + <tree fonts="bold:message_unread==True" colors="red:date_deadline and (date_deadline<current_date)" string="Tasks"> <field name="message_unread" invisible="1"/> <field name="sequence" invisible="not context.get('seq_visible', False)"/> <field name="name"/> @@ -575,7 +556,6 @@ <field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)" invisible="context.get('set_visible',False)" groups="project.group_time_work_estimation_tasks"/> <field name="date_deadline" invisible="context.get('deadline_visible',True)"/> <field name="stage_id" invisible="context.get('set_visible',False)"/> - <field name="state" invisible="1"/> <field name="date_start" groups="base.group_no_one"/> <field name="date_end" groups="base.group_no_one"/> <field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/> @@ -661,7 +641,7 @@ <field name="res_model">project.task</field> <field name="view_type">form</field> <field name="view_mode">tree,form,calendar,graph,kanban</field> - <field name="domain">[('date_deadline','<',time.strftime('%Y-%m-%d')),('state','in',('draft','pending','open'))]</field> + <field name="domain">[('date_deadline','<',time.strftime('%Y-%m-%d'))]</field> <field name="filter" eval="True"/> <field name="search_view_id" ref="view_task_search_form"/> </record> @@ -706,7 +686,6 @@ <field name="case_default"/> </group> <group> - <field name="state"/> <field name="sequence"/> <field name="fold"/> </group> @@ -723,7 +702,7 @@ <tree string="Task Stage"> <field name="sequence" widget="handle"/> <field name="name"/> - <field name="state"/> + <field name="fold"/> </tree> </field> </record> @@ -767,7 +746,9 @@ </record> <!-- User Form --> - <act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" domain="[('state', '<>', 'cancelled'),('state', '<>', 'done')]" id="act_res_users_2_project_task_opened" name="Assigned Tasks" res_model="project.task" src_model="res.users" view_mode="tree,form,gantt,calendar,graph" view_type="form"/> + <act_window context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" + id="act_res_users_2_project_task_opened" name="Assigned Tasks" + res_model="project.task" src_model="res.users" view_mode="tree,form,gantt,calendar,graph" view_type="form"/> <!-- Tags --> <record model="ir.ui.view" id="project_category_search_view"> diff --git a/addons/project/report/project_cumulative.xml b/addons/project/report/project_cumulative.xml index 17e059c8de7..9b9490f0b28 100644 --- a/addons/project/report/project_cumulative.xml +++ b/addons/project/report/project_cumulative.xml @@ -14,7 +14,6 @@ <field name="user_id"/> <field name="remaining_hours"/> <field name="kanban_state"/> - <field name="state" groups="base.group_no_one"/> </tree> </field> </record> @@ -40,8 +39,7 @@ <field name="date"/> <field name="project_id"/> <field name="user_id"/> - <filter name="open" string="In Progress Tasks" domain="[('state','in',('open','draft'))]"/> - <filter string="Pending Tasks" domain="[('state','=','pending')]" context="{'show_delegated':False}"/> + <filter name="new" string="New" domain="[('type_id.sequence', '=', 1)]"/> <separator/> <filter name="kanban_blocked" string="Blocked" domain="[('kanban_state','=','blocked')]"/> <filter name="kanban_ready" string="Ready" domain="[('kanban_state','=','done')]"/> diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 006aae1085c..15b26507ff3 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -19,9 +19,10 @@ # ############################################################################## -from openerp.osv import fields,osv +from openerp.osv import fields, osv from openerp import tools + class report_project_task_user(osv.osv): _name = "report.project.task.user" _description = "Tasks by user and project" @@ -31,10 +32,11 @@ class report_project_task_user(osv.osv): 'day': fields.char('Day', size=128, readonly=True), 'year': fields.char('Year', size=64, required=False, readonly=True), 'user_id': fields.many2one('res.users', 'Assigned To', readonly=True), - 'date_start': fields.date('Starting Date',readonly=True), + 'date_start': fields.date('Assignation Date', readonly=True), 'no_of_days': fields.integer('# of Days', size=128, readonly=True), 'date_end': fields.date('Ending Date', readonly=True), 'date_deadline': fields.date('Deadline', readonly=True), + 'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'project_id': fields.many2one('project.project', 'Project', readonly=True), 'hours_planned': fields.float('Planned Hours', readonly=True), 'hours_effective': fields.float('Effective Hours', readonly=True), @@ -44,16 +46,17 @@ class report_project_task_user(osv.osv): 'total_hours': fields.float('Total Hours', readonly=True), 'closing_days': fields.float('Days to Close', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the task"), - 'opening_days': fields.float('Days to Open', digits=(16,2), readonly=True, group_operator="avg", + 'opening_days': fields.float('Days to Assign', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to Open the task"), 'delay_endings_days': fields.float('Overpassed Deadline', digits=(16,2), readonly=True), 'nbr': fields.integer('# of tasks', readonly=True), - 'priority' : fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Urgent'), -('0','Very urgent')], 'Priority', readonly=True), - 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month', readonly=True), + 'priority': fields.selection([('4', 'Very Low'), ('3', 'Low'), ('2', 'Medium'), ('1', 'Urgent'), ('0', 'Very urgent')], + string='Priority', readonly=True), + 'month':fields.selection(fields.date.MONTHS, 'Month', readonly=True), 'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')],'Status', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'partner_id': fields.many2one('res.partner', 'Contact', readonly=True), + 'stage_id': fields.many2one('project.task.type', 'Stage'), } _order = 'name desc, project_id' @@ -69,19 +72,19 @@ class report_project_task_user(osv.osv): to_char(date_start, 'YYYY-MM-DD') as day, date_trunc('day',t.date_start) as date_start, date_trunc('day',t.date_end) as date_end, + date_trunc('day',t.date_last_stage_update) as date_last_stage_update, to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_deadline, -- sum(cast(to_char(date_trunc('day',t.date_end) - date_trunc('day',t.date_start),'DD') as int)) as no_of_days, abs((extract('epoch' from (t.date_end-t.date_start)))/(3600*24)) as no_of_days, t.user_id, progress as progress, t.project_id, - t.state, t.effective_hours as hours_effective, t.priority, t.name as name, t.company_id, t.partner_id, - t.stage_id, + t.stage_id as stage_id, remaining_hours as remaining_hours, total_hours as total_hours, t.delay_hours as hours_delay, @@ -106,15 +109,12 @@ class report_project_task_user(osv.osv): date_start, date_end, date_deadline, + date_last_stage_update, t.user_id, t.project_id, - t.state, t.priority, name, t.company_id, t.partner_id, - t.stage_id - + stage_id """) - - diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index d9650e165ce..d5638e332a4 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -13,11 +13,12 @@ <tree string="Tasks Analysis" create="false"> <field name="name" invisible="1"/> <field name="project_id" invisible="1"/> + <field name="stage_id" invisible="1"/> <field name="user_id" invisible="1"/> <field name="date_deadline" invisible="1"/> - <field name="state" invisible="1"/> <field name="date_start" invisible="1"/> <field name="date_end" invisible="1"/> + <field name="date_last_stage_update" invisible="1"/> <field name="company_id" invisible="1" groups="base.group_multi_company"/> <field name="partner_id" invisible="1"/> <field name="day" invisible="1"/> @@ -44,7 +45,7 @@ <field name="arch" type="xml"> <graph string="Tasks Analysis" type="bar"> <field name="name"/> - <field name="state" group="True"/> + <field name="stage_id" group="True"/> <field name="no_of_days" operator="+"/> </graph> </field> @@ -58,31 +59,29 @@ <field name="date_start"/> <field name="date_end"/> <field name="date_deadline"/> - <filter string="New" icon="terp-document-new" domain="[('state','=','draft')]" help = "New tasks"/> - <filter string="In progress" icon="terp-check" domain="[('state', '=' ,'open')]" help = "In progress tasks"/> - <filter string="Pending" icon="terp-gtk-media-pause" domain="[('state','=','pending')]" help = "Pending tasks"/> - <filter string="Done" icon="terp-dialog-close" name="done" domain="[('state','=','done')]"/> - <separator/> - <filter icon="terp-folder-violet" string="My Projects" help="My Projects" domain="[('project_id.user_id','=',uid)]"/> - <separator/> - <filter icon="terp-personal" string="My Task" help = "My tasks" domain="[('user_id','=',uid)]" /> - <filter icon="terp-personal-" string="Non Assigned Tasks to users" help="Non Assigned Tasks to users" domain="[('user_id','=',False)]"/> + <field name="date_last_stage_update"/> <field name="project_id"/> <field name="user_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> + <field name="stage_id"/> + <filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/> + <filter string="New" name="new" domain="[('stage_id.sequence', '=', 1)]"/> + <separator/> + <filter string="My Task" domain="[('user_id','=',uid)]" /> <group expand="0" string="Extended Filters..."> <field name="priority"/> <field name="company_id" groups="base.group_multi_company"/> </group> <group expand="1" string="Group By..."> - <filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}"/> - <filter string="Task" icon="terp-stock_align_left_24" context="{'group_by':'name'}" /> - <filter string="Contact" icon="terp-partner" context="{'group_by':'partner_id'}" /> - <filter string="Assigned to" name="User" icon="terp-personal" context="{'group_by':'user_id'}" /> - <filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> - <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Creation Date"/> - <filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Creation Date"/> - <filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Creation Date"/> + <filter string="Project" name="project" context="{'group_by':'project_id'}"/> + <filter string="Task" context="{'group_by':'name'}" /> + <filter string="Contact" context="{'group_by':'partner_id'}" /> + <filter string="Assigned to" name="User" context="{'group_by':'user_id'}" /> + <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/> + <filter string="Day" context="{'group_by':'day'}" help="Creation Date"/> + <filter string="Month" context="{'group_by':'month'}" help="Creation Date"/> + <filter string="Year" context="{'group_by':'year'}" help="Creation Date"/> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" help="Last Stage Update"/> </group> </search> </field> diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv index a76faa0fcce..c88fb276fcb 100644 --- a/addons/project/security/ir.model.access.csv +++ b/addons/project/security/ir.model.access.csv @@ -19,6 +19,7 @@ access_project_task_history,project.task.history project,project.model_project_t access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_manager,1,0,0,0
access_project_task_history_cumulative,project.task.history project,project.model_project_task_history_cumulative,project.group_project_user,1,0,0,0
access_resource_calendar,project.resource_calendar manager,resource.model_resource_calendar,project.group_project_manager,1,0,0,0
+access_resource_calendar_leaves_user,resource.calendar.leaves user,resource.model_resource_calendar_leaves,project.group_project_user,1,1,1,1
access_project_category,project.project_category,model_project_category,,1,0,0,0
access_project_category_manager,project.project_category,model_project_category,project.group_project_manager,1,1,1,1
access_mail_alias,mail.alias,mail.model_mail_alias,project.group_project_manager,1,1,1,1
diff --git a/addons/project/static/description/index.html b/addons/project/static/description/index.html index 93f1be8a41d..2a1574c5d68 100644 --- a/addons/project/static/description/index.html +++ b/addons/project/static/description/index.html @@ -17,7 +17,7 @@ work done. Keep track of everything, from the big picture to the minute details, from the customer contract to the billing. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=project" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> diff --git a/addons/project/test/project_demo.yml b/addons/project/test/project_demo.yml deleted file mode 100644 index 5f6acbb913e..00000000000 --- a/addons/project/test/project_demo.yml +++ /dev/null @@ -1,12 +0,0 @@ -- - !record {model: project.project, id: project_project_1, view: False}: - partner_id: base.res_partner_2 -- - !record {model: project.task, id: project_task_1, view: False}: - remaining_hours: 10.00 -- - !record {model: project.task, id: project_task_1, view: False}: - planned_hours: 10.00 -- - !record {model: project.task, id: project_task_1, view: False}: - project_id: project_project_1
\ No newline at end of file diff --git a/addons/project/test/project_process.yml b/addons/project/test/project_process.yml deleted file mode 100644 index c2a5c072e9d..00000000000 --- a/addons/project/test/project_process.yml +++ /dev/null @@ -1,70 +0,0 @@ -- - In order to Test Process of Project Management, -- - I create duplicate template. -- - !python {model: project.project}: | - new_template = self.duplicate_template(cr, uid, [ref("project_project_1")]) - assert new_template, "duplicate template is not created" - template = self.browse(cr, uid, new_template['res_id'], context=context) - assert template.state == 'open', "Duplicate template must be in open state." -- - I convert template into real Project. -- - !python {model: project.project}: | - self.reset_project(cr, uid, [ref("project_project_1")]) -- - I check project details after convert from template. -- - !assert {model: project.project, id: project_project_1, severity: error, string: Project should be active}: - - state == "open" -- - I put project in pending. -- - !python {model: project.project}: | - self.set_pending(cr, uid, [ref("project_project_1")]) -- - I check state after put in pending. -- - !assert {model: project.project, id: project_project_1, severity: error, string: Project should be in pending state}: - - state == "pending" -- - I re-open the project. -- - !python {model: project.project}: | - self.set_open(cr, uid, [ref("project_project_1")]) -- - I check state after reopen. -- - !assert {model: project.project, id: project_project_1, severity: error, string: Project should be open.}: - - state == "open" -- - I close the project. -- - !python {model: project.project}: | - self.set_done(cr, uid, [ref("project_project_1")]) -- - I check state after closed. -- - !assert {model: project.project, id: project_project_1, severity: error, string: Project should be close.}: - - state == "close" -- - I set project into template. -- - !python {model: project.project}: | - self.set_template(cr, uid, [ref("project_project_1")]) -- - I schedule tasks of project. -- - !python {model: project.project}: | - self.schedule_tasks(cr, uid, [ref("project_project_1")], context=context) -- - I copy the tasks of project. -- - !python {model: project.project}: | - self.copy(cr, uid, ref("project_project_1")) -- - I cancel Project. -- - !python {model: project.project}: | - self.set_cancel(cr, uid, [ref("project_project_2")]) diff --git a/addons/project/test/task_process.yml b/addons/project/test/task_process.yml deleted file mode 100644 index e37b2116714..00000000000 --- a/addons/project/test/task_process.yml +++ /dev/null @@ -1,76 +0,0 @@ -- - I put task in pending due to specification is not clear. -- - !python {model: project.task}: | - self.do_pending(cr, uid, [ref("project_task_1")]) - context.update({"active_id": ref("project_task_1")}) -- - I check state of task after put in pending. -- - !assert {model: project.task, id: project_task_1, severity: error, string: task should be in pending state}: - - state == "pending" -- - !record {model: project.task.delegate, id: delegate_id}: - user_id: base.user_demo - planned_hours: 12.0 - planned_hours_me: 2.0 -- - Now I delegate task to team member. -- - !python {model: project.task.delegate}: | - self.delegate(cr, uid, [ref("delegate_id")], {"active_id": ref("project_task_1")}) -- - I check delegated task details. -- - !python {model: project.task}: | - task = self.browse(cr, uid, ref("project_task_1"), context=context) - assert task.planned_hours == 2.0, "Planning hours is not correct after delegated." - assert task.state == "pending", "Task should be in Pending after delegated." -- - I re-open the task. -- - !python {model: project.task}: | - self.do_reopen(cr, uid, [ref("project_task_1")]) -- - I check reopened task details. -- - !assert {model: project.task, id: project_task_1, severity: error, string: task should be open.}: - - state == "open" -- - I change the stage of task to next stage. -- - !python {model: project.task}: | - self.stage_next(cr, uid, [ref("project_task_1")]) -- - !record {model: project.task.reevaluate, id: reevaluate_id}: - remaining_hours : 120 -- - I reevaluate task with remaining hours. -- - !python {model: project.task.reevaluate}: | - self.compute_hours(cr, uid, [ref("reevaluate_id")], {"active_id": ref("project_task_1")}) -- - I check remaining hours after reevaluated task. -- - !assert {model: project.task, id: project_task_1, severity: error, string: task should be reevaluated}: - - remaining_hours == 120.0 -- - I close the task. -- - !python {model: project.task}: | - self.action_close(cr, uid, [ref("project_task_1")]) -- - I check state after closed. -- - !assert {model: project.task, id: project_task_1, severity: error, string: task is in open state}: - - state == "done" -- - I change the stage of task to previous stage. -- - !python {model: project.task}: | - self.stage_previous(cr, uid, [ref("project_task_1")]) -- - I cancel Task. -- - !python {model: project.task}: | - self.do_cancel(cr, uid, [ref("project_task_2")]) diff --git a/addons/project/tests/__init__.py b/addons/project/tests/__init__.py new file mode 100644 index 00000000000..4d3163d6dc6 --- /dev/null +++ b/addons/project/tests/__init__.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://www.openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from . import test_project_flow + +checks = [ + test_project_flow, +] + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/tests/test_project_base.py b/addons/project/tests/test_project_base.py new file mode 100644 index 00000000000..f82561766fe --- /dev/null +++ b/addons/project/tests/test_project_base.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://www.openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.addons.mail.tests.test_mail_base import TestMailBase + + +class TestProjectBase(TestMailBase): + + def setUp(self): + super(TestProjectBase, self).setUp() + cr, uid = self.cr, self.uid + + # Usefull models + self.project_project = self.registry('project.project') + self.project_task = self.registry('project.task') + self.project_task_delegate = self.registry('project.task.delegate') + + # Find Project User group + group_project_user_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'project', 'group_project_user') + self.group_project_user_id = group_project_user_ref and group_project_user_ref[1] or False + + # Find Project Manager group + group_project_manager_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'project', 'group_project_manager') + self.group_project_manager_id = group_project_manager_ref and group_project_manager_ref[1] or False + + # Test partners to use through the various tests + self.project_partner_id = self.res_partner.create(cr, uid, { + 'name': 'Gertrude AgrolaitPartner', + 'email': 'gertrude.partner@agrolait.com', + }) + self.email_partner_id = self.res_partner.create(cr, uid, { + 'name': 'Patrick Ratatouille', + 'email': 'patrick.ratatouille@agrolait.com', + }) + + # Test users to use through the various tests + self.user_projectuser_id = self.res_users.create(cr, uid, { + 'name': 'Armande ProjectUser', + 'login': 'Armande', + 'alias_name': 'armande', + 'email': 'armande.projectuser@example.com', + 'groups_id': [(6, 0, [self.group_employee_id, self.group_project_user_id])] + }) + self.user_projectmanager_id = self.res_users.create(cr, uid, { + 'name': 'Bastien ProjectManager', + 'login': 'bastien', + 'alias_name': 'bastien', + 'email': 'bastien.projectmanager@example.com', + 'groups_id': [(6, 0, [self.group_employee_id, self.group_project_manager_id])] + }) + self.user_none_id = self.res_users.create(cr, uid, { + 'name': 'Charlie Avotbonkeur', + 'login': 'charlie', + 'alias_name': 'charlie', + 'email': 'charlie.noone@example.com', + 'groups_id': [(6, 0, [])] + }) + self.user_projectuser = self.res_users.browse(cr, uid, self.user_projectuser_id) + self.user_projectmanager = self.res_users.browse(cr, uid, self.user_projectmanager_id) + self.partner_projectuser_id = self.user_projectuser.partner_id.id + self.partner_projectmanager_id = self.user_projectmanager.partner_id.id + + # Test 'Pigs' project + self.project_pigs_id = self.project_project.create(cr, uid, { + 'name': 'Pigs', + 'privacy_visibility': 'public', + 'alias_name': 'project+pigs', + 'partner_id': self.partner_raoul_id, + }, {'mail_create_nolog': True}) + + # Already-existing tasks in Pigs + self.task_1_id = self.project_task.create(cr, uid, { + 'name': 'Pigs UserTask', + 'user_id': self.user_projectuser_id, + 'project_id': self.project_pigs_id, + }, {'mail_create_nolog': True}) + self.task_2_id = self.project_task.create(cr, uid, { + 'name': 'Pigs ManagerTask', + 'user_id': self.user_projectmanager_id, + 'project_id': self.project_pigs_id, + }, {'mail_create_nolog': True}) diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py new file mode 100644 index 00000000000..a037c92d2ae --- /dev/null +++ b/addons/project/tests/test_project_flow.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://www.openerp.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.addons.project.tests.test_project_base import TestProjectBase +from openerp.osv.orm import except_orm +from openerp.tools import mute_logger + + +EMAIL_TPL = """Return-Path: <whatever-2a840@postmaster.twitter.com> +X-Original-To: {email_to} +Delivered-To: {email_to} +To: {email_to} +Received: by mail1.openerp.com (Postfix, from userid 10002) + id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST) +Message-ID: {msg_id} +Date: Tue, 29 Nov 2011 12:43:21 +0530 +From: {email_from} +MIME-Version: 1.0 +Subject: {subject} +Content-Type: text/plain; charset=ISO-8859-1; format=flowed + +Hello, + +This email should create a new entry in your module. Please check that it +effectively works. + +Thanks, + +-- +Raoul Boitempoils +Integrator at Agrolait""" + + +class TestProjectFlow(TestProjectBase): + + @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') + def test_00_project_process(self): + """ Testing project management """ + cr, uid, user_projectuser_id, user_projectmanager_id, project_pigs_id = self.cr, self.uid, self.user_projectuser_id, self.user_projectmanager_id, self.project_pigs_id + + # ProjectUser: set project as template -> raise + self.assertRaises(except_orm, self.project_project.set_template, cr, user_projectuser_id, [project_pigs_id]) + + # Other tests are done using a ProjectManager + project = self.project_project.browse(cr, user_projectmanager_id, project_pigs_id) + self.assertNotEqual(project.state, 'template', 'project: incorrect state, should not be a template') + + # Set test project as template + self.project_project.set_template(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'template', 'project: set_template: project state should be template') + self.assertEqual(len(project.tasks), 0, 'project: set_template: project tasks should have been set inactive') + + # Duplicate template + new_template_act = self.project_project.duplicate_template(cr, user_projectmanager_id, [project_pigs_id]) + new_project = self.project_project.browse(cr, user_projectmanager_id, new_template_act['res_id']) + self.assertEqual(new_project.state, 'open', 'project: incorrect duplicate_template') + self.assertEqual(len(new_project.tasks), 2, 'project: duplicating a project template should duplicate its tasks') + + # Convert into real project + self.project_project.reset_project(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'open', 'project: resetted project should be in open state') + self.assertEqual(len(project.tasks), 2, 'project: reset_project: project tasks should have been set active') + + # Put as pending + self.project_project.set_pending(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'pending', 'project: should be in pending state') + + # Re-open + self.project_project.set_open(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'open', 'project: reopened project should be in open state') + + # Close project + self.project_project.set_done(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'close', 'project: closed project should be in close state') + + # Re-open + self.project_project.set_open(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + + # Re-convert into a template and schedule tasks + self.project_project.set_template(cr, user_projectmanager_id, [project_pigs_id]) + self.project_project.schedule_tasks(cr, user_projectmanager_id, [project_pigs_id]) + + # Copy the project + new_project_id = self.project_project.copy(cr, user_projectmanager_id, project_pigs_id) + new_project = self.project_project.browse(cr, user_projectmanager_id, new_project_id) + self.assertEqual(len(new_project.tasks), 2, 'project: copied project should have copied task') + + # Cancel the project + self.project_project.set_cancel(cr, user_projectmanager_id, [project_pigs_id]) + self.assertEqual(project.state, 'cancelled', 'project: cancelled project should be in cancel state') + + def test_10_task_process(self): + """ Testing task creation and management """ + cr, uid, user_projectuser_id, user_projectmanager_id, project_pigs_id = self.cr, self.uid, self.user_projectuser_id, self.user_projectmanager_id, self.project_pigs_id + + def format_and_process(template, email_to='project+pigs@mydomain.com, other@gmail.com', subject='Frogs', + email_from='Patrick Ratatouille <patrick.ratatouille@agrolait.com>', + msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>'): + self.assertEqual(self.project_task.search(cr, uid, [('name', '=', subject)]), []) + mail = template.format(email_to=email_to, subject=subject, email_from=email_from, msg_id=msg_id) + self.mail_thread.message_process(cr, uid, None, mail) + return self.project_task.search(cr, uid, [('name', '=', subject)]) + + # Do: incoming mail from an unknown partner on an alias creates a new task 'Frogs' + frogs = format_and_process(EMAIL_TPL) + + # Test: one task created by mailgateway administrator + self.assertEqual(len(frogs), 1, 'project: message_process: a new project.task should have been created') + task = self.project_task.browse(cr, user_projectuser_id, frogs[0]) + res = self.project_task.perm_read(cr, uid, [task.id], details=False) + self.assertEqual(res[0].get('create_uid'), uid, + 'project: message_process: task should have been created by uid as alias_user_id is False on the alias') + # Test: messages + self.assertEqual(len(task.message_ids), 3, + 'project: message_process: newly created task should have 2 messages: creation and email') + self.assertEqual(task.message_ids[2].subtype_id.name, 'Task Created', + 'project: message_process: first message of new task should have Task Created subtype') + self.assertEqual(task.message_ids[1].subtype_id.name, 'Task Assigned', + 'project: message_process: first message of new task should have Task Created subtype') + self.assertEqual(task.message_ids[0].author_id.id, self.email_partner_id, + 'project: message_process: second message should be the one from Agrolait (partner failed)') + self.assertEqual(task.message_ids[0].subject, 'Frogs', + 'project: message_process: second message should be the one from Agrolait (subject failed)') + # Test: task content + self.assertEqual(task.name, 'Frogs', 'project_task: name should be the email subject') + self.assertEqual(task.project_id.id, self.project_pigs_id, 'project_task: incorrect project') + self.assertEqual(task.stage_id.sequence, 1, 'project_task: should have a stage with sequence=1') + + # Open the delegation wizard + delegate_id = self.project_task_delegate.create(cr, user_projectuser_id, { + 'user_id': user_projectuser_id, + 'planned_hours': 12.0, + 'planned_hours_me': 2.0, + }, {'active_id': task.id}) + self.project_task_delegate.delegate(cr, user_projectuser_id, [delegate_id], {'active_id': task.id}) + + # Check delegation details + task.refresh() + self.assertEqual(task.planned_hours, 2, 'project_task_delegate: planned hours is not correct after delegation') diff --git a/addons/project/wizard/__init__.py b/addons/project/wizard/__init__.py index 7a9a734b2bd..24017d9cbe8 100644 --- a/addons/project/wizard/__init__.py +++ b/addons/project/wizard/__init__.py @@ -20,7 +20,5 @@ ############################################################################## import project_task_delegate -import project_task_reevaluate # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/project/wizard/project_task_reevaluate.py b/addons/project/wizard/project_task_reevaluate.py deleted file mode 100644 index eeb8cccc5d2..00000000000 --- a/addons/project/wizard/project_task_reevaluate.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -from lxml import etree -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -class project_task_reevaluate(osv.osv_memory): - _name = 'project.task.reevaluate' - - def _get_remaining(self, cr, uid, context=None): - if context is None: - context = {} - active_id = context.get('active_id', False) - res = False - if active_id: - res = self.pool.get('project.task').browse(cr, uid, active_id, context=context).remaining_hours - return res - - _columns = { - 'remaining_hours' : fields.float('Remaining Hours', digits=(16,2), help="Put here the remaining hours required to close the task."), - } - - _defaults = { - 'remaining_hours': _get_remaining, - } - - def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): - res = super(project_task_reevaluate, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu) - users_pool = self.pool.get('res.users') - time_mode = users_pool.browse(cr, uid, uid, context).company_id.project_time_mode_id - time_mode_name = time_mode and time_mode.name or 'Hours' - if time_mode_name in ['Hours','Hour']: - return res - - eview = etree.fromstring(res['arch']) - - def _check_rec(eview): - if eview.attrib.get('widget','') == 'float_time': - eview.set('widget','float') - for child in eview: - _check_rec(child) - return True - - _check_rec(eview) - - res['arch'] = etree.tostring(eview) - - for field in res['fields']: - if 'Hours' in res['fields'][field]['string']: - res['fields'][field]['string'] = res['fields'][field]['string'].replace('Hours',time_mode_name) - return res - - def compute_hours(self, cr, uid, ids, context=None): - if context is None: - context = {} - data = self.browse(cr, uid, ids, context=context)[0] - task_id = context.get('active_id') - if task_id: - task_pool = self.pool.get('project.task') - task_pool.write(cr, uid, task_id, {'remaining_hours': data.remaining_hours}) - if context.get('button_reactivate'): - task_pool.do_reopen(cr, uid, [task_id], context=context) - return {'type': 'ir.actions.act_window_close'} - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/wizard/project_task_reevaluate_view.xml b/addons/project/wizard/project_task_reevaluate_view.xml deleted file mode 100644 index 6dfe58e8cfd..00000000000 --- a/addons/project/wizard/project_task_reevaluate_view.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <record id="view_project_task_reevaluate" model="ir.ui.view"> - <field name="name">Re-evaluate Task</field> - <field name="model">project.task.reevaluate</field> - <field name="arch" type="xml"> - <form string="Reevaluate Task" version="7.0"> - <separator string="Reevaluation Task"/> - <group> - <field name="remaining_hours" widget="float_time"/> - </group> - <footer> - <button name="compute_hours" string="_Evaluate" type="object" default_focus="1" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </footer> - </form> - </field> - </record> - - <record id="action_project_task_reevaluate" model="ir.actions.act_window"> - <field name="name">Re-evaluate Task</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">project.task.reevaluate</field> - <field name="view_type">form</field> - <field name="view_mode">form</field> - <field name="target">new</field> - </record> - </data> -</openerp> diff --git a/addons/project_gtd/project_gtd_view.xml b/addons/project_gtd/project_gtd_view.xml index 4bfd5b783c7..8335ae35c93 100644 --- a/addons/project_gtd/project_gtd_view.xml +++ b/addons/project_gtd/project_gtd_view.xml @@ -79,7 +79,6 @@ <field name="remaining_hours" position="after"> <field string="Timeframe" name="timebox_id" invisible=" not context.get('gtd', False)"/> <field name="context_id" invisible="not context.get('context_show', False)" widget="selection"/> - <button name="do_reopen" states="done,cancelled" string="Reactivate" type="object" icon="gtk-convert" help="For reopening the tasks" invisible="not context.get('set_visible',False)"/> </field> </field> </record> @@ -103,16 +102,17 @@ <field name="arch" type="xml"> <search string="My Tasks"> <field name="name" string="My Tasks"/> - <filter name="open" string="In Progress" domain="[('state','in',('draft','open'))]" help="In Progress and draft tasks" icon="terp-camera_test"/> - <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/> + <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> - <filter name="message_unread" string="Unread Messages" domain="[('message_unread','=',True)]"/> - <separator/> - <filter string="Inbox" domain="[('timebox_id','=', False)]" help="Tasks having no timebox assigned yet"/> + <filter string="No Timebox" domain="[('timebox_id', '=', False)]" help="Tasks having no timebox assigned yet"/> <group expand="0" string="Display"> <filter string="Show Context" name="context_show" context="{'context_show': True}" domain="[]" icon="terp-camera_test" help="Show the context field"/> <filter string="Show Deadlines" context="{'deadline_visible': False}" domain="[]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/> </group> + <group expand="0" string="Group By..."> + <filter string="Stage" name="group_stage_id" context="{'group_by':'stage_id'}"/> + <filter string="Timebox" name="group_timebox_id" context="{'group_by':'timebox_id'}"/> + </group> </search> </field> </record> diff --git a/addons/project_gtd/wizard/project_gtd_empty.py b/addons/project_gtd/wizard/project_gtd_empty.py index 3233e2534af..b477c12567a 100644 --- a/addons/project_gtd/wizard/project_gtd_empty.py +++ b/addons/project_gtd/wizard/project_gtd_empty.py @@ -52,7 +52,7 @@ class project_timebox_empty(osv.osv_memory): raise osv.except_osv(_('Error!'), _('No timebox child of this one!')) tids = obj_task.search(cr, uid, [('timebox_id', '=', context['active_id'])]) for task in obj_task.browse(cr, uid, tids, context): - if (task.state in ('cancel','done')) or (task.user_id.id <> uid): + if (task.stage_id and task.stage_id.fold) or (task.user_id.id <> uid): close.append(task.id) else: up.append(task.id) diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py index 2c5f311c044..d41144253dd 100644 --- a/addons/project_issue/__openerp__.py +++ b/addons/project_issue/__openerp__.py @@ -55,7 +55,6 @@ It allows the manager to quickly check the issues, assign them and decide on the 'test': [ 'test/subscribe_issue.yml', 'test/issue_process.yml', - 'test/cancel_issue.yml', 'test/issue_demo.yml' ], 'installable': True, diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml index d7574042c37..6eb48f5572d 100644 --- a/addons/project_issue/board_project_issue_view.xml +++ b/addons/project_issue/board_project_issue_view.xml @@ -6,7 +6,7 @@ <field name="name">Project Issue Board Tree</field> <field name="model">project.issue</field> <field name="arch" type="xml"> - <tree string="Issue Tracker Tree" colors="black:state=='open';blue:state=='pending';grey:state in ('cancel', 'done')"> + <tree string="Issue Tracker Tree"> <field name="id"/> <field name="create_date"/> <field name="name"/> @@ -16,7 +16,6 @@ <field name="version_id" widget="selection"/> <field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/> <field name="stage_id" widget="selection" readonly="1"/> - <field name="state" invisible="1"/> <field name="categ_ids" invisible="1"/> <field name="task_id" invisible="1"/> </tree> @@ -28,7 +27,7 @@ <field name="res_model">project.issue</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="domain">[('state','not in',('cancel','done')),('user_id','=',uid)]</field> + <field name="domain">[('user_id', '=', uid)]</field> <field name="view_id" ref="project_issue_board_tree_view"/> </record> diff --git a/addons/project_issue/doc/changelog.rst b/addons/project_issue/doc/changelog.rst new file mode 100644 index 00000000000..e74516f1600 --- /dev/null +++ b/addons/project_issue/doc/changelog.rst @@ -0,0 +1,13 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-2)` +---------------- + +- Stage/state update + + - ``project.issue``: removed inheritance from ``base_stage`` class and removed + ``state`` field. Added ``date_last_stage_update`` field holding last stage_id + modification. Updated reports. diff --git a/addons/project_issue/doc/index.rst b/addons/project_issue/doc/index.rst new file mode 100644 index 00000000000..9e12eef2124 --- /dev/null +++ b/addons/project_issue/doc/index.rst @@ -0,0 +1,22 @@ +===================== +Project Issue DevDoc +===================== + +Project Issue module documentation +=================================== + +Documentation topics +'''''''''''''''''''' + +.. toctree:: + :maxdepth: 1 + + stage_status.rst + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/project_issue/doc/stage_status.rst b/addons/project_issue/doc/stage_status.rst new file mode 100644 index 00000000000..6afd4508cd9 --- /dev/null +++ b/addons/project_issue/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 project.issue objects. The ``state`` +field has been totally removed and replaced by stages, using ``stage_id``. The +following models are impacted: + + - ``project.issue`` now use only stages. However a convention still exists about + 'New' stage. An issue is consdered as ``new`` when it has the following + properties: + + - ``stage_id and stage_id.sequence = 1`` + + - ``project.task.type`` do not have any ``state`` field anymore. + - ``project.issue.report`` do not have any ``state`` field anymore. + +By default a newly created issue is 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. + +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. + +``project.issue.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 ``project.issue``: + + - ``mt_issue_new``: new tasks. Condition: ``obj.stage_id and obj.stage_id.sequence == 1`` + - ``mt_issue_stage``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1`` + - ``mt_issue_assigned``: user assigned. condition: ``obj.user_id and obj.user_id.id`` + - ``mt_issue_blocked``: kanban state blocked. Condition: ``obj.kanban_state == 'blocked'`` + +Those subtypes are also available on the ``project.project`` model and are used +for the auto subscription. diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index a69d9356002..30ca08c0ae7 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -19,19 +19,16 @@ # ############################################################################## +from datetime import datetime + from openerp import SUPERUSER_ID -from openerp.addons.base_status.base_stage import base_stage -from openerp.addons.project.project import _TASK_STATE +from openerp import tools from openerp.addons.crm import crm -from datetime import datetime from openerp.osv import fields, osv, orm -from openerp.tools.translate import _ -import binascii -import time -from openerp import tools from openerp.tools import html2plaintext +from openerp.tools.translate import _ -class project_issue_version(osv.osv): +class project_issue_version(osv.Model): _name = "project.issue.version" _order = "name desc" _columns = { @@ -42,37 +39,33 @@ class project_issue_version(osv.osv): 'active': 1, } -class project_issue(base_stage, osv.osv): +class project_issue(osv.Model): _name = "project.issue" _description = "Project Issue" _order = "priority, create_date desc" _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { - 'state': { - 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj.state in ['new', 'draft'], - 'project_issue.mt_issue_closed': lambda self, cr, uid, obj, ctx=None: obj.state == 'done', - 'project_issue.mt_issue_started': lambda self, cr, uid, obj, ctx=None: obj.state == 'open', - }, 'stage_id': { - 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj.state not in ['new', 'draft', 'done', 'open'], + 'project_issue.mt_issue_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1, + 'project_issue.mt_issue_stage': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence != 1, + }, + 'user_id': { + 'project_issue.mt_issue_assigned': lambda self, cr, uid, obj, ctx=None: obj.user_id and obj.user_id.id, }, 'kanban_state': { 'project_issue.mt_issue_blocked': lambda self, cr, uid, obj, ctx=None: obj.kanban_state == 'blocked', }, } - 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('project_id'): - ctx['default_project_id'] = vals['project_id'] - 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(project_issue, self).create(cr, uid, vals, context=create_context) + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return project.partner_id.id + return False def _get_default_project_id(self, cr, uid, context=None): """ Gives default project by checking if present in the context """ @@ -81,7 +74,7 @@ class project_issue(base_stage, osv.osv): def _get_default_stage_id(self, cr, uid, context=None): """ Gives default stage_id """ project_id = self._get_default_project_id(cr, uid, context=context) - return self.stage_find(cr, uid, [], project_id, [('state', '=', 'draft')], context=context) + return self.stage_find(cr, uid, [], project_id, [('sequence', '=', 1)], context=context) def _resolve_project_id_from_context(self, cr, uid, context=None): """ Returns ID of project based on the value of 'default_project_id' @@ -215,6 +208,10 @@ class project_issue(base_stage, osv.osv): return res def on_change_project(self, cr, uid, ids, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} def _get_issue_task(self, cr, uid, ids, context=None): @@ -247,13 +244,6 @@ class project_issue(base_stage, osv.osv): 'partner_id': fields.many2one('res.partner', 'Contact', select=1), 'company_id': fields.many2one('res.company', 'Company'), 'description': fields.text('Private Note'), - 'state': fields.related('stage_id', 'state', type="selection", store=True, - selection=_TASK_STATE, 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\'.'), 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', track_visibility='onchange', help="A Issue's kanban state indicates special situations affecting it:\n" @@ -267,6 +257,7 @@ class project_issue(base_stage, osv.osv): # Project Issue fields 'date_closed': fields.datetime('Closed', readonly=True,select=True), 'date': fields.datetime('Date'), + 'date_last_stage_update': fields.datetime('Last Stage Update', select=True), 'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel."), 'categ_ids': fields.many2many('project.category', string='Tags'), 'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True), @@ -302,13 +293,12 @@ class project_issue(base_stage, osv.osv): _defaults = { 'active': 1, - '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), '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.helpdesk', context=c), 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'kanban_state': 'normal', + 'date_last_stage_update': fields.datetime.now(), + 'user_id': lambda obj, cr, uid, context: uid, } _group_by_full = { @@ -361,7 +351,7 @@ class project_issue(base_stage, osv.osv): }) vals = { 'task_id': new_task_id, - 'stage_id': self.stage_find(cr, uid, [bug], bug.project_id.id, [('state', '=', 'pending')], context=context), + 'stage_id': self.stage_find(cr, uid, [bug], bug.project_id.id, [('sequence', '=', 1)], context=context), } message = _("Project issue <b>converted</b> to task.") self.message_post(cr, uid, [bug.id], body=message, context=context) @@ -389,19 +379,23 @@ class project_issue(base_stage, osv.osv): return super(project_issue, self).copy(cr, uid, id, default=default, context=context) + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + + # context: no_log, because subtype already handle this + create_context = dict(context, mail_create_nolog=True) + return super(project_issue, self).create(cr, uid, vals, context=create_context) + def write(self, cr, uid, ids, vals, context=None): - - #Update last action date every time the user changes the stage + # stage change: update date_last_stage_update if 'stage_id' in vals: - vals['date_action_last'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT) - state = self.pool.get('project.task.type').browse(cr, uid, vals['stage_id'], context=context).state - for issue in self.browse(cr, uid, ids, context=context): - # Change from draft to not draft EXCEPT cancelled: The issue has been opened -> set the opening date - if issue.state == 'draft' and state not in ('draft', 'cancelled'): - vals['date_open'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT) - # Change from not done to done: The issue has been closed -> set the closing date - if issue.state != 'done' and state == 'done': - vals['date_closed'] = time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT) + 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() return super(project_issue, self).write(cr, uid, ids, vals, context) @@ -411,13 +405,6 @@ class project_issue(base_stage, osv.osv): task = self.pool.get('project.task').browse(cr, uid, task_id, context=context) return {'value': {'user_id': task.user_id.id, }} - def case_reset(self, cr, uid, ids, context=None): - """Resets case as draft - """ - res = super(project_issue, self).case_reset(cr, uid, ids, context) - self.write(cr, uid, ids, {'date_open': False, 'date_closed': False}) - return res - def get_empty_list_help(self, cr, uid, help, context=None): context['empty_list_help_model'] = 'project.project' context['empty_list_help_id'] = context.get('default_project_id') @@ -466,11 +453,6 @@ class project_issue(base_stage, osv.osv): return stage_ids[0] return False - def case_cancel(self, cr, uid, ids, context=None): - """ Cancels case """ - self.case_set(cr, uid, ids, 'cancelled', {'active': True}, context=context) - return True - def case_escalate(self, cr, uid, ids, context=None): cases = self.browse(cr, uid, ids) for case in cases: @@ -579,7 +561,7 @@ class project_issue(base_stage, osv.osv): context = {} res = super(project_issue, self).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) if thread_id and subtype: - self.write(cr, SUPERUSER_ID, thread_id, {'date_action_last': time.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)}, context=context) + self.write(cr, SUPERUSER_ID, thread_id, {'date_action_last': fields.datetime.now()}, context=context) return res @@ -593,7 +575,7 @@ class project(osv.Model): res = dict.fromkeys(ids, 0) issue_ids = self.pool.get('project.issue').search(cr, uid, [('project_id', 'in', ids)]) for issue in self.pool.get('project.issue').browse(cr, uid, issue_ids, context): - if issue.state not in ('done', 'cancelled'): + if issue.stage_id and not issue.stage_id.fold: res[issue.project_id.id] += 1 return res diff --git a/addons/project_issue/project_issue_data.xml b/addons/project_issue/project_issue_data.xml index 2e43ca69193..25a336d4094 100644 --- a/addons/project_issue/project_issue_data.xml +++ b/addons/project_issue/project_issue_data.xml @@ -35,11 +35,11 @@ Access all issues from the top Project menu, and access the issues of a specific <field name="default" eval="False"/> <field name="description">Issue created</field> </record> - <record id="mt_issue_started" model="mail.message.subtype"> - <field name="name">Issue Started</field> + <record id="mt_issue_assigned" model="mail.message.subtype"> + <field name="name">Issue Assigned</field> <field name="res_model">project.issue</field> <field name="default" eval="False"/> - <field name="description">Issue started</field> + <field name="description">Issue assigned</field> </record> <record id="mt_issue_blocked" model="mail.message.subtype"> <field name="name">Issue Blocked</field> @@ -47,12 +47,6 @@ Access all issues from the top Project menu, and access the issues of a specific <field name="default" eval="False"/> <field name="description">Issue blocked</field> </record> - <record id="mt_issue_closed" model="mail.message.subtype"> - <field name="name">Issue Closed</field> - <field name="res_model">project.issue</field> - <field name="default" eval="False"/> - <field name="description">Issue closed</field> - </record> <record id="mt_issue_stage" model="mail.message.subtype"> <field name="name">Stage Changed</field> <field name="res_model">project.issue</field> @@ -67,11 +61,11 @@ Access all issues from the top Project menu, and access the issues of a specific <field name="parent_id" eval="ref('mt_issue_new')"/> <field name="relation_field">project_id</field> </record> - <record id="mt_project_issue_started" model="mail.message.subtype"> - <field name="name">Issue Started</field> + <record id="mt_project_issue_assigned" model="mail.message.subtype"> + <field name="name">Issue Assigned</field> <field name="res_model">project.project</field> <field name="default" eval="False"/> - <field name="parent_id" eval="ref('mt_issue_started')"/> + <field name="parent_id" eval="ref('mt_issue_assigned')"/> <field name="relation_field">project_id</field> </record> <record id="mt_project_issue_blocked" model="mail.message.subtype"> @@ -80,12 +74,6 @@ Access all issues from the top Project menu, and access the issues of a specific <field name="parent_id" eval="ref('mt_issue_blocked')"/> <field name="relation_field">project_id</field> </record> - <record id="mt_project_issue_closed" model="mail.message.subtype"> - <field name="name">Issue Closed</field> - <field name="res_model">project.project</field> - <field name="parent_id" eval="ref('mt_issue_closed')"/> - <field name="relation_field">project_id</field> - </record> <record id="mt_project_issue_stage" model="mail.message.subtype"> <field name="name">Issue Stage Changed</field> <field name="res_model">project.project</field> diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index da3034c72f5..1fbea33f3df 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -48,12 +48,6 @@ <field name="arch" type="xml"> <form string="Issue" version="7.0"> <header> - <button name="case_close" string="Done" type="object" - states="open" groups="base.group_user"/> - <button name="case_close" string="Done" type="object" - states="draft,pending" groups="base.group_user"/> - <button name="case_cancel" string="Cancel Issue" type="object" - states="draft,open,pending" groups="base.group_user"/> <field name="stage_id" widget="statusbar" clickable="True"/> </header> <sheet string="Issue"> @@ -76,7 +70,7 @@ <label for="project_id"/> <div> <field name="project_id" on_change="on_change_project(project_id)" class="oe_inline" context="{'default_use_issues':1}"/> - <button name="case_escalate" string="⇒ Escalate" type="object" states="draft,open,pending" class="oe_link" + <button name="case_escalate" string="⇒ Escalate" type="object" class="oe_link" groups="base.group_user"/> </div> </group> @@ -106,7 +100,6 @@ </group> <group string="Status" groups="base.group_no_one"> <field name="active"/> - <field name="state" string="Status"/> </group> </page> </notebook> @@ -123,7 +116,7 @@ <field name="name">Project Issue Tracker Tree</field> <field name="model">project.issue</field> <field name="arch" type="xml"> - <tree string="Issue Tracker Tree" fonts="bold:message_unread==True" colors="black:state=='open';blue:state=='pending';grey:state in ('cancel', 'done')"> + <tree string="Issue Tracker Tree" fonts="bold:message_unread==True"> <field name="message_unread" invisible="1"/> <field name="id"/> <field name="name"/> @@ -135,7 +128,6 @@ <field name="user_id"/> <field name="progress" widget="progressbar" attrs="{'invisible':[('task_id','=',False)]}"/> <field name="stage_id" widget="selection" readonly="1"/> - <field name="state" invisible="1"/> <field name="categ_ids" invisible="1"/> <field name="task_id" invisible="1"/> </tree> @@ -149,17 +141,16 @@ <search string="Issue Tracker Search"> <field name="name" string="Issue" filter_domain="['|', '|', '|', ('partner_id','child_of',self), ('description','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/> <field name="id"/> - <filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> - <separator/> - <filter name="filter_new" string="New" icon="terp-document-new" domain="[('state','=','draft')]" help="New Issues"/> - <filter name="filter_open" string="To Do" domain="[('state','=','open')]" help="To Do Issues" icon="terp-check"/> + <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> + <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/> + <filter string="New" name="draft" domain="[('stage_id.sequence', '=', 1)]"/> <separator/> - <filter string="Unassigned Issues" domain="[('user_id','=',False)]" help="Unassigned Issues" icon="terp-personal-"/> + <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/> <separator/> <field name="user_id"/> <field name="project_id"/> <field name="categ_ids"/> - <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> + <field name="stage_id" domain="[]"/> <group expand="0" string="Group By..." > <filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> <filter string="Contact" name="group_partner_id" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/> @@ -269,7 +260,7 @@ <field name="name">Project Issue- Feature Tracker Tree</field> <field name="model">project.issue</field> <field name="arch" type="xml"> - <tree string="Feature Tracker Tree" fonts="bold:message_unread==True" colors="red:state=='open';black:state in ('draft', 'cancel','done','pending')"> + <tree string="Feature Tracker Tree" fonts="bold:message_unread==True"> <field name="id"/> <field name="message_unread" invisible="1"/> <field name="name" string="Feature description"/> @@ -278,7 +269,6 @@ <field name="version_id"/> <field name="user_id"/> <field name="stage_id" widget="selection" readonly="1"/> - <field name="state" groups="base.group_no_one"/> </tree> </field> </record> diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 5cca0ff8689..5f59b51f290 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -20,17 +20,10 @@ # ############################################################################## -from openerp.osv import fields,osv +from openerp.osv import fields, osv from openerp import tools from openerp.addons.crm import crm -AVAILABLE_STATES = [ - ('draft','Draft'), - ('open','Open'), - ('cancel', 'Cancelled'), - ('done', 'Closed'), - ('pending','Pending') -] class project_issue_report(osv.osv): _name = "project.issue.report" _auto = False @@ -38,18 +31,13 @@ class project_issue_report(osv.osv): _columns = { 'name': fields.char('Year', size=64, required=False, readonly=True), 'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True), - 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True), - 'month':fields.selection([('01', 'January'), ('02', 'February'), \ - ('03', 'March'), ('04', 'April'),\ - ('05', 'May'), ('06', 'June'), \ - ('07', 'July'), ('08', 'August'),\ - ('09', 'September'), ('10', 'October'),\ - ('11', 'November'), ('12', 'December')], 'Month', readonly=True), + 'month':fields.selection(fields.date.MONTHS, 'Month', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'day': fields.char('Day', size=128, readonly=True), 'opening_date': fields.date('Date of Opening', readonly=True), 'creation_date': fields.date('Creation Date', readonly=True), 'date_closed': fields.date('Date of Closing', readonly=True), + 'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'stage_id': fields.many2one('project.task.type', 'Stage'), 'nbr': fields.integer('# of Issues', readonly=True), 'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"), @@ -80,7 +68,7 @@ class project_issue_report(osv.osv): to_char(c.create_date, 'YYYY-MM-DD') as day, to_char(c.date_open, 'YYYY-MM-DD') as opening_date, to_char(c.create_date, 'YYYY-MM-DD') as creation_date, - c.state, + date_trunc('day',c.date_last_stage_update) as date_last_stage_update, c.user_id, c.working_hours_open, c.working_hours_close, diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index a885dcd8a7f..f9ca7168841 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -20,7 +20,7 @@ <field name="partner_id" invisible="1"/> <field name="task_id" invisible="1"/> <field name="date_closed" invisible="1"/> - <field name="state" invisible="1"/> + <field name="date_last_stage_update" invisible="1"/> <field name="day" invisible="1"/> <field name="nbr" string="#Project Issues" sum="#Number of Project Issues"/> <field name="delay_open" avg="Avg Opening Delay"/> @@ -36,9 +36,9 @@ <field name="model">project.issue.report</field> <field name="arch" type="xml"> <graph orientation="horizontal" string="Project Issue" type="bar"> - <field name="state"/> <field name="nbr" operator="+"/> - <field group="True" name="user_id"/> + <field name="user_id" group="True"/> + <field name="stage_id" group="True"/> </graph> </field> </record> @@ -49,14 +49,15 @@ <field name="arch" type="xml"> <search string="Search"> <field name="creation_date"/> - <filter icon="terp-camera_test" string="New" domain="[('state','=','draft')]"/> - <filter icon="terp-check" string="To Do" domain="[('state','=','open')]"/> - <filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]"/> - <filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/> <field name="project_id"/> <field name="user_id"/> <field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/> <field name="version_id"/> + <field name="stage_id"/> + <filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/> + <filter string="New" name="new" domain="[('stage_id.sequence', '=', 1)]"/> + <filter string="Done" name="done" domain="[('stage_id.fold', '=', True)]" + help="Tasks beloging to a folded stage"/> <group expand="1" string="Group By..."> <filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" /> <filter string="Contact" icon="terp-partner" context="{'group_by':'partner_id'}" /> @@ -70,6 +71,7 @@ <filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}" help="Creation Date"/> <filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}" help="Creation Date"/> <filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'name'}" help="Creation Date"/> + <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/> </group> </search> </field> diff --git a/addons/project_issue/test/cancel_issue.yml b/addons/project_issue/test/cancel_issue.yml deleted file mode 100644 index 76ffa212638..00000000000 --- a/addons/project_issue/test/cancel_issue.yml +++ /dev/null @@ -1,60 +0,0 @@ -- - In order to test process of issue tracking in OpenERP, I cancel the unqualified Issue. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' -- - I re-open the Issue. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the state of issue after open it. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in open state}: - - state == 'open' -- - I put the issue in pending state. -- - !python {model: project.issue}: | - self.case_pending(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the state of issue after put it in pending state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in pending state}: - - state == 'pending' -- - I cancel the issue is in pending state. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' -- - I close Issue. -- - !python {model: project.issue}: | - self.case_close(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after close. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in done state}: - - state == 'done' -- - I cancel the issue is in done state. -- - !python {model: project.issue}: | - self.case_cancel(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check the issue is in cancel state. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}: - - state == 'cancelled' diff --git a/addons/project_issue/test/issue_process.yml b/addons/project_issue/test/issue_process.yml index afb68a9b6c2..280df50ebea 100644 --- a/addons/project_issue/test/issue_process.yml +++ b/addons/project_issue/test/issue_process.yml @@ -1,24 +1,4 @@ - - In order to test process of issue tracking in OpenERP, I Open the Issue. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after opened it. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in open state}: - - state == 'open' -- - Now I put Issue in pending due to need more information. -- - !python {model: project.issue}: | - self.case_pending(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state after put in pending. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in pending state}: - - state == 'pending' -- I send mail to get more details. TODO revert mail.mail to mail.compose.message (conversion to customer should be automatic). - !python {model: mail.mail }: | @@ -29,29 +9,9 @@ new_id = self.create(cr, uid, {'email_from': 'support@mycompany.com','email_to': 'Robert_Adersen@yahoo.com', 'subject': 'Regarding error in account module we nees more details'}) self.send_mail(cr, uid, [new_id], context=ctx) except Exception, e: - pass -- - After getting sufficient details, I re-open Issue from pending state. -- - !python {model: project.issue}: | - self.case_open(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I check state of Issue after re-opened. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in open state}: - - state == 'open' + pass - I create Task for Issue. - !python {model: project.issue}: | self.convert_issue_task(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I close Issue after resolving it -- - !python {model: project.issue}: | - self.case_close(cr, uid, [ref("crm_case_buginaccountsmodule0")]) -- - I Check state of Issue after closed. -- - !assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue should be in done state}: - - state == 'done' diff --git a/addons/project_long_term/i18n/zh_CN.po b/addons/project_long_term/i18n/zh_CN.po index 4b5ad3f0e44..4f553f15cfe 100644 --- a/addons/project_long_term/i18n/zh_CN.po +++ b/addons/project_long_term/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-27 14:57+0000\n" -"Last-Translator: 盈通 ccdos <ccdos@163.com>\n" +"PO-Revision-Date: 2013-07-14 03:57+0000\n" +"Last-Translator: Alan <shuchuan.wu@gmail.com>\n" "Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-03-16 05:47+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-07-15 04:51+0000\n" +"X-Generator: Launchpad (build 16696)\n" #. module: project_long_term #: help:project.phase,constraint_date_end:0 @@ -41,12 +41,12 @@ msgstr "阶段" #: view:project.phase:0 #: view:project.user.allocation:0 msgid "Team Planning" -msgstr "" +msgstr "项目团队计划" #. module: project_long_term #: field:project.phase,user_ids:0 msgid "Assigned Users" -msgstr "指定的用户" +msgstr "已分配的用户" #. module: project_long_term #: view:project.phase:0 diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml index e61af0c6c32..e2f47489b4a 100644 --- a/addons/project_long_term/project_long_term_view.xml +++ b/addons/project_long_term/project_long_term_view.xml @@ -200,7 +200,7 @@ <field name="project_id" invisible="1"/> <field name="total_hours" sum='Total Hours'/> <field name="remaining_hours" widget="float_time" sum="Remaining Hours"/> - <field name="state"/> + <field name="stage_id"/> </tree> </field> </page> diff --git a/addons/project_long_term/security/ir.model.access.csv b/addons/project_long_term/security/ir.model.access.csv index 2a00088b8f4..82bfab460cb 100644 --- a/addons/project_long_term/security/ir.model.access.csv +++ b/addons/project_long_term/security/ir.model.access.csv @@ -4,9 +4,6 @@ access_project_user_allocation,project.user.allocation,model_project_user_alloca access_project_phase_manager,project.phase manager,model_project_phase,project.group_project_manager,1,1,1,1
access_project_user_allocation_manager,project.user.allocation manager,model_project_user_allocation,project.group_project_manager,1,1,1,1
access_resource_resource_user,user.user user,resource.model_resource_resource,project.group_project_user,1,0,0,0
-access_resource_calendar_leaves_user,user.calendar.leaves user,resource.model_resource_calendar_leaves,project.group_project_user,1,1,1,1
access_resource_resource_manager,user.user manager,resource.model_resource_resource,project.group_project_manager,1,1,1,1
access_project_user_allocation_manager,project.user.allocation.manager,model_project_user_allocation,project.group_project_manager,1,1,1,1
access_project_resource_calendar_attendance,resource.calendar.attendance,resource.model_resource_calendar_attendance,project.group_project_manager,1,0,0,0
-
-
diff --git a/addons/project_long_term/test/task_process.yml b/addons/project_long_term/test/task_process.yml index a7065de315f..060abcf43f3 100644 --- a/addons/project_long_term/test/task_process.yml +++ b/addons/project_long_term/test/task_process.yml @@ -14,6 +14,6 @@ !python {model: project.project}: | prj = self.browse(cr, uid, [ref("project.project_project_1")])[0] for task in prj.tasks: - if task.state in ('done','cancelled'): + if task.stage_id and task.stage_id.fold: continue assert task.user_id and task.date_start and task.date_end, "Project tasks not scheduled" diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py index bb25b4aae24..d5ed55a8d31 100644 --- a/addons/project_mrp/project_mrp.py +++ b/addons/project_mrp/project_mrp.py @@ -22,6 +22,23 @@ from openerp.osv import fields, osv from openerp import netsvc + +class ProjectTaskStageMrp(osv.Model): + """ Override project.task.type model to add a 'closed' boolean field allowing + to know that tasks in this stage are considered as closed. Indeed since + OpenERP 8.0 status is not present on tasks anymore, only stage_id. """ + _name = 'project.task.type' + _inherit = 'project.task.type' + + _columns = { + 'closed': fields.boolean('Close', help="Tasks in this stage are considered as closed."), + } + + _defaults = { + 'closed': False, + } + + class project_task(osv.osv): _name = "project.task" _inherit = "project.task" @@ -30,21 +47,21 @@ class project_task(osv.osv): 'sale_line_id': fields.related('procurement_id', 'sale_line_id', type='many2one', relation='sale.order.line', store=True, string='Sales Order Line'), } - def _validate_subflows(self, cr, uid, ids): + def _validate_subflows(self, cr, uid, ids, context=None): wf_service = netsvc.LocalService("workflow") for task in self.browse(cr, uid, ids): if task.procurement_id: wf_service.trg_write(uid, 'procurement.order', task.procurement_id.id, cr) - def do_close(self, cr, uid, ids, *args, **kwargs): - res = super(project_task, self).do_close(cr, uid, ids, *args, **kwargs) - self._validate_subflows(cr, uid, ids) + def write(self, cr, uid, ids, values, context=None): + """ When closing tasks, validate subflows. """ + res = super(project_task, self).write(cr, uid, ids, values, context=context) + if values.get('stage_id'): + stage = self.pool.get('project.task.type').browse(cr, uid, values.get('stage_id'), context=context) + if stage.closed: + self._validate_subflows(cr, uid, ids, context=context) return res - def do_cancel(self, cr, uid, ids, *args, **kwargs): - res = super(project_task, self).do_cancel(cr, uid, ids, *args, **kwargs) - self._validate_subflows(cr, uid, ids) - return res class product_product(osv.osv): _inherit = "product.product" @@ -52,8 +69,9 @@ class product_product(osv.osv): 'project_id': fields.many2one('project.project', 'Project', ondelete='set null',) } + class sale_order(osv.osv): - _inherit ='sale.order' + _inherit = 'sale.order' def _prepare_order_line_procurement(self, cr, uid, order, line, move_id, date_planned, context=None): proc_data = super(sale_order, self)._prepare_order_line_procurement(cr, @@ -66,11 +84,12 @@ class sale_order(osv.osv): return {} res_sale = {} res = super(sale_order, self)._picked_rate(cr, uid, ids, name, arg, context=context) - cr.execute('''select sol.order_id as sale_id, t.state as task_state , + cr.execute('''select sol.order_id as sale_id, stage.closed as task_closed , t.id as task_id, sum(sol.product_uom_qty) as total from project_task as t left join sale_order_line as sol on sol.id = t.sale_line_id - where sol.order_id in %s group by sol.order_id,t.state,t.id ''',(tuple(ids),)) + left join project_task_type as stage on stage.id = t.stage_id + where sol.order_id in %s group by sol.order_id,stage.closed,t.id ''',(tuple(ids),)) sale_task_data = cr.dictfetchall() if not sale_task_data: @@ -90,7 +109,7 @@ class sale_order(osv.osv): for item in sale_task_data: res_sale[item['sale_id']]['total_no_task'] += item['total'] - if item['task_state'] == 'done': + if item['task_closed']: res_sale[item['sale_id']]['number_of_done'] += item['total'] for sale in self.browse(cr, uid, ids, context=context): diff --git a/addons/project_mrp/project_mrp_demo.xml b/addons/project_mrp/project_mrp_demo.xml index 30d4cfba7ef..a840c0166e7 100644 --- a/addons/project_mrp/project_mrp_demo.xml +++ b/addons/project_mrp/project_mrp_demo.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <openerp> <data noupdate="1"> - <!--Resource: sale.order.line for services type product--> <record id="line_services" model="sale.order.line"> @@ -14,5 +13,8 @@ <field name="type">make_to_order</field> </record> + <record id="project.project_tt_deployment" model="project.task.type"> + <field name="closed" eval="True"/> + </record> </data> </openerp> diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/project_mrp/project_mrp_view.xml index 881ed9b6b29..f724a3c76b6 100644 --- a/addons/project_mrp/project_mrp_view.xml +++ b/addons/project_mrp/project_mrp_view.xml @@ -21,12 +21,22 @@ </field> </field> </record> + <record id="task_type_edit_mrp_inherit" model="ir.ui.view"> + <field name="name">project.task.type.mrp.inherit</field> + <field name="model">project.task.type</field> + <field name="inherit_id" ref="project.task_type_edit"/> + <field name="arch" type="xml"> + <field name="case_default" position="after"> + <field name="closed"/> + </field> + </field> + </record> <record id="view_project_mrp_inherit_form2" model="ir.ui.view"> <field name="name">project.mrp.form.view.inherit</field> <field name="model">project.task</field> <field name="inherit_id" ref="project.view_task_form2"/> <field name="arch" type="xml"> - <field name="state" position="after"> + <field name="company_id" position="before"> <field name="sale_line_id" string="Order Line"/> </field> </field> diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py index f4b4a28db46..8a6dc811d9a 100644 --- a/addons/project_mrp/project_procurement.py +++ b/addons/project_mrp/project_procurement.py @@ -33,13 +33,13 @@ class procurement_order(osv.osv): def action_check_finished(self, cr, uid, ids): res = super(procurement_order, self).action_check_finished(cr, uid, ids) return res and self.check_task_done(cr, uid, ids) - + def check_task_done(self, cr, uid, ids, context=None): """ Checks if task is done or not. @return: True or False. """ for p in self.browse(cr, uid, ids, context=context): - if (p.product_id.type=='service') and (p.procure_method=='make_to_order') and p.task_id and (p.task_id.state not in ('done', 'cancelled')): + if (p.product_id.type == 'service') and (p.procure_method == 'make_to_order') and p.task_id and (p.task_id.stage_id and not p.task_id.stage_id.closed): return False return True diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml index 967461ca30a..b16cce7590d 100644 --- a/addons/project_mrp/test/project_task_procurement.yml +++ b/addons/project_mrp/test/project_task_procurement.yml @@ -36,7 +36,7 @@ !python {model: project.task}: | task_ids = self.search(cr, uid, [('sale_line_id', '=', ref('line_services'))]) assert task_ids, "Task is not generated for Service Order Line." - self.do_close(cr, uid, task_ids, context=context) + self.write(cr, uid, task_ids, {'stage_id': ref('project.project_tt_deployment')}, context=context) - I check procurement of Service Order Line after closed task. - @@ -44,4 +44,4 @@ procurement_ids = self.search(cr, uid, [('sale_line_id', '=', ref('line_services'))]) assert procurement_ids, "Procurement is not generated for Service Order Line." procurement = self.browse(cr, uid, procurement_ids[0], context=context) - assert procurement.state == 'done' , "Procurement should be closed." + assert procurement.state == 'done' , "Procurement should be closed."
\ No newline at end of file diff --git a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml index 3efd133ffb6..7d7566bdd0c 100644 --- a/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml +++ b/addons/project_timesheet/test/worktask_entry_to_timesheetline_entry.yml @@ -66,17 +66,8 @@ planned_hours: 20.0 project_id: project_project_timesheetmanagement0 remaining_hours: 20.0 - state: draft user_id: res_users_hrmanager0 - - Open the task -- - !python {model: project.task}: | - self.do_open(cr, uid, [ref("project_task_getalltimesheetrecords0")], {"lang": - "en_US", "active_ids": [ref("project_project_timesheetmanagement0")], "tz": - False, "active_model": "project.project", "department_id": False, "project_id": - False, "active_id": ref("project_project_timesheetmanagement0"), }) -- Make a work task entry 'Get work calendar of all employees' of 10 hours done by HR manager - !record {model: project.task, id: project_task_getalltimesheetrecords0}: diff --git a/addons/purchase/static/description/index.html b/addons/purchase/static/description/index.html index 67b122ac557..ecf9028ce33 100644 --- a/addons/purchase/static/description/index.html +++ b/addons/purchase/static/description/index.html @@ -17,7 +17,7 @@ Automate procurement propositions, launch request for quotations, track purchase orders, manage suppliers' information, control products reception and check suppliers' invoices. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=purchase" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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 <Unknown>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-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/static/description/index.html b/addons/sale/static/description/index.html index 1eb6215db2f..52c84b82f12 100644 --- a/addons/sale/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=sale" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> diff --git a/addons/stock/static/description/index.html b/addons/stock/static/description/index.html index aac71e529ae..dd7fbe568f7 100644 --- a/addons/stock/static/description/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. </p> <div class="oe_centeralign oe_websiteonly"> - <a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> + <a href="http://www.openerp.com/start?app=stock" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a> </div> </div> </div> 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 @@ <field name="state" nolabel="1" readonly="1" widget="statusbar" statusbar_visible="draft,confirmed,assigned,done" statusbar_colors='{"auto":"blue", "confirmed":"blue"}'/> </xpath> <xpath expr="//field[@name='partner_id']" position="replace"> - <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Customer"/> + <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Customer" domain="[('customer','=',True)]" /> </xpath> <xpath expr="//field[@name='move_lines']" position="replace"> <field name="move_lines" context="{'address_out_id': partner_id, 'picking_type': 'out', 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/> @@ -1045,7 +1045,7 @@ <button name="action_process" states="assigned" string="Receive" type="object" class="oe_highlight"/> </xpath> <xpath expr="//field[@name='partner_id']" position="replace"> - <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Supplier"/> + <field name="partner_id" on_change="onchange_partner_in(partner_id)" string="Supplier" domain="[('supplier','=',True)]" /> </xpath> <xpath expr="//field[@name='move_lines']" position="replace"> <field name="move_lines" context="{'address_in_id': partner_id, 'picking_type': 'in', 'form_view_ref':'view_move_picking_form', 'tree_view_ref':'view_move_picking_tree'}"/> |
