diff --git a/addons/account/account.py b/addons/account/account.py index 75936320e58..9b728ff36e0 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -28,7 +28,7 @@ import time import openerp from openerp import SUPERUSER_ID from openerp import tools -from openerp.osv import fields, osv +from openerp.osv import fields, osv, expression from openerp.tools.translate import _ from openerp.tools.float_utils import float_round @@ -579,15 +579,18 @@ class account_account(osv.osv): except: pass if name: - ids = self.search(cr, user, [('code', '=like', name+"%")]+args, limit=limit) - if not ids: - ids = self.search(cr, user, [('shortcut', '=', name)]+ args, limit=limit) - if not ids: - ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit) - if not ids and len(name.split()) >= 2: - #Separating code and name of account for searching - operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A. - ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit) + if operator not in expression.NEGATIVE_TERM_OPERATORS: + ids = self.search(cr, user, ['|', ('code', '=like', name+"%"), '|', ('shortcut', '=', name), ('name', operator, name)]+args, limit=limit) + if not ids and len(name.split()) >= 2: + #Separating code and name of account for searching + operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A. + ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2)]+ args, limit=limit) + else: + ids = self.search(cr, user, ['&','!', ('code', '=like', name+"%"), ('name', operator, name)]+args, limit=limit) + # as negation want to restric, do if already have results + if ids and len(name.split()) >= 2: + operand1,operand2 = name.split(' ',1) #name can contain spaces e.g. OpenERP S.A. + ids = self.search(cr, user, [('code', operator, operand1), ('name', operator, operand2), ('id', 'in', ids)]+ args, limit=limit) else: ids = self.search(cr, user, args, context=context, limit=limit) return self.name_get(cr, user, ids, context=context) @@ -1447,6 +1450,8 @@ class account_move(osv.osv): def unlink(self, cr, uid, ids, context=None, check=True): if context is None: context = {} + if isinstance(ids, (int, long)): + ids = [ids] toremove = [] obj_move_line = self.pool.get('account.move.line') for move in self.browse(cr, uid, ids, context=context): @@ -1571,11 +1576,6 @@ class account_move(osv.osv): obj_analytic_line = self.pool.get('account.analytic.line') obj_move_line = self.pool.get('account.move.line') for move in self.browse(cr, uid, ids, context): - # Unlink old analytic lines on move_lines - for obj_line in move.line_id: - for obj in obj_line.analytic_lines: - obj_analytic_line.unlink(cr,uid,obj.id) - journal = move.journal_id amount = 0 line_ids = [] @@ -1928,7 +1928,7 @@ class account_tax(osv.osv): 'child_depend':fields.boolean('Tax on Children', help="Set if the tax computation is based on the computation of child taxes rather than on the total amount."), 'python_compute':fields.text('Python Code'), 'python_compute_inv':fields.text('Python Code (reverse)'), - 'python_applicable':fields.text('Python Code'), + 'python_applicable':fields.text('Applicable Code'), # # Fields used for the Tax declaration @@ -1942,8 +1942,8 @@ class account_tax(osv.osv): 'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the tax declaration."), 'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the tax declaration."), - 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), - 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), + 'ref_base_sign': fields.float('Refund Base Code Sign', help="Usually 1 or -1."), + 'ref_tax_sign': fields.float('Refund Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"), 'company_id': fields.many2one('res.company', 'Company', required=True), 'description': fields.char('Tax Code'), @@ -2833,7 +2833,7 @@ class account_tax_template(osv.osv): 'child_depend':fields.boolean('Tax on Children', help="Set if the tax computation is based on the computation of child taxes rather than on the total amount."), 'python_compute':fields.text('Python Code'), 'python_compute_inv':fields.text('Python Code (reverse)'), - 'python_applicable':fields.text('Python Code'), + 'python_applicable':fields.text('Applicable Code'), # # Fields used for the Tax declaration @@ -2847,8 +2847,8 @@ class account_tax_template(osv.osv): 'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the tax declaration."), 'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the tax declaration."), - 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), - 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), + 'ref_base_sign': fields.float('Refund Base Code Sign', help="Usually 1 or -1."), + 'ref_tax_sign': fields.float('Refund Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."), 'description': fields.char('Internal Name'), 'type_tax_use': fields.selection([('sale','Sale'),('purchase','Purchase'),('all','All')], 'Tax Use In', required=True,), @@ -3412,6 +3412,8 @@ class wizard_multi_charts_accounts(osv.osv_memory): all the provided information to create the accounts, the banks, the journals, the taxes, the tax codes, the accounting properties... accordingly for the chosen company. ''' + if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'): + raise openerp.exceptions.AccessError(_("Only administrators can change the settings")) obj_data = self.pool.get('ir.model.data') ir_values_obj = self.pool.get('ir.values') obj_wizard = self.browse(cr, uid, ids[0]) @@ -3428,7 +3430,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): self.pool[tmp2[0]].write(cr, uid, tmp2[1], { 'currency_id': obj_wizard.currency_id.id }) - except ValueError, e: + except ValueError: pass # If the floats for sale/purchase rates have been filled, create templates from them diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 0fc9d9e2227..cb242942656 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -26,7 +26,7 @@ from operator import itemgetter from lxml import etree -from openerp import netsvc +from openerp import workflow from openerp.osv import fields, osv, orm from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp @@ -193,6 +193,8 @@ class account_move_line(osv.osv): if obj_line.analytic_account_id: if not obj_line.journal_id.analytic_journal_id: raise osv.except_osv(_('No Analytic Journal!'),_("You have to define an analytic journal on the '%s' journal!") % (obj_line.journal_id.name, )) + if obj_line.analytic_lines: + acc_ana_line_obj.unlink(cr,uid,[obj.id for obj in obj_line.analytic_lines]) vals_line = self._prepare_analytic_line(cr, uid, obj_line, context=context) acc_ana_line_obj.create(cr, uid, vals_line) return True @@ -311,13 +313,13 @@ class account_move_line(osv.osv): context = {} c = context.copy() c['initital_bal'] = True - sql = """SELECT l2.id, SUM(l1.debit-l1.credit) - FROM account_move_line l1, account_move_line l2 - WHERE l2.account_id = l1.account_id - AND l1.id <= l2.id - AND l2.id IN %s AND """ + \ - self._query_get(cr, uid, obj='l1', context=c) + \ - " GROUP BY l2.id" + sql = """SELECT l1.id, COALESCE(SUM(l2.debit-l2.credit), 0) + FROM account_move_line l1 LEFT JOIN account_move_line l2 + ON (l1.account_id = l2.account_id + AND l2.id <= l1.id + AND """ + \ + self._query_get(cr, uid, obj='l2', context=c) + \ + ") WHERE l1.id IN %s GROUP BY l1.id" cr.execute(sql, [tuple(ids)]) return dict(cr.fetchall()) @@ -932,11 +934,10 @@ class account_move_line(osv.osv): 'line_id': map(lambda x: (4, x, False), ids), 'line_partial_ids': map(lambda x: (3, x, False), ids) }) - wf_service = netsvc.LocalService("workflow") # the id of the move.reconcile is written in the move.line (self) by the create method above # because of the way the line_id are defined: (4, x, False) for id in ids: - wf_service.trg_trigger(uid, 'account.move.line', id, cr) + workflow.trg_trigger(uid, 'account.move.line', id, cr) if lines and lines[0]: partner_id = lines[0].partner_id and lines[0].partner_id.id or False @@ -1208,20 +1209,6 @@ class account_move_line(osv.osv): if not ok: raise osv.except_osv(_('Bad Account!'), _('You cannot use this general account in this journal, check the tab \'Entry Controls\' on the related journal.')) - if vals.get('analytic_account_id',False): - if journal.analytic_journal_id: - vals['analytic_lines'] = [(0,0, { - 'name': vals['name'], - 'date': vals.get('date', time.strftime('%Y-%m-%d')), - 'account_id': vals.get('analytic_account_id', False), - 'unit_amount': vals.get('quantity', 1.0), - 'amount': vals.get('debit', 0.0) or vals.get('credit', 0.0), - 'general_account_id': vals.get('account_id', False), - 'journal_id': journal.analytic_journal_id.id, - 'ref': vals.get('ref', False), - 'user_id': uid - })] - result = super(account_move_line, self).create(cr, uid, vals, context=context) # CREATE Taxes if vals.get('account_tax_id', False): diff --git a/addons/account/account_unit_test.xml b/addons/account/account_unit_test.xml index 7795c2700cc..5fb1c55b669 100644 --- a/addons/account/account_unit_test.xml +++ b/addons/account/account_unit_test.xml @@ -8,7 +8,7 @@ draft - out_invoice + in_invoice Test invoice 1 diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml index 9d2e65a3a4c..8119e9f1002 100644 --- a/addons/account/data/account_data.xml +++ b/addons/account/data/account_data.xml @@ -16,7 +16,6 @@ - Immediate Payment balance diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml index b3fe8362b8b..417169fa8cb 100644 --- a/addons/account/edi/invoice_action_data.xml +++ b/addons/account/edi/invoice_action_data.xml @@ -22,7 +22,7 @@ Invoice - Send by Email - ${object.user_id.email or object.company_id.email or 'noreply@localhost'} + ${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe} ${object.company_id.name} Invoice (Ref ${object.number or 'n/a'}) ${object.partner_id.id} diff --git a/addons/account/i18n/am.po b/addons/account/i18n/am.po new file mode 100644 index 00000000000..4544b53b1df --- /dev/null +++ b/addons/account/i18n/am.po @@ -0,0 +1,10849 @@ +# Amharic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-27 11:23+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Amharic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-28 05:31+0000\n" +"X-Generator: Launchpad (build 16847)\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 "ማመሳከሪያ" + +#. 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 "ማስጠንቀቅያ!" + +#. module: account +#: code:addons/account/account.py:3197 +#, python-format +msgid "Miscellaneous Journal" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#, python-format +msgid "" +"You have to set the 'End of Year Entries Journal' for this Fiscal Year " +"which is set after generating opening entries from 'Generate Opening " +"Entries'." +msgstr "" + +#. module: account +#: field:account.fiscal.position.account,account_src_id:0 +#: field:account.fiscal.position.account.template,account_src_id:0 +msgid "Account Source" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period +msgid "" +"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hello ${object.partner_id.name},

\n" +"\n" +"

A new invoice is available for you:

\n" +" \n" +"

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

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

It is also possible to directly pay with Paypal:

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

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

\n" +"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\n" +" " +msgstr "" + +#. module: account +#: help:account.invoice.line,account_id:0 +msgid "The income or expense account related to the selected product." +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Install more chart templates" +msgstr "" + +#. module: account +#: report:account.general.journal:0 +#: model:ir.actions.report.xml,name:account.account_general_journal +msgid "General Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Search Invoice" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:1159 +#, python-format +msgid "Refund" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: account +#: field:res.partner,credit:0 +msgid "Total Receivable" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "General Information" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Accounting Documents" +msgstr "" + +#. module: account +#: code:addons/account/account.py:641 +#, python-format +msgid "" +"You cannot remove/deactivate an account which is set on a customer or " +"supplier." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move_lines +msgid "Validate Account Move Lines" +msgstr "" + +#. module: account +#: help:res.partner,property_account_position:0 +msgid "" +"The fiscal position will determine taxes and accounts used for the partner." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaidinvoice0 +msgid "Invoice's state is Done." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_reconcilepaid0 +msgid "As soon as the reconciliation is done, the invoice can be paid." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:59 +#, python-format +msgid "New currency is not configured properly." +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Search Account Templates" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +msgid "Manual Invoice Taxes" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:573 +#, python-format +msgid "The payment term of supplier does not have a payment term line." +msgstr "" + +#. module: account +#: field:account.account,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/js/account_move_reconciliation.js:74 +#: code:addons/account/static/src/js/account_move_reconciliation.js:80 +#, python-format +msgid "Never" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_addtmpl_wizard +msgid "account.addtmpl.wizard" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,result_selection:0 +#: field:account.common.partner.report,result_selection:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,result_selection:0 +#: field:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Partner's" +msgstr "" + +#. module: account +#: field:account.account,note:0 +msgid "Internal Notes" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear +#: view:ir.sequence:0 +#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear +msgid "Fiscal Years" +msgstr "" + +#. module: account +#: help:account.analytic.journal,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the analytic " +"journal without removing it." +msgstr "" + +#. module: account +#: field:account.analytic.line,ref:0 +msgid "Ref." +msgstr "" + +#. module: account +#: field:account.use.model,model:0 +#: model:ir.model,name:account.model_account_model +msgid "Account Model" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:292 +#, python-format +msgid "Loss" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "February" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: help:account.cashbox.line,number_closing:0 +msgid "Closing Unit Numbers" +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,bank_account_id:0 +#: view:account.chart.template:0 +#: field:account.chart.template,bank_account_view_id:0 +#: field:account.invoice,partner_bank_id:0 +#: field:account.invoice.report,partner_bank_id:0 +msgid "Bank Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_central_journal +#: model:ir.model,name:account.model_account_central_journal +msgid "Account Central Journal" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Future" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Search Journal Items" +msgstr "" + +#. module: account +#: help:account.tax,base_sign:0 +#: help:account.tax,ref_base_sign:0 +#: help:account.tax,ref_tax_sign:0 +#: help:account.tax,tax_sign:0 +#: help:account.tax.template,base_sign:0 +#: help:account.tax.template,ref_base_sign:0 +#: help:account.tax.template,ref_tax_sign:0 +#: help:account.tax.template,tax_sign:0 +msgid "Usually 1 or -1." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account_template +msgid "Template Account Fiscal Mapping" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense:0 +msgid "Expense Account on Product Template" +msgstr "" + +#. module: account +#: field:res.partner,property_payment_term:0 +msgid "Customer Payment Term" +msgstr "" + +#. module: account +#: help:accounting.report,label_filter:0 +msgid "" +"This label will be displayed on report to show the balance computed for the " +"given comparison filter." +msgstr "" + +#. module: account +#: selection:account.config.settings,tax_calculation_rounding_method:0 +msgid "Round per line" +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual_currency:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in its currency (maybe different of the company currency)." +msgstr "" diff --git a/addons/account/i18n/es_PE.po b/addons/account/i18n/es_PE.po new file mode 100644 index 00000000000..70e06912436 --- /dev/null +++ b/addons/account/i18n/es_PE.po @@ -0,0 +1,10849 @@ +# Spanish (Peru) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-12-09 17:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Peru) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\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 "" + +#. 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 "" + +#. module: account +#: code:addons/account/account.py:3197 +#, python-format +msgid "Miscellaneous Journal" +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 +#, python-format +msgid "" +"You have to set the 'End of Year Entries Journal' for this Fiscal Year " +"which is set after generating opening entries from 'Generate Opening " +"Entries'." +msgstr "" + +#. module: account +#: field:account.fiscal.position.account,account_src_id:0 +#: field:account.fiscal.position.account.template,account_src_id:0 +msgid "Account Source" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,help:account.action_account_period +msgid "" +"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hello ${object.partner_id.name},

\n" +"\n" +"

A new invoice is available for you:

\n" +" \n" +"

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

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

It is also possible to directly pay with Paypal:

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

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

\n" +"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\n" +" " +msgstr "" + +#. module: account +#: help:account.invoice.line,account_id:0 +msgid "The income or expense account related to the selected product." +msgstr "" + +#. module: account +#: view:account.config.settings:0 +msgid "Install more chart templates" +msgstr "" + +#. module: account +#: report:account.general.journal:0 +#: model:ir.actions.report.xml,name:account.account_general_journal +msgid "General Journal" +msgstr "" + +#. module: account +#: view:account.invoice:0 +msgid "Search Invoice" +msgstr "" + +#. module: account +#: report:account.invoice:0 +#: view:account.invoice:0 +#: view:account.invoice.report:0 +#: code:addons/account/account_invoice.py:1159 +#, python-format +msgid "Refund" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: account +#: field:res.partner,credit:0 +msgid "Total Receivable" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "General Information" +msgstr "" + +#. module: account +#: view:account.move:0 +#: view:account.move.line:0 +msgid "Accounting Documents" +msgstr "" + +#. module: account +#: code:addons/account/account.py:641 +#, python-format +msgid "" +"You cannot remove/deactivate an account which is set on a customer or " +"supplier." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_validate_account_move_lines +msgid "Validate Account Move Lines" +msgstr "" + +#. module: account +#: help:res.partner,property_account_position:0 +msgid "" +"The fiscal position will determine taxes and accounts used for the partner." +msgstr "" + +#. module: account +#: model:process.node,note:account.process_node_supplierpaidinvoice0 +msgid "Invoice's state is Done." +msgstr "" + +#. module: account +#: model:process.transition,note:account.process_transition_reconcilepaid0 +msgid "As soon as the reconciliation is done, the invoice can be paid." +msgstr "" + +#. module: account +#: code:addons/account/wizard/account_change_currency.py:59 +#, python-format +msgid "New currency is not configured properly." +msgstr "" + +#. module: account +#: view:account.account.template:0 +msgid "Search Account Templates" +msgstr "" + +#. module: account +#: view:account.invoice.tax:0 +msgid "Manual Invoice Taxes" +msgstr "" + +#. module: account +#: code:addons/account/account_invoice.py:573 +#, python-format +msgid "The payment term of supplier does not have a payment term line." +msgstr "" + +#. module: account +#: field:account.account,parent_right:0 +msgid "Parent Right" +msgstr "" + +#. module: account +#. openerp-web +#: code:addons/account/static/src/js/account_move_reconciliation.js:74 +#: code:addons/account/static/src/js/account_move_reconciliation.js:80 +#, python-format +msgid "Never" +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_addtmpl_wizard +msgid "account.addtmpl.wizard" +msgstr "" + +#. module: account +#: field:account.aged.trial.balance,result_selection:0 +#: field:account.common.partner.report,result_selection:0 +#: report:account.partner.balance:0 +#: field:account.partner.balance,result_selection:0 +#: field:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 +#: report:account.third_party_ledger_other:0 +msgid "Partner's" +msgstr "" + +#. module: account +#: field:account.account,note:0 +msgid "Internal Notes" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_fiscalyear +#: view:ir.sequence:0 +#: model:ir.ui.menu,name:account.menu_action_account_fiscalyear +msgid "Fiscal Years" +msgstr "" + +#. module: account +#: help:account.analytic.journal,active:0 +msgid "" +"If the active field is set to False, it will allow you to hide the analytic " +"journal without removing it." +msgstr "" + +#. module: account +#: field:account.analytic.line,ref:0 +msgid "Ref." +msgstr "" + +#. module: account +#: field:account.use.model,model:0 +#: model:ir.model,name:account.model_account_model +msgid "Account Model" +msgstr "" + +#. module: account +#: code:addons/account/account_cash_statement.py:292 +#, python-format +msgid "Loss" +msgstr "" + +#. module: account +#: selection:account.entries.report,month:0 +#: selection:account.invoice.report,month:0 +#: selection:analytic.entries.report,month:0 +#: selection:report.account.sales,month:0 +#: selection:report.account_type.sales,month:0 +msgid "February" +msgstr "" + +#. module: account +#: view:account.bank.statement:0 +#: help:account.cashbox.line,number_closing:0 +msgid "Closing Unit Numbers" +msgstr "" + +#. module: account +#: field:account.bank.accounts.wizard,bank_account_id:0 +#: view:account.chart.template:0 +#: field:account.chart.template,bank_account_view_id:0 +#: field:account.invoice,partner_bank_id:0 +#: field:account.invoice.report,partner_bank_id:0 +msgid "Bank Account" +msgstr "" + +#. module: account +#: model:ir.actions.act_window,name:account.action_account_central_journal +#: model:ir.model,name:account.model_account_central_journal +msgid "Account Central Journal" +msgstr "" + +#. module: account +#: report:account.overdue:0 +msgid "Maturity" +msgstr "" + +#. module: account +#: selection:account.aged.trial.balance,direction_selection:0 +msgid "Future" +msgstr "" + +#. module: account +#: view:account.move.line:0 +msgid "Search Journal Items" +msgstr "" + +#. module: account +#: help:account.tax,base_sign:0 +#: help:account.tax,ref_base_sign:0 +#: help:account.tax,ref_tax_sign:0 +#: help:account.tax,tax_sign:0 +#: help:account.tax.template,base_sign:0 +#: help:account.tax.template,ref_base_sign:0 +#: help:account.tax.template,ref_tax_sign:0 +#: help:account.tax.template,tax_sign:0 +msgid "Usually 1 or -1." +msgstr "" + +#. module: account +#: model:ir.model,name:account.model_account_fiscal_position_account_template +msgid "Template Account Fiscal Mapping" +msgstr "" + +#. module: account +#: field:account.chart.template,property_account_expense:0 +msgid "Expense Account on Product Template" +msgstr "" + +#. module: account +#: field:res.partner,property_payment_term:0 +msgid "Customer Payment Term" +msgstr "" + +#. module: account +#: help:accounting.report,label_filter:0 +msgid "" +"This label will be displayed on report to show the balance computed for the " +"given comparison filter." +msgstr "" + +#. module: account +#: selection:account.config.settings,tax_calculation_rounding_method:0 +msgid "Round per line" +msgstr "" + +#. module: account +#: help:account.move.line,amount_residual_currency:0 +msgid "" +"The residual amount on a receivable or payable of a journal entry expressed " +"in its currency (maybe different of the company currency)." +msgstr "" diff --git a/addons/account/i18n/hu.po b/addons/account/i18n/hu.po index 0e17cb39113..ea064694b5f 100644 --- a/addons/account/i18n/hu.po +++ b/addons/account/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: 2012-12-27 22:48+0000\n" -"Last-Translator: Balint (eSolve) \n" +"PO-Revision-Date: 2013-12-12 21:16+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 05:27+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-13 05:51+0000\n" +"X-Generator: Launchpad (build 16869)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -26,6 +26,8 @@ msgstr "Kifizetési rendszer" msgid "" "An account fiscal position could be defined only once time on same accounts." msgstr "" +"Egy könyvelés költségvetési évfordulóját csak egyszer lehet megadni az arra " +"hivatkozó számlákra vonatkozólag." #. module: account #: help:account.tax.code,sequence:0 @@ -33,6 +35,8 @@ msgid "" "Determine the display order in the report 'Accounting \\ Reporting \\ " "Generic Reporting \\ Taxes \\ Taxes Report'" msgstr "" +"Meghatározza a kijelzés sorrendjét a kimutatáson 'Könyvelés \\ " +"Kimutatáskészítés \\ Általános kimutatás \\ Adók \\ Adó kimutatás'" #. module: account #: view:account.move.reconcile:0 @@ -60,7 +64,7 @@ msgstr "Rendezetlen összeg" #: code:addons/account/account_bank_statement.py:369 #, python-format msgid "Journal item \"%s\" is not valid." -msgstr "" +msgstr "A \"%s\" könyvelési napló tétel nem érvényes." #. module: account #: model:ir.model,name:account.model_report_aged_receivable @@ -78,7 +82,7 @@ msgstr "Importálás számlából vagy pénzügyi rendezésből" #: code:addons/account/account_move_line.py:1210 #, python-format msgid "Bad Account!" -msgstr "" +msgstr "Eltévesztett könyvelési számla!" #. module: account #: view:account.move:0 @@ -92,6 +96,8 @@ msgid "" "Error!\n" "You cannot create recursive account templates." msgstr "" +"Hiba!\n" +"Nem hozhat létre visszatérő számla sablonokat." #. module: account #. openerp-web @@ -102,7 +108,7 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:30 #, python-format msgid "Reconcile" -msgstr "Párosítás" +msgstr "Egyeztetés" #. module: account #: field:account.bank.statement,name:0 @@ -114,7 +120,7 @@ msgstr "Párosítás" #: xsl:account.transfer:0 #: field:cash.box.in,ref:0 msgid "Reference" -msgstr "Hivatkozás" +msgstr "Információforrás" #. module: account #: help:account.payment.term,active:0 @@ -122,7 +128,8 @@ msgid "" "If the active field is set to False, it will allow you to hide the payment " "term without removing it." msgstr "" -"Ha az aktív mező nincs bejelölve, nem használható a fizetési feltétel." +"Ha az aktív mező hamisra van állatva, akkor a fizetési feltételt " +"eltüntetheti anélkül, hogy törölné azt." #. module: account #: code:addons/account/account.py:641 @@ -151,7 +158,7 @@ msgstr "Figyelem!" #: code:addons/account/account.py:3197 #, python-format msgid "Miscellaneous Journal" -msgstr "Vegyes napló" +msgstr "Vegyes könyvelési napló" #. module: account #: code:addons/account/wizard/account_open_closed_fiscalyear.py:39 @@ -161,12 +168,14 @@ msgid "" "which is set after generating opening entries from 'Generate Opening " "Entries'." msgstr "" +"Be kell állítania az 'Év végi belépő könyvelési naplót' a 'Nyitási tétel " +"létrehozása' menüvel létrehozott üzleti év tételekhez." #. 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 "Eredeti főkönyvi számla" +msgstr "Forrás főkönyvi számla" #. module: account #: model:ir.actions.act_window,help:account.action_account_period @@ -179,6 +188,14 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson üzleti szakasz hozzáadásához.\n" +"

\n" +" Egy könyvelési szakasz leggyakrabban egy negyedév vagy egy " +"hónap. \n" +" Általában összhangban van az adóbevallás periódusával.\n" +"

\n" +" " #. module: account #: model:ir.actions.act_window,name:account.action_view_created_invoice_dashboard @@ -188,12 +205,12 @@ msgstr "Az elmúlt 15 napban készített számlák" #. module: account #: field:accounting.report,label_filter:0 msgid "Column Label" -msgstr "" +msgstr "Oszlop elnevezés" #. module: account #: help:account.config.settings,code_digits:0 msgid "No. of digits to use for account code" -msgstr "" +msgstr "Könyvelési kódnak használt számlyegyek száma" #. module: account #: help:account.analytic.journal,type:0 @@ -213,6 +230,9 @@ msgid "" "lines for invoices. Leave empty if you don't want to use an analytic account " "on the invoice tax lines by default." msgstr "" +"Analitikus számla mely alapértelmezésben a számlák adó tételének számlája. " +"Hagyja üresen, ha alap értelmezésben nem szeretne analitikus számát " +"használni a számlák adó tételeire." #. module: account #: model:ir.actions.act_window,name:account.action_account_tax_template_form @@ -252,11 +272,14 @@ msgid "" "legal reports, and set the rules to close a fiscal year and generate opening " "entries." msgstr "" +"Számla típus információs célt szolgál, országra jellemző törvényekre sajátos " +"kimutatások létrehozásához, és az induló tételek létrehozásához valamint az " +"üzleti év lezáró szabályainak beállításához." #. module: account #: field:account.config.settings,sale_refund_sequence_next:0 msgid "Next credit note number" -msgstr "" +msgstr "Következő jóváírási értesítés szám" #. module: account #: help:account.config.settings,module_account_voucher:0 @@ -265,6 +288,9 @@ msgid "" "sales, purchase, expense, contra, etc.\n" " This installs the module account_voucher." msgstr "" +"Ez magába foglalja az összes alap követelményt a banki, készpénzes, " +"vásárlói, beszerzési, kiadási, visszaküldött, stb nyugta bevitelhez.\n" +" Ez a account_voucher (könyvelés_nyugta) modult telepíti.." #. module: account #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry @@ -296,6 +322,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson ügyfél visszatérítés létrehozásához. \n" +"

\n" +" A visszatérítés egy dokumentum a számla teljes összegének " +"vagy részének a \n" +" jóváírásról.\n" +"

\n" +" Kézi ügyfél részére történő jóváírás helyett, megteheti\n" +" azt közvetlenül az ide vonatkozó ügyfél számlából.\n" +"

\n" +" " #. module: account #: help:account.installer,charts:0 @@ -304,12 +341,12 @@ msgid "" "accounting needs of your company based on your country." msgstr "" "Lokalizált számlatükröt állít be, hogy amilyen szorosan csak lehet, " -"illeszkedjen a vállalat szükségletéhez." +"illeszkedjen a vállalat szükségletéhez az országra vonatkozóan." #. module: account #: model:ir.model,name:account.model_account_unreconcile msgid "Account Unreconcile" -msgstr "Párosítás visszavonása" +msgstr "Könyvelési számla párosítás visszavonása" #. module: account #: field:account.config.settings,module_account_budget:0 @@ -319,7 +356,7 @@ msgstr "Költségvetés kezelés" #. module: account #: view:product.template:0 msgid "Purchase Properties" -msgstr "Beszerzés könyvelési beállítások" +msgstr "Beszerzési tulajdonságok" #. module: account #: help:account.financial.report,style_overwrite:0 @@ -328,17 +365,20 @@ msgid "" "leave the automatic formatting, it will be computed based on the financial " "reports hierarchy (auto-computed field 'level')." msgstr "" +"Beállíthatja ennek a rekordnak a megjelenítési formáját. Ha automatikus " +"formázást hagyja, akkor az a pénzügyi jelentés rangsora alapján lesz " +"kiszámítva (automatikusan számított mező a 'szint')." #. module: account #: field:account.config.settings,group_multi_currency:0 msgid "Allow multi currencies" -msgstr "" +msgstr "Többféle valuta engedélyezése" #. module: account #: code:addons/account/account_invoice.py:77 #, python-format msgid "You must define an analytic journal of type '%s'!" -msgstr "" +msgstr "Meg kell határoznia egy analitikus gyüjtőnapló típust '%s'!" #. module: account #: selection:account.entries.report,month:0 @@ -353,12 +393,12 @@ msgstr "Június" #: code:addons/account/wizard/account_automatic_reconcile.py:148 #, python-format msgid "You must select accounts to reconcile." -msgstr "" +msgstr "A párosításhoz könyvelési számlákat kell kiválasztania." #. module: account #: help:account.config.settings,group_analytic_accounting:0 msgid "Allows you to use the analytic accounting." -msgstr "" +msgstr "Analitikus számla használatának engedélyezése." #. module: account #: view:account.invoice:0 @@ -388,17 +428,17 @@ msgstr "Létrehozás dátuma" #. module: account #: selection:account.journal,type:0 msgid "Purchase Refund" -msgstr "Bejövő jóváíró számla" +msgstr "Beszerzési visszatérítési számla" #. module: account #: selection:account.journal,type:0 msgid "Opening/Closing Situation" -msgstr "Nyitó/záró" +msgstr "Nyitó/záró állapot" #. module: account #: help:account.journal,currency:0 msgid "The currency used to enter statement" -msgstr "Tételek rögzítésének pénzneme" +msgstr "Számlakivonat tételek rögzítésének pénzneme" #. module: account #: field:account.journal,default_debit_account_id:0 @@ -409,7 +449,7 @@ msgstr "Alapértelmezett tartozik főkönyvi számla" #: view:account.move:0 #: view:account.move.line:0 msgid "Total Credit" -msgstr "Követel összesen" +msgstr "Összes követelés" #. module: account #: help:account.config.settings,module_account_asset:0 @@ -421,11 +461,19 @@ msgid "" "this box, you will be able to do invoicing & payments,\n" " but not accounting (Journal Items, Chart of Accounts, ...)" msgstr "" +"Ez lehetővé teszi a személy vagy vállalat által birtokolt vagyoneszközök " +"nyilvántartását.\n" +" A vagyoneszközök értékcsökkenését követi nyomon, és " +"könyvelési számlák közt mozgatja ezeket az értékcsökkenő\n" +" tételeket.\n" +" Ez a account_asset (számla_eszköz) modult telepíti. Ha nem " +"jelöli be ezt a kockát, akkor tud számlázni & kifizetni,\n" +" de nem tud könyvelni (Napló tételeket, Számlatükröket, ...)" #. module: account #: help:account.bank.statement.line,name:0 msgid "Originator to Beneficiary Information" -msgstr "" +msgstr "Kezdeményezőtől a kedvezményezetthez intézett információ" #. module: account #. openerp-web @@ -446,6 +494,7 @@ msgstr "Számlatükör sablon" #: selection:account.invoice.refund,filter_refund:0 msgid "Modify: create refund, reconcile and create a new draft invoice" msgstr "" +"Módosít: visszatérítést, párosítást készít és új számla tervezetet hoz létre" #. module: account #: help:account.config.settings,tax_calculation_rounding_method:0 @@ -459,6 +508,16 @@ msgid "" "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 "" +"Ha kiválasztotta a 'Tétel soronkénti kerekítést' : mindegyik adóra, először " +"számítást és kerekítést végez minden egyes Beszerzési megrendelés " +"BM/Vásárlói megrendelés VM/számla tétel sorra és ezek a kerekített tételek " +"lesznek összegezve, így kialakítva a teljes adó értéket. Ha kiválasztotta a " +"'Teljes körű kerekítést': mindegyik adóra, először adó számítást végez " +"minden egyes Beszerzési megrendelés BM/Vásárlói megrendelés VM/számla tétel " +"sorra, melyek összegzésre kerülnek és végül ez a teljes adó összege lesz " +"kerekítve. Ha adóval együtt történik az eladás, akkor a 'Tétel soronkénti " +"kerekítést' válassza, mivel bizonyára azt szeretné, hogy az adóval növelt " +"tételsor összegei egyezzenek a teljes összeg adóval növel értékével." #. module: account #: model:ir.model,name:account.model_wizard_multi_charts_accounts @@ -473,12 +532,12 @@ msgstr "Az összeg egy választható más pénznemben kifejezve." #. module: account #: view:account.journal:0 msgid "Available Coins" -msgstr "" +msgstr "Rendelkezésre álló pénzérmék" #. module: account #: field:accounting.report,enable_filter:0 msgid "Enable Comparison" -msgstr "" +msgstr "Összehasonlítás bekapcsolása" #. module: account #: view:account.analytic.line:0 @@ -527,6 +586,7 @@ msgstr "Gyűjtő célszámla" #: help:account.invoice.line,sequence:0 msgid "Gives the sequence of this line when displaying the invoice." msgstr "" +"Ennek a tételsornak a sorszámát adja, amikor a számla kijelzésre kerül." #. module: account #: field:account.bank.statement,account_id:0 @@ -554,7 +614,7 @@ msgstr "Számlatükör kiválasztása" #. module: account #: model:ir.model,name:account.model_account_invoice_refund msgid "Invoice Refund" -msgstr "Jóváíró számla" +msgstr "Visszatérítési számla" #. module: account #: report:account.overdue:0 @@ -600,13 +660,13 @@ msgstr "Nincs párosítandó tétel" #. module: account #: field:account.config.settings,decimal_precision:0 msgid "Decimal precision on journal entries" -msgstr "" +msgstr "Tizedes pontosság a napló bevitt tételeinél" #. module: account #: selection:account.config.settings,period:0 #: selection:account.installer,period:0 msgid "3 Monthly" -msgstr "Negyedéves" +msgstr "3 havonta" #. module: account #: field:ir.sequence,fiscal_ids:0 @@ -626,6 +686,8 @@ msgid "" "Specified journal does not have any account move entries in draft state for " "this period." msgstr "" +"A kiválasztott napló nem rendelkezik tervezet állapotú számla mozgásokkal " +"erre az időszakra." #. module: account #: view:account.fiscal.position:0 @@ -648,7 +710,7 @@ msgstr "A fő sorszámnak el kell térnie az aktuálistól!" #: code:addons/account/wizard/account_change_currency.py:70 #, python-format msgid "Current currency is not configured properly." -msgstr "" +msgstr "A jelenlegi pénznem nincs megfelelően konfigurálva." #. module: account #: field:account.journal,profit_account_id:0 @@ -672,13 +734,13 @@ msgstr "Számlatípusonkénti értékesítési kimutatás" #: code:addons/account/account.py:3201 #, python-format msgid "SAJ" -msgstr "SAJ" +msgstr "Számlatípusonkénti értékesítés SZTÉ" #. module: account #: code:addons/account/account.py:1591 #, python-format msgid "Cannot create move with currency different from .." -msgstr "" +msgstr "Nem lehet mozgást végrehajtani, ha eltér a pénznem ettől .." #. module: account #: model:email.template,report_name:account.email_template_edi_invoice @@ -712,7 +774,7 @@ msgstr "Könyvelési időszak" #: constraint:account.move:0 msgid "" "You cannot create more than one move per period on a centralized journal." -msgstr "" +msgstr "Egy időszakra csak egy mozgatást végezhet a központosított naplón." #. module: account #: help:account.tax,account_analytic_paid_id:0 @@ -721,6 +783,9 @@ msgid "" "lines for refunds. Leave empty if you don't want to use an analytic account " "on the invoice tax lines by default." msgstr "" +"Állítsa be az analitikus számlát amit alapértelmezetten használ a számlák " +"adó tételsoraira a visszatérítéshez. Hagyja üresen, ha alapértelmezetten nem " +"szeretne analitikus számlát használni a számla adó tételsoraira." #. module: account #: view:account.account:0 @@ -733,17 +798,17 @@ msgstr "" #: code:addons/account/report/account_partner_ledger.py:272 #, python-format msgid "Receivable Accounts" -msgstr "Vevő számlák" +msgstr "Követelés számlák" #. module: account #: view:account.config.settings:0 msgid "Configure your company bank accounts" -msgstr "A cég bankszámláinak beállítása" +msgstr "A cége bankszámláinak beállítása" #. module: account #: view:account.invoice.refund:0 msgid "Create Refund" -msgstr "" +msgstr "Visszatérítés létrehozása" #. module: account #: constraint:account.move.line:0 @@ -773,7 +838,7 @@ msgstr "Biztos benne, hogy létre akarja hozni a tételeket?" #: code:addons/account/account_invoice.py:1361 #, python-format msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." -msgstr "" +msgstr "Számla részben fizetve: %s%s of %s%s (%s%s még maradt)." #. module: account #: view:account.invoice:0 @@ -787,6 +852,8 @@ msgid "" "Cannot %s invoice which is already reconciled, invoice should be " "unreconciled first. You can only refund this invoice." msgstr "" +"Nem lehet %s számlázni, mert párosítva van, először szüntesse meg a " +"párosítást. Ezt a számlát csak visszatérítheti." #. module: account #: selection:account.financial.report,display_detail:0 @@ -809,12 +876,12 @@ msgstr "Listák" #: model:ir.model,name:account.model_project_account_analytic_line #, python-format msgid "Analytic Entries by line" -msgstr "Soronkénti gyűjtőkód tételek" +msgstr "Soronkénti analitikus gyűjtőkód tételek" #. module: account #: field:account.invoice.refund,filter_refund:0 msgid "Refund Method" -msgstr "Jóváírás módja" +msgstr "Visszatérítés módja" #. module: account #: model:ir.ui.menu,name:account.menu_account_report @@ -846,12 +913,12 @@ msgid "" "Click on compute button." msgstr "" "Hiányzó adósor!\n" -"Kattintson a \"(Frissítés)\"-re az adó újraszámításához." +"Kattintson az \"(Újraszámol)\"-ra az adó újraszámításához." #. module: account #: model:ir.model,name:account.model_account_subscription_line msgid "Account Subscription Line" -msgstr "Előjegyzés sor" +msgstr "Számla előjegyzés tételsor" #. module: account #: help:account.invoice,reference:0 @@ -861,13 +928,13 @@ msgstr "A számla partner hivatkozása." #. module: account #: view:account.invoice.report:0 msgid "Supplier Invoices And Refunds" -msgstr "Szállítói számlák és jóváírások" +msgstr "Szállítói számlák és visszatérítések" #. module: account #: code:addons/account/account_move_line.py:851 #, python-format msgid "Entry is already reconciled." -msgstr "" +msgstr "A bevitt tétel már párosítva." #. module: account #: view:account.move.line.unreconcile.select:0 @@ -879,7 +946,7 @@ msgstr "Párosítás visszavonása" #. module: account #: model:ir.model,name:account.model_account_analytic_journal_report msgid "Account Analytic Journal" -msgstr "Gyűjtőnapló" +msgstr "Gyűjtőnapló számla" #. module: account #: view:account.invoice:0 @@ -895,6 +962,8 @@ msgid "" "Print Report with the currency column if the currency differs from the " "company currency." msgstr "" +"Kimutatás nyomtatása pénznem oszloppal, ha a pénznem eltér a vállalat " +"alapértelmezett pénznemétől." #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -944,6 +1013,9 @@ msgid "" " opening/closing fiscal " "year process." msgstr "" +"Nem tudja a jelentés tételének párosítását megszüntetni, ha az automatikusan " +"lett létrehozva a költségvetési üzleti év " +" nyitási/zárási műveleteikor." #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_new @@ -959,7 +1031,7 @@ msgstr "Számítás" #. module: account #: field:account.journal.cashbox.line,pieces:0 msgid "Values" -msgstr "Címlet" +msgstr "Értékek" #. module: account #: model:ir.actions.act_window,name:account.action_account_tax_chart @@ -971,7 +1043,7 @@ msgstr "Adókivonat" #. module: account #: view:account.fiscalyear:0 msgid "Create 3 Months Periods" -msgstr "Negyedéves időszakok létrehozása" +msgstr "Három havi időszakok létrehozása" #. module: account #: report:account.overdue:0 @@ -1004,14 +1076,14 @@ msgstr "Bruttó érték" #. module: account #: help:account.invoice,supplier_invoice_number:0 msgid "The reference of this invoice as provided by the supplier." -msgstr "" +msgstr "A beszállító által közölt számla hivatkozás." #. module: account #: selection:account.account,type:0 #: selection:account.account.template,type:0 #: selection:account.entries.report,type:0 msgid "Consolidation" -msgstr "Konszolidáció" +msgstr "Egyeztetettet mutat" #. module: account #: model:account.account.type,name:account.data_account_type_liability @@ -1024,12 +1096,12 @@ msgstr "Kötelezettség" #: code:addons/account/account_invoice.py:899 #, python-format msgid "Please define sequence on the journal related to this invoice." -msgstr "" +msgstr "Képezzen sorrendet a naplón ehhez a számlához." #. module: account #: view:account.entries.report:0 msgid "Extended Filters..." -msgstr "Kiterjesztett szűrők…" +msgstr "Kiterjesztett szűrők" #. module: account #: model:ir.ui.menu,name:account.menu_account_central_journal @@ -1039,7 +1111,7 @@ msgstr "Központi napló" #. module: account #: selection:account.journal,type:0 msgid "Sale Refund" -msgstr "Kimenő jóváíró számla" +msgstr "Kimenő visszatérítés számla" #. module: account #: model:process.node,note:account.process_node_accountingstatemententries0 @@ -1049,7 +1121,7 @@ msgstr "Bankkivonat" #. module: account #: field:account.analytic.line,move_id:0 msgid "Move Line" -msgstr "Tételsor" +msgstr "Tételsor mozgatás" #. module: account #: help:account.move.line,tax_amount:0 @@ -1059,12 +1131,12 @@ msgid "" "basic amount(without tax)." msgstr "" "Ha az adószámla egy adógyűjtő, akkor ez a mező az adó összegét tartalmazza, " -"ha adóalapgyűjtő, akkor az adóalap összegét." +"ha adóalapgyűjtő, akkor az adóalap összegét(adó nélkül)." #. module: account #: view:account.analytic.line:0 msgid "Purchases" -msgstr "Beszerzés" +msgstr "Beszerzések" #. module: account #: field:account.model,lines_id:0 @@ -1091,7 +1163,7 @@ msgstr "Kód" #. module: account #: view:account.config.settings:0 msgid "Features" -msgstr "" +msgstr "Jellemzők" #. module: account #: code:addons/account/account.py:2346 @@ -1109,7 +1181,7 @@ msgstr "Nincs gyűjtőnapló!" #: 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 "Folyószámla kivonat" +msgstr "Partner folyószámla kivonat" #. module: account #: model:ir.actions.act_window,help:account.action_account_gain_loss @@ -1127,6 +1199,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson könyvelési számla fiók hozzáadásához.\n" +"

\n" +" Ha többféle pénznem végez műveleteket, akkor veszíthet vagy " +"nyerhet\n" +" bizonyos összegeket az árfolyamváltozás miatt. Ez a menü " +"egy\n" +" előrejelzést ad a nyereségről vagy veszteségről az aznap\n" +" végrehajtott folyamatokról. Csak olyan számlákon, ahol van\n" +" másodlagos pénznem.\n" +"

\n" +" " #. module: account #: field:account.bank.accounts.wizard,acc_name:0 @@ -1144,11 +1228,13 @@ msgid "" "Check this box if you don't want any tax related to this tax code to appear " "on invoices" msgstr "" +"Jelölje be ezt a négyzetet, ha nem akarja ehhez az adógyűjtőhöz kapcsolatos " +"bármely adót feltüntetni ezen a számlán." #. module: account #: field:report.account.receivable,name:0 msgid "Week of Year" -msgstr "Hét" +msgstr "Az év hete" #. module: account #: field:account.report.general.ledger,landscape:0 @@ -1166,19 +1252,20 @@ msgid "" "These types are defined according to your country. The type contains more " "information about the account and its specificities." msgstr "" -"A számlatípus több információt tartalmaz a főkönyvi számláról és a " -"sajátosságairól." +"Ezek a típusok az országa szerint vannak meghatározva. A számlatípus több " +"információt tartalmaz a főkönyvi számláról és a sajátosságairól." #. module: account #: view:account.invoice:0 msgid "Refund " -msgstr "" +msgstr "Visszatérítés " #. 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 "" +"Nem lett kiadási számla meghatározva ehhez a termékhez: \"%s\" (id:%d)." #. module: account #: view:account.tax:0 @@ -1200,7 +1287,7 @@ msgstr "Pénztár" #. module: account #: field:account.config.settings,sale_refund_journal_id:0 msgid "Sale refund journal" -msgstr "" +msgstr "Visszatérítési napló" #. module: account #: model:ir.actions.act_window,help:account.action_view_bank_statement_tree @@ -1219,6 +1306,19 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új készpénz napló rögzítéshez.\n" +"

\n" +" A pénztárgép lehetővé teszi a beérkezett készpénzek készpénz " +"naplóban\n" +" való rögzítését.. Ez a tulajdonság elérhetővé teszi a " +"készpénzek napi szintű\n" +" nyomon követését. Rögzítheti a kazettában lévő " +"aprópénzeket,\n" +" és a kivét illetve betét után is feltöltheti a " +"pénzmozgásokat.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_bank @@ -1236,7 +1336,7 @@ msgstr "Időszak kezdete" #. module: account #: view:account.tax:0 msgid "Refunds" -msgstr "" +msgstr "Visszatérítés" #. module: account #: model:process.transition,name:account.process_transition_confirmstatementfromdraft0 @@ -1246,7 +1346,7 @@ msgstr "Kivonat jóváhagyása" #. module: account #: view:account.tax:0 msgid "Account Tax" -msgstr "Adó" +msgstr "Adó számla" #. module: account #: help:account.account,foreign_balance:0 @@ -1254,6 +1354,8 @@ msgid "" "Total amount (in Secondary currency) for transactions held in secondary " "currency for this account." msgstr "" +"Teljes összeg (a másodlagos pénznemben) erre a számlára a másodlagos " +"pénznemben történt tranzakciókra." #. module: account #: field:account.fiscal.position.tax,tax_dest_id:0 @@ -1278,6 +1380,8 @@ msgid "" "The amount expressed in the secondary currency must be positif when journal " "item are debit and negatif when journal item are credit." msgstr "" +"A másodlagos pénznemben kifejezett mennyiségnek pozitívnak kell lennie, ha a " +"napló tétel tartozás és negatív, ha a napló tétel követelés." #. module: account #: view:account.invoice.cancel:0 @@ -1287,12 +1391,12 @@ msgstr "Számlák érvénytelenítése" #. module: account #: help:account.journal,code:0 msgid "The code will be displayed on reports." -msgstr "" +msgstr "A kód meg lesz jelenítve a kimutatásokon." #. module: account #: view:account.tax.template:0 msgid "Taxes used in Purchases" -msgstr "" +msgstr "A beszerzéseknél felhasznált adók" #. module: account #: field:account.invoice.tax,tax_code_id:0 @@ -1306,7 +1410,7 @@ msgstr "Adókód" #. module: account #: field:account.account,currency_mode:0 msgid "Outgoing Currencies Rate" -msgstr "Csökkenéseknél használt árfolyam" +msgstr "" #. module: account #: view:account.analytic.account:0 @@ -1322,12 +1426,12 @@ msgstr "Helyzet" #. module: account #: help:account.move.line,move_id:0 msgid "The move of this entry line." -msgstr "A tételsor bizonylatszáma." +msgstr "" #. module: account #: field:account.move.line.reconcile,trans_nbr:0 msgid "# of Transaction" -msgstr "Tranzakció száma" +msgstr "# Tranzakció száma" #. module: account #: report:account.general.ledger:0 @@ -1335,7 +1439,7 @@ msgstr "Tranzakció száma" #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 msgid "Entry Label" -msgstr "Megjegyzés" +msgstr "Belépési megnevezés" #. module: account #: help:account.invoice,origin:0 @@ -1347,12 +1451,12 @@ msgstr "Bizonylat, amely előállította ezt a számlát." #: view:account.analytic.line:0 #: view:account.journal:0 msgid "Others" -msgstr "Egyéb" +msgstr "Egyebek" #. module: account #: view:account.subscription:0 msgid "Draft Subscription" -msgstr "" +msgstr "Feliratkozási vázlat" #. module: account #: view:account.account:0 @@ -1404,7 +1508,7 @@ msgstr "Szint" #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice." -msgstr "" +msgstr "Csak a tervezet számlának tudja megváltoztatni a pénznemét." #. module: account #: report:account.invoice:0 @@ -1430,7 +1534,7 @@ msgstr "Válassza ki a kezdő és a záró időszakot" #: 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 "Eredménykimutatás" +msgstr "Eredménykimutatás (Nyereség/Veszteség)" #. module: account #: model:ir.model,name:account.model_account_account_template @@ -1475,7 +1579,7 @@ msgstr "Listázási beállítások" #. module: account #: field:account.fiscalyear.close.state,fy_id:0 msgid "Fiscal Year to Close" -msgstr "" +msgstr "Bezárni kívánt üzleti év" #. module: account #: field:account.config.settings,sale_sequence_prefix:0 @@ -1499,6 +1603,9 @@ msgid "" "And after getting confirmation from the bank it will be in 'Confirmed' " "status." msgstr "" +"Ha új bizonylat lett létrehozva akkor annak állapota 'Tervezet' lesz.\n" +"Miután a banktól megkaptuk a visszaigazolást, az állapot 'Visszaigazolt' " +"lesz." #. module: account #: field:account.invoice.report,state:0 @@ -1512,12 +1619,12 @@ msgstr "Számla állapota" #: model:process.node,name:account.process_node_bankstatement0 #: model:process.node,name:account.process_node_supplierbankstatement0 msgid "Bank Statement" -msgstr "Bankkivonat" +msgstr "Bankszámlakivonat" #. module: account #: field:res.partner,property_account_receivable:0 msgid "Account Receivable" -msgstr "Vevő számla" +msgstr "Vevői, követelés számla" #. module: account #: code:addons/account/account.py:612 @@ -1544,6 +1651,8 @@ msgid "" "There is no default debit account defined \n" "on journal \"%s\"." msgstr "" +"Nincs alapértelmezett tartozás számla meghatározva \n" +"a könyvelési naplón \"%s\"." #. module: account #: view:account.tax:0 @@ -1553,7 +1662,7 @@ msgstr "Adók keresése" #. module: account #: model:ir.model,name:account.model_account_analytic_cost_ledger msgid "Account Analytic Cost Ledger" -msgstr "Gyűjtőkód karton" +msgstr "Analitikus költség könyvitel számla" #. module: account #: view:account.model:0 @@ -1563,7 +1672,7 @@ msgstr "Tételek létrehozása" #. module: account #: field:account.entries.report,nbr:0 msgid "# of Items" -msgstr "Tételek száma" +msgstr "# tételekből" #. module: account #: field:account.automatic.reconcile,max_amount:0 @@ -1578,35 +1687,37 @@ msgid "" "There is nothing to reconcile. All invoices and payments\n" " have been reconciled, your partner balance is clean." msgstr "" +"Nincs mit párosítani. Minden számla és fizetés\n" +" párosítva lett, az üzleti partner egyenlege tiszta." #. 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 "Számjegyek száma" +msgstr "# számlyegyek száma" #. module: account #: field:account.journal,entry_posted:0 msgid "Skip 'Draft' State for Manual Entries" -msgstr "Azonnali könyvelés" +msgstr "'Tervezet' átugrása azonnali könyveléshez" #. 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 "" +msgstr "Nincs végrehajtva." #. module: account #: view:account.invoice.refund:0 msgid "Credit Note" -msgstr "Jóváírás" +msgstr "Jóváírás, visszatérítés jegyzék" #. module: account #: view:account.config.settings:0 msgid "eInvoicing & Payments" -msgstr "Számlázás & Kifizetések" +msgstr "eSzámlázás & Kifizetések" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 @@ -1616,7 +1727,7 @@ msgstr "Gyűjtőkód karton az alábbi időszakra" #. module: account #: view:account.entries.report:0 msgid "# of Entries " -msgstr "Tételek száma " +msgstr "# Tételek számából " #. module: account #: help:account.fiscal.position,active:0 @@ -1624,6 +1735,8 @@ msgid "" "By unchecking the active field, you may hide a fiscal position without " "deleting it." msgstr "" +"Az aktív mező üresen hagyásával, eltüntetheti az ÁFA helyét, annak törlése " +"nélkül." #. module: account #: model:ir.model,name:account.model_temp_range @@ -1634,7 +1747,7 @@ msgstr "Vezérlőpult nézet ideiglenes táblázata" #: model:ir.actions.act_window,name:account.action_invoice_tree4 #: model:ir.ui.menu,name:account.menu_action_invoice_tree4 msgid "Supplier Refunds" -msgstr "Bejövő jóváíró számlák" +msgstr "Beszállítói, bejövő jóváíró számlák" #. module: account #: field:account.tax.code,code:0 @@ -1645,7 +1758,7 @@ msgstr "Adógyűjtő kód" #. module: account #: field:account.config.settings,company_footer:0 msgid "Bank accounts footer preview" -msgstr "" +msgstr "Bankszámlaszámok a lápjegyzet előnézethez" #. module: account #: selection:account.account,type:0 @@ -1681,7 +1794,7 @@ msgstr "Csoportok" #. module: account #: field:report.invoice.created,amount_untaxed:0 msgid "Untaxed" -msgstr "Nettó érték" +msgstr "Nem adózott, nettó érték" #. module: account #: view:account.journal:0 @@ -1696,19 +1809,19 @@ msgstr "Bankkivonatok keresése" #. module: account #: view:account.move.line:0 msgid "Unposted Journal Items" -msgstr "" +msgstr "Feladatlan napló tételek" #. module: account #: view:account.chart.template:0 #: field:account.chart.template,property_account_payable:0 msgid "Payable Account" -msgstr "Szállító főkönyvi számla" +msgstr "" #. module: account #: field:account.tax,account_paid_id:0 #: field:account.tax.template,account_paid_id:0 msgid "Refund Tax Account" -msgstr "Adó főkönyvi számla (jóváíró szlák)" +msgstr "Adó főkönyvi számla (jóváíró visszetérítések szlák)" #. module: account #: model:ir.model,name:account.model_ir_sequence @@ -1719,12 +1832,12 @@ msgstr "ir.sequence" #: view:account.bank.statement:0 #: field:account.bank.statement,line_ids:0 msgid "Statement lines" -msgstr "Kivonatsorok" +msgstr "Kivonat sorok" #. module: account #: report:account.analytic.account.cost_ledger:0 msgid "Date/Code" -msgstr "Dátum/Kód" +msgstr "Dátum/kód" #. module: account #: field:account.analytic.line,general_account_id:0 @@ -1755,6 +1868,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új számla típus létrehozásához.\n" +"

\n" +" Egy számla típus azt határozza meg, hogy azt hogyan " +"használják\n" +" a naplókban. A számla típus alkalmazás módszer határozza meg " +"az\n" +" éves elszámolás számítási módszerét. Az egyenleg kimutatások " +"\n" +" és a nyereség és veszteség kimutatás használja a " +"kategóriákat\n" +" (nyereség/veszteség vagy egyenleg kimuttás).\n" +"

\n" +" " #. module: account #: report:account.invoice:0 @@ -1777,7 +1904,7 @@ msgstr "egyenleg" #: model:process.node,note:account.process_node_analytic0 #: model:process.node,note:account.process_node_analyticcost0 msgid "Analytic costs to invoice" -msgstr "Kiszámlázandó költségek" +msgstr "Kiszámlázandó analitikus költségek" #. module: account #: view:ir.sequence:0 @@ -1787,7 +1914,7 @@ msgstr "Üzleti év sorszám" #. module: account #: field:account.config.settings,group_analytic_accounting:0 msgid "Analytic accounting" -msgstr "" +msgstr "Analitikus számla" #. module: account #: report:account.overdue:0 @@ -1806,6 +1933,16 @@ msgid "" "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 "" +"Ha kiválasztotta a 'Tétel soronkénti kerekítést' : mindegyik adóra, először " +"számítást és kerekítést végez minden egyes Beszerzési megrendelés " +"BM/Vásárlói megrendelés VM/számla tétel sorra és ezek a kerekített tételek " +"lesznek összegezve, így kialakítva a teljes adó értéket. Ha kiválasztotta a " +"'Teljes körű kerekítést': mindegyik adóra, először adó számítást végez " +"minden egyes Beszerzési megrendelés BM/Vásárlói megrendelés VM/számla tétel " +"sorra, melyek összegzésre kerülnek és végül ez a teljes adó összege lesz " +"kerekítve. Ha adóval együtt történik az eladás, akkor a 'Tétel soronkénti " +"kerekítést' válassza, mivel bizonyára azt szeretné, hogy az adóval növelt " +"tételsor összegei egyezzenek a teljes összeg adóval növel értékével." #. module: account #: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all @@ -1837,12 +1974,14 @@ msgid "" "The journal must have centralized counterpart without the Skipping draft " "state option checked." msgstr "" +"A naplónak a vázlat állapot átugrás lehetőség beállítása nélküli központi " +"ellenpéldánnyal kell rendelkeznie." #. module: account #: code:addons/account/account_move_line.py:854 #, python-format msgid "Some entries are already reconciled." -msgstr "" +msgstr "Egyes tételek már párosítva lettek." #. module: account #: field:account.tax.code,sum:0 @@ -1860,16 +1999,18 @@ msgid "" "Select a configuration package to setup automatically your\n" " taxes and chart of accounts." msgstr "" +"Beállítási csomagot válasszon az automatikus adó és számlatükör\n" +" beállításokhoz." #. module: account #: view:account.analytic.account:0 msgid "Pending Accounts" -msgstr "" +msgstr "Függőben lévő számlák" #. module: account #: view:account.open.closed.fiscalyear:0 msgid "Cancel Fiscal Year Opening Entries" -msgstr "" +msgstr "Üzleti év nyitó tételeinek eldobása" #. module: account #: report:account.journal.period.print.sale.purchase:0 @@ -1883,7 +2024,8 @@ msgid "" "If the active field is set to False, it will allow you to hide the journal " "period without removing it." msgstr "" -"Ha az aktív mező nincs bejelölve, nem használható a könyvelési időszak." +"Ha az aktív mező hamisra van állítva, lehetősége van a napló időszak " +"eltüntetésére annak törlése nélkül." #. module: account #: field:account.report.general.ledger,sortby:0 @@ -1893,12 +2035,12 @@ msgstr "Rendezés" #. module: account #: model:ir.actions.act_window,name:account.act_account_partner_account_move_all msgid "Receivables & Payables" -msgstr "Vevőkövetelések és szállítói tartozások" +msgstr "Vevőkövetelések (Bevételek) és szállítói tartozások (kiadások)" #. module: account #: field:account.config.settings,module_account_payment:0 msgid "Manage payment orders" -msgstr "" +msgstr "Átutalási megbízások kezelése" #. module: account #: view:account.period:0 @@ -1919,12 +2061,12 @@ msgstr "Általános naplókimutatás" #. module: account #: selection:account.partner.balance,display_partner:0 msgid "All Partners" -msgstr "Minden partner" +msgstr "Összes partner" #. module: account #: view:account.analytic.chart:0 msgid "Analytic Account Charts" -msgstr "Gyűjtőkód lista" +msgstr "Analitikus számla gyűjtőkód lista" #. module: account #: report:account.overdue:0 @@ -1941,7 +2083,7 @@ msgstr "Vevő hiv.:" #: 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 "" +msgstr "Adóbevallásnál használja ezt a kódot." #. module: account #: help:account.period,special:0 @@ -1956,12 +2098,12 @@ msgstr "Tervezet állapotú kivonat" #. module: account #: model:mail.message.subtype,description:account.mt_invoice_validated msgid "Invoice validated" -msgstr "" +msgstr "Számla jóváhagyva" #. module: account #: field:account.config.settings,module_account_check_writing:0 msgid "Pay your suppliers by check" -msgstr "" +msgstr "Fizesse a beszállítóit csekkel" #. module: account #: field:account.move.line.reconcile,credit:0 @@ -1984,6 +2126,12 @@ msgid "" "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 "" +"Ez a menü az adó bevallást nyomtatja a számlák és kifizetések alapján. Egy " +"vagy több időintervallumot válasszon egy üzleti évből. Az adó bevalláshoz az " +"információkat az OpenERP automatikusan létrehozza a számlákból (vagy " +"kifizetésekből, egyes országokban). Ezek az adatok valós időben frissülnek. " +"Ez nagyon hasznos, mivel lehetővé teszi az adók lekérdezését egy havi vagy " +"negyedéves időszak elejénél és végénél." #. module: account #: code:addons/account/account.py:409 @@ -2039,7 +2187,7 @@ msgstr "" #: code:addons/account/wizard/pos_box.py:35 #, python-format msgid "Error!" -msgstr "" +msgstr "Hiba!" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree2 @@ -2054,6 +2202,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson egy új beszállítói számla felviteléhez.\n" +"

\n" +" Figyelemmel kísérheti a beszállítótól érkezett számlákat\n" +" attól függően, hogy mit vásárolt vagy mi érkezett be. \n" +" OpenERP létre tud hozni számla vázlatokat automatikusan\n" +" a beszerzési megrendelésből vagy vásárlási nyuktákból.\n" +"

\n" +" " #. module: account #: sql_constraint:account.move.line:0 @@ -2070,7 +2227,7 @@ msgstr "Számlák elemzése" #. module: account #: model:ir.model,name:account.model_mail_compose_message msgid "Email composition wizard" -msgstr "" +msgstr "Email összeállító varázsló" #. module: account #: model:ir.model,name:account.model_account_period_close @@ -2084,6 +2241,8 @@ msgid "" "This journal already contains items for this period, therefore you cannot " "modify its company field." msgstr "" +"Ez a napló már tartalmaz tételt erre a időszakaszra, ezért nem tudja " +"módosítani a vállalat mezőt." #. module: account #: model:ir.actions.act_window,name:account.action_project_account_analytic_line_form @@ -2093,7 +2252,7 @@ msgstr "Soronkénti tételek" #. module: account #: field:account.vat.declaration,based_on:0 msgid "Based on" -msgstr "" +msgstr "Alapján" #. module: account #: model:ir.actions.act_window,help:account.action_bank_statement_tree @@ -2112,11 +2271,23 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson egy banki kivonat iktatásához.\n" +"

\n" +" Egy banki kivonat a pénzügyi tranzakciók összegzése\n" +" egy a banki számlán megadott időintervallumra. Ezt\n" +" időszakosan küldi a bank.\n" +"

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

\n" +" " #. module: account #: field:account.config.settings,currency_id:0 msgid "Default company currency" -msgstr "" +msgstr "A Vállalkozás alapértelmezett pénzneme" #. module: account #: field:account.invoice,move_id:0 @@ -2141,13 +2312,13 @@ msgstr "Pénzeszközök elemzése" #. module: account #: model:ir.actions.report.xml,name:account.account_journal_sale_purchase msgid "Sale/Purchase Journal" -msgstr "" +msgstr "Értékesítés/Beszerzés napló" #. module: account #: view:account.analytic.account:0 #: field:account.invoice.tax,account_analytic_id:0 msgid "Analytic account" -msgstr "Gyűjtőkód" +msgstr "Analitikus könyvelési számla" #. module: account #: code:addons/account/account_bank_statement.py:406 @@ -2165,18 +2336,18 @@ msgstr "Érvényes" #: field:account.bank.statement,message_follower_ids:0 #: field:account.invoice,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Követők" #. 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 "Naplók nyomtatása" +msgstr "Főkönyvi naplók nyomtatása" #. module: account #: model:ir.model,name:account.model_product_category msgid "Product Category" -msgstr "Termék kategória" +msgstr "Termékkategória" #. module: account #: code:addons/account/account.py:656 @@ -2185,6 +2356,8 @@ msgid "" "You cannot change the type of account to '%s' type as it contains journal " "items!" msgstr "" +"Nem változtathatja meg a főkönyvi számla típusát erre '%s' típusra, mivel " +"napló tételeket tartalmaz!" #. module: account #: model:ir.model,name:account.model_account_aged_trial_balance @@ -2194,19 +2367,20 @@ msgstr "Korosított folyószámla kivonat" #. module: account #: view:account.fiscalyear.close.state:0 msgid "Close Fiscal Year" -msgstr "" +msgstr "Üzleti év lezárása" #. module: account #. openerp-web #: code:addons/account/static/src/xml/account_move_line_quickadd.xml:14 #, python-format msgid "Journal :" -msgstr "" +msgstr "Napló :" #. module: account #: sql_constraint:account.fiscal.position.tax:0 msgid "A tax fiscal position could be defined only once time on same taxes." msgstr "" +"Az adó adóügyi pozíciója csak egyszer határozható meg ugyanarra az adóra." #. module: account #: view:account.tax:0 @@ -2218,12 +2392,12 @@ msgstr "Adó meghatározása" #: view:account.config.settings:0 #: model:ir.actions.act_window,name:account.action_account_config msgid "Configure Accounting" -msgstr "" +msgstr "Könyvelés kialakítása" #. module: account #: field:account.invoice.report,uom_name:0 msgid "Reference Unit of Measure" -msgstr "" +msgstr "Referencia mértékegység" #. module: account #: help:account.journal,allow_date:0 @@ -2239,7 +2413,7 @@ msgstr "" #: code:addons/account/static/src/xml/account_move_reconciliation.xml:8 #, python-format msgid "Good job!" -msgstr "" +msgstr "Szép munka!" #. module: account #: field:account.config.settings,module_account_asset:0 @@ -2258,7 +2432,7 @@ msgstr "" #: code:addons/account/report/account_partner_ledger.py:274 #, python-format msgid "Payable Accounts" -msgstr "Szállító számlák" +msgstr "Kötelezettség számlák" #. module: account #: constraint:account.move.line:0 @@ -2267,6 +2441,9 @@ msgid "" "currency. You should remove the secondary currency on the account or select " "a multi-currency view on the journal." msgstr "" +"A napló tétel kiválasztott könyvelési tételei másik pénznem használatát " +"kényszerítik. El kell távolítania a másodlagos pénznemet a tétel számláról " +"vagy válasszon több-pénznemes nézetet a naplón." #. module: account #: view:account.invoice:0 @@ -2279,17 +2456,19 @@ msgstr "Nettó érték" msgid "" "If the active field is set to False, it will allow you to hide the tax " "without removing it." -msgstr "Ha az aktív mező nincs bejelölve, nem használható az adó." +msgstr "" +"Ha az aktív mező nincs bejelölve, eltüntetheti az adó értéket annak törlése " +"nélkül." #. module: account #: view:account.analytic.line:0 msgid "Analytic Journal Items related to a sale journal." -msgstr "" +msgstr "Értékesítési naplóval kapcsolatban álló analitikai napló tételek." #. module: account #: selection:account.financial.report,style_overwrite:0 msgid "Italic Text (smaller)" -msgstr "" +msgstr "Italic szövegméret (kisebb)" #. module: account #: help:account.journal,cash_control:0 @@ -2297,6 +2476,7 @@ msgid "" "If you want the journal should be control at opening/closing, check this " "option" msgstr "" +"Ha a napló vezérlést a nyitásnál/zárásnál szeretné, jelölje ezt a lehetőséget" #. module: account #: view:account.bank.statement:0 @@ -2347,7 +2527,7 @@ msgstr "Párosítandó számlák" #. module: account #: model:process.transition,note:account.process_transition_filestatement0 msgid "Import of the statement in the system from an electronic file" -msgstr "File-ból kivonat importálása a rendszerbe" +msgstr "Fájlból banki kivonat importálása a rendszerbe" #. module: account #: model:process.node,name:account.process_node_importinvoice0 @@ -2366,7 +2546,7 @@ msgstr "Január" #. module: account #: view:account.entries.report:0 msgid "This F.Year" -msgstr "Tárgyév" +msgstr "Ez az Üzleti év" #. module: account #: view:account.tax.chart:0 @@ -2377,18 +2557,18 @@ msgstr "Adókivonatok" #: 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 "30 nap" +msgstr "30 nap nettó" #. module: account #: code:addons/account/account_cash_statement.py:256 #, python-format msgid "You do not have rights to open this %s journal !" -msgstr "" +msgstr "Nincs hozááférési joge ehez a %s naplóhoz !" #. module: account #: model:res.groups,name:account.group_supplier_inv_check_total msgid "Check Total on supplier invoices" -msgstr "" +msgstr "Ellenőrizze a végösszeget ezeken a beszállítói számlákon" #. module: account #: selection:account.invoice,state:0 @@ -2396,7 +2576,7 @@ msgstr "" #: selection:account.invoice.report,state:0 #: selection:report.invoice.created,state:0 msgid "Pro-forma" -msgstr "Pro forma" +msgstr "Pro-forma" #. module: account #: help:account.account.template,type:0 @@ -2422,7 +2602,7 @@ msgstr "Számlatükör sablon keresése" #. module: account #: report:account.invoice:0 msgid "Customer Code" -msgstr "" +msgstr "Vevő kód" #. module: account #: view:account.account.type:0 @@ -2451,7 +2631,7 @@ msgstr "Ár tartalmazza az adót" #: view:account.subscription:0 #: selection:account.subscription,state:0 msgid "Running" -msgstr "Futó" +msgstr "Folyamatban lévő" #. module: account #: view:account.chart.template:0 @@ -2464,6 +2644,8 @@ msgstr "Árbevétel főkönyvi számla" #: help:account.config.settings,default_sale_tax:0 msgid "This sale tax will be assigned by default on new products." msgstr "" +"Ez az értékesítési adó lesz alapértelmezetten hozzárendelve az új " +"termékekhez." #. module: account #: report:account.general.ledger_landscape:0 @@ -2475,12 +2657,12 @@ msgstr "Tételek sorbarendezésének alapja" #. module: account #: field:account.change.currency,currency_id:0 msgid "Change to" -msgstr "Új pénznem" +msgstr "" #. module: account #: view:account.entries.report:0 msgid "# of Products Qty " -msgstr "Termékmennyiség " +msgstr "# Termékmennyiség " #. module: account #: model:ir.model,name:account.model_product_template @@ -2544,7 +2726,7 @@ msgstr "Üzleti év" #: help:accounting.report,fiscalyear_id:0 #: help:accounting.report,fiscalyear_id_cmp:0 msgid "Keep empty for all open fiscal year" -msgstr "Hagyja üresen, ha minden nyitott évre akarja listázni" +msgstr "Hagyja üresen, ha minden nyitott üzleti évre akarja listázni" #. module: account #: code:addons/account/account.py:653 @@ -2553,11 +2735,13 @@ msgid "" "You cannot change the type of account from 'Closed' to any other type as it " "contains journal items!" msgstr "" +"Nem változtathatja meg a 'Lezárt' állapotú főkönyvi számlát más típusra, " +"mivel napló tételeket tartalmaz!" #. module: account #: field:account.invoice.report,account_line_id:0 msgid "Account Line" -msgstr "" +msgstr "Főkönyvi számla tétel" #. module: account #: view:account.addtmpl.wizard:0 @@ -2573,6 +2757,11 @@ msgid "" "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 "" +"Nem hozható létre számla.\n" +"Az ide vonatkozó fizetési feltétel lehetséges hogy félrekonfigurált, mivel a " +"számított mennyiség nagyobb mint a számlázott végösszeg. Kerekítésből " +"származó hibák elkerülésére, a fizetési feltétel utolsó tételének 'egyenleg' " +"típusnak kell lennie." #. module: account #: view:account.move:0 @@ -2592,6 +2781,8 @@ msgid "" "In order to delete a bank statement, you must first cancel it to delete " "related journal items." msgstr "" +"Banki kivonat törléséhez, először vonja vissza, hogy törölni tudja az ide " +"vonatkozó napló tételeket." #. module: account #: field:account.invoice.report,payment_term:0 @@ -2614,6 +2805,7 @@ msgstr "ÁFA pozíciók" #, python-format msgid "You cannot create journal items on a closed account %s %s." msgstr "" +"Nem tud napló tételeket létrehozni egy lezárt könyvelési számlán %s %s." #. module: account #: field:account.period.close,sure:0 @@ -2629,17 +2821,17 @@ msgstr "Szűrők" #: model:process.node,note:account.process_node_draftinvoices0 #: model:process.node,note:account.process_node_supplierdraftinvoices0 msgid "Draft state of an invoice" -msgstr "A számla tervezet állapota" +msgstr "Egy számla tervezet állapota" #. module: account #: view:product.category:0 msgid "Account Properties" -msgstr "" +msgstr "Főkönyvi számla tulajdonságai" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Create a draft refund" -msgstr "" +msgstr "Visszatérítés vázlat számla készítése" #. module: account #: view:account.partner.reconcile.process:0 @@ -2649,7 +2841,7 @@ msgstr "Partner párosítás" #. module: account #: view:account.analytic.line:0 msgid "Fin. Account" -msgstr "" +msgstr "Pénzügyi számla" #. module: account #: field:account.tax,tax_code_id:0 @@ -2661,7 +2853,7 @@ msgstr "Adógyűjtő kód" #: 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 "" +msgstr "30% előrefizetés 30 napon belül" #. module: account #: view:account.entries.report:0 @@ -2690,7 +2882,7 @@ msgstr "Adóalapgyűjtő előjel" #. module: account #: selection:account.move.line,centralisation:0 msgid "Debit Centralisation" -msgstr "Közös tartozik ellenszámla" +msgstr "" #. module: account #: view:account.invoice.confirm:0 @@ -2715,7 +2907,7 @@ msgstr "Megújítandó számlák" #. module: account #: model:ir.model,name:account.model_account_model_line msgid "Account Model Entries" -msgstr "Modelltételek" +msgstr "" #. module: account #: code:addons/account/account.py:3202 @@ -2726,12 +2918,12 @@ msgstr "EXJ" #. module: account #: field:product.template,supplier_taxes_id:0 msgid "Supplier Taxes" -msgstr "Beszerzési adók" +msgstr "Beszerzések adói" #. module: account #: view:res.partner:0 msgid "Bank Details" -msgstr "Bankadatok" +msgstr "Bank adatok" #. module: account #: model:ir.actions.act_window,help:account.action_move_journal_line @@ -2752,6 +2944,21 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson napló bejegyzés készítéséhez.\n" +"

\n" +" Egy napló bejegyzés több napló tételt tartalmazhat, melyek " +"lehetnek\n" +" tartozás vagy követelés ügylet.\n" +"

\n" +" Automatikusan létrehoz napló tételeket minden \n" +" könyvelési dokumentumhoz: számla, visszatérítés, beszállítók " +"kifizetése, banki kivonatok,\n" +" stb. így, napló tételeket kézzel általában/csak egyéb " +"művelet esetén\n" +" képezzen.\n" +"

\n" +" " #. module: account #: help:account.invoice,payment_term:0 @@ -2813,7 +3020,7 @@ msgstr "ÁFA" #: field:account.move.line,analytic_account_id:0 #: field:account.move.line.reconcile.writeoff,analytic_id:0 msgid "Analytic Account" -msgstr "Gyűjtőkód" +msgstr "Analitikus könyvelés" #. module: account #: field:account.config.settings,default_purchase_tax:0 @@ -2963,6 +3170,22 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új adóügyi év létrehozásához.\n" +"

\n" +" Határozza meg a vállalkozása üzleti évét a kívánságainak " +"megfelelően.\n" +" Egy üzleti év egy idő periódus, aminek a végén a vállalkozás " +"könyvelése\n" +" elszámolásra kerül (általában 12 hónap). Az üzleti év arra a " +"dátumra\n" +" hivatkozik általában ahol az véget ér. Például,\n" +" ha a vállalkozás pénzügyi üzleti éve 2011 november 30-ára " +"esik, akkor\n" +" minden ami 2010 december 1 és 2011 november 30 közé esik\n" +" azt hívjuk 2011 évi üzleti/pénzügyi/adóügyi évnek.\n" +"

\n" +" " #. module: account #: view:account.common.report:0 @@ -3075,7 +3298,7 @@ msgstr "" #: code:addons/account/account_move_line.py:195 #, python-format msgid "You have to define an analytic journal on the '%s' journal!" -msgstr "A(z) '%s' naplóhoz meg kell határoznia egy gyűjtőnaplót!" +msgstr "A(z) '%s' naplóhoz meg kell határoznia egy analitikai gyűjtő naplót!" #. module: account #: code:addons/account/account.py:781 @@ -3405,7 +3628,7 @@ msgstr "BNK" #. module: account #: field:account.move.line,analytic_lines:0 msgid "Analytic lines" -msgstr "Gyűjtőkód tételek" +msgstr "analitikai gyűjtőkód tételek" #. module: account #: view:account.invoice:0 @@ -3912,6 +4135,8 @@ msgid "" "There is no fiscal year defined for this date.\n" "Please create one from the configuration of the accounting menu." msgstr "" +"Erre a dátumra nem lett üzleti adóügyi év meghatározva.\n" +"Kérem hozzon létre egyet a könyvelési menü beállítása menüpont alatt." #. module: account #: view:account.addtmpl.wizard:0 @@ -4152,7 +4377,7 @@ msgstr "" #. module: account #: view:account.analytic.line:0 msgid "Search Analytic Lines" -msgstr "Gyűjtőkód tételek keresése" +msgstr "analitikai gyűjtőkód tételek keresése" #. module: account #: field:res.partner,property_account_payable:0 @@ -4185,7 +4410,7 @@ msgstr "Egységár" #. module: account #: model:ir.actions.act_window,name:account.action_account_tree1 msgid "Analytic Items" -msgstr "Gyűjtőkód tételek" +msgstr "Analitikai gyűjtőkód tételek" #. module: account #: field:analytic.entries.report,nbr:0 @@ -4261,7 +4486,7 @@ msgstr "" #. module: account #: help:account.journal,analytic_journal_id:0 msgid "Journal for analytic entries" -msgstr "Gyűjtőkód tételek naplója" +msgstr "Analitikai gyűjtőkód tételek naplója" #. module: account #: constraint:account.aged.trial.balance:0 @@ -4282,6 +4507,8 @@ msgid "" "The fiscalyear, periods or chart of account chosen have to belong to the " "same company." msgstr "" +"Az üzelti adóügyi év, periódus vagy számlatükör kiválasztása ugyanarra a " +"vállalkozásra kell, hogy vonatkozzon." #. module: account #: help:account.tax.code.template,notprintable:0 @@ -4414,7 +4641,7 @@ msgstr "" #. module: account #: field:account.tax,account_analytic_collected_id:0 msgid "Invoice Tax Analytic Account" -msgstr "" +msgstr "Számla adó tartalmának analitikus könyvelése" #. module: account #: field:account.chart,period_from:0 @@ -4444,7 +4671,7 @@ msgstr "30 nap, hó vége" #: 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 "Gyűjtőkód kivonat" +msgstr "Analitikus gyűjtőkód számlaegyenleg" #. module: account #: help:res.partner,property_payment_term:0 @@ -4531,7 +4758,7 @@ msgstr "A kiválasztott számlák érvénytelenítése" #: code:addons/account/account_bank_statement.py:424 #, python-format msgid "You have to assign an analytic journal on the '%s' journal!" -msgstr "" +msgstr "Egy analitikai gyűjtőkód naplót kell kijelölni ezen a '%s' naplón!" #. module: account #: model:process.transition,note:account.process_transition_supplieranalyticcost0 @@ -4539,8 +4766,9 @@ msgid "" "Analytic costs (timesheets, some purchased products, ...) come from analytic " "accounts. These generate draft supplier invoices." msgstr "" -"A költségek a gyűjtőkódokból származnak. Ezek állítják elő a tervezet " -"állapotú bejövő számlákat." +"Analitikus költségek (időkimutatásokból, egyes beszerzett termékből, ..) " +"származnak. Ezek állítják elő a tervezet állapotú bejövő beszállítói " +"számlákat." #. module: account #: model:ir.actions.act_window,help:account.action_bank_tree @@ -4892,7 +5120,7 @@ msgstr "ECNJ" #. module: account #: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report msgid "Account Analytic Cost Ledger For Journal Report" -msgstr "Gyűjtőkód karton" +msgstr "Gyűjtőszámla az analitikus költség naplóhoz" #. module: account #: model:ir.actions.act_window,name:account.action_model_form @@ -5120,6 +5348,9 @@ msgid "" "account if this is a Customer Invoice or Supplier Refund, otherwise a " "Partner bank account number." msgstr "" +"Bank számla szám melyre a számla ki lesz egyenlítve. Kimenő vásárlói számla " +"vagy beszerzési jóváírás esetén a vállalkozás bankszámlája, egyéb esetben az " +"üzleti partner bank számla száma." #. module: account #: field:account.partner.reconcile.process,today_reconciled:0 @@ -5332,7 +5563,7 @@ msgstr "Jelölje be, ha az ár tartalmazza az ÁFÁ-t." #. module: account #: report:account.analytic.account.balance:0 msgid "Analytic Balance -" -msgstr "Gyűjtőkód kivonat -" +msgstr "analitikus gyűjtőkód számlaegyenleg -" #. module: account #: report:account.account.balance:0 @@ -5781,7 +6012,7 @@ msgstr "Záró/nyitó napló" #. module: account #: view:account.invoice:0 msgid "Draft Refund " -msgstr "" +msgstr "Visszetérítés vázlat " #. module: account #: view:cash.box.in:0 @@ -5852,12 +6083,12 @@ msgstr "" #: 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 "Gyűjtőkódok" +msgstr "Analitikus gyűjtőkódok" #. module: account #: view:account.invoice.report:0 msgid "Customer Invoices And Refunds" -msgstr "" +msgstr "Ügyfél számlák és visszatérítések" #. module: account #: field:account.analytic.line,amount_currency:0 @@ -5931,7 +6162,7 @@ msgstr "ÁFA pozíció sablon" #. module: account #: view:account.invoice:0 msgid "Draft Refund" -msgstr "" +msgstr "Visszetérítés vázlat" #. module: account #: view:account.analytic.chart:0 @@ -6020,7 +6251,7 @@ msgstr "Létrehozás dátuma" #: 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 "Gyűjtőnaplók" +msgstr "Analitikus gyűjtőnaplók" #. module: account #: field:account.account,child_id:0 @@ -6123,7 +6354,7 @@ msgstr "Max menny:" #: view:account.invoice:0 #: model:ir.actions.act_window,name:account.action_account_invoice_refund msgid "Refund Invoice" -msgstr "Jóváíró számla" +msgstr "Jóváíró visszatérítés számla" #. module: account #: model:ir.actions.act_window,help:account.action_account_entries_report_all @@ -6332,7 +6563,7 @@ msgstr "ÁFA pozíció megjegyzés :" #: 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 "Gyűjtőkód tételek elemzése" +msgstr "Analitikus gyűjtőkód tételek elemzése" #. module: account #: selection:account.aged.trial.balance,direction_selection:0 @@ -6349,7 +6580,7 @@ msgstr "" #. module: account #: view:account.analytic.line:0 msgid "Analytic Entry" -msgstr "Gyűjtőkód tétel" +msgstr "Analitikus gyűjtőkód bevitel" #. module: account #: view:res.company:0 @@ -6391,7 +6622,7 @@ msgstr "Legutolsó párosítás dátuma" #: view:account.analytic.line:0 #: model:ir.model,name:account.model_account_analytic_line msgid "Analytic Line" -msgstr "Gyűjtőkód tétel" +msgstr "Analitikus gyűjtőkód tételsor" #. module: account #: model:ir.ui.menu,name:account.menu_action_model_form @@ -6439,6 +6670,17 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson a beszállítótól visszakapott jóváíró visszatérítés " +"bejegyzéséhez.\n" +"

\n" +" Beszállítói visszatérítés kézi bevitele helyett, " +"létrehozhatja a \n" +" visszatérítéseket és közvetlenül párosíthatja az ide " +"vonatkozó beszerzési\n" +" beszállítói számlálkkal.\n" +"

\n" +" " #. module: account #: field:account.tax,type:0 @@ -6653,7 +6895,7 @@ msgstr "" #. module: account #: view:project.account.analytic.line:0 msgid "View Account Analytic Lines" -msgstr "Gyűjtő számla gyűjtőkód tételei" +msgstr "Analitikus gyűjtő számla gyűjtőkód tételei" #. module: account #: field:account.invoice,internal_number:0 @@ -6684,7 +6926,7 @@ msgstr "Párosítás: A következő partnerre lép" #: 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 "Fordított gyűjtőkód kivonat" +msgstr "Fordított analitikus gyűjtőkód számlaegyenleg" #. module: account #: field:account.tax.template,applicable_type:0 @@ -6753,7 +6995,7 @@ msgstr "Likviditási" #: 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 "Gyűjtőkód tételek" +msgstr "Analitikus gyűjtőkód tételek" #. module: account #: field:account.config.settings,has_default_company:0 @@ -6785,7 +7027,8 @@ msgid "" "the system." msgstr "" "Ez a kimutatás elemzést nyújt az üzleti szempontok alapján létrehozott " -"gyűjtőkódokon könyvelt tételekről. Használja a kereső eszközt az elemzéshez." +"analitikai könyvelt tételekről. Használja a kereső eszközt a rendszer által " +"létrehozott analitikus tételek elemzéséhez." #. module: account #: sql_constraint:account.journal:0 @@ -6813,7 +7056,7 @@ msgstr "" #: selection:report.invoice.created,type:0 #, python-format msgid "Supplier Refund" -msgstr "Bejövő jóváíró számla" +msgstr "Bejövő beszállítói jóváíró számla" #. module: account #: field:account.bank.statement,move_line_ids:0 @@ -6892,7 +7135,7 @@ msgstr "account.sequence.fiscalyear" #: model:ir.model,name:account.model_account_analytic_journal #: model:ir.ui.menu,name:account.account_analytic_journal_print msgid "Analytic Journal" -msgstr "Gyűjtőnapló" +msgstr "Analitikus gyűjtőnapló" #. module: account #: view:account.entries.report:0 @@ -6952,7 +7195,7 @@ msgstr "Megjegyzések" #. module: account #: model:ir.model,name:account.model_analytic_entries_report msgid "Analytic Entries Statistics" -msgstr "Gyűjtőkód tétel statisztika" +msgstr "Analitikus gyűjtőkód tétel statisztika" #. module: account #: code:addons/account/account_analytic_line.py:142 @@ -7109,7 +7352,7 @@ msgstr "Kézi" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Cancel: create refund and reconcile" -msgstr "" +msgstr "Elvetés: visszatérítés létrehozás és párosítás" #. module: account #: code:addons/account/wizard/account_report_aged_partner_balance.py:58 @@ -7344,6 +7587,8 @@ msgid "" "Error!\n" "The start date of a fiscal year must precede its end date." msgstr "" +"Hiba!\n" +"Az üzleti adóügyi év elejének előbb kell lennie mint a végének." #. module: account #: view:account.tax.template:0 @@ -7449,6 +7694,7 @@ msgid "" "You can not delete an invoice which is not cancelled. You should refund it " "instead." msgstr "" +"Nem tud olyan számlát törölni ami nincs visszavonva. Inkább térítse vissza." #. module: account #: help:account.tax,amount:0 @@ -7469,7 +7715,7 @@ msgstr "Havi forgalom" #: view:account.move:0 #: view:account.move.line:0 msgid "Analytic Lines" -msgstr "Gyűjtőkód tételek" +msgstr "Analitikus gyűjtőkód tételek" #. module: account #: field:account.analytic.journal,line_ids:0 @@ -7682,7 +7928,7 @@ msgstr "Figyelem" #. module: account #: model:ir.actions.act_window,name:account.action_analytic_open msgid "Contracts/Analytic Accounts" -msgstr "" +msgstr "Kapcsolatok/Analitikus könyvelések" #. module: account #: view:account.journal:0 @@ -7755,7 +8001,7 @@ msgstr "Számlasor" #. module: account #: view:account.invoice.report:0 msgid "Customer And Supplier Refunds" -msgstr "" +msgstr "Vásárlói és Beszállítói visszatérítések" #. module: account #: field:account.financial.report,sign:0 @@ -7782,6 +8028,23 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új analitikus könyvelés létrehozásához.\n" +"

\n" +" A rendes számlatükör felépítése meghatározott az ország\n" +" törvényi követelményeinek megfelelően. Az analitikus\n" +" számlatükör felépítése az üzletmenetének igényeit kell\n" +" tükröznie a költség/hozam kimutatásokban kifejezve.\n" +"

\n" +" Ezek általában szerkezetileg a szerződésekből, projektekből, " +"\n" +" termékekből, vagy szakaszaiból álltak. A legtöbb OpenERP " +"művelet\n" +" (számlák, időkimutatások, költségek, stb.) hoznak létre " +"analitikus tartalmakat,\n" +" tételeket az ide vonatkozó számlán.\n" +"

\n" +" " #. module: account #: model:account.account.type,name:account.data_account_type_view @@ -8040,6 +8303,8 @@ msgid "" "Refund base on this type. You can not Modify and Cancel if the invoice is " "already reconciled" msgstr "" +"Visszatérítés ennek a típusnak az alapján. Nem tudja megváltoztatni és " +"visszavonni a már párosított számlát" #. module: account #: field:account.bank.statement.line,sequence:0 @@ -8276,7 +8541,8 @@ msgstr "" msgid "" "Select Fiscal Year which you want to remove entries for its End of year " "entries journal" -msgstr "Válassza ki az üzleti évet, amelynek a nyitó tételeit törölni akarja" +msgstr "" +"Válassza ki az üzleti évet, amelynek a záró tételei közül törölni szeretne" #. module: account #: field:account.tax.template,type_tax_use:0 @@ -8330,7 +8596,7 @@ msgstr "" #: view:account.analytic.line:0 #: model:ir.actions.act_window,name:account.action_account_analytic_line_form msgid "Analytic Entries" -msgstr "Gyűjtőkód tételek" +msgstr "Analitikus gyűjtőkód tételek" #. module: account #: view:account.analytic.account:0 @@ -8397,7 +8663,7 @@ msgstr "Gyűjtőkód karton" #. module: account #: view:account.config.settings:0 msgid "No Fiscal Year Defined for This Company" -msgstr "" +msgstr "Ehhez a vállalkozáshoz nem lett üzleti adóügyi év meghatározva" #. module: account #: view:account.invoice:0 @@ -8548,6 +8814,9 @@ 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 "" +"Ez a varázsló a kiválasztott üzleti adóügyi évet lezáró könyvelési napló " +"tételeit fogja eltávolítani. Megjegyezzük, hogy ezt a varázslót többször is " +"elindíthatja ugyanarra az üzleti évre." #. module: account #: report:account.invoice:0 @@ -8732,7 +9001,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close_state msgid "Fiscalyear Close state" -msgstr "Üzleti év zárása" +msgstr "Üzleti év zárt állapotban" #. module: account #: field:account.invoice.refund,journal_id:0 @@ -8914,7 +9183,7 @@ msgstr "" #: 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 "Gyűjtőkód lista" +msgstr "Analitikus könyvelések számlatükre" #. module: account #: model:ir.actions.act_window,help:account.action_subscription_form @@ -8932,6 +9201,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" Kattintson új ismétlődő tétel létrehozásához.\n" +"

\n" +" Egy ismétlődő tétel keletkezik, ismétlődési alapon egy " +"megadott \n" +" dátumtól, pl. egy szerződés aláírására hivatkozva a vásárló " +"ügyféllel\n" +" vagy egy beszállítóval. Ilyen tételeket automatikusan tud " +"kitenni\n" +" a rendszer által.\n" +"

\n" +" " #. module: account #: view:account.journal:0 @@ -8948,7 +9229,7 @@ msgstr "A vállalat összes tartozása a szállítóval szemben." #: model:process.node,name:account.process_node_analytic0 #: model:process.node,name:account.process_node_analyticcost0 msgid "Analytic Costs" -msgstr "Költségek" +msgstr "Analitikus költségek" #. module: account #: field:account.analytic.journal,name:0 @@ -9161,7 +9442,7 @@ msgstr "" #. module: account #: field:account.config.settings,has_fiscal_year:0 msgid "Company has a fiscal year" -msgstr "" +msgstr "Vállalkozásnak van üzleti, adóügyi éve" #. module: account #: help:account.tax,child_depend:0 @@ -9257,7 +9538,7 @@ msgstr "Üzleti év és időszakok zárása" #. module: account #: field:account.config.settings,purchase_refund_journal_id:0 msgid "Purchase refund journal" -msgstr "" +msgstr "Bejövő jóváíró számla napló" #. module: account #: view:account.analytic.line:0 @@ -9270,7 +9551,7 @@ msgstr "Termék információ" #: view:account.move.line:0 #: model:ir.ui.menu,name:account.next_id_40 msgid "Analytic" -msgstr "Gyűjtőnaplók" +msgstr "Anaitikus gyűjtőnaplók" #. module: account #: model:process.node,name:account.process_node_invoiceinvoice0 @@ -9319,8 +9600,8 @@ msgid "" "Analytic costs (timesheets, some purchased products, ...) come from analytic " "accounts. These generate draft invoices." msgstr "" -"A költségek a gyűjtőkódokból származnak. Ezek állítják elő a " -"számlatervezeteket." +"Analitikus költségek (időkimutatások, egyes megvásárolt termékek, ...) az " +"analitikus könyvelésből származnak. Ezek számla vázlatokat hoznak létre." #. module: account #: view:account.analytic.line:0 @@ -9408,7 +9689,7 @@ msgstr "A partnerre hivatkozó vállalatok" #. module: account #: view:account.invoice:0 msgid "Ask Refund" -msgstr "Jóváírás igénylése" +msgstr "Jóváírás, visszatérítés igénylése" #. module: account #: view:account.move.line:0 @@ -9599,6 +9880,9 @@ msgid "" "The period is invalid. Either some periods are overlapping or the period's " "dates are not matching the scope of the fiscal year." msgstr "" +"Hiba!\n" +"Az időszak nem érvényes. Vagy az egyes időszakok átfedik egymást vagy az " +"időszakok nem egyeznek az üzleti év határidőivel." #. module: account #: report:account.overdue:0 @@ -9611,6 +9895,9 @@ msgid "" "Set the account that will be set by default on invoice tax lines for " "refunds. Leave empty to use the expense account." msgstr "" +"Számla beállítása ami alapértelmezetten a számlák adó tételeinek " +"visszatérítésére szolgál. Hagyja üresen, ha a költség számlát szeretné " +"használni." #. module: account #: help:account.addtmpl.wizard,cparent_id:0 @@ -9713,7 +10000,7 @@ msgstr "Előjegyzés" #. module: account #: model:ir.model,name:account.model_account_analytic_balance msgid "Account Analytic Balance" -msgstr "Gyűjtőkód kivonat" +msgstr "Analitikus gyűjtőkód számlaegyenleg" #. module: account #: report:account.account.balance:0 @@ -9892,12 +10179,12 @@ msgstr "Gyűjtőkód karton (csak mennyiségi)" #: model:process.transition,name:account.process_transition_analyticinvoice0 #: model:process.transition,name:account.process_transition_supplieranalyticcost0 msgid "From analytic accounts" -msgstr "Gyűjtőkódokból" +msgstr "Analitikus gyűjtőkódokból" #. module: account #: view:account.installer:0 msgid "Configure your Fiscal Year" -msgstr "" +msgstr "Állítsa be az üzleti, adóügyi évét" #. module: account #: field:account.period,name:0 @@ -9957,6 +10244,13 @@ msgid "" "analytic account.\n" " This installs the module account_budget." msgstr "" +"Ez lehetővé teszi a könyvelő számára az analitikus és átlátható " +"költségvetést.\n" +" Ha már a mester költségvetés és a költségvetés meg lett " +"határozva,\n" +" a projekt irányító beállíthatja a tervezett költségeket " +"mindegyik analitikus könyvelési számlára.\n" +" Ez a account_budget (számla_költség) modult telepíti.." #. module: account #: field:account.bank.statement.line,name:0 @@ -10321,7 +10615,7 @@ msgstr "" #. module: account #: field:account.tax,account_analytic_paid_id:0 msgid "Refund Tax Analytic Account" -msgstr "" +msgstr "Visszatérítés analitikai adógyűjtő számla" #. module: account #: view:account.move.bank.reconcile:0 @@ -10597,7 +10891,7 @@ msgstr "Tartomány" #. module: account #: view:account.analytic.line:0 msgid "Analytic Journal Items related to a purchase journal." -msgstr "" +msgstr "Beszerzési naplóval összefüggő analitikai napló tételei" #. module: account #: help:account.account,type:0 @@ -10695,7 +10989,7 @@ msgstr "Típusonkénti főkönyvi számlák" #. module: account #: model:ir.model,name:account.model_account_analytic_chart msgid "Account Analytic Chart" -msgstr "Gyűjtőkód lista" +msgstr "Analitikai gyűjtőkód lista" #. module: account #: help:account.invoice,residual:0 @@ -10793,7 +11087,7 @@ msgstr "Számla keresése" #: code:addons/account/account_invoice.py:1159 #, python-format msgid "Refund" -msgstr "Jóváíró számla" +msgstr "Visszatérítés" #. module: account #: model:ir.model,name:account.model_res_partner_bank @@ -10834,6 +11128,8 @@ msgstr "Könyvelési tételsorok jóváhagyása" msgid "" "The fiscal position will determine taxes and accounts used for the partner." msgstr "" +"Az ÁFA pozíció meghatározza a partnerre vonatkozó adókat és főkönyvi " +"számlákat." #. module: account #: model:process.node,note:account.process_node_supplierpaidinvoice0 @@ -10906,14 +11202,16 @@ msgstr "" #: view:ir.sequence:0 #: model:ir.ui.menu,name:account.menu_action_account_fiscalyear msgid "Fiscal Years" -msgstr "Üzleti év" +msgstr "Üzleti évek" #. 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 "Ha az aktív mező nincs bejelölve, nem használható a gyűjtőnapló." +msgstr "" +"Ha az aktív mező hamis, akkor eltüntetheti az analitikus naplót annak " +"törlése nélkül." #. module: account #: field:account.analytic.line,ref:0 diff --git a/addons/account/i18n/zh_TW.po b/addons/account/i18n/zh_TW.po index 55362cf55a0..f6ab25cbc72 100644 --- a/addons/account/i18n/zh_TW.po +++ b/addons/account/i18n/zh_TW.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: 2012-08-21 06:06+0000\n" -"Last-Translator: Boyce Huang \n" +"PO-Revision-Date: 2013-12-01 17:16+0000\n" +"Last-Translator: Andy Cheng \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-09-12 05:37+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n" +"X-Generator: Launchpad (build 16856)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -32,12 +32,12 @@ msgstr "在相同會計科目中,只能設定一次科目財務狀況。" msgid "" "Determine the display order in the report 'Accounting \\ Reporting \\ " "Generic Reporting \\ Taxes \\ Taxes Report'" -msgstr "確定以下報表的顯示順序:」會計-報表-通用報表-稅-稅報表「" +msgstr "確定以下報表的顯示順序:「會計 \\ 報表 \\ 通用報表 \\ 稅 \\ 稅報表」" #. module: account #: view:account.move.reconcile:0 msgid "Journal Entry Reconcile" -msgstr "日記帳分錄調節" +msgstr "帳簿分錄調節" #. module: account #: view:account.account:0 diff --git a/addons/account/partner.py b/addons/account/partner.py index d0db2ed4f6c..f24ffcf55b4 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -107,14 +107,15 @@ class res_partner(osv.osv): _description = 'Partner' def _credit_debit_get(self, cr, uid, ids, field_names, arg, context=None): - query = self.pool.get('account.move.line')._query_get(cr, uid, context=context) + ctx = context.copy() + ctx['all_fiscalyear'] = True + query = self.pool.get('account.move.line')._query_get(cr, uid, context=ctx) cr.execute("""SELECT l.partner_id, a.type, SUM(l.debit-l.credit) FROM account_move_line l LEFT JOIN account_account a ON (l.account_id=a.id) WHERE a.type IN ('receivable','payable') AND l.partner_id IN %s - AND (l.reconcile_id IS NULL OR - reconcile_id in (SELECT id FROM account_move_reconcile WHERE opening_reconciliation is TRUE)) + AND l.reconcile_id IS NULL AND """ + query + """ GROUP BY l.partner_id, a.type """, diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index 6ddfc238bff..08c05c65fa8 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -170,6 +170,7 @@ + diff --git a/addons/account/report/account_print_invoice.rml b/addons/account/report/account_print_invoice.rml index 3582221df44..6914adfaf20 100644 --- a/addons/account/report/account_print_invoice.rml +++ b/addons/account/report/account_print_invoice.rml @@ -295,7 +295,7 @@ - Total: + Total: [[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]] diff --git a/addons/account/res_config.py b/addons/account/res_config.py index 09df82e38fd..bf28e900378 100644 --- a/addons/account/res_config.py +++ b/addons/account/res_config.py @@ -22,13 +22,12 @@ import time import datetime from dateutil.relativedelta import relativedelta -from operator import itemgetter -from os.path import join as opj +import openerp +from openerp import SUPERUSER_ID from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as DF from openerp.tools.translate import _ from openerp.osv import fields, osv -from openerp import tools class account_config_settings(osv.osv_memory): _name = 'account.config.settings' @@ -276,11 +275,13 @@ class account_config_settings(osv.osv_memory): def set_default_taxes(self, cr, uid, ids, context=None): """ set default sale and purchase taxes for products """ + if uid != SUPERUSER_ID and not self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager'): + raise openerp.exceptions.AccessError(_("Only administrators can change the settings")) ir_values = self.pool.get('ir.values') config = self.browse(cr, uid, ids[0], context) - ir_values.set_default(cr, uid, 'product.product', 'taxes_id', + ir_values.set_default(cr, SUPERUSER_ID, 'product.product', 'taxes_id', config.default_sale_tax and [config.default_sale_tax.id] or False, company_id=config.company_id.id) - ir_values.set_default(cr, uid, 'product.product', 'supplier_taxes_id', + ir_values.set_default(cr, SUPERUSER_ID, 'product.product', 'supplier_taxes_id', config.default_purchase_tax and [config.default_purchase_tax.id] or False, company_id=config.company_id.id) def set_chart_of_accounts(self, cr, uid, ids, context=None): diff --git a/addons/account/test/account_validate_account_move.yml b/addons/account/test/account_validate_account_move.yml index a99ae3b4d43..a1a119ea59a 100644 --- a/addons/account/test/account_validate_account_move.yml +++ b/addons/account/test/account_validate_account_move.yml @@ -80,8 +80,13 @@ I validate this account move by using the 'Post Journal Entries' wizard - !record {model: validate.account.move, id: validate_account_move_0}: - journal_id: account.bank_journal - period_id: account.period_6 + journal_ids: + - bank_journal + - check_journal + period_ids: + - period_6 + - period_7 + - period_8 - I click on validate Button - diff --git a/addons/account/tests/__init__.py b/addons/account/tests/__init__.py index 11fe4186db6..02e9677ae03 100644 --- a/addons/account/tests/__init__.py +++ b/addons/account/tests/__init__.py @@ -1,4 +1,7 @@ from . import test_tax +from . import test_search -fast_suite = [test_tax, - ] +fast_suite = [ + test_tax, + test_search, +] diff --git a/addons/account/tests/test_search.py b/addons/account/tests/test_search.py new file mode 100644 index 00000000000..0e93da0c0bc --- /dev/null +++ b/addons/account/tests/test_search.py @@ -0,0 +1,60 @@ +from openerp.tests.common import TransactionCase + +class TestSearch(TransactionCase): + """Tests for search on name_search (account.account) + + The name search on account.account is quite complexe, make sure + we have all the correct results + """ + + def setUp(self): + super(TestSearch, self).setUp() + cr, uid = self.cr, self.uid + self.account_model = self.registry('account.account') + self.account_type_model = self.registry('account.account.type') + ac_ids = self.account_type_model.search(cr, uid, [], limit=1) + self.atax = (int(self.account_model.create(cr, uid, dict( + name="Tax Received", + code="121", + user_type=ac_ids[0], + ))), "121 Tax Received") + + self.apurchase = (int(self.account_model.create(cr, uid, dict( + name="Purchased Stocks", + code="1101", + user_type=ac_ids[0], + ))), "1101 Purchased Stocks") + + self.asale = (int(self.account_model.create(cr, uid, dict( + name="Product Sales", + code="200", + user_type=ac_ids[0], + ))), "200 Product Sales") + + self.all_ids = [self.atax[0], self.apurchase[0], self.asale[0]] + + def test_name_search(self): + cr, uid = self.cr, self.uid + atax_ids = self.account_model.name_search(cr, uid, name="Tax", operator='ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.atax[0]]), set([a[0] for a in atax_ids]), "name_search 'ilike Tax' should have returned Tax Received account only") + + atax_ids = self.account_model.name_search(cr, uid, name="Tax", operator='not ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.apurchase[0], self.asale[0]]), set([a[0] for a in atax_ids]), "name_search 'not ilike Tax' should have returned all but Tax Received account") + + apur_ids = self.account_model.name_search(cr, uid, name='1101', operator='ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.apurchase[0]]), set([a[0] for a in apur_ids]), "name_search 'ilike 1101' should have returned Purchased Stocks account only") + + apur_ids = self.account_model.name_search(cr, uid, name='1101', operator='not ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.atax[0], self.asale[0]]), set([a[0] for a in apur_ids]), "name_search 'not ilike 1101' should have returned all but Purchased Stocks account") + + asale_ids = self.account_model.name_search(cr, uid, name='200 Sales', operator='ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.asale[0]]), set([a[0] for a in asale_ids]), "name_search 'ilike 200 Sales' should have returned Product Sales account only") + + asale_ids = self.account_model.name_search(cr, uid, name='200 Sales', operator='not ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.atax[0], self.apurchase[0]]), set([a[0] for a in asale_ids]), "name_search 'not ilike 200 Sales' should have returned all but Product Sales account") + + asale_ids = self.account_model.name_search(cr, uid, name='Product Sales', operator='ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.asale[0]]), set([a[0] for a in asale_ids]), "name_search 'ilike Product Sales' should have returned Product Sales account only") + + asale_ids = self.account_model.name_search(cr, uid, name='Product Sales', operator='not ilike', args=[('id', 'in', self.all_ids)]) + self.assertEqual(set([self.atax[0], self.apurchase[0]]), set([a[0] for a in asale_ids]), "name_search 'not ilike Product Sales' should have returned all but Product Sales account") diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 4b7a7fd5314..8a583b79383 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -52,10 +52,19 @@ class account_invoice_refund(osv.osv_memory): journal = obj_journal.search(cr, uid, [('type', '=', type), ('company_id','=',company_id)], limit=1, context=context) return journal and journal[0] or False + def _get_reason(self, cr, uid, context=None): + active_id = context and context.get('active_id', False) + if active_id: + inv = self.pool.get('account.invoice').browse(cr, uid, active_id, context=context) + return inv.name + else: + return '' + _defaults = { 'date': lambda *a: time.strftime('%Y-%m-%d'), 'journal_id': _get_journal, 'filter_refund': 'refund', + 'description': _get_reason, } def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): diff --git a/addons/account/wizard/account_validate_account_move.py b/addons/account/wizard/account_validate_account_move.py index 050191db187..297f3445606 100644 --- a/addons/account/wizard/account_validate_account_move.py +++ b/addons/account/wizard/account_validate_account_move.py @@ -25,18 +25,18 @@ class validate_account_move(osv.osv_memory): _name = "validate.account.move" _description = "Validate Account Move" _columns = { - 'journal_id': fields.many2one('account.journal', 'Journal', required=True), - 'period_id': fields.many2one('account.period', 'Period', required=True, domain=[('state','<>','done')]), + 'journal_ids': fields.many2many('account.journal', 'wizard_validate_account_move_journal', 'wizard_id', 'journal_id', 'Journal', required=True), + 'period_ids': fields.many2many('account.period', 'wizard_validate_account_move_period', 'wizard_id', 'period_id', 'Period', required=True, domain=[('state','<>','done')]), } def validate_move(self, cr, uid, ids, context=None): obj_move = self.pool.get('account.move') if context is None: context = {} - data = self.browse(cr, uid, ids, context=context)[0] - ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','=',data.journal_id.id),('period_id','=',data.period_id.id)]) + data = self.read(cr, uid, ids[0], context=context) + ids_move = obj_move.search(cr, uid, [('state','=','draft'),('journal_id','in',tuple(data['journal_ids'])),('period_id','in',tuple(data['period_ids']))]) if not ids_move: - raise osv.except_osv(_('Warning!'), _('Specified journal does not have any account move entries in draft state for this period.')) + raise osv.except_osv(_('Warning!'), _('Specified journals do not have any account move entries in draft state for the specified periods.')) obj_move.button_validate(cr, uid, ids_move, context=context) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/account/wizard/account_validate_move_view.xml b/addons/account/wizard/account_validate_move_view.xml index 6a9b1e159f0..5f22ccbc97f 100644 --- a/addons/account/wizard/account_validate_move_view.xml +++ b/addons/account/wizard/account_validate_move_view.xml @@ -9,8 +9,8 @@
- - + +
-
-
-
- - - Configure Moodle - event.moodle.config.wiz - - form - form - new - - - - - - open - - - - - - diff --git a/addons/event_sale/__openerp__.py b/addons/event_sale/__openerp__.py index c274669af98..88e27fd9a3d 100644 --- a/addons/event_sale/__openerp__.py +++ b/addons/event_sale/__openerp__.py @@ -39,7 +39,10 @@ this event. """, 'author': 'OpenERP SA', 'depends': ['event', 'sale_crm'], - 'data': ['event_sale_view.xml'], + 'data': [ + 'event_sale_view.xml', + 'event_sale_data.xml', + ], 'demo': ['event_demo.xml'], 'test': ['test/confirm.yml'], 'installable': True, diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index 2d409453682..aa02d26e4b2 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -116,17 +116,29 @@ class event_event(osv.osv): result[rec.id] = sum([ep.register_max for ep in rec.event_ticket_ids]) return result + def _get_tickets(self, cr, uid, context={}): + md = self.pool.get('ir.model.data') + try: + dummy, res_id = md.get_object_reference(cr, uid, 'event_sale', 'product_product_event') + except ValueError: + return [] + return [{ + 'name': _('Subscription'), + 'product_id': res_id, + 'price': 0, + }] + _columns = { 'event_ticket_ids': fields.one2many('event.event.ticket', "event_id", "Event Ticket"), - 'organizer_id': fields.many2one('res.partner', "Organizer"), - 'phone': fields.related('organizer_id', 'phone', type='char', string='Phone'), - 'email': fields.related('organizer_id', 'email', type='char', string='Email'), 'register_max': fields.function(_get_register_max, string='Maximum Registrations', help="The maximum registration level is equal to the sum of the maximum registration of event ticket." + "If you have too much registrations you are not able to confirm your event. (0 to ignore this rule )", type='integer') } + _defaults = { + 'event_ticket_ids': _get_tickets + } def check_registration_limits(self, cr, uid, ids, context=None): for event in self.browse(cr, uid, ids, context=context): @@ -184,6 +196,18 @@ class event_ticket(osv.osv): 'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', type='integer', multi='register_numbers'), 'register_attended': fields.function(_get_register, string='# of Participations', type='integer', multi='register_numbers'), } + def _default_product_id(self, cr, uid, context={}): + md = self.pool.get('ir.model.data') + try: + dummy, res_id = md.get_object_reference(cr, uid, 'event_sale', 'product_product_event') + except ValueError: + return False + return res_id + + _defaults = { + 'product_id': _default_product_id + } + def check_registration_limits_before(self, cr, uid, ids, number, context=None): for ticket in self.browse(cr, uid, ids, context=context): diff --git a/addons/event_sale/event_sale_data.xml b/addons/event_sale/event_sale_data.xml new file mode 100644 index 00000000000..9c5dae6042b --- /dev/null +++ b/addons/event_sale/event_sale_data.xml @@ -0,0 +1,25 @@ + + + + + + Generic Events + + + + 10.0 + + 30.0 + + + Event Subscription + + service + + + + + + + + diff --git a/addons/event_sale/event_sale_view.xml b/addons/event_sale/event_sale_view.xml index f6e919dff2d..33bd7d7469e 100644 --- a/addons/event_sale/event_sale_view.xml +++ b/addons/event_sale/event_sale_view.xml @@ -3,7 +3,7 @@ event.product - product.product + product.template
@@ -57,9 +57,6 @@ - - - diff --git a/addons/fleet/__openerp__.py b/addons/fleet/__openerp__.py index fc7649de20e..29c0e9d3ceb 100644 --- a/addons/fleet/__openerp__.py +++ b/addons/fleet/__openerp__.py @@ -49,13 +49,14 @@ Main Features 'board' ], 'data' : [ + 'security/fleet_security.xml', + 'security/ir.model.access.csv', 'fleet_view.xml', 'fleet_cars.xml', 'fleet_data.xml', 'fleet_board_view.xml', ], 'images': ['images/costs_analysis.jpeg','images/indicative_costs_analysis.jpeg','images/vehicles.jpeg','images/vehicles_contracts.jpeg','images/vehicles_fuel.jpeg','images/vehicles_odometer.jpeg','images/vehicles_services.jpeg'], - 'update_xml' : ['security/fleet_security.xml','security/ir.model.access.csv'], 'demo': ['fleet_demo.xml'], diff --git a/addons/fleet/fleet.py b/addons/fleet/fleet.py index 483f989fcde..2750485844a 100644 --- a/addons/fleet/fleet.py +++ b/addons/fleet/fleet.py @@ -160,8 +160,8 @@ class fleet_vehicle_model(osv.Model): 'brand_id': fields.many2one('fleet.vehicle.model.brand', 'Model Brand', required=True, help='Brand of the vehicle'), 'vendors': fields.many2many('res.partner', 'fleet_vehicle_model_vendors', 'model_id', 'partner_id', string='Vendors'), 'image': fields.related('brand_id', 'image', type="binary", string="Logo"), - 'image_medium': fields.related('brand_id', 'image_medium', type="binary", string="Logo"), - 'image_small': fields.related('brand_id', 'image_small', type="binary", string="Logo"), + 'image_medium': fields.related('brand_id', 'image_medium', type="binary", string="Logo (medium)"), + 'image_small': fields.related('brand_id', 'image_small', type="binary", string="Logo (small)"), } @@ -354,8 +354,8 @@ class fleet_vehicle(osv.Model): 'power': fields.integer('Power', help='Power in kW of the vehicle'), 'co2': fields.float('CO2 Emissions', help='CO2 emissions of the vehicle'), 'image': fields.related('model_id', 'image', type="binary", string="Logo"), - 'image_medium': fields.related('model_id', 'image_medium', type="binary", string="Logo"), - 'image_small': fields.related('model_id', 'image_small', type="binary", string="Logo"), + 'image_medium': fields.related('model_id', 'image_medium', type="binary", string="Logo (medium)"), + 'image_small': fields.related('model_id', 'image_small', type="binary", string="Logo (small)"), 'contract_renewal_due_soon': fields.function(_get_contract_reminder_fnc, fnct_search=_search_contract_renewal_due_soon, type="boolean", string='Has Contracts to renew', multi='contract_info'), 'contract_renewal_overdue': fields.function(_get_contract_reminder_fnc, fnct_search=_search_get_overdue_contract_reminder, type="boolean", string='Has Contracts Overdued', multi='contract_info'), 'contract_renewal_name': fields.function(_get_contract_reminder_fnc, type="text", string='Name of contract to renew soon', multi='contract_info'), @@ -559,7 +559,7 @@ class fleet_vehicle_log_fuel(osv.Model): 'inv_ref': fields.char('Invoice Reference', size=64), 'vendor_id': fields.many2one('res.partner', 'Supplier', domain="[('supplier','=',True)]"), 'notes': fields.text('Notes'), - 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost'), + 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade'), 'cost_amount': fields.related('cost_id', 'amount', string='Amount', type='float', store=True), #we need to keep this field as a related with store=True because the graph view doesn't support (1) to address fields from inherited table and (2) fields that aren't stored in database } _defaults = { @@ -600,7 +600,7 @@ class fleet_vehicle_log_services(osv.Model): 'vendor_id': fields.many2one('res.partner', 'Supplier', domain="[('supplier','=',True)]"), 'cost_amount': fields.related('cost_id', 'amount', string='Amount', type='float', store=True), #we need to keep this field as a related with store=True because the graph view doesn't support (1) to address fields from inherited table and (2) fields that aren't stored in database 'notes': fields.text('Notes'), - 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost'), + 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade'), } _defaults = { 'date': fields.date.context_today, @@ -799,7 +799,7 @@ class fleet_vehicle_log_contract(osv.Model): 'cost_frequency': fields.selection([('no','No'), ('daily', 'Daily'), ('weekly','Weekly'), ('monthly','Monthly'), ('yearly','Yearly')], 'Recurring Cost Frequency', help='Frequency of the recuring cost', required=True), 'generated_cost_ids': fields.one2many('fleet.vehicle.cost', 'contract_id', 'Generated Costs', ondelete='cascade'), 'sum_cost': fields.function(_get_sum_cost, type='float', string='Indicative Costs Total'), - 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost'), + 'cost_id': fields.many2one('fleet.vehicle.cost', 'Cost', required=True, ondelete='cascade'), 'cost_amount': fields.related('cost_id', 'amount', string='Amount', type='float', store=True), #we need to keep this field as a related with store=True because the graph view doesn't support (1) to address fields from inherited table and (2) fields that aren't stored in database } _defaults = { diff --git a/addons/fleet/fleet_demo.xml b/addons/fleet/fleet_demo.xml index a550ae78da5..2f9b71b3bb5 100644 --- a/addons/fleet/fleet_demo.xml +++ b/addons/fleet/fleet_demo.xml @@ -1,8 +1,9 @@ + - + diff --git a/addons/fleet/fleet_view.xml b/addons/fleet/fleet_view.xml index 1258e49aa2d..a0ced74a509 100644 --- a/addons/fleet/fleet_view.xml +++ b/addons/fleet/fleet_view.xml @@ -43,6 +43,7 @@ + fleet.vehicle.model.tree fleet.vehicle.model @@ -565,7 +566,7 @@ - fleet.vehicle.odometer.graph @@ -671,6 +673,23 @@ + + + fleet.vehicle.log.fuel.search + fleet.vehicle.log.fuel + + + + + + + + + + + + + fleet.vehicle.log.fuel.graph @@ -690,6 +709,7 @@ fleet.vehicle.log.fuel form tree,form,graph + {"search_default_groupby_vehicle" : True}

Click to create a new fuel log. diff --git a/addons/google_drive/google_drive.py b/addons/google_drive/google_drive.py index df0d6a3c5af..b69c7ddd173 100644 --- a/addons/google_drive/google_drive.py +++ b/addons/google_drive/google_drive.py @@ -60,10 +60,9 @@ class config(osv.Model): def get_access_token(self, cr, uid, scope=None, context=None): ir_config = self.pool['ir.config_parameter'] google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token') - group_config = self.pool['ir.model.data'].get_object_reference(cr, uid, 'base', 'group_erp_manager')[1] - user = self.pool['res.users'].read(cr, uid, uid, "groups_id") + user_is_admin = self.pool['res.users'].has_group(cr, uid, 'base.group_erp_manager') if not google_drive_refresh_token: - if group_config in user['groups_id']: + if user_is_admin: raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context) else: raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator.")) @@ -81,7 +80,7 @@ class config(osv.Model): req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers) content = urllib2.urlopen(req).read() except urllib2.HTTPError: - if group_config in user['groups_id']: + if user_is_admin: raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context) else: raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator.")) diff --git a/addons/google_spreadsheet/google_spreadsheet.py b/addons/google_spreadsheet/google_spreadsheet.py index a724e3c425e..81ec536b6f2 100644 --- a/addons/google_spreadsheet/google_spreadsheet.py +++ b/addons/google_spreadsheet/google_spreadsheet.py @@ -18,6 +18,7 @@ # ############################################################################## +import cgi import simplejson import logging from lxml import etree @@ -67,24 +68,24 @@ class config(osv.osv): request = ''' - https://spreadsheets.google.com/feeds/cells/%s/od6/private/full + https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full A1 - https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1 + https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R1C1 - + href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R1C1"/> + A2 - https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15 + https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R60C15 - + href="https://spreadsheets.google.com/feeds/cells/{key}/od6/private/full/R60C15"/> + -''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula.replace('"', '"'), spreadsheet_key, spreadsheet_key, config_formula.replace('"', '"')) +''' .format(key=spreadsheet_key, formula=cgi.escape(formula, quote=True), config=cgi.escape(config_formula, quote=True)) try: req = urllib2.Request( diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 67bf36a262f..e47e0a9bfb8 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -234,11 +234,13 @@ class hr_employee(osv.osv): employee_id = super(hr_employee, self).create(cr, uid, data, context=create_ctx) employee = self.browse(cr, uid, employee_id, context=context) if employee.user_id: + res_users = self.pool['res.users'] # send a copy to every user of the company - company_id = employee.user_id.partner_id.company_id.id - partner_ids = self.pool.get('res.partner').search(cr, uid, [ - ('company_id', '=', company_id), - ('user_ids', '!=', False)], context=context) + # TODO: post to the `Whole Company` mail.group when we'll be able to link to the employee record + _model, group_id = self.pool['ir.model.data'].get_object_reference(cr, uid, 'base', 'group_user') + user_ids = res_users.search(cr, uid, [('company_id', '=', employee.user_id.company_id.id), + ('groups_id', 'in', group_id)]) + partner_ids = list(set(u.partner_id.id for u in res_users.browse(cr, uid, user_ids, context=context))) else: partner_ids = [] self.message_post(cr, uid, [employee_id], diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index 4922a53bcbf..e9a859bf44d 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -117,7 +117,7 @@ hr.employee - + diff --git a/addons/hr_attendance/report/hr_custom_default.xsl b/addons/hr_attendance/report/hr_custom_default.xsl index e8b133da1b0..2eda3a08f4b 100644 --- a/addons/hr_attendance/report/hr_custom_default.xsl +++ b/addons/hr_attendance/report/hr_custom_default.xsl @@ -5,9 +5,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm @@ -17,9 +17,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm diff --git a/addons/hr_attendance/static/src/css/slider.css b/addons/hr_attendance/static/src/css/slider.css index 664d4f96e41..849cd33a894 100644 --- a/addons/hr_attendance/static/src/css/slider.css +++ b/addons/hr_attendance/static/src/css/slider.css @@ -5,7 +5,7 @@ display: inline-block; } .openerp .oe_attendance_signin { - float:left; + float: right; height: 32px; width: 32px; background: url(/hr_attendance/static/src/img/emp-out32.png); diff --git a/addons/hr_evaluation/i18n/pl.po b/addons/hr_evaluation/i18n/pl.po new file mode 100644 index 00000000000..f154b1b71a3 --- /dev/null +++ b/addons/hr_evaluation/i18n/pl.po @@ -0,0 +1,913 @@ +# Polish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-17 15:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-18 05:22+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_anonymous_manager:0 +msgid "Send an anonymous summary to the manager" +msgstr "Wyślij anonimowe podsumowanie do menadżera" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Start Appraisal" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: view:hr_evaluation.plan:0 +msgid "Group By..." +msgstr "Grupuj wg..." + +#. module: hr_evaluation +#: field:hr.evaluation.interview,request_id:0 +#: field:hr.evaluation.report,request_id:0 +msgid "Request_id" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "March" +msgstr "Marzec" + +#. module: hr_evaluation +#: field:hr.evaluation.report,delay_date:0 +msgid "Delay to Start" +msgstr "Opuźnienie do rozpoczęcia" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Appraisal that are in waiting appreciation state" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,company_id:0 +#: field:hr_evaluation.plan.phase,company_id:0 +msgid "Company" +msgstr "Firma" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,evaluation_id:0 +#: field:hr_evaluation.plan.phase,survey_id:0 +msgid "Appraisal Form" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,day:0 +msgid "Day" +msgstr "Dzień" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,phase_ids:0 +msgid "Appraisal Phases" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Send Request" +msgstr "Wyślij żądanie" + +#. module: hr_evaluation +#: help:hr_evaluation.plan,month_first:0 +msgid "" +"This number of months will be used to schedule the first evaluation date of " +"the employee when selecting an evaluation plan. " +msgstr "" + +#. module: hr_evaluation +#: view:hr.employee:0 +#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_tree +msgid "Appraisals" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(eval_name)s:Appraisal Name" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_ids:0 +#: field:hr_evaluation.evaluation,message_ids:0 +msgid "Messages" +msgstr "Wiadomości" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Mail Body" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,wait:0 +msgid "Wait Previous Phases" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation +msgid "Employee Appraisal" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Cancelled" +msgstr "Anulowano" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Did not meet expectations" +msgstr "Nie spełnił oczekiwań" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr +msgid "Appraisal" +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_unread:0 +#: help:hr_evaluation.evaluation,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "Jeśli zaznaczone, to wiadomość wymaga twojej uwagi" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Send to Managers" +msgstr "Wyślij do menadżera" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,date_close:0 +msgid "Ending Date" +msgstr "Data końcowa" + +#. module: hr_evaluation +#: help:hr_evaluation.evaluation,note_action:0 +msgid "" +"If the evaluation does not meet the expectations, you can proposean action " +"plan" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Send to Employees" +msgstr "Wyślij do pracownika" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:84 +#, python-format +msgid "" +"\n" +"Date: %(date)s\n" +"\n" +"Dear %(employee_name)s,\n" +"\n" +"I am doing an evaluation regarding %(eval_name)s.\n" +"\n" +"Kindly submit your response.\n" +"\n" +"\n" +"Thanks,\n" +"--\n" +"%(user_signature)s\n" +"\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Appraisal that are in Plan In Progress state" +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_summary:0 +#: help:hr_evaluation.evaluation,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 "" +"Zawiera podsumowanie wypowiedzi (liczbę wiadomości, ...). To podsumowanie " +"jest bezpośrednio w formacie html, aby można je było stosować w widokach " +"kanban." + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Reset to Draft" +msgstr "Reset do wersji roboczej" + +#. module: hr_evaluation +#: field:hr.evaluation.report,deadline:0 +msgid "Deadline" +msgstr "Ostateczny czas ukończenia" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:235 +#: code:addons/hr_evaluation/hr_evaluation.py:320 +#, python-format +msgid "Warning!" +msgstr "Ostrzeżenie !" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "In progress Evaluations" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_survey_request +msgid "survey.request" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(date)s: Current Date" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview +msgid "Interviews" +msgstr "Rozmowy kwalifikacyjne" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:83 +#, python-format +msgid "Regarding " +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_follower_ids:0 +#: field:hr_evaluation.evaluation,message_follower_ids:0 +msgid "Followers" +msgstr "Obserwatorzy" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_unread:0 +#: field:hr_evaluation.evaluation,message_unread:0 +msgid "Unread Messages" +msgstr "Nieprzeczytane wiadomości" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,employee_id:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,employee_id:0 +#: model:ir.model,name:hr_evaluation.model_hr_employee +msgid "Employee" +msgstr "Pracownik" + +#. module: hr_evaluation +#: selection:hr_evaluation.evaluation,state:0 +msgid "New" +msgstr "Nowe" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,mail_body:0 +msgid "Email" +msgstr "Email" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Exceeds expectations" +msgstr "Przekracza oczekiwania" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,mail_feature:0 +msgid "" +"Check this box if you want to send mail to employees coming under this phase" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Creation Date" +msgstr "Data utworzenia" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_answer_manager:0 +msgid "Send all answers to the manager" +msgstr "Wyślij wszystkie odpowiedzi do menadżera" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Plan In Progress" +msgstr "Plan w trakcie realizacji" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Public Notes" +msgstr "Notatki publiczne" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Send Reminder Email" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr_evaluation.evaluation,rating:0 +msgid "Appreciation" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Print Interview" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,closed:0 +msgid "closed" +msgstr "zamknięte" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Meet expectations" +msgstr "Spełnia oczekiwania" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,nbr:0 +msgid "# of Requests" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "July" +msgstr "Lipiec" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,state:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,state:0 +msgid "Status" +msgstr "Status" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_plans_installer +msgid "Review Appraisal Plans" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.action_evaluation_plans_installer +msgid "" +"

\n" +" Click to define a new appraisal plan.\n" +"

\n" +" You can define appraisal plans (ex: first interview after 6\n" +" months, then every year). Then, each employee can be linked " +"to\n" +" an appraisal plan so that OpenERP can automatically " +"generate\n" +" interview requests to managers and/or subordinates.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Action to Perform" +msgstr "Działanie do wykonania" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,note_action:0 +msgid "Action Plan" +msgstr "Plan działania" + +#. module: hr_evaluation +#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr_config +msgid "Periodic Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,month_next:0 +msgid "Periodicity of Appraisal (months)" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Significantly exceeds expectations" +msgstr "Znacznie przekracza oczekiwania" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "In progress" +msgstr "W toku" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Interview Request" +msgstr "Zaproszenie na rozmowę kwalifikacyjną" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,send_answer_employee:0 +#: field:hr_evaluation.plan.phase,send_answer_manager:0 +msgid "All Answers" +msgstr "Wszystkie odpowiedzi" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Answer Survey" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "September" +msgstr "Wrzesień" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "December" +msgstr "Grudzień" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,month:0 +msgid "Month" +msgstr "Miesiąc" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Group by..." +msgstr "Grupuj wg..." + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Mail Settings" +msgstr "Ustawienia skrzynki pocztowej" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.evaluation_reminders +msgid "Appraisal Reminders" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,wait:0 +msgid "" +"Check this box if you want to wait that all preceding phases are finished " +"before launching this phase." +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Legend" +msgstr "Legenda" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,month_first:0 +msgid "First Appraisal in (months)" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +msgid "Draft" +msgstr "Wersja robocza" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,send_anonymous_employee:0 +#: field:hr_evaluation.plan.phase,send_anonymous_manager:0 +msgid "Anonymous Summary" +msgstr "Anonimowe podsumowanie" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Pending" +msgstr "W oczekiwaniu" + +#. module: hr_evaluation +#: field:hr.employee,evaluation_plan_id:0 +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,name:0 +#: field:hr_evaluation.plan.phase,plan_id:0 +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan +msgid "Appraisal Plan" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Print Survey" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "August" +msgstr "Sierpień" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "June" +msgstr "Czerwiec" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Significantly bellow expectations" +msgstr "Znacznie poniżej oczekiwań" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Validate Appraisal" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid " (employee_name)s: Partner name" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_is_follower:0 +#: field:hr_evaluation.evaluation,message_is_follower:0 +msgid "Is a Follower" +msgstr "Jest obserwatorem" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,plan_id:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,plan_id:0 +msgid "Plan" +msgstr "Plan" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,active:0 +msgid "Active" +msgstr "Aktywny" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "November" +msgstr "Listopad" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Extended Filters..." +msgstr "Rozszerzone filtry..." + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_anonymous_employee:0 +msgid "Send an anonymous summary to the employee" +msgstr "Wyślij anonimowe podsumowanie do pracownika" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan_phase +msgid "Appraisal Plan Phase" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "January" +msgstr "Styczeń" + +#. module: hr_evaluation +#: view:hr.employee:0 +msgid "Appraisal Interviews" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_summary:0 +#: field:hr_evaluation.evaluation,message_summary:0 +msgid "Summary" +msgstr "Podsumowanie" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Date" +msgstr "Data" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Survey" +msgstr "Ankieta" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,action:0 +msgid "Action" +msgstr "Działanie" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: selection:hr.evaluation.report,state:0 +msgid "Final Validation" +msgstr "Ostateczne zatwierdzenie" + +#. module: hr_evaluation +#: selection:hr_evaluation.evaluation,state:0 +msgid "Waiting Appreciation" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all +#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all +msgid "Appraisal Analysis" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,date:0 +msgid "Appraisal Deadline" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,rating:0 +msgid "Overall Rating" +msgstr "Ogólna ocena" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Interviewer" +msgstr "Przeprowadzający rozmowę kwalifikacyjną" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report +msgid "Evaluations Statistics" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Deadline Date" +msgstr "Data ostatecznego terminu" + +#. module: hr_evaluation +#: help:hr_evaluation.evaluation,rating:0 +msgid "This is the appreciation on which the evaluation is summarized." +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Top-Down Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "General" +msgstr "Ogólne" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_answer_employee:0 +msgid "Send all answers to the employee" +msgstr "Wyślij wszystkie odpowiedzi do pracownika" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: selection:hr.evaluation.report,state:0 +#: view:hr_evaluation.evaluation:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Done" +msgstr "Wykonano" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree +msgid "Appraisal Plans" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_interview +msgid "Appraisal Interview" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Cancel" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "In Progress" +msgstr "W toku" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "To Do" +msgstr "Do zrobienia" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Final Validation Evaluations" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,mail_feature:0 +msgid "Send mail for this phase" +msgstr "Wyślij mail dla tej fazy" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,email_subject:0 +msgid "char" +msgstr "znak" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "October" +msgstr "Październik" + +#. module: hr_evaluation +#: help:hr.employee,evaluation_date:0 +msgid "" +"The date of the next appraisal is computed by the appraisal plan's dates " +"(first appraisal + periodicity)." +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,overpass_delay:0 +msgid "Overpassed Deadline" +msgstr "Przekroczony termin końcowy" + +#. module: hr_evaluation +#: help:hr_evaluation.plan,month_next:0 +msgid "" +"The number of month that depicts the delay between each evaluation of this " +"plan (after the first one)." +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Self Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,survey_request_ids:0 +msgid "Appraisal Forms" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "May" +msgstr "Maj" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.open_view_hr_evaluation_tree +msgid "" +"

\n" +" Click to create a new appraisal.\n" +"

\n" +" Each employee may be assigned an Appraisal Plan. Such a " +"plan\n" +" defines the frequency and the way you manage your periodic\n" +" personnel evaluation. You will be able to define steps and\n" +" attach interviews to each step. OpenERP manages all kinds " +"of\n" +" evaluations: bottom-up, top-down, self-evaluation and final\n" +" evaluation by the manager.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Internal Notes" +msgstr "Notatki wewnetrzne" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Final Interview" +msgstr "Ostateczna rozmowa kwalifikacyjna" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,name:0 +msgid "Phase" +msgstr "Faza" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Bottom-Up Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "February" +msgstr "Luty" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Interview Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:survey.request,is_evaluation:0 +msgid "Is Appraisal?" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:320 +#, python-format +msgid "You cannot start evaluation without Appraisal." +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,user_to_review_id:0 +msgid "Employee to Interview" +msgstr "Pracownik do rozmowy kwalifikacyjnej" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:235 +#, python-format +msgid "" +"You cannot change state, because some appraisal(s) are in waiting answer or " +"draft state." +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "April" +msgstr "Kwiecień" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Appraisal Plan Phases" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.action_hr_evaluation_interview_tree +msgid "" +"

\n" +" Click to create a new interview request related to a " +"personal evaluation. \n" +"

\n" +" Interview requests are usually generated automatically by\n" +" OpenERP according to an employee's appraisal plan. Each " +"user\n" +" receives automatic emails and requests to evaluate their\n" +" colleagues periodically.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_ids:0 +#: help:hr_evaluation.evaluation,message_ids:0 +msgid "Messages and communication history" +msgstr "Wiadomości i historia komunikacji" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Search Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,sequence:0 +msgid "Sequence" +msgstr "Sekwencja" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(user_signature)s: User name" +msgstr "" + +#. module: hr_evaluation +#: view:board.board:0 +#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_board +#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests +msgid "Interview Requests" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,create_date:0 +msgid "Create Date" +msgstr "Data utworzenia" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,year:0 +msgid "Year" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,note_summary:0 +msgid "Appraisal Summary" +msgstr "" + +#. module: hr_evaluation +#: field:hr.employee,evaluation_date:0 +msgid "Next Appraisal Date" +msgstr "" diff --git a/addons/hr_evaluation/i18n/zh_CN.po b/addons/hr_evaluation/i18n/zh_CN.po index d03ac984bf4..0b5cafc0340 100644 --- a/addons/hr_evaluation/i18n/zh_CN.po +++ b/addons/hr_evaluation/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-11-30 14:35+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 09:42+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:06+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: hr_evaluation #: help:hr_evaluation.plan.phase,send_anonymous_manager:0 @@ -886,6 +886,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击根据人员评估来创建一个新的面试要求。 \n" +"

\n" +" 面试要求通常由OpenERP根据员工评估计划自动生成。每个用户\n" +" 会定期自动接到要求评估同事的电子邮件。\n" +"

\n" +" " #. module: hr_evaluation #: help:hr.evaluation.interview,message_ids:0 diff --git a/addons/hr_evaluation/i18n/zh_TW.po b/addons/hr_evaluation/i18n/zh_TW.po new file mode 100644 index 00000000000..62fce50c577 --- /dev/null +++ b/addons/hr_evaluation/i18n/zh_TW.po @@ -0,0 +1,910 @@ +# Chinese (Traditional) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-18 02:50+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-19 05:27+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_anonymous_manager:0 +msgid "Send an anonymous summary to the manager" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Start Appraisal" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: view:hr_evaluation.plan:0 +msgid "Group By..." +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,request_id:0 +#: field:hr.evaluation.report,request_id:0 +msgid "Request_id" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "March" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,delay_date:0 +msgid "Delay to Start" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Appraisal that are in waiting appreciation state" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,company_id:0 +#: field:hr_evaluation.plan.phase,company_id:0 +msgid "Company" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,evaluation_id:0 +#: field:hr_evaluation.plan.phase,survey_id:0 +msgid "Appraisal Form" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,day:0 +msgid "Day" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,phase_ids:0 +msgid "Appraisal Phases" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Send Request" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan,month_first:0 +msgid "" +"This number of months will be used to schedule the first evaluation date of " +"the employee when selecting an evaluation plan. " +msgstr "" + +#. module: hr_evaluation +#: view:hr.employee:0 +#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_tree +msgid "Appraisals" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(eval_name)s:Appraisal Name" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_ids:0 +#: field:hr_evaluation.evaluation,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Mail Body" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,wait:0 +msgid "Wait Previous Phases" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_evaluation +msgid "Employee Appraisal" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Cancelled" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Did not meet expectations" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr +msgid "Appraisal" +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_unread:0 +#: help:hr_evaluation.evaluation,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Send to Managers" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,date_close:0 +msgid "Ending Date" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.evaluation,note_action:0 +msgid "" +"If the evaluation does not meet the expectations, you can proposean action " +"plan" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Send to Employees" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:84 +#, python-format +msgid "" +"\n" +"Date: %(date)s\n" +"\n" +"Dear %(employee_name)s,\n" +"\n" +"I am doing an evaluation regarding %(eval_name)s.\n" +"\n" +"Kindly submit your response.\n" +"\n" +"\n" +"Thanks,\n" +"--\n" +"%(user_signature)s\n" +"\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Appraisal that are in Plan In Progress state" +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_summary:0 +#: help:hr_evaluation.evaluation,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: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Reset to Draft" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,deadline:0 +msgid "Deadline" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:235 +#: code:addons/hr_evaluation/hr_evaluation.py:320 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "In progress Evaluations" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_survey_request +msgid "survey.request" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(date)s: Current Date" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.act_hr_employee_2_hr__evaluation_interview +msgid "Interviews" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:83 +#, python-format +msgid "Regarding " +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_follower_ids:0 +#: field:hr_evaluation.evaluation,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_unread:0 +#: field:hr_evaluation.evaluation,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,employee_id:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,employee_id:0 +#: model:ir.model,name:hr_evaluation.model_hr_employee +msgid "Employee" +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.evaluation,state:0 +msgid "New" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,mail_body:0 +msgid "Email" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Exceeds expectations" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,mail_feature:0 +msgid "" +"Check this box if you want to send mail to employees coming under this phase" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Creation Date" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_answer_manager:0 +msgid "Send all answers to the manager" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Plan In Progress" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Public Notes" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Send Reminder Email" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr_evaluation.evaluation,rating:0 +msgid "Appreciation" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Print Interview" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,closed:0 +msgid "closed" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Meet expectations" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,nbr:0 +msgid "# of Requests" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "July" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,state:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,state:0 +msgid "Status" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_plans_installer +msgid "Review Appraisal Plans" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.action_evaluation_plans_installer +msgid "" +"

\n" +" Click to define a new appraisal plan.\n" +"

\n" +" You can define appraisal plans (ex: first interview after 6\n" +" months, then every year). Then, each employee can be linked " +"to\n" +" an appraisal plan so that OpenERP can automatically " +"generate\n" +" interview requests to managers and/or subordinates.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Action to Perform" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,note_action:0 +msgid "Action Plan" +msgstr "" + +#. module: hr_evaluation +#: model:ir.ui.menu,name:hr_evaluation.menu_eval_hr_config +msgid "Periodic Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,month_next:0 +msgid "Periodicity of Appraisal (months)" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Significantly exceeds expectations" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "In progress" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Interview Request" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,send_answer_employee:0 +#: field:hr_evaluation.plan.phase,send_answer_manager:0 +msgid "All Answers" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Answer Survey" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "September" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "December" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,month:0 +msgid "Month" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Group by..." +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Mail Settings" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,name:hr_evaluation.evaluation_reminders +msgid "Appraisal Reminders" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,wait:0 +msgid "" +"Check this box if you want to wait that all preceding phases are finished " +"before launching this phase." +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Legend" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,month_first:0 +msgid "First Appraisal in (months)" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,state:0 +msgid "Draft" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,send_anonymous_employee:0 +#: field:hr_evaluation.plan.phase,send_anonymous_manager:0 +msgid "Anonymous Summary" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Pending" +msgstr "" + +#. module: hr_evaluation +#: field:hr.employee,evaluation_plan_id:0 +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.plan:0 +#: field:hr_evaluation.plan,name:0 +#: field:hr_evaluation.plan.phase,plan_id:0 +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan +msgid "Appraisal Plan" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Print Survey" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "August" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "June" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,rating:0 +#: selection:hr_evaluation.evaluation,rating:0 +msgid "Significantly bellow expectations" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Validate Appraisal" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid " (employee_name)s: Partner name" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_is_follower:0 +#: field:hr_evaluation.evaluation,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,plan_id:0 +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,plan_id:0 +msgid "Plan" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan,active:0 +msgid "Active" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "November" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_anonymous_employee:0 +msgid "Send an anonymous summary to the employee" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_plan_phase +msgid "Appraisal Plan Phase" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "January" +msgstr "" + +#. module: hr_evaluation +#: view:hr.employee:0 +msgid "Appraisal Interviews" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,message_summary:0 +#: field:hr_evaluation.evaluation,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Date" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Survey" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,action:0 +msgid "Action" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: selection:hr.evaluation.report,state:0 +msgid "Final Validation" +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.evaluation,state:0 +msgid "Waiting Appreciation" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: model:ir.actions.act_window,name:hr_evaluation.action_evaluation_report_all +#: model:ir.ui.menu,name:hr_evaluation.menu_evaluation_report_all +msgid "Appraisal Analysis" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,date:0 +msgid "Appraisal Deadline" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,rating:0 +msgid "Overall Rating" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Interviewer" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_report +msgid "Evaluations Statistics" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "Deadline Date" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.evaluation,rating:0 +msgid "This is the appreciation on which the evaluation is summarized." +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Top-Down Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "General" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan.phase,send_answer_employee:0 +msgid "Send all answers to the employee" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr.evaluation.report:0 +#: selection:hr.evaluation.report,state:0 +#: view:hr_evaluation.evaluation:0 +#: selection:hr_evaluation.evaluation,state:0 +msgid "Done" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan:0 +#: model:ir.actions.act_window,name:hr_evaluation.open_view_hr_evaluation_plan_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_open_view_hr_evaluation_plan_tree +msgid "Appraisal Plans" +msgstr "" + +#. module: hr_evaluation +#: model:ir.model,name:hr_evaluation.model_hr_evaluation_interview +msgid "Appraisal Interview" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Cancel" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "In Progress" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +msgid "To Do" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +msgid "Final Validation Evaluations" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,mail_feature:0 +msgid "Send mail for this phase" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,email_subject:0 +msgid "char" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "October" +msgstr "" + +#. module: hr_evaluation +#: help:hr.employee,evaluation_date:0 +msgid "" +"The date of the next appraisal is computed by the appraisal plan's dates " +"(first appraisal + periodicity)." +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,overpass_delay:0 +msgid "Overpassed Deadline" +msgstr "" + +#. module: hr_evaluation +#: help:hr_evaluation.plan,month_next:0 +msgid "" +"The number of month that depicts the delay between each evaluation of this " +"plan (after the first one)." +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Self Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +#: field:hr_evaluation.evaluation,survey_request_ids:0 +msgid "Appraisal Forms" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "May" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.open_view_hr_evaluation_tree +msgid "" +"

\n" +" Click to create a new appraisal.\n" +"

\n" +" Each employee may be assigned an Appraisal Plan. Such a " +"plan\n" +" defines the frequency and the way you manage your periodic\n" +" personnel evaluation. You will be able to define steps and\n" +" attach interviews to each step. OpenERP manages all kinds " +"of\n" +" evaluations: bottom-up, top-down, self-evaluation and final\n" +" evaluation by the manager.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.evaluation:0 +msgid "Internal Notes" +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Final Interview" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,name:0 +msgid "Phase" +msgstr "" + +#. module: hr_evaluation +#: selection:hr_evaluation.plan.phase,action:0 +msgid "Bottom-Up Appraisal Requests" +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "February" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Interview Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:survey.request,is_evaluation:0 +msgid "Is Appraisal?" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:320 +#, python-format +msgid "You cannot start evaluation without Appraisal." +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.interview,user_to_review_id:0 +msgid "Employee to Interview" +msgstr "" + +#. module: hr_evaluation +#: code:addons/hr_evaluation/hr_evaluation.py:235 +#, python-format +msgid "" +"You cannot change state, because some appraisal(s) are in waiting answer or " +"draft state." +msgstr "" + +#. module: hr_evaluation +#: selection:hr.evaluation.report,month:0 +msgid "April" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "Appraisal Plan Phases" +msgstr "" + +#. module: hr_evaluation +#: model:ir.actions.act_window,help:hr_evaluation.action_hr_evaluation_interview_tree +msgid "" +"

\n" +" Click to create a new interview request related to a " +"personal evaluation. \n" +"

\n" +" Interview requests are usually generated automatically by\n" +" OpenERP according to an employee's appraisal plan. Each " +"user\n" +" receives automatic emails and requests to evaluate their\n" +" colleagues periodically.\n" +"

\n" +" " +msgstr "" + +#. module: hr_evaluation +#: help:hr.evaluation.interview,message_ids:0 +#: help:hr_evaluation.evaluation,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.interview:0 +#: view:hr_evaluation.evaluation:0 +msgid "Search Appraisal" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.plan.phase,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: hr_evaluation +#: view:hr_evaluation.plan.phase:0 +msgid "(user_signature)s: User name" +msgstr "" + +#. module: hr_evaluation +#: view:board.board:0 +#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_board +#: model:ir.actions.act_window,name:hr_evaluation.action_hr_evaluation_interview_tree +#: model:ir.ui.menu,name:hr_evaluation.menu_open_hr_evaluation_interview_requests +msgid "Interview Requests" +msgstr "" + +#. module: hr_evaluation +#: field:hr.evaluation.report,create_date:0 +msgid "Create Date" +msgstr "" + +#. module: hr_evaluation +#: view:hr.evaluation.report:0 +#: field:hr.evaluation.report,year:0 +msgid "Year" +msgstr "" + +#. module: hr_evaluation +#: field:hr_evaluation.evaluation,note_summary:0 +msgid "Appraisal Summary" +msgstr "" + +#. module: hr_evaluation +#: field:hr.employee,evaluation_date:0 +msgid "Next Appraisal Date" +msgstr "" diff --git a/addons/hr_expense/hr_expense_demo.xml b/addons/hr_expense/hr_expense_demo.xml index aa490eddbea..b7b6cd37956 100644 --- a/addons/hr_expense/hr_expense_demo.xml +++ b/addons/hr_expense/hr_expense_demo.xml @@ -15,7 +15,6 @@ - /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCACAAIADASIAAhEBAxEB/8QAHQABAAMBAQEBAQEAAAAAAAAAAAYHCAUEAgMBCf/EAD0QAAEDAwMCBAQDBgILAAAAAAECAwQABREGEiEHMRMiQVEUYXGBCDJCFVKRobHBJHIjJSYzU2JjkqLR8f/EABsBAQADAAMBAAAAAAAAAAAAAAABAgMEBQYH/8QAIREAAgICAgIDAQAAAAAAAAAAAAECEQMxBCESQQUTUWH/2gAMAwEAAhEDEQA/ANl0pSgFKUoBSlKAUpSgFKUoBSlKAUpSgFKUoBSlKAUpSgFKUoBSlKAUpSgFKUPHegFKqHUP4gtE2TXh07LcJgoy29dUry028P04A5SOxXnAPpgE1JI3UITZkQw7HcDbHnkNOTXE4QkrVtTgjKSMlOeQRkcHnFZSUdkWTqlKVYkUpSgFKUoBSlKAUpXE1xMulv0vMm2cxhLZSFgyM+GlORuUrHIATk/b1qG6Vg7ZIHc4qNaj11piwrLM25oXIGR8OwkuuZAzgpTnB5HfFQeTZdYX8PN3i7lCOApiNuc86TlaVHyNp4IAOF9s5znPI6j6ah6S6eXS5QGC1P8ACKWpD7xeU3htawNoASMLQPygE5I9TnD7rdIo5P0d299Urk7GcVYLO2yEpUS9O3KSkjuFBHlGMHPn4xzWf+tnVPUEh1Nni6tdnvutlD7cTLDCSrgM5GN54OSQQPRRAOIrctd3U6MtGjUY8KFtakORStXibfKlWVAFKNoSoggH37VCY6ZbL0gKt6UPqVtbfU4MqSfTk5Hb78e1bKPthJvtn2i2NiIVXNxK+fEVtPc+xz+ntx645x2q4/w89U2YUiboXVCXYtuuEdMeBdnFK2Q9qdjbSgo4DQz5VJxtOArjGyrm2y3aplxcX4zkRtDyuMgZdQjA/wC/Ga5Oqp4MVQTyokhORkE+386SUZ2i9H+lOnppuNliTFpCHHGgXUfuL/Un6g5H2r31lD8LPW+NAeh9ONWuhkKV4dsmqVkBZyrwnD8zkpUfmPQVq+pSpUBSlKkClKUArk3m+x4ClMto+IkpHKEqwEf5len05PyqLXnqA0qZc7ZEbVEXBeLDrzxCVgj9SUH0PO1R4I55qttQa8tMRCm/j20jJJ2qK1E+pOM8/WrKP6VcixpespgdKX32WEezIz/M819sXq1XJCmH5aJSHElDranMkpIwoY+hNZyvvVG3N7gw0+8r5kJH9/6VCrlr+5z3P8FFaZVnyqJKiPvxVvG+inmkaR6vWm6XnpmyI0xKH23izcAuYhlLrjYU3u3OnbgLSVbPXII5AqsurXUlFi6YR+nfhplagdUpElBUsphpLhUhlCjys7SEjBKQngFQwa7GutcX3S+grVKbiPLub7CPEuyHCExJPhJbdQoAYKlBsLAUcEqKiCUis7Wtplx5+7uOmXIySSs7ikkZOCe6vf6/XPEx4v30WUVdnmZdnW1pEaTIQ4XleYk8NH90+/19Tx7Z6d1c0/OsMdpMyQzNZWsy5ToIZCR2Awnyqzj1OMnPoK/F1SGoy33mytx9OFIUnkJI/JgjP1FerR9jTPv8Ry5SEORY2Hww5kkkKATvJJCtqlA49QOScVbO1GHm21XfRtjVvxS2Xj0W6VQbppC4S7/MhBmehCWhHdWVuNIdbd3KKkpKFZ8pwD3BPOQbP0/orRRjqdTpi2pZQNjS0FTgW2M4P1PJ9TznknnixrlEYuirN8SFtIS0ypWQUJI8MEj67Nx5PJ+RzNL3c0xVfDoTtbCMg+mc9v8A73z64OPG8jm5c7t9HY/QoKl7IDrXpR03vYU27p2PbFKjrdhzYp/0jqinJBbIyoJBSR6Z7j3sjor+1bfppWnL9fReJ1uecbjvqaKVripVtRuUSfFUkgpK+DwMjPKonp+beJ18iMSYMl21yWkre3tEtI3NhxCgVDGQrbyPXNdaM87a5chKch21J+JbISUpUjcpS0pGBnxEL291eYcklFb8H5HJgyJTdxK5cCa62WlXy4422MuLSn2ye9RzWGqWLNNh2popVPmJW4AeQ20j8yz9SQAPqedpFeG33tmUwVpWC8OHNx8wPzr2KVnWN0Sd2elP+7bUr5qO0f8Av+Vc6ZcXlJKfHDYP/DHP8T/bFcaVcfdVciZdAkHzVdRKuRR/XnpZrGfcF3vSVyRcvOVuQpjpS73Jw252wCcgHbgjOTk1nfVN41hZ2HWNQ2qZapiAUp+IjKShw+4VjaftxW35N1JJwquRcbhEU2USi0pK+CleDu+WPWrqBRyRgiFqyciSFzW0SW8+Ydj9vSrl6UR2dQartwaT/g20/GOkjshIyM/faPvVwXLRGjr86r/Yy0urPd1UVLSj9wN1fpaek1hscG4v22Iq3qkMbXfAeWAUpO4ABROBkDOO9Sk1tkOn2kVjrzTolWU3+VqJS1SyqZ8A40Qhkr525Ku4TgE49KgMaBPhRkKctc2JBffKg8Y60NLTgEjcocn2we38tb6f0XZLWlEhMZoyCkbn3AFOH5bjzj5V+2qLDpq+W/4G7wxJZGdqQ4pGCRjPBHPPHtUSSeiYWtmSEyDKkPyjhLcfhBUO6+c/w/vUs6KFiVqb4aU+USSUuJU3jKACf3sDuUd8f3rgdQNLS9DXUxVuqftYG6HJcwTIUT+VWOygAB7flxxXO0fqlNm1XCmr8kcqKLglxHKUHGSfXAUEHjuBxXXc/FLJx5wjujl8eajkjJ6NGavkSUaptbCg1CakR222kqUA22dxSSAkEpSVZ75JIUe2APXe71Mt8VyLMl+NsT5VDkAdsA4B9D3yf6V+V1tMC6WaN4KmfEfUBCkB3ISrnc1+YknKUY743n6VH9WW25sSVIvihHS3ILCnEhSmXlAE5BAynjBAI5BOOxFeGjO1o9B4J0Szpzd79b9YIgy5a3bdIaCg0V7ko3I3pUnP5T2BHYg+vBFlXV1hy5xfihva8Vt0jKU7Qg7iSc5UBtBx37/pJxWumbe/EQu6PEttMN+L4jx2hW4KwST8kng4+5xUvsEVV5vq2GtoRPyXE5CiljCUrcKh2Ckp2pHuoHnHDDDJlko122YZ1GLcl6R99f8ARNy1Xb5z2m7oLVqYRVxYshTqkBTZIJRweCRuAVg7d5I5ArHcbXPWHpC+mzamtklyMydjQuCFHA/6T6TyPllQHtW2uvGlnr7CgzoEow7hBcK47wUUgKIwQSOQDx5h2IFQS0ajuakpsmqWGlOq8gRLQkeL9P0ufVOa+jJnn/4Qbpp1jd1daYzsiO5BnSZSozEZRDod2hGVhWEYTlYHPr6nBxZ93tV9iqQiVJitleM4bPH/AJVz9R6Z0u6mOxL0/ZpIaR4jTbkVKvCCieyTwnJB7d8VFbhFsiY6X4dptewZCHERkEcexxitV5PTMnS2SCTAd+JQybiJfiAEFlwBI+RIA9vevjUlw0toiz/tW+T4kRCuEuPDcXFeyEDKln7Go7YrwtqRIkTJJ8Fsc+gSkDKjx8qg8bTEjqXqJOodRoubsOXIDEKPEJRllLqEOYcKVBKUJWpWwAFzw3DkYzUzk49CCUuz1x+vWm7jfGosCdJjulwJZcfihttRzwMjtn54q2pOoPjrGp9HAdjk49iU8isfdcOn8bSa7fcrYzPisyh4ciJLWFuRpCUpK0pWEp8RvJUlK9oyW19wATpK1ufCabjR5jqWlljCysgYURk/1qMb8tia8X0S9dzdU0nzY8orrQrLHmJbW7qizN+IAQ2mQFOD5FJxzVUy7zECdrkyRKOPyNDw0fx7/wAzXPN6fBKYENmPnuoJ3KP39amUor2EpP0XLqTpPbtQRBHmXNclkAkbYYVtVwUrSd/BBGQaqbSH4ZpMXWFwumqbquXDYdxbURI53PoyTveSrhJHHlBVznngZ8bMG93VwA/EO5OQOcD7VLrB071LL2nxJDST/wA5FYuTbNVGkTmLo1+2x3E2mTcQpWCpp9tXhukdtxCs/fn6HAxH9W6a1TcoyIqdLvObVBxXguJ8EqxjKUZTtPzxzx6ZBlen+lD6QlU2fIVj08U1OrToe0wkjLfiEeqjmuo5PxHH5E3k7Te69nMw8zJiVLtf0q3T2mtbzGmWZNvh2dKUhLj8p/x3iUgBJQE8oAx23f0AEz0fo692ic7KfujcpTy9ziwVFaz7qJFT+NAiRkgNMoTj2FeoADsK34vx+HjO4Lv9ZTLyJ5dnjulvZuEcsvDIIqA6g6cuvMuIgzlpbUMFlwBxsj22qzx9MVZVK5ybWjjtJ7M63LSeqrE24iHbLctkncRGa8Hce2cDIzUEuX7WhtLjrtT8ZtSysthRUgKPchPYfathuNoWMLSCPmK5Vx05apwIeitkn5VosrRm8SZhjXd7etdmSlTbjSpbyGB5VDgqG4k/5c1ZfS7Ulu05p6JeEwlyQLeqK4I7Sd6XGy45sVglSiUhaxwkDcANxXxd2pOkumb3BchzYTbrDndJ4wfcEcg/MVAJf4aLWp3/AFdqO7QG1DatKFgkj23DB/jmqzm5Oy0IKKozp1h+M1tq9y1W5LLU1UpyZMcS0geCQNjYUtCQpZxkjf5khSQexqeWPSmoLiwz4zTrz+xIccOTuVjk8/OtCaE6KaQ0lEDEGIXFE5cddIUtw+5P9gAKsCFaLfESEsx0JA+VULmdtP8ASC5yilUkbEn3qxLB0itcQJVJAWoVaaUpSMJAFf2gOHa9LWi3pAZit5Hriuw0y02MIQlI+Qr9KUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAf/2Q==
@@ -27,7 +26,6 @@ AT - /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCACAAIADASIAAhEBAxEB/8QAHAAAAwEAAwEBAAAAAAAAAAAAAAUGBwMECAIB/8QAPBAAAQMDAwEECQEGBQUAAAAAAQIDBAAFEQYSITETQVFhBxQiMkJxgZGhFSMzkrHB0QhDYoKiFiRS4fD/xAAbAQABBQEBAAAAAAAAAAAAAAAAAQIDBAUHBv/EADYRAAECBAMFBgQGAwEAAAAAAAEAAgMEESEFMUEGElGR8BNhcYGh0SIyM7EUQlLB4fEjJGKy/9oADAMBAAIRAxEAPwD2XRRRQhFFFde4yW4sNbq5DEckhDa3jhPaKISgdRklRSAM5JIA5NBNEoBJoF2KKjXJ7kTXMKQ6slmc2qMc5O1WRjA7ucfc1ZUC4B4pNSEUUUUIRRRRQhFFccl9mO32jzgQnOMnvPgPGvmFKalsB1rIB7j1FJvCtEtFzUUi1NqFFqdjQ2GkyJ0pYbabKwkAngE/Ujjj5imFi/Vf0OB+u+pfq3qzfr3qW71ft9o7Ts9/tbN2du7nGM80Agoou7RRRSpEUUUUIRXw/wAMOH/Sf5V91wT3UNRVlZI3DakAZJJ6f/dw56UhyShQ2vWFKszkhv8AeQ3+0BHcArH9R9qtbPObuVqiz2ina+0leEq3BJI5TnyOR9Ki5ipl5ny4EYobtYBD0nqp5RT7iO7APJV9B3kc/oenuO2SVanyrtbe+U4KQAEqJOPP2gv7ikgCsMjUH7pIho8d6uKKKKchFFFFCEl1S2AmJKxy26UZ8AoY/mBSiNcDb5DpUtSWFpKzhWMYHtc93j/F4091WkqsUjCgNu1Qz4gjH5xWYauvDbcVEUubQ8Atzx29Upx4nqfpVSKCH1UzPlTzQKXL9rCZf30EMxk9nHGeEk+R8ifqmtHrFdBa4asi3Yz0FHqry924eysHPJ3H3up4J+1axZL5b7xH7aI6RggFDg2kE5x5Hp3E1LCLQKJjwa1TKiiipkxFFFFCF17hMYhR1OvutNgJKv2iwkYHUknoB3ms/iP3rWMswESpjFhdDjn6iGOzclt7hlpsgYbR7QAUfbWkZ5wVG3vtitF8TGTdoLUsRne2Z359lWCO7qOeh4NMEJShIShISkDAAGAKEKb2oakhttO1HYI2jwxkf2qQsbwsnpedjq2oYubZwTnqoZ4896cfWqrUk2Ja3mZElwNtqK2UJAypaiobUJA5KjjgCor0pR5rCbbqSAlSZEFwbxtBUnJBSccg4Vx39aikzSLuH81ksz9PeGl1rFwmRoEN2ZMeSyw0MrWru/uSeAByScCsuv2q7pcbiJESRJgsNfuWm14I5B3LA4UTgcHKQOOcknhud6u2qXYqHmQzhIKYyDlKFY9pZPeevyHHXJNDabXGgw1MlKXVuDDqlD3vL5VdnsSlMAhtdHG/Fdk3gNSermwtUrDixYk64thGjBrxKfaP1IzfI5adCGZ7ScutDoodN6M/D4jqk8HuJfLWlCSpZASOpNZLcoD9mnNT4S1BDbgW2sHls+B8j08wSDVSnUIftKbiHkOSkoSHm+UtpUM52pJOCcnB57qI7peNAbNyhrDd6HgevdXJCYe9xgxfmHqnt2mNBpxD6UFogfs1DlXmrwHTjrUSLFatTy5TjFtZcLCwHHgCApZ+HcCM4GMjPGR41Pz75dNX38af02HVArT67MSkFMZskZVyQCrBztz+cCtZ03Y7bp61ot1sYDTQO5ajyt1Zxla1fEo4HPkB0AFUBD37uK097dyUpC0nGinb/wBPxlY7woqz/EP613YkSPFO+LAdh7wM9igBKvA4TkHr4VYUUhlxxS9p3JXZzKWsqcW4GwkYCknnrjy+3lTSiipmN3RRRuNTVFFFFOSIqcumsrBGtLc9m5NyWZDaVxVxf2vrQUAU9hjh3IIwUkgZya72rosqdpm4QokKBPckMloxZwyw+hXC21jByFJKhzxzzxS3TulgzNRe746J94/y14w3FSRjs2k9APE9SeT0FCEoTGkS4rF/u0UMzmdy47JcCxHbPPXvWpHClZPXA78pb1dHrtIEGACWCevTtPM+Cad+lSPepNskfobjZdZUlxyOtOe2TtAwDnqOuO+sy0Zq15SlwpDbTMwqOFFGO0x8PkR4U+O84dhsXFWM7VzPyi+7/wBOFjQd3uRjYhOERmSZ+EOGfHuHX86PaILUBnanCnFe+vx8vlXfC6lUXyX3ho/7a50X5742W1fIkVxGZ2jhTkZ0aO8lzsyR7K2wMY0NbYBUDu1aFIWApKhgg9DUjqSzKTHebZeeaYeSU9o2rC26aN31g/vGnE/LBrjkXuHJkptcFxuROeGEsHqM+Ir1ux+MRjOCDJ/5A75m6U1JrlTioJsQyzeJoRkdaqh9EqLJAsKbPbY6YslkFbySrKnuf3mfiHTPeDweoJtKyafAudgmtlS1x3cBTbrSuPPyPmDwe/Iq/wBKX1N5iKDqEtS2sB1CfdV4LT5HwPIPHPBPUp6RbDHbQbsPp1/aWRnnPPZRrOHqnVFFFZa1EUUUUIRRRRQhFFFde4TY8BhL0kuBK3UNJDbSnFFS1BI9lIJxk5JxhIBUSACQoFTQIWeekaQ8Ly5EEllzctDiUspKVNjYAErO47lZ3KyAn2VJGOCpUDqj0eiVNcuDiJ0OYshS5MN3hSh8Sk8gnzIB86sULVdtZvSVqK0h9bmSAMJScIHHkEj+9VKledMxraV+BRYUvBYHfDV1e/QEZZag1svPmAJ5z3vNq28ljkdOp4DQS45DvSE8bservEefVJP2rlGo4bSg3cWpNscPH/dNkIJ8ljKT961CZChyeXo6FK/8gMH7ilEuwNLSQy77J+B0bga59M4Vsziri8b0s88PiZyFxyAU4ZMwhSzhyKhLxfENs9nb3G331pzvQd6Wx4nHU+AqQsuqZtiusbUdvfC4u7Dj5SStpzOFB0H4T0PTb+arLxoOwTFl+O09a5CXdwk250tZWPEe4r5EVO3LROo7fMXcLLNh3PtBtkxJKexMhPTqMp347yBnoa61srs7J7PSfZQBvOd87yLu7qfpH6fOtVgTTokxF3ycshlTz48DobEUXonTt6tGvNOqSQEPhI7ZrIKmVY4Uk948D3/es/vTs/Sl7bj3ILYKVb4k9gewvzwehwcFPI5wcg1lFkvt49Hl3ZmOwp9tgA+yp1HaIjZ6oUpOQpo/8fsa9HWW66b9JulVtFTLpwC62hwKWyvuWk+Hgfoe8VpDdkXlwFYRzGrfDiOHHI3V7edPsDSaRRkdHU+x48MxZONI6hjX6FuQpPrDaU9rtHsLyPeRyeM54JyO/uJeV55usDUHo+1ElUd9SBkqjvhOW3k4wcg8ZweR3fY1r2gNZwtVxnEhtMW4sgrfipUtYQguLSghwoSFEpSCQnO0qAPUE0sSwkwW/iYB3oR1Gnj56+RvSt7DMW7Zxl5gbsRvHXw7+hVVFFFFYa3EUUVwSZCWiEAb3CMhPl4nwpCQBUpQKonyDHjqU2lDj5SeybUopC1Y4BIBwPPBxSDU109SgSJClAyNhS0nPCCeB9e+vm+XlmA2t114FzGCrw8hWbTL6u9THglWWmVAbQfiPj54/nTpKGZqZYzSt/AZqGciCXgOfrp4p9o9ns2HpJ6rIQk+Q6/k/inpXS+IG4UFllxaUbU87jjnqfzXG7doLf8AnhR/0gmuZ7QYpDm8QizDnAAm19BYegVSWhiFCawpgpVdS4yOwhuuD3gnCfmeB+aXvX6OPcadV88CpjV+rvV+yYQwynguqU87hIxwnPzJ/FM2cZBxXE4UpDNamp8Bc3yyCZNzLYEFzyVoejLxZItoFvlHClLJcUtG5Cj07s9wHWm7+m9P3NsuxNjefjjLGPtyK85OanujSu1l6eDWefWbYtTgPmU5Cvwa5LbrfURkb7Jd7VMWnqw6hcd9PlkHP3TXdYkhF3y5ji1x6yNDyqshmIwuzDHtDmjrMVHOi2y46ImoSr1V5qU2eChY2kjw8DUY/pFi0XBE5q2u2mWg+y9Gyzny9n2SKW2z00ahtiwm/QFtNjgqfZKm/o62SB/uFaJp70q6avDAMjLCVcFaSHmvun+ooP4xlQ5oiDuz5Z+iUOkohDmuMM6Vy55eqnbjPuFwti7dcXUXCMrlIfT7aD3KSscg/PNZ2q43nSV29babkxVthQamtNB1vBBGSCCAcHoR/Q16D/SdM31kvwVsKzzviuDj5gcfiorXVhm6cty7k1MiyIwWlGxxCkOEk9BgkH8dKmw2bhNcYDKjetunK/XcosSk4r2iO+jt2+8MxS/WaT6X9Lus5UJyW7o9m/xG1BCn7S9haD4rbO5WSOcYHfjyrtJ+lzTF6kRbbNTNs94fU216jKjOZLqsDalQTyNxxkhPjgUv9GNogLtxv6re3EmSFqSHGCUFTY49oDhXOTyDVg3Ahzp8REuLGlCO56y32wypC0+6sdxIJGMjg4I5Aryk9OyjJ58qwXBIzOYz45eS35CK+JAY+I7OmlfbNUDiwhOTyScAZHNQur9VRrP6wXCk7klfaJITvIHunPTAAwSefpUB/idm67gX+0TdGWO9XaQxHwhMSA4602FrIdytA4UQhvGT7OMjqab2b0RzLzKbna5uD8pOd5hmQVpCgVbRgDYAN3dnIAz0GI3sDqXWg1xFbKJsdy1F6Tr0mBa9sSKtJcVO52hsEBQbCgNykkgFWMAkYBzitHuPoiSzaW4unr8/BWhCi4lxsESHCBhRWMKSSRyTu+XGDpFotlvtEMRLZDZiMBRVsbTgEnvPieByfCu3VqUmYko8Pg2Pkedehoq0zKw5pm5Fv6fbrivOVx0R6QNPOktNypjO8JC4yjJQokZ9wjeB1BJSBnv5GV8XUktI2zIaXPFbKsH+E/3r07Sy96fst6SRdLbHkqKQntFJw4ADkALGFAZz0PefGkxCWwXGKnEpNpcfzs+F3iSKV8zTuWKcGjwLykYgcHXH8clg8e9QJBCUvhpZ+B0bD+ev0pJLDdxmS3HUIdZUrskpWkFJSnjofPJrXb56JrZI3rtc1yPnersX09ogk+6kHgpA6ZO4/bmRuOgb/aAEJt5ksghKVxAXByM+6BuA8yMfinbJbKYJgs++blIxO83dDX0qKkE3sDlTLLVZWKNxF8IMiQ8jWrbj3Cgk6bjNHfbJEq2L64jufs/qhWU/gV159rujiQLhbLbfW09FpHYPj5ZyM/Iiq1DJBxjpXMhryroMSDCIoLeGXLL0WHDmYlnE1+/PP1UE081DWGmLzcLO4eBGuzRcaPkFnu+S6+5NvVv9amWAKUefXrK9hR89owT/AMqvHIqHWy262lxCuqVAEH6Gk7ulLehZdty5NrdPO6I4UJPzQcpP2qo6C4WFx1oajlRWmTDa1Nj1qKHnVILVcp7EkGy6kakPo6MTQWJA8twwfuDVadQan1DAatl5DyS28OzQtaXNyiMAhQ5I576Q3O03hTeyZFtl/YHQOoDLw+R5Tn7VY+jW0NJuURCGFtMxk9sW1rKyg9ycknOCfxVaam2yMvEm4o+m0m/HQCtc8rO8lIAYpEKGfmNLfvSnq3zWqWyO3b7ZGgt42sNJQPPA5NfkB5c2+IjQ2g4IrgXKkE4SwduQ2D8TigeU9yVZVjKQv5efS22pxRwEgk1SWuOYtvZYWEhwJy4EqKhvPKsE84yT4fIVxXZ//emXzEWpp/6PH252sfdNh1oxtgOuuiOzRRRXtFbRRRRQhFFFFCEUUUUIXVuVtgXJvs50NmQACElaASnPXaeoPmPCpm5aAtjyiuDIdiEkeyodogDHQZIV155J76sKKsQZuNA+m4j7clVmJKXmPqMB+/PNZTcdG3mEkrEcSUAAlUc7upxjbwr7A0jejLbcU2tBStJKVJIwQR1BFblXXmwoc1ITLisvgAgdogHbnrjwrVg448WiNr4LDmNm4ZvBdTuPXusMda8qptExgxDdkkYU8rA+Q/8Aeae33RLj10iJtTcZmA4F+tuPSFlxjCfY7NG0hzceDuWjb1G7pXC9brhaGgw5bpDrDSGgH4ye2Sta1lG0IT+09k4KlFO0JUDnAVt8xt3ik1OYT+Hk4TiXOuBQndB4AnN1KD5qAmlLqHD8JjSsxvxRYCxHH+kytSFSbmw2AralXaLIIGAnkdfPaPrVZSPSsRbfbyX2lIcJDaQtspUB1JBPcSR/DTysXZSUdL4c0vFHOqT+3ovTwRaq/9k= @@ -38,7 +36,6 @@ HA0 - /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCACAAIADASIAAhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcEBQADCAECCf/EAEIQAAIBAwIEAwUECAMHBQAAAAECAwQFEQAhBhIxQRMiUQcUYXGBFTKRsSMkM1JicqHBCDTRFiU2QnTw8VSCkqOy/8QAGwEAAwEBAQEBAAAAAAAAAAAABAUGAwcBAgj/xAA5EQABAgUBBAkDAgUFAQAAAAABAhEAAwQFITESQVFhBhNxgZGhsdHwFCLBMuEzQlJy8QcVI0SCwv/aAAwDAQACEQMRAD8A7L1mot4rorZaKy5TlRFSQPO5ZuUcqKWOT22HXQXceNLpZrPT3S6x296aofmjkhBUCNVJbIZycnYKQCBvnquRamsl02Zj8dOEDzqmXJ/X/iCG68S0lJX0dFTKtbLUTPExjkHLEy4BViM4bJwF+DemtnCV8e+0tXM9GKU09UaflEvPzYVW5s4GPvYx8NKbh6+3alus9wNZO8twophHLJiV/EZ4yjHGFyqhhgIBkqOUKMAp9nfGKwRtauInalqFZuSWerknaXGAdymFGMHBbvtnfCCkv6J08ba2SXw2OTncd53ZELZFzTMmJ2lMC+G8A+47+G6GToB9pnErUw+zKCoq6eoilUzNH+j5/LkICRkr5lYlSNwFycsur3iniSjoLClXS1Pi++Ql6WeAh05SBiQNgqfvKQN+bI7ZIUE88003vknM9RMf0Cklj1+8SepznfucnTK51nVp6tByfSOhWC1dYvr5owNBxP7fNIuqLi3iSjSlo0ujyCmC+KZ0WQ8igDldiOZjgbtnmJPXO+rek9pNyR3nq6Cjkp8FY0j5o3ZsjfJLDAGc7dSN9BXIu9Or4RPNUSDff0Hr6D1OvC4wKllAUeWCPr07/T+p0lTWVCNFn1+fkxUTLXRzf1Sx4N6cfIQzaL2j0LYjrbZVQzk7JC6yALjqSSuD8MbeurOPjvhhqbx2r5IwACytTyEqT22Ugn5Z0nyjqfAG88u8pJ+6OuD+Z184RzygkU8W5bux/wBT2+GiU3aoTqx7R7N3wBM6N0Sy4cdh937ofNNeLRUzx09PdKGaaTPJHHUIzNjJOADk9D+Gp2ueOc/5mQD0iXG239h+ehPj7i+u4doJLZZ7jVUdwrlBmemnaJoo98HKkHmOTj0GT30Si9/1I84AmdFAf4czxH5f8R1nrNKD2Ie2Kh4ooYrPxNV01Ff4uWNJJGWOOvyQqlOgEpJAKDqTlRjKq39OZE9E9AWg4iWq6SbSTDLmhiPPsjNZrNZraBoo+OEp6nh6poZa40s0qeJCEqI4ZJGjYPyq0gIAJAUnBwG7bHSigNzlm55bxUXSRocztMRGqRIpVolIIORlRyBSW5mJyc5Jfa7XUlxvFut9KWaopVlb3mOXyhmPKYdiQT5CWBAIwuCMnQfG89HDHJF4UoEhf9sykDOT97Azt03PfUFfK9MysKAMJYONePiD8eJe41IXUEbk7w/p3njEaHx5EPjyPIzF8JupYZwOb90Y/dwfjqWt7gsta1dO1vqZEQkw1SCRc7YCbjzYHr0231EmQz1L8zVDc0h93IXm58AN8N8bHPw1Eu8M9bb1hFFTTxcpYKpJYDH3vhjIzk9Btqcp1hCwdk92rb9ccNfxC2nVsrGuvf8AO3HrHtRx+/E14knuULpRq+zh/KNzyqfQdh9TuSdWjO6yITj3yp2iQbci47D5dPQb6V9dRpRzpT0NcLhIJOV6eBGXJA5j5jscai1Vbd7jd1KT1nj1TExGaTdEOxGQANwN+wGq+cuVM/5EHUP7a57McTHcbDchPSmSnLszsMHc2CzZ0Y8Ya0klKgMLVEaU8Pmmk5gOZvhn8B9TrUbjRDFXJVUwJ2p4/EGABtn5D+p+ulfQz+8zSU078lFTEySMo3kbpt6k9B6DJ9dTPGKj7TmRQ7eWkix5VA25sfur29T8jpVNqlSyxA+e27iYvqe3S56NpKjw0b4+p4CGSu/6tC6yVEn7Uhs8o68v9zr3CSHw1Yini3d/3j6/M9B/50tVWemxSQF/f6jHikHBQHflz6nqfw9dWNNf6ynb3dapZaKnUvPLLuDjq2euOwH+uvlNaCWUn5w949mWlSRtIU/l3/gQTcSXmns1rlutUqkL+jpoM/tH7L8h1J/10oKKjr+JrlVVlTUEO5LyTEZ8x6AD/vbUjie9VfF19iWKIxQIOSnhzkRr3Y/E9SdFVoo4qGkSmhHlXqe7HuTrOvq+qTsp1+fBEzcK36VGyn9Z8hC2q4Kmgrmoa6PwpwMr+7Iv7ynuNdF+xX25we60vDvG88vjh1hp7q5BUrg494JOQQcDxN85y2MMxDa/hWn4ktLx1S8pU5gkXZ0b1U9vyOlXeLdcLBcfs+6pgsSIKgDCTD+zeo192m9ArPVn7xqOPzxEDg091lCTUhlbj7e0foVrNcq+xj211/DnuPD3Ep96sUeY0qeVmnpFOOXv541wfLjmAOxIUIepqWeCqpoqqlmjngmQSRSxsGR1IyGBGxBG4I1fUlbLqkujXeOERNytc+3zNmZodDuP78oT/tF91peKrhFQW1xNIUMslNKyczyKOYEMeUNjclB0bJJOcDEz1MMc08dEXkWXaJmy0mWCghid8HfYDYnrppcf2GskuUV3tls+0pCjCenlZWhOAACUJBYFcgqM55RtnqraKq8OnEbvFULT4YtIGJRRlQGGT1Oeh1z29UypVaraDAksd2W/xjLxz2vkmVPVtYclsY48M6584yCRpU8CcF6pJAyO2Y8EdfKD07Z/01DKyAU/uMzColmBkbJKiNCeZdhjlxjfHr89TveY2mmmWXxIZHBMaN9xBttt0buOu2olRBBU+DK8lxjNO4KmA7O2cYyvTft+OlsgnrAxdu7dyblGEogLTl23t8fxgcuiQXGvNEsVU70JaaOWni5S0hGW+OASN/hjVHfbfWUtro5JHrDUTs0MZYgosYJLLzA5BOckEdNGkPjyVsNJ73HT17NJEGjjPOisv3iCBy59c99B17qa+422ltcIqJJoZnjbK4XA9D0bYZLDt66c0q/sSWYb/POdHiz6O1gRUSsgIGrnTBznjv7ecVdpNPJVNG5ZKOIczsOrn0HxPQeg+urXxiM3SoRQfuUkOPKMd8fur/U/XVLR+HJUonO4pIWzK46vnYnfueg/86uI5xLzXSohCxIfDpYCPKSOg/lXqfU/M6yrUMvaHxvwN3Ex+gbRNCpOyePrlu07+Ajxlkp4/CAZ6+rHm7sit2/mbv8AD5nQ7xRXqo+yKRw0aNmokU7SSDsP4V6fE5PpqyvVwe20hkMha5VikqxO8UZ6uf4m3A+GT6aquGLd4sorJl8iHyA9z6/TWcpIlJ61Xd84mB71c008sh9NeZ4CLnhe2+5U/iyr+nlG/wDCPTRDQpLVCqWmHiSQhdl3wS2N9RYFLMFUEknAA76M+HeDbu9qugSjbnq/DKOxCq3K+difTRVjl09VVL+pY4fPaB6Rxm/V9UwmSwSpROn9pI7NGixs1JURcO01RVkeI+VCjGwDMO3y1B4isdvv1vko6+BZUcd+oPYg9iPXRHLQ1Ns4coKCskR6iIEPyvzblmPX5EagDUBe1dRdJpkYAVhsdjQ8oFKVTIUrVh2vCB4o4auPDFV4dSWqKFjiGqxuPRX9D8eh0aexb2l37hC+UtvArbtaKh1ha2oS7KWY4MC9n5mJ5RgPnB3wysOvoqa4UktJVRrJFIhVgRnbGr72eewO2cJ8ZxX6W/S3WmpJHkoqSajUGNuiF3yQ5UHIIVfMFYYxjVt0WrKm5kqRhSCHPIvlu4uIbz7rTilVKrBtOC3Mj0POCb2syU9RU263mem8fDOkdRM0casxCpI3bAw4zuRk4G+lrcxRGuglikc11BzLCqqFjwy8p5lbYsQxOMnHUd8tv2o8M2a+WuC6XW309U9kZ62MtSJNKVVeYxxliOUlkjbqBzRpnoCFBRgRoI56SSJo1UVPg5YSYXKkEjORzDfboNGdJRNlVe1/Voe5txfHc7793FroqZJn7SS21vy7M274wjc6SSUOZpo8qSmYJOR2zk5OdlPbHTVdUVK+P7uPHjp/DBWpiBwMsG3BG+M9T13xqd4BmkETPG7zLnEjEMvLv5sDGfn6nWt6rwEqpXmnRS4DhZhhBjZQTtv6Df8AppDJWdoFY+D576wDTEBX3Bx4/N3GK+51VNNdQlCkADxvErM3KcMAQ23YYI39dUtRbjURUsMTsBSO3IIZD5mbbm237kbdtWxvVotzyNTIkSKhjmaRDzOzA8pxnG6jqfTpqrs1TVTX6loqYxMFgV4JUQrIAwBBYjbvjOnMu3TzIVVpH2JBUToCzu3nFBb0JRPMpaMqYB8ZL8A+XPrwil4i9nFdRgS2ZqiCNhvA1QGbxFzzeU42/HVEW4lpJ4WraSOuhgARYm/REgb4/Hr6504JJ6Wmr0pb1UpFVFQxeoc8pjzgEMNs5ONzopWnpJqRYvDhmgxgAgMpGpSo6STpCQZsvbSrQkNjkdD5R1C3VFVSpCZc1iBkO+fXxJjmZKa4Xe7SzVqSpI5MkzOuMD0H5DRTTIsaLGihVUYAHbTWuvCNmqIJXihamflJBibA6eh20EUvDlWt0WmmGYB5jKvQr6fPW6L9IrEkuzbj8zGFznT6hSdvTl6xYcIW3P6/Muw2iB/PRea+tMCwCplESDAUNgAfTUSJFjRURQqqMADsNU7WwXaW6pNXVQEXLyxqcKo5gNA2qgn3uqWEzNgAc9HAbzhZWVcuhlpKg7+xP4i5WWN3KrIruBkgNk62DXxaLRR2nhunWljIaRiZHY5LEO4GvsdNJ7lSpo6pchJfZLPo8H083rZSV8Y+l6/Q/lp96QidfodPvXQf9Nv+z/4/+oV3n+Tv/EBvtQrrhTUUUEdLBJbJ0dauSSLmKtsY8EnlXLbbjOWHKQRpV1clDKzz87x4UGTC555Dvyg5ySCeXy7HA75J6G0rOPeFaSkutqpLFBT00lSqwUtOuI44FiKKoXssagr5FGwXA7DVHf7ZNW9QFbQcBiBgctN/774h7pRqU80F9Ma8sZ47ucAghPuss6UppaPlIwDsnUM7AjOe2q6stU1eZJFgkigji5y7/cbA8oAOOuOurPipooOHa6pNt5kMMbyQtCZIosnlRmPbmbcZ/wCYEjoACShhik4btEUkaNG1qo+ZSNj+rx6gLquZRUyagBjtbPiCXHg3bDHopaUTpvXKP6X7Dp4a6NC/4c4Ri4omqaWrubUityPG5i5lUqCAp3HXmPTRtHwhV2O9UtUIo3o46KOnE8TZUsqAHIO4yQe2he4S3mz3O4z2NYJKZKmFHpJBt5kc5X0+766J7LxG9bMtqqqapo6loUnMT7oQVDZB+uqGZdrwjo/M2ZAVTTEKAIOUuGO0PbEOJ1rt024IKllM1BSW3Fi4HD8xScYQUM1XczXxK8MdvibJGSv6xGMj44J1AsPgUdbw79mS1sUFWkniRs/lbEjjcfTR4trs1VUVL3SnmnSogEDqsnKAoYMCMb5yoPXtryfhG3RC3VdpuHNFblYeDOPOQzltiPTm9O3XW3Ra82lXRmbQz1jrAlZY/wBhZn3u0D36kuf+5y6imH2faDx/Wl+7ZfnGyo/y8n8h/LQ4NEtSP1aX+Q/lpX+0yrnpbDG1NM8MnjqQyNgjXJLZINRMEsFnMWk3KgILBrVSK1P9o1CjOQhYeo5xnSnTjy/0lF4ZkhnYnAkkTLD8Ouqmt4nv1fzCouU4VuqRnkU/Qa6N0applqnTJkxlAgAMeYPDlCK92WdcUy0S1hOySX11SRp2l9Ye91vFpo7LTCouNNEcueVpBzY537ddLbjfieOsmo/sO7TwNAzF3jQ4bIG2+AfroBUlm5mJYnqScnW+PXky3SVViqs5JJLbsw7paYSZSZZLsGhs+z6+Vl4gqEq2DtThQJOUKWyD1A27a6j1yD7KJ2hq6qBkPLOBhsdwDrr7T3obKEqrqwkMPsbwV+YTXxnQ3P8AEZryR0jjaSR1RFBLMxwAB1JOqDjniin4XtsVQ8K1NRUS+HBAZhHzHGSSdyABtkA7lR3yOZ7j7aa+5cYVFJWUEVLLHN4ZmmJIUZwqchHlUkjBznfJJznVsqoBWZcvKhryhXKpgZfWzCyXbiX7OwjXjh4cH+I8G78EUNNaSK6dbmjmOnPiMAIpRkgdskD6jUS1xTm0UULU06NSU0VKxaMgOYo1jLrnflYrlcgHBGQDkBdU3EKVNcYaziuSByokFIqszqpAIzy/PXtNxRw9LXikN9mEgYqyyGRSCOx2zqUvVjnX6UETPsDg6jcCOfGHiJlFQKZM0qZ9E8W4twgkvXD3EVdSXiS1UsxZquCRSjAM6LHIG5RnJwWG3XWu2U1VDxjSCpMyvHaoEdJMghvCXOQe+plHd7TBIBar5DT1hXmXmqC6yZ7EMc9e/XUv/bijrayO0XmGGO6IvOkoTOE6HzAbKfnjWdVVVFm6PzbVNlbSShYStOckfzDUenOJ6otUuvuaK+TNIIUl0ngk7s7+3uih4upq6S+VNTbK+SjqoKGNlZej5mRcEf8AuPrqbY75d0mt1HeKSOR6xWK1EDDAIZl3H01PuHDlVfpbh7pWUsIqaFIYmeQjLCVH7DphSM/HVSOGrjZq/hiKvpWjanWVS48yZMjnAYbdCD66A6P2e1XTostVQEmbLCyP6gySRkZZxocco8vd1raC6IEpJ6tWyCdzlaUnyLwW1P8Alpf5D+Wlp7QbVVXOzEUoDPEQ5TuQOuNM2pH6tL/Ify0LDXI7ZPVImdYnUGLOaciEJXUdUERBA7MW25RnUTw1hYrPKkbDYr1I+g01+ILHNHcPEoYGkimOeVB91u4+WlTd6eZbzWRGNudZ2Vh6HOuoW2ql1gcHc8YfUTCWaL6xWmmraEVjSylDIU5cBen46vqW3UcGPDp0z6nc/wBdW3s24ejfhZZ6xw6moPKsbeqg7n4Zxj56MKago6f9jTRqfXGT+J0iul1TInrlByxaPlpkzJOIHuGKaYXKKbwXEYVvNy4HQ66ipJ4qqliqYGLRTIsiMQRlSMg4O429dIfJCkjsDjRv7HuL62908dlqLXyLb6NQ1YsjFWwQqKQRsxXJzzHJUnHo66D3VJq5suZjbCQNTkP7mEt5myZBlSlH7lO3Dc/4bvgH/wARHjUl8qLhWo1XTxUsUkUUTcjrECcjOOobnbv2GewR/F0UfEdthjpqFam5FhGlXHOsZKDcFifvfLrrpH2zWauq7lNNUDmpKmDwKeQLkJ5TlW268xZt+oO3Qgc+2jhDiekoJhcLfHE0MhCGKcOJVycEDqMbddMpNcmnr6hJVsrCywUW2grRs5DjHIiMujtbTJM6grCyFqcHDg8n4t4Rqp+GeJ1vVJVvQl0NHHFPKZUI51JG+/pynV3H7Mrtd74tzpq2mi8oM0Qy0mR3xsOmp/BdyuElT7hIqyIAFLSOFOScBTnqc9uurC/Vl1s9QZIXARH5ecDzRt6HG3176aKvU+VLyGHZ7xcI6MUlROISt1HRzjvZj5xDu3slgudRHUXE3FzEMKY25VA+gPffU6k4ZFiQR03vIGMASyO+R8ObOvig4hgvLCnr6n3KvO0dQDiGQ+jj/kP8Q29R31Miv1/sUslLLM4RGIeGbDKD9dtAVFcKtBExRKT3+IxDaTYkUp2Uy07Q3EbuRLv8dolWS4zU08bQ1GYecCRQcgDO+R20yUr6kUr0zSF4nGMNvjSXa/0PEXE9PSUa0iXCZWEkcPlDcoJ5iBtnAI+O2i+0XyC0t9lTVTXBoxzyNEv7AE4C47j6n+wi7zY6iRJVW0RIToWw4P4zkZ1hFd/oqMjaUx3jUJy2umsFlVtSyn+A/loWGiIVlLW26aWlnSVfDOcHcbdx20Nu6RrzSOqD1Y41E0iSHBGYCVMSoBQOI+xpMcSf8Q3D/qX/AD02ZrtRxnCO0zeka5/r00CXKwzVNxqKwxMEnlZxzdsnONVNjWJExRmYcQDMvNJTHKnPAZgs9mX/AAMn/WyfkNXlRUU9OvNPPHEP42A0F2WirKSMUiVs8NM7ZZFfAz0zq+hsNOjczqZG9W3OhbhKlmoUtSsHMJqrpSlH8OW55mNst+oMmODxZ2O2UQ4/E6+eERPS8QW2pgpBVTpUxmOEyFOdi2AOYEY3Pfb1BGQZCUEaDCxgfTVhY7T7/d6SjZJCk0yo/hjzBSfMR16DJ+GNfFHMCJ6BJGSR4vjc3kYk7jcKi5TEFYA2dG5t7Qz/AGmQVM1upWT/ACySEyjHRiMIfgN2HzI+GgA0m267HTs1VVnD9pqYVjWkjp+XZWgUIQNtsAYPTuNdG6UdDKm5VSqymmhyB9quQbB58xrvzhlUUnWK2gY5p9q/BsVzsjtArI0tRAspU428QLk/Lm6/9ih4PmjqoKhOJLnOrULNRVfJIFkmXlBjdidicHB7krroLiPhKpelnoTG80dRGyiSFCSvocdiNj/fXPkfAfHVXe7r4tPbRSXDlZq01QCEqDh1UAkgg57aFs9wT9FMob2oyloOCSxII3HeRyd3B5wzt12qKJW0VZZs8P28osUvfsztmC1FJcnA3EkzkH/4kjQ9e6WT2j3ySWzubfQUSDxI5akpGiE+XJPXGCPlo9rvYvWVdkjoKfhugtVV5PEr1nqqmQkfewrBVXm+uNSbD/h6jWPnrpq6s3wyNiFSR8MgkfXVJMvFslkCUhS1DLIll/JIHiYJm3momAhSip+JUee8lu6Fg9jsVneeS38QG4X1s+FFbYSwDnbd99tz0Oi/gG2VNvpYTPRMLjNKxqGaQuZEOOVSOgxue+5037R7KYLbRctDSUdOcfsi5TJ/iZVJ/qdWUXB9ZSsywUKAZxzK6+b8TnUt0hut2q6bqJFCsS1N/KSotkOBkfMwoqp86odKh89IBp7KOcyU7NE5GCVODjUePh1C3NMS59WOdM+k4Sq5OVp5IoVOeYZ5mH0G39dfUvB9SJCIp6dk7FsqT9MH89RqOj1/MoTBTqY9j+Dv5ctYDFPN2W3QvIbRTxDaMfhrc9BG8ZjaMcp7aMn4YuauVFMGAOAwkXB+O5GvP9mbp/6X/wCxP9dAKtN4fNNMf+xXtGf0q+EK2625qOUbExt91v7ayiuEkBCTKZY/6jTKr+G63wvCqKCSRH7KOf8A/OcapaX2c19ZVOEkNPCBkGdCpz6dN9MaWmq6hX006QsL4FJHPhjEbpkhQ2ViKyjamq15oHDY6r3H00Xezqi/394olkjaOJm5VG0inYgnPYlTjB6dsa94Z9m3uFzFTcKqOaNRssZIJPzwNtHdDbqGhA91pY4iARzAZYgnOCx3Oqno90NrEV0uqm/ahBdi+0W7N3adzMRHsuj2VhQ0Ef/Z diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 7505717c672..33f737aa66e 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -157,7 +157,7 @@ - + diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 1af2fc00193..682508e0ca0 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -145,7 +145,9 @@ class hr_holidays(osv.osv): def _check_date(self, cr, uid, ids): for holiday in self.browse(cr, uid, ids): - holiday_ids = self.search(cr, uid, [('date_from', '<=', holiday.date_to), ('date_to', '>=', holiday.date_from), ('employee_id', '=', holiday.employee_id.id), ('id', '<>', holiday.id)]) + holiday_ids = self.search(cr, uid, [('date_from', '<=', holiday.date_to), ('date_to', '>=', holiday.date_from), + ('employee_id', '=', holiday.employee_id.id), ('id', '<>', holiday.id), + ('state', 'not in', ['cancel', 'refuse'])]) if holiday_ids: return False return True diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 7642d46273f..3064eda5ab1 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -14,7 +14,7 @@ - + diff --git a/addons/hr_holidays/hr_holidays_workflow.xml b/addons/hr_holidays/hr_holidays_workflow.xml index b563dbf68d4..c539ff6de41 100644 --- a/addons/hr_holidays/hr_holidays_workflow.xml +++ b/addons/hr_holidays/hr_holidays_workflow.xml @@ -55,6 +55,7 @@ refuse + function holidays_refuse() diff --git a/addons/hr_holidays/report/hr_custom_default.xsl b/addons/hr_holidays/report/hr_custom_default.xsl index e8b133da1b0..2eda3a08f4b 100644 --- a/addons/hr_holidays/report/hr_custom_default.xsl +++ b/addons/hr_holidays/report/hr_custom_default.xsl @@ -5,9 +5,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm @@ -17,9 +17,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm diff --git a/addons/hr_holidays/tests/test_holidays_flow.py b/addons/hr_holidays/tests/test_holidays_flow.py index 9b678e426d0..5a5d51a098f 100644 --- a/addons/hr_holidays/tests/test_holidays_flow.py +++ b/addons/hr_holidays/tests/test_holidays_flow.py @@ -23,7 +23,7 @@ from datetime import datetime from dateutil.relativedelta import relativedelta from openerp.addons.hr_holidays.tests.common import TestHrHolidaysBase -from openerp.exceptions import Warning +from openerp.exceptions import Warning, AccessError from openerp.osv.orm import except_orm from openerp.tools import mute_logger @@ -46,7 +46,7 @@ class TestHolidaysFlow(TestHrHolidaysBase): 'hr_holidays: wrong type days computation') # HrUser creates some holiday statuses -> crash because only HrManagers should do this - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): self.holidays_status_dummy = self.hr_holidays_status.create(cr, self.user_hruser_id, { 'name': 'UserCheats', 'limit': True, diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index e7d4cef594a..3c0f5cc6e4a 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -260,7 +260,7 @@ class hr_payslip(osv.osv): _columns = { 'struct_id': fields.many2one('hr.payroll.structure', 'Structure', readonly=True, states={'draft': [('readonly', False)]}, help='Defines the rules that have to be applied to this payslip, accordingly to the contract chosen. If you let empty the field contract, this field isn\'t mandatory anymore and thus the rules applied will be all the rules set on the structure of all contracts of the employee valid for the chosen period'), - 'name': fields.char('Description', size=64, required=False, readonly=True, states={'draft': [('readonly', False)]}), + 'name': fields.char('Payslip Name', size=64, required=False, readonly=True, states={'draft': [('readonly', False)]}), 'number': fields.char('Reference', size=64, required=False, readonly=True, states={'draft': [('readonly', False)]}), 'employee_id': fields.many2one('hr.employee', 'Employee', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'date_from': fields.date('Date From', readonly=True, states={'draft': [('readonly', False)]}, required=True), @@ -281,7 +281,7 @@ class hr_payslip(osv.osv): 'worked_days_line_ids': fields.one2many('hr.payslip.worked_days', 'payslip_id', 'Payslip Worked Days', required=False, readonly=True, states={'draft': [('readonly', False)]}), 'input_line_ids': fields.one2many('hr.payslip.input', 'payslip_id', 'Payslip Inputs', required=False, readonly=True, states={'draft': [('readonly', False)]}), 'paid': fields.boolean('Made Payment Order ? ', required=False, readonly=True, states={'draft': [('readonly', False)]}), - 'note': fields.text('Description', readonly=True, states={'draft':[('readonly',False)]}), + 'note': fields.text('Internal Note', readonly=True, states={'draft':[('readonly',False)]}), 'contract_id': fields.many2one('hr.contract', 'Contract', required=False, readonly=True, states={'draft': [('readonly', False)]}), 'details_by_salary_rule_category': fields.function(_get_lines_salary_rule_category, method=True, type='one2many', relation='hr.payslip.line', string='Details by Salary Rule Category'), 'credit_note': fields.boolean('Credit Note', help="Indicates this payslip has a refund of another", readonly=True, states={'draft': [('readonly', False)]}), diff --git a/addons/hr_payroll/i18n/zh_TW.po b/addons/hr_payroll/i18n/zh_TW.po new file mode 100644 index 00000000000..f09efc9eeb3 --- /dev/null +++ b/addons/hr_payroll/i18n/zh_TW.po @@ -0,0 +1,1251 @@ +# Chinese (Traditional) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-18 02:50+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-19 05:27+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: hr_payroll +#: field:hr.payslip.line,condition_select:0 +#: field:hr.salary.rule,condition_select:0 +msgid "Condition Based on" +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Monthly" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,rate:0 +msgid "Rate (%)" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.line:0 +#: model:ir.model,name:hr_payroll.model_hr_salary_rule_category +#: report:paylip.details:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.worked_days,number_of_days:0 +msgid "Number of Days" +msgstr "" + +#. module: hr_payroll +#: help:hr.salary.rule.category,parent_id:0 +msgid "" +"Linking a salary category to its parent is used only for the reporting " +"purpose." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: view:hr.salary.rule:0 +msgid "Group By..." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "States" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,input_ids:0 +#: view:hr.salary.rule:0 +#: field:hr.salary.rule,input_ids:0 +msgid "Inputs" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,parent_rule_id:0 +#: field:hr.salary.rule,parent_rule_id:0 +msgid "Parent Salary Rule" +msgstr "" + +#. module: hr_payroll +#: view:hr.employee:0 +#: field:hr.employee,slip_ids:0 +#: view:hr.payslip:0 +#: view:hr.payslip.run:0 +#: field:hr.payslip.run,slip_ids:0 +#: model:ir.actions.act_window,name:hr_payroll.act_hr_employee_payslip_list +msgid "Payslips" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.structure,parent_id:0 +#: field:hr.salary.rule.category,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: hr_payroll +#: field:hr.contribution.register,company_id:0 +#: field:hr.payroll.structure,company_id:0 +#: field:hr.payslip,company_id:0 +#: field:hr.payslip.line,company_id:0 +#: field:hr.salary.rule,company_id:0 +#: field:hr.salary.rule.category,company_id:0 +msgid "Company" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Done Slip" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.payslip.run:0 +msgid "Set to Draft" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_salary_rule +msgid "hr.salary.rule" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.payslip.run:0 +msgid "to" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,payslip_run_id:0 +#: view:hr.payslip.run:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.employees:0 +msgid "" +"This wizard will generate payslips for all selected employee(s) based on the " +"dates and credit note specified on Payslips Run." +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Quantity/Rate" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Children Definition" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.input,payslip_id:0 +#: field:hr.payslip.line,slip_id:0 +#: field:hr.payslip.worked_days,payslip_id:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip +#: report:payslip:0 +msgid "Pay Slip" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.employees:0 +msgid "Generate" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,amount_percentage_base:0 +#: help:hr.salary.rule,amount_percentage_base:0 +msgid "result will be affected to a variable" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +msgid "Total:" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.act_children_salary_rules +msgid "All Children Rules" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.salary.rule:0 +msgid "Input Data" +msgstr "" + +#. module: hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule.category:0 +msgid "Notes" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:871 +#: code:addons/hr_payroll/hr_payroll.py:876 +#: code:addons/hr_payroll/hr_payroll.py:882 +#: code:addons/hr_payroll/hr_payroll.py:899 +#: code:addons/hr_payroll/hr_payroll.py:905 +#, python-format +msgid "Error!" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.payslip.input,amount:0 +#: field:hr.payslip.line,amount:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Amount" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip_line +msgid "Payslip Line" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Other Information" +msgstr "" + +#. module: hr_payroll +#: field:hr.config.settings,module_hr_payroll_account:0 +msgid "Link your payroll to accounting system" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,amount_select:0 +#: help:hr.salary.rule,amount_select:0 +msgid "The computation method for the rule amount." +msgstr "" + +#. module: hr_payroll +#: view:payslip.lines.contribution.register:0 +msgid "Contribution Register's Payslip Lines" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Note" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.structure,code:0 +#: field:hr.payslip,number:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Reference" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Draft Slip" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:432 +#, python-format +msgid "Normal Working Days paid at 100%" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,condition_range_max:0 +#: field:hr.salary.rule,condition_range_max:0 +msgid "Maximum Range" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Identification No" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,struct_id:0 +msgid "Structure" +msgstr "" + +#. module: hr_payroll +#: field:hr.contribution.register,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Total Working Days" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,code:0 +#: help:hr.salary.rule,code:0 +msgid "" +"The code of salary rules can be used as reference in computation of other " +"rules. In that case, it is case sensitive." +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Weekly" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "From" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Confirm" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,help:hr_payroll.action_contribution_register_form +msgid "" +"

\n" +" Click to add a new contribution register.\n" +"

\n" +" A contribution register is a third party involved in the " +"salary\n" +" payment of the employees. It can be the social security, " +"the\n" +" estate or anyone that collect or inject money on payslips.\n" +"

\n" +" " +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,condition_range_max:0 +#: help:hr.salary.rule,condition_range_max:0 +msgid "The maximum amount, applied for this rule." +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,condition_python:0 +#: help:hr.salary.rule,condition_python:0 +msgid "" +"Applied this rule for calculation if condition is true. You can specify " +"condition like basic > 1000." +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: report:paylip.details:0 +msgid "Register Name" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.employees:0 +msgid "Payslips by Employees" +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Quarterly" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip,state:0 +msgid "Waiting" +msgstr "" + +#. module: hr_payroll +#: help:hr.salary.rule,quantity:0 +msgid "" +"It is used in computation for percentage and fixed amount.For e.g. A rule " +"for Meal Voucher having fixed amount of 1€ per worked day can have its " +"quantity defined in expression like worked_days.WORK100.number_of_days." +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Search Salary Rule" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,employee_id:0 +#: field:hr.payslip.line,employee_id:0 +#: model:ir.model,name:hr_payroll.model_hr_employee +msgid "Employee" +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Semi-annually" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Email" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +msgid "Search Payslip Batches" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,amount_percentage_base:0 +#: field:hr.salary.rule,amount_percentage_base:0 +msgid "Percentage based on" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:90 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: hr_payroll +#: help:hr.config.settings,module_hr_payroll_account:0 +msgid "Create journal entries from payslips" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,paid:0 +msgid "Made Payment Order ? " +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +msgid "PaySlip Lines by Contribution Register" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: field:hr.payslip,line_ids:0 +#: view:hr.payslip.line:0 +#: model:ir.actions.act_window,name:hr_payroll.act_contribution_reg_payslip_lines +msgid "Payslip Lines" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Miscellaneous" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip,state:0 +msgid "Rejected" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +#: field:hr.payroll.structure,rule_ids:0 +#: view:hr.salary.rule:0 +#: model:ir.actions.act_window,name:hr_payroll.action_salary_rule_form +#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_salary_rule_form +msgid "Salary Rules" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:341 +#, python-format +msgid "Refund: " +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register +msgid "PaySlip Lines by Contribution Registers" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: selection:hr.payslip,state:0 +#: view:hr.payslip.run:0 +msgid "Done" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,appears_on_payslip:0 +#: field:hr.salary.rule,appears_on_payslip:0 +msgid "Appears on Payslip" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,amount_fix:0 +#: selection:hr.payslip.line,amount_select:0 +#: field:hr.salary.rule,amount_fix:0 +#: selection:hr.salary.rule,amount_select:0 +msgid "Fixed Amount" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:370 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,active:0 +#: help:hr.salary.rule,active:0 +msgid "" +"If the active field is set to false, it will allow you to hide the salary " +"rule without removing it." +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,state:0 +#: field:hr.payslip.run,state:0 +msgid "Status" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Worked Days & Inputs" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,details_by_salary_rule_category:0 +msgid "Details by Salary Rule Category" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_payslip_lines_contribution_register +msgid "PaySlip Lines" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,register_id:0 +#: help:hr.salary.rule,register_id:0 +msgid "Eventual third party involved in the salary payment of the employees." +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.worked_days,number_of_hours:0 +msgid "Number of Hours" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "PaySlip Batch" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,condition_range_min:0 +#: field:hr.salary.rule,condition_range_min:0 +msgid "Minimum Range" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,child_ids:0 +#: field:hr.salary.rule,child_ids:0 +msgid "Child Salary Rule" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.payslip,date_to:0 +#: field:hr.payslip.run,date_end:0 +#: report:paylip.details:0 +#: report:payslip:0 +#: field:payslip.lines.contribution.register,date_to:0 +msgid "Date To" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip.line,condition_select:0 +#: selection:hr.salary.rule,condition_select:0 +msgid "Range" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_tree +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_tree +msgid "Salary Structures Hierarchy" +msgstr "" + +#. module: hr_payroll +#: help:hr.employee,total_wage:0 +msgid "Sum of all current contract's wage of employee." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Payslip" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,credit_note:0 +#: field:hr.payslip.run,credit_note:0 +msgid "Credit Note" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: model:ir.actions.act_window,name:hr_payroll.act_payslip_lines +msgid "Payslip Computation Details" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,appears_on_payslip:0 +#: help:hr.salary.rule,appears_on_payslip:0 +msgid "Used to display the salary rule on payslip." +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payslip_input +msgid "Payslip Input" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule.category:0 +#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category +#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category +msgid "Salary Rule Categories" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.input,contract_id:0 +#: help:hr.payslip.worked_days,contract_id:0 +msgid "The contract for which applied this input" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Computation" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:899 +#, python-format +msgid "Wrong range condition defined for salary rule %s (%s)." +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.input,amount:0 +msgid "" +"It is used in computation. For e.g. A rule for sales having 1% commission of " +"basic salary for per product can defined in expression like result = " +"inputs.SALEURO.amount * contract.wage*0.01." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.line:0 +#: field:hr.payslip.line,amount_select:0 +#: field:hr.salary.rule,amount_select:0 +msgid "Amount Type" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,category_id:0 +#: view:hr.salary.rule:0 +#: field:hr.salary.rule,category_id:0 +msgid "Category" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Company Contribution" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.run,credit_note:0 +msgid "" +"If its checked, indicates that all payslips generated from here are refund " +"payslips." +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:876 +#, python-format +msgid "Wrong percentage base or quantity defined for salary rule %s (%s)." +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_view +msgid "Salary Structures" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +msgid "Draft Payslip Batches" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: selection:hr.payslip,state:0 +#: view:hr.payslip.run:0 +#: selection:hr.payslip.run,state:0 +msgid "Draft" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.payslip,date_from:0 +#: field:hr.payslip.run,date_start:0 +#: report:paylip.details:0 +#: report:payslip:0 +#: field:payslip.lines.contribution.register,date_from:0 +msgid "Date From" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +msgid "Done Payslip Batches" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +msgid "Payslip Lines by Contribution Register:" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Conditions" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,amount_percentage:0 +#: selection:hr.payslip.line,amount_select:0 +#: field:hr.salary.rule,amount_percentage:0 +#: selection:hr.salary.rule,amount_select:0 +msgid "Percentage (%)" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:871 +#, python-format +msgid "Wrong quantity defined for salary rule %s (%s)." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Worked Day" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +msgid "Employee Function" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.payslip_report +msgid "Employee PaySlip" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,salary_rule_id:0 +msgid "Rule" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Compute Sheet" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,active:0 +#: field:hr.salary.rule,active:0 +msgid "Active" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "Child Rules" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,condition_range_min:0 +#: help:hr.salary.rule,condition_range_min:0 +msgid "The minimum amount, applied for this rule." +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip.line,condition_select:0 +#: selection:hr.salary.rule,condition_select:0 +msgid "Python Expression" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Designation" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Companies" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Authorized Signature" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,contract_id:0 +#: field:hr.payslip.input,contract_id:0 +#: field:hr.payslip.line,contract_id:0 +#: field:hr.payslip.worked_days,contract_id:0 +#: model:ir.model,name:hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52 +#, python-format +msgid "You must select employee(s) to generate payslip(s)." +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Credit" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,schedule_pay:0 +msgid "Scheduled Pay" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,condition_python:0 +#: field:hr.salary.rule,condition_python:0 +msgid "Python Condition" +msgstr "" + +#. module: hr_payroll +#: view:hr.contribution.register:0 +msgid "Contribution" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:351 +#, python-format +msgid "Refund Payslip" +msgstr "" + +#. module: hr_payroll +#: field:hr.rule.input,input_id:0 +#: model:ir.model,name:hr_payroll.model_hr_rule_input +msgid "Salary Rule Input" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,quantity:0 +#: field:hr.salary.rule,quantity:0 +msgid "Quantity" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Refund" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.payslip.input,code:0 +#: field:hr.payslip.line,code:0 +#: field:hr.payslip.worked_days,code:0 +#: field:hr.rule.input,code:0 +#: field:hr.salary.rule,code:0 +#: field:hr.salary.rule.category,code:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Code" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,amount_python_compute:0 +#: selection:hr.payslip.line,amount_select:0 +#: field:hr.salary.rule,amount_python_compute:0 +#: selection:hr.salary.rule,amount_select:0 +msgid "Python Code" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.input,sequence:0 +#: field:hr.payslip.line,sequence:0 +#: field:hr.payslip.worked_days,sequence:0 +#: field:hr.salary.rule,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Period" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +msgid "Period from" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule:0 +msgid "General" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:674 +#, python-format +msgid "Salary Slip of %s for %s" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_payslip_employees +msgid "Generate payslips for all selected employees" +msgstr "" + +#. module: hr_payroll +#: field:hr.contract,struct_id:0 +#: view:hr.payroll.structure:0 +#: view:hr.payslip:0 +#: view:hr.payslip.line:0 +#: model:ir.model,name:hr_payroll.model_hr_payroll_structure +msgid "Salary Structure" +msgstr "" + +#. module: hr_payroll +#: field:hr.contribution.register,register_line_ids:0 +msgid "Register Line" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Cancel" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +#: selection:hr.payslip.run,state:0 +msgid "Close" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip,struct_id:0 +msgid "" +"Defines the rules that have to be applied to this payslip, accordingly to " +"the contract chosen. If you let empty the field contract, this field isn't " +"mandatory anymore and thus the rules applied will be all the rules set on " +"the structure of all contracts of the employee valid for the chosen period" +msgstr "" + +#. module: hr_payroll +#: field:hr.payroll.structure,children_ids:0 +#: field:hr.salary.rule.category,children_ids:0 +msgid "Children" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip,credit_note:0 +msgid "Indicates this payslip has a refund of another" +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Bi-monthly" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form +#: model:ir.ui.menu,name:hr_payroll.menu_department_tree +msgid "Employee Payslips" +msgstr "" + +#. module: hr_payroll +#: model:ir.model,name:hr_payroll.model_hr_config_settings +msgid "hr.config.settings" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.line:0 +#: field:hr.payslip.line,register_id:0 +#: field:hr.salary.rule,register_id:0 +#: model:ir.model,name:hr_payroll.model_hr_contribution_register +msgid "Contribution Register" +msgstr "" + +#. module: hr_payroll +#: view:payslip.lines.contribution.register:0 +msgid "Print" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.line:0 +msgid "Calculations" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Worked Days" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Search Payslips" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_run_tree +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payslip_run +msgid "Payslips Batches" +msgstr "" + +#. module: hr_payroll +#: view:hr.contribution.register:0 +#: field:hr.contribution.register,note:0 +#: field:hr.payroll.structure,note:0 +#: field:hr.payslip,name:0 +#: field:hr.payslip,note:0 +#: field:hr.payslip.input,name:0 +#: field:hr.payslip.line,note:0 +#: field:hr.payslip.worked_days,name:0 +#: field:hr.rule.input,name:0 +#: view:hr.salary.rule:0 +#: field:hr.salary.rule,note:0 +#: field:hr.salary.rule.category,note:0 +msgid "Description" +msgstr "" + +#. module: hr_payroll +#: field:hr.employee,total_wage:0 +msgid "Total Basic Salary" +msgstr "" + +#. module: hr_payroll +#: view:hr.contribution.register:0 +#: model:ir.actions.act_window,name:hr_payroll.action_contribution_register_form +#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contribution_register_form +msgid "Contribution Registers" +msgstr "" + +#. module: hr_payroll +#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting +#: model:ir.ui.menu,name:hr_payroll.menu_hr_root_payroll +#: model:ir.ui.menu,name:hr_payroll.payroll_configure +msgid "Payroll" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.report.xml,name:hr_payroll.contribution_register +msgid "PaySlip Lines By Conribution Register" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:370 +#, python-format +msgid "You cannot delete a payslip which is not draft or cancelled!" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Address" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,worked_days_line_ids:0 +#: model:ir.model,name:hr_payroll.model_hr_payslip_worked_days +msgid "Payslip Worked Days" +msgstr "" + +#. module: hr_payroll +#: view:hr.salary.rule.category:0 +msgid "Salary Categories" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.contribution.register,name:0 +#: field:hr.payroll.structure,name:0 +#: field:hr.payslip.line,name:0 +#: field:hr.payslip.run,name:0 +#: field:hr.salary.rule,name:0 +#: field:hr.salary.rule.category,name:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Name" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,amount_percentage:0 +#: help:hr.salary.rule,amount_percentage:0 +msgid "For example, enter 50.0 to apply a percentage of 50%" +msgstr "" + +#. module: hr_payroll +#: view:hr.payroll.structure:0 +msgid "Payroll Structures" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +#: view:hr.payslip.employees:0 +#: field:hr.payslip.employees,employee_ids:0 +#: view:hr.payslip.line:0 +msgid "Employees" +msgstr "" + +#. module: hr_payroll +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Bank Account" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,sequence:0 +#: help:hr.salary.rule,sequence:0 +msgid "Use to arrange calculation sequence" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip,state:0 +msgid "" +"* When the payslip is created the status is 'Draft'. \n" +"* If the payslip is under verification, the status is 'Waiting'. " +"\n" +"* If the payslip is confirmed then status is set to 'Done'. \n" +"* When user cancel payslip the status is 'Rejected'." +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.line,condition_range:0 +#: help:hr.salary.rule,condition_range:0 +msgid "" +"This will be used to compute the % fields values; in general it is on basic, " +"but you can also use categories code fields in lowercase as a variable names " +"(hra, ma, lta, etc.) and the variable basic." +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Annually" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip,input_line_ids:0 +msgid "Payslip Inputs" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Other Inputs" +msgstr "" + +#. module: hr_payroll +#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view +#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category_tree_view +msgid "Salary Rule Categories Hierarchy" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:882 +#, python-format +msgid "Wrong python code defined for salary rule %s (%s)." +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +#: field:hr.payslip.line,total:0 +#: report:paylip.details:0 +#: report:payslip:0 +msgid "Total" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Salary Computation" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Details By Salary Rule Category" +msgstr "" + +#. module: hr_payroll +#: help:hr.payslip.input,code:0 +#: help:hr.payslip.worked_days,code:0 +#: help:hr.rule.input,code:0 +msgid "The code that can be used in the salary rules" +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/hr_payroll.py:905 +#, python-format +msgid "Wrong python condition defined for salary rule %s (%s)." +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.run:0 +#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_by_employees +msgid "Generate Payslips" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip.line:0 +msgid "Search Payslip Lines" +msgstr "" + +#. module: hr_payroll +#: selection:hr.contract,schedule_pay:0 +msgid "Bi-weekly" +msgstr "" + +#. module: hr_payroll +#: selection:hr.payslip.line,condition_select:0 +#: selection:hr.salary.rule,condition_select:0 +msgid "Always True" +msgstr "" + +#. module: hr_payroll +#: report:contribution.register.lines:0 +msgid "PaySlip Name" +msgstr "" + +#. module: hr_payroll +#: view:hr.payslip:0 +msgid "Accounting" +msgstr "" + +#. module: hr_payroll +#: field:hr.payslip.line,condition_range:0 +#: field:hr.salary.rule,condition_range:0 +msgid "Range Based on" +msgstr "" diff --git a/addons/hr_payroll_account/i18n/zh_TW.po b/addons/hr_payroll_account/i18n/zh_TW.po new file mode 100644 index 00000000000..0aaa10dc759 --- /dev/null +++ b/addons/hr_payroll_account/i18n/zh_TW.po @@ -0,0 +1,126 @@ +# Chinese (Traditional) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-11-18 02:50+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-19 05:27+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_credit:0 +msgid "Credit Account" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:104 +#, python-format +msgid "Payslip of %s" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:157 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Credit Account!" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.payslip,move_id:0 +msgid "Accounting Entry" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:173 +#, python-format +msgid "" +"The Expense Journal \"%s\" has not properly configured the Debit Account!" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_tax_id:0 +msgid "Tax Code" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.payslip,period_id:0 +msgid "Force Period" +msgstr "" + +#. module: hr_payroll_account +#: help:hr.payslip,period_id:0 +msgid "Keep empty to use the period of the validation(Payslip) date." +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.contract,analytic_account_id:0 +#: field:hr.salary.rule,analytic_account_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.salary.rule,account_debit:0 +msgid "Debit Account" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip_employees +msgid "Generate payslips for all selected employees" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:157 +#: code:addons/hr_payroll_account/hr_payroll_account.py:173 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_salary_rule +msgid "hr.salary.rule" +msgstr "" + +#. module: hr_payroll_account +#: view:hr.contract:0 +#: view:hr.salary.rule:0 +msgid "Accounting" +msgstr "" + +#. module: hr_payroll_account +#: model:ir.model,name:hr_payroll_account.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: hr_payroll_account +#: code:addons/hr_payroll_account/hr_payroll_account.py:159 +#: code:addons/hr_payroll_account/hr_payroll_account.py:175 +#, python-format +msgid "Adjustment Entry" +msgstr "" + +#. module: hr_payroll_account +#: field:hr.contract,journal_id:0 +#: field:hr.payslip,journal_id:0 +#: field:hr.payslip.run,journal_id:0 +msgid "Salary Journal" +msgstr "" diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index 4bc358f4cda..25cdfc1c1fb 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -52,12 +52,13 @@ 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."), - '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'), + 'fold': fields.boolean('Folded in Kanban View', + help='This stage is folded in the kanban view when' + 'there are no records in that stage to display.'), } _defaults = { 'sequence': 1, - 'fold': False, } class hr_recruitment_degree(osv.osv): @@ -82,8 +83,9 @@ class hr_applicant(osv.Model): _inherit = ['mail.thread', 'ir.needaction_mixin'] _track = { 'stage_id': { - '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, + # this is only an heuristics; depending on your particular stage configuration it may not match all 'new' stages + '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, }, } @@ -94,7 +96,7 @@ class hr_applicant(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, [('sequence', '=', '1')], context=context) + return self.stage_find(cr, uid, [], department_id, [('fold', '=', False)], 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' @@ -171,7 +173,7 @@ class hr_applicant(osv.Model): return res _columns = { - 'name': fields.char('Subject', size=128, required=True), + 'name': fields.char('Subject / Application Name', size=128, required=True), 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."), 'description': fields.text('Description'), 'email_from': fields.char('Email', size=128, help="These people will receive email."), @@ -198,7 +200,7 @@ class hr_applicant(osv.Model): 'salary_expected_extra': fields.char('Expected Salary Extra', size=100, help="Salary Expected by Applicant, extra advantages"), 'salary_proposed': fields.float('Proposed Salary', help="Salary Proposed by the Organisation"), 'salary_expected': fields.float('Expected Salary', help="Salary Expected by Applicant"), - 'availability': fields.integer('Availability'), + 'availability': fields.integer('Availability', help="The number of days in which the applicant will be available to start working"), 'partner_name': fields.char("Applicant's Name", size=64), 'partner_phone': fields.char('Phone', size=32), 'partner_mobile': fields.char('Mobile', size=32), @@ -241,7 +243,7 @@ class hr_applicant(osv.Model): 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) + stage_id = self.stage_find(cr, uid, [], department_id, [('fold', '=', False)], context=context) return {'value': {'stage_id': stage_id}} def onchange_partner_id(self, cr, uid, ids, partner_id, context=None): @@ -331,7 +333,8 @@ class hr_applicant(osv.Model): through message_process. This override updates the document according to the email. """ - if custom_values is None: custom_values = {} + if custom_values is None: + custom_values = {} val = msg.get('from').split('<')[0] defaults = { 'name': msg.get('subject') or _("No Subject"), @@ -344,38 +347,7 @@ class hr_applicant(osv.Model): if msg.get('priority'): defaults['priority'] = msg.get('priority') defaults.update(custom_values) - return super(hr_applicant,self).message_new(cr, uid, msg, custom_values=defaults, context=context) - - def message_update(self, cr, uid, ids, msg, update_vals=None, context=None): - """ Override mail_thread message_update that is called by the mailgateway - through message_process. - This method updates the document according to the email. - """ - if isinstance(ids, (str, int, long)): - ids = [ids] - if update_vals is None: - update_vals = {} - - update_vals.update({ - 'email_from': msg.get('from'), - 'email_cc': msg.get('cc'), - }) - if msg.get('priority'): - update_vals['priority'] = msg.get('priority') - - maps = { - 'cost': 'planned_cost', - 'revenue': 'planned_revenue', - 'probability': 'probability', - } - for line in msg.get('body', '').split('\n'): - line = line.strip() - res = tools.command_re.match(line) - if res and maps.get(res.group(1).lower(), False): - key = maps.get(res.group(1).lower()) - update_vals[key] = res.group(2).lower() - - return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) + return super(hr_applicant, self).message_new(cr, uid, msg, custom_values=defaults, context=context) def create(self, cr, uid, vals, context=None): if context is None: diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index 854dea0548f..219f36405b5 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -71,12 +71,14 @@ Contract Signed 5 + Refused 6 + Job Survey 20 diff --git a/addons/hr_recruitment/hr_recruitment_demo.xml b/addons/hr_recruitment/hr_recruitment_demo.xml index c15e0deb188..8e1435691c8 100644 --- a/addons/hr_recruitment/hr_recruitment_demo.xml +++ b/addons/hr_recruitment/hr_recruitment_demo.xml @@ -6,7 +6,6 @@ - 2 Enrique Jones 9963214587 @@ -19,7 +18,6 @@ - 3 Marie Justine @@ -34,7 +32,6 @@ - 1 Jose @@ -48,7 +45,6 @@ - John Bruno @@ -60,7 +56,6 @@ - Sandra Elvis @@ -72,7 +67,6 @@ - 4 David Armstrong @@ -86,7 +80,6 @@ - Tina Augustie 9898745745 @@ -99,7 +92,6 @@ - Shane Williams 9812398524 @@ -113,7 +105,6 @@ - David Armstrong 9988774455 @@ -126,4 +117,4 @@
-
\ No newline at end of file + diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 7a9bb35fec3..ebc426bc331 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -44,7 +44,7 @@ - + @@ -349,6 +349,7 @@ + diff --git a/addons/hr_recruitment/i18n/zh_TW.po b/addons/hr_recruitment/i18n/zh_TW.po new file mode 100644 index 00000000000..d956b954e5b --- /dev/null +++ b/addons/hr_recruitment/i18n/zh_TW.po @@ -0,0 +1,1261 @@ +# Chinese (Traditional) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-18 02:51+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-19 05:27+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: hr_recruitment +#: help:hr.applicant,active:0 +msgid "" +"If the active field is set to false, it will allow you to hide the case " +"without removing it." +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +#: field:hr.recruitment.stage,requirements:0 +msgid "Requirements" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Application Summary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Start Interview" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Mobile:" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,fold:0 +msgid "" +"This stage is not visible, for example in status bar or kanban view, when " +"there are no records in that stage to display." +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_graduate +msgid "Graduate" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Group By..." +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Filter and view on next actions and date" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,department_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,department_id:0 +msgid "Department" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date_action:0 +msgid "Next Action Date" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_expected_extra:0 +msgid "Expected Salary Extra" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Jobs" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Pending Jobs" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,company_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.source:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_source_action +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_source +msgid "Sources of Applicants" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:445 +#, python-format +msgid "You must define Applied Job for this applicant." +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Job" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.partner.create,close:0 +msgid "Close job request" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.crm_case_categ0_act_job +msgid "" +"

\n" +" Click to add a new job applicant.\n" +"

\n" +" OpenERP helps you track applicants in the recruitment\n" +" process and follow up all operations: meetings, interviews, " +"etc.\n" +"

\n" +" If you setup the email gateway, applicants and their " +"attached\n" +" CV are created automatically when an email is sent to\n" +" jobs@yourcompany.com. If you install the document " +"management\n" +" modules, all resumes are indexed automatically, so that you " +"can\n" +" easily search through their content.\n" +"

\n" +" " +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.crm_case_categ0_act_job +#: model:ir.ui.menu,name:hr_recruitment.menu_crm_case_categ0_act_job +msgid "Applications" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,day_open:0 +msgid "Days to Open" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,emp_id:0 +msgid "employee" +msgstr "" + +#. module: hr_recruitment +#: field:hr.config.settings,fetchmail_applicants:0 +msgid "Create applicants from an incoming email account" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,day:0 +msgid "Day" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_partner_create +msgid "Create Contact" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Refuse" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_licenced +msgid "Master Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_mobile:0 +msgid "Mobile" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Next Actions" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:38 +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:56 +#, python-format +msgid "Error!" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_bac5 +msgid "Doctoral Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,job_id:0 +#: field:hr.recruitment.report,job_id:0 +msgid "Applied Job" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,department_id:0 +msgid "" +"Stages of the recruitment process may be different per department. If this " +"stage is common to all departments, keep this field empty." +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,color:0 +msgid "Color Index" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.act_hr_applicant_to_meeting +msgid "Meetings" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_applicants_status +msgid "Applicants Status" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "My Recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.job,survey_id:0 +msgid "Interview Form" +msgstr "" + +#. module: hr_recruitment +#: help:hr.job,survey_id:0 +msgid "" +"Choose an interview form for this job position and you will be able to " +"print/answer this interview from all applicants who apply for this job" +msgstr "" + +#. module: hr_recruitment +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_recruitment +msgid "Recruitment" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,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: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:445 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_prop:0 +msgid "Salary Proposed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Avg Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,availability:0 +#: field:hr.recruitment.report,available:0 +msgid "Availability" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_proposed:0 +#: view:hr.recruitment.report:0 +msgid "Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_source +msgid "Source of Applicants" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +msgid "Convert To Partner" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_report +msgid "Recruitments Statistics" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Print interview report" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Hired employees" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_job +msgid "Job Description" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,source_id:0 +msgid "Source" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_monster +msgid "Monster" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_applicant_hired +msgid "Applicant Hired" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,email_from:0 +msgid "Email" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_job_stage_act +msgid "" +"

\n" +" Click to add a new stage in the recruitment process.\n" +"

\n" +" Define here your stages of the recruitment process, for " +"example:\n" +" qualification call, first interview, second interview, refused,\n" +" hired.\n" +"

\n" +" " +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Available" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,title_action:0 +msgid "Next Action" +msgstr "" + +#. module: hr_recruitment +#: help:hr.job,alias_id:0 +msgid "" +"Email alias for this job position. New emails will automatically create new " +"applicants for this job position." +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Good" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "August" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,create_date:0 +#: view:hr.recruitment.report:0 +msgid "Creation Date" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_hired_employee +#: model:ir.model,name:hr_recruitment.model_hired_employee +msgid "Create Employee" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,priority:0 +#: field:hr.recruitment.report,priority:0 +msgid "Appreciation" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job1 +msgid "Initial Qualification" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Print Interview" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,stage_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,stage_id:0 +#: view:hr.recruitment.stage:0 +msgid "Stage" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job3 +msgid "Second Interview" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.hr_job_stage_act +msgid "Recruitment / Applicants Stages" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_expected:0 +#: view:hr.recruitment.report:0 +msgid "Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "July" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,email_cc:0 +msgid "Watchers Emails" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Applicants" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:360 +#, python-format +msgid "No Subject" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_exp:0 +msgid "Salary Expected" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_applicant +msgid "Applicant" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,sequence:0 +msgid "Gives the sequence order when displaying a list of stages." +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:347 +#: field:hr.applicant,partner_id:0 +#, python-format +msgid "Contact" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_expected_extra:0 +msgid "Salary Expected by Applicant, extra advantages" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,state:0 +msgid "" +"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'." +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "March" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_stage_act +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_stage +msgid "Stages" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Draft recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Delete" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "In progress" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Hire & Create Employee" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_applicant_hired +msgid "Applicant hired" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Jobs - Recruitment Form" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,probability:0 +msgid "Probability" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "April" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "September" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "December" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:39 +#, python-format +msgid "A contact is already defined on this job request." +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,categ_ids:0 +msgid "Tags" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_applicant_category +msgid "Category of applicant" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,month:0 +msgid "Month" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Answer related job question" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job2 +msgid "First Interview" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,write_date:0 +msgid "Update Date" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Yes" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,name:0 +msgid "Subject" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +#: view:hr.recruitment.partner.create:0 +msgid "or" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_applicant_refused +msgid "Applicant Refused" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule Meeting" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_name:0 +msgid "Applicant's Name" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Very Good" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,user_email:0 +msgid "User Email" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date_open:0 +msgid "Opened" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Group By ..." +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "No" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_expected:0 +msgid "Salary Expected by Applicant" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "All Initial Jobs" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: hr_recruitment +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_degree +msgid "Degrees" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date_closed:0 +#: field:hr.recruitment.report,date_closed:0 +msgid "Closed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +msgid "Stage Definition" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,delay_close:0 +msgid "Avg. Delay to Close" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_proposed:0 +msgid "Salary Proposed by the Organisation" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "Pending" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,state:0 +#: field:hr.recruitment.report,state:0 +#: field:hr.recruitment.stage,state:0 +msgid "Status" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule interview with this applicant" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:407 +#, python-format +msgid "Applicant created" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,type_id:0 +#: view:hr.recruitment.degree:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,type_id:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_degree_action +msgid "Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_phone:0 +msgid "Phone" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "June" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,day_close:0 +msgid "Days to Close" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,user_id:0 +msgid "User" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Excellent" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,active:0 +msgid "Active" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,nbr:0 +msgid "# of Applications" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_recruitment_stage_act +msgid "" +"

\n" +" Click to add a new stage in the recruitment process.\n" +"

\n" +" Don't forget to specify the department if your recruitment " +"process\n" +" is different according to the job position.\n" +"

\n" +" " +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,response:0 +msgid "Response" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "October" +msgstr "" + +#. module: hr_recruitment +#: field:hr.config.settings,module_document_ftp:0 +msgid "Allow the automatic indexation of resumes" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_proposed_extra:0 +msgid "Proposed Salary Extra" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "January" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:56 +#, python-format +msgid "A contact is already existing with the same name." +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_stage_form_installer +msgid "Review Recruitment Stages" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Contact:" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Search Jobs" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date:0 +#: field:hr.recruitment.report,date:0 +msgid "Date" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,survey:0 +msgid "Survey" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Would you like to create an employee ?" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Degree:" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_recruitment_stage_form_installer +msgid "" +"Check if the following stages are matching your recruitment process. Don't " +"forget to specify the department if your recruitment process is different " +"according to the job position." +msgstr "" + +#. module: hr_recruitment +#: view:hr.config.settings:0 +msgid "Configure" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job4 +msgid "Contract Proposed" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_website_company +msgid "Company Website" +msgstr "" + +#. module: hr_recruitment +#: sql_constraint:hr.recruitment.degree:0 +msgid "The name of the Degree of Recruitment must be unique!" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,year:0 +msgid "Year" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +#: view:hr.recruitment.partner.create:0 +msgid "Cancel" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +msgid "Are you sure you want to create a contact based on this job request ?" +msgstr "" + +#. module: hr_recruitment +#: help:hr.config.settings,fetchmail_applicants:0 +msgid "" +"Allow applicants to send their job application to an email address " +"(jobs@mycompany.com),\n" +" and create automatically application documents in the system." +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "In Progress" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Subject / Applicant" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.degree,sequence:0 +msgid "Gives the sequence order when displaying a list of degrees." +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_stage_changed +msgid "Stage changed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,user_id:0 +#: view:hr.recruitment.report:0 +msgid "Responsible" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_report_all +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_report_all +msgid "Recruitment Analysis" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Create New Employee" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_linkedin +msgid "LinkedIn" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_job_new_applicant +msgid "New Applicant" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_stage +msgid "Stage of Recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Cases By Stage and Estimates" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "New" +msgstr "" + +#. module: hr_recruitment +#: model:crm.meeting.type,name:hr_recruitment.categ_meet_interview +#: view:hr.job:0 +msgid "Interview" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.source,name:0 +msgid "Source Name" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Day(s)" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,description:0 +msgid "Description" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_stage_changed +msgid "Stage Changed" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "May" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job5 +msgid "Contract Signed" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_word +msgid "Word of Mouth" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.stage,fold:0 +msgid "Hide in views if empty" +msgstr "" + +#. module: hr_recruitment +#: help:hr.config.settings,module_document_ftp:0 +msgid "" +"Manage your CV's and motivation letter related to all applicants.\n" +" This installs the module document_ftp. This will install the " +"knowledge management module in order to allow you to search using specific " +"keywords through the content of all documents (PDF, .DOCx...)" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,state:0 +#: selection:hr.recruitment.report,state:0 +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job6 +#: selection:hr.recruitment.stage,state:0 +msgid "Refused" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "Hired" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,reference:0 +msgid "Referred By" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Departement:" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "On Average" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_degree +msgid "Degree of Recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_prop_avg:0 +msgid "Avg. Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Open Jobs" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "February" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Not Good" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant_category,name:0 +#: field:hr.recruitment.degree,name:0 +#: field:hr.recruitment.stage,name:0 +msgid "Name" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "November" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_exp_avg:0 +msgid "Avg. Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Avg Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_partner_create +msgid "Create Partner from job application" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,email_from:0 +msgid "These people will receive email." +msgstr "" + +#. module: hr_recruitment +#: field:hr.job,alias_id:0 +msgid "Alias" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Pending recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Contract" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_applicant_refused +msgid "Applicant refused" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.stage,department_id:0 +msgid "Specific to a Department" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "In progress recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.degree,sequence:0 +#: field:hr.recruitment.stage,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_bachelor +msgid "Bachelor Degree" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Unassigned Recruitments" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_config_settings +msgid "hr.config.settings" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,state:0 +msgid "" +"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." +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_proposed_extra:0 +msgid "Salary Proposed by the Organisation, extra advantages" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.report,delay_close:0 +msgid "Number of Days to close the project issue" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,state:0 +msgid "Open" +msgstr "" + +#. module: hr_recruitment +#: view:board.board:0 +msgid "Applications to be Processed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule Interview" +msgstr "" diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py index 0292875a2c7..908b701d928 100644 --- a/addons/hr_recruitment/report/hr_recruitment_report.py +++ b/addons/hr_recruitment/report/hr_recruitment_report.py @@ -90,7 +90,7 @@ class hr_recruitment_report(osv.Model): (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.write_date-s.create_date))/(3600*24) as delay_close, count(*) as nbr from hr_applicant s group by @@ -101,6 +101,7 @@ class hr_recruitment_report(osv.Model): date_trunc('day',s.date_closed), s.date_open, s.create_date, + s.write_date, s.date_closed, s.date_last_stage_update, s.partner_id, diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml index 3d9e39e986f..0cd8a880a68 100644 --- a/addons/hr_timesheet/hr_timesheet_view.xml +++ b/addons/hr_timesheet/hr_timesheet_view.xml @@ -81,7 +81,8 @@ - {'search_default_account_id': [active_id], 'default_account_id': active_id, 'search_default_group_date': 1, 'search_default_group_journal': 1} + {'search_default_group_date': 1, 'search_default_group_journal': 1} + [('account_id','child_of', active_id)] Costs & Revenues account.analytic.line account.analytic.account diff --git a/addons/hr_timesheet/report/custom_default.xsl b/addons/hr_timesheet/report/custom_default.xsl index e8b133da1b0..2eda3a08f4b 100644 --- a/addons/hr_timesheet/report/custom_default.xsl +++ b/addons/hr_timesheet/report/custom_default.xsl @@ -5,9 +5,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm @@ -17,9 +17,9 @@ - + - + 1.3cm 19.3cm 28.5cm 19.3cm diff --git a/addons/hr_timesheet_sheet/i18n/oc.po b/addons/hr_timesheet_sheet/i18n/oc.po new file mode 100644 index 00000000000..7f910b60428 --- /dev/null +++ b/addons/hr_timesheet_sheet/i18n/oc.po @@ -0,0 +1,1151 @@ +# Occitan (post 1500) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-11-26 11:20+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Occitan (post 1500) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-27 04:37+0000\n" +"X-Generator: Launchpad (build 16845)\n" + +#. module: hr_timesheet_sheet +#: field:hr.analytic.timesheet,sheet_id:0 +#: field:hr.attendance,sheet_id:0 +#: field:hr_timesheet_sheet.sheet.account,sheet_id:0 +#: field:hr_timesheet_sheet.sheet.day,sheet_id:0 +msgid "Sheet" +msgstr "Fuèlh" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_timesheetdraft0 +msgid "Service" +msgstr "Servici" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,quantity:0 +#: field:timesheet.report,quantity:0 +msgid "Time" +msgstr "Temps" + +#. module: hr_timesheet_sheet +#: help:hr.config.settings,timesheet_max_difference:0 +msgid "" +"Allowed difference in hours between the sign in/out and the timesheet\n" +" computation for one sheet. Set this to 0 if you do not want " +"any control." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +#: view:timesheet.report:0 +msgid "Group By..." +msgstr "Regropar per..." + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_attendance:0 +msgid "Total Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,department_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,department_id:0 +msgid "Department" +msgstr "Departament" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_tasktimesheet0 +msgid "Task timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:73 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:86 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must assign an " +"analytic journal to the employee, like 'Timesheet Journal'." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "March" +msgstr "març" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,cost:0 +msgid "#Cost" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,company_id:0 +#: field:hr_timesheet_sheet.sheet,company_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_report +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_timesheet_report +#: model:process.node,name:hr_timesheet_sheet.process_node_timesheet0 +#: view:timesheet.report:0 +msgid "Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Set to Draft" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Timesheet Period" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,date_to:0 +#: field:timesheet.report,date_to:0 +msgid "Date to" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "to" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_invoiceonwork0 +msgid "Based on the timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:327 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:398 +#, python-format +msgid "You cannot modify an entry in a confirmed timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by day of date" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form_my_current +msgid "My Current Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_validatetimesheet0 +msgid "Validate" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Approved" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Present" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +msgid "Total Cost" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_refusetimesheet0 +msgid "Refuse" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_2_hr_analytic_timesheet +msgid "Timesheet Activities" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:38 +#, python-format +msgid "Please create an employee and associate it with this user." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:402 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:422 +#, python-format +msgid "" +"You cannot enter an attendance date outside the current timesheet dates." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:205 +#, python-format +msgid "Week " +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.action_hr_timesheet_current_open +msgid "" +"My Timesheet opens your timesheet so that you can book your activities into " +"the system. From the same form, you can register your attendances (Sign " +"In/Out) and describe the working hours made on the different projects. At " +"the end of the period defined in the company, the timesheet is confirmed by " +"the user and can be validated by his manager. If required, as defined on the " +"project, you can generate the invoices based on the timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,state:0 +msgid "" +" * The 'Draft' status is used when a user is encoding a new and unconfirmed " +"timesheet. \n" +"* The 'Confirmed' status is used for to confirm the timesheet by user. " +" \n" +"* The 'Done' status is used when users timesheet is accepted by his/her " +"senior." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:64 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:69 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:71 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:80 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:82 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:84 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:327 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:398 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:429 +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:38 +#, python-format +msgid "Error!" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.config.settings,timesheet_max_difference:0 +msgid "" +"Allow a difference of time between timesheets and attendances of (in hours)" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:99 +#, python-format +msgid "" +"Please verify that the total difference of the sheet is lower than %.2f." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_timesheet_report_stat_all +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_timesheet_report_all +msgid "Timesheet Sheet Analysis" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,name:0 +msgid "Project / Analytic Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_validatetimesheet0 +msgid "Validation" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:69 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:80 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must assign it to a " +"user." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_attendance0 +msgid "Employee's timesheet entry" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:213 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:215 +#, python-format +msgid "Invalid Action!" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,account_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,account_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,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: hr_timesheet_sheet +#: field:timesheet.report,nbr:0 +msgid "#Nbr" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,date_from:0 +#: field:timesheet.report,date_from:0 +msgid "Date from" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.employee:0 +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_employee_2_hr_timesheet +#: view:res.company:0 +msgid "Timesheets" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_confirmedtimesheet0 +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.day,total_attendance:0 +#: model:ir.model,name:hr_timesheet_sheet.model_hr_attendance +#: model:process.node,name:hr_timesheet_sheet.process_node_attendance0 +msgid "Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_draftconfirmtimesheet0 +msgid "Confirm" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,timesheet_ids:0 +msgid "Timesheet lines" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_confirmedtimesheet0 +msgid "State is 'confirmed'." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +#: selection:timesheet.report,state:0 +msgid "New" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_week_attendance_graph +msgid "My Total Attendances By Week" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,total:0 +msgid "Total Time" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_form +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form +msgid "Timesheets to Validate" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +msgid "Hours" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by month of date" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_validatetimesheet0 +msgid "The project manager validates the timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "July" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.config.settings,timesheet_range:0 +msgid "Validate timesheets every" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:73 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:86 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,state:0 +#: view:timesheet.report:0 +#: field:timesheet.report,state:0 +msgid "Status" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_workontask0 +msgid "Work on Task" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Waiting Approval" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +msgid "#Quantity" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_timesheet:0 +#: view:hr_timesheet_sheet.sheet.day:0 +#: field:hr_timesheet_sheet.sheet.day,total_timesheet:0 +msgid "Total Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Available Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Sign In" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_timesheet:0 +msgid "#Total Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_current_open +msgid "hr.timesheet.current.open" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:71 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must link the employee " +"to a product, like 'Consultant'." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "September" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "December" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "It will open your current timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,month:0 +#: selection:res.company,timesheet_range:0 +#: view:timesheet.report:0 +#: field:timesheet.report,month:0 +msgid "Month" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_diff:0 +msgid "#Total Diff" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "In Draft" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_attendancetimesheet0 +msgid "Sign in/out" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:84 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must link the employee " +"to a product." +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:58 +#, python-format +msgid "" +"You will be able to register your working hours and\n" +" activities." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "or" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_invoiceontimesheet0 +msgid "Billing" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_timesheetdraft0 +msgid "" +"The timesheet line represents the time spent by the employee on a specific " +"service provided." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,name:0 +msgid "Note" +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:33 +#, python-format +msgid "Add" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Draft" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:res.company,timesheet_max_difference:0 +msgid "Timesheet allowed difference(Hours)" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_invoiceontimesheet0 +msgid "The invoice is created based on the timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_drafttimesheetsheet0 +msgid "Draft Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_form +msgid "" +"

\n" +" New timesheet to approve.\n" +"

\n" +" You must record timesheets every day and confirm at the end\n" +" of the week. Once the timesheet is confirmed, it should be\n" +" validated by a manager.\n" +"

\n" +" Timesheets can also be invoiced to customers, depending on " +"the\n" +" configuration of each project's related contract.\n" +"

\n" +" " +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "August" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Differences" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "June" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Current Status" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: selection:res.company,timesheet_range:0 +msgid "Week" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet_account +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet_day +msgid "Timesheets by Period" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,user_id:0 +#: field:hr_timesheet_sheet.sheet,user_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,user_id:0 +msgid "User" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_by_account +msgid "Timesheet by Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,date:0 +#: field:hr_timesheet_sheet.sheet.day,name:0 +#: field:timesheet.report,date:0 +msgid "Date" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "November" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:res.company,timesheet_range:0 +msgid "Timesheet range" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:board.board:0 +msgid "My Total Attendance By Week" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "October" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:60 +#, python-format +msgid "" +"The timesheet cannot be validated as it does not contain an equal number of " +"sign ins and sign outs." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "January" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_attendancetimesheet0 +msgid "The employee signs in and signs out." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_res_company +msgid "Companies" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:215 +#, python-format +msgid "You cannot delete a timesheet which have attendance entries." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Unvalidated Timesheets" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:82 +#, python-format +msgid "" +"You cannot have 2 timesheets that overlap!\n" +"You should use the menu 'My Timesheet' to avoid this problem." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Submit to Manager" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,general_account_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,general_account_id:0 +msgid "General Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:hr.config.settings,timesheet_range:0 +#: help:res.company,timesheet_range:0 +msgid "Periodicity on which you validate your timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.account:0 +msgid "Search Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:429 +#, python-format +msgid "You cannot modify an entry in a confirmed timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:res.company,timesheet_max_difference:0 +msgid "" +"Allowed difference in hours between the sign in/out and the timesheet " +"computation for one sheet. Set this to 0 if you do not want any control." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,period_ids:0 +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Period" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,day:0 +#: selection:res.company,timesheet_range:0 +#: view:timesheet.report:0 +#: field:timesheet.report,day:0 +msgid "Day" +msgstr "" + +#. module: hr_timesheet_sheet +#: constraint:hr_timesheet_sheet.sheet:0 +msgid "" +"You cannot have 2 timesheets that overlap!\n" +"Please use the menu 'My Current Timesheet' to avoid this problem." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_hr_timesheet_current_open +#: model:ir.actions.server,name:hr_timesheet_sheet.ir_actions_server_timsheet_sheet +msgid "My Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Done" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_drafttimesheetsheet0 +msgid "State is 'draft'." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "Cancel" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_validatedtimesheet0 +msgid "Validated" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_invoiceonwork0 +msgid "Invoice on Work" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.account:0 +msgid "Timesheet by Accounts" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:50 +#, python-format +msgid "Open Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by year of date" +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:56 +#, python-format +msgid "Click to add projects, contracts or analytic accounts." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_validatedtimesheet0 +msgid "State is 'validated'." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_config_settings +msgid "hr.config.settings" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_hr_timesheet_report_stat_all +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_hr_timesheet_report_all +msgid "Timesheet Analysis" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Search Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Confirmed Timesheets" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Details" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_analytic_timesheet +msgid "Timesheet Line" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:213 +#, python-format +msgid "You cannot delete a timesheet which is already confirmed." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,product_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,product_id:0 +msgid "Product" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,attendances_ids:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_2_hr_attendance +msgid "Attendances" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,name:0 +#: field:timesheet.report,name:0 +msgid "Description" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_confirmtimesheet0 +msgid "The employee periodically confirms his own timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "May" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_workontask0 +msgid "Defines the work summary of task" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Sign Out" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_tasktimesheet0 +msgid "Moves task entry into the timesheet line" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Total Attendances" +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:39 +#, python-format +msgid "Add a Line" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_difference:0 +#: field:hr_timesheet_sheet.sheet.day,total_difference:0 +msgid "Difference" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:64 +#, python-format +msgid "You cannot duplicate a timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Absent" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "February" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.action_hr_timesheet_report_stat_all +msgid "" +"

\n" +" This report performs analysis on timesheets created by your\n" +" human resources in the system. It allows you to have a full\n" +" overview of entries done by your employees. You can group " +"them\n" +" by specific selection criteria thanks to the search tool.\n" +"

\n" +" " +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Employees" +msgstr "" + +#. module: hr_timesheet_sheet +#: constraint:hr.analytic.timesheet:0 +msgid "You cannot modify an entry in a Confirmed/Done timesheet !" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_timesheet0 +msgid "Information of time spent on a service" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "April" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_confirmtimesheet0 +msgid "Confirmation" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:99 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,invoice_rate:0 +msgid "Invoice rate" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:402 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:422 +#, python-format +msgid "User Error!" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Total Difference" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Approve" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,account_ids:0 +msgid "Analytic accounts" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,to_invoice:0 +msgid "Type of Invoicing" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_attendance:0 +msgid "#Total Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,cost:0 +msgid "Cost" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:timesheet.report,date_current:0 +msgid "Current date" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.process,name:hr_timesheet_sheet.process_process_hrtimesheetprocess0 +msgid "Hr Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,year:0 +#: view:timesheet.report:0 +#: field:timesheet.report,year:0 +msgid "Year" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Open" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "To Approve" +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:15 +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:40 +#: view:hr_timesheet_sheet.sheet.account:0 +#, python-format +msgid "Total" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_by_day +msgid "Timesheet by Day" +msgstr "" diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py index 16889253a68..6d284ac08c8 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report.py +++ b/addons/hr_timesheet_sheet/report/timesheet_report.py @@ -95,7 +95,7 @@ class timesheet_report(osv.osv): htss.state from account_analytic_line as aal left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id) - left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id) + left join hr_timesheet_sheet_sheet as htss ON (hat.sheet_id=htss.id) group by aal.account_id, aal.date, diff --git a/addons/hr_timesheet_sheet/static/src/css/timesheet.css b/addons/hr_timesheet_sheet/static/src/css/timesheet.css index 36ea9a34db9..99a63002326 100644 --- a/addons/hr_timesheet_sheet/static/src/css/timesheet.css +++ b/addons/hr_timesheet_sheet/static/src/css/timesheet.css @@ -19,7 +19,7 @@ text-align: center; color: #006699; font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif; - font-size: 10px; + font-size: 11px; background: #eeeeee; min-width: 47px; } @@ -33,7 +33,7 @@ min-width: 130px; } .openerp .oe_timesheet_weekly td input.oe_timesheet_weekly_input { - padding: 5px 2px !important; + padding-right: 2px !important; width: 40px; text-align: right; min-width: 0 !important; diff --git a/addons/hr_timesheet_sheet/static/src/css/timesheet.sass b/addons/hr_timesheet_sheet/static/src/css/timesheet.sass index 5e04271037c..daa835db88d 100644 --- a/addons/hr_timesheet_sheet/static/src/css/timesheet.sass +++ b/addons/hr_timesheet_sheet/static/src/css/timesheet.sass @@ -28,7 +28,7 @@ .oe_timesheet_first_col min-width: 130px td input.oe_timesheet_weekly_input - padding: 5px 2px !important + padding-right: 2px !important width: 40px text-align: right min-width: 0 !important diff --git a/addons/idea/static/src/css/idea_idea.css b/addons/idea/static/src/css/idea_idea.css index 08daffd902a..ff146bd189d 100644 --- a/addons/idea/static/src/css/idea_idea.css +++ b/addons/idea/static/src/css/idea_idea.css @@ -1,5 +1,5 @@ .openerp .oe_kanban_view .oe_kanban_idea_idea { - width: 200px; + width: 212px; /* Customize width according bootstrap3 */ } .openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars { diff --git a/addons/im/static/src/js/im.js b/addons/im/static/src/js/im.js index 6fbf452f974..aa2e7d963b6 100644 --- a/addons/im/static/src/js/im.js +++ b/addons/im/static/src/js/im.js @@ -62,16 +62,12 @@ this.user_search_dm = new instance.web.DropMisordered(); }, start: function() { + var self = this; this.$el.css("right", -this.$el.outerWidth()); $(window).scroll(_.bind(this.calc_box, this)); $(window).resize(_.bind(this.calc_box, this)); this.calc_box(); - this.on("change:current_search", this, this.search_changed); - this.search_changed(); - - var self = this; - return this.c_manager.start_polling().then(function() { self.c_manager.on("new_conversation", self, function(conv) { conv.$el.droppable({ @@ -80,10 +76,11 @@ } }); }); + self.search_changed(); }); }, calc_box: function() { - var $topbar = instance.client.$(".oe_topbar"); + var $topbar = instance.client.$(".navbar"); // .oe_topbar is replaced with .navbar of bootstrap3 var top = $topbar.offset().top + $topbar.height(); top = Math.max(top - $(window).scrollTop(), 0); this.$el.css("top", top); @@ -174,4 +171,4 @@ openerp.webclient.to_kitten(); }; -})(); \ No newline at end of file +})(); diff --git a/addons/im_livechat/im_livechat.py b/addons/im_livechat/im_livechat.py index 5be63d4dcec..16f1128fd78 100644 --- a/addons/im_livechat/im_livechat.py +++ b/addons/im_livechat/im_livechat.py @@ -211,5 +211,5 @@ class im_session(osv.osv): _inherit = 'im.session' _columns = { - 'channel_id': fields.many2one("im.user", "Channel"), + 'channel_id': fields.many2one("im_livechat.channel", "Channel"), } diff --git a/addons/l10n_be/__openerp__.py b/addons/l10n_be/__openerp__.py index cd822045e64..8e607ba3120 100644 --- a/addons/l10n_be/__openerp__.py +++ b/addons/l10n_be/__openerp__.py @@ -65,6 +65,7 @@ Wizards provided by this module: 'account_pcmn_belgium.xml', 'account_tax_code_template.xml', 'account_chart_template.xml', + 'account_chart_template.yml', 'account_tax_template.xml', 'wizard/l10n_be_account_vat_declaration_view.xml', 'wizard/l10n_be_vat_intra_view.xml', diff --git a/addons/l10n_be/account_chart_template.xml b/addons/l10n_be/account_chart_template.xml index 48e506ded79..1de39382624 100644 --- a/addons/l10n_be/account_chart_template.xml +++ b/addons/l10n_be/account_chart_template.xml @@ -12,7 +12,6 @@ -
diff --git a/addons/l10n_be/account_chart_template.yml b/addons/l10n_be/account_chart_template.yml new file mode 100644 index 00000000000..0028576f964 --- /dev/null +++ b/addons/l10n_be/account_chart_template.yml @@ -0,0 +1,4 @@ +- + !python {model: account.chart.template}: | + if 'spoken_languages' in self._all_columns: + self.write(cr, uid, [ref('l10nbe_chart_template')], {'spoken_languages': 'nl_BE'}) diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py index 0576e1d5f8f..2ef1a81fef2 100644 --- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py +++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py @@ -185,7 +185,7 @@ class l10n_be_vat_declaration(osv.osv_memory): for item in cases_list: grid_amount_data = { 'code': str(int(item['code'])), - 'amount': str(abs(item['sum_period'])), + 'amount': '%.2f' % abs(item['sum_period']), } data_of_file += '\n\t\t\t%(amount)s' % (grid_amount_data) diff --git a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml index 0cb05a218c3..6e9bed17ab2 100644 --- a/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml +++ b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml @@ -19,6 +19,22 @@ single + + 54 Rue Jean Baptiste Colette BP + Attiches + 59551 + + onss@yourcompany.example.com + + + Shanghai Branch + Anshun Road 83, Room 1603 - + Shanghai + 200052 + + fiscal@yourcompany.example.com + + diff --git a/addons/l10n_bo/__openerp__.py b/addons/l10n_bo/__openerp__.py index d55777d198f..7bb13365928 100644 --- a/addons/l10n_bo/__openerp__.py +++ b/addons/l10n_bo/__openerp__.py @@ -41,7 +41,7 @@ Plan contable boliviano e impuestos de acuerdo a disposiciones vigentes ], "demo_xml": [ ], - "update_xml": [ + "data": [ ], "active": False, "installable": True, diff --git a/addons/l10n_ch/sterchi_chart/account.xml b/addons/l10n_ch/sterchi_chart/account.xml index acee99cad4a..11198c43b9c 100644 --- a/addons/l10n_ch/sterchi_chart/account.xml +++ b/addons/l10n_ch/sterchi_chart/account.xml @@ -177,14 +177,12 @@ Bilan : Debiteurs receivable - unreconciled none Bilan : Fournisseurs payable - unreconciled none @@ -11809,7 +11807,6 @@ - diff --git a/addons/l10n_es/taxes_data_assoc.xml b/addons/l10n_es/taxes_data_assoc.xml index e2ebb47fb59..152b27363af 100644 --- a/addons/l10n_es/taxes_data_assoc.xml +++ b/addons/l10n_es/taxes_data_assoc.xml @@ -44,7 +44,6 @@ Base adquisiciones exentas - -- 1.0 @@ -53,7 +52,6 @@ Base ventas exentas -- - 1.0 diff --git a/addons/l10n_fr/fr_tax.xml b/addons/l10n_fr/fr_tax.xml index 7c75136bdd3..8633cca7141 100644 --- a/addons/l10n_fr/fr_tax.xml +++ b/addons/l10n_fr/fr_tax.xml @@ -219,8 +219,8 @@ - - + + diff --git a/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv b/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv index 2fe1ba739f4..043ba8f0522 100644 --- a/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv +++ b/addons/l10n_in_hr_payroll/data/hr.salary.rule.csv @@ -1,5 +1,5 @@ -"id","amount_select","condition_range_min","condition_range_max","amount_percentage","amount_fix","name","category_id","sequence","code","parent_rule_id/id","condition_select","condition_range","amount_percentage_base" -1,"fix",1,1,,100,"Education Allowance For One Child","Allowance",23,"CHEAONE","hr_payroll_rule_child1","range","employee.children", -2,"fix",2,10,,200,"Education Allowance For Two Child","Allowance",24,"CHEATWO","hr_payroll_rule_child1","range","employee.children", -3,"fix",1,1,,300,"Child Hostel Allowance For One Child","Allowance",26,"CHOONE","hr_payroll_rule_child2","range","employee.children", -4,"fix",2,10,,600,"Child Hostel Allowance For Two Child","Allowance",27,"CHOTWO","hr_payroll_rule_child2","range","employee.children", +"id","amount_select","condition_range_min","condition_range_max","amount_percentage","amount_fix","name","category_id/id","sequence","code","parent_rule_id/id","condition_select","condition_range","amount_percentage_base" +1,"fix",1,1,,100,"Education Allowance For One Child",hr_payroll.ALW,23,"CHEAONE","hr_payroll_rule_child1","range","employee.children", +2,"fix",2,10,,200,"Education Allowance For Two Child",hr_payroll.ALW,24,"CHEATWO","hr_payroll_rule_child1","range","employee.children", +3,"fix",1,1,,300,"Child Hostel Allowance For One Child",hr_payroll.ALW,26,"CHOONE","hr_payroll_rule_child2","range","employee.children", +4,"fix",2,10,,600,"Child Hostel Allowance For Two Child",hr_payroll.ALW,27,"CHOTWO","hr_payroll_rule_child2","range","employee.children", diff --git a/addons/l10n_multilang/i18n/zh_CN.po b/addons/l10n_multilang/i18n/zh_CN.po index 40b9b024813..8dd8ef276d8 100644 --- a/addons/l10n_multilang/i18n/zh_CN.po +++ b/addons/l10n_multilang/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-02-08 01:06+0000\n" -"PO-Revision-Date: 2013-07-24 12:29+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-11-19 05:36+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:34+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: l10n_multilang #: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template @@ -107,6 +107,7 @@ msgid "" "the final object when generating them from templates. You must provide the " "language codes separated by ';'" msgstr "" +"此处表明模板翻译所用语言可以在该本地化模块安装时加载,并且由此模板生成最终目标时该语言也会被拷贝到最终目标。提交语言代码时必须用分号 ';' 分隔。'" #. module: l10n_multilang #: constraint:account.account:0 diff --git a/addons/l10n_multilang/l10n_multilang.py b/addons/l10n_multilang/l10n_multilang.py index b7564a9960a..937ba332694 100644 --- a/addons/l10n_multilang/l10n_multilang.py +++ b/addons/l10n_multilang/l10n_multilang.py @@ -33,6 +33,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): """ _inherit = 'wizard.multi.charts.accounts' + # FIXME: in trunk, drop the force_write param entirely def process_translations(self, cr, uid, langs, in_obj, in_field, in_ids, out_obj, out_ids, force_write=False, context=None): """ This method copies translations values of templates into new Accounts/Taxes/Journals for languages selected @@ -45,8 +46,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): :param in_ids: List of ids of source object :param out_obj: Destination object for which translation is to be copied :param out_ids: List of ids of destination object - :param force_write: boolean that depicts if we need to create a translation OR simply replace the actual value - with the translation in the uid's language by doing a write (in case it's TRUE) + :param force_write: Deprecated as of 7.0, do not use :param context: usual context information. May contain the key 'lang', which is the language of the user running the wizard, that will be used if force_write is True @@ -65,26 +65,25 @@ class wizard_multi_charts_accounts(osv.osv_memory): for j in range(len(in_ids)): in_id = in_ids[j] if value[in_id]: - if not force_write: - #copy Translation from Source to Destination object - xlat_obj.create(cr, uid, { - 'name': out_obj._name + ',' + in_field, - 'type': 'model', - 'res_id': out_ids[j], - 'lang': lang, - 'src': src[in_id], - 'value': value[in_id], + #copy Translation from Source to Destination object + xlat_obj.create(cr, uid, { + 'name': out_obj._name + ',' + in_field, + 'type': 'model', + 'res_id': out_ids[j], + 'lang': lang, + 'src': src[in_id], + 'value': value[in_id], }) - else: - #replace the value in the destination object only if it's the user lang - if context.get('lang') == lang: - self.pool[out_obj._name].write(cr, uid, out_ids[j], {in_field: value[in_id]}) else: _logger.info('Language: %s. Translation from template: there is no translation available for %s!' %(lang, src[in_id]))#out_obj._name)) return True def execute(self, cr, uid, ids, context=None): - res = super(wizard_multi_charts_accounts, self).execute(cr, uid, ids, context=context) + if not context: + context = {} + # remove the lang to get the untranslated value + ctx = dict(context, lang=None) + res = super(wizard_multi_charts_accounts, self).execute(cr, uid, ids, context=ctx) obj_multi = self.browse(cr, uid, ids[0], context=context) company_id = obj_multi.company_id.id @@ -125,7 +124,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): acc_root_id = obj_acc.search(cr, uid, [('company_id', '=', company_id), ('parent_id', '=', None)])[0] in_ids = obj_acc_template.search(cr, uid, [('id', 'child_of', [acc_template_root_id])], order='id')[1:] out_ids = obj_acc.search(cr, uid, [('id', 'child_of', [acc_root_id])], order='id')[1:] - return self.process_translations(cr, uid, langs, obj_acc_template, field, in_ids, obj_acc, out_ids, force_write=True, context=context) + return self.process_translations(cr, uid, langs, obj_acc_template, field, in_ids, obj_acc, out_ids, context=context) def _process_tax_codes_translations(self, cr, uid, obj_multi, company_id, langs, field, context=None): obj_tax_code_template = self.pool.get('account.tax.code.template') @@ -134,21 +133,21 @@ class wizard_multi_charts_accounts(osv.osv_memory): tax_code_root_id = obj_tax_code.search(cr, uid, [('company_id', '=', company_id), ('parent_id', '=', None)])[0] in_ids = obj_tax_code_template.search(cr, uid, [('id', 'child_of', [tax_code_template_root_id])], order='id')[1:] out_ids = obj_tax_code.search(cr, uid, [('id', 'child_of', [tax_code_root_id])], order='id')[1:] - return self.process_translations(cr, uid, langs, obj_tax_code_template, field, in_ids, obj_tax_code, out_ids, force_write=False, context=context) + return self.process_translations(cr, uid, langs, obj_tax_code_template, field, in_ids, obj_tax_code, out_ids, context=context) def _process_taxes_translations(self, cr, uid, obj_multi, company_id, langs, field, context=None): obj_tax_template = self.pool.get('account.tax.template') obj_tax = self.pool.get('account.tax') in_ids = sorted([x.id for x in obj_multi.chart_template_id.tax_template_ids]) out_ids = obj_tax.search(cr, uid, [('company_id', '=', company_id)], order='id') - return self.process_translations(cr, uid, langs, obj_tax_template, field, in_ids, obj_tax, out_ids, force_write=False, context=context) + return self.process_translations(cr, uid, langs, obj_tax_template, field, in_ids, obj_tax, out_ids, context=context) def _process_fiscal_pos_translations(self, cr, uid, obj_multi, company_id, langs, field, context=None): obj_fiscal_position_template = self.pool.get('account.fiscal.position.template') obj_fiscal_position = self.pool.get('account.fiscal.position') in_ids = obj_fiscal_position_template.search(cr, uid, [('chart_template_id', '=', obj_multi.chart_template_id.id)], order='id') out_ids = obj_fiscal_position.search(cr, uid, [('company_id', '=', company_id)], order='id') - return self.process_translations(cr, uid, langs, obj_fiscal_position_template, field, in_ids, obj_fiscal_position, out_ids, force_write=False, context=context) + return self.process_translations(cr, uid, langs, obj_fiscal_position_template, field, in_ids, obj_fiscal_position, out_ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_mx/__openerp__.py b/addons/l10n_mx/__openerp__.py index d540b477f90..8e137012957 100644 --- a/addons/l10n_mx/__openerp__.py +++ b/addons/l10n_mx/__openerp__.py @@ -51,7 +51,7 @@ With this module you will have: "account_chart", ], "demo_xml" : [], - "update_xml" : ["data/account_tax_code.xml", + "data" : ["data/account_tax_code.xml", "data/account_chart.xml", "data/account_tax.xml", "data/l10n_chart_mx_wizard.xml"], diff --git a/addons/l10n_mx/data/account_chart.xml b/addons/l10n_mx/data/account_chart.xml index daa564fd10e..c28d8da8a44 100644 --- a/addons/l10n_mx/data/account_chart.xml +++ b/addons/l10n_mx/data/account_chart.xml @@ -3693,8 +3693,6 @@ Cuentas del plan - - diff --git a/addons/l10n_pa/__openerp__.py b/addons/l10n_pa/__openerp__.py index e63296f89e6..05e7ad5aefc 100644 --- a/addons/l10n_pa/__openerp__.py +++ b/addons/l10n_pa/__openerp__.py @@ -44,7 +44,7 @@ Con la Colaboración de ], "demo_xml": [ ], - "update_xml": [ + "data": [ ], "active": False, "installable": True, diff --git a/addons/l10n_pt/account_chart_template.xml b/addons/l10n_pt/account_chart_template.xml index 49adfa393ef..08984b8d2af 100644 --- a/addons/l10n_pt/account_chart_template.xml +++ b/addons/l10n_pt/account_chart_template.xml @@ -15,7 +15,6 @@ - diff --git a/addons/l10n_ro/__openerp__.py b/addons/l10n_ro/__openerp__.py index e8bc9b869ad..388a6b2fc0f 100644 --- a/addons/l10n_ro/__openerp__.py +++ b/addons/l10n_ro/__openerp__.py @@ -32,7 +32,7 @@ This is the module to manage the accounting chart, VAT structure and Registratio Romanian accounting chart and localization. """, "demo_xml" : [], - "update_xml" : ['partner_view.xml','account_tax_code_template.xml','account_chart.xml','account_tax_template.xml','l10n_chart_ro_wizard.xml'], + "data" : ['partner_view.xml','account_tax_code_template.xml','account_chart.xml','account_tax_template.xml','l10n_chart_ro_wizard.xml'], "auto_install": False, "installable": True, } diff --git a/addons/l10n_uk/demo/demo.xml b/addons/l10n_uk/demo/demo.xml index ec262412c43..03f42b2c9ba 100644 --- a/addons/l10n_uk/demo/demo.xml +++ b/addons/l10n_uk/demo/demo.xml @@ -6,19 +6,24 @@ 12, Hill Lane HA4 7JW Ruislip - + +44 845 643 4548 08455274653 http://www.smartmode.co.uk + smartmode@yourcompany.example.com Vadim Chobanu - vadim@smartmode.co.uk + vadim@smartmode.example.com 1 default + 88 Wood Street, 10th floor + EC2V 7RS + London + diff --git a/addons/l10n_us/account_chart_template.xml b/addons/l10n_us/account_chart_template.xml index 704afbad152..0adeddc5856 100644 --- a/addons/l10n_us/account_chart_template.xml +++ b/addons/l10n_us/account_chart_template.xml @@ -6,7 +6,6 @@ Basic Chart of Account - diff --git a/addons/l10n_ve/data/account_tax.xml b/addons/l10n_ve/data/account_tax.xml index 7acbda3e2af..8fb1aa4b819 100644 --- a/addons/l10n_ve/data/account_tax.xml +++ b/addons/l10n_ve/data/account_tax.xml @@ -7,8 +7,8 @@ 0.00000 percent all - - + + @@ -21,8 +21,8 @@ 0.120000 percent sale - - + + @@ -34,8 +34,8 @@ 0.080000 percent sale - - + + @@ -47,8 +47,8 @@ 0.220000 percent sale - - + + @@ -60,8 +60,8 @@ 0.120000 percent purchase - - + + @@ -73,8 +73,8 @@ 0.080000 percent purchase - - + + @@ -86,8 +86,8 @@ 0.220000 percent purchase - - + + diff --git a/addons/lunch/i18n/zh_CN.po b/addons/lunch/i18n/zh_CN.po index 3a62cca4273..b039f65c5ab 100644 --- a/addons/lunch/i18n/zh_CN.po +++ b/addons/lunch/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-28 11:04+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:02+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:29+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: lunch #: field:lunch.product,category_id:0 @@ -117,6 +117,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建午餐单。 \n" +"

\n" +"

\n" +" 午餐单由使用者定义日期和内容。\n" +" 每个午餐单内容对应一个产品,一个附加信息和一个价格。\n" +" 决定内容前,记得阅读浅红色区域显示的警告。\n" +"

\n" +" " #. module: lunch #: view:lunch.order.line:0 @@ -151,6 +160,11 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 此处可以显示现金的转移。
A 现金转移可以为费用或付款。\n" +" 当收到一个午餐单时,会自动创建费用。而付款则为经理定义的向公司的缴款。\n" +"

\n" +" " #. module: lunch #: field:lunch.cashmove,amount:0 @@ -355,6 +369,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 此处显示按照供应商或日期分组的每个午餐单。\n" +"

\n" +"

\n" +" - 点击 来通知午餐单已下
\n" +" - 点击 来通知午餐单已收
\n" +" - 点击 red X 来通知午餐单无效\n" +"

\n" +" " #. module: lunch #: field:lunch.alert,tuesday:0 @@ -420,6 +446,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建午餐分类。 \n" +"

\n" +"

\n" +" 此处可以找到每个午餐的菜品分类。\n" +"

\n" +" " #. module: lunch #: view:lunch.order.order:0 @@ -595,6 +628,18 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 此处显示今天按照供应商分组的午餐单。\n" +"

\n" +"

\n" +" - 点击 来通知午餐单已下
\n" +" - 点击 来通知午餐单已收
\n" +" - 点击 来通知午餐单无效\n" +"

\n" +" " #. module: lunch #: selection:report.lunch.order.line,month:0 @@ -657,6 +702,20 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建午餐提醒。 \n" +"

\n" +"

\n" +" 提醒用于与午餐单相关的可能事项。\n" +" 必须定义午餐提醒的频度,时间间隔以及要显示的信息。\n" +"

\n" +"

\n" +" 例如:
\n" +" - 频度:每天
\n" +" - 时间间隔:从 00h00 am 到 11h59 pm
\n" +" -信息:\"你必须在 10h30 am 前下单。\"\n" +"

\n" +" " #. module: lunch #: view:lunch.cancel:0 @@ -698,6 +757,13 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 创建一个付款。 \n" +"

\n" +"

\n" +" 此处显示员工的付款。付款为从员工到公司的现金转移。\n" +"

\n" +" " #. module: lunch #: code:addons/lunch/lunch.py:186 @@ -727,6 +793,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 创建一个付款。\n" +"

\n" +"

\n" +" 每次现金转移都可以是费用或者付款。
\n" +" 开具午餐单收据时自动创建费用。
\n" +" 付款意味着员工向公司缴款。\n" +"

\n" +" " #. module: lunch #: field:lunch.alert,alter_type:0 diff --git a/addons/lunch/lunch_demo.xml b/addons/lunch/lunch_demo.xml index 7e5e2f3ac8f..546c21e0c22 100644 --- a/addons/lunch/lunch_demo.xml +++ b/addons/lunch/lunch_demo.xml @@ -18,10 +18,21 @@ Coin gourmand + Tirana + + Rr. e Durrësit, Pall. M.C. Inerte + Kati.1, Laprakë, Tirana, Shqipëri + coin.gourmand@yourcompany.example.com Pizza Inn + New Delhi TN + + #8, 1 st Floor,iscore complex + Gandhi Gramam,Gandhi Nagar + 607308 + pizza.inn@yourcompany.example.com diff --git a/addons/mail/i18n/hu.po b/addons/mail/i18n/hu.po index b03ef6d9b0d..9b376093a29 100644 --- a/addons/mail/i18n/hu.po +++ b/addons/mail/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-02-14 16:43+0000\n" +"PO-Revision-Date: 2013-12-02 18:38+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:29+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-03 05:41+0000\n" +"X-Generator: Launchpad (build 16856)\n" #. module: mail #: view:mail.followers:0 @@ -1791,7 +1791,7 @@ msgstr "Altípusok" #. module: mail #: model:ir.model,name:mail.model_mail_alias msgid "Email Aliases" -msgstr "e-amil álnevek" +msgstr "Email álnevek" #. module: mail #: field:mail.group,image_small:0 diff --git a/addons/mail/i18n/zh_CN.po b/addons/mail/i18n/zh_CN.po index ab95c7225bc..3aa7c826e21 100644 --- a/addons/mail/i18n/zh_CN.po +++ b/addons/mail/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-12-23 11:23+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:40+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:30+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: mail #: view:mail.followers:0 @@ -298,6 +298,7 @@ msgid "" "automatic subscription on a related document. The field is used to compute " "getattr(related_document.relation_field)." msgstr "" +"使用自动注册相关文档时用来关联模型和子模型的域。该域用来计算 getattr(related_document.relation_field)." #. module: mail #: selection:mail.mail,state:0 @@ -908,7 +909,7 @@ msgstr "别名" msgid "" "Description that will be added in the message posted for this subtype. If " "void, the name will be added instead." -msgstr "" +msgstr "将为该子模型的消息添加注解。如为空,则添加名称。" #. module: mail #: field:mail.compose.message,vote_user_ids:0 diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 97d2842d15c..1eacb902e0f 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -64,7 +64,7 @@ class mail_alias(osv.Model): return dict.fromkeys(ids, domain or "") _columns = { - 'alias_name': fields.char('Alias', + 'alias_name': fields.char('Alias Name', help="The name of the email alias, e.g. 'jobs' if you want to catch emails for ",), 'alias_model_id': fields.many2one('ir.model', 'Aliased Model', required=True, ondelete="cascade", help="The model (OpenERP Document Kind) to which this alias " diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index d1d26886823..5a9f8751f2d 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -34,7 +34,6 @@ class mail_group(osv.Model): _mail_flat_thread = False _inherit = ['mail.thread'] _inherits = {'mail.alias': 'alias_id'} - _mail_post_access = 'read' def _get_image(self, cr, uid, ids, name, args, context=None): result = dict.fromkeys(ids, False) diff --git a/addons/mail/mail_mail_view.xml b/addons/mail/mail_mail_view.xml index dd6a78fd8a4..cf3dd1e8233 100644 --- a/addons/mail/mail_mail_view.xml +++ b/addons/mail/mail_mail_view.xml @@ -12,12 +12,13 @@
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 72ccdc83bb6..9dfec55b075 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -698,8 +698,9 @@ class mail_message(osv.Model): """ model_record_ids = {} for id in msg_ids: - if msg_val[id]['model'] and msg_val[id]['res_id']: - model_record_ids.setdefault(msg_val[id]['model'], dict()).setdefault(msg_val[id]['res_id'], set()).add(msg_val[id]['res_id']) + vals = msg_val.get(id, {}) + if vals.get('model') and vals.get('res_id'): + model_record_ids.setdefault(vals['model'], set()).add(vals['res_id']) return model_record_ids if uid == SUPERUSER_ID: @@ -711,7 +712,7 @@ class mail_message(osv.Model): partner_id = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=None).partner_id.id # Read mail_message.ids to have their values - message_values = dict.fromkeys(ids) + message_values = dict.fromkeys(ids, {}) cr.execute('SELECT DISTINCT id, model, res_id, author_id, parent_id FROM "%s" WHERE id = ANY (%%s)' % self._table, (ids,)) for id, rmod, rid, author_id, parent_id in cr.fetchall(): message_values[id] = {'model': rmod, 'res_id': rid, 'author_id': author_id, 'parent_id': parent_id} @@ -745,10 +746,10 @@ class mail_message(osv.Model): ], context=context) notified_ids = [notification.message_id.id for notification in not_obj.browse(cr, SUPERUSER_ID, not_ids, context=context)] elif operation == 'create': - for doc_model, doc_dict in model_record_ids.items(): + for doc_model, doc_ids in model_record_ids.items(): fol_ids = fol_obj.search(cr, SUPERUSER_ID, [ ('res_model', '=', doc_model), - ('res_id', 'in', list(doc_dict.keys())), + ('res_id', 'in', list(doc_ids)), ('partner_id', '=', partner_id), ], context=context) fol_mids = [follower.res_id for follower in fol_obj.browse(cr, SUPERUSER_ID, fol_ids, context=context)] @@ -759,9 +760,9 @@ class mail_message(osv.Model): other_ids = other_ids.difference(set(notified_ids)) model_record_ids = _generate_model_record_ids(message_values, other_ids) document_related_ids = [] - for model, doc_dict in model_record_ids.items(): + for model, doc_ids in model_record_ids.items(): model_obj = self.pool[model] - mids = model_obj.exists(cr, uid, doc_dict.keys()) + mids = model_obj.exists(cr, uid, list(doc_ids)) if hasattr(model_obj, 'check_mail_message_access'): model_obj.check_mail_message_access(cr, uid, mids, operation, context=context) else: @@ -816,12 +817,11 @@ class mail_message(osv.Model): return email_reply_to def _get_message_id(self, cr, uid, values, context=None): - message_id = None - if not values.get('message_id') and values.get('reply_to'): + if values.get('reply_to'): message_id = tools.generate_tracking_message_id('reply_to') - elif not values.get('message_id') and values.get('res_id') and values.get('model'): + elif values.get('res_id') and values.get('model'): message_id = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values) - elif not values.get('message_id'): + else: message_id = tools.generate_tracking_message_id('private') return message_id @@ -832,7 +832,7 @@ class mail_message(osv.Model): if 'email_from' not in values: # needed to compute reply_to values['email_from'] = self._get_default_from(cr, uid, context=context) - if not values.get('message_id'): + if 'message_id' not in values: values['message_id'] = self._get_message_id(cr, uid, values, context=context) if 'reply_to' not in values: values['reply_to'] = self._get_reply_to(cr, uid, values, context=context) diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 9692b94f159..cee085129ea 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -23,6 +23,11 @@ import base64 import datetime import dateutil import email +try: + import simplejson as json +except ImportError: + import json +from lxml import etree import logging import pytz import time @@ -33,6 +38,7 @@ from openerp import tools from openerp import SUPERUSER_ID from openerp.addons.mail.mail_message import decode from openerp.osv import fields, osv, orm +from openerp.osv.orm import browse_record, browse_null from openerp.tools.safe_eval import safe_eval as eval from openerp.tools.translate import _ @@ -159,7 +165,7 @@ class mail_thread(osv.AbstractModel): def read_followers_data(self, cr, uid, follower_ids, context=None): result = [] - technical_group = self.pool.get('ir.model.data').get_object(cr, uid, 'base', 'group_no_one') + technical_group = self.pool.get('ir.model.data').get_object(cr, uid, 'base', 'group_no_one', context=context, check_existence_and_raise=True) for follower in self.pool.get('res.partner').browse(cr, uid, follower_ids, context=context): is_editable = uid in map(lambda x: x.id, technical_group.users) is_uid = uid in map(lambda x: x.id, follower.user_ids) @@ -246,13 +252,10 @@ class mail_thread(osv.AbstractModel): new = set(command[2]) # remove partners that are no longer followers - fol_ids = fol_obj.search(cr, SUPERUSER_ID, - [('res_model', '=', self._name), ('res_id', '=', id), ('partner_id', 'not in', list(new))]) - fol_obj.unlink(cr, SUPERUSER_ID, fol_ids) + self.message_unsubscribe(cr, uid, [id], list(old-new)) # add new followers - for partner_id in new - old: - fol_obj.create(cr, SUPERUSER_ID, {'res_model': self._name, 'res_id': id, 'partner_id': partner_id}) + self.message_subscribe(cr, uid, [id], list(new-old)) def _search_followers(self, cr, uid, obj, name, args, context): """Search function for message_follower_ids @@ -306,6 +309,28 @@ class mail_thread(osv.AbstractModel): "be inserted in kanban views."), } + def _get_user_chatter_options(self, cr, uid, context=None): + options = { + 'display_log_button': False + } + group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id + group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_user')[1] + is_employee = group_user_id in [group.id for group in group_ids] + if is_employee: + options['display_log_button'] = True + return options + + def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): + res = super(mail_thread, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu) + if view_type == 'form': + doc = etree.XML(res['arch']) + for node in doc.xpath("//field[@name='message_ids']"): + options = json.loads(node.get('options', '{}')) + options.update(self._get_user_chatter_options(cr, uid, context=context)) + node.set('options', json.dumps(options)) + res['arch'] = etree.tostring(doc) + return res + #------------------------------------------------------ # CRUD overrides for automatic subscription and logging #------------------------------------------------------ @@ -318,6 +343,7 @@ class mail_thread(osv.AbstractModel): """ if context is None: context = {} + thread_id = super(mail_thread, self).create(cr, uid, values, context=context) # automatic logging unless asked not to (mainly for various testing purpose) @@ -327,37 +353,45 @@ 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) + # auto_subscribe: take values and defaults into account - create_values = set(values.keys()) + create_values = dict(values) 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) + create_values[key[8:]] = val + self.message_auto_subscribe(cr, uid, [thread_id], create_values.keys(), context=context, values=create_values) # track values - tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) + track_ctx = dict(context) + if 'lang' not in track_ctx: + track_ctx['lang'] = self.pool.get('res.users').browse(cr, uid, uid, context=context).lang + tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=track_ctx) if tracked_fields: initial_values = {thread_id: dict((item, False) for item in tracked_fields)} - self.message_track(cr, uid, [thread_id], tracked_fields, initial_values, context=context) - + self.message_track(cr, uid, [thread_id], tracked_fields, initial_values, context=track_ctx) return thread_id def write(self, cr, uid, ids, values, context=None): + if context is None: + context = {} if isinstance(ids, (int, long)): ids = [ids] # Track initial values of tracked fields - tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=context) + track_ctx = dict(context) + if 'lang' not in track_ctx: + track_ctx['lang'] = self.pool.get('res.users').browse(cr, uid, uid, context=context).lang + tracked_fields = self._get_tracked_fields(cr, uid, values.keys(), context=track_ctx) if tracked_fields: - records = self.browse(cr, uid, ids, context=context) + records = self.browse(cr, uid, ids, context=track_ctx) initial_values = dict((this.id, dict((key, getattr(this, key)) for key in tracked_fields.keys())) for this in records) # Perform write, update followers result = super(mail_thread, self).write(cr, uid, ids, values, context=context) - self.message_auto_subscribe(cr, uid, ids, values.keys(), context=context) + self.message_auto_subscribe(cr, uid, ids, values.keys(), context=context, values=values) # Perform the tracking if tracked_fields: - self.message_track(cr, uid, ids, tracked_fields, initial_values, context=context) + self.message_track(cr, uid, ids, tracked_fields, initial_values, context=track_ctx) return result def unlink(self, cr, uid, ids, context=None): @@ -461,10 +495,9 @@ class mail_thread(osv.AbstractModel): posted = False for subtype in subtypes: - try: - subtype_rec = self.pool.get('ir.model.data').get_object(cr, uid, subtype.split('.')[0], subtype.split('.')[1], context=context) - except ValueError, e: - _logger.debug('subtype %s not found, giving error "%s"' % (subtype, e)) + subtype_rec = self.pool.get('ir.model.data').get_object(cr, uid, subtype.split('.')[0], subtype.split('.')[1], context=context, check_existence_and_raise=False) + if not subtype_rec.exists(): + _logger.debug('subtype %s not found' % subtype) continue message = format_message(subtype_rec.description if subtype_rec.description else subtype_rec.name, tracked_values) self.message_post(cr, uid, browse_record.id, body=message, subtype=subtype, context=context) @@ -577,7 +610,8 @@ class mail_thread(osv.AbstractModel): return action if msg_id and not (model and res_id): msg = self.pool.get('mail.message').browse(cr, uid, msg_id, context=context) - model, res_id = msg.model, msg.res_id + if msg.exists(): + model, res_id = msg.model, msg.res_id # if model + res_id found: try to redirect to the document or fallback on the Inbox if model and res_id: @@ -687,8 +721,8 @@ class mail_thread(osv.AbstractModel): # Private message: should not contain any thread_id if not model and thread_id: if assert_model: - assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).' - _warn('posting a message without model should be with a null res_id (private message), resetting thread_id') + assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message), received %s.' % thread_id + _warn('posting a message without model should be with a null res_id (private message), received %s, resetting thread_id' % thread_id) thread_id = 0 # Private message: should have a parent_id (only answers) if not model and not message_dict.get('parent_id'): @@ -785,6 +819,7 @@ class mail_thread(osv.AbstractModel): :return: list of [model, thread_id, custom_values, user_id, alias] """ assert isinstance(message, Message), 'message must be an email.message.Message at this point' + mail_msg_obj = self.pool['mail.message'] fallback_model = model # Get email.message.Message variables for future processing @@ -793,31 +828,54 @@ class mail_thread(osv.AbstractModel): email_to = decode_header(message, 'To') references = decode_header(message, 'References') in_reply_to = decode_header(message, 'In-Reply-To') - - # 1. Verify if this is a reply to an existing thread thread_references = references or in_reply_to + + # 1. message is a reply to an existing message (exact match of message_id) + msg_references = thread_references.split() + mail_message_ids = mail_msg_obj.search(cr, uid, [('message_id', 'in', msg_references)], context=context) + if mail_message_ids: + original_msg = mail_msg_obj.browse(cr, SUPERUSER_ID, mail_message_ids[0], context=context) + model, thread_id = original_msg.model, original_msg.res_id + _logger.info( + 'Routing mail from %s to %s with Message-Id %s: direct reply to msg: model: %s, thread_id: %s, custom_values: %s, uid: %s', + email_from, email_to, message_id, model, thread_id, custom_values, uid) + route = self.message_route_verify( + cr, uid, message, message_dict, + (model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) + return route and [route] or [] + + # 2. message is a reply to an existign thread (6.1 compatibility) ref_match = thread_references and tools.reference_re.search(thread_references) if ref_match: thread_id = int(ref_match.group(1)) model = ref_match.group(2) or fallback_model if thread_id and model in self.pool: model_obj = self.pool[model] - if model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): - _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', - email_from, email_to, message_id, model, thread_id, custom_values, uid) - route = self.message_route_verify(cr, uid, message, message_dict, - (model, thread_id, custom_values, uid, None), - update_author=True, assert_model=True, create_fallback=True, context=context) + compat_mail_msg_ids = mail_msg_obj.search( + cr, uid, [ + ('message_id', '=', False), + ('model', '=', model), + ('res_id', '=', thread_id), + ], context=context) + if compat_mail_msg_ids and model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): + _logger.info( + 'Routing mail from %s to %s with Message-Id %s: direct thread reply (compat-mode) to model: %s, thread_id: %s, custom_values: %s, uid: %s', + email_from, email_to, message_id, model, thread_id, custom_values, uid) + route = self.message_route_verify( + cr, uid, message, message_dict, + (model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) return route and [route] or [] # 2. Reply to a private message if in_reply_to: - mail_message_ids = self.pool.get('mail.message').search(cr, uid, [ + mail_message_ids = mail_msg_obj.search(cr, uid, [ ('message_id', '=', in_reply_to), '!', ('message_id', 'ilike', 'reply_to') ], limit=1, context=context) if mail_message_ids: - mail_message = self.pool.get('mail.message').browse(cr, uid, mail_message_ids[0], context=context) + mail_message = mail_msg_obj.browse(cr, uid, mail_message_ids[0], context=context) _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s', email_from, email_to, message_id, mail_message.id, custom_values, uid) route = self.message_route_verify(cr, uid, message, message_dict, @@ -1060,7 +1118,7 @@ class mail_thread(osv.AbstractModel): encoding = part.get_content_charset() # None if attachment # 1) Explicit Attachments -> attachments if filename or part.get('content-disposition', '').strip().startswith('attachment'): - attachments.append((filename or 'attachment', part.get_payload(decode=True))) + attachments.append((decode(filename) or 'attachment', part.get_payload(decode=True))) continue # 2) text/plain ->
                 if part.get_content_type() == 'text/plain' and (not alternative or not body):
@@ -1285,6 +1343,40 @@ class mail_thread(osv.AbstractModel):
                     mail_message_obj.write(cr, SUPERUSER_ID, message_ids, {'author_id': partner_info['partner_id']}, context=context)
         return result
 
+    def _message_preprocess_attachments(self, cr, uid, attachments, attachment_ids, attach_model, attach_res_id, context=None):
+        """ Preprocess attachments for mail_thread.message_post() or mail_mail.create().
+
+        :param list attachments: list of attachment tuples in the form ``(name,content)``,
+                                 where content is NOT base64 encoded
+        :param list attachment_ids: a list of attachment ids, not in tomany command form
+        :param str attach_model: the model of the attachments parent record
+        :param integer attach_res_id: the id of the attachments parent record
+        """
+        Attachment = self.pool['ir.attachment']
+        m2m_attachment_ids = []
+        if attachment_ids:
+            filtered_attachment_ids = Attachment.search(cr, SUPERUSER_ID, [
+                ('res_model', '=', 'mail.compose.message'),
+                ('create_uid', '=', uid),
+                ('id', 'in', attachment_ids)], context=context)
+            if filtered_attachment_ids:
+                Attachment.write(cr, SUPERUSER_ID, filtered_attachment_ids, {'res_model': attach_model, 'res_id': attach_res_id}, context=context)
+            m2m_attachment_ids += [(4, id) for id in attachment_ids]
+        # Handle attachments parameter, that is a dictionary of attachments
+        for name, content in attachments:
+            if isinstance(content, unicode):
+                content = content.encode('utf-8')
+            data_attach = {
+                'name': name,
+                'datas': base64.b64encode(str(content)),
+                'datas_fname': name,
+                'description': name,
+                'res_model': attach_model,
+                'res_id': attach_res_id,
+            }
+            m2m_attachment_ids.append((0, 0, data_attach))
+        return m2m_attachment_ids
+
     def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification',
                      subtype=None, parent_id=False, attachments=None, context=None,
                      content_subtype='html', **kwargs):
@@ -1363,28 +1455,7 @@ class mail_thread(osv.AbstractModel):
 
         # 3. Attachments
         #   - HACK TDE FIXME: Chatter: attachments linked to the document (not done JS-side), load the message
-        attachment_ids = kwargs.pop('attachment_ids', []) or []  # because we could receive None (some old code sends None)
-        if attachment_ids:
-            filtered_attachment_ids = ir_attachment.search(cr, SUPERUSER_ID, [
-                ('res_model', '=', 'mail.compose.message'),
-                ('create_uid', '=', uid),
-                ('id', 'in', attachment_ids)], context=context)
-            if filtered_attachment_ids:
-                ir_attachment.write(cr, SUPERUSER_ID, filtered_attachment_ids, {'res_model': model, 'res_id': thread_id}, context=context)
-        attachment_ids = [(4, id) for id in attachment_ids]
-        # Handle attachments parameter, that is a dictionary of attachments
-        for name, content in attachments:
-            if isinstance(content, unicode):
-                content = content.encode('utf-8')
-            data_attach = {
-                'name': name,
-                'datas': base64.b64encode(str(content)),
-                'datas_fname': name,
-                'description': name,
-                'res_model': model,
-                'res_id': thread_id,
-            }
-            attachment_ids.append((0, 0, data_attach))
+        attachment_ids = self._message_preprocess_attachments(cr, uid, attachments, kwargs.pop('attachment_ids', []), model, thread_id, context)
 
         # 4: mail.message.subtype
         subtype_id = False
@@ -1472,35 +1543,33 @@ class mail_thread(osv.AbstractModel):
         else:
             self.check_access_rights(cr, uid, 'write')
 
-        for record in self.browse(cr, SUPERUSER_ID, ids, context=context):
-            existing_pids = set([f.id for f in record.message_follower_ids
-                                            if f.id in partner_ids])
+        existing_pids_dict = {}
+        fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('res_id', 'in', ids)])
+        for fol in mail_followers_obj.browse(cr, SUPERUSER_ID, fol_ids, context=context):
+            existing_pids_dict.setdefault(fol.res_id, set()).add(fol.partner_id.id)
+
+        # subtype_ids specified: update already subscribed partners
+        if subtype_ids and fol_ids:
+            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
+        if subtype_ids is None:
+            subtype_ids = subtype_obj.search(
+                cr, uid, [
+                    ('default', '=', True), '|', ('res_model', '=', self._name), ('res_model', '=', False)], context=context)
+
+        for id in ids:
+            existing_pids = existing_pids_dict.get(id, set())
             new_pids = set(partner_ids) - existing_pids
 
-            # subtype_ids specified: update already subscribed partners
-            if subtype_ids and existing_pids:
-                fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [
-                                                        ('res_model', '=', self._name),
-                                                        ('res_id', '=', record.id),
-                                                        ('partner_id', 'in', list(existing_pids)),
-                                                    ], 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
-            elif subtype_ids is None:
-                subtype_ids = subtype_obj.search(cr, uid, [
-                                                        ('default', '=', True),
-                                                        '|',
-                                                        ('res_model', '=', self._name),
-                                                        ('res_model', '=', False)
-                                                    ], context=context)
             # subscribe new followers
             for new_pid in new_pids:
-                mail_followers_obj.create(cr, SUPERUSER_ID, {
-                                                'res_model': self._name,
-                                                'res_id': record.id,
-                                                'partner_id': new_pid,
-                                                'subtype_ids': [(6, 0, subtype_ids)],
-                                            }, context=context)
+                mail_followers_obj.create(
+                    cr, SUPERUSER_ID, {
+                        'res_model': self._name,
+                        'res_id': id,
+                        'partner_id': new_pid,
+                        'subtype_ids': [(6, 0, subtype_ids)],
+                    }, context=context)
 
         return True
 
@@ -1519,7 +1588,14 @@ class mail_thread(osv.AbstractModel):
             self.check_access_rights(cr, uid, 'read')
         else:
             self.check_access_rights(cr, uid, 'write')
-        return self.write(cr, SUPERUSER_ID, ids, {'message_follower_ids': [(3, pid) for pid in partner_ids]}, context=context)
+        fol_obj = self.pool['mail.followers']
+        fol_ids = fol_obj.search(
+            cr, SUPERUSER_ID, [
+                ('res_model', '=', self._name),
+                ('res_id', 'in', ids),
+                ('partner_id', 'in', partner_ids)
+            ], context=context)
+        return fol_obj.unlink(cr, SUPERUSER_ID, fol_ids, context=context)
 
     def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None):
         """ Returns the list of relational fields linking to res.users that should
@@ -1538,75 +1614,100 @@ class mail_thread(osv.AbstractModel):
                 user_field_lst.append(name)
         return user_field_lst
 
-    def message_auto_subscribe(self, cr, uid, ids, updated_fields, context=None):
-        """
-            1. fetch project subtype related to task (parent_id.res_model = 'project.task')
-            2. for each project subtype: subscribe the follower to the task
+    def message_auto_subscribe(self, cr, uid, ids, updated_fields, context=None, values=None):
+        """ Handle auto subscription. Two methods for auto subscription exist:
+
+         - tracked res.users relational fields, such as user_id fields. Those fields
+           must be relation fields toward a res.users record, and must have the
+           track_visilibity attribute set.
+         - using subtypes parent relationship: check if the current model being
+           modified has an header record (such as a project for tasks) whose followers
+           can be added as followers of the current records. Example of structure
+           with project and task:
+
+          - st_project_1.parent_id = st_task_1
+          - st_project_1.res_model = 'project.project'
+          - st_project_1.relation_field = 'project_id'
+          - st_task_1.model = 'project.task'
+
+        :param list updated_fields: list of updated fields to track
+        :param dict values: updated values; if None, the first record will be browsed
+                            to get the values. Added after releasing 7.0, therefore
+                            not merged with updated_fields argumment.
         """
         subtype_obj = self.pool.get('mail.message.subtype')
         follower_obj = self.pool.get('mail.followers')
+        new_followers = dict()
 
-        # fetch auto_follow_fields
+        # fetch auto_follow_fields: res.users relation fields whose changes are tracked for subscription
         user_field_lst = self._message_get_auto_subscribe_fields(cr, uid, updated_fields, context=context)
 
-        # fetch related record subtypes
-        related_subtype_ids = subtype_obj.search(cr, uid, ['|', ('res_model', '=', False), ('parent_id.res_model', '=', self._name)], context=context)
-        subtypes = subtype_obj.browse(cr, uid, related_subtype_ids, context=context)
-        default_subtypes = [subtype for subtype in subtypes if subtype.res_model == False]
-        related_subtypes = [subtype for subtype in subtypes if subtype.res_model != False]
-        relation_fields = set([subtype.relation_field for subtype in subtypes if subtype.relation_field != False])
-        if (not related_subtypes or not any(relation in updated_fields for relation in relation_fields)) and not user_field_lst:
+        # fetch header subtypes
+        header_subtype_ids = subtype_obj.search(cr, uid, ['|', ('res_model', '=', False), ('parent_id.res_model', '=', self._name)], context=context)
+        subtypes = subtype_obj.browse(cr, uid, header_subtype_ids, context=context)
+
+        # if no change in tracked field or no change in tracked relational field: quit
+        relation_fields = set([subtype.relation_field for subtype in subtypes if subtype.relation_field is not False])
+        if not any(relation in updated_fields for relation in relation_fields) and not user_field_lst:
             return True
 
-        for record in self.browse(cr, uid, ids, context=context):
-            new_followers = dict()
-            parent_res_id = False
-            parent_model = False
-            for subtype in related_subtypes:
-                if not subtype.relation_field or not subtype.parent_id:
-                    continue
-                if not subtype.relation_field in self._columns or not getattr(record, subtype.relation_field, False):
-                    continue
-                parent_res_id = getattr(record, subtype.relation_field).id
-                parent_model = subtype.res_model
-                follower_ids = follower_obj.search(cr, SUPERUSER_ID, [
-                    ('res_model', '=', parent_model),
-                    ('res_id', '=', parent_res_id),
-                    ('subtype_ids', 'in', [subtype.id])
-                    ], context=context)
-                for follower in follower_obj.browse(cr, SUPERUSER_ID, follower_ids, context=context):
-                    new_followers.setdefault(follower.partner_id.id, set()).add(subtype.parent_id.id)
+        # legacy behavior: if values is not given, compute the values by browsing
+        # @TDENOTE: remove me in 8.0
+        if values is None:
+            record = self.browse(cr, uid, ids[0], context=context)
+            for updated_field in updated_fields:
+                field_value = getattr(record, updated_field)
+                if isinstance(field_value, browse_record):
+                    field_value = field_value.id
+                elif isinstance(field_value, browse_null):
+                    field_value = False
+                values[updated_field] = field_value
 
-            if parent_res_id and parent_model:
-                for subtype in default_subtypes:
-                    follower_ids = follower_obj.search(cr, SUPERUSER_ID, [
-                        ('res_model', '=', parent_model),
-                        ('res_id', '=', parent_res_id),
-                        ('subtype_ids', 'in', [subtype.id])
-                        ], context=context)
-                    for follower in follower_obj.browse(cr, SUPERUSER_ID, follower_ids, context=context):
-                        new_followers.setdefault(follower.partner_id.id, set()).add(subtype.id)
+        # find followers of headers, update structure for new followers
+        headers = set()
+        for subtype in subtypes:
+            if subtype.relation_field and values.get(subtype.relation_field):
+                headers.add((subtype.res_model, values.get(subtype.relation_field)))
+        if headers:
+            header_domain = ['|'] * (len(headers) - 1)
+            for header in headers:
+                header_domain += ['&', ('res_model', '=', header[0]), ('res_id', '=', header[1])]
+            header_follower_ids = follower_obj.search(
+                cr, SUPERUSER_ID,
+                header_domain,
+                context=context
+            )
+            for header_follower in follower_obj.browse(cr, SUPERUSER_ID, header_follower_ids, context=context):
+                for subtype in header_follower.subtype_ids:
+                    if subtype.parent_id and subtype.parent_id.res_model == self._name:
+                        new_followers.setdefault(header_follower.partner_id.id, set()).add(subtype.parent_id.id)
+                    elif subtype.res_model is False:
+                        new_followers.setdefault(header_follower.partner_id.id, set()).add(subtype.id)
 
-            # add followers coming from res.users relational fields that are tracked
-            user_ids = [getattr(record, name).id for name in user_field_lst if getattr(record, name)]
-            user_id_partner_ids = [user.partner_id.id for user in self.pool.get('res.users').browse(cr, SUPERUSER_ID, user_ids, context=context)]
-            for partner_id in user_id_partner_ids:
-                new_followers.setdefault(partner_id, None)
+        # add followers coming from res.users relational fields that are tracked
+        user_ids = [values[name] for name in user_field_lst if values.get(name)]
+        user_pids = [user.partner_id.id for user in self.pool.get('res.users').browse(cr, SUPERUSER_ID, user_ids, context=context)]
+        for partner_id in user_pids:
+            new_followers.setdefault(partner_id, None)
 
-            for pid, subtypes in new_followers.items():
-                subtypes = list(subtypes) if subtypes is not None else None
-                self.message_subscribe(cr, uid, [record.id], [pid], subtypes, context=context)
+        for pid, subtypes in new_followers.items():
+            subtypes = list(subtypes) if subtypes is not None else None
+            self.message_subscribe(cr, uid, ids, [pid], subtypes, context=context)
 
-            # find first email message, set it as unread for auto_subscribe fields for them to have a notification
-            if user_id_partner_ids:
-                msg_ids = self.pool.get('mail.message').search(cr, uid, [
-                                ('model', '=', self._name),
-                                ('res_id', '=', record.id),
-                                ('type', '=', 'email')], limit=1, context=context)
-                if not msg_ids and record.message_ids:
-                    msg_ids = [record.message_ids[-1].id]
+        # find first email message, set it as unread for auto_subscribe fields for them to have a notification
+        if user_pids:
+            for record_id in ids:
+                message_obj = self.pool.get('mail.message')
+                msg_ids = message_obj.search(cr, SUPERUSER_ID, [
+                    ('model', '=', self._name),
+                    ('res_id', '=', record_id),
+                    ('type', '=', 'email')], limit=1, context=context)
+                if not msg_ids:
+                    msg_ids = message_obj.search(cr, SUPERUSER_ID, [
+                        ('model', '=', self._name),
+                        ('res_id', '=', record_id)], limit=1, context=context)
                 if msg_ids:
-                    self.pool.get('mail.notification')._notify(cr, uid, msg_ids[0], partners_to_notify=user_id_partner_ids, context=context)
+                    self.pool.get('mail.notification')._notify(cr, uid, msg_ids[0], partners_to_notify=user_pids, context=context)
 
         return True
 
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index ac1d406c29a..e335929ec2f 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -81,6 +81,12 @@ class res_users(osv.Model):
         self._create_welcome_message(cr, uid, user, context=context)
         return user_id
 
+    def copy_data(self, *args, **kwargs):
+        data = super(res_users, self).copy_data(*args, **kwargs)
+        if data.get('alias_name'):
+            data['alias_name'] = data['login']
+        return data
+
     def _create_welcome_message(self, cr, uid, user, context=None):
         if not self.has_group(cr, uid, 'base.group_user'):
             return False
diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css
index e4b7f9247e3..bfae7571a9c 100644
--- a/addons/mail/static/src/css/mail.css
+++ b/addons/mail/static/src/css/mail.css
@@ -68,7 +68,7 @@
     border: solid 1px rgba(0,0,0,0.03);
 }
 .openerp .oe_mail .oe_msg.oe_msg_nobody{
-    background: #F8F8F8;
+    background: #E4E4E4;
 }
 .openerp .oe_mail .oe_msg.oe_msg_notification{
     background: #F8F8F8;
@@ -94,9 +94,7 @@
 }
 .openerp .oe_mail .oe_msg .oe_msg_footer{
     margin-left: 4px;
-    padding-top: 3px;
     overflow: hidden;
-    margin-bottom: 4px;
     font-size: 11px;
 }
 .openerp .oe_mail .oe_msg .oe_msg_content{
@@ -478,7 +476,7 @@
 }
 .openerp .oe_mail .oe_msg_footer button.oe_attach{
     width: 24px;
-    overflow: hidden;
+    margin-bottom: 5px; /* improved margin of file attach button according bootstrap3 */
     filter:none;
 }
 .openerp .oe_mail .oe_msg_footer button.oe_attach .oe_e{
@@ -634,7 +632,7 @@
     margin-bottom: 4px;
 }
 .openerp .oe_followers .oe_invite{
-    float: right;
+    padding-left: 5px;
 }
 .openerp .oe_followers .oe_partner {
     height: 32px;
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index e3f813bfa47..269187df8cd 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -725,6 +725,7 @@ openerp.mail = function (session) {
             var values = {
                 'body': this.$('textarea').val(),
                 'subject': false,
+                'parent_id': this.context.default_parent_id,
                 'attachment_ids': _.map(this.attachment_ids, function (file) {return file.id;}),
                 'partner_ids': partner_ids,
                 'context': _.extend(this.parent_thread.context, {
@@ -833,7 +834,9 @@ openerp.mail = function (session) {
                 // go to the parented message
                 var message = this.parent_thread.parent_message;
                 var parent_message = message.parent_id ? message.parent_thread.parent_message : message;
-                var messages = [parent_message].concat(parent_message.get_childs());
+                if(parent_message){
+                    var messages = [parent_message].concat(parent_message.get_childs());
+                }
             } else if (this.options.emails_from_on_composer) {
                 // get all wall messages if is not a mail.Wall
                 _.each(this.options.root_thread.messages, function (msg) {messages.push(msg); messages.concat(msg.get_childs());});
@@ -1799,15 +1802,17 @@ openerp.mail = function (session) {
                 'read_action': 'unread',
                 'show_record_name': false,
                 'show_compact_message': 1,
+                'display_log_button' : true,
             }, this.node.params);
-
             if (this.node.attrs.placeholder) {
                 this.node.params.compose_placeholder = this.node.attrs.placeholder;
             }
             if (this.node.attrs.readonly) {
                 this.node.params.readonly = this.node.attrs.readonly;
             }
-
+            if ('display_log_button' in this.options) {
+                this.node.params.display_log_button = this.options.display_log_button;
+            }
             this.domain = this.node.params && this.node.params.domain || [];
 
             if (!this.ParentViewManager.is_action_enabled('edit')) {
diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js
index 53cab629d79..938d6a01f6d 100644
--- a/addons/mail/static/src/js/mail_followers.js
+++ b/addons/mail/static/src/js/mail_followers.js
@@ -264,7 +264,7 @@ openerp_mail_followers = function(session, mail) {
                 var $list = this.$('.oe_subtype_list');
             }
             $list.empty().hide();
-            var records = data[this.view.datarecord.id || this.view.dataset.ids[0]].message_subtype_data;
+            var records = data[id].message_subtype_data;
             this.records_length = $.map(records, function(value, index) { return index; }).length;
             if (this.records_length > 1) { self.display_followers(); }
             _(records).each(function (record, record_name) {
diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml
index e6c84eaa5df..31539e24ab3 100644
--- a/addons/mail/static/src/xml/mail.xml
+++ b/addons/mail/static/src/xml/mail.xml
@@ -34,7 +34,7 @@
                     
@@ -51,8 +51,10 @@ @@ -155,7 +157,7 @@
- Attach a note that will not be sent to the followers + Add an internal note that will not be sent to the followers
@@ -293,9 +295,9 @@ logged a note - to - - nobody + + + to +# Copyright (c) 2012-TODAY OpenERP S.A. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py index 62c76db5a40..c7f1056c59a 100644 --- a/addons/mail/tests/test_mail_features.py +++ b/addons/mail/tests/test_mail_features.py @@ -294,9 +294,9 @@ class test_mail(TestMail): 'notification email: link should contain the user login') self.assertIn('message_id=%s' % mail.mail_message_id.id, url, 'notification email: link based on message should contain the mail_message id') - self.assertNotIn('model', url, + self.assertNotIn('model=mail.group', url, 'notification email: link based on message should not contain model') - self.assertNotIn('res_id', url, + self.assertNotIn('res_id=%s' % group_pigs.id, url, 'notification email: link based on message should not contain res_id') @mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm') diff --git a/addons/mail/tests/test_mail_gateway.py b/addons/mail/tests/test_mail_gateway.py index b2a1c3250aa..c6fffbde9fe 100644 --- a/addons/mail/tests/test_mail_gateway.py +++ b/addons/mail/tests/test_mail_gateway.py @@ -378,7 +378,7 @@ class TestMailgateway(TestMail): frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', to='erroneous@example.com>', subject='Re: news', - extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) + extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>\n') # Test: no group 'Re: news' created, still only 1 Frogs group self.assertEqual(len(frog_groups), 0, 'message_process: reply on Frogs should not have created a new group with new subject') @@ -387,16 +387,41 @@ class TestMailgateway(TestMail): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: one new message - self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 2 messages after reply') + self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 3 messages after reply') # Test: author (and not recipient) added as follower frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) self.assertEqual(frog_follower_ids, set([p1id, p2id]), 'message_process: after reply, group should have 2 followers') + # Do: incoming email with ref holding model / res_id but that does not match any message in the thread: must raise since OpenERP saas-3 + self.assertRaises(AssertionError, + format_and_process, + MAIL_TEMPLATE, email_from='other5@gmail.com', + to='noone@example.com', subject='spam', + extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>' % frog_group.id, + msg_id='<1.1.JavaMail.new@agrolait.com>') + # There are 6.1 messages, activate compat mode + tmp_msg_id = self.mail_message.create(cr, uid, {'message_id': False, 'model': 'mail.group', 'res_id': frog_group.id}) + # Do: compat mode accepts partial-matching emails + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other5@gmail.com', + msg_id='<1.2.JavaMail.new@agrolait.com>', + to='noone@example.com>', subject='spam', + extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>' % frog_group.id) + self.mail_message.unlink(cr, uid, [tmp_msg_id]) + # Test: no group 'Re: news' created, still only 1 Frogs group + self.assertEqual(len(frog_groups), 0, + 'message_process: reply on Frogs should not have created a new group with new subject') + frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) + self.assertEqual(len(frog_groups), 1, + 'message_process: reply on Frogs should not have created a duplicate group with old subject') + frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) + # Test: one new message + self.assertEqual(len(frog_group.message_ids), 4, 'message_process: group should contain 4 messages after reply') + # Do: due to some issue, same email goes back into the mailgateway frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', - subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) + subject='Re: news', extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>\n') # Test: no group 'Re: news' created, still only 1 Frogs group self.assertEqual(len(frog_groups), 0, 'message_process: reply on Frogs should not have created a new group with new subject') @@ -405,7 +430,7 @@ class TestMailgateway(TestMail): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: no new message - self.assertEqual(len(frog_group.message_ids), 3, 'message_process: message with already existing message_id should not have been duplicated') + self.assertEqual(len(frog_group.message_ids), 4, 'message_process: message with already existing message_id should not have been duplicated') # Test: message_id is still unique msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')]) self.assertEqual(len(msg_ids), 1, @@ -422,7 +447,7 @@ class TestMailgateway(TestMail): format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik ', to='erroneous@example.com>', subject='Re: news (2)', msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>', - extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) + extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>') frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: author is A-Raoul (only existing) @@ -436,7 +461,7 @@ class TestMailgateway(TestMail): format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik ', to='erroneous@example.com>', subject='Re: news (3)', msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>', - extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) + extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>') frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: author is Raoul (user), not A-Raoul @@ -451,7 +476,7 @@ class TestMailgateway(TestMail): format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik ', to='erroneous@example.com>', subject='Re: news (3)', msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>', - extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) + extra='In-Reply-To: <1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>') frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: author is Raoul (user), not A-Raoul diff --git a/addons/mail/tests/test_mail_group.py b/addons/mail/tests/test_mail_group.py index c1512441b13..34c7f0c00e0 100644 --- a/addons/mail/tests/test_mail_group.py +++ b/addons/mail/tests/test_mail_group.py @@ -20,6 +20,7 @@ ############################################################################## from openerp.addons.mail.tests.common import TestMail +from openerp.exceptions import AccessError from openerp.osv.orm import except_orm from openerp.tools import mute_logger @@ -40,7 +41,7 @@ class TestMailGroup(TestMail): self.mail_group.read(cr, user_employee_id, [self.group_pigs_id]) # Do: Bert creates a group -> ko, no access rights - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): self.mail_group.create(cr, user_noone_id, {'name': 'Test'}) # Do: Raoul creates a restricted group -> ok new_group_id = self.mail_group.create(cr, user_employee_id, {'name': 'Test'}) @@ -58,7 +59,7 @@ class TestMailGroup(TestMail): # Do: Raoul write on Jobs -> ok self.mail_group.write(cr, user_employee_id, [self.group_priv_id], {'name': 'modified'}) # Do: Bert cannot write on Private -> ko (read but no write) - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): self.mail_group.write(cr, user_noone_id, [self.group_priv_id], {'name': 're-modified'}) # Test: Bert cannot unlink the group with self.assertRaises(except_orm): diff --git a/addons/mail/tests/test_mail_message.py b/addons/mail/tests/test_mail_message.py index 5dc5e9e247d..180661a0707 100644 --- a/addons/mail/tests/test_mail_message.py +++ b/addons/mail/tests/test_mail_message.py @@ -20,6 +20,7 @@ ############################################################################## from openerp.addons.mail.tests.common import TestMail +from openerp.exceptions import AccessError from openerp.osv.orm import except_orm from openerp.tools import mute_logger @@ -258,13 +259,13 @@ class TestMailMessage(TestMail): # ---------------------------------------- # Do: Bert creates a message on Pigs -> ko, no creation rights - self.assertRaises(except_orm, self.mail_message.create, + self.assertRaises(AccessError, self.mail_message.create, cr, user_bert_id, {'model': 'mail.group', 'res_id': self.group_pigs_id, 'body': 'Test'}) # Do: Bert create a message on Jobs -> ko, no creation rights - self.assertRaises(except_orm, self.mail_message.create, + self.assertRaises(AccessError, self.mail_message.create, cr, user_bert_id, {'model': 'mail.group', 'res_id': self.group_jobs_id, 'body': 'Test'}) # Do: Bert create a private message -> ko, no creation rights - self.assertRaises(except_orm, self.mail_message.create, + self.assertRaises(AccessError, self.mail_message.create, cr, user_bert_id, {'body': 'Test'}) # Do: Raoul creates a message on Jobs -> ok, write access to the related document @@ -410,15 +411,15 @@ class TestMailMessage(TestMail): for message in bert_jobs.message_ids: trigger_read = message.subject for partner in bert_jobs.message_follower_ids: - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): trigger_read = partner.name # Do: Bert comments Jobs, ko because no creation right - self.assertRaises(except_orm, + self.assertRaises(AccessError, self.mail_group.message_post, cr, user_bert_id, self.group_jobs_id, body='I love Pigs') # Do: Bert writes on its own profile, ko because no message create access - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): self.res_users.message_post(cr, user_bert_id, user_bert_id, body='I love Bert') self.res_partner.message_post(cr, user_bert_id, partner_bert_id, body='I love Bert') diff --git a/addons/mail/update.py b/addons/mail/update.py index bcf9bb8c7c9..94286817648 100644 --- a/addons/mail/update.py +++ b/addons/mail/update.py @@ -94,13 +94,11 @@ class publisher_warranty_contract(osv.osv): # old behavior based on res.log; now on mail.message, that is not necessarily installed IMD = self.pool['ir.model.data'] user = self.pool['res.users'].browse(cr, SUPERUSER_ID, SUPERUSER_ID) - try: - poster = IMD.get_object(cr, SUPERUSER_ID, 'mail', 'group_all_employees') - except ValueError: - # Cannot found group, post the message on the wall of the admin - poster = user + poster = IMD.get_object(cr, SUPERUSER_ID, 'mail', 'group_all_employees', context=context, check_existence_and_raise=False) if not poster.exists(): - return True + if not user.exists(): + return True + poster = user for message in result["messages"]: try: poster.message_post(body=message, subtype='mt_comment', partner_ids=[user.partner_id.id]) diff --git a/addons/mail/wizard/invite.py b/addons/mail/wizard/invite.py index a6bfc34c213..ad012e786ca 100644 --- a/addons/mail/wizard/invite.py +++ b/addons/mail/wizard/invite.py @@ -60,6 +60,10 @@ class invite_wizard(osv.osv_memory): help="If checked, the partners will receive an email warning they have been " "added in the document's followers."), } + + _defaults = { + 'send_mail' : True, + } def add_followers(self, cr, uid, ids, context=None): for wizard in self.browse(cr, uid, ids, context=context): diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index f129e5bf0f9..833811c07a1 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -19,7 +19,9 @@ # ############################################################################## +import base64 import re + from openerp import tools from openerp import SUPERUSER_ID from openerp.osv import osv @@ -260,6 +262,12 @@ class mail_compose_message(osv.TransientModel): for res_id, mail_values in all_mail_values.iteritems(): if mass_mail_mode and not wizard.post: + m2m_attachment_ids = self.pool['mail.thread']._message_preprocess_attachments( + cr, uid, mail_values.pop('attachments', []), + mail_values.pop('attachment_ids', []), + 'mail.message', 0, + context=context) + mail_values['attachment_ids'] = m2m_attachment_ids self.pool.get('mail.mail').create(cr, uid, mail_values, context=context) else: subtype = 'mail.mt_comment' @@ -298,7 +306,12 @@ class mail_compose_message(osv.TransientModel): if mass_mail_mode and wizard.model: email_dict = rendered_values[res_id] mail_values['partner_ids'] += email_dict.pop('partner_ids', []) - mail_values['attachments'] = email_dict.pop('attachments', []) + # process attachments: should not be encoded before being processed by message_post / mail_mail create + attachments = [] + if email_dict.get('attachments'): + for name, enc_cont in email_dict.pop('attachments'): + attachments.append((name, base64.b64decode(enc_cont))) + mail_values['attachments'] = attachments attachment_ids = [] for attach_id in mail_values.pop('attachment_ids'): new_attach_id = self.pool.get('ir.attachment').copy(cr, uid, attach_id, {'res_model': self._name, 'res_id': wizard.id}, context=context) diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py index fdec2fb39e0..e434090ad76 100644 --- a/addons/marketing_campaign/marketing_campaign.py +++ b/addons/marketing_campaign/marketing_campaign.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 OpenERP SA (). +# Copyright (C) 2004-2013 OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -32,6 +32,7 @@ import re from openerp.addons.decimal_precision import decimal_precision as dp from openerp.osv import fields, osv +from openerp.report import render_report from openerp.tools.translate import _ _intervalTypes = { @@ -461,8 +462,7 @@ class marketing_campaign_activity(osv.osv): #dead code def _process_wi_report(self, cr, uid, activity, workitem, context=None): - service = netsvc.LocalService('report.%s'%activity.report_id.report_name) - (report_data, format) = service.create(cr, uid, [], {}, {}) + report_data, format = render_report(cr, uid, [], activity.report_id.report_name, {}, context=context) attach_vals = { 'name': '%s_%s_%s'%(activity.report_id.report_name, activity.name,workitem.partner_id.name), diff --git a/addons/marketing_campaign/marketing_campaign_demo.xml b/addons/marketing_campaign/marketing_campaign_demo.xml index 89a299e3a85..a7b1a8bce0c 100644 --- a/addons/marketing_campaign/marketing_campaign_demo.xml +++ b/addons/marketing_campaign/marketing_campaign_demo.xml @@ -5,7 +5,7 @@ welcome new partner info@openerp.com Welcome to the OpenERP Partner Channel! - ${object.email or ''} + ${(object.email or '')|safe} Hello, you will receive your welcome pack via email shortly. @@ -13,7 +13,7 @@ congrats silver partner info@openerp.com Congratulations! You are now a Silver Partner! - ${object.email or ''} + ${(object.email or '')|safe} Hi, we are delighted to welcome you among our Silver Partners as of today! @@ -22,7 +22,7 @@ congrats gold partner info@openerp.com Congratulations! You are now one of our Gold Partners! - ${object.email or ''} + ${(object.email or '')|safe} Hi, we are delighted to let you know that you have entered the select circle of our Gold Partners diff --git a/addons/marketing_campaign_crm_demo/i18n/zh_CN.po b/addons/marketing_campaign_crm_demo/i18n/zh_CN.po index 79cb70b271f..bd55988976a 100644 --- a/addons/marketing_campaign_crm_demo/i18n/zh_CN.po +++ b/addons/marketing_campaign_crm_demo/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-06-29 16:49+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-11-19 10:16+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:20+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_8 @@ -29,6 +29,11 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

感谢您对注册参加技术培训的兴趣。

\n" +" 如果您需要更多的信息,请重新提交。衷心感谢您的合作。

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:ir.actions.report.xml,name:marketing_campaign_crm_demo.mc_crm_lead_demo_report @@ -50,6 +55,10 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

感谢您对注册参加OpenERP开放日的兴趣。

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: report:crm.lead.demo:0 @@ -72,6 +81,11 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

我们可以提供非常合适您的产品。\n" +" 针对我们的银牌合作伙伴,我们在2010年6月提供技术培训。

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_1 @@ -99,6 +113,11 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

我们可以提供非常合适您的产品。\n" +" 我们建议您注册参加 2010五月举行的OpenERP 开放日

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_5 @@ -111,6 +130,11 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

我们可以提供非常合适您的产品。\n" +" 针对我们的金牌合作伙伴,我们在2010年6月提供技术培训。

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_2 @@ -140,6 +164,10 @@ msgid "" " If any further information required kindly revert back.\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

感谢您对购买OpenERP手册的兴趣。

\n" +" 如果您需要更多的信息,请重新提交。\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:email.template,body_html:marketing_campaign_crm_demo.email_template_7 @@ -151,6 +179,11 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

我们可以提供非常合适您的产品。\n" +" 针对我们的银牌合作伙伴,我们将您升级为金牌合作伙伴。

\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #. module: marketing_campaign_crm_demo #: model:email.template,subject:marketing_campaign_crm_demo.email_template_5 @@ -167,6 +200,10 @@ msgid "" "reply to this message.

\n" "

Regards,OpenERP Team,

" msgstr "" +"

Hello,

\n" +"

感谢您对OpenERP的浓厚兴趣。\n" +"

如果您需要更多的信息,请尽管回复此信息。

\n" +"

安好,OpenERP 团队

" #~ msgid "" #~ "Hello, We have very good offer that might suit you.\n" diff --git a/addons/mass_mailing/mass_mailing_demo.xml b/addons/mass_mailing/mass_mailing_demo.xml index d75351e1166..5a2388846e4 100644 --- a/addons/mass_mailing/mass_mailing_demo.xml +++ b/addons/mass_mailing/mass_mailing_demo.xml @@ -41,49 +41,41 @@ 1111000@OpenERP.com - sent 1111001@OpenERP.com - sent 1111002@OpenERP.com - sent 1111003@OpenERP.com - sent 1111004@OpenERP.com - sent 1111005@OpenERP.com - sent 1111006@OpenERP.com - sent 1111007@OpenERP.com - sent diff --git a/addons/mass_mailing/static/src/css/mass_mailing.css b/addons/mass_mailing/static/src/css/mass_mailing.css index ca5455d6323..e54ce46c025 100644 --- a/addons/mass_mailing/static/src/css/mass_mailing.css +++ b/addons/mass_mailing/static/src/css/mass_mailing.css @@ -1,13 +1,19 @@ .openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_campaign { - width: 540px; + /* Customize to manage content */ + width: 552px; + min-height: 278px !important; + /* End of customize */ } .openerp .oe_kanban_view .oe_kanban_mass_mailing.oe_kanban_mass_mailing_segment { - width: 270px; + /* Customize to manage content */ + width: 282px; + min-height: 246px !important; + /* End of customize */ } .openerp .oe_kanban_view .oe_kanban_mass_mailing .oe_mail_stats { - width: 120px; + width: 122px; /* Manage space in between stats */ display: inline-block; margin: 2px 5px 0px 5px; text-align: center; diff --git a/addons/membership/__openerp__.py b/addons/membership/__openerp__.py index 4a0a80694b3..ba619564ee2 100644 --- a/addons/membership/__openerp__.py +++ b/addons/membership/__openerp__.py @@ -47,7 +47,10 @@ invoice and send propositions for membership renewal. 'report/report_membership_view.xml', 'process/membership_process.xml', ], - 'demo': ['membership_demo.xml'], + 'demo': [ + 'membership_demo.xml', + 'membership_demo.yml' + ], 'test': ['test/test_membership.yml'], 'installable': True, 'auto_install': False, diff --git a/addons/membership/i18n/zh_CN.po b/addons/membership/i18n/zh_CN.po index cb135b8471f..7a544db105d 100644 --- a/addons/membership/i18n/zh_CN.po +++ b/addons/membership/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:05+0000\n" -"PO-Revision-Date: 2012-02-13 08:39+0000\n" -"Last-Translator: 开阖软件 Jeff Wang \n" +"PO-Revision-Date: 2013-11-19 05:29+0000\n" +"Last-Translator: Guipo Hao \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-09-12 05:10+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:24+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: membership #: model:process.transition,name:membership.process_transition_invoicetoassociate0 @@ -103,14 +103,14 @@ msgstr "会员资格结束日期" #: field:product.product,membership_date_to:0 #: field:res.partner,membership_stop:0 msgid "Membership End Date" -msgstr "" +msgstr "会员结束日期" #. module: membership #: view:report.membership:0 #: field:report.membership,user_id:0 #: view:res.partner:0 msgid "Salesperson" -msgstr "" +msgstr "销售员" #. module: membership #: model:process.transition,name:membership.process_transition_waitingtoinvoice0 @@ -137,7 +137,7 @@ msgstr "非会员" #. module: membership #: view:product.product:0 msgid "Taxes" -msgstr "" +msgstr "税金" #. module: membership #: view:res.partner:0 @@ -149,7 +149,7 @@ msgstr "全部会员" #: code:addons/membership/membership.py:413 #, python-format msgid "Error!" -msgstr "" +msgstr "错误!" #. module: membership #: model:process.transition,name:membership.process_transition_producttomember0 @@ -247,7 +247,7 @@ msgstr "入会日期" #. module: membership #: field:res.partner,membership_cancel:0 msgid "Cancel Membership Date" -msgstr "" +msgstr "取消会员日期" #. module: membership #: model:process.node,name:membership.process_node_paidmember0 @@ -325,7 +325,7 @@ msgstr "会员产品" #. module: membership #: field:res.partner,membership_state:0 msgid "Current Membership Status" -msgstr "" +msgstr "当前会员状态" #. module: membership #: field:membership.membership_line,date:0 @@ -387,7 +387,7 @@ msgstr "业务伙伴为免费会员。" #. module: membership #: view:res.partner:0 msgid "Buy Membership" -msgstr "" +msgstr "购买会员" #. module: membership #: field:report.membership,associate_member_id:0 @@ -426,7 +426,7 @@ msgstr "分类" #. module: membership #: view:res.partner:0 msgid "Contacts" -msgstr "" +msgstr "联系人" #. module: membership #: view:report.membership:0 @@ -456,7 +456,7 @@ msgstr "客户加入会员资格的日期" #. module: membership #: field:membership.membership_line,state:0 msgid "Membership Status" -msgstr "" +msgstr "会员状态" #. module: membership #: view:res.partner:0 @@ -466,7 +466,7 @@ msgstr "客户" #. module: membership #: view:membership.invoice:0 msgid "or" -msgstr "" +msgstr "或者" #. module: membership #: selection:report.membership,month:0 @@ -483,7 +483,7 @@ msgstr "会员产品" #. module: membership #: sql_constraint:product.product:0 msgid "Error ! Ending Date cannot be set before Beginning Date." -msgstr "" +msgstr "错误!失效日期不能早于开始日期" #. module: membership #: selection:report.membership,month:0 @@ -493,7 +493,7 @@ msgstr "6月" #. module: membership #: help:product.product,membership:0 msgid "Check if the product is eligible for membership." -msgstr "" +msgstr "检查产品是否适于成员。" #. module: membership #: selection:membership.membership_line,state:0 @@ -557,6 +557,13 @@ msgid "" "created.\n" " -Paying member: A member who has paid the membership fee." msgstr "" +"该指示显示成员状态:\n" +" -非成员:伙伴未申请任何成员。\n" +" -失效成员:已经取消资格的成员。\n" +" -过期成员:成员身份过期的成员。\n" +" -待批准成员:已经申请成员资格并且将生成发票的成员。\n" +" -待付费成员:已经生成付费申请的成员。\n" +" -付费成员:已经付成员费的成员。" #. module: membership #: selection:report.membership,month:0 @@ -624,6 +631,13 @@ msgid "" " -Paid Member: A member who has paid the membership " "amount." msgstr "" +"该指示显示成员状态:\n" +" -非成员:伙伴未申请任何成员。\n" +" -失效成员:已经取消资格的成员。\n" +" -过期成员:成员身份过期的成员。\n" +" -待批准成员:已经申请成员资格并且将生成发票的成员。\n" +" -待付费成员:已经生成付费申请的成员。\n" +" -付费成员:已经付成员费的成员。" #. module: membership #: model:process.transition,note:membership.process_transition_waitingtoinvoice0 @@ -669,7 +683,7 @@ msgstr "会员价格" #. module: membership #: view:product.product:0 msgid "Membership Duration" -msgstr "" +msgstr "成员期间" #. module: membership #: model:ir.model,name:membership.model_product_product @@ -685,17 +699,17 @@ msgstr "5月" #: field:product.product,membership_date_from:0 #: field:res.partner,membership_start:0 msgid "Membership Start Date" -msgstr "" +msgstr "成员开始日期" #. module: membership #: help:res.partner,free_member:0 msgid "Select if you want to give free membership." -msgstr "" +msgstr "提供免费成员资格" #. module: membership #: field:res.partner,membership_amount:0 msgid "Membership Amount" -msgstr "" +msgstr "成员费用" #. module: membership #: field:report.membership,date_to:0 @@ -775,7 +789,7 @@ msgstr "年" #. module: membership #: view:product.product:0 msgid "Accounting" -msgstr "" +msgstr "记账" #. module: membership #: view:report.membership:0 diff --git a/addons/membership/membership_demo.xml b/addons/membership/membership_demo.xml index 852a9dbf2e0..86fb055de22 100644 --- a/addons/membership/membership_demo.xml +++ b/addons/membership/membership_demo.xml @@ -7,7 +7,7 @@ True - Golden Membership + Gold Membership 180 service @@ -42,21 +42,43 @@ + + + + + True + + True + + + True + + + True + - + - + + + + + + + + + diff --git a/addons/membership/membership_demo.yml b/addons/membership/membership_demo.yml new file mode 100644 index 00000000000..e21d70f0fd5 --- /dev/null +++ b/addons/membership/membership_demo.yml @@ -0,0 +1,15 @@ +- + create invoice and state is 'open' and pay some invoice +- + !python {model: res.partner}: | + invoice_ids = self.create_membership_invoice(cr, uid, [ref("base.res_partner_1"),ref("base.res_partner_14"),ref("base.res_partner_24"),ref("base.res_partner_19"),ref("base.res_partner_8"),ref("base.res_partner_5"),ref("base.res_partner_21"),ref("base.res_partner_6"),ref("base.res_partner_16"),ref("base.res_partner_10")], product_id=ref("membership_1"), datas={"amount":80.00}) + invoice_pool = self.pool.get('account.invoice') + invoice_pool.signal_invoice_open(cr, uid, invoice_ids) + + for id in invoice_ids[-4:]: + pay = invoice_pool.pay_and_reconcile(cr, uid, [id], + 9050.0, ref('account.cash'), ref('account.period_10'), + ref('account.bank_journal'), ref('account.cash'), + ref('account.period_10'), ref('account.bank_journal'), + name='Payment for test customer invoice') + assert (pay == True), "Incorrect Payment" diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index 1d0a0c98d48..4ef2a6a4f4c 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -965,7 +965,10 @@ class mrp_production(osv.osv): partner_id = routing_loc.partner_id and routing_loc.partner_id.id or False # Take next Sequence number of shipment base on type - pick_name = ir_sequence.get(cr, uid, 'stock.picking.' + pick_type) + if pick_type!='internal': + pick_name = ir_sequence.get(cr, uid, 'stock.picking.' + pick_type) + else: + pick_name = ir_sequence.get(cr, uid, 'stock.picking') picking_id = stock_picking.create(cr, uid, { 'name': pick_name, diff --git a/addons/mrp/report/custom_default.xsl b/addons/mrp/report/custom_default.xsl index d98cd940942..e5503500a86 100644 --- a/addons/mrp/report/custom_default.xsl +++ b/addons/mrp/report/custom_default.xsl @@ -15,9 +15,9 @@ - + - + 1.3cm 28.1cm 20cm 28.1cm @@ -29,9 +29,9 @@ - + - + 1.3cm 28.1cm 20cm 28.1cm diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py index 5afd6b3ee49..d5a3c32646c 100644 --- a/addons/mrp/report/price.py +++ b/addons/mrp/report/price.py @@ -34,7 +34,6 @@ class report_custom(report_rml): registry = openerp.registry(cr.dbname) product_pool = registry.get('product.product') product_uom_pool = registry.get('product.uom') - supplier_info_pool = registry.get('product.supplierinfo') workcenter_pool = registry.get('mrp.workcenter') user_pool = registry.get('res.users') bom_pool = registry.get('mrp.bom') diff --git a/addons/mrp_byproduct/mrp_byproduct.py b/addons/mrp_byproduct/mrp_byproduct.py index 2425c2d8fea..38058abf071 100644 --- a/addons/mrp_byproduct/mrp_byproduct.py +++ b/addons/mrp_byproduct/mrp_byproduct.py @@ -80,11 +80,11 @@ class mrp_production(osv.osv): _inherit= 'mrp.production' - def action_confirm(self, cr, uid, ids): + def action_confirm(self, cr, uid, ids, context=None): """ Confirms production order and calculates quantity based on subproduct_type. @return: Newly generated picking Id. """ - picking_id = super(mrp_production,self).action_confirm(cr, uid, ids) + picking_id = super(mrp_production,self).action_confirm(cr, uid, ids, context=context) product_uom_obj = self.pool.get('product.uom') for production in self.browse(cr, uid, ids): source = production.product_id.property_stock_production.id diff --git a/addons/mrp_operations/i18n/hu.po b/addons/mrp_operations/i18n/hu.po index 2f4740806f3..10be9fe79b5 100644 --- a/addons/mrp_operations/i18n/hu.po +++ b/addons/mrp_operations/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:05+0000\n" -"PO-Revision-Date: 2013-01-25 15:52+0000\n" +"PO-Revision-Date: 2013-11-24 14:42+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 05:57+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-25 05:32+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: mrp_operations #: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form @@ -386,7 +386,7 @@ msgstr "Kezdő dátum" #. module: mrp_operations #: selection:mrp.production.workcenter.line,production_state:0 msgid "Waiting Goods" -msgstr "Várakozás az árura" +msgstr "Várakozás árura" #. module: mrp_operations #: field:mrp.production.workcenter.line,production_state:0 diff --git a/addons/mrp_operations/test/workcenter_operations.yml b/addons/mrp_operations/test/workcenter_operations.yml index 8230f7d4468..702310dab46 100644 --- a/addons/mrp_operations/test/workcenter_operations.yml +++ b/addons/mrp_operations/test/workcenter_operations.yml @@ -110,8 +110,16 @@ I print a Barcode Report of Operation line. - !python {model: mrp_operations.operation.code}: | - from openerp import netsvc, tools - (data, format) = netsvc.LocalService('report.mrp.code.barcode').create(cr, uid, [ref('mrp_operations.mrp_op_1'),ref('mrp_operations.mrp_op_2'),ref('mrp_operations.mrp_op_3'),ref('mrp_operations.mrp_op_4'),ref('mrp_operations.mrp_op_5')], {}, {}) + from openerp import tools + from openerp.report import render_report + ids = [ + ref('mrp_operations.mrp_op_1'), + ref('mrp_operations.mrp_op_2'), + ref('mrp_operations.mrp_op_3'), + ref('mrp_operations.mrp_op_4'), + ref('mrp_operations.mrp_op_5') + ] + data, format = render_report(cr, uid, ids, 'mrp.code.barcode', {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-barcode_report.'+format), 'wb+').write(data) @@ -119,7 +127,9 @@ I print Workcenter's Barcode Report. - !python {model: mrp.workcenter}: | - from openerp import netsvc, tools - (data, format) = netsvc.LocalService('report.mrp.wc.barcode').create(cr, uid, [ref('mrp.mrp_workcenter_0'),ref('mrp.mrp_workcenter_1')], {}, {}) + from openerp import tools + from openerp.report import render_report + ids = [ref('mrp.mrp_workcenter_0'), ref('mrp.mrp_workcenter_1')] + data, format = render_report(cr, uid, ids, 'mrp.wc.barcode', {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'mrp_operations-workcenter_barcode_report.'+format), 'wb+').write(data) diff --git a/addons/mrp_repair/i18n/zh_CN.po b/addons/mrp_repair/i18n/zh_CN.po index 87620c835eb..a9696bd6e54 100644 --- a/addons/mrp_repair/i18n/zh_CN.po +++ b/addons/mrp_repair/i18n/zh_CN.po @@ -7,19 +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:05+0000\n" -"PO-Revision-Date: 2012-10-25 16:34+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 04:59+0000\n" +"Last-Translator: Guipo Hao \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-09-12 06:05+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: mrp_repair #: field:mrp.repair.line,move_id:0 msgid "Inventory Move" -msgstr "库存调拨" +msgstr "存货调拨" #. module: mrp_repair #: view:mrp.repair:0 @@ -29,7 +29,7 @@ msgstr "分组..." #. module: mrp_repair #: view:mrp.repair:0 msgid "Recreate Invoice" -msgstr "再创建发票" +msgstr "重新生成发票" #. module: mrp_repair #: code:addons/mrp_repair/mrp_repair.py:371 @@ -41,18 +41,18 @@ msgstr "必须在维修单上输入业务伙伴的发票地址" #: model:ir.actions.act_window,name:mrp_repair.action_cancel_repair #: view:mrp.repair.cancel:0 msgid "Cancel Repair Order" -msgstr "作废维修单" +msgstr "取消维修单" #. module: mrp_repair #: field:mrp.repair.fee,to_invoice:0 #: field:mrp.repair.line,to_invoice:0 msgid "To Invoice" -msgstr "开票" +msgstr "开发票" #. module: mrp_repair #: view:mrp.repair:0 msgid "Unit of Measure" -msgstr "" +msgstr "计量单位" #. module: mrp_repair #: report:repair.order:0 @@ -67,7 +67,7 @@ msgstr "业务伙伴发票地址组" #. module: mrp_repair #: field:mrp.repair,message_unread:0 msgid "Unread Messages" -msgstr "" +msgstr "未读消息" #. module: mrp_repair #: code:addons/mrp_repair/mrp_repair.py:435 @@ -94,7 +94,7 @@ msgstr "发票异常" #. module: mrp_repair #: view:mrp.repair:0 msgid "Serial Number" -msgstr "" +msgstr "序列号:" #. module: mrp_repair #: field:mrp.repair,address_id:0 @@ -120,7 +120,7 @@ msgstr "发票地址:" #. module: mrp_repair #: help:mrp.repair,partner_id:0 msgid "Choose partner for whom the order will be invoiced and delivered." -msgstr "" +msgstr "为将要开票或者发运的订单选择业务伙伴" #. module: mrp_repair #: view:mrp.repair:0 @@ -135,7 +135,7 @@ msgstr "备注" #. module: mrp_repair #: field:mrp.repair,message_ids:0 msgid "Messages" -msgstr "" +msgstr "信息" #. module: mrp_repair #: field:mrp.repair,amount_tax:0 @@ -150,7 +150,7 @@ msgstr "税" #: code:addons/mrp_repair/mrp_repair.py:442 #, python-format msgid "Error!" -msgstr "" +msgstr "错误!" #. module: mrp_repair #: report:repair.order:0 @@ -161,12 +161,12 @@ msgstr "净合计:" #: selection:mrp.repair,state:0 #: selection:mrp.repair.line,state:0 msgid "Cancelled" -msgstr "" +msgstr "取消" #. module: mrp_repair #: help:mrp.repair,message_unread:0 msgid "If checked new messages require your attention." -msgstr "" +msgstr "如果要求你关注新消息,勾选此项" #. module: mrp_repair #: view:mrp.repair:0 @@ -193,6 +193,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 创建维修单 \n" +"

\n" +" 在维修单中,你能详细描述零部件的移除, 替换并且记录在不同操作上面花费的时间。\n" +"

\n" +" " #. module: mrp_repair #: help:mrp.repair.line,state:0 @@ -205,6 +211,10 @@ msgid "" " \n" "* The 'Cancelled' status is set automatically when user cancel repair order." msgstr "" +" * 草拟维修单时,维修单自动设为“草稿”状态。 \n" +"* 确认维修单时,维修单自动设为“确认”状态。 \n" +"* 维修单完成时,维修单自动设为“完成”状态。 \n" +"* 维修单取消时,维修单自动设为“取消”状态。" #. module: mrp_repair #: field:mrp.repair,move_id:0 @@ -232,7 +242,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 "" +msgstr "保持沟通者汇总(信息数量等...)。为了能在Kanban中浏览,该汇总直接保存为Html格式。" #. module: mrp_repair #: view:mrp.repair:0 @@ -251,7 +261,7 @@ msgstr "警告!" #. module: mrp_repair #: view:mrp.repair:0 msgid "(update)" -msgstr "" +msgstr "(更新)" #. module: mrp_repair #: view:mrp.repair:0 @@ -286,6 +296,12 @@ msgid "" "* The 'Done' status is set when repairing is completed. \n" "* The 'Cancelled' status is used when user cancel repair order." msgstr "" +" * 用户创建或未确认维修单时,设为“草稿”状态。 \n" +"* 用户确认维修单时,设为“确认”状态。 \n" +"* 用户开始维修单时,设为“准备维修”状态。用户只能在确认维修单后开始维修。 \n" +"* 维修完成前或完成后,“待发票”状态由来生成发票。 \n" +"* 维修单完成时,设为“完成”状态。 \n" +"* 维修单取消时,设为“取消”状态。" #. module: mrp_repair #: view:mrp.repair:0 @@ -296,7 +312,7 @@ msgstr "修理单" #: code:addons/mrp_repair/mrp_repair.py:336 #, python-format msgid "Serial number is required for operation line with product '%s'" -msgstr "" +msgstr "带产品'%s'的操作行需要序列号" #. module: mrp_repair #: report:repair.order:0 @@ -313,7 +329,7 @@ msgstr "批号" #. module: mrp_repair #: field:mrp.repair,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "关注者" #. module: mrp_repair #: field:mrp.repair,fees_lines:0 @@ -426,7 +442,7 @@ msgstr "是" #: view:mrp.repair.cancel:0 #: view:mrp.repair.make_invoice:0 msgid "or" -msgstr "" +msgstr "或者" #. module: mrp_repair #: view:mrp.repair:0 @@ -440,7 +456,7 @@ msgstr "已开票" #: field:mrp.repair.fee,product_uom:0 #: field:mrp.repair.line,product_uom:0 msgid "Product Unit of Measure" -msgstr "" +msgstr "产品计量单位" #. module: mrp_repair #: view:mrp.repair.make_invoice:0 @@ -450,7 +466,7 @@ msgstr "创建发票" #. module: mrp_repair #: report:repair.order:0 msgid "(Remove)" -msgstr "(拆除)" +msgstr "(移除)" #. module: mrp_repair #: selection:mrp.repair.line,type:0 @@ -465,7 +481,7 @@ msgstr "草稿" #. module: mrp_repair #: field:mrp.repair,name:0 msgid "Repair Reference" -msgstr "维修单编号" +msgstr "维修索引" #. module: mrp_repair #: model:ir.model,name:mrp_repair.model_mrp_repair @@ -494,17 +510,17 @@ msgid "" "Selecting 'Before Repair' or 'After Repair' will allow you to generate " "invoice before or after the repair is done respectively. 'No invoice' means " "you don't want to generate invoice for this repair order." -msgstr "" +msgstr "选择“维修前”或“维修后”选项来确定在维修前后生产发票。“无发票”则代表此维修单无需生成发票。" #. module: mrp_repair #: field:mrp.repair,guarantee_limit:0 msgid "Warranty Expiration" -msgstr "" +msgstr "保修期已过" #. module: mrp_repair #: help:mrp.repair,pricelist_id:0 msgid "Pricelist of the selected partner." -msgstr "" +msgstr "所选伙伴的价格列表" #. module: mrp_repair #: report:repair.order:0 @@ -531,12 +547,12 @@ msgstr "修理后" #: code:addons/mrp_repair/wizard/cancel_repair.py:41 #, python-format msgid "Active ID not Found" -msgstr "" +msgstr "未发现有效 ID" #. module: mrp_repair #: field:mrp.repair,message_is_follower:0 msgid "Is a Follower" -msgstr "" +msgstr "是一个关注者" #. module: mrp_repair #: view:mrp.repair:0 @@ -566,7 +582,7 @@ msgstr "修理报价单" #. module: mrp_repair #: field:mrp.repair,message_summary:0 msgid "Summary" -msgstr "" +msgstr "汇总" #. module: mrp_repair #: view:mrp.repair:0 @@ -596,7 +612,7 @@ msgstr "数量" #. module: mrp_repair #: view:mrp.repair:0 msgid "Product Information" -msgstr "" +msgstr "产品信息" #. module: mrp_repair #: model:ir.actions.act_window,name:mrp_repair.act_mrp_repair_invoice @@ -659,7 +675,7 @@ msgid "" "Check this box if you want to manage the delivery once the product is " "repaired and create a picking with selected product. Note that you can " "select the locations in the Info tab, if you have the extended view." -msgstr "" +msgstr "此选项意味着在产品维修完成后生成发货单。请在扩展视图下的信息栏选择库位。" #. module: mrp_repair #: help:mrp.repair,guarantee_limit:0 @@ -669,6 +685,7 @@ msgid "" "expiration limit, each operation and fee you will add will be set as 'not to " "invoiced' by default. Note that you can change manually afterwards." msgstr "" +"保修期限计算方法:上次移库时间 + 该产品保修期。若当前日期早于保修期限,所有维修操作及费用将被默认设定为“不开票”。注意该条款日后可以手工调整。" #. module: mrp_repair #: view:mrp.repair.make_invoice:0 @@ -678,7 +695,7 @@ msgstr "创建发票" #. module: mrp_repair #: view:mrp.repair:0 msgid "Reair Orders" -msgstr "" +msgstr "维修单" #. module: mrp_repair #: field:mrp.repair.fee,name:0 @@ -712,7 +729,7 @@ msgstr "价格" #. module: mrp_repair #: field:mrp.repair,deliver_bool:0 msgid "Deliver" -msgstr "送货" +msgstr "发货" #. module: mrp_repair #: field:mrp.repair,internal_notes:0 @@ -733,7 +750,7 @@ msgstr "你真的要生成发票吗 ?" #: code:addons/mrp_repair/mrp_repair.py:349 #, python-format msgid "Repair order is already invoiced." -msgstr "" +msgstr "维修单已开票。" #. module: mrp_repair #: field:mrp.repair,picking_id:0 @@ -775,12 +792,12 @@ msgstr "发票地址" #. module: mrp_repair #: help:mrp.repair,message_ids:0 msgid "Messages and communication history" -msgstr "" +msgstr "消息和通信历史记录" #. module: mrp_repair #: view:mrp.repair:0 msgid "Invoicing" -msgstr "发票" +msgstr "开发票" #. module: mrp_repair #: field:mrp.repair.line,location_id:0 @@ -796,7 +813,7 @@ msgstr "取消修理" #. module: mrp_repair #: selection:mrp.repair,invoice_method:0 msgid "No Invoice" -msgstr "没发票" +msgstr "不开票" #. module: mrp_repair #: field:mrp.repair,amount_total:0 diff --git a/addons/multi_company/multi_company_demo.xml b/addons/multi_company/multi_company_demo.xml index c772a8fd67d..0c7b200a867 100644 --- a/addons/multi_company/multi_company_demo.xml +++ b/addons/multi_company/multi_company_demo.xml @@ -4,18 +4,49 @@ OpenERP Editor + Plot No 61- Sector 8 + Faridabad (Delhi- NCR) + 121006 + + openerp.editor@yourcompany.example.com + OpenERP US + 2035 N. Evergreen Terrace + Arlington Heights + + openerp.us@yourcompany.example.com + OpenERP IN + Top Floor, Mehta Mahal,15 + Matthew Road, Opera House + Mumbai 27 + 400004 + + openerp.in@yourcompany.example.com + OpenERP BE + Avenue de l'Artisanat 2 + Braine-l'Alleud + 1420 + + openerp.be@yourcompany.example.com + Odoo + RM#25-502, 126, Yijiang Road + Pudong + Shanghai + 201 + + odoo@yourcompany.example.com + diff --git a/addons/note/note.py b/addons/note/note.py index 95fe8f97cdf..00c67c37191 100644 --- a/addons/note/note.py +++ b/addons/note/note.py @@ -147,6 +147,7 @@ class note_note(osv.osv): if result and result[0]['stage_id'][0] == current_stage_ids[0]: dom_in = result[0]['__domain'].pop() result[0]['__domain'] = domain + ['|', dom_in, dom_not_in] + result[0]['stage_id_count'] += nb_notes_ws else: # add the first stage column result = [{ diff --git a/addons/note_pad/i18n/ar.po b/addons/note_pad/i18n/ar.po new file mode 100644 index 00000000000..6d68cd68304 --- /dev/null +++ b/addons/note_pad/i18n/ar.po @@ -0,0 +1,28 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-11-26 19:11+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-27 04:37+0000\n" +"X-Generator: Launchpad (build 16845)\n" + +#. module: note_pad +#: model:ir.model,name:note_pad.model_note_note +msgid "Note" +msgstr "ملاحظة" + +#. module: note_pad +#: field:note.note,note_pad_url:0 +msgid "Pad Url" +msgstr "" diff --git a/addons/pad/pad.py b/addons/pad/pad.py index 4cd9e91b76e..474321edb1d 100644 --- a/addons/pad/pad.py +++ b/addons/pad/pad.py @@ -39,7 +39,11 @@ class pad_common(osv.osv_memory): #if create with content if "field_name" in context and "model" in context and "object_id" in context: myPad = EtherpadLiteClient( pad["key"], pad["server"]+'/api') - myPad.createPad(path) + try: + myPad.createPad(path) + except urllib2.URLError: + raise osv.except_osv(_("Error"), _("Pad creation failed, \ + either there is a problem with your pad server URL or with your connection.")) #get attr on the field model model = self.pool[context["model"]] diff --git a/addons/pad/pad_demo.xml b/addons/pad/pad_demo.xml index 99c4b38481c..5fd76f65e21 100644 --- a/addons/pad/pad_demo.xml +++ b/addons/pad/pad_demo.xml @@ -2,7 +2,7 @@ - pad.openerp.com + https://pad.openerp.com diff --git a/addons/pad/static/src/css/etherpad.css b/addons/pad/static/src/css/etherpad.css index a0002ebe97c..facf15b28de 100644 --- a/addons/pad/static/src/css/etherpad.css +++ b/addons/pad/static/src/css/etherpad.css @@ -92,6 +92,7 @@ font-family: arial, sans-serif; font-size: 15px; line-height: 19px; + word-wrap: break-word; } .openerp .oe_form_nomargin .etherpad_readonly{ diff --git a/addons/event_moodle/__init__.py b/addons/payment_acquirer/__init__.py similarity index 86% rename from addons/event_moodle/__init__.py rename to addons/payment_acquirer/__init__.py index 2814f9d514b..d95d47860af 100644 --- a/addons/event_moodle/__init__.py +++ b/addons/payment_acquirer/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). +# Copyright (C) 2013-Today OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,7 +19,4 @@ # ############################################################################## -import event_moodle - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - +import models diff --git a/addons/payment_acquirer/__openerp__.py b/addons/payment_acquirer/__openerp__.py new file mode 100644 index 00000000000..4102c4fe276 --- /dev/null +++ b/addons/payment_acquirer/__openerp__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer Base Module', + 'version': '1.0', + 'description': """Payment Acquirer Base Module""", + 'author': 'OpenERP SA', + 'depends': ['mail'], + 'data': [ + 'views/payment_acquirer.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/addons/payment_acquirer/doc/changelog.rst b/addons/payment_acquirer/doc/changelog.rst new file mode 100644 index 00000000000..d0c24af384d --- /dev/null +++ b/addons/payment_acquirer/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-3)` +---------------- + +- Module creation \ No newline at end of file diff --git a/addons/payment_acquirer/doc/index.rst b/addons/payment_acquirer/doc/index.rst new file mode 100644 index 00000000000..85028ed0d3e --- /dev/null +++ b/addons/payment_acquirer/doc/index.rst @@ -0,0 +1,14 @@ +Payment module documentation +============================ + +Payment documentation topics +'''''''''''''''''''''''''''' + + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/payment_acquirer/models/__init__.py b/addons/payment_acquirer/models/__init__.py new file mode 100644 index 00000000000..da51c9c1854 --- /dev/null +++ b/addons/payment_acquirer/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import payment_acquirer diff --git a/addons/payment_acquirer/models/payment_acquirer.py b/addons/payment_acquirer/models/payment_acquirer.py new file mode 100644 index 00000000000..3bf18b64be0 --- /dev/null +++ b/addons/payment_acquirer/models/payment_acquirer.py @@ -0,0 +1,470 @@ +# -*- coding: utf-'8' "-*-" + +import logging + +from openerp.osv import osv, fields +from openerp.tools import float_round + +_logger = logging.getLogger(__name__) + + +def _partner_format_address(address1=False, address2=False): + return ' '.join((address1 or '', address2 or '')).strip() + + +def _partner_split_name(partner_name): + return [' '.join(partner_name.split()[-1:]), ' '.join(partner_name.split()[:-1])] + + +class ValidationError(ValueError): + """ Used for value error when validating transaction data coming from acquirers. """ + pass + + +class PaymentAcquirer(osv.Model): + """ Acquirer Model. Each specific acquirer can extend the model by adding + its own fields, using the acquirer_name as a prefix for the new fields. + Using the required_if_provider='' attribute on fields it is possible + to have required fields that depend on a specific acquirer. + + Each acquirer has a link to an ir.ui.view record that is a template of + a button used to display the payment form. See examples in ``payment_acquirer_ogone`` + and ``payment_acquirer_paypal`` modules. + + Methods that should be added in an acquirer-specific implementation: + + - ``_form_generate_values(self, cr, uid, id, reference, amount, currency, + partner_id=False, partner_values=None, tx_custom_values=None, context=None)``: + method that generates the values used to render the form button template. + - ``_get_form_action_url(self, cr, uid, id, context=None):``: method + that returns the url of the button form. It is used for example in + ecommerce application, if you want to post some data to the acquirer. + - ``_compute_fees(self, cr, uid, id, amount, currency_id, country_id, + context=None)``: computed the fees of the acquirer, using generic fields + defined on the acquirer model (see fields definition). + + Each acquirer should also define controllers to handle communication between + OpenERP and the acquirer. It generally consists in return urls given to the + button form and that the acquirer uses to send the customer back after the + transaction, with transaction details given as a POST request. + """ + _name = 'payment.acquirer' + _description = 'Payment Acquirer' + + _columns = { + 'name': fields.char('Name', required=True), + 'company_id': fields.many2one('res.company', 'Company', required=True), + 'message': fields.html('Message', help='Message displayed to help payment and validation'), + 'view_template_id': fields.many2one('ir.ui.view', 'Form Button Template', required=True), + 'env': fields.selection( + [('test', 'Test'), ('prod', 'Production')], + string='Environment'), + 'portal_published': fields.boolean( + 'Visible in Portal', + help="Make this payment acquirer available (Customer invoices, etc.)"), + # Fees + 'fees_active': fields.boolean('Compute fees'), + 'fees_dom_fixed': fields.float('Fixed domestic fees'), + 'fees_dom_var': fields.float('Variable domestic fees (in percents)'), + 'fees_int_fixed': fields.float('Fixed international fees'), + 'fees_int_var': fields.float('Variable international fees (in percents)'), + } + + _defaults = { + 'company_id': lambda self, cr, uid, obj, ctx=None: self.pool['res.users'].browse(cr, uid, uid).company_id.id, + 'env': 'test', + 'portal_published': True, + } + + def _check_required_if_provider(self, cr, uid, ids, context=None): + """ If the field has 'required_if_provider=""' attribute, then it + required if record.name is . """ + for acquirer in self.browse(cr, uid, ids, context=context): + if any(c for c, f in self._all_columns.items() if getattr(f.column, 'required_if_provider', None) == acquirer.name and not acquirer[c]): + return False + return True + + _constraints = [ + (_check_required_if_provider, 'Required fields not filled', ['required for this provider']), + ] + + def get_form_action_url(self, cr, uid, id, context=None): + """ Returns the form action URL, for form-based acquirer implementations. """ + acquirer = self.browse(cr, uid, id, context=context) + if hasattr(self, '%s_get_form_action_url' % acquirer.name): + return getattr(self, '%s_get_form_action_url' % acquirer.name)(cr, uid, id, context=context) + return False + + def form_preprocess_values(self, cr, uid, id, reference, amount, currency_id, tx_id, partner_id, partner_values, tx_values, context=None): + """ Pre process values before giving them to the acquirer-specific render + methods. Those methods will receive: + + - partner_values: will contain name, lang, email, zip, address, city, + country_id (int or False), country (browse or False), phone, reference + - tx_values: will contain refernece, amount, currency_id (int or False), + currency (browse or False), partner (browse or False) + """ + acquirer = self.browse(cr, uid, id, context=context) + + if tx_id: + tx = self.pool.get('payment.transaction').browse(cr, uid, tx_id, context=context) + tx_data = { + 'reference': tx.reference, + 'amount': tx.amount, + 'currency_id': tx.currency_id.id, + 'currency': tx.currency_id, + 'partner': tx.partner_id, + } + partner_data = { + 'name': tx.partner_name, + 'lang': tx.partner_lang, + 'email': tx.partner_email, + 'zip': tx.partner_zip, + 'address': tx.partner_address, + 'city': tx.partner_city, + 'country_id': tx.partner_country_id.id, + 'country': tx.partner_country_id, + 'phone': tx.partner_phone, + 'reference': tx.partner_reference, + } + else: + if partner_id: + partner = self.pool['res.partner'].browse(cr, uid, partner_id, context=context) + partner_data = { + 'name': partner.name, + 'lang': partner.lang, + 'email': partner.email, + 'zip': partner.zip, + 'city': partner.city, + 'address': _partner_format_address(partner.street, partner.street2), + 'country_id': partner.country_id.id, + 'country': partner.country_id, + 'phone': partner.phone, + } + else: + partner, partner_data = False, {} + partner_data.update(partner_values) + + if currency_id: + currency = self.pool['res.currency'].browse(cr, uid, currency_id, context=context) + else: + currency = self.pool['res.users'].browse(cr, uid, uid, context=context).company_id.currency_id + tx_data = { + 'reference': reference, + 'amount': amount, + 'currency_id': currency.id, + 'currency': currency, + 'partner': partner, + } + + # update tx values + tx_data.update(tx_values) + + # update partner values + if not partner_data.get('address'): + partner_data['address'] = _partner_format_address(partner_data.get('street', ''), partner_data.get('street2', '')) + if not partner_data.get('country') and partner_data.get('country_id'): + partner_data['country'] = self.pool['res.country'].browse(cr, uid, partner_data.get('country_id'), context=context) + partner_data.update({ + 'first_name': _partner_split_name(partner_data['name'])[0], + 'last_name': _partner_split_name(partner_data['name'])[1], + }) + + # compute fees + fees_method_name = '%s_compute_fees' % acquirer.name + if hasattr(self, fees_method_name): + fees = getattr(self, fees_method_name)( + cr, uid, id, tx_data['amount'], tx_data['currency_id'], partner_data['country_id'], context=None) + tx_data['fees'] = float_round(fees, 2) + + return (partner_data, tx_data) + + def render(self, cr, uid, id, reference, amount, currency_id, tx_id=None, partner_id=False, partner_values=None, tx_values=None, context=None): + """ Renders the form template of the given acquirer as a qWeb template. + All templates will receive: + + - acquirer: the payment.acquirer browse record + - user: the current user browse record + - currency: currency browse record + - amount: amount of the transaction + - reference: reference of the transaction + - partner: the current partner browse record, if any (not necessarily set) + - partner_values: a dictionary of partner-related values + - tx_values: a dictionary of transaction related values that depends on + the acquirer. Some specific keys should be managed in each + provider, depending on the features it offers: + + - 'feedback_url': feedback URL, controler that manage answer of the acquirer + (without base url) -> FIXME + - 'return_url': URL for coming back after payment validation (wihout + base url) -> FIXME + - 'cancel_url': URL if the client cancels the payment -> FIXME + - 'error_url': URL if there is an issue with the payment -> FIXME + + - context: OpenERP context dictionary + + :param string reference: the transaction reference + :param float amount: the amount the buyer has to pay + :param res.currency browse record currency: currency + :param int tx_id: id of a transaction; if set, bypasses all other given + values and only render the already-stored transaction + :param res.partner browse record partner_id: the buyer + :param dict partner_values: a dictionary of values for the buyer (see above) + :param dict tx_custom_values: a dictionary of values for the transction + that is given to the acquirer-specific method + generating the form values + :param dict context: OpenERP context + """ + if context is None: + context = {} + if tx_values is None: + tx_values = {} + if partner_values is None: + partner_values = {} + acquirer = self.browse(cr, uid, id, context=context) + + # pre-process values + amount = float_round(amount, 2) + partner_values, tx_values = self.form_preprocess_values( + cr, uid, id, reference, amount, currency_id, tx_id, partner_id, + partner_values, tx_values, context=context) + + # call _form_generate_values to update the tx dict with acqurier specific values + cust_method_name = '%s_form_generate_values' % (acquirer.name) + if hasattr(self, cust_method_name): + method = getattr(self, cust_method_name) + partner_values, tx_values = method(cr, uid, id, partner_values, tx_values, context=context) + + qweb_context = { + 'tx_url': context.get('tx_url', self.get_form_action_url(cr, uid, id, context=context)), + 'submit_class': context.get('submit_class', 'btn btn-link'), + 'submit_txt': context.get('submit_txt'), + 'acquirer': acquirer, + 'user': self.pool.get("res.users").browse(cr, uid, uid, context=context), + 'reference': tx_values['reference'], + 'amount': tx_values['amount'], + 'currency': tx_values['currency'], + 'partner': tx_values.get('partner'), + 'partner_values': partner_values, + 'tx_values': tx_values, + 'context': context, + } + + # because render accepts view ids but not qweb -> need to use the xml_id + return self.pool['ir.ui.view'].render(cr, uid, acquirer.view_template_id.xml_id, qweb_context, engine='ir.qweb', context=context) + + +class PaymentTransaction(osv.Model): + """ Transaction Model. Each specific acquirer can extend the model by adding + its own fields. + + Methods that can be added in an acquirer-specific implementation: + + - ``_create``: method receiving values used when creating a new + transaction and that returns a dictionary that will update those values. + This method can be used to tweak some transaction values. + + Methods defined for convention, depending on your controllers: + + - ``_form_feedback(self, cr, uid, data, context=None)``: method that + handles the data coming from the acquirer after the transaction. It will + generally receives data posted by the acquirer after the transaction. + """ + _name = 'payment.transaction' + _description = 'Payment Transaction' + _inherit = ['mail.thread'] + _order = 'id desc' + _rec_name = 'reference' + + _columns = { + 'date_create': fields.datetime('Creation Date', readonly=True, required=True), + 'date_validate': fields.datetime('Validation Date'), + 'acquirer_id': fields.many2one( + 'payment.acquirer', 'Acquirer', + required=True, + ), + 'type': fields.selection( + [('server2server', 'Server To Server'), ('form', 'Form')], + string='Type', required=True), + 'state': fields.selection( + [('draft', 'Draft'), ('pending', 'Pending'), + ('done', 'Done'), ('error', 'Error'), + ('cancel', 'Canceled') + ], 'Status', required=True, + track_visiblity='onchange'), + 'state_message': fields.text('Message', + help='Field used to store error and/or validation messages for information'), + # payment + 'amount': fields.float('Amount', required=True, + digits=(16, 2), + track_visibility='always', + help='Amount in cents'), + 'fees': fields.float('Fees', + digits=(16, 2), + track_visibility='always', + help='Fees amount; set by the system because depends on the acquirer'), + 'currency_id': fields.many2one('res.currency', 'Currency', required=True), + 'reference': fields.char('Order Reference', required=True), + 'acquirer_reference': fields.char('Acquirer Order Reference', + help='Reference of the TX as stored in the acquirer database'), + # duplicate partner / transaction data to store the values at transaction time + 'partner_id': fields.many2one('res.partner', 'Partner', track_visibility='onchange',), + 'partner_name': fields.char('Partner Name'), + 'partner_lang': fields.char('Lang'), + 'partner_email': fields.char('Email'), + 'partner_zip': fields.char('Zip'), + 'partner_address': fields.char('Address'), + 'partner_city': fields.char('City'), + 'partner_country_id': fields.many2one('res.country', 'Country', required=True), + 'partner_phone': fields.char('Phone'), + 'partner_reference': fields.char('Partner Reference', + help='Reference of the customer in the acquirer database'), + } + + _sql_constraints = [ + ('reference_uniq', 'UNIQUE(reference)', 'The payment transaction reference must be unique!'), + ] + + _defaults = { + 'date_create': fields.datetime.now, + 'type': 'form', + 'state': 'draft', + 'partner_lang': 'en_US', + } + + def create(self, cr, uid, values, context=None): + Acquirer = self.pool['payment.acquirer'] + + if values.get('partner_id'): # @TDENOTE: not sure + values.update(self.on_change_partner_id(cr, uid, None, values.get('partner_id'), context=context)['values']) + + # call custom create method if defined (i.e. ogone_create for ogone) + if values.get('acquirer_id'): + acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context) + + # compute fees + custom_method_name = '%s_compute_fees' % acquirer.name + if hasattr(Acquirer, custom_method_name): + fees = getattr(Acquirer, custom_method_name)( + cr, uid, acquirer.id, values.get('amount', 0.0), values.get('currency_id'), values.get('country_id'), context=None) + values['fees'] = float_round(fees, 2) + + # custom create + custom_method_name = '%s_create' % acquirer.name + if hasattr(self, custom_method_name): + values.update(getattr(self, custom_method_name)(cr, uid, values, context=context)) + + return super(PaymentTransaction, self).create(cr, uid, values, context=context) + + def on_change_partner_id(self, cr, uid, ids, partner_id, context=None): + partner = None + if partner_id: + partner = self.pool['res.partner'].browse(cr, uid, partner_id, context=context) + return {'values': { + 'partner_name': partner and partner.name or False, + 'partner_lang': partner and partner.lang or 'en_US', + 'partner_email': partner and partner.email or False, + 'partner_zip': partner and partner.zip or False, + 'partner_address': _partner_format_address(partner and partner.street or '', partner and partner.street2 or ''), + 'partner_city': partner and partner.city or False, + 'partner_country_id': partner and partner.country_id.id or False, + 'partner_phone': partner and partner.phone or False, + }} + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + def form_feedback(self, cr, uid, data, acquirer_name, context=None): + invalid_parameters, tx = None, None + + tx_find_method_name = '_%s_form_get_tx_from_data' % acquirer_name + if hasattr(self, tx_find_method_name): + tx = getattr(self, tx_find_method_name)(cr, uid, data, context=context) + + invalid_param_method_name = '_%s_form_get_invalid_parameters' % acquirer_name + if hasattr(self, invalid_param_method_name): + invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context) + + if invalid_parameters: + _error_message = '%s: incorrect tx data:\n' % (acquirer_name) + for item in invalid_parameters: + _error_message += '\t%s: received %s instead of %s\n' % (item[0], item[1], item[2]) + _logger.error(_error_message) + return False + + feedback_method_name = '_%s_form_validate' % acquirer_name + if hasattr(self, feedback_method_name): + return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context) + + return True + + # -------------------------------------------------- + # SERVER2SERVER RELATED METHODS + # -------------------------------------------------- + + def s2s_create(self, cr, uid, values, cc_values, context=None): + tx_id, tx_result = self.s2s_send(cr, uid, values, cc_values, context=context) + self.s2s_feedback(cr, uid, tx_id, tx_result, context=context) + return tx_id + + def s2s_send(self, cr, uid, values, cc_values, context=None): + """ Create and send server-to-server transaction. + + :param dict values: transaction values + :param dict cc_values: credit card values that are not stored into the + payment.transaction object. Acquirers should + handle receiving void or incorrect cc values. + Should contain : + + - holder_name + - number + - cvc + - expiry_date + - brand + - expiry_date_yy + - expiry_date_mm + """ + tx_id, result = None, None + + if values.get('acquirer_id'): + acquirer = self.pool['payment.acquirer'].browse(cr, uid, values.get('acquirer_id'), context=context) + custom_method_name = '_%s_s2s_send' % acquirer.name + if hasattr(self, custom_method_name): + tx_id, result = getattr(self, custom_method_name)(cr, uid, values, cc_values, context=context) + + if tx_id is None and result is None: + tx_id = super(PaymentTransaction, self).create(cr, uid, values, context=context) + return (tx_id, result) + + def s2s_feedback(self, cr, uid, tx_id, data, context=None): + """ Handle the feedback of a server-to-server transaction. """ + tx = self.browse(cr, uid, tx_id, context=context) + invalid_parameters = None + + invalid_param_method_name = '_%s_s2s_get_invalid_parameters' % tx.acquirer_id.name + if hasattr(self, invalid_param_method_name): + invalid_parameters = getattr(self, invalid_param_method_name)(cr, uid, tx, data, context=context) + + if invalid_parameters: + _error_message = '%s: incorrect tx data:\n' % (tx.acquirer_id.name) + for item in invalid_parameters: + _error_message += '\t%s: received %s instead of %s\n' % (item[0], item[1], item[2]) + _logger.error(_error_message) + return False + + feedback_method_name = '_%s_s2s_validate' % tx.acquirer_id.name + if hasattr(self, feedback_method_name): + return getattr(self, feedback_method_name)(cr, uid, tx, data, context=context) + + return True + + def s2s_get_tx_status(self, cr, uid, tx_id, context=None): + """ Get the tx status. """ + tx = self.browse(cr, uid, tx_id, context=context) + + invalid_param_method_name = '_%s_s2s_get_tx_status' % tx.acquirer_id.name + if hasattr(self, invalid_param_method_name): + return getattr(self, invalid_param_method_name)(cr, uid, tx, context=context) + + return True diff --git a/addons/payment_acquirer/security/ir.model.access.csv b/addons/payment_acquirer/security/ir.model.access.csv new file mode 100644 index 00000000000..18f98939472 --- /dev/null +++ b/addons/payment_acquirer/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +payment_acquirer_all,payment.acquirer.all,model_payment_acquirer,,1,0,0,0 +payment_acquirer_user,payment.acquirer.user,model_payment_acquirer,base.group_user,1,1,1,0 +payment_acquirer_system,payment.acquirer.system,model_payment_acquirer,base.group_system,1,1,1,1 +payment_transaction_all,payment.transaction.all,model_payment_transaction,,1,1,1,0 +payment_transaction_user,payment.transaction.user,model_payment_transaction,base.group_user,1,1,1,0 +payment_transaction_system,payment.transaction.system,model_payment_transaction,base.group_system,1,1,1,1 \ No newline at end of file diff --git a/addons/payment_acquirer/static/description/icon.png b/addons/payment_acquirer/static/description/icon.png new file mode 100644 index 00000000000..51e33ac6ddf Binary files /dev/null and b/addons/payment_acquirer/static/description/icon.png differ diff --git a/addons/payment_acquirer/tests/__init__.py b/addons/payment_acquirer/tests/__init__.py new file mode 100644 index 00000000000..5c193a07c8d --- /dev/null +++ b/addons/payment_acquirer/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import common diff --git a/addons/payment_acquirer/tests/common.py b/addons/payment_acquirer/tests/common.py new file mode 100644 index 00000000000..93a1820a447 --- /dev/null +++ b/addons/payment_acquirer/tests/common.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +from openerp.tests import common + + +class PaymentAcquirerCommon(common.TransactionCase): + + def setUp(self): + super(PaymentAcquirerCommon, self).setUp() + self.payment_acquirer = self.registry('payment.acquirer') + self.payment_transaction = self.registry('payment.transaction') + + self.currency_euro_id = self.registry('res.currency').search( + self.cr, self.uid, [('name', '=', 'EUR')], limit=1)[0] + self.currency_euro = self.registry('res.currency').browse( + self.cr, self.uid, self.currency_euro_id) + self.country_belgium_id = self.registry('res.country').search( + self.cr, self.uid, [('code', 'like', 'BE')], limit=1)[0] + self.country_france_id = self.registry('res.country').search( + self.cr, self.uid, [('code', 'like', 'FR')], limit=1)[0] + + # dict partner values + self.buyer_values = { + 'name': 'Norbert Buyer', + 'lang': 'en_US', + 'email': 'norbert.buyer@example.com', + 'street': 'Huge Street', + 'street2': '2/543', + 'phone': '0032 12 34 56 78', + 'city': 'Sin City', + 'zip': '1000', + 'country_id': self.country_belgium_id, + 'country_name': 'Belgium', + } + + # test partner + self.buyer_id = self.registry('res.partner').create( + self.cr, self.uid, { + 'name': 'Norbert Buyer', + 'lang': 'en_US', + 'email': 'norbert.buyer@example.com', + 'street': 'Huge Street', + 'street2': '2/543', + 'phone': '0032 12 34 56 78', + 'city': 'Sin City', + 'zip': '1000', + 'country_id': self.country_belgium_id, + } + ) diff --git a/addons/payment_acquirer/views/payment_acquirer.xml b/addons/payment_acquirer/views/payment_acquirer.xml new file mode 100644 index 00000000000..9f7429d3f22 --- /dev/null +++ b/addons/payment_acquirer/views/payment_acquirer.xml @@ -0,0 +1,178 @@ + + + + + + + + acquirer.form + payment.acquirer + +
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ + + payment.acquirer + + + + + + + + + + + payment.acquirer + + + + + + + + + Payment Acquirers + payment.acquirer + form + tree,form + + + + + + payment.transaction + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + + payment.transaction + + + + + + + + + + + + + payment.transaction + + + + + + + + + + + + Payment Transactions + payment.transaction + form + tree,form + + + + +
+
diff --git a/addons/website_customer_crm_partner_assign/__openerp__.py b/addons/payment_acquirer_adyen/__init__.py similarity index 60% rename from addons/website_customer_crm_partner_assign/__openerp__.py rename to addons/payment_acquirer_adyen/__init__.py index 4dcddd5ea90..dde6f25c728 100644 --- a/addons/website_customer_crm_partner_assign/__openerp__.py +++ b/addons/payment_acquirer_adyen/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2013-Today OpenERP S.A. (). +# Copyright (C) 2013-Today OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,24 +19,5 @@ # ############################################################################## -{ - 'name': 'Public Customer References + Partner Assign', - 'category': 'Website', - 'summary': 'Add Partner Assignment Info to your Customer References', - 'version': '1.0', - 'description': """ -OpenERP Customer References + Partner Assign -============================================ -""", - 'author': 'OpenERP SA', - 'depends': [ - 'crm_partner_assign', - 'website_customer' - ], - 'data': [ - 'views/website_customer.xml', - ], - 'qweb': [], - 'installable': True, - 'auto_install': True, -} +import models +import controllers diff --git a/addons/payment_acquirer_adyen/__openerp__.py b/addons/payment_acquirer_adyen/__openerp__.py new file mode 100644 index 00000000000..e2344c88406 --- /dev/null +++ b/addons/payment_acquirer_adyen/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Adyen Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Adyen Implementation', + 'version': '1.0', + 'description': """Adyen Payment Acquirer""", + 'author': 'OpenERP SA', + 'depends': ['payment_acquirer'], + 'data': [ + 'views/adyen.xml', + 'views/payment_acquirer.xml', + 'data/adyen.xml', + ], + 'installable': True, +} diff --git a/addons/payment_acquirer_adyen/controllers/__init__.py b/addons/payment_acquirer_adyen/controllers/__init__.py new file mode 100644 index 00000000000..bbd183e955b --- /dev/null +++ b/addons/payment_acquirer_adyen/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import main diff --git a/addons/payment_acquirer_adyen/controllers/main.py b/addons/payment_acquirer_adyen/controllers/main.py new file mode 100644 index 00000000000..706b26e163d --- /dev/null +++ b/addons/payment_acquirer_adyen/controllers/main.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- + +from openerp.addons.web import http +from openerp.addons.web.http import request +from openerp.addons.website.models import website + +try: + import simplejson as json +except ImportError: + import json +import logging +import pprint + +_logger = logging.getLogger(__name__) + + +class AdyenController(http.Controller): + _return_url = '/payment/adyen/return/' + + @website.route([ + '/payment/adyen/return/', + ], type='http', auth='public', methods=['POST']) + def adyen_return(self, **post): + """ Paypal IPN. """ + _logger.info('Beginning Adyen form_feedback with post data %s', pprint.pformat(post)) # debug + request.registry['payment.transaction'].form_feedback(request.cr, request.uid, post, 'adyen', context=request.context) + return_url = post.pop('return_url', '') + if not return_url: + custom = json.loads(post.pop('merchantReturnData', '{}')) + return_url = custom.pop('return_url', '/') + return request.redirect(return_url) diff --git a/addons/payment_acquirer_adyen/data/adyen.xml b/addons/payment_acquirer_adyen/data/adyen.xml new file mode 100644 index 00000000000..92b0cf178b5 --- /dev/null +++ b/addons/payment_acquirer_adyen/data/adyen.xml @@ -0,0 +1,15 @@ + + + + + + adyen + + test + dummy + dummy + dummy + + + + diff --git a/addons/payment_acquirer_adyen/doc/changelog.rst b/addons/payment_acquirer_adyen/doc/changelog.rst new file mode 100644 index 00000000000..d0c24af384d --- /dev/null +++ b/addons/payment_acquirer_adyen/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-3)` +---------------- + +- Module creation \ No newline at end of file diff --git a/addons/payment_acquirer_adyen/doc/index.rst b/addons/payment_acquirer_adyen/doc/index.rst new file mode 100644 index 00000000000..85028ed0d3e --- /dev/null +++ b/addons/payment_acquirer_adyen/doc/index.rst @@ -0,0 +1,14 @@ +Payment module documentation +============================ + +Payment documentation topics +'''''''''''''''''''''''''''' + + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/payment_acquirer_adyen/models/__init__.py b/addons/payment_acquirer_adyen/models/__init__.py new file mode 100644 index 00000000000..fdc540ef04d --- /dev/null +++ b/addons/payment_acquirer_adyen/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import adyen diff --git a/addons/payment_acquirer_adyen/models/adyen.py b/addons/payment_acquirer_adyen/models/adyen.py new file mode 100644 index 00000000000..761381d415c --- /dev/null +++ b/addons/payment_acquirer_adyen/models/adyen.py @@ -0,0 +1,180 @@ +# -*- coding: utf-'8' "-*-" + +import base64 +try: + import simplejson as json +except ImportError: + import json +from hashlib import sha1 +import hmac +import logging +import urlparse + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer_adyen.controllers.main import AdyenController +from openerp.osv import osv, fields +from openerp.tools import float_round + +_logger = logging.getLogger(__name__) + + +class AcquirerAdyen(osv.Model): + _inherit = 'payment.acquirer' + + def _get_adyen_urls(self, cr, uid, env, context=None): + """ Adyen URLs + + - yhpp: hosted payment page: pay.shtml for single, select.shtml for multiple + """ + if env == 'prod': + return { + 'adyen_form_url': 'https://prod.adyen.com/hpp/pay.shtml', + } + else: + return { + 'adyen_form_url': 'https://test.adyen.com/hpp/pay.shtml', + } + + _columns = { + 'adyen_merchant_account': fields.char('Merchant Account', required_if_provider='adyen'), + 'adyen_skin_code': fields.char('Skin Code', required_if_provider='adyen'), + 'adyen_skin_hmac_key': fields.char('Skin HMAC Key', required_if_provider='adyen'), + } + + def _adyen_generate_merchant_sig(self, acquirer, inout, values): + """ Generate the shasign for incoming or outgoing communications. + + :param browse acquirer: the payment.acquirer browse record. It should + have a shakey in shaky out + :param string inout: 'in' (openerp contacting ogone) or 'out' (adyen + contacting openerp). In this last case only some + fields should be contained (see e-Commerce basic) + :param dict values: transaction values + + :return string: shasign + """ + assert inout in ('in', 'out') + assert acquirer.name == 'adyen' + + if inout == 'in': + keys = "paymentAmount currencyCode shipBeforeDate merchantReference skinCode merchantAccount sessionValidity shopperEmail shopperReference recurringContract allowedMethods blockedMethods shopperStatement merchantReturnData billingAddressType deliveryAddressType offset".split() + else: + keys = "authResult pspReference merchantReference skinCode paymentMethod shopperLocale merchantReturnData".split() + + def get_value(key): + if values.get(key): + return values[key] + return '' + + sign = ''.join('%s' % get_value(k) for k in keys).encode('ascii') + key = acquirer.adyen_skin_hmac_key.encode('ascii') + return base64.b64encode(hmac.new(key, sign, sha1).digest()) + + def adyen_form_generate_values(self, cr, uid, id, partner_values, tx_values, context=None): + base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url') + acquirer = self.browse(cr, uid, id, context=context) + # tmp + import datetime + from dateutil import relativedelta + tmp_date = datetime.date.today() + relativedelta.relativedelta(days=1) + + adyen_tx_values = dict(tx_values) + adyen_tx_values.update({ + 'merchantReference': tx_values['reference'], + 'paymentAmount': '%d' % int(float_round(tx_values['amount'], 2) * 100), + 'currencyCode': tx_values['currency'] and tx_values['currency'].name or '', + 'shipBeforeDate': tmp_date, + 'skinCode': acquirer.adyen_skin_code, + 'merchantAccount': acquirer.adyen_merchant_account, + 'shopperLocale': partner_values['lang'], + 'sessionValidity': tmp_date, + 'resURL': '%s' % urlparse.urljoin(base_url, AdyenController._return_url), + }) + if adyen_tx_values.get('return_url'): + adyen_tx_values['merchantReturnData'] = json.dumps({'return_url': '%s' % adyen_tx_values.pop('return_url')}) + adyen_tx_values['merchantSig'] = self._adyen_generate_merchant_sig(acquirer, 'in', adyen_tx_values) + return partner_values, adyen_tx_values + + def adyen_get_form_action_url(self, cr, uid, id, context=None): + acquirer = self.browse(cr, uid, id, context=context) + return self._get_adyen_urls(cr, uid, acquirer.env, context=context)['adyen_form_url'] + + +class TxAdyen(osv.Model): + _inherit = 'payment.transaction' + + _columns = { + 'adyen_psp_reference': fields.char('Adyen PSP Reference'), + } + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + def _adyen_form_get_tx_from_data(self, cr, uid, data, context=None): + reference, pspReference = data.get('merchantReference'), data.get('pspReference') + if not reference or not pspReference: + error_msg = 'Adyen: received data with missing reference (%s) or missing pspReference (%s)' % (reference, pspReference) + _logger.error(error_msg) + raise ValidationError(error_msg) + + # find tx -> @TDENOTE use pspReference ? + tx_ids = self.pool['payment.transaction'].search(cr, uid, [('reference', '=', reference)], context=context) + if not tx_ids or len(tx_ids) > 1: + error_msg = 'Adyen: received data for reference %s' % (reference) + if not tx_ids: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.error(error_msg) + raise ValidationError(error_msg) + tx = self.pool['payment.transaction'].browse(cr, uid, tx_ids[0], context=context) + + # verify shasign + shasign_check = self.pool['payment.acquirer']._adyen_generate_merchant_sig(tx.acquirer_id, 'out', data) + if shasign_check != data.get('merchantSig'): + error_msg = 'Adyen: invalid merchantSig, received %s, computed %s' % (data.get('merchantSig'), shasign_check) + _logger.warning(error_msg) + # raise ValidationError(error_msg) + + return tx + + def _adyen_form_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + + # reference at acquirer: pspReference + if tx.acquirer_reference and data.get('pspReference') != tx.acquirer_reference: + invalid_parameters.append(('pspReference', data.get('pspReference'), tx.acquirer_reference)) + # seller + if data.get('skinCode') != tx.acquirer_id.adyen_skin_code: + invalid_parameters.append(('skinCode', data.get('skinCode'), tx.acquirer_id.adyen_skin_code)) + # result + if not data.get('authResult'): + invalid_parameters.append(('authResult', data.get('authResult'), 'something')) + + return invalid_parameters + + def _adyen_form_validate(self, cr, uid, tx, data, context=None): + status = data.get('authResult', 'PENDING') + if status == 'AUTHORISED': + tx.write({ + 'state': 'done', + 'adyen_psp_reference': data.get('pspReference'), + # 'date_validate': data.get('payment_date', fields.datetime.now()), + # 'paypal_txn_type': data.get('express_checkout') + }) + return True + elif status == 'PENDING': + tx.write({ + 'state': 'pending', + 'adyen_psp_reference': data.get('pspReference'), + }) + return True + else: + error = 'Paypal: feedback error' + _logger.info(error) + tx.write({ + 'state': 'error', + 'state_message': error + }) + return False diff --git a/addons/payment_acquirer_adyen/static/description/icon.png b/addons/payment_acquirer_adyen/static/description/icon.png new file mode 100644 index 00000000000..e1889808855 Binary files /dev/null and b/addons/payment_acquirer_adyen/static/description/icon.png differ diff --git a/addons/payment_acquirer_adyen/static/src/img/adyen_icon.png b/addons/payment_acquirer_adyen/static/src/img/adyen_icon.png new file mode 100644 index 00000000000..90d492c3fe9 Binary files /dev/null and b/addons/payment_acquirer_adyen/static/src/img/adyen_icon.png differ diff --git a/addons/payment_acquirer_adyen/static/src/img/logo.png b/addons/payment_acquirer_adyen/static/src/img/logo.png new file mode 100644 index 00000000000..e1889808855 Binary files /dev/null and b/addons/payment_acquirer_adyen/static/src/img/logo.png differ diff --git a/addons/payment_acquirer_adyen/tests/__init__.py b/addons/payment_acquirer_adyen/tests/__init__.py new file mode 100644 index 00000000000..8c8e8249184 --- /dev/null +++ b/addons/payment_acquirer_adyen/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +# from . import test_adyen + +checks = [ + # test_adyen, +] diff --git a/addons/payment_acquirer_adyen/tests/test_adyen.py b/addons/payment_acquirer_adyen/tests/test_adyen.py new file mode 100644 index 00000000000..14b5f8fd5e5 --- /dev/null +++ b/addons/payment_acquirer_adyen/tests/test_adyen.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +from lxml import objectify +import urlparse + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer.tests.common import PaymentAcquirerCommon +from openerp.addons.payment_acquirer_adyen.controllers.main import AdyenController +from openerp.osv.orm import except_orm +from openerp.tools import mute_logger + + +class AdyenCommon(PaymentAcquirerCommon): + + def setUp(self): + super(AdyenCommon, self).setUp() + cr, uid = self.cr, self.uid + self.base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url') + + # get the adyen account + model, self.adyen_id = self.registry('ir.model.data').get_object_reference(cr, uid, 'payment_acquirer_adyen', 'payment_acquirer_adyen') + + # some CC (always use expiration date 06 / 2016, cvc 737, cid 7373 (amex)) + self.amex = (('370000000000002', '7373')) + self.dinersclub = (('36006666333344', '737')) + self.discover = (('6011601160116611', '737'), ('644564456445644', '737')) + self.jcb = (('3530111333300000', '737')) + self.mastercard = (('5555444433331111', '737'), ('5555555555554444', '737')) + self.visa = (('4111 1111 1111 1111', '737'), ('4444333322221111', '737')) + self.mcdebit = (('5500000000000004', '737')) + self.visadebit = (('4400000000000008', '737')) + self.maestro = (('6731012345678906', '737')) + self.laser = (('630495060000000000', '737')) + self.hipercard = (('6062828888666688', '737')) + self.dsmastercard = (('521234567890 1234', '737', 'user', 'password')) + self.dsvisa = (('4212345678901237', '737', 'user', 'password')) + self.mistercash = (('6703444444444449', None, 'user', 'password')) + + +class AdyenServer2Server(AdyenCommon): + + def test_00_tx_management(self): + cr, uid, context = self.cr, self.uid, {} + + +class AdyenForm(AdyenCommon): + + def test_10_adyen_form_render(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + adyen = self.payment_acquirer.browse(self.cr, self.uid, self.adyen_id, None) + self.assertEqual(adyen.env, 'test', 'test without test env') + + # ---------------------------------------- + # Test: button direct rendering + # ---------------------------------------- + + form_values = { + 'merchantAccount': 'OpenERPCOM', + 'merchantReference': 'test_ref0', + 'skinCode': 'cbqYWvVL', + 'paymentAmount': '1', + 'currencyCode': 'EUR', + 'resURL': '%s' % urlparse.urljoin(self.base_url, AdyenController._return_url), + } + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.adyen_id, + 'test_ref0', 0.01, self.currency_euro_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://test.adyen.com/hpp/pay.shtml', 'adyen: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit', 'shipBeforeDate', 'sessionValidity', 'shopperLocale', 'merchantSig']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'adyen: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + @mute_logger('openerp.addons.payment_acquirer_paypal.models.paypal', 'ValidationError') + def test_20_paypal_form_management(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + adyen = self.payment_acquirer.browse(self.cr, self.uid, self.adyen_id, None) + self.assertEqual(adyen.env, 'test', 'test without test env') + +# {'authResult': u'AUTHORISED', +# 'merchantReference': u'SO014', +# 'merchantReturnData': u'return_url=/shop/payment/validate', +# 'merchantSig': u'GaLRO8aMHFaQX3gQ5BVP/YETzeA=', +# 'paymentMethod': u'visa', +# 'pspReference': u'8813859935907337', +# 'shopperLocale': u'en_US', +# 'skinCode': u'cbqYWvVL'} \ No newline at end of file diff --git a/addons/payment_acquirer_adyen/views/adyen.xml b/addons/payment_acquirer_adyen/views/adyen.xml new file mode 100644 index 00000000000..55a5fd4b5b0 --- /dev/null +++ b/addons/payment_acquirer_adyen/views/adyen.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/addons/payment_acquirer_adyen/views/payment_acquirer.xml b/addons/payment_acquirer_adyen/views/payment_acquirer.xml new file mode 100644 index 00000000000..663cf1efe74 --- /dev/null +++ b/addons/payment_acquirer_adyen/views/payment_acquirer.xml @@ -0,0 +1,36 @@ + + + + + + acquirer.form.adyen + payment.acquirer + + + + + + + + + + + + + + acquirer.transaction.form.adyen + payment.transaction + + + + + + + + + + + + + + diff --git a/addons/payment_acquirer_ogone/__init__.py b/addons/payment_acquirer_ogone/__init__.py new file mode 100644 index 00000000000..dde6f25c728 --- /dev/null +++ b/addons/payment_acquirer_ogone/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2013-Today OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import models +import controllers diff --git a/addons/payment_acquirer_ogone/__openerp__.py b/addons/payment_acquirer_ogone/__openerp__.py new file mode 100644 index 00000000000..2c7b5076981 --- /dev/null +++ b/addons/payment_acquirer_ogone/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Ogone Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Ogone Implementation', + 'version': '1.0', + 'description': """Ogone Payment Acquirer""", + 'author': 'OpenERP SA', + 'depends': ['payment_acquirer'], + 'data': [ + 'views/ogone.xml', + 'views/payment_acquirer.xml', + 'data/ogone.xml', + ], + 'installable': True, +} diff --git a/addons/payment_acquirer_ogone/controllers/__init__.py b/addons/payment_acquirer_ogone/controllers/__init__.py new file mode 100644 index 00000000000..bbd183e955b --- /dev/null +++ b/addons/payment_acquirer_ogone/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import main diff --git a/addons/payment_acquirer_ogone/controllers/main.py b/addons/payment_acquirer_ogone/controllers/main.py new file mode 100644 index 00000000000..0e302d90019 --- /dev/null +++ b/addons/payment_acquirer_ogone/controllers/main.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +import logging +import pprint + +from openerp.addons.web import http +from openerp.addons.web.http import request +from openerp.addons.website.models import website + +_logger = logging.getLogger(__name__) + + +class OgoneController(http.Controller): + _accept_url = '/payment/ogone/test/accept' + _decline_url = '/payment/ogone/test/decline' + _exception_url = '/payment/ogone/test/exception' + _cancel_url = '/payment/ogone/test/cancel' + + @website.route([ + '/payment/ogone/accept', '/payment/ogone/test/accept', + '/payment/ogone/decline', '/payment/ogone/test/decline', + '/payment/ogone/exception', '/payment/ogone/test/exception', + '/payment/ogone/cancel', '/payment/ogone/test/cancel', + ], type='http', auth='admin') + def ogone_form_feedback(self, **post): + """ Ogone contacts using GET, at least for accept """ + _logger.info('Ogone: entering form_feedback with post data %s', pprint.pformat(post)) # debug + cr, uid, context = request.cr, request.uid, request.context + request.registry['payment.transaction'].form_feedback(cr, uid, post, 'ogone', context=context) + return request.redirect(post.pop('return_url', '/')) diff --git a/addons/payment_acquirer_ogone/data/__init__.py b/addons/payment_acquirer_ogone/data/__init__.py new file mode 100644 index 00000000000..349d8f668e8 --- /dev/null +++ b/addons/payment_acquirer_ogone/data/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import ogone diff --git a/addons/payment_acquirer_ogone/data/ogone.py b/addons/payment_acquirer_ogone/data/ogone.py new file mode 100644 index 00000000000..3a2500ee24b --- /dev/null +++ b/addons/payment_acquirer_ogone/data/ogone.py @@ -0,0 +1,497 @@ +# -*- coding: utf-8 -*- + +OGONE_ERROR_MAP = { + '0020001001': "Authorization failed, please retry", + '0020001002': "Authorization failed, please retry", + '0020001003': "Authorization failed, please retry", + '0020001004': "Authorization failed, please retry", + '0020001005': "Authorization failed, please retry", + '0020001006': "Authorization failed, please retry", + '0020001007': "Authorization failed, please retry", + '0020001008': "Authorization failed, please retry", + '0020001009': "Authorization failed, please retry", + '0020001010': "Authorization failed, please retry", + '0030001999': "Our payment system is currently under maintenance, please try later", + '0050001005': "Expiry date error", + '0050001007': "Requested Operation code not allowed", + '0050001008': "Invalid delay value", + '0050001010': "Input date in invalid format", + '0050001013': "Unable to parse socket input stream", + '0050001014': "Error in parsing stream content", + '0050001015': "Currency error", + '0050001016': "Transaction still posted at end of wait", + '0050001017': "Sync value not compatible with delay value", + '0050001019': "Transaction duplicate of a pre-existing transaction", + '0050001020': "Acceptation code empty while required for the transaction", + '0050001024': "Maintenance acquirer differs from original transaction acquirer", + '0050001025': "Maintenance merchant differs from original transaction merchant", + '0050001028': "Maintenance operation not accurate for the original transaction", + '0050001031': "Host application unknown for the transaction", + '0050001032': "Unable to perform requested operation with requested currency", + '0050001033': "Maintenance card number differs from original transaction card number", + '0050001034': "Operation code not allowed", + '0050001035': "Exception occurred in socket input stream treatment", + '0050001036': "Card length does not correspond to an acceptable value for the brand", + '0050001036': "Card length does not correspond to an acceptable value for the brand", + '0050001068': "A technical problem occurred, please contact helpdesk", + '0050001069': "Invalid check for CardID and Brand", + '0050001070': "A technical problem occurred, please contact helpdesk", + '0050001116': "Unknown origin IP", + '0050001117': "No origin IP detected", + '0050001118': "Merchant configuration problem, please contact support", + '10001001': "Communication failure", + '10001002': "Communication failure", + '10001003': "Communication failure", + '10001004': "Communication failure", + '10001005': "Communication failure", + '20001001': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001002': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001003': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001004': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001005': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001006': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001007': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001008': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001009': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001010': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001101': "A technical problem occurred, please contact helpdesk", + '20001105': "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later.", + '20001111': "A technical problem occurred, please contact helpdesk", + '20002001': "Origin for the response of the bank can not be checked", + '20002002': "Beneficiary account number has been modified during processing", + '20002003': "Amount has been modified during processing", + '20002004': "Currency has been modified during processing", + '20002005': "No feedback from the bank server has been detected", + '30001001': "Payment refused by the acquirer", + '30001002': "Duplicate request", + '30001010': "A technical problem occurred, please contact helpdesk", + '30001011': "A technical problem occurred, please contact helpdesk", + '30001012': "Card black listed - Contact acquirer", + '30001015': "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method.", + '30001051': "A technical problem occurred, please contact helpdesk", + '30001054': "A technical problem occurred, please contact helpdesk", + '30001057': "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method.", + '30001058': "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method.", + '30001060': "Aquirer indicates that a failure occured during payment processing", + '30001070': "RATEPAY Invalid Response Type (Failure)", + '30001071': "RATEPAY Missing Mandatory status code field (failure)", + '30001072': "RATEPAY Missing Mandatory Result code field (failure)", + '30001073': "RATEPAY Response parsing Failed", + '30001090': "CVC check required by front end and returned invalid by acquirer", + '30001091': "ZIP check required by front end and returned invalid by acquirer", + '30001092': "Address check required by front end and returned as invalid by acquirer.", + '30001100': "Unauthorized buyer's country", + '30001101': "IP country <> card country", + '30001102': "Number of different countries too high", + '30001103': "unauthorized card country", + '30001104': "unauthorized ip address country", + '30001105': "Anonymous proxy", + '30001110': "If the problem persists, please contact Support, or go to paysafecard's card balance page (https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet?language=en) to see when the amount reserved on your card will be available again.", + '30001120': "IP address in merchant's black list", + '30001130': "BIN in merchant's black list", + '30001131': "Wrong BIN for 3xCB", + '30001140': "Card in merchant's card blacklist", + '30001141': "Email in blacklist", + '30001142': "Passenger name in blacklist", + '30001143': "Card holder name in blacklist", + '30001144': "Passenger name different from owner name", + '30001145': "Time to departure too short", + '30001149': "Card Configured in Card Supplier Limit for another relation (CSL)", + '30001150': "Card not configured in the system for this customer (CSL)", + '30001151': "REF1 not allowed for this relationship (Contract number", + '30001152': "Card/Supplier Amount limit reached (CSL)", + '30001153': "Card not allowed for this supplier (Date out of contract bounds)", + '30001154': "You have reached the usage limit allowed", + '30001155': "You have reached the usage limit allowed", + '30001156': "You have reached the usage limit allowed", + '30001157': "Unauthorized IP country for itinerary", + '30001158': "email usage limit reached", + '30001159': "Unauthorized card country/IP country combination", + '30001160': "Postcode in highrisk group", + '30001161': "generic blacklist match", + '30001162': "Billing Address is a PO Box", + '30001180': "maximum scoring reached", + '30001997': "Authorization canceled by simulation", + '30001998': "A technical problem occurred, please try again.", + '30001999': "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method.", + '30002001': "Payment refused by the financial institution", + '30002001': "Payment refused by the financial institution", + '30021001': "Call acquirer support call number.", + '30022001': "Payment must be approved by the acquirer before execution.", + '30031001': "Invalid merchant number.", + '30041001': "Retain card.", + '30051001': "Authorization declined", + '30071001': "Retain card - special conditions.", + '30121001': "Invalid transaction", + '30131001': "Invalid amount", + '30131002': "You have reached the total amount allowed", + '30141001': "Invalid card number", + '30151001': "Unknown acquiring institution.", + '30171001': "Payment method cancelled by the buyer", + '30171002': "The maximum time allowed is elapsed.", + '30191001': "Try again later.", + '30201001': "A technical problem occurred, please contact helpdesk", + '30301001': "Invalid format", + '30311001': "Unknown acquirer ID.", + '30331001': "Card expired.", + '30341001': "Suspicion of fraud.", + '30341002': "Suspicion of fraud (3rdMan)", + '30341003': "Suspicion of fraud (Perseuss)", + '30341004': "Suspicion of fraud (ETHOCA)", + '30381001': "A technical problem occurred, please contact helpdesk", + '30401001': "Invalid function.", + '30411001': "Lost card.", + '30431001': "Stolen card, pick up", + '30511001': "Insufficient funds.", + '30521001': "No Authorization. Contact the issuer of your card.", + '30541001': "Card expired.", + '30551001': "Invalid PIN.", + '30561001': "Card not in authorizer's database.", + '30571001': "Transaction not permitted on card.", + '30581001': "Transaction not allowed on this terminal", + '30591001': "Suspicion of fraud.", + '30601001': "The merchant must contact the acquirer.", + '30611001': "Amount exceeds card ceiling.", + '30621001': "Restricted card.", + '30631001': "Security policy not respected.", + '30641001': "Amount changed from ref. trn.", + '30681001': "Tardy response.", + '30751001': "PIN entered incorrectly too often", + '30761001': "Card holder already contesting.", + '30771001': "PIN entry required.", + '30811001': "Message flow error.", + '30821001': "Authorization center unavailable", + '30831001': "Authorization center unavailable", + '30901001': "Temporary system shutdown.", + '30911001': "Acquirer unavailable.", + '30921001': "Invalid card type for acquirer.", + '30941001': "Duplicate transaction", + '30961001': "Processing temporarily not possible", + '30971001': "A technical problem occurred, please contact helpdesk", + '30981001': "A technical problem occurred, please contact helpdesk", + '31011001': "Unknown acceptance code", + '31021001': "Invalid currency", + '31031001': "Acceptance code missing", + '31041001': "Inactive card", + '31051001': "Merchant not active", + '31061001': "Invalid expiration date", + '31071001': "Interrupted host communication", + '31081001': "Card refused", + '31091001': "Invalid password", + '31101001': "Plafond transaction (majoré du bonus) dépassé", + '31111001': "Plafond mensuel (majoré du bonus) dépassé", + '31121001': "Plafond centre de facturation dépassé", + '31131001': "Plafond entreprise dépassé", + '31141001': "Code MCC du fournisseur non autorisé pour la carte", + '31151001': "Numéro SIRET du fournisseur non autorisé pour la carte", + '31161001': "This is not a valid online banking account", + '32001004': "A technical problem occurred, please try again.", + '34011001': "Bezahlung mit RatePAY nicht möglich.", + '39991001': "A technical problem occurred, please contact the helpdesk of your acquirer", + '40001001': "A technical problem occurred, please try again.", + '40001002': "A technical problem occurred, please try again.", + '40001003': "A technical problem occurred, please try again.", + '40001004': "A technical problem occurred, please try again.", + '40001005': "A technical problem occurred, please try again.", + '40001006': "A technical problem occurred, please try again.", + '40001007': "A technical problem occurred, please try again.", + '40001008': "A technical problem occurred, please try again.", + '40001009': "A technical problem occurred, please try again.", + '40001010': "A technical problem occurred, please try again.", + '40001011': "A technical problem occurred, please contact helpdesk", + '40001012': "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method.", + '40001013': "A technical problem occurred, please contact helpdesk", + '40001016': "A technical problem occurred, please contact helpdesk", + '40001018': "A technical problem occurred, please try again.", + '40001019': "Sorry, an error occurred during processing. Please retry the operation (use back button of the browser). If problem persists, contact your merchant's helpdesk.", + '40001020': "Sorry, an error occurred during processing. Please retry the operation (use back button of the browser). If problem persists, contact your merchant's helpdesk.", + '40001050': "A technical problem occurred, please contact helpdesk", + '40001133': "Authentication failed, the signature of your bank access control server is incorrect", + '40001134': "Authentication failed, please retry or cancel.", + '40001135': "Authentication temporary unavailable, please retry or cancel.", + '40001136': "Technical problem with your browser, please retry or cancel", + '40001137': "Your bank access control server is temporary unavailable, please retry or cancel", + '40001998': "Temporary technical problem. Please retry a little bit later.", + '50001001': "Unknown card type", + '50001002': "Card number format check failed for given card number.", + '50001003': "Merchant data error", + '50001004': "Merchant identification missing", + '50001005': "Expiry date error", + '50001006': "Amount is not a number", + '50001007': "A technical problem occurred, please contact helpdesk", + '50001008': "A technical problem occurred, please contact helpdesk", + '50001009': "A technical problem occurred, please contact helpdesk", + '50001010': "A technical problem occurred, please contact helpdesk", + '50001011': "Brand not supported for that merchant", + '50001012': "A technical problem occurred, please contact helpdesk", + '50001013': "A technical problem occurred, please contact helpdesk", + '50001014': "A technical problem occurred, please contact helpdesk", + '50001015': "Invalid currency code", + '50001016': "A technical problem occurred, please contact helpdesk", + '50001017': "A technical problem occurred, please contact helpdesk", + '50001018': "A technical problem occurred, please contact helpdesk", + '50001019': "A technical problem occurred, please contact helpdesk", + '50001020': "A technical problem occurred, please contact helpdesk", + '50001021': "A technical problem occurred, please contact helpdesk", + '50001022': "A technical problem occurred, please contact helpdesk", + '50001023': "A technical problem occurred, please contact helpdesk", + '50001024': "A technical problem occurred, please contact helpdesk", + '50001025': "A technical problem occurred, please contact helpdesk", + '50001026': "A technical problem occurred, please contact helpdesk", + '50001027': "A technical problem occurred, please contact helpdesk", + '50001028': "A technical problem occurred, please contact helpdesk", + '50001029': "A technical problem occurred, please contact helpdesk", + '50001030': "A technical problem occurred, please contact helpdesk", + '50001031': "A technical problem occurred, please contact helpdesk", + '50001032': "A technical problem occurred, please contact helpdesk", + '50001033': "A technical problem occurred, please contact helpdesk", + '50001034': "A technical problem occurred, please contact helpdesk", + '50001035': "A technical problem occurred, please contact helpdesk", + '50001036': "Card length does not correspond to an acceptable value for the brand", + '50001037': "Purchasing card number for a regular merchant", + '50001038': "Non Purchasing card for a Purchasing card merchant", + '50001039': "Details sent for a non-Purchasing card merchant, please contact helpdesk", + '50001040': "Details not sent for a Purchasing card transaction, please contact helpdesk", + '50001041': "Payment detail validation failed", + '50001042': "Given transactions amounts (tax,discount,shipping,net,etc…) do not compute correctly together", + '50001043': "A technical problem occurred, please contact helpdesk", + '50001044': "No acquirer configured for this operation", + '50001045': "No UID configured for this operation", + '50001046': "Operation not allowed for the merchant", + '50001047': "A technical problem occurred, please contact helpdesk", + '50001048': "A technical problem occurred, please contact helpdesk", + '50001049': "A technical problem occurred, please contact helpdesk", + '50001050': "A technical problem occurred, please contact helpdesk", + '50001051': "A technical problem occurred, please contact helpdesk", + '50001052': "A technical problem occurred, please contact helpdesk", + '50001053': "A technical problem occurred, please contact helpdesk", + '50001054': "Card number incorrect or incompatible", + '50001055': "A technical problem occurred, please contact helpdesk", + '50001056': "A technical problem occurred, please contact helpdesk", + '50001057': "A technical problem occurred, please contact helpdesk", + '50001058': "A technical problem occurred, please contact helpdesk", + '50001059': "A technical problem occurred, please contact helpdesk", + '50001060': "A technical problem occurred, please contact helpdesk", + '50001061': "A technical problem occurred, please contact helpdesk", + '50001062': "A technical problem occurred, please contact helpdesk", + '50001063': "Card Issue Number does not correspond to range or not present", + '50001064': "Start Date not valid or not present", + '50001066': "Format of CVC code invalid", + '50001067': "The merchant is not enrolled for 3D-Secure", + '50001068': "The card number or account number (PAN) is invalid", + '50001069': "Invalid check for CardID and Brand", + '50001070': "The ECI value given is either not supported, or in conflict with other data in the transaction", + '50001071': "Incomplete TRN demat", + '50001072': "Incomplete PAY demat", + '50001073': "No demat APP", + '50001074': "Authorisation too old", + '50001075': "VERRes was an error message", + '50001076': "DCP amount greater than authorisation amount", + '50001077': "Details negative amount", + '50001078': "Details negative quantity", + '50001079': "Could not decode/decompress received PARes (3D-Secure)", + '50001080': "Received PARes was an erereor message from ACS (3D-Secure)", + '50001081': "Received PARes format was invalid according to the 3DS specifications (3D-Secure)", + '50001082': "PAReq/PARes reconciliation failure (3D-Secure)", + '50001084': "Maximum amount reached", + '50001087': "The transaction type requires authentication, please check with your bank.", + '50001090': "CVC missing at input, but CVC check asked", + '50001091': "ZIP missing at input, but ZIP check asked", + '50001092': "Address missing at input, but Address check asked", + '50001095': "Invalid date of birth", + '50001096': "Invalid commodity code", + '50001097': "The requested currency and brand are incompatible.", + '50001111': "Data validation error", + '50001113': "This order has already been processed", + '50001114': "Error pre-payment check page access", + '50001115': "Request not received in secure mode", + '50001116': "Unknown IP address origin", + '50001117': "NO IP address origin", + '50001118': "Pspid not found or not correct", + '50001119': "Password incorrect or disabled due to numbers of errors", + '50001120': "Invalid currency", + '50001121': "Invalid number of decimals for the currency", + '50001122': "Currency not accepted by the merchant", + '50001123': "Card type not active", + '50001124': "Number of lines don't match with number of payments", + '50001125': "Format validation error", + '50001126': "Overflow in data capture requests for the original order", + '50001127': "The original order is not in a correct status", + '50001128': "missing authorization code for unauthorized order", + '50001129': "Overflow in refunds requests", + '50001130': "Error access to original order", + '50001131': "Error access to original history item", + '50001132': "The Selected Catalog is empty", + '50001133': "Duplicate request", + '50001134': "Authentication failed, please retry or cancel.", + '50001135': "Authentication temporary unavailable, please retry or cancel.", + '50001136': "Technical problem with your browser, please retry or cancel", + '50001137': "Your bank access control server is temporary unavailable, please retry or cancel", + '50001150': "Fraud Detection, Technical error (IP not valid)", + '50001151': "Fraud detection : technical error (IPCTY unknown or error)", + '50001152': "Fraud detection : technical error (CCCTY unknown or error)", + '50001153': "Overflow in redo-authorisation requests", + '50001170': "Dynamic BIN check failed", + '50001171': "Dynamic country check failed", + '50001172': "Error in Amadeus signature", + '50001174': "Card Holder Name is too long", + '50001175': "Name contains invalid characters", + '50001176': "Card number is too long", + '50001177': "Card number contains non-numeric info", + '50001178': "Card Number Empty", + '50001179': "CVC too long", + '50001180': "CVC contains non-numeric info", + '50001181': "Expiration date contains non-numeric info", + '50001182': "Invalid expiration month", + '50001183': "Expiration date must be in the future", + '50001184': "SHA Mismatch", + '50001205': "Missing mandatory fields for billing address.", + '50001206': "Missing mandatory field date of birth.", + '50001207': "Missing required shopping basket details.", + '50001208': "Missing social security number", + '50001209': "Invalid country code", + '50001210': "Missing yearly salary", + '50001211': "Missing gender", + '50001212': "Missing email", + '50001213': "Missing IP address", + '50001214': "Missing part payment campaign ID", + '50001215': "Missing invoice number", + '50001216': "The alias must be different than the card number", + '60000001': "account number unknown", + '60000003': "not credited dd-mm-yy", + '60000005': "name/number do not correspond", + '60000007': "account number blocked", + '60000008': "specific direct debit block", + '60000009': "account number WKA", + '60000010': "administrative reason", + '60000011': "account number expired", + '60000012': "no direct debit authorisation given", + '60000013': "debit not approved", + '60000014': "double payment", + '60000018': "name/address/city not entered", + '60001001': "no original direct debit for revocation", + '60001002': "payer’s account number format error", + '60001004': "payer’s account at different bank", + '60001005': "payee’s account at different bank", + '60001006': "payee’s account number format error", + '60001007': "payer’s account number blocked", + '60001008': "payer’s account number expired", + '60001009': "payee’s account number expired", + '60001010': "direct debit not possible", + '60001011': "creditor payment not possible", + '60001012': "payer’s account number unknown WKA-number", + '60001013': "payee’s account number unknown WKA-number", + '60001014': "impermissible WKA transaction", + '60001015': "period for revocation expired", + '60001017': "reason for revocation not correct", + '60001018': "original run number not numeric", + '60001019': "payment ID incorrect", + '60001020': "amount not numeric", + '60001021': "amount zero not permitted", + '60001022': "negative amount not permitted", + '60001023': "payer and payee giro account number", + '60001025': "processing code (verwerkingscode) incorrect", + '60001028': "revocation not permitted", + '60001029': "guaranteed direct debit on giro account number", + '60001030': "NBC transaction type incorrect", + '60001031': "description too large", + '60001032': "book account number not issued", + '60001034': "book account number incorrect", + '60001035': "payer’s account number not numeric", + '60001036': "payer’s account number not eleven-proof", + '60001037': "payer’s account number not issued", + '60001039': "payer’s account number of DNB/BGC/BLA", + '60001040': "payee’s account number not numeric", + '60001041': "payee’s account number not eleven-proof", + '60001042': "payee’s account number not issued", + '60001044': "payee’s account number unknown", + '60001050': "payee’s name missing", + '60001051': "indicate payee’s bank account number instead of 3102", + '60001052': "no direct debit contract", + '60001053': "amount beyond bounds", + '60001054': "selective direct debit block", + '60001055': "original run number unknown", + '60001057': "payer’s name missing", + '60001058': "payee’s account number missing", + '60001059': "restore not permitted", + '60001060': "bank’s reference (navraaggegeven) missing", + '60001061': "BEC/GBK number incorrect", + '60001062': "BEC/GBK code incorrect", + '60001087': "book account number not numeric", + '60001090': "cancelled on request", + '60001091': "cancellation order executed", + '60001092': "cancelled instead of bended", + '60001093': "book account number is a shortened account number", + '60001094': "instructing party account number not identical with payer", + '60001095': "payee unknown GBK acceptor", + '60001097': "instructing party account number not identical with payee", + '60001099': "clearing not permitted", + '60001101': "payer’s account number not spaces", + '60001102': "PAN length not numeric", + '60001103': "PAN length outside limits", + '60001104': "track number not numeric", + '60001105': "track number not valid", + '60001106': "PAN sequence number not numeric", + '60001107': "domestic PAN not numeric", + '60001108': "domestic PAN not eleven-proof", + '60001109': "domestic PAN not issued", + '60001110': "foreign PAN not numeric", + '60001111': "card valid date not numeric", + '60001112': "book period number (boekperiodenr) not numeric", + '60001113': "transaction number not numeric", + '60001114': "transaction time not numeric", + '60001115': "transaction no valid time", + '60001116': "transaction date not numeric", + '60001117': "transaction no valid date", + '60001118': "STAN not numeric", + '60001119': "instructing party’s name missing", + '60001120': "foreign amount (bedrag-vv) not numeric", + '60001122': "rate (verrekenkoers) not numeric", + '60001125': "number of decimals (aantaldecimalen) incorrect", + '60001126': "tariff (tarifering) not B/O/S", + '60001127': "domestic costs (kostenbinnenland) not numeric", + '60001128': "domestic costs (kostenbinnenland) not higher than zero", + '60001129': "foreign costs (kostenbuitenland) not numeric", + '60001130': "foreign costs (kostenbuitenland) not higher than zero", + '60001131': "domestic costs (kostenbinnenland) not zero", + '60001132': "foreign costs (kostenbuitenland) not zero", + '60001134': "Euro record not fully filled in", + '60001135': "Client currency incorrect", + '60001136': "Amount NLG not numeric", + '60001137': "Amount NLG not higher than zero", + '60001138': "Amount NLG not equal to Amount", + '60001139': "Amount NLG incorrectly converted", + '60001140': "Amount EUR not numeric", + '60001141': "Amount EUR not greater than zero", + '60001142': "Amount EUR not equal to Amount", + '60001143': "Amount EUR incorrectly converted", + '60001144': "Client currency not NLG", + '60001145': "rate euro-vv (Koerseuro-vv) not numeric", + '60001146': "comma rate euro-vv (Kommakoerseuro-vv) incorrect", + '60001147': "acceptgiro distributor not valid", + '60001148': "Original run number and/or BRN are missing", + '60001149': "Amount/Account number/ BRN different", + '60001150': "Direct debit already revoked/restored", + '60001151': "Direct debit already reversed/revoked/restored", + '60001153': "Payer’s account number not known", +} + +DATA_VALIDATION_ERROR = '50001111' + + +def retryable(error): + return error in [ + '0020001001', '0020001002', '0020001003', '0020001004', '0020001005', + '0020001006', '0020001007', '0020001008', '0020001009', '0020001010', + '30001010', '30001011', '30001015', + '30001057', '30001058', + '30001998', '30001999', + #'30611001', # amount exceeds card limit + '30961001', + '40001001', '40001002', '40001003', '40001004', '40001005', + '40001006', '40001007', '40001008', '40001009', '40001010', + '40001012', + '40001018', '40001019', '40001020', + '40001134', '40001135', '40001136', '40001137', + #'50001174', # cardholder name too long + ] diff --git a/addons/payment_acquirer_ogone/data/ogone.xml b/addons/payment_acquirer_ogone/data/ogone.xml new file mode 100644 index 00000000000..2c57a361ef6 --- /dev/null +++ b/addons/payment_acquirer_ogone/data/ogone.xml @@ -0,0 +1,17 @@ + + + + + + ogone + + test + dummy + dummy + dummy + dummy + dummy + + + + diff --git a/addons/payment_acquirer_ogone/doc/changelog.rst b/addons/payment_acquirer_ogone/doc/changelog.rst new file mode 100644 index 00000000000..d0c24af384d --- /dev/null +++ b/addons/payment_acquirer_ogone/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-3)` +---------------- + +- Module creation \ No newline at end of file diff --git a/addons/payment_acquirer_ogone/doc/index.rst b/addons/payment_acquirer_ogone/doc/index.rst new file mode 100644 index 00000000000..85028ed0d3e --- /dev/null +++ b/addons/payment_acquirer_ogone/doc/index.rst @@ -0,0 +1,14 @@ +Payment module documentation +============================ + +Payment documentation topics +'''''''''''''''''''''''''''' + + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/payment_acquirer_ogone/models/__init__.py b/addons/payment_acquirer_ogone/models/__init__.py new file mode 100644 index 00000000000..349d8f668e8 --- /dev/null +++ b/addons/payment_acquirer_ogone/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import ogone diff --git a/addons/payment_acquirer_ogone/models/ogone.py b/addons/payment_acquirer_ogone/models/ogone.py new file mode 100644 index 00000000000..17726beefd6 --- /dev/null +++ b/addons/payment_acquirer_ogone/models/ogone.py @@ -0,0 +1,375 @@ +# -*- coding: utf-'8' "-*-" + +from hashlib import sha1 +import logging +from lxml import etree, objectify +from pprint import pformat +import time +from urllib import urlencode +import urllib2 +import urlparse + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer_ogone.controllers.main import OgoneController +from openerp.addons.payment_acquirer_ogone.data import ogone +from openerp.osv import osv, fields +from openerp.tools import float_round +from openerp.tools.float_utils import float_compare + +_logger = logging.getLogger(__name__) + + +class PaymentAcquirerOgone(osv.Model): + _inherit = 'payment.acquirer' + + def _get_ogone_urls(self, cr, uid, env, context=None): + """ Ogone URLS: + + - standard order: POST address for form-based + + @TDETODO: complete me + """ + return { + 'ogone_standard_order_url': 'https://secure.ogone.com/ncol/%s/orderstandard.asp' % env, + 'ogone_direct_order_url': 'https://secure.ogone.com/ncol/%s/orderdirect.asp' % env, + 'ogone_direct_query_url': 'https://secure.ogone.com/ncol/%s/querydirect.asp' % env, + 'ogone_afu_agree_url': 'https://secure.ogone.com/ncol/%s/AFU_agree.asp' % env, + } + + _columns = { + 'ogone_pspid': fields.char('PSPID', required_if_provider='ogone'), + 'ogone_userid': fields.char('API User ID', required_if_provider='ogone'), + 'ogone_password': fields.char('API User Password', required_if_provider='ogone'), + 'ogone_shakey_in': fields.char('SHA Key IN', size=32, required_if_provider='ogone'), + 'ogone_shakey_out': fields.char('SHA Key OUT', size=32, required_if_provider='ogone'), + } + + def _ogone_generate_shasign(self, acquirer, inout, values): + """ Generate the shasign for incoming or outgoing communications. + + :param browse acquirer: the payment.acquirer browse record. It should + have a shakey in shaky out + :param string inout: 'in' (openerp contacting ogone) or 'out' (ogone + contacting openerp). In this last case only some + fields should be contained (see e-Commerce basic) + :param dict values: transaction values + + :return string: shasign + """ + assert inout in ('in', 'out') + assert acquirer.name == 'ogone' + key = getattr(acquirer, 'ogone_shakey_' + inout) + + def filter_key(key): + if inout == 'in': + return True + else: + keys = "ORDERID CURRENCY AMOUNT PM ACCEPTANCE STATUS CARDNO ALIAS ED CN TRXDATE PAYID NCERROR BRAND ECI IP COMPLUS".split() + return key.upper() in keys + + items = sorted((k.upper(), v) for k, v in values.items()) + sign = ''.join('%s=%s%s' % (k, v, key) for k, v in items if v and filter_key(k)) + shasign = sha1(sign).hexdigest() + return shasign + + def ogone_form_generate_values(self, cr, uid, id, partner_values, tx_values, context=None): + base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url') + acquirer = self.browse(cr, uid, id, context=context) + + ogone_tx_values = dict(tx_values) + temp_ogone_tx_values = { + 'PSPID': acquirer.ogone_pspid, + 'ORDERID': tx_values['reference'], + 'AMOUNT': '%d' % int(float_round(tx_values['amount'], 2) * 100), + 'CURRENCY': tx_values['currency'] and tx_values['currency'].name or '', + 'LANGUAGE': partner_values['lang'], + 'CN': partner_values['name'], + 'EMAIL': partner_values['email'], + 'OWNERZIP': partner_values['zip'], + 'OWNERADDRESS': partner_values['address'], + 'OWNERTOWN': partner_values['city'], + 'OWNERCTY': partner_values['country'] and partner_values['country'].name or '', + 'OWNERTELNO': partner_values['phone'], + 'ACCEPTURL': '%s' % urlparse.urljoin(base_url, OgoneController._accept_url), + 'DECLINEURL': '%s' % urlparse.urljoin(base_url, OgoneController._decline_url), + 'EXCEPTIONURL': '%s' % urlparse.urljoin(base_url, OgoneController._exception_url), + 'CANCELURL': '%s' % urlparse.urljoin(base_url, OgoneController._cancel_url), + } + if ogone_tx_values.get('return_url'): + temp_ogone_tx_values['PARAMPLUS'] = 'return_url=%s' % ogone_tx_values.pop('return_url') + shasign = self._ogone_generate_shasign(acquirer, 'in', temp_ogone_tx_values) + temp_ogone_tx_values['SHASIGN'] = shasign + ogone_tx_values.update(temp_ogone_tx_values) + return partner_values, ogone_tx_values + + def ogone_get_form_action_url(self, cr, uid, id, context=None): + acquirer = self.browse(cr, uid, id, context=context) + return self._get_ogone_urls(cr, uid, acquirer.env, context=context)['ogone_standard_order_url'] + + +class PaymentTxOgone(osv.Model): + _inherit = 'payment.transaction' + # ogone status + _ogone_valid_tx_status = [5, 9] + _ogone_wait_tx_status = [41, 50, 51, 52, 55, 56, 91, 92, 99] + _ogone_pending_tx_status = [46] # 3DS HTML response + _ogone_cancel_tx_status = [1] + + _columns = { + 'ogone_3ds': fields.boolean('3DS Activated'), + 'ogone_3ds_html': fields.html('3DS HTML'), + 'ogone_complus': fields.char('Complus'), + 'ogone_payid': fields.char('PayID', help='Payment ID, generated by Ogone') + } + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + def _ogone_form_get_tx_from_data(self, cr, uid, data, context=None): + """ Given a data dict coming from ogone, verify it and find the related + transaction record. """ + reference, pay_id, shasign = data.get('orderID'), data.get('PAYID'), data.get('SHASIGN') + if not reference or not pay_id or not shasign: + error_msg = 'Ogone: received data with missing reference (%s) or pay_id (%s) or shashign (%s)' % (reference, pay_id, shasign) + _logger.error(error_msg) + raise ValidationError(error_msg) + + # find tx -> @TDENOTE use paytid ? + tx_ids = self.search(cr, uid, [('reference', '=', reference)], context=context) + if not tx_ids or len(tx_ids) > 1: + error_msg = 'Ogone: received data for reference %s' % (reference) + if not tx_ids: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.error(error_msg) + raise ValidationError(error_msg) + tx = self.pool['payment.transaction'].browse(cr, uid, tx_ids[0], context=context) + + # verify shasign + shasign_check = self.pool['payment.acquirer']._ogone_generate_shasign(tx.acquirer_id, 'out', data) + if shasign_check.upper() != shasign.upper(): + error_msg = 'Ogone: invalid shasign, received %s, computed %s, for data %s' % (shasign, shasign_check, data) + _logger.error(error_msg) + raise ValidationError(error_msg) + + return tx + + def _ogone_form_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + + # TODO: txn_id: shoudl be false at draft, set afterwards, and verified with txn details + if tx.acquirer_reference and data.get('PAYID') != tx.acquirer_reference: + invalid_parameters.append(('PAYID', data.get('PAYID'), tx.acquirer_reference)) + # check what is buyed + if float_compare(float(data.get('amount', '0.0')), tx.amount, 2) != 0: + invalid_parameters.append(('amount', data.get('amount'), '%.2f' % tx.amount)) + if data.get('currency') != tx.currency_id.name: + invalid_parameters.append(('currency', data.get('currency'), tx.currency_id.name)) + + return invalid_parameters + + def _ogone_form_validate(self, cr, uid, tx, data, context=None): + if tx.state == 'done': + _logger.warning('Ogone: trying to validate an already validated tx (ref %s)' % tx.reference) + return True + + status = int(data.get('STATUS', '0')) + if status in self._ogone_valid_tx_status: + tx.write({ + 'state': 'done', + 'date_validate': data['TRXDATE'], + 'acquirer_reference': data['PAYID'], + }) + return True + elif status in self._ogone_cancel_tx_status: + tx.write({ + 'state': 'cancel', + 'acquirer_reference': data.get('PAYID'), + }) + elif status in self._ogone_pending_tx_status: + tx.write({ + 'state': 'pending', + 'acquirer_reference': data.get('PAYID'), + }) + else: + error = 'Ogone: feedback error: %(error_str)s\n\n%(error_code)s: %(error_msg)s' % { + 'error_str': data.get('NCERROR'), + 'error_code': data.get('NCERRORPLUS'), + 'error_msg': ogone.OGONE_ERROR_MAP.get(data.get('NCERRORPLUS')), + } + _logger.info(error) + tx.write({ + 'state': 'error', + 'state_message': error, + 'acquirer_reference': data.get('PAYID'), + }) + return False + + # -------------------------------------------------- + # S2S RELATED METHODS + # -------------------------------------------------- + + def ogone_s2s_create_alias(self, cr, uid, id, values, context=None): + """ Purpose: create an alias via batch """ + tx = self.browse(cr, uid, id, context=context) + assert tx.type == 'server2server', 'Calling s2s dedicated method for a %s acquirer' % tx.type + alias = 'OPENERP-%d-%d' % (tx.partner_id.id, tx.id) + + expiry_date = '%s%s' % (values['expiry_date_mm'], values['expiry_date_yy'][2:]) + line = 'ADDALIAS;%(alias)s;%(holder_name)s;%(number)s;%(expiry_date)s;%(brand)s;%(pspid)s' + line = line % dict(values, alias=alias, expiry_date=expiry_date, pspid=tx.acquirer_id.ogone_pspid) + + tx_data = { + 'FILE_REFERENCE': 'OPENERP-NEW-ALIAS-%s' % time.time(), # something unique, + 'TRANSACTION_CODE': 'ATR', + 'OPERATION': 'SAL', + 'NB_PAYMENTS': 1, # even if we do not actually have any payment, ogone want it to not be 0 + 'FILE': line, + 'REPLY_TYPE': 'XML', + 'PSPID': tx.acquirer_id.ogone_pspid, + 'USERID': tx.acquirer_id.ogone_userid, + 'PSWD': tx.acquirer_id.ogone_password, + 'PROCESS_MODE': 'CHECKANDPROCESS', + } + + # TODO: fix URL computation + request = urllib2.Request(tx.acquirer_id.ogone_afu_agree_url, urlencode(tx_data)) + result = urllib2.urlopen(request).read() + + try: + tree = objectify.fromstring(result) + except etree.XMLSyntaxError: + _logger.exception('Invalid xml response from ogone') + return None + + error_code = error_str = None + if hasattr(tree, 'PARAMS_ERROR'): + error_code = tree.NCERROR.text + error_str = 'PARAMS ERROR: %s' % (tree.PARAMS_ERROR.text or '',) + else: + node = tree.FORMAT_CHECK + error_node = getattr(node, 'FORMAT_CHECK_ERROR', None) + if error_node is not None: + error_code = error_node.NCERROR.text + error_str = 'CHECK ERROR: %s' % (error_node.ERROR.text or '',) + + if error_code: + error_msg = ogone.OGONE_ERROR_MAP.get(error_code) + error = '%s\n\n%s: %s' % (error_str, error_code, error_msg) + _logger.error(error) + raise Exception(error) # TODO specific exception + + tx.write({'partner_reference': alias}) + return True + + def ogone_s2s_generate_values(self, cr, uid, id, custom_values, context=None): + tx = self.browse(cr, uid, id, context=context) + tx_data = { + 'PSPID': tx.acquirer_id.ogone_pspid, + 'USERID': tx.acquirer_id.ogone_userid, + 'PSWD': tx.acquirer_id.ogone_password, + 'OrderID': tx.reference, + 'amount': '%d' % int(float_round(tx.amount, 2) * 100), # tde check amount or str * 100 ? + 'CURRENCY': tx.currency_id.name, + 'LANGUAGE': tx.partner_lang, + 'OPERATION': 'SAL', + 'ECI': 2, # Recurring (from MOTO) + 'ALIAS': tx.partner_reference, + 'RTIMEOUT': 30, + } + if custom_values.get('ogone_cvc'): + tx_data['CVC'] = custom_values.get('ogone_cvc') + if custom_values.pop('ogone_3ds', None): + tx_data.update({ + 'FLAG3D': 'Y', # YEAH!! + }) + if custom_values.get('ogone_complus'): + tx_data['COMPLUS'] = custom_values.get('ogone_complus') + if custom_values.get('ogone_accept_url'): + pass + + shasign = self.pool['payment.acquirer']._ogone_generate_shasign(tx.acquirer_id, 'in', tx_data) + tx_data['SHASIGN'] = shasign + return tx_data + + def ogone_s2s_feedback(self, cr, uid, data, context=None): + pass + + def ogone_s2s_execute(self, cr, uid, id, values, context=None): + tx = self.browse(cr, uid, id, context=context) + + tx_data = self.ogone_s2s_generate_values(cr, uid, id, values, context=context) + _logger.info('Generated Ogone s2s data %s', pformat(tx_data)) # debug + + request = urllib2.Request(tx.acquirer_id.ogone_direct_order_url, urlencode(tx_data)) + result = urllib2.urlopen(request).read() + _logger.info('Contacted Ogone direct order; result %s', result) # debug + + tree = objectify.fromstring(result) + payid = tree.get('PAYID') + + query_direct_data = dict( + PSPID=tx.acquirer_id.ogone_pspid, + USERID=tx.acquirer_id.ogone_userid, + PSWD=tx.acquirer_id.ogone_password, + ID=payid, + ) + query_direct_url = 'https://secure.ogone.com/ncol/%s/querydirect.asp' % (tx.acquirer_id.env,) + + tries = 2 + tx_done = False + tx_status = False + while not tx_done or tries > 0: + try: + tree = objectify.fromstring(result) + except etree.XMLSyntaxError: + # invalid response from ogone + _logger.exception('Invalid xml response from ogone') + raise + + # see https://secure.ogone.com/ncol/paymentinfos1.asp + VALID_TX = [5, 9] + WAIT_TX = [41, 50, 51, 52, 55, 56, 91, 92, 99] + PENDING_TX = [46] # 3DS HTML response + # other status are errors... + + status = tree.get('STATUS') + if status == '': + status = None + else: + status = int(status) + + if status in VALID_TX: + tx_status = True + tx_done = True + + elif status in PENDING_TX: + html = str(tree.HTML_ANSWER) + tx_data.update(ogone_3ds_html=html.decode('base64')) + tx_status = False + tx_done = True + + elif status in WAIT_TX: + time.sleep(1500) + + request = urllib2.Request(query_direct_url, urlencode(query_direct_data)) + result = urllib2.urlopen(request).read() + _logger.debug('Contacted Ogone query direct; result %s', result) + + else: + error_code = tree.get('NCERROR') + if not ogone.retryable(error_code): + error_str = tree.get('NCERRORPLUS') + error_msg = ogone.OGONE_ERROR_MAP.get(error_code) + error = 'ERROR: %s\n\n%s: %s' % (error_str, error_code, error_msg) + _logger.info(error) + raise Exception(error) + + tries = tries - 1 + + if not tx_done and tries == 0: + raise Exception('Cannot get transaction status...') + + return tx_status diff --git a/addons/payment_acquirer_ogone/static/description/icon.png b/addons/payment_acquirer_ogone/static/description/icon.png new file mode 100644 index 00000000000..4151a633c79 Binary files /dev/null and b/addons/payment_acquirer_ogone/static/description/icon.png differ diff --git a/addons/payment_acquirer_ogone/static/src/img/ogone_icon.png b/addons/payment_acquirer_ogone/static/src/img/ogone_icon.png new file mode 100644 index 00000000000..f8274724529 Binary files /dev/null and b/addons/payment_acquirer_ogone/static/src/img/ogone_icon.png differ diff --git a/addons/payment_acquirer_ogone/tests/__init__.py b/addons/payment_acquirer_ogone/tests/__init__.py new file mode 100644 index 00000000000..5b920121911 --- /dev/null +++ b/addons/payment_acquirer_ogone/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +# from . import test_ogone + +checks = [ + # test_ogone, +] diff --git a/addons/payment_acquirer_ogone/tests/test_ogone.py b/addons/payment_acquirer_ogone/tests/test_ogone.py new file mode 100644 index 00000000000..be1f534ea74 --- /dev/null +++ b/addons/payment_acquirer_ogone/tests/test_ogone.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- + +from lxml import objectify +import time +import urlparse + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer.tests.common import PaymentAcquirerCommon +from openerp.addons.payment_acquirer_ogone.controllers.main import OgoneController +from openerp.tools import mute_logger + + +class OgonePayment(PaymentAcquirerCommon): + + def setUp(self): + super(OgonePayment, self).setUp() + cr, uid = self.cr, self.uid + self.base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url') + + # get the adyen account + model, self.ogone_id = self.registry('ir.model.data').get_object_reference(cr, uid, 'payment_acquirer_ogone', 'payment_acquirer_ogone') + + def test_10_ogone_form_render(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid thing + ogone = self.payment_acquirer.browse(self.cr, self.uid, self.ogone_id, None) + self.assertEqual(ogone.env, 'test', 'test without test env') + + # ---------------------------------------- + # Test: button direct rendering + shasign + # ---------------------------------------- + + form_values = { + 'PSPID': 'dummy', + 'ORDERID': 'test_ref0', + 'AMOUNT': '1', + 'CURRENCY': 'EUR', + 'LANGUAGE': 'en_US', + 'CN': 'Norbert Buyer', + 'EMAIL': 'norbert.buyer@example.com', + 'OWNERZIP': '1000', + 'OWNERADDRESS': 'Huge Street 2/543', + 'OWNERCTY': 'Belgium', + 'OWNERTOWN': 'Sin City', + 'OWNERTELNO': '0032 12 34 56 78', + 'SHASIGN': '815f67b8ff70d234ffcf437c13a9fa7f807044cc', + 'ACCEPTURL': '%s' % urlparse.urljoin(self.base_url, OgoneController._accept_url), + 'DECLINEURL': '%s' % urlparse.urljoin(self.base_url, OgoneController._decline_url), + 'EXCEPTIONURL': '%s' % urlparse.urljoin(self.base_url, OgoneController._exception_url), + 'CANCELURL': '%s' % urlparse.urljoin(self.base_url, OgoneController._cancel_url), + } + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.ogone_id, + 'test_ref0', 0.01, self.currency_euro_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://secure.ogone.com/ncol/test/orderstandard.asp', 'ogone: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'ogone: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + # ---------------------------------------- + # Test2: button using tx + validation + # ---------------------------------------- + + # create a new draft tx + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 0.01, + 'acquirer_id': self.ogone_id, + 'currency_id': self.currency_euro_id, + 'reference': 'test_ref0', + 'partner_id': self.buyer_id, + }, context=context + ) + # render the button + res = self.payment_acquirer.render( + cr, uid, self.ogone_id, + 'should_be_erased', 0.01, self.currency_euro, + tx_id=tx_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://secure.ogone.com/ncol/test/orderstandard.asp', 'ogone: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'ogone: wrong value for form input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + @mute_logger('openerp.addons.payment_acquirer_ogone.models.ogone', 'ValidationError') + def test_20_ogone_form_management(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid thing + ogone = self.payment_acquirer.browse(self.cr, self.uid, self.ogone_id, None) + self.assertEqual(ogone.env, 'test', 'test without test env') + + # typical data posted by ogone after client has successfully paid + ogone_post_data = { + 'orderID': u'test_ref_2', + 'STATUS': u'9', + 'CARDNO': u'XXXXXXXXXXXX0002', + 'PAYID': u'25381582', + 'CN': u'Norbert Buyer', + 'NCERROR': u'0', + 'TRXDATE': u'11/15/13', + 'IP': u'85.201.233.72', + 'BRAND': u'VISA', + 'ACCEPTANCE': u'test123', + 'currency': u'EUR', + 'amount': u'1.95', + 'SHASIGN': u'7B7B0ED9CBC4A85543A9073374589033A62A05A5', + 'ED': u'0315', + 'PM': u'CreditCard' + } + + # should raise error about unknown tx + with self.assertRaises(ValidationError): + self.payment_transaction.ogone_form_feedback(cr, uid, ogone_post_data, context=context) + + # create tx + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 1.95, + 'acquirer_id': self.ogone_id, + 'currency_id': self.currency_euro_id, + 'reference': 'test_ref_2', + 'partner_name': 'Norbert Buyer', + 'partner_country_id': self.country_france_id, + }, context=context + ) + # validate it + self.payment_transaction.ogone_form_feedback(cr, uid, ogone_post_data, context=context) + # check state + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'done', 'ogone: validation did not put tx into done state') + self.assertEqual(tx.ogone_payid, ogone_post_data.get('PAYID'), 'ogone: validation did not update tx payid') + + # reset tx + tx.write({'state': 'draft', 'date_validate': False, 'ogone_payid': False}) + + # now ogone post is ok: try to modify the SHASIGN + ogone_post_data['SHASIGN'] = 'a4c16bae286317b82edb49188d3399249a784691' + with self.assertRaises(ValidationError): + self.payment_transaction.ogone_form_feedback(cr, uid, ogone_post_data, context=context) + + # simulate an error + ogone_post_data['STATUS'] = 2 + ogone_post_data['SHASIGN'] = 'a4c16bae286317b82edb49188d3399249a784691' + self.payment_transaction.ogone_form_feedback(cr, uid, ogone_post_data, context=context) + # check state + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'error', 'ogone: erroneous validation did not put tx into error state') + + def test_30_ogone_s2s(self): + test_ref = 'test_ref_%.15f' % time.time() + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid thing + ogone = self.payment_acquirer.browse(self.cr, self.uid, self.ogone_id, None) + self.assertEqual(ogone.env, 'test', 'test without test env') + + # create a new draft tx + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 0.01, + 'acquirer_id': self.ogone_id, + 'currency_id': self.currency_euro_id, + 'reference': test_ref, + 'partner_id': self.buyer_id, + 'type': 'server2server', + }, context=context + ) + + # create an alias + res = self.payment_transaction.ogone_s2s_create_alias( + cr, uid, tx_id, { + 'expiry_date_mm': '01', + 'expiry_date_yy': '2015', + 'holder_name': 'Norbert Poilu', + 'number': '4000000000000002', + 'brand': 'VISA', + }, context=context) + + # check an alias is set, containing at least OPENERP + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertIn('OPENERP', tx.partner_reference, 'ogone: wrong partner reference after creating an alias') + + res = self.payment_transaction.ogone_s2s_execute(cr, uid, tx_id, {}, context=context) + # print res + + +# { +# 'orderID': u'reference', +# 'STATUS': u'9', +# 'CARDNO': u'XXXXXXXXXXXX0002', +# 'PAYID': u'24998692', +# 'CN': u'Norbert Poilu', +# 'NCERROR': u'0', +# 'TRXDATE': u'11/05/13', +# 'IP': u'85.201.233.72', +# 'BRAND': u'VISA', +# 'ACCEPTANCE': u'test123', +# 'currency': u'EUR', +# 'amount': u'1.95', +# 'SHASIGN': u'EFDC56879EF7DE72CCF4B397076B5C9A844CB0FA', +# 'ED': u'0314', +# 'PM': u'CreditCard' +# } diff --git a/addons/payment_acquirer_ogone/views/ogone.xml b/addons/payment_acquirer_ogone/views/ogone.xml new file mode 100644 index 00000000000..6cb06507ff1 --- /dev/null +++ b/addons/payment_acquirer_ogone/views/ogone.xml @@ -0,0 +1,53 @@ + + + + + + + + diff --git a/addons/payment_acquirer_ogone/views/payment_acquirer.xml b/addons/payment_acquirer_ogone/views/payment_acquirer.xml new file mode 100644 index 00000000000..8a64f801dce --- /dev/null +++ b/addons/payment_acquirer_ogone/views/payment_acquirer.xml @@ -0,0 +1,42 @@ + + + + + + acquirer.form.ogone + payment.acquirer + + + + + + + + + + + + + + + + acquirer.transaction.form.ogone + payment.transaction + + + + + + + + + + + + + + + + + + diff --git a/addons/payment_acquirer_paypal/__init__.py b/addons/payment_acquirer_paypal/__init__.py new file mode 100644 index 00000000000..dde6f25c728 --- /dev/null +++ b/addons/payment_acquirer_paypal/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2013-Today OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import models +import controllers diff --git a/addons/payment_acquirer_paypal/__openerp__.py b/addons/payment_acquirer_paypal/__openerp__.py new file mode 100644 index 00000000000..d7ba75d0a7b --- /dev/null +++ b/addons/payment_acquirer_paypal/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Paypal Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Paypal Implementation', + 'version': '1.0', + 'description': """Paypal Payment Acquirer""", + 'author': 'OpenERP SA', + 'depends': ['payment_acquirer'], + 'data': [ + 'views/paypal.xml', + 'views/payment_acquirer.xml', + 'data/paypal.xml', + ], + 'installable': True, +} diff --git a/addons/payment_acquirer_paypal/controllers/__init__.py b/addons/payment_acquirer_paypal/controllers/__init__.py new file mode 100644 index 00000000000..bbd183e955b --- /dev/null +++ b/addons/payment_acquirer_paypal/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import main diff --git a/addons/payment_acquirer_paypal/controllers/main.py b/addons/payment_acquirer_paypal/controllers/main.py new file mode 100644 index 00000000000..d5ec93909af --- /dev/null +++ b/addons/payment_acquirer_paypal/controllers/main.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- + +try: + import simplejson as json +except ImportError: + import json +import logging +import pprint +import urllib +import urllib2 + +from openerp.addons.web import http +from openerp.addons.web.http import request +from openerp.addons.website.models import website + +_logger = logging.getLogger(__name__) + + +class PaypalController(http.Controller): + _notify_url = '/payment/paypal/ipn/' + _return_url = '/payment/paypal/dpn/' + _cancel_url = '/payment/paypal/cancel/' + + def _get_return_url(self, **post): + """ Extract the return URL from the data coming from paypal. """ + return_url = post.pop('return_url', '') + if not return_url: + custom = json.loads(post.pop('custom', '{}')) + return_url = custom.get('return_url', '/') + return return_url + + def paypal_validate_data(self, **post): + """ Paypal IPN: three steps validation to ensure data correctness + + - step 1: return an empty HTTP 200 response -> will be done at the end + by returning '' + - step 2: POST the complete, unaltered message back to Paypal (preceded + by cmd=_notify-validate), with same encoding + - step 3: paypal send either VERIFIED or INVALID (single word) + + Once data is validated, process it. """ + res = False + new_post = dict(post, cmd='_notify-validate') + urequest = urllib2.Request("https://www.sandbox.paypal.com/cgi-bin/webscr", urllib.urlencode(new_post)) + uopen = urllib2.urlopen(urequest) + resp = uopen.read() + if resp == 'VERIFIED': + _logger.info('Paypal: validated data') + cr, uid, context = request.cr, request.uid, request.context + res = request.registry['payment.transaction'].form_feedback(cr, uid, post, 'paypal', context=context) + elif resp == 'INVALID': + _logger.warning('Paypal: answered INVALID on data verification') + else: + _logger.warning('Paypal: unrecognized paypal answer, received %s instead of VERIFIED or INVALID' % resp.text) + return res + + @website.route([ + '/payment/paypal/ipn/', + ], type='http', auth='public', methods=['POST']) + def paypal_ipn(self, **post): + """ Paypal IPN. """ + _logger.info('Beginning Paypal IPN form_feedback with post data %s', pprint.pformat(post)) # debug + self.paypal_validate_data(**post) + return '' + + @website.route([ + '/payment/paypal/dpn', + ], type='http', auth="public", methods=['POST']) + def paypal_dpn(self, **post): + """ Paypal DPN """ + _logger.info('Beginning Paypal DPN form_feedback with post data %s', pprint.pformat(post)) # debug + return_url = self._get_return_url(**post) + self.paypal_validate_data(**post) + return request.redirect(return_url) + + @website.route([ + '/payment/paypal/cancel', + ], type='http', auth="public") + def paypal_cancel(self, **post): + """ When the user cancels its Paypal payment: GET on this route """ + cr, uid, context = request.cr, request.uid, request.context + _logger.info('Beginning Paypal cancel with post data %s', pprint.pformat(post)) # debug + return_url = self._get_return_url(**post) + return request.redirect(return_url) diff --git a/addons/payment_acquirer_paypal/data/paypal.xml b/addons/payment_acquirer_paypal/data/paypal.xml new file mode 100644 index 00000000000..55245804975 --- /dev/null +++ b/addons/payment_acquirer_paypal/data/paypal.xml @@ -0,0 +1,19 @@ + + + + + + paypal + + test + You will be redirected to the Paypal website after cliking on the payment button.

]]>
+ https://www.sandbox.paypal.com/cgi-bin/webscr + dummy + dummy + dummy + dummy +
+ +
+
diff --git a/addons/payment_acquirer_paypal/doc/changelog.rst b/addons/payment_acquirer_paypal/doc/changelog.rst new file mode 100644 index 00000000000..d0c24af384d --- /dev/null +++ b/addons/payment_acquirer_paypal/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-3)` +---------------- + +- Module creation \ No newline at end of file diff --git a/addons/payment_acquirer_paypal/doc/index.rst b/addons/payment_acquirer_paypal/doc/index.rst new file mode 100644 index 00000000000..85028ed0d3e --- /dev/null +++ b/addons/payment_acquirer_paypal/doc/index.rst @@ -0,0 +1,14 @@ +Payment module documentation +============================ + +Payment documentation topics +'''''''''''''''''''''''''''' + + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/payment_acquirer_paypal/models/__init__.py b/addons/payment_acquirer_paypal/models/__init__.py new file mode 100644 index 00000000000..a1fe670f56f --- /dev/null +++ b/addons/payment_acquirer_paypal/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import paypal diff --git a/addons/payment_acquirer_paypal/models/paypal.py b/addons/payment_acquirer_paypal/models/paypal.py new file mode 100644 index 00000000000..32e17711bef --- /dev/null +++ b/addons/payment_acquirer_paypal/models/paypal.py @@ -0,0 +1,340 @@ +# -*- coding: utf-'8' "-*-" + +import base64 +try: + import simplejson as json +except ImportError: + import json +import logging +import urlparse +import urllib +import urllib2 + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer_paypal.controllers.main import PaypalController +from openerp.osv import osv, fields +from openerp.tools.float_utils import float_compare + +_logger = logging.getLogger(__name__) + + +class AcquirerPaypal(osv.Model): + _inherit = 'payment.acquirer' + + def _get_paypal_urls(self, cr, uid, env, context=None): + """ Paypal URLS """ + if env == 'prod': + return { + 'paypal_form_url': 'https://www.sandbox.paypal.com/cgi-bin/webscr', + 'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token', + } + else: + return { + 'paypal_form_url': 'https://www.sandbox.paypal.com/cgi-bin/webscr', + 'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token', + } + + _columns = { + 'paypal_email_id': fields.char('Email ID', required_if_provider='paypal'), + 'paypal_seller_id': fields.char('Seller ID', required_if_provider='paypal'), + 'paypal_use_ipn': fields.boolean('Use IPN'), + # Server 2 server + 'paypal_api_enabled': fields.boolean('Use Rest API'), + 'paypal_api_username': fields.char('Rest API Username'), + 'paypal_api_password': fields.char('Rest API Password'), + 'paypal_api_access_token': fields.char('Access Token'), + 'paypal_api_access_token_validity': fields.datetime('Access Token Validity'), + } + + _defaults = { + 'paypal_use_ipn': True, + 'fees_active': False, + 'fees_dom_fixed': 0.35, + 'fees_dom_var': 3.4, + 'fees_int_fixed': 0.35, + 'fees_int_var': 3.9, + 'paypal_api_enabled': False, + } + + def paypal_compute_fees(self, cr, uid, id, amount, currency_id, country_id, context=None): + """ Compute paypal fees. + + :param float amount: the amount to pay + :param integer country_id: an ID of a res.country, or None. This is + the customer's country, to be compared to + the acquirer company country. + :return float fees: computed fees + """ + acquirer = self.browse(cr, uid, id, context=context) + if not acquirer.fees_active: + return 0.0 + country = self.pool['res.country'].browse(cr, uid, country_id, context=context) + if country and acquirer.company_id.country_id.id == country.id: + fees = amount * (1 + acquirer.fees_dom_var / 100.0) + acquirer.fees_dom_fixed - amount + else: + fees = amount * (1 + acquirer.fees_int_var / 100.0) + acquirer.fees_int_fixed - amount + return fees + + def paypal_form_generate_values(self, cr, uid, id, partner_values, tx_values, context=None): + base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url') + acquirer = self.browse(cr, uid, id, context=context) + + paypal_tx_values = dict(tx_values) + paypal_tx_values.update({ + 'cmd': '_xclick', + 'business': acquirer.paypal_email_id, + 'item_name': tx_values['reference'], + 'item_number': tx_values['reference'], + 'amount': tx_values['amount'], + 'currency_code': tx_values['currency'] and tx_values['currency'].name or '', + 'address1': partner_values['address'], + 'city': partner_values['city'], + 'country': partner_values['country'] and partner_values['country'].name or '', + 'email': partner_values['email'], + 'zip': partner_values['zip'], + 'first_name': partner_values['first_name'], + 'last_name': partner_values['last_name'], + 'return': '%s' % urlparse.urljoin(base_url, PaypalController._return_url), + 'notify_url': '%s' % urlparse.urljoin(base_url, PaypalController._notify_url), + 'cancel_return': '%s' % urlparse.urljoin(base_url, PaypalController._cancel_url), + }) + if acquirer.fees_active: + paypal_tx_values['handling'] = '%.2f' % paypal_tx_values.pop('fees', 0.0) + if paypal_tx_values.get('return_url'): + paypal_tx_values['custom'] = json.dumps({'return_url': '%s' % paypal_tx_values.pop('return_url')}) + return partner_values, paypal_tx_values + + def paypal_get_form_action_url(self, cr, uid, id, context=None): + acquirer = self.browse(cr, uid, id, context=context) + return self._get_paypal_urls(cr, uid, acquirer.env, context=context)['paypal_form_url'] + + def _paypal_s2s_get_access_token(self, cr, uid, ids, context=None): + """ + Note: see # see http://stackoverflow.com/questions/2407126/python-urllib2-basic-auth-problem + for explanation why we use Authorization header instead of urllib2 + password manager + """ + res = dict.fromkeys(ids, False) + parameters = urllib.urlencode({'grant_type': 'client_credentials'}) + request = urllib2.Request('https://api.sandbox.paypal.com/v1/oauth2/token', parameters) + # add other headers (https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/) + request.add_header('Accept', 'application/json') + request.add_header('Accept-Language', 'en_US') + + for acquirer in self.browse(cr, uid, ids, context=context): + # add authorization header + base64string = base64.encodestring('%s:%s' % ( + acquirer.paypal_api_username, + acquirer.paypal_api_password) + ).replace('\n', '') + request.add_header("Authorization", "Basic %s" % base64string) + + request = urllib2.urlopen(request) + result = request.read() + res[acquirer.id] = json.loads(result).get('access_token') + request.close() + return res + + +class TxPaypal(osv.Model): + _inherit = 'payment.transaction' + + _columns = { + 'paypal_txn_id': fields.char('Transaction ID'), + 'paypal_txn_type': fields.char('Transaction type'), + } + + # -------------------------------------------------- + # FORM RELATED METHODS + # -------------------------------------------------- + + def _paypal_form_get_tx_from_data(self, cr, uid, data, context=None): + reference, txn_id = data.get('item_number'), data.get('txn_id') + if not reference or not txn_id: + error_msg = 'Paypal: received data with missing reference (%s) or txn_id (%s)' % (reference, txn_id) + _logger.error(error_msg) + raise ValidationError(error_msg) + + # find tx -> @TDENOTE use txn_id ? + tx_ids = self.pool['payment.transaction'].search(cr, uid, [('reference', '=', reference)], context=context) + if not tx_ids or len(tx_ids) > 1: + error_msg = 'Paypal: received data for reference %s' % (reference) + if not tx_ids: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.error(error_msg) + raise ValidationError(error_msg) + return self.browse(cr, uid, tx_ids[0], context=context) + + def _paypal_form_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + if data.get('notify_version')[0] != '3.4': + _logger.warning( + 'Received a notification from Paypal with version %s instead of 2.6. This could lead to issues when managing it.' % + data.get('notify_version') + ) + if data.get('test_ipn'): + _logger.warning( + 'Received a notification from Paypal using sandbox' + ), + + # TODO: txn_id: shoudl be false at draft, set afterwards, and verified with txn details + if tx.acquirer_reference and data.get('txn_id') != tx.acquirer_reference: + invalid_parameters.append(('txn_id', data.get('txn_id'), tx.acquirer_reference)) + # check what is buyed + if float_compare(float(data.get('mc_gross', '0.0')), (tx.amount + tx.fees), 2) != 0: + invalid_parameters.append(('mc_gross', data.get('mc_gross'), '%.2f' % tx.amount)) # mc_gross is amount + fees + if data.get('mc_currency') != tx.currency_id.name: + invalid_parameters.append(('mc_currency', data.get('mc_currency'), tx.currency_id.name)) + if 'handling_amount' in data and float_compare(float(data.get('handling_amount')), tx.fees, 2) != 0: + invalid_parameters.append(('handling_amount', data.get('handling_amount'), tx.fees)) + # check buyer + if tx.partner_reference and data.get('payer_id') != tx.partner_reference: + invalid_parameters.append(('payer_id', data.get('payer_id'), tx.partner_reference)) + # check seller + if data.get('receiver_email') != tx.acquirer_id.paypal_email_id: + invalid_parameters.append(('receiver_email', data.get('receiver_email'), tx.acquirer_id.paypal_email_id)) + if data.get('receiver_id') != tx.acquirer_id.paypal_seller_id: + invalid_parameters.append(('receiver_id', data.get('receiver_id'), tx.acquirer_id.paypal_seller_id)) + + return invalid_parameters + + def _paypal_form_validate(self, cr, uid, tx, data, context=None): + status = data.get('payment_status') + data = { + 'acquirer_reference': data.get('txn_id'), + 'paypal_txn_type': data.get('payment_type'), + 'partner_reference': data.get('payer_id') + } + if status in ['Completed', 'Processed']: + _logger.info('Validated Paypal payment for tx %s: set as done' % (tx.reference)) + data.update(state='done', date_validate=data.get('payment_date', fields.datetime.now())) + return tx.write(data) + elif status in ['Pending', 'Expired']: + _logger.info('Received notification for Paypal payment %s: set as pending' % (tx.reference)) + data.update(state='pending', state_message=data.get('pending_reason', '')) + return tx.write(data) + else: + error = 'Received unrecognized status for Paypal payment %s: %s, set as error' % (tx.reference, status) + _logger.info(error) + data.update(state='error', state_message=error) + return tx.write(data) + + # -------------------------------------------------- + # SERVER2SERVER RELATED METHODS + # -------------------------------------------------- + + def _paypal_try_url(self, request, tries=3, context=None): + try: + res = urllib2.urlopen(request) + except urllib2.HTTPError as e: + res = e.read() + e.close() + if tries and res and json.loads(res)['name'] == 'INTERNAL_SERVICE_ERROR': + _logger.warning('Failed contacting Paypal, retrying (%s remaining)' % tries) + return self._paypal_try_url(request, tries=tries - 1, context=context) + raise + except: + raise + + result = res.read() + res.close() + return result + + def _paypal_s2s_send(self, cr, uid, values, cc_values, context=None): + tx_id = self.create(cr, uid, values, context=context) + tx = self.browse(cr, uid, tx_id, context=context) + + headers = { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer %s' % tx.acquirer_id._paypal_s2s_get_access_token()[tx.acquirer_id.id], + } + data = { + 'intent': 'sale', + 'transactions': [{ + 'amount': { + 'total': '%.2f' % tx.amount, + 'currency': tx.currency_id.name, + }, + 'description': tx.reference, + }] + } + if cc_values: + data['payer'] = { + 'payment_method': 'credit_card', + 'funding_instruments': [{ + 'credit_card': { + 'number': cc_values['number'], + 'type': cc_values['brand'], + 'expire_month': cc_values['expiry_mm'], + 'expire_year': cc_values['expiry_yy'], + 'cvv2': cc_values['cvc'], + 'first_name': tx.partner_name, + 'last_name': tx.partner_name, + 'billing_address': { + 'line1': tx.partner_address, + 'city': tx.partner_city, + 'country_code': tx.partner_country_id.code, + 'postal_code': tx.partner_zip, + } + } + }] + } + else: + data['redirect_urls'] = { + 'return_url': 'http://example.com/your_redirect_url/', + 'cancel_url': 'http://example.com/your_cancel_url/', + }, + data['payer'] = { + 'payment_method': 'paypal', + } + data = json.dumps(data) + + request = urllib2.Request('https://api.sandbox.paypal.com/v1/payments/payment', data, headers) + result = self._paypal_try_url(request, tries=3, context=context) + return (tx_id, result) + + def _paypal_s2s_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + return invalid_parameters + + def _paypal_s2s_validate(self, cr, uid, tx, data, context=None): + values = json.loads(data) + status = values.get('state') + if status in ['approved']: + _logger.info('Validated Paypal s2s payment for tx %s: set as done' % (tx.reference)) + tx.write({ + 'state': 'done', + 'date_validate': values.get('udpate_time', fields.datetime.now()), + 'paypal_txn_id': values['id'], + }) + return True + elif status in ['pending', 'expired']: + _logger.info('Received notification for Paypal s2s payment %s: set as pending' % (tx.reference)) + tx.write({ + 'state': 'pending', + # 'state_message': data.get('pending_reason', ''), + 'paypal_txn_id': values['id'], + }) + return True + else: + error = 'Received unrecognized status for Paypal s2s payment %s: %s, set as error' % (tx.reference, status) + _logger.info(error) + tx.write({ + 'state': 'error', + # 'state_message': error, + 'paypal_txn_id': values['id'], + }) + return False + + def _paypal_s2s_get_tx_status(self, cr, uid, tx, context=None): + # TDETODO: check tx.paypal_txn_id is set + headers = { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer %s' % tx.acquirer_id._paypal_s2s_get_access_token()[tx.acquirer_id.id], + } + url = 'https://api.sandbox.paypal.com/v1/payments/payment/%s' % (tx.paypal_txn_id) + request = urllib2.Request(url, headers=headers) + data = self._paypal_try_url(request, tries=3, context=context) + return self.s2s_feedback(cr, uid, tx.id, data, context=context) diff --git a/addons/payment_acquirer_paypal/static/description/icon.png b/addons/payment_acquirer_paypal/static/description/icon.png new file mode 100644 index 00000000000..35528a10508 Binary files /dev/null and b/addons/payment_acquirer_paypal/static/description/icon.png differ diff --git a/addons/payment_acquirer_paypal/static/src/img/paypal_icon.png b/addons/payment_acquirer_paypal/static/src/img/paypal_icon.png new file mode 100644 index 00000000000..9d0534b3fa8 Binary files /dev/null and b/addons/payment_acquirer_paypal/static/src/img/paypal_icon.png differ diff --git a/addons/payment_acquirer_paypal/static/src/img/paypal_logo.png b/addons/payment_acquirer_paypal/static/src/img/paypal_logo.png new file mode 100644 index 00000000000..4803ff5d1ef Binary files /dev/null and b/addons/payment_acquirer_paypal/static/src/img/paypal_logo.png differ diff --git a/addons/payment_acquirer_paypal/tests/__init__.py b/addons/payment_acquirer_paypal/tests/__init__.py new file mode 100644 index 00000000000..4c38b20e76a --- /dev/null +++ b/addons/payment_acquirer_paypal/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +# from . import test_paypal + +checks = [ + # test_paypal, +] diff --git a/addons/payment_acquirer_paypal/tests/test_paypal.py b/addons/payment_acquirer_paypal/tests/test_paypal.py new file mode 100644 index 00000000000..00dbe869e14 --- /dev/null +++ b/addons/payment_acquirer_paypal/tests/test_paypal.py @@ -0,0 +1,243 @@ +# -*- coding: utf-8 -*- + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.addons.payment_acquirer.tests.common import PaymentAcquirerCommon +from openerp.addons.payment_acquirer_paypal.controllers.main import PaypalController +from openerp.osv.orm import except_orm +from openerp.tools import mute_logger + +from lxml import objectify +import urlparse + + +class PaypalCommon(PaymentAcquirerCommon): + + def setUp(self): + super(PaypalCommon, self).setUp() + cr, uid = self.cr, self.uid + self.base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url') + + # get the paypal account + model, self.paypal_id = self.registry('ir.model.data').get_object_reference(cr, uid, 'payment_acquirer_paypal', 'payment_acquirer_paypal') + # tde+seller@openerp.com - tde+buyer@openerp.com - tde+buyer-it@openerp.com + + # some CC + self.amex = (('378282246310005', '123'), ('371449635398431', '123')) + self.amex_corporate = (('378734493671000', '123')) + self.autralian_bankcard = (('5610591081018250', '123')) + self.dinersclub = (('30569309025904', '123'), ('38520000023237', '123')) + self.discover = (('6011111111111117', '123'), ('6011000990139424', '123')) + self.jcb = (('3530111333300000', '123'), ('3566002020360505', '123')) + self.mastercard = (('5555555555554444', '123'), ('5105105105105100', '123')) + self.visa = (('4111111111111111', '123'), ('4012888888881881', '123'), ('4222222222222', '123')) + self.dankord_pbs = (('76009244561', '123'), ('5019717010103742', '123')) + self.switch_polo = (('6331101999990016', '123')) + + +class PaypalServer2Server(PaypalCommon): + + def test_00_tx_management(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + paypal = self.payment_acquirer.browse(self.cr, self.uid, self.paypal_id, None) + self.assertEqual(paypal.env, 'test', 'test without test env') + + res = self.payment_acquirer._paypal_s2s_get_access_token(cr, uid, [self.paypal_id], context=context) + self.assertTrue(res[self.paypal_id] is not False, 'paypal: did not generate access token') + + tx_id = self.payment_transaction.s2s_create( + cr, uid, { + 'amount': 0.01, + 'acquirer_id': self.paypal_id, + 'currency_id': self.currency_euro_id, + 'reference': 'test_reference', + 'partner_id': self.buyer_id, + }, { + 'number': self.visa[0][0], + 'cvc': self.visa[0][1], + 'brand': 'visa', + 'expiry_mm': 9, + 'expiry_yy': 2015, + }, context=context + ) + + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertTrue(tx.paypal_txn_id is not False, 'paypal: txn_id should have been set after s2s request') + + self.payment_transaction.write(cr, uid, tx_id, {'paypal_txn_id': False}, context=context) + + +class PaypalForm(PaypalCommon): + + def test_10_paypal_form_render(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + self.payment_acquirer.write(cr, uid, self.paypal_id, {'fees_active': False}, context) + paypal = self.payment_acquirer.browse(cr, uid, self.paypal_id, context) + self.assertEqual(paypal.env, 'test', 'test without test env') + + # ---------------------------------------- + # Test: button direct rendering + # ---------------------------------------- + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.paypal_id, + 'test_ref0', 0.01, self.currency_euro_id, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + form_values = { + 'cmd': '_xclick', + 'business': 'tde+paypal-facilitator@openerp.com', + 'item_name': 'test_ref0', + 'item_number': 'test_ref0', + 'first_name': 'Buyer', + 'last_name': 'Norbert', + 'amount': '0.01', + 'currency_code': 'EUR', + 'address1': 'Huge Street 2/543', + 'city': 'Sin City', + 'zip': '1000', + 'country': 'Belgium', + 'email': 'norbert.buyer@example.com', + 'return': '%s' % urlparse.urljoin(self.base_url, PaypalController._return_url), + 'notify_url': '%s' % urlparse.urljoin(self.base_url, PaypalController._notify_url), + 'cancel_return': '%s' % urlparse.urljoin(self.base_url, PaypalController._cancel_url), + } + + # check form result + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://www.sandbox.paypal.com/cgi-bin/webscr', 'paypal: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['submit']: + continue + self.assertEqual( + form_input.get('value'), + form_values[form_input.get('name')], + 'paypal: wrong value for input %s: received %s instead of %s' % (form_input.get('name'), form_input.get('value'), form_values[form_input.get('name')]) + ) + + def test_11_paypal_form_with_fees(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + paypal = self.payment_acquirer.browse(self.cr, self.uid, self.paypal_id, None) + self.assertEqual(paypal.env, 'test', 'test without test env') + + # update acquirer: compute fees + self.payment_acquirer.write(cr, uid, self.paypal_id, { + 'fees_active': True, + 'fees_dom_fixed': 1.0, + 'fees_dom_var': 0.35, + 'fees_int_fixed': 1.5, + 'fees_int_var': 0.50, + }, context) + + # render the button + res = self.payment_acquirer.render( + cr, uid, self.paypal_id, + 'test_ref0', 12.50, self.currency_euro, + partner_id=None, + partner_values=self.buyer_values, + context=context) + + # check form result + handling_found = False + tree = objectify.fromstring(res) + self.assertEqual(tree.get('action'), 'https://www.sandbox.paypal.com/cgi-bin/webscr', 'paypal: wrong form POST url') + for form_input in tree.input: + if form_input.get('name') in ['handling']: + handling_found = True + self.assertEqual(form_input.get('value'), '1.56', 'paypal: wrong computed fees') + self.assertTrue(handling_found, 'paypal: fees_active did not add handling input in rendered form') + + @mute_logger('openerp.addons.payment_acquirer_paypal.models.paypal', 'ValidationError') + def test_20_paypal_form_management(self): + cr, uid, context = self.cr, self.uid, {} + # be sure not to do stupid things + paypal = self.payment_acquirer.browse(cr, uid, self.paypal_id, context) + self.assertEqual(paypal.env, 'test', 'test without test env') + + # typical data posted by paypal after client has successfully paid + paypal_post_data = { + 'protection_eligibility': u'Ineligible', + 'last_name': u'Poilu', + 'txn_id': u'08D73520KX778924N', + 'receiver_email': u'tde+paypal-facilitator@openerp.com', + 'payment_status': u'Pending', + 'payment_gross': u'', + 'tax': u'0.00', + 'residence_country': u'FR', + 'address_state': u'Alsace', + 'payer_status': u'verified', + 'txn_type': u'web_accept', + 'address_street': u'Av. de la Pelouse, 87648672 Mayet', + 'handling_amount': u'0.00', + 'payment_date': u'03:21:19 Nov 18, 2013 PST', + 'first_name': u'Norbert', + 'item_name': u'test_ref_2', + 'address_country': u'France', + 'charset': u'windows-1252', + 'custom': u'', + 'notify_version': u'3.7', + 'address_name': u'Norbert Poilu', + 'pending_reason': u'multi_currency', + 'item_number': u'test_ref_2', + 'receiver_id': u'DEG7Z7MYGT6QA', + 'transaction_subject': u'', + 'business': u'tde+paypal-facilitator@openerp.com', + 'test_ipn': u'1', + 'payer_id': u'VTDKRZQSAHYPS', + 'verify_sign': u'An5ns1Kso7MWUdW4ErQKJJJ4qi4-AVoiUf-3478q3vrSmqh08IouiYpM', + 'address_zip': u'75002', + 'address_country_code': u'FR', + 'address_city': u'Paris', + 'address_status': u'unconfirmed', + 'mc_currency': u'EUR', + 'shipping': u'0.00', + 'payer_email': u'tde+buyer@openerp.com', + 'payment_type': u'instant', + 'mc_gross': u'1.95', + 'ipn_track_id': u'866df2ccd444b', + 'quantity': u'1' + } + + # should raise error about unknown tx + with self.assertRaises(ValidationError): + self.payment_transaction.form_feedback(cr, uid, paypal_post_data, 'paypal', context=context) + + # create tx + tx_id = self.payment_transaction.create( + cr, uid, { + 'amount': 1.95, + 'acquirer_id': self.paypal_id, + 'currency_id': self.currency_euro_id, + 'reference': 'test_ref_2', + 'partner_name': 'Norbert Buyer', + 'partner_country_id': self.country_france_id, + }, context=context + ) + # validate it + self.payment_transaction.form_feedback(cr, uid, paypal_post_data, 'paypal', context=context) + # check + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'pending', 'paypal: wrong state after receiving a valid pending notification') + self.assertEqual(tx.state_message, 'multi_currency', 'paypal: wrong state message after receiving a valid pending notification') + self.assertEqual(tx.paypal_txn_id, '08D73520KX778924N', 'paypal: wrong txn_id after receiving a valid pending notification') + self.assertFalse(tx.date_validate, 'paypal: validation date should not be updated whenr receiving pending notification') + + # update tx + self.payment_transaction.write(cr, uid, [tx_id], { + 'state': 'draft', + 'paypal_txn_id': False, + }, context=context) + # update notification from paypal + paypal_post_data['payment_status'] = 'Completed' + # validate it + self.payment_transaction.form_feedback(cr, uid, paypal_post_data, 'paypal', context=context) + # check + tx = self.payment_transaction.browse(cr, uid, tx_id, context=context) + self.assertEqual(tx.state, 'done', 'paypal: wrong state after receiving a valid pending notification') + self.assertEqual(tx.paypal_txn_id, '08D73520KX778924N', 'paypal: wrong txn_id after receiving a valid pending notification') + self.assertEqual(tx.date_validate, '2013-11-18 03:21:19', 'paypal: wrong validation date') diff --git a/addons/payment_acquirer_paypal/views/payment_acquirer.xml b/addons/payment_acquirer_paypal/views/payment_acquirer.xml new file mode 100644 index 00000000000..0c00ee37261 --- /dev/null +++ b/addons/payment_acquirer_paypal/views/payment_acquirer.xml @@ -0,0 +1,46 @@ + + + + + + acquirer.form.paypal + payment.acquirer + + + + + + + + + + + + + + + + + + + + + acquirer.transaction.form.paypal + payment.transaction + + + + + + + + + + + + + + + diff --git a/addons/payment_acquirer_paypal/views/paypal.xml b/addons/payment_acquirer_paypal/views/paypal.xml new file mode 100644 index 00000000000..186d45fc452 --- /dev/null +++ b/addons/payment_acquirer_paypal/views/paypal.xml @@ -0,0 +1,43 @@ + + + + + + + + diff --git a/addons/payment_acquirer_transfer/__init__.py b/addons/payment_acquirer_transfer/__init__.py new file mode 100644 index 00000000000..dde6f25c728 --- /dev/null +++ b/addons/payment_acquirer_transfer/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2013-Today OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import models +import controllers diff --git a/addons/payment_acquirer_transfer/__openerp__.py b/addons/payment_acquirer_transfer/__openerp__.py new file mode 100644 index 00000000000..07b3f55b273 --- /dev/null +++ b/addons/payment_acquirer_transfer/__openerp__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +{ + 'name': 'Transfer Payment Acquirer', + 'category': 'Hidden', + 'summary': 'Payment Acquirer: Transfer Implementation', + 'version': '1.0', + 'description': """Transfer Payment Acquirer""", + 'author': 'OpenERP SA', + 'depends': ['payment_acquirer'], + 'data': [ + 'views/transfer.xml', + 'data/transfer.xml', + ], + 'installable': True, + 'auto_install': True, +} diff --git a/addons/payment_acquirer_transfer/controllers/__init__.py b/addons/payment_acquirer_transfer/controllers/__init__.py new file mode 100644 index 00000000000..bbd183e955b --- /dev/null +++ b/addons/payment_acquirer_transfer/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import main diff --git a/addons/payment_acquirer_transfer/controllers/main.py b/addons/payment_acquirer_transfer/controllers/main.py new file mode 100644 index 00000000000..6d0a7c1fa6f --- /dev/null +++ b/addons/payment_acquirer_transfer/controllers/main.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +import logging +import pprint + +from openerp.addons.web import http +from openerp.addons.web.http import request +from openerp.addons.website.models import website + +_logger = logging.getLogger(__name__) + + +class OgoneController(http.Controller): + _accept_url = '/payment/transfer/feedback' + + @website.route([ + '/payment/transfer/feedback', + ], type='http', auth='admin') + def transfer_form_feedback(self, **post): + cr, uid, context = request.cr, request.uid, request.context + _logger.info('Beginning form_feedback with post data %s', pprint.pformat(post)) # debug + request.registry['payment.transaction'].form_feedback(cr, uid, post, 'transfer', context) + return request.redirect(post.pop('return_url', '/')) diff --git a/addons/payment_acquirer_transfer/data/transfer.xml b/addons/payment_acquirer_transfer/data/transfer.xml new file mode 100644 index 00000000000..ec81cd82719 --- /dev/null +++ b/addons/payment_acquirer_transfer/data/transfer.xml @@ -0,0 +1,16 @@ + + + + + + transfer + + test + + Please use the account 001-002-003 to make the payment.

]]> +
+
+ +
+
diff --git a/addons/payment_acquirer_transfer/doc/changelog.rst b/addons/payment_acquirer_transfer/doc/changelog.rst new file mode 100644 index 00000000000..d0c24af384d --- /dev/null +++ b/addons/payment_acquirer_transfer/doc/changelog.rst @@ -0,0 +1,9 @@ +.. _changelog: + +Changelog +========= + +`trunk (saas-3)` +---------------- + +- Module creation \ No newline at end of file diff --git a/addons/payment_acquirer_transfer/doc/index.rst b/addons/payment_acquirer_transfer/doc/index.rst new file mode 100644 index 00000000000..85028ed0d3e --- /dev/null +++ b/addons/payment_acquirer_transfer/doc/index.rst @@ -0,0 +1,14 @@ +Payment module documentation +============================ + +Payment documentation topics +'''''''''''''''''''''''''''' + + +Changelog +''''''''' + +.. toctree:: + :maxdepth: 1 + + changelog.rst diff --git a/addons/payment_acquirer_transfer/models/__init__.py b/addons/payment_acquirer_transfer/models/__init__.py new file mode 100644 index 00000000000..da51c9c1854 --- /dev/null +++ b/addons/payment_acquirer_transfer/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +import payment_acquirer diff --git a/addons/payment_acquirer_transfer/models/payment_acquirer.py b/addons/payment_acquirer_transfer/models/payment_acquirer.py new file mode 100644 index 00000000000..2f72214e4e6 --- /dev/null +++ b/addons/payment_acquirer_transfer/models/payment_acquirer.py @@ -0,0 +1,53 @@ +# -*- coding: utf-'8' "-*-" + +from openerp.addons.payment_acquirer.models.payment_acquirer import ValidationError +from openerp.osv import osv +from openerp.tools.float_utils import float_compare + +import logging +import pprint + +_logger = logging.getLogger(__name__) + + +class TransferPaymentAcquirer(osv.Model): + _inherit = 'payment.acquirer' + + def transfer_get_form_action_url(self, cr, uid, id, context=None): + return '/payment/transfer/feedback' + + +class TransferPaymentTransaction(osv.Model): + _inherit = 'payment.transaction' + + def _transfer_form_get_tx_from_data(self, cr, uid, data, context=None): + reference, amount, currency_name = data.get('reference'), data.get('amount'), data.get('currency_name') + tx_ids = self.search( + cr, uid, [ + ('reference', '=', reference), + ], context=context) + + if not tx_ids or len(tx_ids) > 1: + error_msg = 'received data for reference %s' % (pprint.pformat(reference)) + if not tx_ids: + error_msg += '; no order found' + else: + error_msg += '; multiple order found' + _logger.error(error_msg) + raise ValidationError(error_msg) + + return self.browse(cr, uid, tx_ids[0], context=context) + + def _transfer_form_get_invalid_parameters(self, cr, uid, tx, data, context=None): + invalid_parameters = [] + + if float_compare(float(data.get('amount', '0.0')), tx.amount, 2) != 0: + invalid_parameters.append(('amount', data.get('amount'), '%.2f' % tx.amount)) + if data.get('currency') != tx.currency_id.name: + invalid_parameters.append(('currency', data.get('currency'), tx.currency_id.name)) + + return invalid_parameters + + def _transfer_form_validate(self, cr, uid, tx, data, context=None): + _logger.info('Validated transfer payment for tx %s: set as pending' % (tx.reference)) + return tx.write({'state': 'pending'}) diff --git a/addons/payment_acquirer_transfer/static/description/icon.png b/addons/payment_acquirer_transfer/static/description/icon.png new file mode 100644 index 00000000000..183937ed9ce Binary files /dev/null and b/addons/payment_acquirer_transfer/static/description/icon.png differ diff --git a/addons/payment_acquirer_transfer/static/src/img/transfer_icon.png b/addons/payment_acquirer_transfer/static/src/img/transfer_icon.png new file mode 100644 index 00000000000..63b10e383ec Binary files /dev/null and b/addons/payment_acquirer_transfer/static/src/img/transfer_icon.png differ diff --git a/addons/payment_acquirer_transfer/views/transfer.xml b/addons/payment_acquirer_transfer/views/transfer.xml new file mode 100644 index 00000000000..75912a30f42 --- /dev/null +++ b/addons/payment_acquirer_transfer/views/transfer.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 4ecb7a7f454..141a5665f3c 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -694,7 +694,7 @@ class pos_order(osv.osv): def create_picking(self, cr, uid, ids, context=None): """Create a picking for each order and validate it.""" - picking_obj = self.pool.get('stock.picking') + picking_obj = self.pool.get('stock.picking.out') partner_obj = self.pool.get('res.partner') move_obj = self.pool.get('stock.move') @@ -747,7 +747,6 @@ class pos_order(osv.osv): @return: True """ stock_picking_obj = self.pool.get('stock.picking') - wf_service = netsvc.LocalService("workflow") for order in self.browse(cr, uid, ids, context=context): stock_picking_obj.signal_button_cancel(cr, uid, [order.picking_id.id]) if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel': diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 465ce875a0c..0ec7f4eb624 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -56,7 +56,7 @@ diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css index 89ab429c4f4..3a3a8f23231 100644 --- a/addons/point_of_sale/static/src/css/pos.css +++ b/addons/point_of_sale/static/src/css/pos.css @@ -126,6 +126,7 @@ background: #393939; background: -moz-linear-gradient(#7b7979, #393939); background: -webkit-gradient(linear, left top, left bottom, from(#7b7979), to(#393939)); + z-index: 2; /* Customize according bootstrap3 navbar */ } /* a) The left part of the top-bar */ @@ -306,12 +307,12 @@ text-align: center; vertical-align: top; width: 205px; - max-height: 232px; + max-height: 350px; overflow-y: auto; overflow-x: hidden; } .point-of-sale #paypad button { - height: 50px; + height: 39px; display: block; width: 100%; margin: 0px -6px 4px -2px; @@ -659,6 +660,7 @@ .point-of-sale .screen header h2 { margin-top: 0px; padding-top: 7px; + font-size: 1.5em /* Customize font according bootstrap3 */ } .point-of-sale .screen p{ font-size: 18px; diff --git a/addons/point_of_sale/static/src/img/open-cashbox.png.moved b/addons/point_of_sale/static/src/img/open-cashbox.png.moved new file mode 100644 index 00000000000..1e07b0a9282 Binary files /dev/null and b/addons/point_of_sale/static/src/img/open-cashbox.png.moved differ diff --git a/addons/portal/mail_message.py b/addons/portal/mail_message.py index 9699b3a9ef6..4429df3be8b 100644 --- a/addons/portal/mail_message.py +++ b/addons/portal/mail_message.py @@ -19,6 +19,7 @@ # ############################################################################## +from openerp import SUPERUSER_ID from openerp.osv import osv, orm from openerp.tools.translate import _ @@ -32,6 +33,9 @@ class mail_message(osv.Model): """ Override that adds specific access rights of mail.message, to remove all internal notes if uid is a non-employee """ + if uid == SUPERUSER_ID: + return super(mail_message, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, + context=context, count=False, access_rights_uid=access_rights_uid) group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_user')[1] if group_user_id not in [group.id for group in group_ids]: @@ -45,6 +49,8 @@ class mail_message(osv.Model): - read: - raise if the type is comment and subtype NULL (internal note) """ + if uid == SUPERUSER_ID: + return super(mail_message, self).check_access_rule(cr, uid, ids=ids, operation=operation, context=context) group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_user')[1] if group_user_id not in [group.id for group in group_ids]: diff --git a/addons/portal/portal_demo.xml b/addons/portal/portal_demo.xml index 81118b52c73..c1c67ad9067 100644 --- a/addons/portal/portal_demo.xml +++ b/addons/portal/portal_demo.xml @@ -5,12 +5,16 @@ Demo Portal User - demo@portal.example.com + demo.portal@yourcompany.example.com none + Vivegnis + 4683 + + Rue Cesar de Paepe, 43 - + portal portal diff --git a/addons/portal/static/src/css/portal.css b/addons/portal/static/src/css/portal.css index 45c0cdd7805..e32f3b0e639 100644 --- a/addons/portal/static/src/css/portal.css +++ b/addons/portal/static/src/css/portal.css @@ -10,7 +10,7 @@ margin: -40px 0 -32px -24px; position: relative; padding: 10px 15px; - right: -153px; + right: -125px; /* improved margin according bootstrap3 */ background: #729FCF; background-image: -webkit-gradient(linear, left top, left bottom, from(#729FCF), to(#3465A4)); diff --git a/addons/portal/tests/test_portal.py b/addons/portal/tests/test_portal.py index 938d3a6ef1f..66cb0958774 100644 --- a/addons/portal/tests/test_portal.py +++ b/addons/portal/tests/test_portal.py @@ -20,6 +20,7 @@ ############################################################################## from openerp.addons.mail.tests.common import TestMail +from openerp.exceptions import AccessError from openerp.osv.orm import except_orm from openerp.tools.misc import mute_logger @@ -63,7 +64,7 @@ class test_portal(TestMail): trigger_read = chell_pigs.name # Do: Chell posts a message on Pigs, crash because can not write on group or is not in the followers - with self.assertRaises(except_orm): + with self.assertRaises(AccessError): self.mail_group.message_post(cr, self.user_chell_id, self.group_pigs_id, body='Message') # Do: Chell is added into Pigs followers and browse it -> ok for messages, ko for partners (no read permission) @@ -73,6 +74,9 @@ class test_portal(TestMail): for message in chell_pigs.message_ids: trigger_read = message.subject for partner in chell_pigs.message_follower_ids: + if partner.id == self.partner_chell_id: + # Chell can read her own partner record + continue with self.assertRaises(except_orm): trigger_read = partner.name diff --git a/addons/portal_claim/i18n/ar.po b/addons/portal_claim/i18n/ar.po new file mode 100644 index 00000000000..19ee78a12e3 --- /dev/null +++ b/addons/portal_claim/i18n/ar.po @@ -0,0 +1,43 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-11-26 19:12+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-27 04:37+0000\n" +"X-Generator: Launchpad (build 16845)\n" + +#. module: portal_claim +#: model:ir.actions.act_window,help:portal_claim.crm_case_categ_claim0 +msgid "" +"

\n" +" Click to register a new claim. \n" +"

\n" +" You can track your claims from this menu and the action we\n" +" will take.\n" +"

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

\n" +" اضغط هنا للتسجيل مطالبة جديدة. \n" +"

\n" +" يمكنك تتبع المطالبات الخاصة بك من هذه القائمة و الإجراءات\n" +" التي سنتخذها.\n" +"

\n" +" " + +#. module: portal_claim +#: model:ir.actions.act_window,name:portal_claim.crm_case_categ_claim0 +#: model:ir.ui.menu,name:portal_claim.portal_after_sales_claims +msgid "Claims" +msgstr "مطالبات" diff --git a/addons/portal_claim/i18n/fi.po b/addons/portal_claim/i18n/fi.po new file mode 100644 index 00000000000..fbad5bedaf0 --- /dev/null +++ b/addons/portal_claim/i18n/fi.po @@ -0,0 +1,36 @@ +# Finnish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-12-01 22:24+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n" +"X-Generator: Launchpad (build 16856)\n" + +#. module: portal_claim +#: model:ir.actions.act_window,help:portal_claim.crm_case_categ_claim0 +msgid "" +"

\n" +" Click to register a new claim. \n" +"

\n" +" You can track your claims from this menu and the action we\n" +" will take.\n" +"

\n" +" " +msgstr "" + +#. module: portal_claim +#: model:ir.actions.act_window,name:portal_claim.crm_case_categ_claim0 +#: model:ir.ui.menu,name:portal_claim.portal_after_sales_claims +msgid "Claims" +msgstr "Reklamaatiot" diff --git a/addons/portal_claim/security/portal_security.xml b/addons/portal_claim/security/portal_security.xml index de6d5cd9894..691d971e3e2 100644 --- a/addons/portal_claim/security/portal_security.xml +++ b/addons/portal_claim/security/portal_security.xml @@ -1,17 +1,15 @@ - - + Portal Personal Claims - [('message_follower_ids','in', [user.partner_id.id])] + ['|', ('message_follower_ids','in', [user.partner_id.id]), ('partner_id','=', user.partner_id.id)] - - + + - + - diff --git a/addons/portal_crm/i18n/fi.po b/addons/portal_crm/i18n/fi.po new file mode 100644 index 00000000000..ed8c3a72160 --- /dev/null +++ b/addons/portal_crm/i18n/fi.po @@ -0,0 +1,548 @@ +# Finnish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-12-01 22:26+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-02 05:23+0000\n" +"X-Generator: Launchpad (build 16856)\n" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Lead" +msgstr "Liidi" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,title:0 +msgid "Title" +msgstr "Titteli" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,probability:0 +msgid "Success Rate (%)" +msgstr "Onnistumistodennäköisyys (%)" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact us" +msgstr "Ota yhteyttä" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action:0 +msgid "Next Action Date" +msgstr "Seuraava toimenpidepäivä" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,fax:0 +msgid "Fax" +msgstr "Faksi" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,zip:0 +msgid "Zip" +msgstr "Postinumero" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_unread:0 +msgid "Unread Messages" +msgstr "Lukemattomia viestejä" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_id:0 +msgid "Company" +msgstr "Yritys" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_open:0 +msgid "Days to Open" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you for your interest, we'll respond to your request shortly." +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Highest" +msgstr "Korkein" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,mobile:0 +msgid "Mobile" +msgstr "Matkapuhelin" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,description:0 +msgid "Notes" +msgstr "Muistiinpanot" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages" +msgstr "Viestit" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,color:0 +msgid "Color Index" +msgstr "Väri-indeksi" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_latitude:0 +msgid "Geo Latitude" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_name:0 +msgid "Customer Name" +msgstr "Asiakkaan nimi" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Cancelled" +msgstr "Peruttu" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "Jos valittu, uudet viestit vaativat huomiosi." + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,channel_id:0 +msgid "Communication channel (mail, direct, phone, ...)" +msgstr "Kommunikointikanava (sähköposti, suora, puhelin,...)" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type_id:0 +msgid "Campaign" +msgstr "Kampanja" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref:0 +msgid "Reference" +msgstr "Viite" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_next:0 +#: field:portal_crm.crm_contact_us,title_action:0 +msgid "Next Action" +msgstr "Seuraava toimenpide" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,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 "" +"Sisältää viestien yhteenvedon (viestien määrän,...). Tämä yhteenveto on " +"valmiiksi html-muodossa, jotta se voidaan viedä kanban näkymään." + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_id:0 +msgid "Partner" +msgstr "Kumppani" + +#. module: portal_crm +#: model:ir.actions.act_window,name:portal_crm.action_contact_us +msgid "Contact Us" +msgstr "Ota yhteyttä" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,name:0 +msgid "Subject" +msgstr "Aihe" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,opt_out:0 +msgid "Opt-Out" +msgstr "Jätä pois" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,priority:0 +msgid "Priority" +msgstr "Tärkeys" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state_id:0 +msgid "State" +msgstr "Valtio" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_follower_ids:0 +msgid "Followers" +msgstr "Seuraajat" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_id:0 +msgid "Linked partner (optional). Usually created when converting the lead." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,payment_mode:0 +msgid "Payment Mode" +msgstr "Maksutapa" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "New" +msgstr "Uusi" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type:0 +msgid "Type" +msgstr "Tyyppi" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_from:0 +msgid "Email" +msgstr "Sähköposti" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,channel_id:0 +msgid "Channel" +msgstr "Kanava" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Name" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Lowest" +msgstr "Alin" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,create_date:0 +msgid "Creation Date" +msgstr "Luontipäivä" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Close" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Pending" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type:0 +msgid "Type is used to separate Leads and Opportunities" +msgstr "Tyyppiä käytetään erottamaan liidit ja mahdollisuudet toisistaan" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,categ_ids:0 +msgid "Categories" +msgstr "Kategoriat" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,stage_id:0 +msgid "Stage" +msgstr "Vaihe" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_login:0 +msgid "User Login" +msgstr "Käyttäjätunnus" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,opt_out:0 +msgid "" +"If opt-out is checked, this contact has refused to receive emails or " +"unsubscribed to a campaign." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,contact_name:0 +msgid "Contact Name" +msgstr "Yhteystiedon nimi" + +#. module: portal_crm +#: model:ir.ui.menu,name:portal_crm.portal_company_contact +msgid "Contact" +msgstr "Kontakti" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_email:0 +msgid "Partner Contact Email" +msgstr "Kumppanin yhteystieto, sähköposti" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_revenue:0 +msgid "Expected Revenue" +msgstr "Odotetut tulot" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,task_ids:0 +msgid "Tasks" +msgstr "Tehtävät" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact form" +msgstr "Yhteydenottolomake" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_currency:0 +msgid "Currency" +msgstr "Valuutta" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,write_date:0 +msgid "Update Date" +msgstr "Päivityksen ajankohta" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_deadline:0 +msgid "Expected Closing" +msgstr "Odotettu päätös" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref2:0 +msgid "Reference 2" +msgstr "Viittaus 2" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_email:0 +msgid "User Email" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_open:0 +msgid "Opened" +msgstr "Avattu" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "In Progress" +msgstr "Kesken" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_name:0 +msgid "" +"The name of the future partner company that will be created while converting " +"the lead into opportunity" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_cost:0 +msgid "Planned Costs" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_deadline:0 +msgid "Estimate of the date on which the opportunity will be won." +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Low" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_closed:0 +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Closed" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_assign:0 +msgid "Assignation Date" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state:0 +msgid "Status" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Normal" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_cc:0 +msgid "Global CC" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street2:0 +msgid "Street2" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,id:0 +msgid "ID" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,phone:0 +msgid "Phone" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,active:0 +msgid "Active" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_id:0 +msgid "Salesperson" +msgstr "Myyjä" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_close:0 +msgid "Days to Close" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_ids:0 +msgid "Companies" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,section_id:0 +msgid "" +"When sending mails, the default email address is taken from the sales team." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_name:0 +msgid "Partner Contact Name" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_longitude:0 +msgid "Geo Longitude" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_assign:0 +msgid "Last date this case was forwarded/assigned to a partner" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_from:0 +msgid "Email address of the contact" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,city:0 +msgid "City" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Submit" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,function:0 +msgid "Function" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,referred:0 +msgid "Referred By" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Assigned Partner" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Opportunity" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Partner this case has been forwarded/assigned to." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,country_id:0 +msgid "Country" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,state:0 +msgid "" +"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'." +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type_id:0 +msgid "" +"From which campaign (seminar, marketing campaign, mass mailing, ...) did " +"this contact come from?" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "High" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,section_id:0 +msgid "Sales Team" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street:0 +msgid "Street" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_last:0 +msgid "Last Action" +msgstr "" + +#. module: portal_crm +#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us +msgid "Contact form for the portal" +msgstr "" diff --git a/addons/portal_hr_employees/hr_employee.py b/addons/portal_hr_employees/hr_employee.py index a04053eec98..4f70dc75ece 100644 --- a/addons/portal_hr_employees/hr_employee.py +++ b/addons/portal_hr_employees/hr_employee.py @@ -24,7 +24,6 @@ from openerp.osv import fields, osv class crm_contact_us(osv.TransientModel): """ Add employees list to the portal's contact page """ _inherit = 'portal_crm.crm_contact_us' - _description = 'Contact form for the portal' _columns = { 'employee_ids' : fields.many2many('hr.employee', string='Employees', readonly=True), } @@ -40,7 +39,6 @@ class crm_contact_us(osv.TransientModel): } class hr_employee(osv.osv): - _description = 'Portal employee' _inherit = 'hr.employee' """ diff --git a/addons/portal_project/i18n/ar.po b/addons/portal_project/i18n/ar.po new file mode 100644 index 00000000000..8246ce2dc84 --- /dev/null +++ b/addons/portal_project/i18n/ar.po @@ -0,0 +1,37 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-11-26 22:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-27 04:37+0000\n" +"X-Generator: Launchpad (build 16845)\n" + +#. module: portal_project +#: model:ir.actions.act_window,help:portal_project.open_view_project +msgid "" +"

\n" +" Click to start a new project.\n" +"

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

\n" +" انقر لبدء مشروع جديد.\n" +"

\n" +" " + +#. module: portal_project +#: model:ir.actions.act_window,name:portal_project.open_view_project +#: model:ir.ui.menu,name:portal_project.portal_services_projects +msgid "Projects" +msgstr "المشروعات" diff --git a/addons/portal_project/i18n/zh_CN.po b/addons/portal_project/i18n/zh_CN.po index c4ed02d9668..1f8c469ec0e 100644 --- a/addons/portal_project/i18n/zh_CN.po +++ b/addons/portal_project/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-14 13:32+0000\n" -"Last-Translator: sum1201 \n" +"PO-Revision-Date: 2013-11-19 10:17+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:39+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: portal_project #: model:ir.actions.act_window,help:portal_project.open_view_project @@ -25,6 +25,10 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击开始一个新项目。\n" +"

\n" +" " #. module: portal_project #: model:ir.actions.act_window,name:portal_project.open_view_project diff --git a/addons/portal_project/tests/test_access_rights.py b/addons/portal_project/tests/test_access_rights.py index d536b5891e2..5b389df809f 100644 --- a/addons/portal_project/tests/test_access_rights.py +++ b/addons/portal_project/tests/test_access_rights.py @@ -20,6 +20,7 @@ ############################################################################## from openerp.addons.project.tests.test_project_base import TestProjectBase +from openerp.exceptions import AccessError from openerp.osv.orm import except_orm from openerp.tools import mute_logger @@ -93,13 +94,13 @@ class TestPortalProject(TestPortalProjectBase): 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_none_id, pigs_id, ['name']) + self.assertRaises(AccessError, 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_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(AccessError, 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_none_id, task_ids, ['name']) + self.assertRaises(AccessError, 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_none_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(AccessError, 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_portal_id, pigs_id, ['name']) @@ -110,7 +111,7 @@ class TestPortalProject(TestPortalProjectBase): # Test: all project tasks readable 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_portal_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(AccessError, self.project_task.write, cr, self.user_portal_id, task_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (public) self.project_project.read(cr, self.user_public_id, pigs_id, ['name']) @@ -121,7 +122,7 @@ class TestPortalProject(TestPortalProjectBase): # Test: all project tasks readable self.project_task.read(cr, self.user_public_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, cr, self.user_public_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(AccessError, self.project_task.write, cr, self.user_public_id, task_ids, {'description': 'TestDescription'}) # ---------------------------------------- # CASE2: portal project @@ -136,9 +137,9 @@ class TestPortalProject(TestPortalProjectBase): '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_none_id, pigs_id, ['name']) + self.assertRaises(AccessError, 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_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(AccessError, 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_projectuser_id, [self.task_1_id, self.task_3_id], [self.user_portal_id]) @@ -174,7 +175,7 @@ class TestPortalProject(TestPortalProjectBase): '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_none_id, pigs_id, ['name']) + self.assertRaises(AccessError, 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_portal_id, pigs_id, ['name']) @@ -202,7 +203,7 @@ class TestPortalProject(TestPortalProjectBase): '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_none_id, pigs_id, ['name']) + self.assertRaises(AccessError, 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_portal_id, pigs_id, ['name']) diff --git a/addons/portal_project_issue/i18n/ar.po b/addons/portal_project_issue/i18n/ar.po new file mode 100644 index 00000000000..c0bbd735def --- /dev/null +++ b/addons/portal_project_issue/i18n/ar.po @@ -0,0 +1,47 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-11-26 22:10+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-27 04:37+0000\n" +"X-Generator: Launchpad (build 16845)\n" + +#. module: portal_project_issue +#: view:project.issue:0 +msgid "Creation:" +msgstr "إنشاء:" + +#. module: portal_project_issue +#: model:ir.actions.act_window,help:portal_project_issue.project_issue_categ_act0 +msgid "" +"

\n" +" Click to create an issue.\n" +"

\n" +" You can track your issues from this menu and the action we\n" +" will take.\n" +"

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

\n" +" انقر لإنشاء مسأله.\n" +"

\n" +" يمكنك تتبع المسائل الخاصة بك من هذه القائمة و الإجراءات\n" +" المتخذة.\n" +"

\n" +" " + +#. module: portal_project_issue +#: model:ir.actions.act_window,name:portal_project_issue.project_issue_categ_act0 +msgid "Issues" +msgstr "الحالات" diff --git a/addons/portal_project_issue/i18n/zh_CN.po b/addons/portal_project_issue/i18n/zh_CN.po index 98cada73b92..a0518fdb3f7 100644 --- a/addons/portal_project_issue/i18n/zh_CN.po +++ b/addons/portal_project_issue/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-28 14:20+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:20+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:39+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: portal_project_issue #: view:project.issue:0 @@ -33,6 +33,12 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建一个事件。\n" +"

\n" +" 您可以在此菜单追踪您的事件以及需要采取的行动。\n" +"

\n" +" " #. module: portal_project_issue #: model:ir.actions.act_window,name:portal_project_issue.project_issue_categ_act0 diff --git a/addons/portal_project_issue/tests/test_access_rights.py b/addons/portal_project_issue/tests/test_access_rights.py index f5060ccc1ff..eaa06a69538 100644 --- a/addons/portal_project_issue/tests/test_access_rights.py +++ b/addons/portal_project_issue/tests/test_access_rights.py @@ -20,6 +20,7 @@ ############################################################################## from openerp.addons.portal_project.tests.test_access_rights import TestPortalProjectBase +from openerp.exceptions import AccessError from openerp.osv.orm import except_orm from openerp.tools import mute_logger @@ -71,11 +72,11 @@ class TestPortalIssue(TestPortalProjectBase): # Do: Bert reads project -> crash, no group # Test: no project issue visible - self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(AccessError, 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_none_id, issue_ids, ['name']) + self.assertRaises(AccessError, 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_none_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(AccessError, 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 @@ -85,7 +86,7 @@ class TestPortalIssue(TestPortalProjectBase): # Test: all project issues readable 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_portal_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(AccessError, self.project_issue.write, cr, self.user_portal_id, issue_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (public ok public) # Test: all project issues visible @@ -106,7 +107,7 @@ class TestPortalIssue(TestPortalProjectBase): # Do: Bert reads project -> crash, no group # Test: no project issue searchable - self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(AccessError, 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_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) diff --git a/addons/portal_sale/portal_sale_data.xml b/addons/portal_sale/portal_sale_data.xml index 2cd7ca8b501..2da55bcb081 100644 --- a/addons/portal_sale/portal_sale_data.xml +++ b/addons/portal_sale/portal_sale_data.xml @@ -6,13 +6,14 @@ Sales Order - Send by Email (Portal) - ${object.user_id.email or ''} + ${(object.user_id.email or '')|safe} ${object.company_id.name} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' }) ${object.partner_invoice_id.id} ${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''} + ${object.partner_id.lang} @@ -95,13 +96,14 @@ Invoice - Send by Email (Portal) - ${object.user_id.email or object.company_id.email or 'noreply@localhost'} + ${(object.user_id.email or object.company_id.email or 'noreply@localhost')|safe} ${object.company_id.name} Invoice (Ref ${object.number or 'n/a' }) ${object.partner_id.id} Invoice_${(object.number or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''} + ${object.partner_id.lang} diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 032952aa511..5e3f8b54752 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -24,7 +24,7 @@ import time from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc +from openerp import workflow import openerp.addons.decimal_precision as dp # Procurement @@ -181,10 +181,6 @@ class procurement_order(osv.osv): """ return all(procurement.move_id.state == 'cancel' for procurement in self.browse(cr, uid, ids, context=context)) - #This Function is create to avoid a server side Error Like 'ERROR:tests.mrp:name 'check_move' is not defined' - def check_move(self, cr, uid, ids, context=None): - pass - def check_move_done(self, cr, uid, ids, context=None): """ Checks if move is done or not. @return: True or False. @@ -297,6 +293,12 @@ class procurement_order(osv.osv): """ return False + def check_move(self, cr, uid, ids, context=None): + """ Check whether the given procurement can be satisfied by an internal move, + typically a pulled flow. By default, it's False. Overwritten by the `stock_location` module. + """ + return False + def check_conditions_confirm2wait(self, cr, uid, ids): """ condition on the transition to go from 'confirm' activity to 'confirm_wait' activity """ return not self.test_cancel(cr, uid, ids) @@ -439,9 +441,8 @@ class procurement_order(osv.osv): if len(to_assign): move_obj.write(cr, uid, to_assign, {'state': 'assigned'}) self.write(cr, uid, ids, {'state': 'cancel'}) - wf_service = netsvc.LocalService("workflow") for id in ids: - wf_service.trg_trigger(uid, 'procurement.order', id, cr) + workflow.trg_trigger(uid, 'procurement.order', id, cr) return True def action_check_finished(self, cr, uid, ids): @@ -475,9 +476,8 @@ class procurement_order(osv.osv): if procurement.close_move and (procurement.move_id.state <> 'done'): move_obj.action_done(cr, uid, [procurement.move_id.id]) res = self.write(cr, uid, ids, {'state': 'done', 'date_close': time.strftime('%Y-%m-%d')}) - wf_service = netsvc.LocalService("workflow") for id in ids: - wf_service.trg_trigger(uid, 'procurement.order', id, cr) + workflow.trg_trigger(uid, 'procurement.order', id, cr) return res class StockPicking(osv.osv): diff --git a/addons/procurement/procurement_data.xml b/addons/procurement/procurement_data.xml index 52503e76c44..d8bd6c37dc3 100644 --- a/addons/procurement/procurement_data.xml +++ b/addons/procurement/procurement_data.xml @@ -14,6 +14,18 @@ + + Run fast mrp scheduler (without exception) + + + 4 + hours + -1 + + + + + Stock orderpoint diff --git a/addons/procurement/procurement_workflow.xml b/addons/procurement/procurement_workflow.xml index 76b54370ef2..d4068a6eada 100644 --- a/addons/procurement/procurement_workflow.xml +++ b/addons/procurement/procurement_workflow.xml @@ -147,13 +147,15 @@ - not check_produce() and not check_buy() + not check_produce() and not check_buy() and not check_move() diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 6f326ccf1c5..d82fa94c132 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -32,17 +32,17 @@ from openerp import tools class procurement_order(osv.osv): _inherit = 'procurement.order' - def run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, context=None): + def run_scheduler(self, cr, uid, automatic=False, use_new_cursor=False, skip_exception=False, context=None): ''' 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_confirm(cr, uid, use_new_cursor=use_new_cursor, skip_exception=skip_exception, context=context) self._procure_orderpoint_confirm(cr, uid, automatic=automatic,\ use_new_cursor=use_new_cursor, context=context) - def _procure_confirm(self, cr, uid, ids=None, use_new_cursor=False, context=None): + def _procure_confirm(self, cr, uid, ids=None, use_new_cursor=False, skip_exception=False, context=None): ''' Call the scheduler to check the procurement order @@ -51,6 +51,7 @@ class procurement_order(osv.osv): @param uid: The current user ID for security checks @param ids: List of selected IDs @param use_new_cursor: False or the dbname + @param skip_exception: boolean @param context: A standard dictionary for contextual values @return: Dictionary of values ''' @@ -61,19 +62,15 @@ class procurement_order(osv.osv): cr = openerp.registry(use_new_cursor).db.cursor() procurement_obj = self.pool.get('procurement.order') - if not ids: - ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned") - self.signal_button_restart(cr, uid, ids) - if use_new_cursor: - cr.commit() + if not skip_exception: + if not ids: + ids = procurement_obj.search(cr, uid, [('state', '=', 'exception')], order="date_planned") + self.signal_button_restart(cr, uid, ids) + if use_new_cursor: + cr.commit() company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id maxdate = (datetime.today() + relativedelta(days=company.schedule_range)).strftime(tools.DEFAULT_SERVER_DATE_FORMAT) - start_date = fields.datetime.now() offset = 0 - report = [] - report_total = 0 - report_except = 0 - report_later = 0 while True: ids = procurement_obj.search(cr, uid, [('state', '=', 'confirmed'), ('procure_method', '=', 'make_to_order')], offset=offset, limit=500, order='priority, date_planned', context=context) for proc in procurement_obj.browse(cr, uid, ids, context=context): @@ -81,14 +78,7 @@ class procurement_order(osv.osv): self.signal_button_check(cr, uid, [proc.id]) else: offset += 1 - report_later += 1 - if proc.state == 'exception': - report.append(_('PROC %d: on order - %3.2f %-5s - %s') % \ - (proc.id, proc.product_qty, proc.product_uom.name, - proc.product_id.name)) - report_except += 1 - report_total += 1 if use_new_cursor: cr.commit() if not ids: @@ -102,22 +92,11 @@ class procurement_order(osv.osv): if maxdate >= proc.date_planned: self.signal_button_check(cr, uid, [proc.id]) report_ids.append(proc.id) - else: - report_later += 1 - report_total += 1 - - if proc.state == 'exception': - report.append(_('PROC %d: from stock - %3.2f %-5s - %s') % \ - (proc.id, proc.product_qty, proc.product_uom.name, - proc.product_id.name,)) - report_except += 1 - if use_new_cursor: cr.commit() offset += len(ids) if not ids: break - end_date = fields.datetime.now() if use_new_cursor: cr.commit() diff --git a/addons/product/__openerp__.py b/addons/product/__openerp__.py index da17f7d8f6a..194cc91b019 100644 --- a/addons/product/__openerp__.py +++ b/addons/product/__openerp__.py @@ -26,7 +26,10 @@ 'author': 'OpenERP SA', 'category': 'Sales Management', 'depends': ['base', 'process', 'decimal_precision', 'mail'], - 'demo': ['product_demo.xml', 'product_image_demo.xml'], + 'demo': [ + 'product_demo.xml', + 'product_image_demo.xml', + ], 'description': """ This is the base module for managing products and pricelists in OpenERP. ======================================================================== diff --git a/addons/product/i18n/am.po b/addons/product/i18n/am.po new file mode 100644 index 00000000000..466eca830fc --- /dev/null +++ b/addons/product/i18n/am.po @@ -0,0 +1,2475 @@ +# Amharic translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-11-29 09:01+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Amharic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-30 05:04+0000\n" +"X-Generator: Launchpad (build 16856)\n" + +#. module: product +#: field:product.packaging,rows:0 +msgid "Number of Layers" +msgstr "" + +#. module: product +#: help:product.pricelist.item,base:0 +msgid "Base price for computation." +msgstr "" + +#. module: product +#: help:product.product,seller_qty:0 +msgid "This is minimum quantity to purchase from Main Supplier." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_34_product_template +msgid "Webcam" +msgstr "የዌብ ካሜራ" + +#. module: product +#: field:product.product,incoming_qty:0 +msgid "Incoming" +msgstr "የሚመጣው" + +#. module: product +#: view:product.product:0 +msgid "Product Name" +msgstr "የእቃው ስም" + +#. module: product +#: view:product.template:0 +msgid "Second Unit of Measure" +msgstr "" + +#. module: product +#: help:res.partner,property_product_pricelist:0 +msgid "" +"This pricelist will be used, instead of the default one, for sales to the " +"current partner" +msgstr "" + +#. module: product +#: field:product.product,seller_qty:0 +msgid "Supplier Quantity" +msgstr "ብዛት" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Fixed" +msgstr "ቛሚ" + +#. module: product +#: model:product.template,name:product.product_product_10_product_template +msgid "Mouse, Optical" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Base Prices" +msgstr "ዋጋ" + +#. module: product +#: field:product.pricelist.item,name:0 +msgid "Rule Name" +msgstr "" + +#. module: product +#: help:product.template,list_price:0 +msgid "" +"Base price to compute the customer price. Sometimes called the catalog price." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_3_product_template +msgid "PC Assemble SC234" +msgstr "" + +#. module: product +#: help:product.product,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: product +#: code:addons/product/pricelist.py:179 +#: code:addons/product/product.py:208 +#, python-format +msgid "Warning!" +msgstr "ማስጠንቀቅያ!" + +#. module: product +#: field:product.product,image_small:0 +msgid "Small-sized image" +msgstr "" + +#. module: product +#: code:addons/product/product.py:176 +#, python-format +msgid "" +"Conversion from Product UoM %s to Default UoM %s is not possible as they " +"both belong to different Category!." +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Average Price" +msgstr "" + +#. module: product +#: help:product.pricelist.item,name:0 +msgid "Explicit rule name for this pricelist line." +msgstr "" + +#. module: product +#: field:product.template,uos_coeff:0 +msgid "Unit of Measure -> UOS Coeff" +msgstr "" + +#. module: product +#: field:product.price_list,price_list:0 +msgid "PriceList" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_4_product_template +msgid "PC Assemble SC349" +msgstr "" + +#. module: product +#: help:product.product,seller_delay:0 +msgid "" +"This is the average delay in days between the purchase order confirmation " +"and the reception of goods for this product and for the default supplier. It " +"is used by the scheduler to order requests based on reordering delays." +msgstr "" + +#. module: product +#: model:product.pricelist.version,name:product.ver0 +msgid "Default Public Pricelist Version" +msgstr "" + +#. module: product +#: selection:product.template,cost_method:0 +msgid "Standard Price" +msgstr "" + +#. module: product +#: model:product.pricelist.type,name:product.pricelist_type_sale +#: field:res.partner,property_product_pricelist:0 +msgid "Sale Pricelist" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,type:0 +msgid "Product Type" +msgstr "" + +#. module: product +#: code:addons/product/product.py:412 +#, python-format +msgid "Products: " +msgstr "" + +#. module: product +#: constraint:decimal.precision:0 +msgid "" +"Error! You cannot define the decimal precision of 'Account' as greater than " +"the rounding factor of the company's main currency" +msgstr "" + +#. module: product +#: field:product.category,parent_id:0 +msgid "Parent Category" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_33_product_template +msgid "Headset for laptop PC with USB connector." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_all +msgid "All products" +msgstr "" + +#. module: product +#: model:process.node,note:product.process_node_supplier0 +msgid "Supplier name, price, product code, ..." +msgstr "" + +#. module: product +#: constraint:res.currency:0 +msgid "" +"Error! You cannot define a rounding factor for the company's main currency " +"that is smaller than the decimal precision of 'Account'." +msgstr "" + +#. module: product +#: help:product.product,outgoing_qty:0 +msgid "" +"Quantity of products that are planned to leave.\n" +"In a context with a single Stock Location, this includes goods leaving this " +"Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods leaving the Stock " +"Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods leaving the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods leaving any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_42_product_template +msgid "" +"Office Editing Software with word processing, spreadsheets, presentations, " +"graphics, and databases..." +msgstr "" + +#. module: product +#: field:product.product,seller_id:0 +msgid "Main Supplier" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_ul_form_action +#: model:ir.model,name:product.model_product_packaging +#: model:ir.ui.menu,name:product.menu_product_ul_form_action +#: view:product.packaging:0 +#: view:product.product:0 +#: view:product.ul:0 +msgid "Packaging" +msgstr "" + +#. module: product +#: help:product.product,active:0 +msgid "" +"If unchecked, it will allow you to hide the product without removing it." +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.template,categ_id:0 +#: field:product.uom,category_id:0 +msgid "Category" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_25_product_template +msgid "Laptop E5023" +msgstr "" + +#. module: product +#: help:product.packaging,ul_qty:0 +msgid "The number of packages by layer" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_30_product_template +msgid "Pen drive, SP-4" +msgstr "" + +#. module: product +#: field:product.packaging,qty:0 +msgid "Quantity by Package" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_29_product_template +msgid "Pen drive, SP-2" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,state:0 +msgid "Status" +msgstr "" + +#. module: product +#: help:product.template,categ_id:0 +msgid "Select category for the current product" +msgstr "" + +#. module: product +#: field:product.product,outgoing_qty:0 +msgid "Outgoing" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.list_price +#: field:product.product,lst_price:0 +msgid "Public Price" +msgstr "" + +#. module: product +#: field:product.price_list,qty5:0 +msgid "Quantity-5" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_ul_form_action +msgid "" +"

\n" +" Click to add a new packaging type.\n" +"

\n" +" The packaging type define the dimensions as well as the " +"number\n" +" of products per package. This will ensure salesperson sell " +"the\n" +" right number of products according to the package selected.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: field:product.template,product_manager:0 +msgid "Product Manager" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_7_product_template +msgid "17” LCD Monitor" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_name:0 +msgid "Supplier Product Name" +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price Search" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,description_sale:0 +msgid "Sale Description" +msgstr "" + +#. module: product +#: help:product.packaging,length:0 +msgid "The length of the package" +msgstr "" + +#. module: product +#: field:product.product,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: product +#: help:product.template,weight_net:0 +msgid "The net weight in Kg." +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,min_quantity:0 +#: field:product.supplierinfo,qty:0 +msgid "Quantity" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Calculate Product Price per Unit Based on Pricelist Version." +msgstr "" + +#. module: product +#: help:product.pricelist.item,product_id:0 +msgid "" +"Specify a product if this rule only applies to one product. Keep empty " +"otherwise." +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: product +#: help:product.product,virtual_available:0 +msgid "" +"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n" +"In a context with a single Stock Location, this includes goods stored in " +"this location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: field:product.packaging,height:0 +msgid "Height" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Procurements" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_mrp_properties +msgid "Manage Properties of Product" +msgstr "" + +#. module: product +#: help:product.uom,factor:0 +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category:\n" +"1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_pricelist_partnerinfo +msgid "pricelist.partnerinfo" +msgstr "" + +#. module: product +#: field:product.price_list,qty2:0 +msgid "Quantity-2" +msgstr "" + +#. module: product +#: field:product.price_list,qty3:0 +msgid "Quantity-3" +msgstr "" + +#. module: product +#: field:product.price_list,qty1:0 +msgid "Quantity-1" +msgstr "" + +#. module: product +#: field:product.price_list,qty4:0 +msgid "Quantity-4" +msgstr "" + +#. module: product +#: view:res.partner:0 +msgid "Sales & Purchases" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_44_product_template +msgid "GrapWorks Software" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_42_product_template +msgid "Office Suite" +msgstr "" + +#. module: product +#: field:product.template,mes_type:0 +msgid "Measure Type" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_32_product_template +msgid "Headset standard" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_day +msgid "Day(s)" +msgstr "" + +#. module: product +#: help:product.product,incoming_qty:0 +msgid "" +"Quantity of products that are planned to arrive.\n" +"In a context with a single Stock Location, this includes goods arriving to " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods arriving to the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods arriving to the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods arriving to any Stock Location with " +"'internal' type." +msgstr "" + +#. module: product +#: constraint:product.template:0 +msgid "" +"Error: The default Unit of Measure and the purchase Unit of Measure must be " +"in the same category." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom_categ +msgid "Product uom categ" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_box +msgid "Box 20x20x40" +msgstr "" + +#. module: product +#: field:product.template,warranty:0 +msgid "Warranty" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Price Computation" +msgstr "" + +#. module: product +#: constraint:product.product:0 +msgid "" +"You provided an invalid \"EAN13 Barcode\" reference. You may use the " +"\"Internal Reference\" field instead." +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_purchase_pricelist +msgid "Purchase Pricelists" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_5_product_template +msgid "PC Assemble + Custom (PC on Demand)" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_27_product_template +msgid "Custom Laptop based on customer's requirement." +msgstr "" + +#. module: product +#: help:product.packaging,width:0 +msgid "The width of the package" +msgstr "" + +#. module: product +#: code:addons/product/product.py:361 +#, python-format +msgid "Unit of Measure categories Mismatch!" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_36_product_template +msgid "Blank DVD-RW" +msgstr "" + +#. module: product +#: selection:product.category,type:0 +msgid "View" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_template_action_tree +msgid "Product Templates" +msgstr "" + +#. module: product +#: field:product.category,parent_left:0 +msgid "Left Parent" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_max_margin:0 +msgid "Specify the maximum amount of margin over the base price." +msgstr "" + +#. module: product +#: constraint:product.pricelist.item:0 +msgid "" +"Error! You cannot assign the Main Pricelist as Other Pricelist in PriceList " +"Item!" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "or" +msgstr "" + +#. module: product +#: constraint:product.packaging:0 +msgid "Error: Invalid ean code" +msgstr "" + +#. module: product +#: field:product.pricelist.item,min_quantity:0 +msgid "Min. Quantity" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_12_product_template +msgid "Mouse, Wireless" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_22_product_template +msgid "Processor Core i5 2.70 Ghz" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_price_type +msgid "Price Type" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Max. Margin" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Base Price" +msgstr "" + +#. module: product +#: help:product.supplierinfo,name:0 +msgid "Supplier of this product" +msgstr "" + +#. module: product +#: help:product.pricelist.version,active:0 +msgid "" +"When a version is duplicated it is set to non active, so that the dates do " +"not overlaps with original version. You should change the dates and " +"reactivate the pricelist" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_18_product_template +msgid "HDD SH-2" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_17_product_template +msgid "HDD SH-1" +msgstr "" + +#. module: product +#: field:product.supplierinfo,name:0 +#: field:product.template,seller_ids:0 +msgid "Supplier" +msgstr "" + +#. module: product +#: help:product.template,cost_method:0 +msgid "" +"Standard Price: The cost price is manually updated at the end of a specific " +"period (usually every year). \n" +"Average Price: The cost price is recomputed at each incoming shipment." +msgstr "" + +#. module: product +#: field:product.product,qty_available:0 +msgid "Quantity On Hand" +msgstr "" + +#. module: product +#: field:product.price.type,name:0 +msgid "Price Name" +msgstr "" + +#. module: product +#: help:product.product,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: product +#: field:product.product,ean13:0 +msgid "EAN13 Barcode" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.action_product_price_list +#: model:ir.model,name:product.model_product_price_list +#: view:product.price_list:0 +#: report:product.pricelist:0 +#: field:product.pricelist.version,pricelist_id:0 +msgid "Price List" +msgstr "" + +#. module: product +#: field:product.product,virtual_available:0 +msgid "Forecasted Quantity" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Purchase" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_33_product_template +msgid "Headset USB" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Suppliers" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_sale_pricelist +msgid "Sales Pricelists" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "New Price =" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_7 +msgid "Accessories" +msgstr "" + +#. module: product +#: model:process.transition,name:product.process_transition_supplierofproduct0 +msgid "Supplier of the product" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_28_product_template +msgid "External Hard disk" +msgstr "" + +#. module: product +#: help:product.template,standard_price:0 +msgid "" +"Cost price of the product used for standard stock valuation in accounting " +"and used as a base price on purchase orders." +msgstr "" + +#. module: product +#: field:product.category,child_id:0 +msgid "Child Categories" +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_end:0 +msgid "End Date" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_litre +msgid "Liter(s)" +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Print" +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.ul,type:0 +#: field:product.uom,uom_type:0 +msgid "Type" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action2 +#: model:ir.actions.act_window,name:product.product_pricelist_action_for_purchase +#: model:ir.ui.menu,name:product.menu_product_pricelist_action2 +#: model:ir.ui.menu,name:product.menu_product_pricelist_main +msgid "Pricelists" +msgstr "" + +#. module: product +#: field:product.product,partner_ref:0 +msgid "Customer ref" +msgstr "" + +#. module: product +#: field:product.pricelist.type,key:0 +msgid "Key" +msgstr "" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_pricelist +#: model:ir.model,name:product.model_product_pricelist +#: field:product.product,pricelist_id:0 +#: view:product.supplierinfo:0 +msgid "Pricelist" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_hour +msgid "Hour(s)" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "In Development" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_res_partner +msgid "Partner" +msgstr "" + +#. module: product +#: model:process.transition,note:product.process_transition_supplierofproduct0 +msgid "" +"1 or several supplier(s) can be linked to a product. All information stands " +"in the product form." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_round:0 +msgid "Price Rounding" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_1_product_template +msgid "On Site Monitoring" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "days" +msgstr "" + +#. module: product +#: model:process.node,name:product.process_node_supplier0 +#: view:product.supplierinfo:0 +msgid "Supplier Information" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_res_currency +#: field:product.price.type,currency_id:0 +#: report:product.pricelist:0 +#: field:product.pricelist,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_46_product_template +msgid "Datacard" +msgstr "" + +#. module: product +#: help:product.template,uos_coeff:0 +msgid "" +"Coefficient to convert default Unit of Measure to Unit of Sale\n" +" uos = uom * coeff" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action_form +#: model:ir.ui.menu,name:product.menu_product_category_action_form +#: view:product.category:0 +msgid "Product Categories" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Procurement & Locations" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_20_product_template +msgid "Motherboard I9P57" +msgstr "" + +#. module: product +#: field:product.packaging,weight:0 +msgid "Total Package Weight" +msgstr "" + +#. module: product +#: help:product.packaging,code:0 +msgid "The code of the transport unit." +msgstr "" + +#. module: product +#: view:product.price.type:0 +msgid "Products Price Type" +msgstr "" + +#. module: product +#: field:product.product,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: product +#: field:product.product,price_extra:0 +msgid "Variant Price Extra" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_supplierinfo +msgid "Information about a product supplier" +msgstr "" + +#. module: product +#: help:product.uom,factor_inv:0 +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category:\n" +"1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: view:product.template:0 +#: field:product.template,description_purchase:0 +msgid "Purchase Description" +msgstr "" + +#. module: product +#: constraint:product.pricelist.version:0 +msgid "You cannot have 2 pricelist versions that overlap!" +msgstr "" + +#. module: product +#: help:product.pricelist.item,min_quantity:0 +msgid "" +"Specify the minimum quantity that needs to be bought/sold for the rule to " +"apply." +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_start:0 +msgid "First valid date for the version." +msgstr "" + +#. module: product +#: help:product.supplierinfo,delay:0 +msgid "" +"Lead time in days between the confirmation of the purchase order and the " +"reception of the products in your warehouse. Used by the scheduler for " +"automatic computation of the purchase order planning." +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_3_product_template +msgid "" +"17\" LCD Monitor\n" +"Processor AMD 8-Core\n" +"512MB RAM\n" +"HDD SH-1" +msgstr "" + +#. module: product +#: selection:product.template,type:0 +msgid "Stockable Product" +msgstr "" + +#. module: product +#: field:product.packaging,code:0 +msgid "Code" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_27_product_template +msgid "Laptop Customized" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_ul +msgid "Shipping Unit" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_35_product_template +msgid "Blank CD" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,suppinfo_id:0 +msgid "Partner Information" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action_sell +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you sell, whether " +"it's\n" +" a physical product, a consumable or a service you offer to\n" +" customers.\n" +"

\n" +" The product form contains information to simplify the sale\n" +" process: price, notes in the quotation, accounting data,\n" +" procurement methods, etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: view:product.price_list:0 +msgid "Cancel" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_37_product_template +msgid "All in one hi-speed printer with fax and scanner." +msgstr "" + +#. module: product +#: help:product.supplierinfo,min_qty:0 +msgid "" +"The minimal quantity to purchase to this supplier, expressed in the supplier " +"Product Unit of Measure if not empty, in the default unit of measure of the " +"product otherwise." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Information" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Products Listprices Items" +msgstr "" + +#. module: product +#: view:product.packaging:0 +msgid "Other Info" +msgstr "" + +#. module: product +#: field:product.pricelist.version,items_id:0 +msgid "Price List Items" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,price:0 +msgid "Unit Price" +msgstr "" + +#. module: product +#: field:product.category,parent_right:0 +msgid "Right Parent" +msgstr "" + +#. module: product +#: field:product.product,price:0 +msgid "Price" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_surcharge:0 +msgid "Price Surcharge" +msgstr "" + +#. module: product +#: field:product.product,code:0 +#: field:product.product,default_code:0 +msgid "Internal Reference" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_8_product_template +msgid "USB Keyboard, QWERTY" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_9 +msgid "Softwares" +msgstr "" + +#. module: product +#: field:product.product,packaging:0 +msgid "Logistical Units" +msgstr "" + +#. module: product +#: field:product.category,complete_name:0 +#: field:product.category,name:0 +#: field:product.pricelist.type,name:0 +#: field:product.pricelist.version,name:0 +#: field:product.template,name:0 +#: field:product.ul,name:0 +#: field:product.uom.categ,name:0 +msgid "Name" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_4 +msgid "Computers" +msgstr "" + +#. module: product +#: help:product.product,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "Obsolete" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_km +msgid "km" +msgstr "" + +#. module: product +#: field:product.template,standard_price:0 +msgid "Cost" +msgstr "" + +#. module: product +#: help:product.category,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of product categories." +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_dozen +msgid "Dozen(s)" +msgstr "" + +#. module: product +#: field:product.uom,factor:0 +#: field:product.uom,factor_inv:0 +msgid "Ratio" +msgstr "" + +#. module: product +#: field:product.packaging,width:0 +msgid "Width" +msgstr "" + +#. module: product +#: help:product.price.type,field:0 +msgid "Associated field in the product form." +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +#: field:product.template,uom_id:0 +#: field:product.uom,name:0 +msgid "Unit of Measure" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Printing Date" +msgstr "" + +#. module: product +#: field:product.template,uos_id:0 +msgid "Unit of Sale" +msgstr "" + +#. module: product +#: field:product.product,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_categ_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_categ_form_action +msgid "Unit of Measure Categories" +msgstr "" + +#. module: product +#: help:product.product,seller_id:0 +msgid "Main Supplier who has highest priority in Supplier List." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_5 +#: view:product.product:0 +msgid "Services" +msgstr "" + +#. module: product +#: help:product.product,ean13:0 +msgid "International Article Number used for product identification." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_category_action +msgid "" +"

\n" +" Here is a list of all your products classified by category. " +"You\n" +" can click a category to get the list of all products linked " +"to\n" +" this category or to a child of this category.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: code:addons/product/product.py:361 +#, python-format +msgid "" +"New Unit of Measure '%s' must belong to same Unit of Measure category '%s' " +"as of old Unit of Measure '%s'. If you need to change the unit of measure, " +"you may deactivate this product from the 'Procurements' tab and create a new " +"one." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_normal_action +#: model:ir.actions.act_window,name:product.product_normal_action_puchased +#: model:ir.actions.act_window,name:product.product_normal_action_sell +#: model:ir.actions.act_window,name:product.product_normal_action_tree +#: model:ir.ui.menu,name:product.menu_products +#: model:ir.ui.menu,name:product.prod_config_main +#: view:product.product:0 +msgid "Products" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_32_product_template +msgid "" +"Hands free headset for laptop PC with in-line microphone and headphone plug." +msgstr "" + +#. module: product +#: help:product.packaging,rows:0 +msgid "The number of layers on a pallet or box" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_min_margin:0 +msgid "Specify the minimum amount of margin over the base price." +msgstr "" + +#. module: product +#: field:product.template,weight_net:0 +msgid "Net Weight" +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Pallet Dimension" +msgstr "" + +#. module: product +#: help:product.product,image:0 +msgid "" +"This field holds the image used as image for the product, limited to " +"1024x1024px." +msgstr "" + +#. module: product +#: help:product.pricelist.item,categ_id:0 +msgid "" +"Specify a product category if this rule only applies to products belonging " +"to this category or its children categories. Keep empty otherwise." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Inventory" +msgstr "" + +#. module: product +#: field:product.product,seller_info_id:0 +msgid "Supplier Info" +msgstr "" + +#. module: product +#: code:addons/product/product.py:732 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_2_product_template +msgid "On Site Assistance" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_39_product_template +msgid "Toner Cartridge" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_uom_form_action +#: model:ir.ui.menu,name:product.menu_product_uom_form_action +#: model:ir.ui.menu,name:product.next_id_16 +#: view:product.uom:0 +msgid "Units of Measure" +msgstr "" + +#. module: product +#: field:product.supplierinfo,min_qty:0 +msgid "Minimal Quantity" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_code:0 +msgid "" +"This supplier's product code will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_43_product_template +msgid "Zed+ Antivirus" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_version_id:0 +msgid "Price List Version" +msgstr "" + +#. module: product +#: help:product.pricelist.item,sequence:0 +msgid "" +"Gives the order in which the pricelist items will be checked. The evaluation " +"gives highest priority to lowest sequence and stops as soon as a matching " +"item is found." +msgstr "" + +#. module: product +#: view:product.product:0 +#: selection:product.template,type:0 +msgid "Consumable" +msgstr "" + +#. module: product +#: help:product.price.type,currency_id:0 +msgid "The currency the field is expressed in." +msgstr "" + +#. module: product +#: help:product.template,weight:0 +msgid "The gross weight in Kg." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_37_product_template +msgid "Printer, All-in-one" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Procurement" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_23_product_template +msgid "Processor AMD 8-Core" +msgstr "" + +#. module: product +#: view:product.product:0 +#: view:product.template:0 +msgid "Weights" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Description for Quotations" +msgstr "" + +#. module: product +#: help:pricelist.partnerinfo,price:0 +msgid "" +"This price will be considered as a price for the supplier Unit of Measure if " +"any or the default Unit of Measure of the product otherwise" +msgstr "" + +#. module: product +#: field:product.template,uom_po_id:0 +msgid "Purchase Unit of Measure" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Group by..." +msgstr "" + +#. module: product +#: field:product.product,image_medium:0 +msgid "Medium-sized image" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +#: model:product.uom.categ,name:product.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: product +#: field:product.pricelist.version,date_start:0 +msgid "Start Date" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_38_product_template +msgid "Ink Cartridge" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_cm +msgid "cm" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action +msgid "" +"

\n" +" Click to add a pricelist version.\n" +"

\n" +" There can be more than one version of a pricelist, each of\n" +" these must be valid during a certain period of time. Some\n" +" examples of versions: Main Prices, 2010, 2011, Summer " +"Sales,\n" +" etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: help:product.template,uom_po_id:0 +msgid "" +"Default Unit of Measure used for purchase orders. It must be in the same " +"category than the default unit of measure." +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_26_product_template +msgid "" +"17\" Monitor\n" +"6GB RAM\n" +"Hi-Speed 234Q Processor\n" +"QWERTY keyboard" +msgstr "" + +#. module: product +#: field:product.uom,rounding:0 +msgid "Rounding Precision" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Consumable products" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_21_product_template +msgid "Motherboard A20Z7" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_1_product_template +#: model:product.template,description_sale:product.product_product_1_product_template +msgid "This type of service include basic monitoring of products." +msgstr "" + +#. module: product +#: help:product.pricelist.version,date_end:0 +msgid "Last valid date for the version." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_19_product_template +msgid "HDD on Demand" +msgstr "" + +#. module: product +#: field:product.price.type,active:0 +#: field:product.pricelist,active:0 +#: field:product.pricelist.version,active:0 +#: field:product.product,active:0 +#: field:product.uom,active:0 +msgid "Active" +msgstr "" + +#. module: product +#: field:product.product,price_margin:0 +msgid "Variant Price Margin" +msgstr "" + +#. module: product +#: field:product.pricelist,name:0 +msgid "Pricelist Name" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_1 +msgid "Saleable" +msgstr "" + +#. module: product +#: sql_constraint:product.uom:0 +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_24_product_template +msgid "Graphics Card" +msgstr "" + +#. module: product +#: help:product.packaging,ean:0 +msgid "The EAN code of the package unit." +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_uom:0 +msgid "This comes from the product form." +msgstr "" + +#. module: product +#: field:product.packaging,weight_ul:0 +msgid "Empty Package Weight" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_41_product_template +msgid "Windows Home Server 2011" +msgstr "" + +#. module: product +#: field:product.price.type,field:0 +msgid "Product Field" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_5_product_template +msgid "Custom computer assembled on order based on customer's requirement." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_price_type_action +#: model:ir.ui.menu,name:product.menu_product_price_type +msgid "Price Types" +msgstr "" + +#. module: product +#: help:product.template,uom_id:0 +msgid "Default Unit of Measure used for all stock operation." +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Sales" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_categ_form_action +msgid "" +"

\n" +" Click to add a new unit of measure category.\n" +"

\n" +" Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of " +"measure:\n" +" Hours, Days.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: help:pricelist.partnerinfo,min_quantity:0 +msgid "" +"The minimal quantity to trigger this rule, expressed in the supplier Unit of " +"Measure if any or in the default Unit of Measure of the product otherrwise." +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: product +#: model:product.pricelist,name:product.list0 +msgid "Public Pricelist" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_code:0 +msgid "Supplier Product Code" +msgstr "" + +#. module: product +#: help:product.pricelist,active:0 +msgid "" +"If unchecked, it will allow you to hide the pricelist without removing it." +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pallet" +msgstr "" + +#. module: product +#: field:product.packaging,ul_qty:0 +msgid "Package by layer" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_product +#: model:process.node,name:product.process_node_product0 +#: model:process.process,name:product.process_process_productprocess0 +#: field:product.packaging,product_id:0 +#: field:product.pricelist.item,product_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,product_id:0 +#: model:res.request.link,name:product.req_link_product +msgid "Product" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Price:" +msgstr "" + +#. module: product +#: field:product.template,weight:0 +msgid "Gross Weight" +msgstr "" + +#. module: product +#: help:product.packaging,qty:0 +msgid "The total number of products you can put by pallet or box." +msgstr "" + +#. module: product +#: field:product.product,variants:0 +msgid "Variants" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_category_action +#: model:ir.ui.menu,name:product.menu_products_category +msgid "Products by Category" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_16_product_template +msgid "Computer Case" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_9_product_template +msgid "USB Keyboard, AZERTY" +msgstr "" + +#. module: product +#: help:product.supplierinfo,sequence:0 +msgid "Assigns the priority to the list of product supplier." +msgstr "" + +#. module: product +#: constraint:product.pricelist.item:0 +msgid "Error! The minimum margin should be lower than the maximum margin." +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_uos +msgid "Manage Secondary Unit of Measure" +msgstr "" + +#. module: product +#: help:product.uom,rounding:0 +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Rounding Method" +msgstr "" + +#. module: product +#: model:ir.actions.report.xml,name:product.report_product_label +msgid "Products Labels" +msgstr "" + +#. module: product +#: model:product.ul,name:product.product_ul_big_box +msgid "Box 30x40x60" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_47_product_template +msgid "Switch, 24 ports" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_consultant_product_template +#: selection:product.template,type:0 +msgid "Service" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Internal Description" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_48_product_template +msgid "USB Adapter" +msgstr "" + +#. module: product +#: help:product.template,uos_id:0 +msgid "" +"Sepcify a unit of measure here if invoicing is made in another unit of " +"measure than inventory. Keep empty to use the default unit of measure." +msgstr "" + +#. module: product +#: code:addons/product/product.py:208 +#, python-format +msgid "Cannot change the category of existing Unit of Measure '%s'." +msgstr "" + +#. module: product +#: help:product.packaging,height:0 +msgid "The height of the package" +msgstr "" + +#. module: product +#: view:product.pricelist:0 +msgid "Products Price List" +msgstr "" + +#. module: product +#: field:product.pricelist,company_id:0 +#: field:product.pricelist.item,company_id:0 +#: field:product.pricelist.version,company_id:0 +#: view:product.product:0 +#: field:product.supplierinfo,company_id:0 +#: field:product.template,company_id:0 +msgid "Company" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_26_product_template +msgid "Laptop S3450" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Default Unit of Measure" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:377 +#, python-format +msgid "Partner section of the product form" +msgstr "" + +#. module: product +#: help:product.price.type,name:0 +msgid "Name of this kind of price." +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_3 +msgid "Other Products" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_9_product_template +msgid "This product is configured with example of push/pull flows" +msgstr "" + +#. module: product +#: field:product.product,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: product +#: model:product.uom,name:product.product_uom_unit +msgid "Unit(s)" +msgstr "" + +#. module: product +#: code:addons/product/product.py:176 +#, python-format +msgid "Error!" +msgstr "" + +#. module: product +#: field:product.packaging,length:0 +msgid "Length" +msgstr "" + +#. module: product +#: model:product.uom.categ,name:product.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_8 +msgid "Components" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_type +#: field:product.pricelist,type:0 +msgid "Pricelist Type" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_6 +msgid "External Devices" +msgstr "" + +#. module: product +#: field:product.product,color:0 +msgid "Color Index" +msgstr "" + +#. module: product +#: help:product.template,sale_ok:0 +msgid "Specify if the product can be selected in a sales order line." +msgstr "" + +#. module: product +#: view:product.product:0 +#: field:product.template,sale_ok:0 +msgid "Can be Sold" +msgstr "" + +#. module: product +#: field:product.template,produce_delay:0 +msgid "Manufacturing Lead Time" +msgstr "" + +#. module: product +#: field:product.supplierinfo,pricelist_ids:0 +msgid "Supplier Pricelist" +msgstr "" + +#. module: product +#: field:product.pricelist.item,base:0 +msgid "Based on" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_10 +msgid "Raw Materials" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_13_product_template +msgid "RAM SR5" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_14_product_template +msgid "RAM SR2" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action_puchased +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you purchase, " +"whether\n" +" it's a physical product, a consumable or services you buy " +"to\n" +" subcontractants.\n" +"

\n" +" The product form contains detailed information to improve " +"the\n" +" purchase process: prices, procurement logistics, accounting " +"data,\n" +" available suppliers, etc.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_44_product_template +msgid "Full featured image editing software." +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_version +#: view:product.pricelist:0 +#: view:product.pricelist.version:0 +msgid "Pricelist Version" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "* ( 1 + " +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_31_product_template +msgid "Multimedia Speakers" +msgstr "" + +#. module: product +#: field:product.product,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Sale Conditions" +msgstr "" + +#. module: product +#: view:product.packaging:0 +#: view:product.product:0 +msgid "Palletization" +msgstr "" + +#. module: product +#: report:product.pricelist:0 +msgid "Price List Name" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Description for Suppliers" +msgstr "" + +#. module: product +#: field:product.supplierinfo,delay:0 +msgid "Delivery Lead Time" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "months" +msgstr "" + +#. module: product +#: help:product.uom,active:0 +msgid "" +"By unchecking the active field you can disable a unit of measure without " +"deleting it." +msgstr "" + +#. module: product +#: field:product.product,seller_delay:0 +msgid "Supplier Lead Time" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_decimal_precision +msgid "decimal.precision" +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Box" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_surcharge:0 +msgid "" +"Specify the fixed amount to add or substract(if negative) to the amount " +"calculated with the discount." +msgstr "" + +#. module: product +#: help:product.product,qty_available:0 +msgid "" +"Current quantity of products.\n" +"In a context with a single Stock Location, this includes goods stored at " +"this Location, or any of its children.\n" +"In a context with a single Warehouse, this includes goods stored in the " +"Stock Location of this Warehouse, or any of its children.\n" +"In a context with a single Shop, this includes goods stored in the Stock " +"Location of the Warehouse of this Shop, or any of its children.\n" +"Otherwise, this includes goods stored in any Stock Location with 'internal' " +"type." +msgstr "" + +#. module: product +#: help:product.template,type:0 +msgid "" +"Consumable: Will not imply stock management for this product. \n" +"Stockable product: Will imply stock management for this product." +msgstr "" + +#. module: product +#: help:product.pricelist.type,key:0 +msgid "" +"Used in the code to select specific prices based on the context. Keep " +"unchanged." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_normal_action +msgid "" +"

\n" +" Click to define a new product.\n" +"

\n" +" You must define a product for everything you buy or sell,\n" +" whether it's a physical product, a consumable or service.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Context..." +msgstr "" + +#. module: product +#: field:product.packaging,ul:0 +msgid "Type of Package" +msgstr "" + +#. module: product +#: help:product.category,type:0 +msgid "" +"A category of the view type is a virtual category that can be used as the " +"parent of another category to create a hierarchical structure." +msgstr "" + +#. module: product +#: selection:product.ul,type:0 +msgid "Pack" +msgstr "" + +#. module: product +#: help:product.pricelist.item,product_tmpl_id:0 +msgid "" +"Specify a template if this rule only applies to one product template. Keep " +"empty otherwise." +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_2_product_template +msgid "" +"This type of service include assistance for security questions, system " +"configuration requirements, implementation or special needs." +msgstr "" + +#. module: product +#: field:product.product,image:0 +msgid "Image" +msgstr "" + +#. module: product +#: view:product.uom.categ:0 +msgid "Units of Measure categories" +msgstr "" + +#. module: product +#: model:product.template,description_sale:product.product_product_4_product_template +msgid "" +"19\" LCD Monitor\n" +"Processor Core i5 2.70 Ghz\n" +"2GB RAM\n" +"HDD SH-1" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Descriptions" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_stock_packaging +msgid "Manage Product Packaging" +msgstr "" + +#. module: product +#: model:product.category,name:product.product_category_2 +msgid "Internal" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_45_product_template +msgid "Router R430" +msgstr "" + +#. module: product +#: help:product.packaging,sequence:0 +msgid "Gives the sequence order when displaying a list of packaging." +msgstr "" + +#. module: product +#: selection:product.category,type:0 +#: selection:product.template,state:0 +msgid "Normal" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:179 +#, python-format +msgid "" +"At least one pricelist has no active version !\n" +"Please create or activate one." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_max_margin:0 +msgid "Max. Price Margin" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid "Min. Margin" +msgstr "" + +#. module: product +#: help:product.supplierinfo,product_name:0 +msgid "" +"This supplier's product name will be used when printing a request for " +"quotation. Keep empty to use the internal one." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action_for_purchase +msgid "" +"

\n" +" Click to create a pricelist.\n" +"

\n" +" A price list contains rules to be evaluated in order to " +"compute\n" +" the purchase price. The default price list has only one " +"rule; use\n" +" the cost price defined on the product form, so that you do " +"not have to\n" +" worry about supplier pricelists if you have very simple " +"needs.\n" +"

\n" +" But you can also import complex price lists form your " +"supplier\n" +" that may depends on the quantities ordered or the current\n" +" promotions.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: selection:product.template,mes_type:0 +msgid "Variable" +msgstr "" + +#. module: product +#: field:product.template,rental:0 +msgid "Can be Rent" +msgstr "" + +#. module: product +#: model:product.price.type,name:product.standard_price +msgid "Cost Price" +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_min_margin:0 +msgid "Min. Price Margin" +msgstr "" + +#. module: product +#: model:res.groups,name:product.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: product +#: help:product.packaging,weight:0 +msgid "The weight of a full package, pallet or box." +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "e.g: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_25_product_template +msgid "" +"17\" Monitor\n" +"4GB RAM\n" +"Standard-1294P Processor\n" +"QWERTY keyboard" +msgstr "" + +#. module: product +#: field:product.category,sequence:0 +#: field:product.packaging,sequence:0 +#: field:product.pricelist.item,sequence:0 +#: field:product.supplierinfo,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: product +#: help:product.template,produce_delay:0 +msgid "" +"Average delay in days to produce this product. In the case of multi-level " +"BOM, the manufacturing lead times of the components will be added." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_assembly_product_template +msgid "Assembly Service Cost" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_pricelist_item +msgid "Pricelist item" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_uom_form_action +msgid "" +"

\n" +" Click to add a new unit of measure.\n" +"

\n" +" You must define a conversion rate between several Units of\n" +" Measure within the same category.\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_11_product_template +msgid "Mouse, Laser" +msgstr "" + +#. module: product +#: view:product.template:0 +msgid "Delays" +msgstr "" + +#. module: product +#: field:product.category,type:0 +msgid "Category Type" +msgstr "" + +#. module: product +#: model:process.node,note:product.process_node_product0 +msgid "Creation of the product" +msgstr "" + +#. module: product +#: field:pricelist.partnerinfo,name:0 +#: field:product.packaging,name:0 +#: report:product.pricelist:0 +#: view:product.product:0 +#: field:product.template,description:0 +msgid "Description" +msgstr "" + +#. module: product +#: field:product.packaging,ean:0 +msgid "EAN" +msgstr "" + +#. module: product +#: view:product.pricelist.item:0 +msgid " ) + " +msgstr "" + +#. module: product +#: field:product.template,volume:0 +#: model:product.uom.categ,name:product.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: product +#: help:product.product,image_small:0 +msgid "" +"Small-sized image of the product. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_40_product_template +msgid "Windows 7 Professional" +msgstr "" + +#. module: product +#: selection:product.uom,uom_type:0 +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: product +#: field:product.supplierinfo,product_uom:0 +msgid "Supplier Unit of Measure" +msgstr "" + +#. module: product +#: view:product.product:0 +msgid "Product Variant" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_6_product_template +msgid "15” LCD Monitor" +msgstr "" + +#. module: product +#: code:addons/product/pricelist.py:379 +#: field:product.pricelist.item,base_pricelist_id:0 +#, python-format +msgid "Other Pricelist" +msgstr "" + +#. module: product +#: model:ir.actions.act_window,help:product.product_pricelist_action2 +msgid "" +"

\n" +" Click to create a pricelist.\n" +"

\n" +" A price list contains rules to be evaluated in order to " +"compute\n" +" the sales price of the products.\n" +"

\n" +" Price lists may have several versions (2010, 2011, Promotion " +"of\n" +" February 2010, etc.) and each version may have several " +"rules.\n" +" (e.g. the customer price of a product category will be based " +"on\n" +" the supplier price multiplied by 1.80).\n" +"

\n" +" " +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_template +#: field:product.pricelist.item,product_tmpl_id:0 +#: field:product.product,product_tmpl_id:0 +#: view:product.template:0 +msgid "Product Template" +msgstr "" + +#. module: product +#: field:product.template,cost_method:0 +#: model:res.groups,name:product.group_costing_method +msgid "Costing Method" +msgstr "" + +#. module: product +#: model:ir.model,name:product.model_product_category +#: field:product.pricelist.item,categ_id:0 +msgid "Product Category" +msgstr "" + +#. module: product +#: model:product.template,description:product.product_product_19_product_template +msgid "On demand hard-disk having capacity based on requirement." +msgstr "" + +#. module: product +#: selection:product.template,state:0 +msgid "End of Lifecycle" +msgstr "" + +#. module: product +#: model:product.template,name:product.product_product_15_product_template +msgid "RAM SR3" +msgstr "" + +#. module: product +#: help:product.product,packaging:0 +msgid "" +"Gives the different ways to package the same product. This has no impact on " +"the picking order and is mainly used if you use the EDI module." +msgstr "" + +#. module: product +#: model:ir.actions.act_window,name:product.product_pricelist_action +#: model:ir.ui.menu,name:product.menu_product_pricelist_action +#: field:product.pricelist,version_id:0 +msgid "Pricelist Versions" +msgstr "" + +#. module: product +#: help:product.pricelist.item,price_round:0 +msgid "" +"Sets the price so that it is a multiple of this value.\n" +"Rounding is applied after the discount and before the surcharge.\n" +"To have prices that end in 9.99, set rounding 10, surcharge -0.01" +msgstr "" + +#. module: product +#: field:product.template,list_price:0 +msgid "Sale Price" +msgstr "" + +#. module: product +#: help:product.uom,category_id:0 +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: product +#: constraint:product.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: product +#: help:product.product,image_medium:0 +msgid "" +"Medium-sized image of the product. It is automatically resized as a " +"128x128px image, with aspect ratio preserved, only when the image exceeds " +"one of those sizes. Use this field in form views or some kanban views." +msgstr "" + +#. module: product +#: view:product.uom:0 +msgid "e.g: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: product +#: help:product.supplierinfo,qty:0 +msgid "This is a quantity which is converted into Default Unit of Measure." +msgstr "" + +#. module: product +#: help:product.template,volume:0 +msgid "The volume in m3." +msgstr "" + +#. module: product +#: field:product.pricelist.item,price_discount:0 +msgid "Price Discount" +msgstr "" diff --git a/addons/product/i18n/zh_CN.po b/addons/product/i18n/zh_CN.po index 0cdfc9fbd42..1857ed5081f 100644 --- a/addons/product/i18n/zh_CN.po +++ b/addons/product/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:06+0000\n" -"PO-Revision-Date: 2013-07-28 11:18+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2013-11-19 10:25+0000\n" +"Last-Translator: Guipo Hao \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-09-12 05:45+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: product #: field:product.packaging,rows:0 @@ -2484,6 +2484,15 @@ msgid "" "

\n" " " msgstr "" +"

\n" +" 点击创建一个价格列表。\n" +"

\n" +" 价格列表包括待评审的规则来计算产品价格。\n" +"

\n" +" 价格列表可能有不同版本(2010, 2011, 2010年2月促销等等) ,每个版本可能有几个不同的规则。\n" +" (例如:给顾客的产品价格按照供应商价格的1.8倍提交。\n" +"

\n" +" " #. module: product #: model:ir.model,name:product.model_product_template diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py index 07bc38339bd..279f921f6c9 100644 --- a/addons/product/pricelist.py +++ b/addons/product/pricelist.py @@ -146,7 +146,6 @@ class product_pricelist(osv.osv): "currency_id": _get_currency } - #def price_get_multi(self, cr, uid, product_ids, context=None): def price_get_multi(self, cr, uid, pricelist_ids, products_by_qty_by_partner, context=None): """multi products 'price_get'. @param pricelist_ids: @@ -156,178 +155,142 @@ class product_pricelist(osv.osv): 'date': Date of the pricelist (%Y-%m-%d),} @return: a dict of dict with product_id as key and a dict 'price by pricelist' as value """ - - def _create_parent_category_list(id, lst): - if not id: - return [] - parent = product_category_tree.get(id) - if parent: - lst.append(parent) - return _create_parent_category_list(parent, lst) - else: - return lst - # _create_parent_category_list - - if context is None: - context = {} - - date = context.get('date') or time.strftime('%Y-%m-%d') - - currency_obj = self.pool.get('res.currency') - product_obj = self.pool.get('product.product') - product_category_obj = self.pool.get('product.category') - product_uom_obj = self.pool.get('product.uom') - supplierinfo_obj = self.pool.get('product.supplierinfo') - price_type_obj = self.pool.get('product.price.type') - - # product.pricelist.version: if not pricelist_ids: pricelist_ids = self.pool.get('product.pricelist').search(cr, uid, [], context=context) + results = {} + for pricelist in self.browse(cr, uid, pricelist_ids, context=context): + subres = self._price_get_multi(cr, uid, pricelist, products_by_qty_by_partner, context=context) + for product_id,price in subres.items(): + results.setdefault(product_id, {}) + results[product_id][pricelist.id] = price + return results - pricelist_version_ids = self.pool.get('product.pricelist.version').search(cr, uid, [ - ('pricelist_id', 'in', pricelist_ids), - '|', - ('date_start', '=', False), - ('date_start', '<=', date), - '|', - ('date_end', '=', False), - ('date_end', '>=', date), - ]) - if len(pricelist_ids) != len(pricelist_version_ids): - raise osv.except_osv(_('Warning!'), _("At least one pricelist has no active version !\nPlease create or activate one.")) + def _price_get_multi(self, cr, uid, pricelist, products_by_qty_by_partner, context=None): + context = context or {} + date = context.get('date') or time.strftime('%Y-%m-%d') - # product.product: - product_ids = [i[0] for i in products_by_qty_by_partner] - #products = dict([(item['id'], item) for item in product_obj.read(cr, uid, product_ids, ['categ_id', 'product_tmpl_id', 'uos_id', 'uom_id'])]) - products = product_obj.browse(cr, uid, product_ids, context=context) - products_dict = dict([(item.id, item) for item in products]) + products = map(lambda x: x[0], products_by_qty_by_partner) + currency_obj = self.pool.get('res.currency') + product_obj = self.pool.get('product.product') + product_uom_obj = self.pool.get('product.uom') + price_type_obj = self.pool.get('product.price.type') - # product.category: - product_category_ids = product_category_obj.search(cr, uid, []) - product_categories = product_category_obj.read(cr, uid, product_category_ids, ['parent_id']) - product_category_tree = dict([(item['id'], item['parent_id'][0]) for item in product_categories if item['parent_id']]) + version = False + for v in pricelist.version_id: + if ((v.date_start is False) or (v.date_start <= date)) and ((v.date_end is False) or (v.date_end >= date)): + version = v + break + + categ_ids = {} + for p in products: + categ = p.categ_id + while categ: + categ_ids[categ.id] = True + categ = categ.parent_id + categ_ids = categ_ids.keys() + + prod_ids = [x.id for x in products] + prod_tmpl_ids = [x.product_tmpl_id.id for x in products] + + # Load all rules + cr.execute( + 'SELECT i.id ' + 'FROM product_pricelist_item AS i ' + 'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = any(%s)) ' + 'AND (product_id IS NULL OR (product_id = any(%s))) ' + 'AND ((categ_id IS NULL) OR (categ_id = any(%s))) ' + 'AND (price_version_id = %s) ' + 'ORDER BY sequence, min_quantity desc', + (prod_tmpl_ids, prod_ids, categ_ids, version.id)) + + item_ids = [x[0] for x in cr.fetchall()] + items = self.pool.get('product.pricelist.item').browse(cr, uid, item_ids, context=context) + + price_types = {} results = {} - for product_id, qty, partner in products_by_qty_by_partner: - for pricelist_id in pricelist_ids: - price = False - - tmpl_id = products_dict[product_id].product_tmpl_id and products_dict[product_id].product_tmpl_id.id or False - - categ_id = products_dict[product_id].categ_id and products_dict[product_id].categ_id.id or False - categ_ids = _create_parent_category_list(categ_id, [categ_id]) - if categ_ids: - categ_where = '(categ_id IN (' + ','.join(map(str, categ_ids)) + '))' - else: - categ_where = '(categ_id IS NULL)' - - if partner: - partner_where = 'base <> -2 OR %s IN (SELECT name FROM product_supplierinfo WHERE product_id = %s) ' - partner_args = (partner, tmpl_id) - else: - partner_where = 'base <> -2 ' - partner_args = () - - cr.execute( - 'SELECT i.*, pl.currency_id ' - 'FROM product_pricelist_item AS i, ' - 'product_pricelist_version AS v, product_pricelist AS pl ' - 'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = %s) ' - 'AND (product_id IS NULL OR product_id = %s) ' - 'AND (' + categ_where + ' OR (categ_id IS NULL)) ' - 'AND (' + partner_where + ') ' - 'AND price_version_id = %s ' - 'AND (min_quantity IS NULL OR min_quantity <= %s) ' - 'AND i.price_version_id = v.id AND v.pricelist_id = pl.id ' - 'ORDER BY sequence', - (tmpl_id, product_id) + partner_args + (pricelist_version_ids[0], qty)) - res1 = cr.dictfetchall() - uom_price_already_computed = False - for res in res1: - if res: - if res['base'] == -1: - if not res['base_pricelist_id']: - price = 0.0 - else: - price_tmp = self.price_get(cr, uid, - [res['base_pricelist_id']], product_id, - qty, context=context)[res['base_pricelist_id']] - ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id - uom_price_already_computed = True - price = currency_obj.compute(cr, uid, - ptype_src, res['currency_id'], - price_tmp, round=False, - context=context) - elif res['base'] == -2: - # this section could be improved by moving the queries outside the loop: - where = [] - if partner: - where = [('name', '=', partner) ] - sinfo = supplierinfo_obj.search(cr, uid, - [('product_id', '=', tmpl_id)] + where) - price = 0.0 - if sinfo: - qty_in_product_uom = qty - product_default_uom = product_obj.read(cr, uid, [product_id], ['uom_id'])[0]['uom_id'][0] - supplier = supplierinfo_obj.browse(cr, uid, sinfo, context=context)[0] - seller_uom = supplier.product_uom and supplier.product_uom.id or False - if seller_uom and product_default_uom and product_default_uom != seller_uom: - uom_price_already_computed = True - qty_in_product_uom = product_uom_obj._compute_qty(cr, uid, product_default_uom, qty, to_uom_id=seller_uom) - cr.execute('SELECT * ' \ - 'FROM pricelist_partnerinfo ' \ - 'WHERE suppinfo_id IN %s' \ - 'AND min_quantity <= %s ' \ - 'ORDER BY min_quantity DESC LIMIT 1', (tuple(sinfo),qty_in_product_uom,)) - res2 = cr.dictfetchone() - if res2: - price = res2['price'] - else: - price_type = price_type_obj.browse(cr, uid, int(res['base'])) - uom_price_already_computed = True - price = currency_obj.compute(cr, uid, - price_type.currency_id.id, res['currency_id'], - product_obj.price_get(cr, uid, [product_id], - price_type.field, context=context)[product_id], round=False, context=context) - - if price is not False: - price_limit = price - price = price * (1.0+(res['price_discount'] or 0.0)) - price = rounding(price, res['price_round']) #TOFIX: rounding with tools.float_rouding - price += (res['price_surcharge'] or 0.0) - if res['price_min_margin']: - price = max(price, price_limit+res['price_min_margin']) - if res['price_max_margin']: - price = min(price, price_limit+res['price_max_margin']) + for product, qty, partner in products_by_qty_by_partner: + uom_price_already_computed = False + results[product.id] = 0.0 + price = False + for rule in items: + if rule.min_quantity and qtyrule.product_tmpl_id.id: + continue + if rule.product_id and product.id<>rule.product_id.id: + continue + if rule.categ_id: + cat = product.categ_id + while cat: + if cat.id == rule.categ_id.id: break + cat = cat.parent_id + if not cat: + continue - else: - # False means no valid line found ! But we may not raise an - # exception here because it breaks the search - price = False + if rule.base == -1: + if rule.base_pricelist_id: + price_tmp = self._price_get_multi(cr, uid, + rule.base_pricelist_id, [(product, + qty, False)], context=context)[product.id] + ptype_src = rule.base_pricelist_id.currency_id.id + uom_price_already_computed = True + price = currency_obj.compute(cr, uid, + ptype_src, pricelist.currency_id.id, + price_tmp, round=False, + context=context) + elif rule.base == -2: + for seller in product.seller_ids: + if (not partner) or (seller.name.id<>partner): + continue + product_default_uom = product.uom_id.id + seller_uom = seller.product_uom and seller.product_uom.id or False + if seller_uom and product_default_uom and product_default_uom != seller_uom: + uom_price_already_computed = True + qty = product_uom_obj._compute_qty(cr, uid, product_default_uom, qty, to_uom_id=seller_uom) + for line in seller.pricelist_ids: + if line.min_quantity <= qty: + price = line.price - if price: - results['item_id'] = res['id'] - if 'uom' in context and not uom_price_already_computed: - product = products_dict[product_id] - uom = product.uos_id or product.uom_id - price = product_uom_obj._compute_price(cr, uid, uom.id, price, context['uom']) - - if results.get(product_id): - results[product_id][pricelist_id] = price else: - results[product_id] = {pricelist_id: price} + if rule.base not in price_types: + price_types[rule.base] = price_type_obj.browse(cr, uid, int(rule.base)) + price_type = price_types[rule.base] + uom_price_already_computed = True + price = currency_obj.compute(cr, uid, + price_type.currency_id.id, pricelist.currency_id.id, + product_obj._price_get(cr, uid, [product], + price_type.field, context=context)[product.id], round=False, context=context) + + if price is not False: + price_limit = price + price = price * (1.0+(rule.price_discount or 0.0)) + price = rounding(price, rule.price_round) #TOFIX: rounding with tools.float_rouding + price += (rule.price_surcharge or 0.0) + if rule.price_min_margin: + price = max(price, price_limit+rule.price_min_margin) + if rule.price_max_margin: + price = min(price, price_limit+rule.price_max_margin) + break + + if price: + if 'uom' in context and not uom_price_already_computed: + product = products_dict[product.id] + uom = product.uos_id or product.uom_id + price = product_uom_obj._compute_price(cr, uid, uom.id, price, context['uom']) + + results[product.id] = price return results def price_get(self, cr, uid, ids, prod_id, qty, partner=None, context=None): - res_multi = self.price_get_multi(cr, uid, pricelist_ids=ids, products_by_qty_by_partner=[(prod_id, qty, partner)], context=context) + product = self.pool.get('product.product').browse(cr, uid, prod_id, context=context) + res_multi = self.price_get_multi(cr, uid, pricelist_ids=ids, products_by_qty_by_partner=[(product, qty, partner)], context=context) res = res_multi[prod_id] - res.update({'item_id': {ids[-1]: res_multi.get('item_id', ids[-1])}}) return res - class product_pricelist_version(osv.osv): _name = "product.pricelist.version" _description = "Pricelist Version" diff --git a/addons/product/product.py b/addons/product/product.py index 3220d695239..e73486c2e13 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -135,7 +135,7 @@ class product_uom(osv.osv): '1 * (reference unit) = ratio * (this unit)'), 'factor_inv': fields.function(_factor_inv, digits=(12,12), fnct_inv=_factor_inv_write, - string='Ratio', + string='Bigger Ratio', help='How many times this Unit of Measure is bigger than the reference Unit of Measure in this category:\n'\ '1 * (this unit) = ratio * (reference unit)', required=True), 'rounding': fields.float('Rounding Precision', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, @@ -410,7 +410,7 @@ class product_template(osv.osv): help='Coefficient to convert default Unit of Measure to Unit of Sale\n' ' uos = uom * coeff'), 'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'), - 'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Supplier'), + 'seller_ids': fields.one2many('product.supplierinfo', 'product_tmpl_id', 'Supplier'), 'company_id': fields.many2one('res.company', 'Company', select=1), # image: all image fields are base64 encoded and PIL-supported 'image': fields.binary("Image", @@ -517,6 +517,7 @@ class product_product(osv.osv): return res def _product_price(self, cr, uid, ids, name, arg, context=None): + plobj = self.pool.get('product.pricelist') res = {} if context is None: context = {} @@ -526,15 +527,16 @@ class product_product(osv.osv): if pricelist: # Support context pricelists specified as display_name or ID for compatibility if isinstance(pricelist, basestring): - pricelist_ids = self.pool.get('product.pricelist').name_search( + pricelist_ids = plobj.name_search( cr, uid, pricelist, operator='=', context=context, limit=1) pricelist = pricelist_ids[0][0] if pricelist_ids else pricelist + + products = self.browse(cr, uid, ids, context=context) + qtys = map(lambda x: (x, quantity, partner), products) + pl = plobj.browse(cr, uid, pricelist, context=context) + price = plobj._price_get_multi(cr,uid, pl, qtys, context=context) for id in ids: - try: - price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], id, quantity, partner=partner, context=context)[pricelist] - except: - price = 0.0 - res[id] = price + res[id] = price.get(id, 0.0) for id in ids: res.setdefault(id, 0.0) return res @@ -564,6 +566,12 @@ class product_product(osv.osv): res[product.id] = (res[product.id] or 0.0) * (product.price_margin or 1.0) + product.price_extra return res + def _save_product_lst_price(self, cr, uid, product_id, field_name, field_value, arg, context=None): + field_value = field_value or 0.0 + product = self.browse(cr, uid, product_id, context=context) + list_price = (field_value - product.price_extra) / (product.price_margin or 1.0) + return self.write(cr, uid, [product_id], {'list_price': list_price}, context=context) + def _get_partner_code_name(self, cr, uid, ids, product, partner_id, context=None): for supinfo in product.seller_ids: if supinfo.name.id == partner_id: @@ -642,14 +650,15 @@ class product_product(osv.osv): _table = "product_product" _inherits = {'product.template': 'product_tmpl_id'} _inherit = ['mail.thread'] + _inherit = ['mail.thread'] _order = 'default_code,name_template' _columns = { 'qty_available': fields.function(_product_qty_available, type='float', string='Quantity On Hand'), 'virtual_available': fields.function(_product_virtual_available, type='float', string='Quantity Available'), 'incoming_qty': fields.function(_product_incoming_qty, type='float', string='Incoming'), 'outgoing_qty': fields.function(_product_outgoing_qty, type='float', string='Outgoing'), - 'price': fields.function(_product_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')), - 'lst_price' : fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')), + 'price': fields.function(_product_price, fnct_inv=_save_product_lst_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')), + 'lst_price' : fields.function(_product_lst_price, fnct_inv=_save_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')), 'code': fields.function(_product_code, type='char', string='Internal Reference'), 'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'), 'default_code' : fields.char('Internal Reference', size=64, select=True), @@ -780,6 +789,10 @@ class product_product(osv.osv): # Could be overrided for variants matrices prices # def price_get(self, cr, uid, ids, ptype='list_price', context=None): + products = self.browse(cr, uid, ids, context=context) + return self._price_get(cr, uid, products, ptype=ptype, context=context) + + def _price_get(self, cr, uid, products, ptype='list_price', context=None): if context is None: context = {} @@ -790,7 +803,7 @@ class product_product(osv.osv): res = {} product_uom_obj = self.pool.get('product.uom') - for product in self.browse(cr, uid, ids, context=context): + for product in products: res[product.id] = product[ptype] or 0.0 if ptype == 'list_price': res[product.id] = (res[product.id] * (product.price_margin or 1.0)) + \ @@ -839,9 +852,7 @@ class product_product(osv.osv): context=context) def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): - if context is None: - context = {} - if context and context.get('search_default_categ_id', False): + if context and context.get('search_default_categ_id'): args.append((('categ_id', 'child_of', context['search_default_categ_id']))) return super(product_product, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) @@ -917,7 +928,6 @@ class product_supplierinfo(osv.osv): _description = "Information about a product supplier" def _calc_qty(self, cr, uid, ids, fields, arg, context=None): result = {} - product_uom_pool = self.pool.get('product.uom') for supplier_info in self.browse(cr, uid, ids, context=context): for field in fields: result[supplier_info.id] = {field:False} @@ -930,10 +940,10 @@ class product_supplierinfo(osv.osv): 'product_name': fields.char('Supplier Product Name', size=128, help="This supplier's product name will be used when printing a request for quotation. Keep empty to use the internal one."), 'product_code': fields.char('Supplier Product Code', size=64, help="This supplier's product code will be used when printing a request for quotation. Keep empty to use the internal one."), 'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."), - 'product_uom': fields.related('product_id', 'uom_po_id', type='many2one', relation='product.uom', string="Supplier Unit of Measure", readonly="1", help="This comes from the product form."), + 'product_uom': fields.related('product_tmpl_id', 'uom_po_id', type='many2one', relation='product.uom', string="Supplier Unit of Measure", readonly="1", help="This comes from the product form."), 'min_qty': fields.float('Minimal Quantity', required=True, help="The minimal quantity to purchase to this supplier, expressed in the supplier Product Unit of Measure if not empty, in the default unit of measure of the product otherwise."), 'qty': fields.function(_calc_qty, store=True, type='float', string='Quantity', multi="qty", help="This is a quantity which is converted into Default Unit of Measure."), - 'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True), + 'product_tmpl_id' : fields.many2one('product.template', 'Product Template', required=True, ondelete='cascade', select=True), 'delay' : fields.integer('Delivery Lead Time', required=True, help="Lead time in days between the confirmation of the purchase order and the reception of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."), 'pricelist_ids': fields.one2many('pricelist.partnerinfo', 'suppinfo_id', 'Supplier Pricelist'), 'company_id':fields.many2one('res.company','Company',select=1), @@ -959,10 +969,11 @@ class product_supplierinfo(osv.osv): pricelist_pool = self.pool.get('product.pricelist') currency_pool = self.pool.get('res.currency') currency_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id + # Compute price from standard price of product + product_price = product_pool.price_get(cr, uid, [product_id], 'standard_price', context=context)[product_id] + product = product_pool.browse(cr, uid, product_id, context=context) for supplier in partner_pool.browse(cr, uid, supplier_ids, context=context): - # Compute price from standard price of product - price = product_pool.price_get(cr, uid, [product_id], 'standard_price', context=context)[product_id] - + price = product_price # Compute price from Purchase pricelist of supplier pricelist_id = supplier.property_product_pricelist_purchase.id if pricelist_id: @@ -970,7 +981,7 @@ class product_supplierinfo(osv.osv): price = currency_pool.compute(cr, uid, pricelist_pool.browse(cr, uid, pricelist_id).currency_id.id, currency_id, price) # Compute price from supplier pricelist which are in Supplier Information - supplier_info_ids = self.search(cr, uid, [('name','=',supplier.id),('product_id','=',product_id)]) + supplier_info_ids = self.search(cr, uid, [('name','=',supplier.id),('product_tmpl_id','=',product.product_tmpl_id.id)]) if supplier_info_ids: cr.execute('SELECT * ' \ 'FROM pricelist_partnerinfo ' \ diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index 52dfe7b790b..517f46a94c1 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -149,6 +149,7 @@ parameter) will see those record just disappear. + 1000 Default Public Pricelist Line @@ -184,7 +185,7 @@ parameter) will see those record just disappear. Product UoS - +
- + 3 1 - + 3 1 - + 3 1 - + 3 1 - + 2 5 - + 4 1 - + 2 1 - + 2 1 - + 5 1 - + 5 1 - + 5 1 - + 1 1 - + 1 1 - + 3 1 - + 3 1 - + 4 5 - + 3 1 - + 2 1 - + 3 1 - + 3 1 - + 3 1 - + 8 1 - + 8 1 - + 4 1 - + 5 1 - + 2 12 - + 2 12 - + 2 5 - + 2 12 - + 2 5 - + 2 1 - + 2 1 - + 4 1 - + 4 1 - + 5 1 - + 5 1 - + 7 1 - + 4 1 - + 4 0 - + 5 0 - + 2 0 - + 4 0 - + 10 0 - + 3 0 - + 5 0 diff --git a/addons/product/security/product_security.xml b/addons/product/security/product_security.xml index 3cb54f84d47..11b6319329a 100644 --- a/addons/product/security/product_security.xml +++ b/addons/product/security/product_security.xml @@ -51,35 +51,35 @@ Product multi-company - ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)] + ['|',('company_id','=',user.company_id.id),('company_id','=',False)] product pricelist company rule - ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)] + ['|',('company_id','=',user.company_id.id),('company_id','=',False)] product pricelist item company rule - ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)] + ['|',('company_id','=',user.company_id.id),('company_id','=',False)] product pricelist version company rule - ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)] + ['|',('company_id','=',user.company_id.id),('company_id','=',False)] product supplierinfo company rule - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + ['|',('company_id','=',False),('company_id','=',user.company_id.id)]
diff --git a/addons/product/test/product_pricelist.yml b/addons/product/test/product_pricelist.yml index 0b4bed18a82..60a4a4bf66f 100644 --- a/addons/product/test/product_pricelist.yml +++ b/addons/product/test/product_pricelist.yml @@ -6,19 +6,19 @@ !python {model: product.product}: | context.update({'pricelist': ref("customer_pricelist"), 'quantity':1}) product = self.browse(cr, uid, ref("product_product_4"), context=context) - assert product.price == (product.lst_price-product.lst_price*(0.10)), "Sell price is not correspond." + assert product.price == (product.lst_price-product.lst_price*(0.10)), "Wrong sale price." - I check sale price of Laptop. - !python {model: product.product}: | product = self.browse(cr, uid, ref("product_product_25"), context=context) - assert product.price == product.lst_price + 1, "Sell price is not correspond." + assert product.price == product.lst_price + 1, "Wrong sale price." - I check sale price of IT component. - !python {model: product.product}: | product = self.browse(cr, uid, ref("product_product_7"), context=context) - assert product.price == product.lst_price, "Sell price is not correspond." + assert product.price == product.lst_price, "Wrong sale price." - I check sale price of IT component if more than 3 Unit. @@ -26,14 +26,14 @@ !python {model: product.product}: | context.update({'quantity':5}) product = self.browse(cr, uid, ref("product_product_26"), context=context) - assert product.price == product.lst_price-product.lst_price*(0.05), "Sell price is not correspond." + assert product.price == product.lst_price-product.lst_price*(0.05), "Wrong sale price." - I check sale price of LCD Monitor. - !python {model: product.product}: | context.update({'quantity':1}) product = self.browse(cr, uid, ref("product_product_6"), context=context) - assert product.price == product.lst_price, "Sell price is not correspond." + assert product.price == product.lst_price, "Wrong sale price." - I check sale price of LCD Monitor on end of year. @@ -41,7 +41,7 @@ !python {model: product.product}: | context.update({'quantity':1, 'date': '2011-12-31'}) product = self.browse(cr, uid, ref("product_product_6"), context=context) - assert product.price == product.lst_price-product.lst_price*(0.30), "Sell price is not correspond." + assert product.price == product.lst_price-product.lst_price*(0.30), "Wrong sale price." - I check cost price of LCD Monitor. @@ -49,14 +49,14 @@ !python {model: product.product}: | context.update({'quantity':1, 'date': False, 'partner': ref('base.res_partner_4'), 'pricelist': ref("supplier_pricelist")}) product = self.browse(cr, uid, ref("product_product_6"), context=context) - assert product.price == 792, "cost price is not correspond." + assert product.price == 792, "wrong cost price." - I check cost price of LCD Monitor if more than 3 Unit. - !python {model: product.product}: | context.update({'quantity':3}) product = self.browse(cr, uid, ref("product_product_6"), context=context) - assert product.price == 787, "cost price is not correspond." + assert product.price == 787, "wrong cost price." - I print the sale prices report. diff --git a/addons/product_expiry/i18n/zh_CN.po b/addons/product_expiry/i18n/zh_CN.po index db374e6b7b2..345665e27aa 100644 --- a/addons/product_expiry/i18n/zh_CN.po +++ b/addons/product_expiry/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-11-30 02:54+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:35+0000\n" +"Last-Translator: Guipo Hao \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 06:11+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: product_expiry #: model:product.template,name:product_expiry.product_product_from_product_template @@ -37,14 +37,14 @@ msgstr "产品生命周期" msgid "" "This is the date on which the goods with this Serial Number should be " "removed from the stock." -msgstr "" +msgstr "此序列号所含商品将在该日从库存移除。" #. module: product_expiry #: help:product.product,removal_time:0 msgid "" "When a new a Serial Number is issued, this is the number of days before the " "goods should be removed from the stock." -msgstr "" +msgstr "此处表明当新序列号生成时,商品需要提前多少天从库存移除。" #. module: product_expiry #: field:product.product,use_time:0 @@ -61,7 +61,7 @@ msgstr "产品" msgid "" "When a new a Serial Number is issued, this is the number of days before the " "goods starts deteriorating, without being dangerous yet." -msgstr "" +msgstr "此处表明当新序列号生成时,商品变质前(未变危险)的天数。" #. module: product_expiry #: field:product.product,removal_time:0 @@ -73,7 +73,7 @@ msgstr "产品移除时间" msgid "" "This is the date on which an alert should be notified about the goods with " "this Serial Number." -msgstr "" +msgstr "此处表明该序列号所指商品需要提醒管理员的日期。" #. module: product_expiry #: model:ir.model,name:product_expiry.model_stock_production_lot @@ -85,7 +85,7 @@ msgstr "序列号" msgid "" "When a new a Serial Number is issued, this is the number of days before an " "alert should be notified." -msgstr "" +msgstr "此处表明当新序列号生成时,商品生成提醒前的天数。" #. module: product_expiry #: field:stock.production.lot,removal_date:0 @@ -123,6 +123,9 @@ msgid "" "When a new a Serial Number is issued, this is the number of days before the " "goods may become dangerous and must not be consumed." msgstr "" +"此处表明当新序列号生成时,商品变危险以至于不能使用前的天数。When a new a Serial Number is issued, this is " +"the number of days before the goods may become dangerous and must not be " +"consumed." #. module: product_expiry #: field:stock.production.lot,alert_date:0 @@ -134,14 +137,14 @@ msgstr "警告日期" msgid "" "This is the date on which the goods with this Serial Number start " "deteriorating, without being dangerous yet." -msgstr "" +msgstr "此处表明该序列号的商品开始变质的日期(未变危险)。" #. module: product_expiry #: help:stock.production.lot,life_date:0 msgid "" "This is the date on which the goods with this Serial Number may become " "dangerous and must not be consumed." -msgstr "" +msgstr "此处表明该序列号的商品变得危险的日期,此时该商品不能使用。" #. module: product_expiry #: field:product.product,alert_time:0 diff --git a/addons/product_margin/i18n/zh_CN.po b/addons/product_margin/i18n/zh_CN.po index cc047bd10d2..a19a1b72010 100644 --- a/addons/product_margin/i18n/zh_CN.po +++ b/addons/product_margin/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:06+0000\n" -"PO-Revision-Date: 2012-11-27 11:58+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:43+0000\n" +"Last-Translator: Guipo Hao \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-09-12 06:01+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:25+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: product_margin #: view:product.product:0 @@ -51,7 +51,7 @@ msgstr "营业额-标准价格" #. module: product_margin #: field:product.product,total_margin_rate:0 msgid "Total Margin Rate(%)" -msgstr "" +msgstr "总盈利率(%)" #. module: product_margin #: selection:product.margin,invoice_state:0 @@ -77,7 +77,7 @@ msgstr "平均单价" #. module: product_margin #: field:product.product,sale_num_invoiced:0 msgid "# Invoiced in Sale" -msgstr "" +msgstr "# 销售开票" #. module: product_margin #: view:product.product:0 @@ -119,7 +119,7 @@ msgstr "供应商发票数量合计" #. module: product_margin #: field:product.product,date_to:0 msgid "Margin Date To" -msgstr "" +msgstr "盈利结束日" #. module: product_margin #: view:product.product:0 @@ -187,7 +187,7 @@ msgstr "总利润" #. module: product_margin #: field:product.product,date_from:0 msgid "Margin Date From" -msgstr "" +msgstr "盈利开始日" #. module: product_margin #: help:product.product,turnover:0 @@ -208,7 +208,7 @@ msgstr "采购" #. module: product_margin #: field:product.product,purchase_num_invoiced:0 msgid "# Invoiced in Purchase" -msgstr "" +msgstr "# 采购开票" #. module: product_margin #: help:product.product,expected_margin:0 diff --git a/addons/product_visible_discount/product_visible_discount.py b/addons/product_visible_discount/product_visible_discount.py index a2f0a41847f..605a71e8b80 100644 --- a/addons/product_visible_discount/product_visible_discount.py +++ b/addons/product_visible_discount/product_visible_discount.py @@ -48,12 +48,6 @@ class sale_order_line(osv.osv): product_obj = self.pool.get('product.product') field_name = 'list_price' - if res_dict.get('item_id',False) and res_dict['item_id'].get(pricelist,False): - item = res_dict['item_id'].get(pricelist,False) - item_base = item_obj.read(cr, uid, [item], ['base'])[0]['base'] - if item_base > 0: - field_name = price_type_obj.browse(cr, uid, item_base).field - product = product_obj.browse(cr, uid, product_id, context) product_read = product_obj.read(cr, uid, product_id, [field_name], context=context) @@ -86,78 +80,13 @@ class sale_order_line(osv.osv): pricelists = pricelist_obj.read(cr,uid,[pricelist],['visible_discount']) new_list_price = get_real_price(list_price, product.id, qty, uom, pricelist) - if(len(pricelists)>0 and pricelists[0]['visible_discount'] and list_price[pricelist] != 0): + if len(pricelists)>0 and pricelists[0]['visible_discount'] and list_price[pricelist] != 0 and new_list_price != 0: discount = (new_list_price - price) / new_list_price * 100 - result['price_unit'] = new_list_price - result['discount'] = discount + if discount > 0: + result['price_unit'] = new_list_price + result['discount'] = discount + else: + result['discount'] = 0.0 else: result['discount'] = 0.0 return res - - -class account_invoice_line(osv.osv): - _inherit = "account.invoice.line" - - def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): - res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit,currency_id, context=context, company_id=company_id) - - def get_real_price(res_dict, product_id, qty, uom_id, pricelist): - item_obj = self.pool.get('product.pricelist.item') - price_type_obj = self.pool.get('product.price.type') - product_obj = self.pool.get('product.product') - field_name = 'list_price' - - if res_dict.get('item_id',False) and res_dict['item_id'].get(pricelist,False): - item = res_dict['item_id'].get(pricelist,False) - item_read = item_obj.read(cr, uid, [item], ['base']) - if item_read: - item_base = item_read[0]['base'] - if item_base > 0: - field_name = price_type_obj.browse(cr, uid, item_base).field - - product = product_obj.browse(cr, uid, product_id, context) - product_read = product_obj.read(cr, uid, product_id, [field_name], context=context) - - factor = 1.0 - if uom_id and uom_id != product.uom_id.id: - product_uom_obj = self.pool.get('product.uom') - uom_data = product_uom_obj.browse(cr, uid, product.uom_id.id) - factor = uom_data.factor - return product_read[field_name] * factor - - if product: - pricelist_obj = self.pool.get('product.pricelist') - partner_obj = self.pool.get('res.partner') - product = self.pool.get('product.product').browse(cr, uid, product, context=context) - result = res['value'] - pricelist = False - real_price = 0.00 - if type in ('in_invoice', 'in_refund'): - if not price_unit and partner_id: - pricelist =partner_obj.browse(cr, uid, partner_id).property_product_pricelist_purchase.id - if not pricelist: - raise osv.except_osv(_('No Purchase Pricelist Found!'),_("You must first define a pricelist on the supplier form!")) - price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom_id}) - price_unit = price_unit_res[pricelist] - real_price = get_real_price(price_unit_res, product.id, qty, uom_id, pricelist) - else: - if partner_id: - pricelist = partner_obj.browse(cr, uid, partner_id).property_product_pricelist.id - if not pricelist: - raise osv.except_osv(_('No Sale Pricelist Found!'),_("You must first define a pricelist on the customer form!")) - price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom_id}) - price_unit = price_unit_res[pricelist] - - real_price = get_real_price(price_unit_res, product.id, qty, uom_id, pricelist) - if pricelist: - pricelists=pricelist_obj.read(cr,uid,[pricelist],['visible_discount']) - if(len(pricelists)>0 and pricelists[0]['visible_discount'] and real_price != 0): - discount=(real_price-price_unit) / real_price * 100 - result['price_unit'] = real_price - result['discount'] = discount - else: - result['discount']=0.0 - return res - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/project.py b/addons/project/project.py index a8f198cac3d..ea9c4492fa4 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -41,14 +41,13 @@ 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'), - '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."), + 'fold': fields.boolean('Folded in Kanban View', + help='This stage is folded in the kanban view when' + 'there are no records in that stage to display.'), } _defaults = { 'sequence': 1, - 'fold': False, - 'case_default': False, 'project_ids': lambda self, cr, uid, ctx=None: self.pool['project.task']._get_default_project_id(cr, uid, context=ctx), } _order = 'sequence' @@ -189,6 +188,8 @@ class project(osv.osv): return res def _task_count(self, cr, uid, ids, field_name, arg, context=None): + """ :deprecated: this method will be removed with OpenERP v8. Use task_ids + fields instead. """ if context is None: context = {} res = dict.fromkeys(ids, 0) @@ -237,7 +238,9 @@ class project(osv.osv): 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the project without removing it."), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of Projects."), 'analytic_account_id': fields.many2one('account.analytic.account', 'Contract/Analytic', help="Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc.", ondelete="cascade", required=True), - 'priority': fields.integer('Sequence', help="Gives the sequence order when displaying the list of projects"), + 'priority': fields.integer('Sequence (deprecated)', + deprecated='Will be removed with OpenERP v8; use sequence field instead', + help="Gives the sequence order when displaying the list of projects"), 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's members are users who can have an access to the tasks related to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'tasks': fields.one2many('project.task', 'project_id', "Task Activities"), @@ -263,7 +266,10 @@ class project(osv.osv): }), '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)]}), - 'task_count': fields.function(_task_count, type='integer', string="Open Tasks"), + 'task_count': fields.function(_task_count, type='integer', string="Open Tasks", + deprecated="This field will be removed in OpenERP v8. Use task_ids one2many field instead."), + 'task_ids': fields.one2many('project.task', 'project_id', + domain=[('stage_id.fold', '=', False)]), 'color': fields.integer('Color Index'), 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="restrict", required=True, help="Internal email associated with this project. Incoming emails are automatically synchronized" @@ -294,7 +300,6 @@ class project(osv.osv): 'active': True, 'type': 'contract', 'state': 'open', - 'priority': 1, 'sequence': 10, 'type_ids': _get_type_common, 'alias_model': 'project.task', @@ -555,8 +560,9 @@ class task(osv.osv): _mail_post_access = 'read' _track = { 'stage_id': { - '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, + # this is only an heuristics; depending on your particular stage configuration it may not match all 'new' stages + '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, }, 'user_id': { 'project.mt_task_assigned': lambda self, cr, uid, obj, ctx=None: obj.user_id and obj.user_id.id, @@ -581,7 +587,7 @@ class task(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, [('sequence', '=', '1')], context=context) + return self.stage_find(cr, uid, [], project_id, [('fold', '=', False)], 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' @@ -993,7 +999,7 @@ class task(osv.osv): 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.stage_id and task.stage_id.sequence == 1) 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 @@ -1126,7 +1132,8 @@ class task(osv.osv): def message_new(self, cr, uid, msg, custom_values=None, context=None): """ Override to updates the document according to the email. """ - if custom_values is None: custom_values = {} + if custom_values is None: + custom_values = {} defaults = { 'name': msg.get('subject'), 'planned_hours': 0.0, @@ -1136,10 +1143,10 @@ class task(osv.osv): def message_update(self, cr, uid, ids, msg, update_vals=None, context=None): """ Override to update the task according to the email. """ - if update_vals is None: update_vals = {} - act = False + if update_vals is None: + update_vals = {} maps = { - 'cost':'planned_hours', + 'cost': 'planned_hours', } for line in msg['body'].split('\n'): line = line.strip() @@ -1152,9 +1159,7 @@ class task(osv.osv): update_vals[field] = float(res.group(2).lower()) except (ValueError, TypeError): pass - 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) + return super(task, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) class project_work(osv.osv): _name = "project.task.work" @@ -1242,6 +1247,8 @@ class account_analytic_account(osv.osv): return analytic_account_id def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] vals_for_project = vals.copy() for account in self.browse(cr, uid, ids, context=context): if not vals.get('name'): diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index 0f48dfe9a2b..93e3ea51285 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -1,6 +1,6 @@ - + @@ -70,7 +70,9 @@ + + Task Created diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index 12e373642fd..ff225c46e10 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -4,7 +4,7 @@ - + @@ -60,7 +60,7 @@ - 10 + 10 E-Learning Integration @@ -74,7 +74,7 @@ - 20 + 20 Website Design Templates @@ -89,7 +89,7 @@ - 2 + 2 Data Import/Export Plugin diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index d86f635d749..38e8fc9fdef 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -19,7 +19,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -239,6 +239,7 @@ + @@ -258,9 +259,8 @@ %%
@@ -368,7 +368,8 @@
- +

@@ -683,10 +684,10 @@ - + - + diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 15b26507ff3..ed086b4318d 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -75,7 +75,7 @@ class report_project_task_user(osv.osv): 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, + abs((extract('epoch' from (t.write_date-t.date_start)))/(3600*24)) as no_of_days, t.user_id, progress as progress, t.project_id, @@ -89,9 +89,9 @@ class report_project_task_user(osv.osv): total_hours as total_hours, t.delay_hours as hours_delay, planned_hours as hours_planned, - (extract('epoch' from (t.date_end-t.create_date)))/(3600*24) as closing_days, + (extract('epoch' from (t.write_date-t.create_date)))/(3600*24) as closing_days, (extract('epoch' from (t.date_start-t.create_date)))/(3600*24) as opening_days, - abs((extract('epoch' from (t.date_deadline-t.date_end)))/(3600*24)) as delay_endings_days + abs((extract('epoch' from (t.date_deadline-t.write_date)))/(3600*24)) as delay_endings_days FROM project_task t WHERE t.active = 'true' GROUP BY @@ -106,6 +106,7 @@ class report_project_task_user(osv.osv): month, day, create_date, + write_date, date_start, date_end, date_deadline, diff --git a/addons/project/report/project_report.xml b/addons/project/report/project_report.xml index 59d0fd28220..4ff7e852620 100644 --- a/addons/project/report/project_report.xml +++ b/addons/project/report/project_report.xml @@ -17,7 +17,6 @@ - diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py index a037c92d2ae..ecbe66a0cea 100644 --- a/addons/project/tests/test_project_flow.py +++ b/addons/project/tests/test_project_flow.py @@ -20,7 +20,7 @@ ############################################################################## from openerp.addons.project.tests.test_project_base import TestProjectBase -from openerp.osv.orm import except_orm +from openerp.exceptions import AccessError from openerp.tools import mute_logger @@ -57,7 +57,7 @@ class TestProjectFlow(TestProjectBase): 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]) + self.assertRaises(AccessError, 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) diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 351b55fdcfc..f787ed1544e 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -306,8 +306,6 @@ class project_issue(osv.Model): } def set_priority(self, cr, uid, ids, priority, *args): - """Set lead priority - """ return self.write(cr, uid, ids, {'priority' : priority}) def set_high_priority(self, cr, uid, ids, *args): @@ -320,56 +318,6 @@ class project_issue(osv.Model): """ return self.set_priority(cr, uid, ids, '3') - def convert_issue_task(self, cr, uid, ids, context=None): - if context is None: - context = {} - - case_obj = self.pool.get('project.issue') - data_obj = self.pool.get('ir.model.data') - task_obj = self.pool.get('project.task') - - result = data_obj._get_id(cr, uid, 'project', 'view_task_search_form') - res = data_obj.read(cr, uid, result, ['res_id']) - id2 = data_obj._get_id(cr, uid, 'project', 'view_task_form2') - id3 = data_obj._get_id(cr, uid, 'project', 'view_task_tree2') - if id2: - id2 = data_obj.browse(cr, uid, id2, context=context).res_id - if id3: - id3 = data_obj.browse(cr, uid, id3, context=context).res_id - - for bug in case_obj.browse(cr, uid, ids, context=context): - new_task_id = task_obj.create(cr, uid, { - 'name': bug.name, - 'partner_id': bug.partner_id.id, - 'description':bug.description, - 'date_deadline': bug.date, - 'project_id': bug.project_id.id, - # priority must be in ['0','1','2','3','4'], while bug.priority is in ['1','2','3','4','5'] - 'priority': str(int(bug.priority) - 1), - 'user_id': bug.user_id.id, - 'planned_hours': 0.0, - }) - vals = { - 'task_id': new_task_id, - 'stage_id': self.stage_find(cr, uid, [bug], bug.project_id.id, [('sequence', '=', 1)], context=context), - } - message = _("Project issue converted to task.") - self.message_post(cr, uid, [bug.id], body=message, context=context) - case_obj.write(cr, uid, [bug.id], vals, context=context) - - return { - 'name': _('Tasks'), - 'view_type': 'form', - 'view_mode': 'form,tree', - 'res_model': 'project.task', - 'res_id': int(new_task_id), - 'view_id': False, - 'views': [(id2,'form'),(id3,'tree'),(False,'calendar'),(False,'graph')], - 'type': 'ir.actions.act_window', - 'search_view_id': res['res_id'], - 'nodestroy': True - } - def copy(self, cr, uid, id, default=None, context=None): issue = self.read(cr, uid, id, ['name'], context=context) if not default: @@ -465,18 +413,20 @@ class project_issue(osv.Model): return stage_ids[0] return False - def case_escalate(self, cr, uid, ids, context=None): - cases = self.browse(cr, uid, ids) - for case in cases: + def case_escalate(self, cr, uid, ids, context=None): # FIXME rename this method to issue_escalate + for issue in self.browse(cr, uid, ids, context=context): data = {} - if case.project_id.project_escalation_id: - data['project_id'] = case.project_id.project_escalation_id.id - if case.project_id.project_escalation_id.user_id: - data['user_id'] = case.project_id.project_escalation_id.user_id.id - if case.task_id: - self.pool.get('project.task').write(cr, uid, [case.task_id.id], {'project_id': data['project_id'], 'user_id': False}) - else: + esc_proj = issue.project_id.project_escalation_id + if not esc_proj: raise osv.except_osv(_('Warning!'), _('You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!')) + + data['project_id'] = esc_proj.id + if esc_proj.user_id: + data['user_id'] = esc_proj.user_id.id + issue.write(data) + + if issue.task_id: + issue.task_id.write({'project_id': esc_proj.id, 'user_id': False}) return True # ------------------------------------------------------- @@ -517,40 +467,10 @@ class project_issue(osv.Model): 'partner_id': msg.get('author_id', False), 'user_id': False, } - if msg.get('priority'): - defaults['priority'] = msg.get('priority') - defaults.update(custom_values) res_id = super(project_issue, self).message_new(cr, uid, msg, custom_values=defaults, context=context) return res_id - def message_update(self, cr, uid, ids, msg, update_vals=None, context=None): - """ Overrides mail_thread message_update that is called by the mailgateway - through message_process. - This method updates the document according to the email. - """ - if isinstance(ids, (str, int, long)): - ids = [ids] - if update_vals is None: update_vals = {} - - # Update doc values according to the message - if msg.get('priority'): - update_vals['priority'] = msg.get('priority') - # Parse 'body' to find values to update - maps = { - 'cost': 'planned_cost', - 'revenue': 'planned_revenue', - 'probability': 'probability', - } - for line in msg.get('body', '').split('\n'): - line = line.strip() - res = tools.command_re.match(line) - if res and maps.get(res.group(1).lower(), False): - key = maps.get(res.group(1).lower()) - update_vals[key] = res.group(2).lower() - - return super(project_issue, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) - def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', subtype=None, parent_id=False, attachments=None, context=None, content_subtype='html', **kwargs): """ Overrides mail_thread message_post so that we can set the date of last action field when a new message is posted on the issue. @@ -570,6 +490,8 @@ class project(osv.Model): return [('project.task', "Tasks"), ("project.issue", "Issues")] def _issue_count(self, cr, uid, ids, field_name, arg, context=None): + """ :deprecated: this method will be removed with OpenERP v8. Use issue_ids + fields instead. """ 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): @@ -581,7 +503,10 @@ class project(osv.Model): 'project_escalation_id': fields.many2one('project.project', 'Project Escalation', help='If any issue is escalated from the current Project, it will be listed under the project selected here.', states={'close': [('readonly', True)], 'cancelled': [('readonly', True)]}), - 'issue_count': fields.function(_issue_count, type='integer', string="Unclosed Issues"), + 'issue_count': fields.function(_issue_count, type='integer', string="Unclosed Issues", + deprecated="This field will be removed in OpenERP v8. Use issue_ids one2many field instead."), + 'issue_ids': fields.one2many('project.issue', 'project_id', + domain=[('stage_id.fold', '=', False)]) } def _check_escalation(self, cr, uid, ids, context=None): diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 3e90a2a43d6..68c6712f530 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -48,7 +48,8 @@
- +

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

Tisztelt$ ${object.partner_id.name},

\n" +" \n" +"

Ez egy ${object.state in ('draft', 'sent') and 'árajánlatkérés' or " +"'beszerzés visszaigazolás'} ${object.company_id.name} vállalattól:

\n" +" \n" +"

\n" +"   REFERENCES
\n" +"   Megrendelés száma: ${object.name}
\n" +"   Megrendelés összesen: ${object.amount_total} " +"${object.pricelist_id.currency_id.name}
\n" +"   Megrendelés dátuma: ${object.date_order}
\n" +" % if object.origin:\n" +"   Megrendelés hivatkozási száma: ${object.origin}
\n" +" % endif\n" +" % if object.partner_ref:\n" +"   Ön hivatkozási száma: ${object.partner_ref}
\n" +" % endif\n" +" % if object.validator:\n" +"   Kapcsolattartó az Ön részéről: ${object.validator.name}\n" +" % endif\n" +"

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

További felmerülő kérdésekben állunk szíves rendelkezésükre.

\n" +"

Köszönjük!

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

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

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

\n" +"
\n" +"
\n" +" " #. module: purchase #: view:purchase.report:0 @@ -1165,7 +1241,7 @@ msgstr "Kimenő levelek" msgid "You cannot confirm a purchase order without any purchase order line." msgstr "" "Nem tud visszaigazolni olyan beszerzési megrendelést, melynek nincsenek " -"sorai." +"tételei." #. module: purchase #: help:purchase.order,message_ids:0 @@ -1241,7 +1317,7 @@ msgstr "Jóváhagyott beszerzési megrendelések" #. module: purchase #: view:purchase.report:0 msgid "Purchase Orders Statistics" -msgstr "Szállítói megrendelés statisztika" +msgstr "Beszerzési megrendelés statisztikák" #. module: purchase #: view:purchase.order:0 @@ -1345,7 +1421,7 @@ msgstr "Fax:" #. module: purchase #: help:purchase.order,invoice_ids:0 msgid "Invoices generated for a purchase order" -msgstr "A szállítói megrendelés alapján készített számlák" +msgstr "A beszerzési megrendelés alapján készített számlák" #. module: purchase #: selection:purchase.config.settings,default_invoice_method:0 @@ -1365,7 +1441,7 @@ msgid "" "order is 'On picking'. The invoice can also be generated manually by the " "accountant (Invoice control = Manual)." msgstr "" -"A rendszer automatikusan készíti a számlát, ha a szállítói megrendelés " +"A rendszer automatikusan készíti a számlát, ha a beszerzési megrendelés " "számlaellenőrzése \"Kiszedés alapján\"-ra van állítva. A könyvelő manuálisan " "is készíthet számlát (számlaellenőrzés = manuális)." @@ -1462,7 +1538,7 @@ msgstr "purchase.config.settings" #: model:process.node,note:purchase.process_node_approvepurchaseorder0 #: model:process.node,note:purchase.process_node_confirmpurchaseorder0 msgid "State of the Purchase Order." -msgstr "Szállítói megrendelés állapota." +msgstr "Beszerzési megrendelés állapota." #. module: purchase #: field:purchase.order.line,product_uom:0 @@ -1501,7 +1577,7 @@ msgstr "Számlák készítése" #. module: purchase #: model:ir.model,name:purchase.model_purchase_order_line_invoice msgid "Purchase Order Line Make Invoice" -msgstr "Szállítói megrendelési sorokból számla készítése" +msgstr "Beszerzési megrendelési tételekből számla készítése" #. module: purchase #: code:addons/purchase/purchase.py:1167 @@ -1550,7 +1626,7 @@ msgstr "Kiválasztott elemek listája létrehozva" #: model:ir.actions.act_window,name:purchase.purchase_line_form_action2 #: model:ir.ui.menu,name:purchase.menu_purchase_line_order_draft msgid "On Purchase Order Lines" -msgstr "a beszerzési megrendelések sorain" +msgstr "a beszerzési megrendelések tételei" #. module: purchase #: report:purchase.quotation:0 @@ -1578,7 +1654,7 @@ msgstr "Ártípusok" #. module: purchase #: help:purchase.order,date_approve:0 msgid "Date on which purchase order has been approved" -msgstr "A szállítói megrendelés jóváhagyásának dátuma" +msgstr "A beszerzési megrendelés jóváhagyásának dátuma" #. module: purchase #: model:process.node,name:purchase.process_node_approvepurchaseorder0 @@ -1603,7 +1679,7 @@ msgstr "Számla" #. module: purchase #: model:process.node,note:purchase.process_node_purchaseorder0 msgid "Confirmed purchase order to invoice" -msgstr "Számlázandó jóváhagyott szállítói megrendelés" +msgstr "Számlázandó jóváhagyott beszerzési megrendelés" #. module: purchase #: model:process.node,note:purchase.process_node_productrecept0 @@ -1644,7 +1720,7 @@ msgstr "" #. module: purchase #: model:process.transition,note:purchase.process_transition_approvingpurchaseorder0 msgid "The supplier approves the Purchase Order." -msgstr "A szállító jóváhagyja a szállítói megrendelést." +msgstr "A szállító jóváhagyja a beszerzési megrendelést." #. module: purchase #: code:addons/purchase/wizard/purchase_order_group.py:80 @@ -1655,7 +1731,7 @@ msgstr "A szállító jóváhagyja a szállítói megrendelést." #: view:res.partner:0 #, python-format msgid "Purchase Orders" -msgstr "Szállítói megrendelések" +msgstr "Beszerzési megrendelések" #. module: purchase #: field:purchase.order,origin:0 @@ -1800,7 +1876,7 @@ msgid "" " This installs the module purchase_analytic_plans." msgstr "" "Lehetővé teszi a felhasználó számára különböző elemzési terv karbantartását. " -"Ez lehetővé teszi a beszerzési megrendelés sorainak több számlán és " +"Ez lehetővé teszi a beszerzési megrendelés tételeinek több számlán és " "gyüjtő/elemző számlán való szétválasztását.\n" " Ez a purchase_analytic_plans modult telepíti." @@ -1923,12 +1999,12 @@ msgid "" msgstr "" "A beszerzési megrendelés vagy az árajánlat kérés állapota. A beszerzési " "megrendelés 'Tervezet' állapota egy árajánlat. Ezután egy felhasználónak " -"jóvá kell hagynia, az állapot kapcsolóval 'Jóváhagyott'. Ezután egy " -"felhasználónak vissza kell igazolnia a megrendelést ahhoz, hogy az állapot " -"kapcsoló a következő állapotba kerüljön 'Jóváhagyott'. Ha a beszerzési " +"jóvá kell hagynia, az állapot kapcsolóval 'Jóváhagyott'-ra. Ezután a " +"beszállítónak vissza kell igazolnia a megrendelést ahhoz, hogy az állapot " +"kapcsoló a következő 'Elfogadott' állapotba kerüljön . Ha a beszerzési " "megrendelés beérkezett és fizetett akkor az állapot 'Elvégezve' lesz. Ha a " "visszavonás gombot megnyomták a számlázásnál vagy a termékek beérkezésénél, " -"akkor az állapot 'várható' állába kerül." +"akkor az kifogásolt állapotba kerül." #. module: purchase #: selection:purchase.order,state:0 @@ -1967,7 +2043,7 @@ msgstr "Nettó ár" #: view:purchase.order.line:0 #: field:stock.move,purchase_line_id:0 msgid "Purchase Order Line" -msgstr "Szállítói megrendelési sor" +msgstr "Beszerzési megrendelési tételsor" #. module: purchase #: model:process.transition.action,name:purchase.process_transition_action_confirmpurchaseorder0 @@ -1992,7 +2068,7 @@ msgid "" "of the purchase order, the invoice is based on received or on ordered " "quantities." msgstr "" -"A kiszedési lista előállít egy bejövő számlát. A szállítói megrendelés " +"A kiszedési lista előállít egy bejövő számlát. A beszerzési megrendelés " "számlaellenőrzésétől függően a számla az érkeztetett vagy a megrendelt " "mennyiségen alapul." @@ -2167,7 +2243,7 @@ msgstr "Tervezet" #. module: purchase #: model:ir.model,name:purchase.model_purchase_order_group msgid "Purchase Order Merge" -msgstr "Szállítói megrendelések összevonása" +msgstr "Beszerzési megrendelések összevonása" #. module: purchase #: model:ir.actions.act_window,name:purchase.action_email_templates @@ -2208,9 +2284,9 @@ msgid "" "Bases on incoming shipments: let you create an invoice when receptions are " "validated." msgstr "" -"Beszerzési megrendelés sorain alapszik: különálló sorokat hozzon létre a " -"'Számla vezérlés > Beszerzési megrendelés sorain alapszik' ahol elkülönítve " -"hozhat létre számlákat.\n" +"Beszerzési megrendelés tételsorain alapszik: különálló tétel sorokat hozzon " +"létre a 'Számla vezérlés > Beszerzési megrendelés tételsorain alapszik' ahol " +"elkülönítve hozhat létre számlákat.\n" "Tervezet számla alapján: tervezet számlát hoz létre amit később " "jóváhagyhat.\n" "A bejövő szállítások alapján: Számlát hozhat létre, ha a beérkezés jóvá lett " @@ -2305,7 +2381,7 @@ msgstr "Szállítói megrendelés hivatkozása" #. module: purchase #: report:purchase.order:0 msgid "Purchase Order Confirmation N°" -msgstr "Szállítói megrendelés jóváhagyásának száma" +msgstr "Beszerzési megrendelés jóváhagyásának száma" #. module: purchase #: view:purchase.order:0 @@ -2339,8 +2415,8 @@ msgstr "" " * ugyanahhoz a szállítóhoz tartoznak \n" " * ugyanaz a raktári helyük és az árlistájuk \n" " \n" -" A rendszer a megrendelési sorokat csak akkor vonja össze, ha: \n" -" * a sorok a termék, a mennyiség és az egységár kivételével teljesen " +" A rendszer a megrendelési tételsorokat csak akkor vonja össze, ha: \n" +" * a tételsorok a termék, a mennyiség és az egységár kivételével teljesen " "megegyeznek \n" " " @@ -2374,7 +2450,7 @@ msgstr "Év" #. module: purchase #: selection:purchase.config.settings,default_invoice_method:0 msgid "Based on purchase order lines" -msgstr "A beszerzési megrendelés sorai alapján" +msgstr "A beszerzési megrendelés tételsorai alapján" #. module: purchase #: model:ir.actions.act_window,help:purchase.act_res_partner_2_purchase_order @@ -2392,7 +2468,7 @@ msgid "" " " msgstr "" "

\n" -" Ennek a beszállítónak nincs beszerzési megrendelése. " +" Ehhez a Beszállítóhoz nincs beszerzési megrendelés. " "Kattintson ide árajánlat kérés készítéséhez.\n" "

\n" " Az árajánlat kérés a beszerzési folyamat első lépése. " diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index e551eb40396..67dac96eb32 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -478,7 +478,7 @@ class purchase_order(osv.osv): if not acc_id: raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,)) else: - acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id + acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category', context=context).id fpos = po_line.order_id.fiscal_position or False return fiscal_obj.map_account(cr, uid, fpos, acc_id) @@ -518,15 +518,23 @@ class purchase_order(osv.osv): :return: ID of created invoice. :rtype: int """ - res = False - + if context is None: + context = {} journal_obj = self.pool.get('account.journal') inv_obj = self.pool.get('account.invoice') inv_line_obj = self.pool.get('account.invoice.line') + res = False + uid_company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id for order in self.browse(cr, uid, ids, context=context): + context.pop('force_company', None) + if order.company_id.id != uid_company_id: + #if the company of the document is different than the current user company, force the company in the context + #then re-do a browse to read the property fields for the good company. + context['force_company'] = order.company_id.id + order = self.browse(cr, uid, order.id, context=context) pay_acc_id = order.partner_id.property_account_payable.id - journal_ids = journal_obj.search(cr, uid, [('type', '=','purchase'),('company_id', '=', order.company_id.id)], limit=1) + journal_ids = journal_obj.search(cr, uid, [('type', '=', 'purchase'), ('company_id', '=', order.company_id.id)], limit=1) if not journal_ids: raise osv.except_osv(_('Error!'), _('Define purchase journal for this company: "%s" (id:%d).') % (order.company_id.name, order.company_id.id)) @@ -539,7 +547,7 @@ class purchase_order(osv.osv): inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context) inv_lines.append(inv_line_id) - po_line.write({'invoiced':True, 'invoice_lines': [(4, inv_line_id)]}, context=context) + po_line.write({'invoiced': True, 'invoice_lines': [(4, inv_line_id)]}, context=context) # get invoice data and create invoice inv_data = { @@ -720,6 +728,7 @@ class purchase_order(osv.osv): 'invoiced':False, 'invoice_ids': [], 'picking_ids': [], + 'partner_ref': '', 'name': self.pool.get('ir.sequence').get(cr, uid, 'purchase.order'), }) return super(purchase_order, self).copy(cr, uid, id, default, context) @@ -851,6 +860,14 @@ class purchase_order_line(osv.osv): res[line.id] = cur_obj.round(cr, uid, cur, taxes['total']) return res + def _get_uom_id(self, cr, uid, context=None): + try: + proxy = self.pool.get('ir.model.data') + result = proxy.get_object_reference(cr, uid, 'product', 'product_uom_unit') + return result[1] + except Exception, ex: + return False + _columns = { 'name': fields.text('Description', required=True), 'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True), @@ -877,6 +894,7 @@ class purchase_order_line(osv.osv): } _defaults = { + 'product_uom' : _get_uom_id, 'product_qty': lambda *a: 1.0, 'state': lambda *args: 'draft', 'invoiced': lambda *a: 0, @@ -897,8 +915,11 @@ class purchase_order_line(osv.osv): """ onchange handler of product_uom. """ + if context is None: + context = {} if not uom_id: return {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'product_uom' : uom_id or False}} + context = dict(context, purchase_uom_check=True) return self.onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id, partner_id, date_order=date_order, fiscal_position_id=fiscal_position_id, date_planned=date_planned, name=name, price_unit=price_unit, context=context) @@ -940,7 +961,6 @@ class purchase_order_line(osv.osv): product_product = self.pool.get('product.product') product_uom = self.pool.get('product.uom') res_partner = self.pool.get('res.partner') - product_supplierinfo = self.pool.get('product.supplierinfo') product_pricelist = self.pool.get('product.pricelist') account_fiscal_position = self.pool.get('account.fiscal.position') account_tax = self.pool.get('account.tax') @@ -972,7 +992,7 @@ class purchase_order_line(osv.osv): uom_id = product_uom_po_id if product.uom_id.category_id.id != product_uom.browse(cr, uid, uom_id, context=context).category_id.id: - if self._check_product_uom_group(cr, uid, context=context): + if context.get('purchase_uom_check') and self._check_product_uom_group(cr, uid, context=context): res['warning'] = {'title': _('Warning!'), 'message': _('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')} uom_id = product_uom_po_id @@ -1114,6 +1134,35 @@ class procurement_order(osv.osv): seller_delay = int(procurement.product_id.seller_delay) return schedule_date - relativedelta(days=seller_delay) + def _get_warehouse(self, procurement, user_company): + """ + Return the warehouse containing the procurment stock location (or one of it ancestors) + If none match, returns then first warehouse of the company + """ + # TODO refactor the domain once we implement the "parent_of" domain operator + # NOTE This method has been copied in the `purchase_requisition` module to ensure + # retro-compatibility. This code duplication will be deleted in next stable version. + # Do not forget to update both version in case of modification. + company_id = (procurement.company_id or user_company).id + domains = [ + [ + '&', ('company_id', '=', company_id), + '|', '&', ('lot_stock_id.parent_left', '<', procurement.location_id.parent_left), + ('lot_stock_id.parent_right', '>', procurement.location_id.parent_right), + ('lot_stock_id', '=', procurement.location_id.id) + ], + [('company_id', '=', company_id)] + ] + + cr, uid = procurement._cr, procurement._uid + context = procurement._context + Warehouse = self.pool['stock.warehouse'] + for domain in domains: + ids = Warehouse.search(cr, uid, domain, context=context) + if ids: + return ids[0] + return False + def make_po(self, cr, uid, ids, context=None): """ Make purchase order from procurement @return: New created Purchase Orders procurement wise @@ -1128,7 +1177,6 @@ class procurement_order(osv.osv): prod_obj = self.pool.get('product.product') acc_pos_obj = self.pool.get('account.fiscal.position') seq_obj = self.pool.get('ir.sequence') - warehouse_obj = self.pool.get('stock.warehouse') for procurement in self.browse(cr, uid, ids, context=context): res_id = procurement.move_id.id partner = procurement.product_id.seller_id # Taken Main Supplier of Product of Procurement. @@ -1136,7 +1184,6 @@ class procurement_order(osv.osv): partner_id = partner.id address_id = partner_obj.address_get(cr, uid, [partner_id], ['delivery'])['delivery'] pricelist_id = partner.property_product_pricelist_purchase.id - warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id or company.id)], context=context) uom_id = procurement.product_id.uom_po_id.id qty = uom_obj._compute_qty(cr, uid, procurement.product_uom.id, procurement.product_qty, uom_id) @@ -1175,7 +1222,7 @@ class procurement_order(osv.osv): 'origin': procurement.origin, 'partner_id': partner_id, 'location_id': procurement.location_id.id, - 'warehouse_id': warehouse_id and warehouse_id[0] or False, + 'warehouse_id': self._get_warehouse(procurement, company), 'pricelist_id': pricelist_id, 'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'company_id': procurement.company_id.id, @@ -1234,17 +1281,27 @@ class account_invoice(osv.Model): def invoice_validate(self, cr, uid, ids, context=None): res = super(account_invoice, self).invoice_validate(cr, uid, ids, context=context) purchase_order_obj = self.pool.get('purchase.order') - po_ids = purchase_order_obj.search(cr, uid, [('invoice_ids', 'in', ids)], context=context) + # read access on purchase.order object is not required + if not purchase_order_obj.check_access_rights(cr, uid, 'read', raise_exception=False): + user_id = SUPERUSER_ID + else: + user_id = uid + po_ids = purchase_order_obj.search(cr, user_id, [('invoice_ids', 'in', ids)], context=context) for po_id in po_ids: - purchase_order_obj.message_post(cr, uid, po_id, body=_("Invoice received"), context=context) + purchase_order_obj.message_post(cr, user_id, po_id, body=_("Invoice received"), context=context) return res def confirm_paid(self, cr, uid, ids, context=None): res = super(account_invoice, self).confirm_paid(cr, uid, ids, context=context) purchase_order_obj = self.pool.get('purchase.order') - po_ids = purchase_order_obj.search(cr, uid, [('invoice_ids', 'in', ids)], context=context) - if po_ids: - purchase_order_obj.message_post(cr, uid, po_ids, body=_("Invoice paid"), context=context) + # read access on purchase.order object is not required + if not purchase_order_obj.check_access_rights(cr, uid, 'read', raise_exception=False): + user_id = SUPERUSER_ID + else: + user_id = uid + po_ids = purchase_order_obj.search(cr, user_id, [('invoice_ids', 'in', ids)], context=context) + for po_id in po_ids: + purchase_order_obj.message_post(cr, user_id, po_id, body=_("Invoice paid"), context=context) return res class account_invoice_line(osv.Model): diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 96006f6149a..6e006f6edd2 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -36,6 +36,9 @@ + - + diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index 5af74b23495..f6a37bb37a7 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -94,23 +94,20 @@ class purchase_report(osv.osv): extract(epoch from age(s.date_approve,s.date_order))/(24*60*60)::decimal(16,2) as delay, extract(epoch from age(l.date_planned,s.date_order))/(24*60*60)::decimal(16,2) as delay_pass, count(*) as nbr, - (l.price_unit*l.product_qty)::decimal(16,2) as price_total, + sum(l.price_unit*l.product_qty)::decimal(16,2) as price_total, avg(100.0 * (l.price_unit*l.product_qty) / NULLIF(t.standard_price*l.product_qty/u.factor*u2.factor, 0.0))::decimal(16,2) as negociation, - sum(t.standard_price*l.product_qty/u.factor*u2.factor)::decimal(16,2) as price_standard, (sum(l.product_qty*l.price_unit)/NULLIF(sum(l.product_qty/u.factor*u2.factor),0.0))::decimal(16,2) as price_average - from purchase_order s - left join purchase_order_line l on (s.id=l.order_id) + from purchase_order_line l + join purchase_order s on (l.order_id=s.id) left join product_product p on (l.product_id=p.id) left join product_template t on (p.product_tmpl_id=t.id) left join product_uom u on (u.id=l.product_uom) left join product_uom u2 on (u2.id=t.uom_id) - where l.product_id is not null group by s.company_id, s.create_uid, s.partner_id, - l.product_qty, u.factor, s.location_id, l.price_unit, diff --git a/addons/purchase/test/ui/print_report.yml b/addons/purchase/test/ui/print_report.yml index 94cf49655b6..2fe7ec89d25 100644 --- a/addons/purchase/test/ui/print_report.yml +++ b/addons/purchase/test/ui/print_report.yml @@ -13,7 +13,9 @@ - !python {model: purchase.order}: | import os - from openerp import netsvc, tools - (data, format) = netsvc.LocalService('report.purchase.order').create(cr, uid, [ref('purchase.purchase_order_1'),ref('purchase.purchase_order_2')], {}, {}) + from openerp import tools + from openerp.report import render_report + ids = [ref('purchase.purchase_order_1'), ref('purchase.purchase_order_2')] + data, format = render_report(cr, uid, ids, 'purchase.order', {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'purchase-purchase_order_report'+format), 'wb+').write(data) diff --git a/addons/purchase_analytic_plans/i18n/es_PE.po b/addons/purchase_analytic_plans/i18n/es_PE.po new file mode 100644 index 00000000000..239c3702ae7 --- /dev/null +++ b/addons/purchase_analytic_plans/i18n/es_PE.po @@ -0,0 +1,33 @@ +# Spanish (Peru) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-12-10 17:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Peru) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" + +#. module: purchase_analytic_plans +#: field:purchase.order.line,analytics_id:0 +msgid "Analytic Distribution" +msgstr "" + +#. module: purchase_analytic_plans +#: model:ir.model,name:purchase_analytic_plans.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "" + +#. module: purchase_analytic_plans +#: model:ir.model,name:purchase_analytic_plans.model_purchase_order +msgid "Purchase Order" +msgstr "" diff --git a/addons/purchase_double_validation/i18n/es_PE.po b/addons/purchase_double_validation/i18n/es_PE.po new file mode 100644 index 00000000000..f543c5cbc06 --- /dev/null +++ b/addons/purchase_double_validation/i18n/es_PE.po @@ -0,0 +1,49 @@ +# Spanish (Peru) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-12-10 18:09+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Peru) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" + +#. module: purchase_double_validation +#: model:ir.model,name:purchase_double_validation.model_purchase_config_settings +msgid "purchase.config.settings" +msgstr "" + +#. module: purchase_double_validation +#: view:purchase.order:0 +msgid "Purchase orders which are not approved yet." +msgstr "" + +#. module: purchase_double_validation +#: field:purchase.config.settings,limit_amount:0 +msgid "limit to require a second approval" +msgstr "" + +#. module: purchase_double_validation +#: view:board.board:0 +#: model:ir.actions.act_window,name:purchase_double_validation.purchase_waiting +msgid "Purchase Orders Waiting Approval" +msgstr "" + +#. module: purchase_double_validation +#: view:purchase.order:0 +msgid "To Approve" +msgstr "" + +#. module: purchase_double_validation +#: help:purchase.config.settings,limit_amount:0 +msgid "Amount after which validation of purchase is required." +msgstr "" diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py index df73887cc42..5ce57dab811 100644 --- a/addons/purchase_requisition/purchase_requisition.py +++ b/addons/purchase_requisition/purchase_requisition.py @@ -96,7 +96,6 @@ class purchase_requisition(osv.osv): def _seller_details(self, cr, uid, requisition_line, supplier, context=None): product_uom = self.pool.get('product.uom') pricelist = self.pool.get('product.pricelist') - supplier_info = self.pool.get("product.supplierinfo") product = requisition_line.product_id default_uom_po_id = product.uom_po_id.id qty = product_uom._compute_qty(cr, uid, requisition_line.product_uom_id.id, requisition_line.product_qty, default_uom_po_id) @@ -228,34 +227,69 @@ class product_product(osv.osv): class procurement_order(osv.osv): - _inherit = 'procurement.order' _columns = { - 'requisition_id' : fields.many2one('purchase.requisition','Latest Requisition') + 'requisition_id': fields.many2one('purchase.requisition', 'Latest Requisition') } + + def _get_warehouse(self, procurement, user_company): + """ + Return the warehouse containing the procurment stock location (or one of it ancestors) + If none match, returns then first warehouse of the company + """ + # NOTE This method is a copy of the one on the procurement.order defined in purchase + # module. It's been copied to ensure it been always available, even if module + # purchase is not up to date. + # Do not forget to update both version in case of modification. + company_id = (procurement.company_id or user_company).id + domains = [ + [ + '&', ('company_id', '=', company_id), + '|', '&', ('lot_stock_id.parent_left', '<', procurement.location_id.parent_left), + ('lot_stock_id.parent_right', '>', procurement.location_id.parent_right), + ('lot_stock_id', '=', procurement.location_id.id) + ], + [('company_id', '=', company_id)] + ] + + cr, uid = procurement._cr, procurement._uid + context = procurement._context + Warehouse = self.pool['stock.warehouse'] + for domain in domains: + ids = Warehouse.search(cr, uid, domain, context=context) + if ids: + return ids[0] + return False + def make_po(self, cr, uid, ids, context=None): res = {} requisition_obj = self.pool.get('purchase.requisition') - warehouse_obj = self.pool.get('stock.warehouse') - procurement = self.browse(cr, uid, ids, context=context)[0] - if procurement.product_id.purchase_requisition: - warehouse_id = warehouse_obj.search(cr, uid, [('company_id', '=', procurement.company_id.id or company.id)], context=context) - res[procurement.id] = requisition_obj.create(cr, uid, - { + non_requisition = [] + for procurement in self.browse(cr, uid, ids, context=context): + if procurement.product_id.purchase_requisition: + user_company = self.pool['res.users'].browse(cr, uid, uid, context=context).company_id + req = res[procurement.id] = requisition_obj.create(cr, uid, { 'origin': procurement.origin, 'date_end': procurement.date_planned, - 'warehouse_id':warehouse_id and warehouse_id[0] or False, - 'company_id':procurement.company_id.id, - 'line_ids': [(0,0,{ + 'warehouse_id': self._get_warehouse(procurement, user_company), + 'company_id': procurement.company_id.id, + 'line_ids': [(0, 0, { 'product_id': procurement.product_id.id, 'product_uom_id': procurement.product_uom.id, 'product_qty': procurement.product_qty - })], + })], }) - self.write(cr,uid,[procurement.id],{'state': 'running','requisition_id': res[procurement.id]},context=context) - else: - res = super(procurement_order, self).make_po(cr, uid, ids, context=context) + procurement.write({ + 'state': 'running', + 'requisition_id': req + }) + else: + non_requisition.append(procurement.id) + + if non_requisition: + res.update(super(procurement_order, self).make_po(cr, uid, non_requisition, context=context)) + return res diff --git a/addons/purchase_requisition/wizard/purchase_requisition_partner.py b/addons/purchase_requisition/wizard/purchase_requisition_partner.py index 0fee8745931..8776bba2bf8 100644 --- a/addons/purchase_requisition/wizard/purchase_requisition_partner.py +++ b/addons/purchase_requisition/wizard/purchase_requisition_partner.py @@ -19,9 +19,7 @@ # ############################################################################## -import time from openerp.osv import fields, osv -from openerp.osv.orm import browse_record, browse_null from openerp.tools.translate import _ class purchase_requisition_partner(osv.osv_memory): diff --git a/addons/report_webkit/test/print.yml b/addons/report_webkit/test/print.yml index b201efa97de..b906a991f64 100644 --- a/addons/report_webkit/test/print.yml +++ b/addons/report_webkit/test/print.yml @@ -3,8 +3,9 @@ - !python {model: ir.actions.report.xml}: | import os - from openerp import netsvc, tools + from openerp import tools + from openerp.report import render_report ids = self.pool['ir.actions.report.xml'].search(cr, uid, [], {}) - (data, format) = netsvc.LocalService('report.webkit.ir.actions.report.xml').create(cr, uid, ids, {}, {}) + data, format = render_report(cr, uid, ids, 'webkit.ir.actions.report.xml', {}) if tools.config['test_report_directory']: file(os.path.join(tools.config['test_report_directory'], 'report_webkit_demo_report.'+format), 'wb+').write(data) diff --git a/addons/resource/resource.py b/addons/resource/resource.py index 449fa422ab4..212a7dd6828 100644 --- a/addons/resource/resource.py +++ b/addons/resource/resource.py @@ -177,8 +177,8 @@ class resource_calendar(osv.osv): if leave_flag: break else: - d1 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(m)), int((m%1) * 60)) - d2 = datetime(dt_from.year, dt_from.month, dt_from.day, int(math.floor(hour_to)), int((hour_to%1) * 60)) + d1 = datetime(dt_from.year, dt_from.month, dt_from.day) + timedelta(hours=int(math.floor(m)), minutes=int((m%1) * 60)) + d2 = datetime(dt_from.year, dt_from.month, dt_from.day) + timedelta(hours=int(math.floor(hour_to)), minutes=int((hour_to%1) * 60)) result.append((d1, d2)) current_hour = hour_to todo -= (hour_to - m) diff --git a/addons/sale/edi/sale_order_action_data.xml b/addons/sale/edi/sale_order_action_data.xml index a7f597f4339..4ad657d7f82 100644 --- a/addons/sale/edi/sale_order_action_data.xml +++ b/addons/sale/edi/sale_order_action_data.xml @@ -20,7 +20,7 @@ Sales Order - Send by Email - ${object.user_id.email or ''} + ${(object.user_id.email or '')|safe} ${object.company_id.name} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' }) ${object.partner_invoice_id.id} diff --git a/addons/sale/i18n/es_PE.po b/addons/sale/i18n/es_PE.po new file mode 100644 index 00000000000..ff4122ce3df --- /dev/null +++ b/addons/sale/i18n/es_PE.po @@ -0,0 +1,2139 @@ +# Spanish (Peru) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-12-09 17:37+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Peru) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" + +#. module: sale +#: model:res.groups,name:sale.group_analytic_accounting +msgid "Analytic Accounting for Sales" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_confirmquotation0 +msgid "Confirm Quotation" +msgstr "" + +#. module: sale +#: view:board.board:0 +msgid "Sales Dashboard" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:92 +#, python-format +msgid "There is no income account defined as global property." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_tree2 +#: model:ir.ui.menu,name:sale.menu_invoicing_sales_order_lines +msgid "Order Lines to Invoice" +msgstr "" + +#. module: sale +#: field:sale.order,date_confirm:0 +msgid "Confirmation Date" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +#: view:sale.report:0 +msgid "Group By..." +msgstr "" + +#. module: sale +#: field:sale.order.line,address_allotment_id:0 +msgid "Allotment Partner" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_view_sale_advance_payment_inv +msgid "Invoice Order" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Product Features" +msgstr "" + +#. module: sale +#: help:sale.config.settings,module_account_analytic_analysis:0 +msgid "" +"Allows to define your customer contracts conditions: invoicing\n" +" method (fixed price, on timesheet, advance invoice), the exact " +"pricing\n" +" (650€/day for a developer), the duration (one year support " +"contract).\n" +" You will be able to follow the progress of the contract and " +"invoice automatically.\n" +" It installs the account_analytic_analysis module." +msgstr "" + +#. module: sale +#: model:email.template,report_name:sale.email_template_edi_sale +msgid "" +"${(object.name or '').replace('/','_')}_${object.state == 'draft' and " +"'draft' or ''}" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +#: field:sale.report,product_uom:0 +msgid "Unit of Measure" +msgstr "" + +#. module: sale +#: field:sale.order.line,type:0 +msgid "Procurement Method" +msgstr "" + +#. module: sale +#: help:sale.order,date_confirm:0 +msgid "Date on which sales order is confirmed." +msgstr "" + +#. module: sale +#: field:account.config.settings,module_sale_analytic_plans:0 +msgid "Use multiple analytic accounts on sales" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "March" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:565 +#, python-format +msgid "First cancel all invoices attached to this sales order." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Quotation Number" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: sale +#: field:sale.order,company_id:0 +#: field:sale.order.line,company_id:0 +#: view:sale.report:0 +#: field:sale.report,company_id:0 +#: field:sale.shop,company_id:0 +msgid "Company" +msgstr "" + +#. module: sale +#: field:sale.make.invoice,invoice_date:0 +msgid "Invoice Date" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_tree3 +msgid "Uninvoiced and Delivered Lines" +msgstr "" + +#. module: sale +#: model:mail.message.subtype,description:sale.mt_order_confirmed +msgid "Quotation confirmed" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Invoice Exception" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Quotation " +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +msgid "Draft Quotation" +msgstr "" + +#. module: sale +#: field:sale.order,partner_shipping_id:0 +msgid "Delivery Address" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,analytic_account_id:0 +#: field:sale.shop,project_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_sale_journal:0 +msgid "Allow batch invoicing of delivery orders through journals" +msgstr "" + +#. module: sale +#: field:sale.order.line,price_subtotal:0 +msgid "Subtotal" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,day:0 +msgid "Day" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_cancelorder0 +#: view:sale.order:0 +msgid "Cancel Order" +msgstr "" + +#. module: sale +#: field:sale.order.line,th_weight:0 +msgid "Weight" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Warehouse Features" +msgstr "" + +#. module: sale +#: field:sale.config.settings,time_unit:0 +msgid "The default working time unit for services is" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uom:0 +msgid "Unit of Measure " +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:101 +#, python-format +msgid "Incorrect Data" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:102 +#, python-format +msgid "The value of Advance Amount must be positive." +msgstr "" + +#. module: sale +#: help:sale.config.settings,group_discount_per_so_line:0 +msgid "Allows you to apply some discount per sales order line." +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Sales Order Lines that are in 'done' state" +msgstr "" + +#. module: sale +#: selection:sale.order.line,type:0 +msgid "on order" +msgstr "" + +#. module: sale +#: field:sale.order,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: sale +#: field:sale.report,state:0 +msgid "Order Status" +msgstr "" + +#. module: sale +#: field:sale.order,amount_tax:0 +#: field:sale.order.line,tax_id:0 +msgid "Taxes" +msgstr "" + +#. module: sale +#: field:sale.order,amount_untaxed:0 +msgid "Untaxed Amount" +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_project:0 +msgid "Project" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:185 +#: 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 +msgid "Error!" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Net Total :" +msgstr "Sub-Total" + +#. module: sale +#: help:sale.order.line,type:0 +msgid "" +"From stock: When needed, the product is taken from the stock or we wait for " +"replenishment.\n" +"On order: When needed, the product is purchased or produced." +msgstr "" + +#. module: sale +#: help:sale.config.settings,module_analytic_user_function:0 +msgid "" +"Allows you to define what is the default function of a specific user on a " +"given account.\n" +" This is mostly used when a user encodes his timesheet. The " +"values are retrieved and the fields are auto-filled.\n" +" But the possibility to change these values is still " +"available.\n" +" This installs the module analytic_user_function." +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.order.line,state:0 +#: selection:sale.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Sales Order Lines related to a Sales Order of mine" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +msgid "Quotation Sent" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: sale +#: help:sale.order,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Shipping Exception" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uos_qty:0 +msgid "Quantity (UoS)" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_shop_form +#: field:sale.order,shop_id:0 +#: view:sale.report:0 +#: field:sale.report,shop_id:0 +msgid "Shop" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_orders_exception +msgid "Sales in Exception" +msgstr "" + +#. module: sale +#: field:sale.order,partner_invoice_id:0 +msgid "Invoice Address" +msgstr "" + +#. module: sale +#: help:sale.order,create_date:0 +msgid "Date on which sales order is created." +msgstr "" + +#. module: sale +#: view:res.partner:0 +msgid "False" +msgstr "" + +#. module: sale +#: help:sale.advance.payment.inv,advance_payment_method:0 +msgid "" +"Use All to create the final invoice.\n" +" Use Percentage to invoice a percentage of the total amount.\n" +" Use Fixed Price to invoice a specific amound in advance.\n" +" Use Some Order Lines to invoice a selection of the sales " +"order lines." +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Create Invoices" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Tax" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:277 +#: code:addons/sale/sale.py:820 +#: code:addons/sale/sale.py:983 +#, python-format +msgid "Invalid Action!" +msgstr "" + +#. module: sale +#: help:sale.order,state:0 +msgid "" +"Gives the status of the quotation or sales order. \n" +"The exception status is automatically set when a cancel operation occurs " +" in the invoice validation (Invoice Exception) or in the picking " +"list process (Shipping Exception).\n" +"The 'Waiting Schedule' status is set when the invoice is confirmed " +" but waiting for the scheduler to run on the order date." +msgstr "" + +#. module: sale +#: field:sale.report,date_confirm:0 +msgid "Date Confirm" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: sale +#: help:sale.order,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: sale +#: help:sale.order.line,sequence:0 +msgid "Gives the sequence order when displaying a list of sales order lines." +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,product_uom_qty:0 +msgid "# of Qty" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Fax :" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:277 +#, python-format +msgid "" +"In order to delete a confirmed sales order, you must cancel it before !" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "(update)" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_res_partner +#: view:sale.report:0 +#: field:sale.report,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Contract Features" +msgstr "" + +#. module: sale +#: 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 +#: field:res.partner,sale_order_ids:0 +#: model:res.request.link,name:sale.req_link_sale_order +#: view:sale.order:0 +#: selection:sale.order,state:0 +#, python-format +msgid "Sales Order" +msgstr "" + +#. module: sale +#: model:res.groups,name:sale.group_invoice_so_lines +msgid "Enable Invoicing Sales order lines" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,amount:0 +msgid "Advance Amount" +msgstr "" + +#. module: sale +#: help:sale.order,invoice_exists:0 +msgid "It indicates that sales order has at least one invoice." +msgstr "" + +#. module: sale +#: help:sale.config.settings,group_sale_pricelist:0 +msgid "" +"Allows to manage different prices based on rules per category of customers.\n" +"Example: 10% for retailers, promotion of 5 EUR on this product, etc." +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_analytic_user_function:0 +msgid "One employee can have different roles per contract" +msgstr "" + +#. module: sale +#: selection:sale.advance.payment.inv,advance_payment_method:0 +msgid "Invoice the whole sales order" +msgstr "" + +#. module: sale +#: field:sale.shop,payment_default_id:0 +msgid "Default Payment Term" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_confirm0 +msgid "Confirm" +msgstr "" + +#. module: sale +#: field:sale.config.settings,timesheet:0 +msgid "Prepare invoices based on timesheets" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:820 +#, python-format +msgid "You cannot cancel a sales order line that has already been invoiced." +msgstr "" + +#. module: sale +#: view:account.invoice.report:0 +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_turnover_by_month +msgid "Monthly Turnover" +msgstr "" + +#. module: sale +#: selection:sale.order,invoice_quantity:0 +msgid "Shipped Quantities" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,year:0 +msgid "Year" +msgstr "" + +#. module: sale +#: field:sale.config.settings,group_uom:0 +msgid "Allow using different units of measures" +msgstr "" + +#. module: sale +#: model:mail.message.subtype,name:sale.mt_order_confirmed +msgid "Sales Order Confirmed" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Sales Order that haven't yet been confirmed" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Print" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Order N°" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,order_line:0 +msgid "Order Lines" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Disc.(%)" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:764 +#, python-format +msgid "Please define income account for this product: \"%s\" (id:%d)." +msgstr "" + +#. module: sale +#: field:sale.order.line,invoice_lines:0 +msgid "Invoice Lines" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,price_total:0 +msgid "Total Price" +msgstr "" + +#. module: sale +#: help:account.config.settings,group_analytic_account_for_sales:0 +msgid "Allows you to specify an analytic account on sales orders." +msgstr "" + +#. module: sale +#: help:sale.config.settings,module_sale_journal:0 +msgid "" +"Allows you to categorize your sales and deliveries (picking lists) between " +"different journals,\n" +" and perform batch operations on journals.\n" +" This installs the module sale_journal." +msgstr "" +"Permite categorizar las ventas y entregas (guías) entre los diferentes " +"diarios, y realizar tareas en lote en los mismos.\n" +"Esto instala el módulo 'sale_journal'." + +#. module: sale +#: help:sale.make.invoice,grouped:0 +msgid "Check the box to group the invoices for the same customers" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice +#: model:ir.actions.act_window,name:sale.action_view_sale_order_line_make_invoice +msgid "Make Invoices" +msgstr "" + +#. module: sale +#: code:addons/sale/res_config.py:97 +#, python-format +msgid "Hour" +msgstr "" + +#. module: sale +#: field:res.partner,sale_order_count:0 +msgid "# of Sales Order" +msgstr "" + +#. module: sale +#: help:sale.config.settings,timesheet:0 +msgid "" +"For modifying account analytic view to show important data to project " +"manager of services companies.\n" +" You can also view the report of account analytic summary " +"user-wise as well as month wise.\n" +" This installs the module account_analytic_analysis." +msgstr "" + +#. module: sale +#: field:sale.order,create_date:0 +msgid "Creation Date" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "To Invoice" +msgstr "" + +#. module: sale +#: help:sale.order,partner_invoice_id:0 +msgid "Invoice address for current sales order." +msgstr "" + +#. module: sale +#: selection:sale.order,invoice_quantity:0 +msgid "Ordered Quantities" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Ordered Year of the sales order" +msgstr "" + +#. module: sale +#: model:res.groups,name:sale.group_delivery_invoice_address +msgid "Addresses in Sales Orders" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,qtty:0 +#: report:sale.order:0 +#: field:sale.order.line,product_uom_qty:0 +msgid "Quantity" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Total :" +msgstr "Total" + +#. module: sale +#: view:sale.order.line:0 +msgid "Sales Order Lines ready to be invoiced" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "My Sales" +msgstr "" + +#. module: sale +#: field:sale.order,name:0 +#: field:sale.order.line,order_id:0 +msgid "Order Reference" +msgstr "" + +#. module: sale +#: field:sale.order,fiscal_position:0 +msgid "Fiscal Position" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "July" +msgstr "" + +#. module: sale +#: help:sale.order.line,state:0 +msgid "" +"* The 'Draft' status is set when the related sales order in draft status. " +" \n" +"* The 'Confirmed' status is set when the related sales order is confirmed. " +" \n" +"* The 'Exception' status is set when the related sales order is set as " +"exception. \n" +"* The 'Done' status is set when the sales order line has been picked. " +" \n" +"* The 'Cancelled' status is set when a user cancel the sales order related." +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Default Options" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:960 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:91 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:95 +#, python-format +msgid "Configuration Error!" +msgstr "" + +#. module: sale +#: field:account.config.settings,group_analytic_account_for_sales:0 +msgid "Analytic accounting for sales" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,state:0 +#: view:sale.order.line:0 +#: field:sale.order.line,state:0 +#: view:sale.report:0 +msgid "Status" +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +msgid "" +"After clicking 'Show Lines to Invoice', select lines to invoice and create " +"the invoice from the 'More' dropdown menu." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Send by Email" +msgstr "" + +#. module: sale +#: code:addons/sale/edi/sale_order.py:140 +#, python-format +msgid "EDI Pricelist (%s)" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "On Delivery Order" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Invoicing Process" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Order Date" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Sales Order done" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:364 +#, python-format +msgid "Please define sales journal for this company: \"%s\" (id:%d)." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order +#: view:res.partner:0 +msgid "Quotations and Sales" +msgstr "" + +#. module: sale +#: field:sale.order,invoiced:0 +msgid "Paid" +msgstr "" + +#. module: sale +#: help:sale.config.settings,group_uom:0 +msgid "" +"Allows you to select and maintain different units of measure for products." +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Reference Unit of Measure" +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +msgid "Create and View Invoice" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Sales order lines done" +msgstr "" + +#. module: sale +#: field:sale.make.invoice,grouped:0 +msgid "Group the invoices" +msgstr "" + +#. module: sale +#: help:sale.advance.payment.inv,amount:0 +msgid "The amount to be invoiced in advance." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_make_invoice +msgid "Sales Make Invoice" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:307 +#, python-format +msgid "Pricelist Warning!" +msgstr "" + +#. module: sale +#: field:sale.order.line,discount:0 +msgid "Discount (%)" +msgstr "" + +#. module: sale +#: 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 " +"following reasons:\n" +"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n" +"2.The Sales Order Line is Invoiced!" +msgstr "" + +#. module: sale +#: view:sale.order.line.make.invoice:0 +msgid "Create & View Invoice" +msgstr "" + +#. module: sale +#: view:board.board:0 +#: model:ir.actions.act_window,name:sale.action_quotation_for_sale +msgid "My Quotations" +msgstr "" + +#. module: sale +#: field:sale.order,invoice_ids:0 +msgid "Invoices" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "December" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "Contracts Management" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Shipped" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,month:0 +msgid "Month" +msgstr "" + +#. module: sale +#: field:sale.order,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Uninvoiced" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,categ_id:0 +msgid "Category of Product" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:564 +#, python-format +msgid "Cannot cancel this sales order!" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Recreate Invoice" +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_warning:0 +msgid "Allow configuring alerts by customer or products" +msgstr "" + +#. module: sale +#: field:sale.shop,name:0 +msgid "Shop Name" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "My Sales Orders" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Taxes :" +msgstr "Impuestos" + +#. module: sale +#: field:sale.order,invoice_exists:0 +#: field:sale.order.line,invoiced:0 +msgid "Invoiced" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:202 +#, python-format +msgid "Advance Invoice" +msgstr "" + +#. module: sale +#: help:sale.config.settings,group_invoice_so_lines:0 +msgid "" +"To allow your salesman to make invoices for sales order lines using the menu " +"'Lines to Invoice'." +msgstr "" + +#. module: sale +#: model:ir.actions.client,name:sale.action_client_sale_menu +msgid "Open Sale Menu" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:598 +#, python-format +msgid "You cannot confirm a sales order which has no line." +msgstr "" + +#. module: sale +#: selection:sale.report,state:0 +msgid "In Progress" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:865 +#, python-format +msgid "No Customer Defined !" +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_sale_stock:0 +msgid "Trigger delivery orders automatically from sales orders" +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Create invoices" +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Confirmed" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:106 +#, python-format +msgid "Advance of %s %%" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_order_line_make_invoice +msgid "Sale OrderLine Make_invoice" +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Draft" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_email_templates +msgid "Email Templates" +msgstr "" + +#. module: sale +#: help:sale.order.line,address_allotment_id:0 +msgid "A partner to whom the particular product needs to be allotted." +msgstr "" + +#. module: sale +#: field:sale.order,project_id:0 +msgid "Contract / Analytic" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +#: selection:sale.report,state:0 +msgid "Waiting Schedule" +msgstr "" + +#. module: sale +#: field:sale.order,note:0 +msgid "Terms and conditions" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_orders +#: model:ir.ui.menu,name:sale.menu_sale_order +#: view:sale.order:0 +msgid "Sales Orders" +msgstr "" + +#. module: sale +#: help:sale.order,amount_tax:0 +msgid "The tax amount." +msgstr "" + +#. module: sale +#: field:sale.order,invoiced_rate:0 +msgid "Invoiced Ratio" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "On Demand" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "August" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_saleorder0 +msgid "Drives procurement and invoicing" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "To Do" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "June" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_shop_form +msgid "" +"

\n" +" Click to define a new sale shop.\n" +"

\n" +" Each quotation or sales order must be linked to a shop. The\n" +" shop also defines the warehouse from which the products will " +"be\n" +" delivered for each particular sales.\n" +"

\n" +" " +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Order" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_report_all +#: model:ir.ui.menu,name:sale.menu_report_product_all +#: view:sale.report:0 +msgid "Sales Analysis" +msgstr "" + +#. module: sale +#: field:sale.order,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "" +"Sales Order Lines that are confirmed, done or in exception state and haven't " +"yet been invoiced" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_report +msgid "Sales Orders Statistics" +msgstr "" + +#. module: sale +#: field:sale.order,date_order:0 +msgid "Date" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: view:sale.order:0 +#: field:sale.order,user_id:0 +#: view:sale.order.line:0 +#: field:sale.order.line,salesman_id:0 +#: view:sale.report:0 +#: field:sale.report,user_id:0 +msgid "Salesperson" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "November" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: sale +#: model:process.node,name:sale.process_node_quotation0 +#: view:sale.order:0 +#: selection:sale.report,state:0 +msgid "Quotation" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,product_id:0 +msgid "Advance Product" +msgstr "" + +#. module: sale +#: selection:sale.order.line,state:0 +msgid "Exception" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "October" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_invoice0 +msgid "" +"The Salesman creates an invoice manually, if the sales order shipping policy " +"is 'Shipping and Manual in Progress'. The invoice is created automatically " +"if the shipping policy is 'Payment before Delivery'." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_shop +#: view:sale.shop:0 +msgid "Sales Shop" +msgstr "Tienda" + +#. module: sale +#: help:sale.config.settings,module_sale_stock:0 +msgid "" +"Allows you to Make Quotation, Sale Order using different Order policy and " +"Manage Related Stock.\n" +" This installs the module sale_stock." +msgstr "" + +#. module: sale +#: help:sale.advance.payment.inv,product_id:0 +msgid "" +"Select a product of type service which is called 'Advance Product'.\n" +" You may have to create it and set it as a default value on " +"this field." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "January" +msgstr "" + +#. module: sale +#: field:sale.config.settings,group_discount_per_so_line:0 +msgid "Allow setting a discount on the sales order lines" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_orders_in_progress +msgid "Sales Order in Progress" +msgstr "" + +#. module: sale +#: view:sale.order.line.make.invoice:0 +msgid "" +"All items in these order lines will be invoiced. You can also invoice a " +"percentage of the sales order\n" +" or a fixed price (for advances) directly from the sales " +"order form if you prefer." +msgstr "" + +#. module: sale +#: help:sale.config.settings,module_warning:0 +msgid "" +"Allow to configure notification on products and trigger them when a user " +"wants to sale a given product or a given customer.\n" +"Example: Product: this product is deprecated, do not purchase more than 5.\n" +" Supplier: don't forget to ask for an express delivery." +msgstr "" + +#. module: sale +#: field:sale.order,paypal_url:0 +msgid "Paypal Url" +msgstr "" + +#. module: sale +#: help:sale.order,project_id:0 +msgid "The analytic account related to a sales order." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "View Invoice" +msgstr "" + +#. module: sale +#: field:sale.advance.payment.inv,advance_payment_method:0 +msgid "What do you want to invoice?" +msgstr "" + +#. module: sale +#: field:sale.config.settings,group_sale_pricelist:0 +msgid "Use pricelists to adapt your price per customers" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_confirmquotation0 +msgid "" +"The salesman confirms the quotation. The state of the sales order becomes " +"'In progress' or 'Manual in progress'." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:942 +#, python-format +msgid "" +"You have to select a pricelist or a customer in the sales form !\n" +"Please set one before choosing a product." +msgstr "" + +#. module: sale +#: help:sale.order,origin:0 +msgid "Reference of the document that generated this sales order request." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:955 +#, python-format +msgid "No valid pricelist line found ! :" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:113 +#: code:addons/sale/wizard/sale_make_invoice_advance.py:115 +#, python-format +msgid "Advance of %s %s" +msgstr "" + +#. module: sale +#: view:sale.report:0 +#: field:sale.report,delay:0 +msgid "Commitment Delay" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_quotations +#: model:ir.ui.menu,name:sale.menu_sale_quotations +#: view:sale.order:0 +#: view:sale.report:0 +msgid "Quotations" +msgstr "" + +#. module: sale +#: help:account.config.settings,module_sale_analytic_plans:0 +msgid "This allows install module sale_analytic_plans." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Ignore Exception" +msgstr "" + +#. module: sale +#: help:sale.order,partner_shipping_id:0 +msgid "Delivery address for current sales order." +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_sale_margin:0 +msgid "Display margins on sales orders" +msgstr "" + +#. module: sale +#: help:sale.order,invoice_ids:0 +msgid "" +"This is the list of invoices that have been generated for this sales order. " +"The same sales order may have been invoiced in several times (by line for " +"example)." +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Your Reference" +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +msgid "Show Lines to Invoice" +msgstr "" + +#. module: sale +#: field:sale.report,date:0 +msgid "Date Order" +msgstr "" + +#. module: sale +#: field:sale.order,pricelist_id:0 +#: field:sale.report,pricelist_id:0 +#: field:sale.shop,pricelist_id:0 +msgid "Pricelist" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "TVA :" +msgstr "RUC:" + +#. module: sale +#: code:addons/sale/sale.py:444 +#, python-format +msgid "Customer Invoices" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_order0 +msgid "Confirmed sales order to invoice." +msgstr "" + +#. module: sale +#: field:sale.order.line,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.open_board_sales +#: model:ir.ui.menu,name:sale.menu_dashboard_sales +#: model:process.process,name:sale.process_process_salesprocess0 +#: view:res.partner:0 +#: view:sale.order:0 +#: view:sale.report:0 +msgid "Sales" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:308 +#, python-format +msgid "" +"If you change the pricelist of this order (and eventually the currency), " +"prices of existing order lines will not be updated." +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Qty" +msgstr "Cant." + +#. module: sale +#: selection:sale.order.line,type:0 +msgid "from stock" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Quotation Date" +msgstr "" + +#. module: sale +#: field:sale.order,amount_total:0 +#: view:sale.order.line:0 +msgid "Total" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: selection:sale.order,state:0 +#: view:sale.order.line:0 +#: selection:sale.order.line,state:0 +#: selection:sale.report,state:0 +msgid "Done" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Invoice address :" +msgstr "" + +#. module: sale +#: 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 +msgid "Invoice" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "My Sales Order Lines" +msgstr "" + +#. module: sale +#: model:process.transition.action,name:sale.process_transition_action_cancel0 +#: view:sale.advance.payment.inv:0 +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "Cancel" +msgstr "" + +#. module: sale +#: field:sale.order,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:944 +#, python-format +msgid "No Pricelist ! : " +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Sales Order " +msgstr "" + +#. module: sale +#: model:mail.message.subtype,description:sale.mt_order_sent +#: model:mail.message.subtype,name:sale.mt_order_sent +msgid "Quotation send" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Search Uninvoiced Lines" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_account_config_settings +msgid "account.config.settings" +msgstr "" + +#. module: sale +#: sql_constraint:sale.order:0 +msgid "Order Reference must be unique per Company!" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_order_line_tree2 +msgid "" +"

\n" +" Here is a list of each sales order line to be invoiced. You " +"can\n" +" invoice sales orders partially, by lines of sales order. You " +"do\n" +" not need this list if you invoice from the delivery orders " +"or\n" +" if you invoice sales totally.\n" +"

\n" +" " +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Shipping address :" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:505 +#, python-format +msgid "" +"You cannot group sales having different currencies for the same partner." +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +msgid "Invoice Sales Order" +msgstr "" + +#. module: sale +#: help:sale.order,invoice_quantity:0 +msgid "" +"The sales order will automatically create the invoice proposition (draft " +"invoice). You have to choose " +"if you want your invoice based on ordered " +msgstr "" + +#. module: sale +#: field:sale.config.settings,module_account_analytic_analysis:0 +msgid "Use contracts management" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:952 +#, python-format +msgid "" +"Cannot find a pricelist line matching this product and quantity.\n" +"You have to change either the product, the quantity or the pricelist." +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_advance_payment_inv +msgid "Sales Advance Payment Invoice" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_invoice0 +#: model:process.transition.action,name:sale.process_transition_action_createinvoice0 +#: view:sale.advance.payment.inv:0 +#: view:sale.order:0 +#: field:sale.order,order_policy:0 +#: view:sale.order.line:0 +msgid "Create Invoice" +msgstr "" + +#. module: sale +#: help:sale.order,amount_untaxed:0 +msgid "The amount without tax." +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Order reference" +msgstr "" + +#. module: sale +#: help:sale.order,invoiced:0 +msgid "It indicates that an invoice has been paid." +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order.line,price_unit:0 +msgid "Unit Price" +msgstr "" + +#. module: sale +#: selection:sale.advance.payment.inv,advance_payment_method:0 +msgid "Percentage" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Other Information" +msgstr "" + +#. module: sale +#: model:email.template,body_html:sale.email_template_edi_sale +msgid "" +"\n" +"
\n" +"\n" +"

Hello ${object.partner_id.name},

\n" +" \n" +"

Here is your ${object.state in ('draft', 'sent') and 'quotation' or " +"'order confirmation'} from ${object.company_id.name}:

\n" +"\n" +"

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

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

It is also possible to directly pay with Paypal:

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

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

\n" +"

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

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

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

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

\n" +"
\n" +"
\n" +" " +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +#: field:sale.order.line,product_id:0 +#: view:sale.report:0 +#: field:sale.report,product_id:0 +msgid "Product" +msgstr "" + +#. module: sale +#: help:sale.order,amount_total:0 +msgid "The total amount." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Confirm Sale" +msgstr "" + +#. module: sale +#: code:addons/sale/wizard/sale_make_invoice_advance.py:96 +#, python-format +msgid "There is no income account defined for this product: \"%s\" (id:%d)." +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "May" +msgstr "" + +#. module: sale +#: model:email.template,subject:sale.email_template_edi_sale +msgid "" +"${object.company_id.name} ${object.state in ('draft', 'sent') and " +"'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Price" +msgstr "" + +#. module: sale +#: help:sale.order,order_policy:0 +msgid "" +"On demand: A draft invoice can be created from the sales order when needed. " +"\n" +"On delivery order: A draft invoice can be created from the delivery order " +"when the products have been delivered. \n" +"Before delivery: A draft invoice is created from the sales order and must be " +"paid before the products can be delivered." +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_order_report_all +msgid "" +"This report performs analysis on your quotations and sales orders. Analysis " +"check your sales revenues and sort it by different group criteria (salesman, " +"partner, product, etc.) Use this report to perform analysis on sales not " +"having invoiced yet. If you want to analyse your turnover, you should use " +"the Invoice Analysis report in the Accounting application." +msgstr "" + +#. module: sale +#: model:ir.actions.report.xml,name:sale.report_sale_order +msgid "Quotation / Order" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Tel. :" +msgstr "" + +#. module: sale +#: view:sale.make.invoice:0 +msgid "Do you really want to create the invoice(s)?" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_quotations +msgid "" +"

\n" +" Click to create a quotation, the first step of a new sale.\n" +"

\n" +" OpenERP will help you handle efficiently the complete sale " +"flow:\n" +" from the quotation to the sales order, the\n" +" delivery, the invoicing and the payment collection.\n" +"

\n" +" The social feature helps you organize discussions on each " +"sales\n" +" order, and allow your customers to keep track of the " +"evolution\n" +" of the sales order.\n" +"

\n" +" " +msgstr "" + +#. module: sale +#: view:res.partner:0 +msgid "sale.group_delivery_invoice_address" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:781 +#, python-format +msgid "" +"There is no Fiscal Position defined or Income category account defined for " +"default properties of Product categories." +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_invoice0 +msgid "To be reviewed by the accountant." +msgstr "" + +#. module: sale +#: model:res.groups,name:sale.group_mrp_properties +msgid "Properties on lines" +msgstr "" + +#. module: sale +#: selection:sale.order,state:0 +msgid "Sale to Invoice" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Order Number" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: field:sale.order,partner_id:0 +#: field:sale.order.line,order_partner_id:0 +msgid "Customer" +msgstr "" + +#. module: sale +#: model:product.template,name:sale.advance_product_0_product_template +msgid "Advance" +msgstr "Adelanto" + +#. module: sale +#: selection:sale.report,month:0 +msgid "February" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.action_orders +msgid "" +"

\n" +" Click to create a quotation that can be converted into a " +"sales\n" +" order.\n" +"

\n" +" OpenERP will help you efficiently handle the complete sales " +"flow:\n" +" quotation, sales order, delivery, invoicing and payment.\n" +"

\n" +" " +msgstr "" + +#. module: sale +#: field:sale.order,invoice_quantity:0 +msgid "Invoice on" +msgstr "" + +#. module: sale +#: selection:sale.advance.payment.inv,advance_payment_method:0 +msgid "Fixed price (deposit)" +msgstr "" + +#. module: sale +#: model:ir.model,name:sale.model_sale_config_settings +msgid "sale.config.settings" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "September" +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Date Ordered" +msgstr "" + +#. module: sale +#: selection:sale.order,order_policy:0 +msgid "Before Delivery" +msgstr "" + +#. module: sale +#: field:sale.order.line,product_uos:0 +msgid "Product UoS" +msgstr "" + +#. module: sale +#: model:process.node,note:sale.process_node_quotation0 +msgid "Draft state of sales order" +msgstr "" + +#. module: sale +#: field:sale.order,origin:0 +msgid "Source Document" +msgstr "" + +#. module: sale +#: selection:sale.report,month:0 +msgid "April" +msgstr "" + +#. module: sale +#: selection:sale.report,state:0 +msgid "Manual In Progress" +msgstr "" + +#. module: sale +#: 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 "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_tree +msgid "Old Quotations" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,help:sale.act_res_partner_2_sale_order +msgid "" +"

\n" +" Click to create a quotation or sales order for this " +"customer.\n" +"

\n" +" OpenERP will help you efficiently handle the complete sale " +"flow:\n" +" quotation, sales order, delivery, invoicing and\n" +" payment.\n" +"

\n" +" The social feature helps you organize discussions on each " +"sales\n" +" order, and allow your customer to keep track of the " +"evolution\n" +" of the sales order.\n" +"

\n" +" " +msgstr "" + +#. module: sale +#: field:sale.order,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: sale +#: help:sale.order,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: sale +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "Search Sales Order" +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order.line,name:0 +msgid "Description" +msgstr "" + +#. module: sale +#: view:sale.config.settings:0 +msgid "" +"Use contract to be able to manage your services with\n" +" multiple invoicing as part of the same contract " +"with\n" +" your customer." +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Ordered month of the sales order" +msgstr "" + +#. module: sale +#: model:process.transition,name:sale.process_transition_saleinvoice0 +msgid "From a sales order" +msgstr "" + +#. module: sale +#: view:sale.order.line:0 +msgid "Confirmed sales order lines, not yet delivered" +msgstr "" + +#. module: sale +#: model:process.transition,note:sale.process_transition_saleinvoice0 +msgid "" +"Depending on the Invoicing control of the sales order, the invoice can be " +"based on delivered or on ordered quantities. Thus, a sales order can " +"generates an invoice or a delivery order as soon as it is confirmed by the " +"salesman." +msgstr "" +"En función del control de facturación de los pedidos de venta, la factura " +"puede estar basada en las cantidades entregadas o pedidas. Por lo tanto, un " +"pedido de venta puede generar una factura o una guía tan pronto como sea " +"confirmado por el comercial." + +#. module: sale +#: view:sale.order:0 +msgid "UoS" +msgstr "" + +#. module: sale +#: selection:sale.advance.payment.inv,advance_payment_method:0 +msgid "Some order lines" +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:983 +#, python-format +msgid "Cannot delete a sales order line which is in state '%s'." +msgstr "" + +#. module: sale +#: report:sale.order:0 +#: field:sale.order,payment_term:0 +msgid "Payment Term" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Sales Order ready to be invoiced" +msgstr "" + +#. module: sale +#: field:sale.config.settings,group_invoice_so_lines:0 +msgid "Generate invoices based on the sales order lines" +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +#: view:sale.make.invoice:0 +#: view:sale.order.line.make.invoice:0 +msgid "or" +msgstr "" + +#. module: sale +#: model:ir.actions.act_window,name:sale.action_order_line_product_tree +#: view:sale.order:0 +#: view:sale.order.line:0 +msgid "Sales Order Lines" +msgstr "" + +#. module: sale +#: help:sale.order,pricelist_id:0 +msgid "Pricelist for current sales order." +msgstr "" + +#. module: sale +#: report:sale.order:0 +msgid "Quotation N°" +msgstr "" + +#. module: sale +#: model:res.groups,name:sale.group_discount_per_so_line +msgid "Discount on lines" +msgstr "" + +#. module: sale +#: field:sale.order,client_order_ref:0 +msgid "Customer Reference" +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Picked" +msgstr "" + +#. module: sale +#: help:sale.config.settings,module_sale_margin:0 +msgid "" +"This adds the 'Margin' on sales order.\n" +" This gives the profitability by calculating the difference " +"between the Unit Price and Cost Price.\n" +" This installs the module sale_margin." +msgstr "" + +#. module: sale +#: code:addons/sale/sale.py:865 +#, python-format +msgid "" +"Before choosing a product,\n" +" select a customer in the sales form." +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "Total Tax Included" +msgstr "" + +#. module: sale +#: view:sale.order:0 +msgid "New Copy of Quotation" +msgstr "" + +#. module: sale +#: view:sale.advance.payment.inv:0 +msgid "" +"Select how you want to invoice this order. This\n" +" will create a draft invoice that can be modified\n" +" before validation." +msgstr "" + +#. module: sale +#: view:sale.report:0 +msgid "Ordered date of the sales order" +msgstr "" diff --git a/addons/sale/i18n/hu.po b/addons/sale/i18n/hu.po index 57a20d71ce8..9bf47df4d39 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-07-09 07:56+0000\n" +"PO-Revision-Date: 2013-12-09 15:46+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 05:40+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" #. module: sale #: model:res.groups,name:sale.group_analytic_accounting @@ -116,7 +116,7 @@ msgstr "Beszerzési módszer" #. module: sale #: help:sale.order,date_confirm:0 msgid "Date on which sales order is confirmed." -msgstr "Az értékesítési megbízás megerősítésének dátuma." +msgstr "A vevői megrendelés megerősítésének dátuma." #. module: sale #: field:account.config.settings,module_sale_analytic_plans:0 @@ -132,7 +132,8 @@ msgstr "Március" #: 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." +msgstr "" +"Először vonja vissza a vevői megrendeléshez kötött összes számla mellékletet." #. module: sale #: view:sale.order:0 @@ -254,12 +255,13 @@ msgstr "Az előleg mennyiség értékének pozitívnak kell lennie" #. module: sale #: help:sale.config.settings,group_discount_per_so_line:0 msgid "Allows you to apply some discount per sales order line." -msgstr "Lehetővé teszi a megrendelés soraihoz árengedmény alkalmazását" +msgstr "" +"Lehetővé teszi a megrendelés egyes soraihoz árengedmény alkalmazását." #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines that are in 'done' state" -msgstr "'Elvégzett' állapotú megrendelési sorok" +msgstr "'Elvégzett' állapotú vevői megrendelési sorok" #. module: sale #: selection:sale.order.line,type:0 @@ -349,7 +351,8 @@ msgstr "Érvénytelenített" #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines related to a Sales Order of mine" -msgstr "Megrendelés sorok melyek összefüggenk az én megrendeléseimmel" +msgstr "" +"Megrendelés sorok melyek összefüggenek az én vásárlói megrendeléseimmel" #. module: sale #: selection:sale.order,state:0 @@ -398,7 +401,7 @@ msgstr "Számlázási cím" #. module: sale #: help:sale.order,create_date:0 msgid "Date on which sales order is created." -msgstr "Az értékesítési megbízás létrehozásának dátuma." +msgstr "Vásárlói megrendelés létrehozásának dátuma." #. module: sale #: view:res.partner:0 @@ -451,7 +454,7 @@ msgid "" "The 'Waiting Schedule' status is set when the invoice is confirmed " " but waiting for the scheduler to run on the order date." msgstr "" -"Az árajánlatkérés vagy a megrendelés állapotát adja. \n" +"Az árajánlatkérés vagy a vásárlói megrendelés állapotát adja. \n" "A kizárás állapot automatikusan beállított egy visszavonás művelet " "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" @@ -482,7 +485,8 @@ 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 a megrendelési sorok listájának kijelzésekor." +"A vásárlói megrendelés sorrendet adja ha a megrendelési sorok listáját jelzi " +"ki." #. module: sale #: view:sale.report:0 @@ -501,8 +505,8 @@ msgstr "Fax:" msgid "" "In order to delete a confirmed sales order, you must cancel it before !" msgstr "" -"Ahhoz, hogy törölni tudjon egy megerősített megrendelést, először vissza " -"kell vonnia azt !" +"Ahhoz, hogy törölni tudjon egy megerősített vsárlói megrendelést, először " +"vissza kell vonnia azt !" #. module: sale #: view:sale.order:0 @@ -538,12 +542,12 @@ msgstr "Vevői megrendelés" #. module: sale #: model:res.groups,name:sale.group_invoice_so_lines msgid "Enable Invoicing Sales order lines" -msgstr "Megrendelés sorai számlázásának engedélyezése" +msgstr "Vásárlói 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 "Vevői megrendelés sor" +msgstr "Megrendelési tétel" #. module: sale #: field:sale.advance.payment.inv,amount:0 @@ -573,7 +577,7 @@ msgstr "Egy alkalmazottnak különböző funkciója lehet egy szerződésen bel #. module: sale #: selection:sale.advance.payment.inv,advance_payment_method:0 msgid "Invoice the whole sales order" -msgstr "Számlázza ki a teljes megrendelést" +msgstr "Számlázza ki a teljes vásárlói megrendelést" #. module: sale #: field:sale.shop,payment_default_id:0 @@ -588,14 +592,15 @@ 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 vevői megrendelési sort visszavonni amelyik már számlázva volt." +"Nem tud olyan vevői megrendelési tételt visszavonni amelyik már számlázva " +"volt." #. module: sale #: view:account.invoice.report:0 @@ -623,7 +628,7 @@ msgstr "Különböző mértékegységek használatának engedélyezése" #. module: sale #: model:mail.message.subtype,name:sale.mt_order_confirmed msgid "Sales Order Confirmed" -msgstr "Megrendelés visszaigazolva" +msgstr "Vásárlói megrendelés visszaigazolva" #. module: sale #: view:sale.order:0 @@ -644,7 +649,7 @@ msgstr "Megrendelés száma" #: view:sale.order:0 #: field:sale.order,order_line:0 msgid "Order Lines" -msgstr "Megrendelés sorok" +msgstr "Megrendelési tételek" #. module: sale #: report:sale.order:0 @@ -661,7 +666,7 @@ msgstr "" #. module: sale #: field:sale.order.line,invoice_lines:0 msgid "Invoice Lines" -msgstr "Számlasorok" +msgstr "Számla tételek" #. module: sale #: view:sale.report:0 @@ -674,7 +679,7 @@ msgstr "Összérték" msgid "Allows you to specify an analytic account on sales orders." msgstr "" "Lehetővé teszi az analitikus/elemző könyvelés gyűjtőkód meghatározását a " -"megrendeléseken." +"vevői megrendeléseken." #. module: sale #: help:sale.config.settings,module_sale_journal:0 @@ -742,7 +747,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 megrendelés számlázási címe." +msgstr "Az aktuális vevői megrendelés számlázási címe." #. module: sale #: selection:sale.order,invoice_quantity:0 @@ -774,7 +779,7 @@ msgstr "Összesen :" #. module: sale #: view:sale.order.line:0 msgid "Sales Order Lines ready to be invoiced" -msgstr "Megrendelési sorok készen állnak számlázásra" +msgstr "Megrendelési tételek készen állnak számlázásra" #. module: sale #: view:sale.report:0 @@ -854,8 +859,8 @@ msgid "" "After clicking 'Show Lines to Invoice', select lines to invoice and create " "the invoice from the 'More' dropdown menu." msgstr "" -"A 'Mutasd a számlázandó sorokat' kattintás után, válasszon ki számlázandó " -"sorokat és hozza létre a számlát a 'Tovább' legördülő menüből." +"A 'Mutasd a számlázandó tételeket' kattintás után, válasszon ki számlázandó " +"tételeket és hozza létre a számlát a 'Tovább' legördülő menüből." #. module: sale #: view:sale.order:0 @@ -886,7 +891,7 @@ msgstr "Megrendelés dátuma" #. module: sale #: view:sale.order:0 msgid "Sales Order done" -msgstr "Megrendelés elvégezve" +msgstr "Vevői megrendelés elvégezve" #. module: sale #: code:addons/sale/sale.py:364 @@ -927,7 +932,7 @@ msgstr "Számla létrehozása és megtekintése" #. module: sale #: view:sale.order.line:0 msgid "Sales order lines done" -msgstr "Megrendelési sorok elvégezve" +msgstr "Vevői megrendelési tételek elvégezve" #. module: sale #: field:sale.make.invoice,grouped:0 @@ -964,10 +969,10 @@ msgid "" "1.The state of this sales order line is either \"draft\" or \"cancel\"!\n" "2.The Sales Order Line is Invoiced!" msgstr "" -"Nem készíthet számlát ehhez a megrendelés sorhoz, az alábbi okok egyikének " -"következtében:\n" -"1. A megrendelés sorának állapota: \"Tervezet\" vagy \"Visszavont\".\n" -"2. A megrendelési sor már kiszámlázásra került." +"Nem készíthet számlát ehhez a vásárlói megrendelés tételhez, az alábbi okok " +"egyike miatt:\n" +"1. A vevői megrendelés tételének állapota: \"Tervezet\" vagy \"Mégsem\".\n" +"2. A vevői megrendelési tétel már kiszámlázásra került." #. module: sale #: view:sale.order.line.make.invoice:0 @@ -1046,7 +1051,7 @@ msgstr "Üzlet neve" #. module: sale #: view:sale.order:0 msgid "My Sales Orders" -msgstr "Az én megrendeléseim" +msgstr "Az én vevői megrendeléseim" #. module: sale #: report:sale.order:0 @@ -1071,8 +1076,8 @@ msgid "" "To allow your salesman to make invoices for sales order lines using the menu " "'Lines to Invoice'." msgstr "" -"Lehetővé teszi az értékesítők részére a megrendelések soraira történő " -"számlázást a 'Számlázandó sorok' menü használatával" +"Lehetővé teszi az értékesítők részére a megrendelések tételire történő " +"számlázást a 'Számlázandó tételek' menü használatával." #. module: sale #: model:ir.actions.client,name:sale.action_client_sale_menu @@ -1083,7 +1088,7 @@ msgstr "Értékesítési menü megnyitása" #: 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" +msgstr "Nem tud megerősíteni tétel nélküli vevői megrendelést" #. module: sale #: selection:sale.report,state:0 @@ -1122,7 +1127,7 @@ msgstr "Ennyi előleg %s %%" #. module: sale #: model:ir.model,name:sale.model_sale_order_line_make_invoice msgid "Sale OrderLine Make_invoice" -msgstr "Számla létrehozása az értékesítési megbízási sorból" +msgstr "Számla létrehozása a vásárlói megrendelésből" #. module: sale #: selection:sale.order.line,state:0 @@ -1213,11 +1218,12 @@ msgstr "" "

\n" " Kattintson új értékesítési hely meghatározáshoz.\n" "

\n" -" Mindegyik árajánlatot vagy megrendelést össze kell kötni egy " -"értékesítési helyhez. Az\n" -" értékesítési hely meghatároz egy raktárépületet ahonnan a " +" Mindegyik árajánlatot vagy vevői megrendelést össze kell " +"kötni egy értékesítési helyhez. Az\n" +" értékesítési hely meghatároz egy raktárhelyet ahonnan a " "termék\n" -" szállítva lesz minden egyes ide vonatkozó értékesítéshez.\n" +" kiszállításra kerül minden egyes ide vonatkozó " +"értékesítéshez.\n" "

\n" " " @@ -1244,13 +1250,13 @@ msgid "" "Sales Order Lines that are confirmed, done or in exception state and haven't " "yet been invoiced" msgstr "" -"Megrendelési sorok, melyek megerősítettek, elvégzettek vagy kifogásolt " -"állapotú és még nincs számlázva" +"Vásárlói megrendelési tételek, melyek megerősítettek, elvégzettek vagy " +"kifogásolt állapotúak és még nincs számlázva" #. module: sale #: model:ir.model,name:sale.model_sale_report msgid "Sales Orders Statistics" -msgstr "Értékesítési megbízási statisztikák" +msgstr "Vevői megrendelési statisztikák" #. module: sale #: field:sale.order,date_order:0 @@ -1307,10 +1313,10 @@ msgid "" "is 'Shipping and Manual in Progress'. The invoice is created automatically " "if the shipping policy is 'Payment before Delivery'." msgstr "" -"Az értékesítő manuálisan létrehoz egy számlát, hogy ha az értékesítési " -"megbízás szállítási szabálya: \"Szállítás és manuális vezérléssel " -"folyamatban\". A számla automatikusan létrejön , ha a szállítási szabály: " -"\"Fizetés kiszállítás előtt\"." +"Az értékesítő kézzel hoz létre egy számlát, hogy ha a vevői megrendelés " +"szállítási szabálya: \"Szállítás és manuális vezérléssel folyamatban\". A " +"számla automatikusan létrejön , ha a szállítási szabály: \"Fizetés " +"kiszállítás előtt\"." #. module: sale #: model:ir.model,name:sale.model_sale_shop @@ -1348,12 +1354,12 @@ msgstr "Január" #. module: sale #: field:sale.config.settings,group_discount_per_so_line:0 msgid "Allow setting a discount on the sales order lines" -msgstr "Engedélyezi a megrendelés soraira az árengedmény beállítását" +msgstr "Engedélyezi a vevői megrendelés tételeire az árengedmény beállítását" #. module: sale #: model:ir.actions.act_window,name:sale.action_orders_in_progress msgid "Sales Order in Progress" -msgstr "Értékesítési megbízás folyamatban" +msgstr "Folyamatban lévő vevői megrendelés" #. module: sale #: view:sale.order.line.make.invoice:0 @@ -1363,10 +1369,10 @@ msgid "" " or a fixed price (for advances) directly from the sales " "order form if you prefer." msgstr "" -"Ezen a megrendelésen minden sor tétel számlázva lesz. Lehetősége van a " -"megrendelés egy bizonyos százalékának számlázására\n" -" vagy fix ár (az előlegekre) direkt a megrendelés " -"űrlapról ha kívánja." +"Ezen a vásárlói megrendelésen minden tétel sor számlázva lesz. Lehetősége " +"van a megrendelés egy bizonyos százalékának számlázására\n" +" vagy fix ár (az előlegekre), ha kívánja direkt a " +"megrendelés űrlapról." #. module: sale #: help:sale.config.settings,module_warning:0 @@ -1377,7 +1383,8 @@ msgid "" " Supplier: don't forget to ask for an express delivery." msgstr "" "Lehetővé teszi a termék értesítéseket, melyeket kapcsolhatjuk, ha egy " -"felhasználó egy megadott terméket értékesíteni akar vagy egy vevőre.\n" +"felhasználó egy megadott terméket vagy egy megadott vevőre értékesíteni " +"szeretne.\n" "Például: Termék: Ezt a terméket érvénytelenítsd, nem lehet 5-nél többet " "vásárolni.\n" " Beszállító: Ne felejts el expressz szállításról érdeklődni." @@ -1390,7 +1397,7 @@ msgstr "Paypal Url" #. module: sale #: help:sale.order,project_id:0 msgid "The analytic account related to a sales order." -msgstr "Az értékesítési megbízáshoz kapcsolódó analitikus/elemző számla." +msgstr "A vevői megrendeléshez kapcsolódó analitikus/elemző számla." #. module: sale #: view:sale.order:0 @@ -1431,14 +1438,14 @@ msgstr "" #: help:sale.order,origin:0 msgid "Reference of the document that generated this sales order request." msgstr "" -"A dokumentum hivatkozása, amely létrehozta ezt az értékesítési megbízási " +"A dokumentum hivatkozása, amely létrehozta ezt a vásárlói megrendelési " "igényt." #. module: sale #: code:addons/sale/sale.py:955 #, python-format msgid "No valid pricelist line found ! :" -msgstr "Nem alálható érvényes árlista sor ! :" +msgstr "Nem található érvényes árlista sor ! :" #. module: sale #: code:addons/sale/wizard/sale_make_invoice_advance.py:113 @@ -1474,7 +1481,7 @@ msgstr "Hiba figyelmen kívül hagyása" #. module: sale #: help:sale.order,partner_shipping_id:0 msgid "Delivery address for current sales order." -msgstr "Szállítási cím a jelenlegi megrendeléshez." +msgstr "Szállítási cím a jelenlegi vásárlói megrendeléshez." #. module: sale #: field:sale.config.settings,module_sale_margin:0 @@ -1488,9 +1495,9 @@ msgid "" "The same sales order may have been invoiced in several times (by line for " "example)." msgstr "" -"Ez egy olyan számlalista, amely ehhez az értékesítési megbízáshoz jött " -"létre. Ugyanaz az értékesítési megbízás több alkalommal is számlázásra " -"kerülhetett (például sorok alapján)." +"Ez egy olyan számlalista, amely ehhez a vevői megrendeléshez jött létre. " +"Ugyanaz a vevői megrendelés több alkalommal is számlázásra kerülhetett " +"(például tételek alapján)." #. module: sale #: report:sale.order:0 @@ -1500,7 +1507,7 @@ msgstr "Az Ön hivatkozása" #. module: sale #: view:sale.advance.payment.inv:0 msgid "Show Lines to Invoice" -msgstr "Mutassa a számlázandó sorokat" +msgstr "Mutassa a számlázandó tételeket" #. module: sale #: field:sale.report,date:0 @@ -1553,7 +1560,7 @@ msgid "" "prices of existing order lines will not be updated." msgstr "" "Ha ennek a megrendelésnek az árlistáját megváltoztatja (esetleg a " -"pénznemet), a meglévő megrendelés sorai nem lesznek frissítve." +"pénznemet), a meglévő megrendelés tételei nem lesznek frissítve." #. module: sale #: view:sale.order.line:0 @@ -1602,7 +1609,7 @@ msgstr "Számla" #. module: sale #: view:sale.order.line:0 msgid "My Sales Order Lines" -msgstr "Az én megrendeléseim sorai" +msgstr "Az én vevői megrendekléseim tételei" #. module: sale #: model:process.transition.action,name:sale.process_transition_action_cancel0 @@ -1626,7 +1633,7 @@ msgstr "Nincs árlista ! : " #. module: sale #: view:sale.order:0 msgid "Sales Order " -msgstr "Megrendelés " +msgstr "Vásárlói megrendelés " #. module: sale #: model:mail.message.subtype,description:sale.mt_order_sent @@ -1637,7 +1644,7 @@ msgstr "Árajánlat küldés" #. module: sale #: view:sale.order.line:0 msgid "Search Uninvoiced Lines" -msgstr "Számlázatlan sorok keresése" +msgstr "Számlázatlan tételek keresése" #. module: sale #: model:ir.model,name:sale.model_account_config_settings @@ -1664,12 +1671,15 @@ msgid "" " " msgstr "" "

\n" -" Itt van a lista a már kiszámlázott megrendelési sorokról. " -"Tud\n" -" számlázni megrendelési részt, a megrendelés soraival. Nincs\n" +" Ez itt a lista a már kiszámlázott vevői megrendelési " +"tételekről. Tud\n" +" számlázni megrendelési részt, a megrendelés tételeivel. " +"Nincs\n" " szüksége erre a listára, ha kiszállítási Kiszolgáltatási " -"jegyből\n" -" számláz vagy a teljes értékesítést egyszerre számlázza.\n" +"jegyből/\n" +" Szállító levélből számláz vagy a teljes értékesítést " +"egyszerre\n" +" számlázza.\n" "

\n" " " @@ -1683,14 +1693,12 @@ msgstr "Szállítási cím:" #, python-format msgid "" "You cannot group sales having different currencies for the same partner." -msgstr "" -"Nem csoportosíthat értékesítést, ha ugyan ahhoz a partnerhez különböző " -"devizák vannak." +msgstr "Nem csoportosíthat különböző devizákon értékesítést egy partnerhez." #. module: sale #: view:sale.advance.payment.inv:0 msgid "Invoice Sales Order" -msgstr "Megrendelés számlázás" +msgstr "Vevői megrendelés számlázás" #. module: sale #: help:sale.order,invoice_quantity:0 @@ -1700,8 +1708,8 @@ msgid "" "if you want your invoice based on ordered " msgstr "" "A megrendelés automatikusan létre lesz hozva a díjbekérő / előleg (Számla " -"terv) alapján. Választhatja, ha " -"akarja a számlázást a megrendelés alapján " +"terv) alapján. Ki kell " +"választania, ha a számlázást a megrendelés alapján kívánja " #. module: sale #: field:sale.config.settings,module_account_analytic_analysis:0 @@ -1715,7 +1723,7 @@ msgid "" "Cannot find a pricelist line matching this product and quantity.\n" "You have to change either the product, the quantity or the pricelist." msgstr "" -"Nem található ehhez a termékhez és mennyiséghez hasonló árlista sor.\n" +"Nem található ehhez a termékhez és mennyiséghez hasonló árlista tétel.\n" "Változtassa meg vagy a terméket, a mennyiséget vagy az árlistát." #. module: sale @@ -1858,30 +1866,31 @@ msgstr "" "\n" "

Tisztlet${object.partner_id.name},

\n" " \n" -"

Ez itt ${object.state in ('draft', 'sent') and 'quotation' or 'order " -"confirmation'} ${object.company_id.name} vállalattól:

\n" +"

Itt látható az Ön ${object.state in ('draft', 'sent') and " +"'árajánlata' or 'megrendelés visszaigazolása'} ${object.company_id.name} " +"vállalattól:

\n" "\n" "

\n" -"   REFERENCES
\n" -"   Order number: ${object.name}
\n" -"   Order total: ${object.amount_total} " +"   HIVATKOZÁSOK
\n" +"   Szám: ${object.name}
\n" +"   Összeg: ${object.amount_total} " "${object.pricelist_id.currency_id.name}
\n" -"   Order date: ${object.date_order}
\n" +"   Dátum: ${object.date_order}
\n" " % if object.origin:\n" -"   Order reference: ${object.origin}
\n" +"   Referencia rendelés: ${object.origin}
\n" " % endif\n" " % if object.client_order_ref:\n" -"   Your reference: ${object.client_order_ref}
\n" +"   Ön hivatkozási adatai: ${object.client_order_ref}
\n" " % endif\n" " % if object.user_id:\n" -"   Your contact: ${object.user_id.name}\n" +"   Kapcsolattartója: ${object.user_id.name}\n" " % endif\n" "

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

It is also possible to directly pay with Paypal:

\n" +"

Lehetséges közvetlenül Paypal fizetés:

\n" " \n" " \n" @@ -1889,8 +1898,9 @@ msgstr "" " % endif\n" "\n" "
\n" -"

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

\n" -"

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

\n" +"

További felmerülő kérdésekben állunk szíves rendelkezésükre.

\n" +"

Köszönjük a vásárlását és további szép napot kíván a " +"${object.company_id.name or 'us'}!

\n" "
\n" "
\n" "

\n" -" OpenERP segít a hatékony értékesítési folyamat hatékony " +" OpenERP segít az értékesítési folyamat hatékony " "kezelésében:\n" " a megrendelés visszaigazolásában, a szállításban,\n" " a számlázásban és az áru ellenértékének beszedésében.\n" "

\n" -" A társadalmi jellemzők segítenek az értékesítések " +" A társadalmi jellemzők segítenek a vevői megrendelések " "megbeszélésének szervezésében,\n" -" és lehetővé teszik a megrendeléseken a vásárlói fejlődésének " -"követését.\n" +" és lehetővé teszik a megrendeléseken a vásárlói " +"megrendelések fejlődésénak követését.\n" "

\n" " " @@ -2087,7 +2097,7 @@ msgstr "Ellenőrizendő a könyvelő által." #. module: sale #: model:res.groups,name:sale.group_mrp_properties msgid "Properties on lines" -msgstr "A sorok tulajdonságai" +msgstr "Tételsorok tulajdonságai" #. module: sale #: selection:sale.order,state:0 @@ -2131,7 +2141,7 @@ msgid "" " " msgstr "" "

\n" -" Kattintson megrendelésre átalakítható árajánlat " +" Kattintson vásárlói megrendelésre átalakítható árajánlat " "létrehozásához.\n" "

\n" " OpenERP segít a hatékony értékesítési folyamat hatékony " @@ -2230,10 +2240,10 @@ msgid "" " " msgstr "" "

\n" -" Kattintson ehhez a vevőhöz tartozó árajánlat vagy " +" Kattintson ehhez a vevőhöz tartozó árajánlat vagy vevői " "megrendelés létrehozásához.\n" "

\n" -" OpenERP segít a hatékony értékesítési folyamat hatékony " +" OpenERP segít az értékesítési folyamat hatékony " "kezelésében:\n" " árajánlat, megrendelés, szállítás,számlázás és " "kiegyenlítés.\n" @@ -2242,9 +2252,6 @@ msgstr "" "megbeszélésének szervezésében,\n" " és lehetővé teszik a megrendeléseken a vásárlói fejlődésének " "követését.\n" -" order, and allow your customer to keep track of the " -"evolution\n" -" of the sales order.\n" "

\n" " " @@ -2262,7 +2269,7 @@ msgstr "Üzenetek és kommunikáció történet" #: view:sale.order:0 #: view:sale.order.line:0 msgid "Search Sales Order" -msgstr "Értékesítési megbízás keresése" +msgstr "Vásárlói megrendelés keresése" #. module: sale #: report:sale.order:0 @@ -2290,12 +2297,13 @@ msgstr "A megrendelés megrendelési hónapja" #. module: sale #: model:process.transition,name:sale.process_transition_saleinvoice0 msgid "From a sales order" -msgstr "Értékesítési megbízásból" +msgstr "Vevői megrendelésből" #. module: sale #: view:sale.order.line:0 msgid "Confirmed sales order lines, not yet delivered" -msgstr "Megerősített megrendelési sorok, amik még nem kiszálítottak" +msgstr "" +"Megerősített vásárlói megrendelési tételek, melyeket még nem szállítottak ki" #. module: sale #: model:process.transition,note:sale.process_transition_saleinvoice0 @@ -2305,10 +2313,10 @@ msgid "" "generates an invoice or a delivery order as soon as it is confirmed by the " "salesman." msgstr "" -"Az értékesítési megbízás számlázási beállításaitól függően a számla " -"alapulhat a kiszállítási vagy a megrendelési mennyiségen. A rendszer az " -"értékesítési megbízásból létrehozhat egy számlát vagy egy kiszállítási " -"megbízást, amint az értékesítő megerősíti azt." +"A vevői megrendelés számlázási beállításaitól függően a számla alapulhat a " +"kiszállítási vagy a megrendelési mennyiségen. A rendszer a vevői " +"megrendelésből létrehozhat egy számlát vagy egy kiszállítási megbízást, " +"amint az értékesítő megerősíti azt." #. module: sale #: view:sale.order:0 @@ -2318,14 +2326,15 @@ msgstr "EE" #. module: sale #: selection:sale.advance.payment.inv,advance_payment_method:0 msgid "Some order lines" -msgstr "Néhány megrendelés sor" +msgstr "Néhány megrendelési tétel" #. module: sale #: code:addons/sale/sale.py:983 #, python-format msgid "Cannot delete a sales order line which is in state '%s'." msgstr "" -"Nem törölhető az a megrendelési sor amelyik ebben az állapotban van '%s'." +"Nem törölhető az a megrendelési téetelsor amelyik ebben az állapotban van " +"'%s'." #. module: sale #: report:sale.order:0 @@ -2341,7 +2350,7 @@ msgstr "Számlázásra kész megrendelés" #. module: sale #: field:sale.config.settings,group_invoice_so_lines:0 msgid "Generate invoices based on the sales order lines" -msgstr "Számla létrehozása a megrendelési sorokra" +msgstr "Számla létrehozása a vevői megrendelési téetelsorokra" #. module: sale #: view:sale.advance.payment.inv:0 @@ -2355,12 +2364,12 @@ msgstr "vagy" #: view:sale.order:0 #: view:sale.order.line:0 msgid "Sales Order Lines" -msgstr "Értékesítési megbízási tételek" +msgstr "Vevői megrendelési tételek" #. module: sale #: help:sale.order,pricelist_id:0 msgid "Pricelist for current sales order." -msgstr "A jelenlegi értékesítési megbízás árlistája." +msgstr "A jelenlegi vevői megrendelés árlistája." #. module: sale #: report:sale.order:0 @@ -2370,7 +2379,7 @@ msgstr "Árajánlat száma" #. module: sale #: model:res.groups,name:sale.group_discount_per_so_line msgid "Discount on lines" -msgstr "Árengedmény a sorokon" +msgstr "Árengedmény a téetelsorokon" #. module: sale #: field:sale.order,client_order_ref:0 @@ -2390,7 +2399,7 @@ msgid "" "between the Unit Price and Cost Price.\n" " This installs the module sale_margin." msgstr "" -"Ez hozzáadja az 'Árrés' -t a megrendelésre.\n" +"Ez hozzáadja az 'Árrés' -t a vevői megrendelésre.\n" " Jövedelmezőséget ad az egységár és a költség ár " "különbözetéből.\n" " Ez a sale_margin modult telepíti." diff --git a/addons/sale/i18n/zh_CN.po b/addons/sale/i18n/zh_CN.po index 1b8baee2912..36a9402f4d4 100644 --- a/addons/sale/i18n/zh_CN.po +++ b/addons/sale/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: 2012-12-23 01:34+0000\n" -"Last-Translator: 盈通 ccdos \n" +"PO-Revision-Date: 2013-11-19 10:53+0000\n" +"Last-Translator: Guipo Hao \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-09-12 05:42+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-11-20 05:24+0000\n" +"X-Generator: Launchpad (build 16831)\n" #. module: sale #: help:sale.order,message_summary:0 @@ -333,6 +333,10 @@ msgid "" "available.\n" " This installs the module analytic_user_function." msgstr "" +"允许定义特定用户针对给定帐户的默认功能。\n" +" 该功能主要用于用户编辑时间计划。值被重赋并且域被自动填充。\n" +" 但是仍有可能改变这些值。\n" +" 这将安装模块 analytic_user_function。" #. module: sale #: selection:sale.order,state:0 @@ -690,6 +694,9 @@ msgid "" "user-wise as well as month wise.\n" " This installs the module account_analytic_analysis." msgstr "" +"用来改变帐号分析视图来给服务公司的经理显示重要数据。\n" +" 您也可以按照用户或月度浏览帐号分析汇总报告。\n" +" 这将安装模块 account_analytic_analysis。" #. module: sale #: field:sale.order,create_date:0 @@ -1765,6 +1772,90 @@ msgid "" "
\n" " " msgstr "" +"\n" +"
\n" +"\n" +"

Hello ${object.partner_id.name},

\n" +" \n" +"

此为您的 ${object.state in ('draft', 'sent') 和 'quotation' or 'order " +"confirmation'} from ${object.company_id.name}:

\n" +"\n" +"

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

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

还能直接由Paypal直接支付:

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

如有任何疑问,请直接接洽我们。

\n" +"

感谢选择 ${object.company_id.name or 'us'}!

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

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

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

\n" +"
\n" +"
\n" +" " #. module: sale #: view:sale.order.line:0 diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py index d5f07f863b9..88b4b14a36a 100644 --- a/addons/sale/report/sale_report.py +++ b/addons/sale/report/sale_report.py @@ -27,6 +27,7 @@ class sale_report(osv.osv): _description = "Sales Orders Statistics" _auto = False _rec_name = 'date' + _columns = { 'date': fields.date('Date Order', readonly=True), 'date_confirm': fields.date('Date Confirm', readonly=True), @@ -60,17 +61,14 @@ class sale_report(osv.osv): } _order = 'date desc' - def init(self, cr): - tools.drop_view_if_exists(cr, 'sale_report') - cr.execute(""" - create or replace view sale_report as ( - select - min(l.id) as id, + def _select(self): + select_str = """ + SELECT min(l.id) as id, l.product_id as product_id, t.uom_id as product_uom, sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty, sum(l.product_uom_qty * l.price_unit * (100.0-l.discount) / 100.0) as price_total, - 1 as nbr, + count(*) as nbr, s.date_order as date, s.date_confirm as date_confirm, to_char(s.date_order, 'YYYY') as year, @@ -84,16 +82,23 @@ class sale_report(osv.osv): t.categ_id as categ_id, s.pricelist_id as pricelist_id, s.project_id as analytic_account_id - from - sale_order s - join sale_order_line l on (s.id=l.order_id) + """ + return select_str + + def _from(self): + from_str = """ + sale_order_line l + join sale_order s on (l.order_id=s.id) left join product_product p on (l.product_id=p.id) left join product_template t on (p.product_tmpl_id=t.id) left join product_uom u on (u.id=l.product_uom) left join product_uom u2 on (u2.id=t.uom_id) - group by - l.product_id, - l.product_uom_qty, + """ + return from_str + + def _group_by(self): + group_by_str = """ + GROUP BY l.product_id, l.order_id, t.uom_id, t.categ_id, @@ -105,7 +110,16 @@ class sale_report(osv.osv): s.state, s.pricelist_id, s.project_id - ) - """) + """ + return group_by_str + + def init(self, cr): + # self._table = sale_report + tools.drop_view_if_exists(cr, self._table) + cr.execute("""CREATE or REPLACE VIEW %s as ( + %s + FROM ( %s ) + %s + )""" % (self._table, self._select(), self._from(), self._group_by())) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index 69e9cc5e119..28a6f83936a 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -47,10 +47,8 @@ - - - - + + diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py index 04958521ab5..70ef3371d41 100644 --- a/addons/sale/res_config.py +++ b/addons/sale/res_config.py @@ -87,12 +87,9 @@ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""), user = self.pool.get('res.users').browse(cr, uid, uid, context) res['time_unit'] = user.company_id.project_time_mode_id.id else: - try: - product = ir_model_data.get_object(cr, uid, 'product', 'product_product_consultant') + product = ir_model_data.get_object(cr, uid, 'product', 'product_product_consultant') + if product.exists(): res['time_unit'] = product.uom_id.id - except ValueError: - # keep default value in that case - _logger.warning("Product with xml_id 'product.product_product_consultant' not found") return res def _get_default_time_unit(self, cr, uid, context=None): @@ -108,10 +105,10 @@ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""), wizard = self.browse(cr, uid, ids)[0] if wizard.time_unit: - try: - product = ir_model_data.get_object(cr, uid, 'product', 'product_product_consultant') + product = ir_model_data.get_object(cr, uid, 'product', 'product_product_consultant') + if product.exists(): product.write({'uom_id': wizard.time_unit.id, 'uom_po_id': wizard.time_unit.id}) - except ValueError: + else: _logger.warning("Product with xml_id 'product.product_product_consultant' not found, UoMs not updated!") if wizard.module_project and wizard.time_unit: diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 11ca67b162a..14e5cae3ad6 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -26,7 +26,7 @@ from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP, float_compare import openerp.addons.decimal_precision as dp -from openerp import netsvc +from openerp import workflow class sale_order(osv.osv): _name = "sale.order" @@ -39,10 +39,6 @@ class sale_order(osv.osv): }, } - # Hook for website_sale to inherit (website_sale_delivery) - def _get_website_data(self, cr, uid, order, context): - return {} - def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} @@ -51,6 +47,7 @@ class sale_order(osv.osv): 'state': 'draft', 'invoice_ids': [], 'date_confirm': False, + 'client_order_ref': '', 'name': self.pool.get('ir.sequence').get(cr, uid, 'sale.order'), }) return super(sale_order, self).copy(cr, uid, id, default, context=context) @@ -61,6 +58,10 @@ class sale_order(osv.osv): val += c.get('amount', 0.0) return val + def _amount_all_wrapper(self, cr, uid, ids, field_name, arg, context=None): + """ Wrapper because of direct method passing as parameter for function fields """ + return self._amount_all(cr, uid, ids, field_name, arg, context=context) + def _amount_all(self, cr, uid, ids, field_name, arg, context=None): cur_obj = self.pool.get('res.currency') res = {} @@ -202,19 +203,19 @@ class sale_order(osv.osv): fnct_search=_invoiced_search, type='boolean', help="It indicates that sales order has at least one invoice."), 'note': fields.text('Terms and conditions'), - 'amount_untaxed': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Untaxed Amount', + 'amount_untaxed': fields.function(_amount_all_wrapper, digits_compute=dp.get_precision('Account'), string='Untaxed Amount', store={ 'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10), 'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10), }, multi='sums', help="The amount without tax.", track_visibility='always'), - 'amount_tax': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Taxes', + 'amount_tax': fields.function(_amount_all_wrapper, digits_compute=dp.get_precision('Account'), string='Taxes', store={ 'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10), 'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10), }, multi='sums', help="The tax amount."), - 'amount_total': fields.function(_amount_all, digits_compute=dp.get_precision('Account'), string='Total', + 'amount_total': fields.function(_amount_all_wrapper, digits_compute=dp.get_precision('Account'), string='Total', store={ 'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 10), 'sale.order.line': (_get_order, ['price_unit', 'tax_id', 'discount', 'product_uom_qty'], 10), @@ -321,6 +322,9 @@ class sale_order(osv.osv): context = {} if vals.get('name', '/') == '/': vals['name'] = self.pool.get('ir.sequence').get(cr, uid, 'sale.order') or '/' + if vals.get('partner_id') and any(f not in vals for f in ['partner_invoice_id', 'partner_shipping_id', 'pricelist_id']): + defaults = self.onchange_partner_id(cr, uid, [], vals['partner_id'], context)['value'] + vals = dict(defaults, **vals) context.update({'mail_create_nolog': True}) new_id = super(sale_order, self).create(cr, uid, vals, context=context) self.message_post(cr, uid, [new_id], body=_("Quotation created"), context=context) @@ -795,9 +799,8 @@ class sale_order_line(osv.osv): sales.add(line.order_id.id) create_ids.append(inv_id) # Trigger workflow events - wf_service = netsvc.LocalService("workflow") for sale_id in sales: - wf_service.trg_write(uid, 'sale.order', sale_id, cr) + workflow.trg_write(uid, 'sale.order', sale_id, cr) return create_ids def button_cancel(self, cr, uid, ids, context=None): @@ -810,10 +813,9 @@ class sale_order_line(osv.osv): return self.write(cr, uid, ids, {'state': 'confirmed'}) def button_done(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService("workflow") res = self.write(cr, uid, ids, {'state': 'done'}) for line in self.browse(cr, uid, ids, context=context): - wf_service.trg_write(uid, 'sale.order', line.order_id.id, cr) + workflow.trg_write(uid, 'sale.order', line.order_id.id, cr) return res def uos_change(self, cr, uid, ids, product_uos, product_uos_qty=0, product_id=None): @@ -836,6 +838,24 @@ class sale_order_line(osv.osv): pass return {'value': value} + def create(self, cr, uid, values, context=None): + if values.get('order_id') and values.get('product_id') and any(f not in values for f in ['name', 'price_unit', 'type', 'product_uom_qty', 'product_uom']): + order = self.pool['sale.order'].read(cr, uid, values['order_id'], ['pricelist_id', 'partner_id', 'date_order', 'fiscal_position'], context=context) + defaults = self.product_id_change(cr, uid, [], order['pricelist_id'][0], values['product_id'], + qty=float(values.get('product_uom_qty', False)), + uom=values.get('product_uom', False), + qty_uos=float(values.get('product_uos_qty', False)), + uos=values.get('product_uos', False), + name=values.get('name', False), + partner_id=order['partner_id'][0], + date_order=order['date_order'], + fiscal_position=order['fiscal_position'][0] if order['fiscal_position'] else False, + flag=False, # Force name update + context=context + )['value'] + values = dict(defaults, **values) + return super(sale_order_line, self).create(cr, uid, values, context=context) + def copy_data(self, cr, uid, id, default=None, context=None): if not default: default = {} @@ -981,9 +1001,9 @@ class mail_compose_message(osv.Model): def send_mail(self, cr, uid, ids, context=None): context = context or {} - if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'): + if context.get('active_model') == 'sale.order' and context.get('active_ids') and context.get('mark_so_as_sent'): context = dict(context, mail_post_autofollow=True) - self.pool.get('sale.order').signal_quotation_sent(cr, uid, [context['default_res_id']]) + self.pool.get('sale.order').signal_quotation_sent(cr, uid, context['active_ids']) return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) @@ -1005,9 +1025,8 @@ class account_invoice(osv.Model): if len(invoice_ids) == len(ids): #Cancel invoice(s) first before deleting them so that if any sale order is associated with them #it will trigger the workflow to put the sale order in an 'invoice exception' state - wf_service = netsvc.LocalService("workflow") for id in ids: - wf_service.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr) + workflow.trg_validate(uid, 'account.invoice', id, 'invoice_cancel', cr) return super(account_invoice, self).unlink(cr, uid, ids, context=context) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 53c4a166977..60e5c83ecf0 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -122,7 +122,6 @@ - ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
+ + Sales Order Analysis multi-company + + + ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + @@ -93,6 +100,19 @@ + + Personal Orders Analysis + + ['|',('user_id','=',user.id),('user_id','=',False)] + + + + + All Orders Analysis + + [(1,'=',1)] + + Personal Order Lines diff --git a/addons/sale/test/edi_sale_order.yml b/addons/sale/test/edi_sale_order.yml index 24fdfdf2786..65b6eb76835 100644 --- a/addons/sale/test/edi_sale_order.yml +++ b/addons/sale/test/edi_sale_order.yml @@ -170,7 +170,6 @@ "__import_module": "sale", "__import_model": "sale.order.line", "name": "Basic PC", - "date_planned": "2011-09-30", "price_unit": 150.0, "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc1", "[PC1] Basic PC"], "product_qty": 1.0, @@ -183,7 +182,6 @@ "__import_module": "sale", "__import_model": "sale.order.line", "name": "Medium PC", - "date_planned": "2011-09-15", "price_unit": 100.0, "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc3", "[PC3] Medium PC"], "product_qty": 2.0, @@ -214,4 +212,4 @@ assert sale_line.price_unit == 100 , "unit price is not same, got %s, expected 100"%(sale_line.price_unit,) assert sale_line.product_uom_qty == 2 , "product qty is not same" else: - raise AssertionError('unknown order line: %s' % sale_line) \ No newline at end of file + raise AssertionError('unknown order line: %s' % sale_line) diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py index 3b04319f5c7..cd199760e9e 100644 --- a/addons/sale/wizard/sale_line_invoice.py +++ b/addons/sale/wizard/sale_line_invoice.py @@ -21,7 +21,7 @@ from openerp.osv import osv, fields from openerp.tools.translate import _ -from openerp import netsvc +from openerp import workflow class sale_order_line_make_invoice(osv.osv_memory): _name = "sale.order.line.make.invoice" @@ -61,7 +61,7 @@ class sale_order_line_make_invoice(osv.osv_memory): else: pay_term = False inv = { - 'name': order.name, + 'name': order.client_order_ref or '', 'origin': order.name, 'type': 'out_invoice', 'reference': "P%dSO%d" % (order.partner_id.id, order.id), @@ -81,7 +81,6 @@ class sale_order_line_make_invoice(osv.osv_memory): sales_order_line_obj = self.pool.get('sale.order.line') sales_order_obj = self.pool.get('sale.order') - wf_service = netsvc.LocalService('workflow') for line in sales_order_line_obj.browse(cr, uid, context.get('active_ids', []), context=context): if (not line.invoiced) and (line.state not in ('draft', 'cancel')): if not line.order_id in invoices: @@ -101,7 +100,7 @@ class sale_order_line_make_invoice(osv.osv_memory): flag = False break if flag: - wf_service.trg_validate(uid, 'sale.order', order.id, 'manual_invoice', cr) + workflow.trg_validate(uid, 'sale.order', order.id, 'manual_invoice', cr) sales_order_obj.write(cr, uid, [order.id], {'state': 'progress'}) if not invoices: diff --git a/addons/sale_analytic_plans/i18n/hu.po b/addons/sale_analytic_plans/i18n/hu.po index 93cb8f4c512..31a78b97b98 100644 --- a/addons/sale_analytic_plans/i18n/hu.po +++ b/addons/sale_analytic_plans/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:06+0000\n" -"PO-Revision-Date: 2013-01-07 22:28+0000\n" +"PO-Revision-Date: 2013-12-09 15:55+0000\n" "Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 05:57+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" #. module: sale_analytic_plans #: field:sale.order.line,analytics_id:0 @@ -29,7 +29,7 @@ msgstr "Vevői megrendelés" #. module: sale_analytic_plans #: model:ir.model,name:sale_analytic_plans.model_sale_order_line msgid "Sales Order Line" -msgstr "Vevői megrendelés sor" +msgstr "Vevői megrendelési tétel sor" #~ msgid "Sales Analytic Distribution Management" #~ msgstr "Értékesítés analitikus felosztás kezelés" diff --git a/addons/sale_crm/__openerp__.py b/addons/sale_crm/__openerp__.py index 7a57484eab8..9c227e39430 100644 --- a/addons/sale_crm/__openerp__.py +++ b/addons/sale_crm/__openerp__.py @@ -46,6 +46,7 @@ modules. 'security/sale_crm_security.xml', 'security/ir.model.access.csv', 'report/sale_crm_account_invoice_report_view.xml', + 'report/sale_report_view.xml', ], 'js': [ 'static/src/js/sale_crm.js', diff --git a/addons/sale_crm/i18n/hu.po b/addons/sale_crm/i18n/hu.po index 367d50c544d..a49be7cf9dd 100644 --- a/addons/sale_crm/i18n/hu.po +++ b/addons/sale_crm/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:06+0000\n" -"PO-Revision-Date: 2011-02-01 18:33+0000\n" -"Last-Translator: Krisztian Eyssen \n" +"PO-Revision-Date: 2013-12-09 15:59+0000\n" +"Last-Translator: krnkris \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-12 05:19+0000\n" -"X-Generator: Launchpad (build 16761)\n" +"X-Launchpad-Export-Date: 2013-12-11 05:32+0000\n" +"X-Generator: Launchpad (build 16869)\n" #. module: sale_crm #: code:addons/sale_crm/wizard/crm_make_sale.py:92 @@ -81,7 +81,7 @@ msgstr "Árajánlat" #. module: sale_crm #: field:crm.make.sale,partner_id:0 msgid "Customer" -msgstr "Vevő" +msgstr "Vásárló" #. module: sale_crm #: view:crm.make.sale:0 @@ -91,7 +91,7 @@ msgstr "_Létrehoz" #. module: sale_crm #: model:ir.model,name:sale_crm.model_crm_make_sale msgid "Make sales" -msgstr "Értékesítés létrehozás" +msgstr "Vevői értékesítés létrehozás" #. module: sale_crm #: model:ir.model,name:sale_crm.model_account_invoice @@ -108,7 +108,7 @@ msgstr "Lehetőség: %s" #: code:addons/sale_crm/wizard/crm_make_sale.py:113 #, python-format msgid "Opportunity has been converted to the quotation %s." -msgstr "A lehetőségát lett konvertálva árajánlattá %s." +msgstr "A lehetőség át lett konvertálva árajánlattá %s." #. module: sale_crm #: field:crm.make.sale,shop_id:0 @@ -119,12 +119,12 @@ msgstr "Üzlet" #: code:addons/sale_crm/wizard/crm_make_sale.py:92 #, python-format msgid "No addresse(s) defined for this customer." -msgstr "Ehhez a vevőhöz nem lett cím meghatározva." +msgstr "Ehhez a vevőhöz nem lett meghatározva cím." #. module: sale_crm #: model:mail.message.subtype,name:sale_crm.mt_salesteam_order_confirmed msgid "Sales Order Confirmed" -msgstr "Megrendelés visszaigazolva" +msgstr "Vásárlói megrendelés visszaigazolva" #. module: sale_crm #: view:account.invoice:0 diff --git a/addons/sale_crm/report/__init__.py b/addons/sale_crm/report/__init__.py index d7c6d373468..d86b3e66de9 100644 --- a/addons/sale_crm/report/__init__.py +++ b/addons/sale_crm/report/__init__.py @@ -20,6 +20,7 @@ ############################################################################## import sales_crm_account_invoice_report +import sale_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_crm/report/sale_report.py b/addons/sale_crm/report/sale_report.py new file mode 100644 index 00000000000..eca020f82ad --- /dev/null +++ b/addons/sale_crm/report/sale_report.py @@ -0,0 +1,18 @@ + # -*- coding: utf-8 -*- + +from openerp.osv import fields, osv + + +class sale_report(osv.osv): + _inherit = "sale.report" + _columns = { + 'section_id': fields.many2one('crm.case.section', 'Sales Team'), + } + + def _select(self): + return super(sale_report, self)._select() + ", s.section_id as section_id" + + def _group_by(self): + return super(sale_report, self)._group_by() + ", s.section_id" + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_crm/report/sale_report_view.xml b/addons/sale_crm/report/sale_report_view.xml new file mode 100644 index 00000000000..0d8243c1275 --- /dev/null +++ b/addons/sale_crm/report/sale_report_view.xml @@ -0,0 +1,27 @@ + + + + + sale.report.tree.sale.crm + sale.report + + + + + + + + + + sale.report.search.sale.crm + sale.report + + + + + + + + + + \ No newline at end of file diff --git a/addons/sale_crm/sale_crm.py b/addons/sale_crm/sale_crm.py index e5695daab09..f1370841fe9 100644 --- a/addons/sale_crm/sale_crm.py +++ b/addons/sale_crm/sale_crm.py @@ -53,10 +53,10 @@ class crm_case_section(osv.osv): date_end = month_begin.replace(day=calendar.monthrange(month_begin.year, month_begin.month)[1]).strftime(tools.DEFAULT_SERVER_DATE_FORMAT) for id in ids: res[id] = dict() - created_domain = [('section_id', '=', id), ('state', 'in', ['draft', 'sent']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)] + created_domain = [('section_id', '=', id), ('state', '=', ['draft']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)] res[id]['monthly_quoted'] = self.__get_bar_values(cr, uid, obj, created_domain, ['amount_total', 'date_order'], 'amount_total', 'date_order', context=context) - validated_domain = [('section_id', '=', id), ('state', 'not in', ['draft', 'sent']), ('date_confirm', '>=', date_begin), ('date_order', '<=', date_end)] - res[id]['monthly_confirmed'] = self.__get_bar_values(cr, uid, obj, validated_domain, ['amount_total', 'date_confirm'], 'amount_total', 'date_confirm', context=context) + validated_domain = [('section_id', '=', id), ('state', 'not in', ['draft', 'sent', 'cancel']), ('date_order', '>=', date_begin), ('date_order', '<=', date_end)] + res[id]['monthly_confirmed'] = self.__get_bar_values(cr, uid, obj, validated_domain, ['amount_total', 'date_order'], 'amount_total', 'date_order', context=context) return res def _get_invoices_data(self, cr, uid, ids, field_name, arg, context=None): @@ -90,7 +90,7 @@ class crm_case_section(osv.osv): } def action_forecast(self, cr, uid, id, value, context=None): - return self.write(cr, uid, [id], {'invoiced_forecast': value}, context=context) + return self.write(cr, uid, [id], {'invoiced_forecast': round(float(value))}, context=context) class res_users(osv.Model): diff --git a/addons/sale_crm/sale_crm_demo.xml b/addons/sale_crm/sale_crm_demo.xml index 0c2822719dd..25f653548d1 100644 --- a/addons/sale_crm/sale_crm_demo.xml +++ b/addons/sale_crm/sale_crm_demo.xml @@ -23,7 +23,7 @@ draft - out_invoice + in_invoice Test invoice 1 diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml index 34f32e0b58b..8c3c98c3f97 100644 --- a/addons/sale_crm/sale_crm_view.xml +++ b/addons/sale_crm/sale_crm_view.xml @@ -8,7 +8,7 @@ - +