diff --git a/addons/account/account.py b/addons/account/account.py
index c9dd1950347..cfba30856a9 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -541,10 +541,18 @@ class account_account(osv.osv):
return False
return True
+ def _check_company_account(self, cr, uid, ids, context=None):
+ for account in self.browse(cr, uid, ids, context=context):
+ if account.parent_id:
+ if account.company_id != account.parent_id.company_id:
+ return False
+ return True
+
_constraints = [
(_check_recursion, 'Error!\nYou cannot create recursive accounts.', ['parent_id']),
(_check_type, 'Configuration Error!\nYou cannot define children to an account with internal type different of "View".', ['type']),
(_check_account_type, 'Configuration Error!\nYou cannot select an account type with a deferral method different of "Unreconciled" for accounts with internal type "Payable/Receivable".', ['user_type','type']),
+ (_check_company_account, 'Error!\nYou cannot create an account which has parent account of different company.', ['parent_id']),
]
_sql_constraints = [
('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !')
diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py
index f0a420f7496..066f8d1abec 100644
--- a/addons/account/account_analytic_line.py
+++ b/addons/account/account_analytic_line.py
@@ -107,7 +107,7 @@ class account_analytic_line(osv.osv):
if journal_id:
journal = analytic_journal_obj.browse(cr, uid, journal_id, context=context)
if journal.type == 'sale':
- product_price_type_ids = product_price_type_obj.search(cr, uid, [('field','=','list_price')], context)
+ product_price_type_ids = product_price_type_obj.search(cr, uid, [('field','=','list_price')], context=context)
if product_price_type_ids:
pricetype = product_price_type_obj.browse(cr, uid, product_price_type_ids, context=context)[0]
# Take the company currency as the reference one
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 48082451f35..4422537007f 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -61,7 +61,7 @@ class account_bank_statement(osv.osv):
return res
def _get_period(self, cr, uid, context=None):
- periods = self.pool.get('account.period').find(cr, uid)
+ periods = self.pool.get('account.period').find(cr, uid,context=context)
if periods:
return periods[0]
return False
@@ -486,6 +486,19 @@ class account_bank_statement(osv.osv):
default['move_line_ids'] = []
return super(account_bank_statement, self).copy(cr, uid, id, default, context=context)
+ def button_journal_entries(self, cr, uid, ids, context=None):
+ ctx = (context or {}).copy()
+ ctx['journal_id'] = self.browse(cr, uid, ids[0], context=context).journal_id.id
+ return {
+ 'view_type':'form',
+ 'view_mode':'tree',
+ 'res_model':'account.move.line',
+ 'view_id':False,
+ 'type':'ir.actions.act_window',
+ 'domain':[('statement_id','in',ids)],
+ 'context':ctx,
+ }
+
account_bank_statement()
class account_bank_statement_line(osv.osv):
diff --git a/addons/account/account_cash_statement.py b/addons/account/account_cash_statement.py
index 17fa05d5f24..c1f30824461 100644
--- a/addons/account/account_cash_statement.py
+++ b/addons/account/account_cash_statement.py
@@ -78,7 +78,7 @@ class account_cash_statement(osv.osv):
"""
res = {}
for statement in self.browse(cr, uid, ids, context=context):
- if statement.journal_id.type not in ('cash',):
+ if (statement.journal_id.type not in ('cash',)) or (not statement.journal_id.cash_control):
continue
start = end = 0
for line in statement.details_ids:
@@ -289,13 +289,13 @@ class account_cash_statement(osv.osv):
super(account_cash_statement, self).button_confirm_bank(cr, uid, ids, context=context)
absl_proxy = self.pool.get('account.bank.statement.line')
- TABLES = (('Profit', 'profit_account_id'), ('Loss', 'loss_account_id'),)
+ TABLES = ((_('Profit'), 'profit_account_id'), (_('Loss'), 'loss_account_id'),)
for obj in self.browse(cr, uid, ids, context=context):
if obj.difference == 0.0:
continue
- for item_label, item_account in TALBES:
+ for item_label, item_account in TABLES:
if getattr(obj.journal_id, item_account):
raise osv.except_osv(_('Error!'),
_('There is no %s Account on the journal %s.') % (item_label, obj.journal_id.name,))
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index b01fc974bef..3e86c4963b7 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -402,6 +402,7 @@ class account_invoice(osv.osv):
'default_res_id': ids[0],
'default_use_template': True,
'default_template_id': template_id,
+ 'default_composition_mode': 'comment',
})
return {
'view_type': 'form',
@@ -431,7 +432,7 @@ class account_invoice(osv.osv):
if t['state'] in ('draft', 'cancel') and t['internal_number']== False:
unlink_ids.append(t['id'])
else:
- raise osv.except_osv(_('Invalid Action!'), _('You cannot delete an invoice which is open or paid. You should refund it instead.'))
+ raise osv.except_osv(_('Invalid Action!'), _('You can not delete an invoice which is not cancelled. You should refund it instead.'))
osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
return True
@@ -983,13 +984,13 @@ class account_invoice(osv.osv):
for i in line:
i[2]['period_id'] = period_id
+ ctx.update(invoice=inv)
move_id = move_obj.create(cr, uid, move, context=ctx)
new_move_name = move_obj.browse(cr, uid, move_id, context=ctx).name
# make the invoice point to that move
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name}, context=ctx)
# Pass invoice in context in method post: used if you want to get the same
# account move reference when creating the same invoice after a cancelled one:
- ctx.update({'invoice':inv})
move_obj.post(cr, uid, [move_id], context=ctx)
self._log_event(cr, uid, ids)
return True
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 2f722d07aeb..d3697b13ea9 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -168,10 +168,8 @@
context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}"
domain="[('supplier', '=', True)]"/>
-
-
-
-
+
+
@@ -438,7 +436,7 @@
-
+
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 67a55d8f451..302a74c27af 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -208,7 +208,7 @@ class account_move_line(osv.osv):
if type(period_id) == str:
ids = period_obj.search(cr, uid, [('name', 'ilike', period_id)])
context.update({
- 'period_id': ids[0]
+ 'period_id': ids and ids[0] or False
})
return context
@@ -582,7 +582,7 @@ class account_move_line(osv.osv):
lines = self.browse(cr, uid, ids, context=context)
for l in lines:
if l.account_id.type == 'view':
- raise osv.except_osv(_('Error!'), _('You cannot create journal items on “View” type account %s %s.') % (l.account_id.code, l.account_id.name))
+ return False
return True
def _check_no_closed(self, cr, uid, ids, context=None):
@@ -917,7 +917,7 @@ class account_move_line(osv.osv):
if lines and lines[0]:
partner_id = lines[0].partner_id and lines[0].partner_id.id or False
- if not partner_obj.has_something_to_reconcile(cr, uid, partner_id, context=context):
+ if partner_id and not partner_obj.has_something_to_reconcile(cr, uid, partner_id, context=context):
partner_obj.mark_as_reconciled(cr, uid, [partner_id], context=context)
return r_id
@@ -975,7 +975,7 @@ class account_move_line(osv.osv):
if context is None:
context = {}
result = super(account_move_line, self).fields_view_get(cr, uid, view_id, view_type, context=context, toolbar=toolbar, submenu=submenu)
- if view_type != 'tree':
+ if (view_type != 'tree') or view_id:
#Remove the toolbar from the form view
if view_type == 'form':
if result.get('toolbar', False):
diff --git a/addons/account/account_report.xml b/addons/account/account_report.xml
index d258bb0b140..0017409f416 100644
--- a/addons/account/account_report.xml
+++ b/addons/account/account_report.xml
@@ -41,13 +41,5 @@
groups="group_account_user,group_account_manager"
parent="account.menu_finance_generic_reporting" sequence="3"/>
-
-
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index d9e95f15079..f7d64f43405 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -302,11 +302,11 @@
[('parent_id','=',False)]
-
+ Unrealized Gain or Lossaccount.account
-
+
@@ -322,7 +322,7 @@
-
+ Unrealized Gain or Lossaccount.accountform
@@ -509,8 +509,8 @@
-
-
+
+
@@ -650,7 +650,7 @@
-
+
@@ -661,7 +661,7 @@
-
+
@@ -671,15 +671,24 @@
-
-
-
+
+ account.bank.statement.journal.items.form.inherit
+ account.bank.statement
+
+
+
+
+
+
+ Bank Statements
@@ -1055,7 +1064,7 @@
-
+ account.move.line.treeaccount.move.line
@@ -1230,8 +1239,8 @@
-
-
+
+
@@ -1791,7 +1800,7 @@
-
+
@@ -1850,7 +1859,7 @@
-
+ account.subscription.searchaccount.subscription
@@ -2159,7 +2168,8 @@
-
+
+
diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml
index e435c0243e9..dd27cfbab4e 100644
--- a/addons/account/data/account_data.xml
+++ b/addons/account/data/account_data.xml
@@ -127,7 +127,6 @@
Statusstate
-
@@ -215,7 +214,6 @@
Statusstate
-
@@ -291,7 +289,6 @@
Statusstate
-
@@ -373,7 +370,6 @@
Statusstate
-
@@ -460,7 +456,6 @@
Statusstate
-
diff --git a/addons/account/edi/invoice_action_data.xml b/addons/account/edi/invoice_action_data.xml
index 53fa03a6902..d86ebca3537 100644
--- a/addons/account/edi/invoice_action_data.xml
+++ b/addons/account/edi/invoice_action_data.xml
@@ -40,7 +40,7 @@
Automated Invoice Notification Mail${object.user_id.email or object.company_id.email or 'noreply@localhost'}${object.company_id.name} Invoice (Ref ${object.number or 'n/a' })
- ${object.partner_id.email or ''}
+ ${object.partner_id.id}\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: 2012-10-30 05:06+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-14 04:40+0000\n"
+"X-Generator: Launchpad (build 16251)\n"
#. module: account
#: view:account.invoice.report:0
#: view:analytic.entries.report:0
msgid "last month"
-msgstr ""
+msgstr "Ultimo mes"
#. module: account
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
@@ -146,7 +146,7 @@ msgstr "Referencia"
#. module: account
#: view:account.open.closed.fiscalyear:0
msgid "Choose Fiscal Year "
-msgstr ""
+msgstr "Seleccione el año fiscal "
#. module: account
#: help:account.payment.term,active:0
@@ -159,7 +159,7 @@ msgstr ""
#: code:addons/account/account_invoice.py:1430
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "¡Advertencia!"
#. module: account
#: code:addons/account/account.py:3129
@@ -187,7 +187,7 @@ msgstr ""
#: code:addons/account/wizard/account_move_journal.py:95
#, python-format
msgid "Journal: %s"
-msgstr ""
+msgstr "Diario: %s"
#. module: account
#: help:account.analytic.journal,type:0
@@ -228,6 +228,7 @@ msgstr ""
#, python-format
msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)"
msgstr ""
+"La factura '%s' está parcialmente pagada: %s%s de %s%s (%s%s pendiente)"
#. module: account
#: model:process.transition,note:account.process_transition_supplierentriesreconcile0
@@ -268,7 +269,7 @@ msgstr ""
#. module: account
#: view:account.fiscalyear.close.state:0
msgid "Close Fiscalyear"
-msgstr ""
+msgstr "Cerrar ejercicio fiscal"
#. module: account
#: field:account.automatic.reconcile,allow_write_off:0
@@ -335,7 +336,7 @@ msgstr ""
#. module: account
#: view:account.installer:0
msgid "Configure"
-msgstr ""
+msgstr "Configurar"
#. module: account
#: selection:account.entries.report,month:0
@@ -344,7 +345,7 @@ msgstr ""
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "June"
-msgstr ""
+msgstr "Junio"
#. module: account
#: model:ir.actions.act_window,help:account.action_account_moves_bank
@@ -378,12 +379,12 @@ msgstr "Fecha de creación"
#. module: account
#: selection:account.journal,type:0
msgid "Purchase Refund"
-msgstr ""
+msgstr "Devolución de compra"
#. module: account
#: selection:account.journal,type:0
msgid "Opening/Closing Situation"
-msgstr ""
+msgstr "Situación de apertura/cierre"
#. module: account
#: help:account.journal,currency:0
@@ -393,7 +394,7 @@ msgstr "La moneda utilizada para el extracto"
#. module: account
#: field:account.open.closed.fiscalyear,fyear_id:0
msgid "Fiscal Year to Open"
-msgstr "Año fiscal para abrir"
+msgstr "Ejercicio fiscal a abrir"
#. module: account
#: help:account.journal,sequence_id:0
@@ -495,7 +496,7 @@ msgstr ""
#. module: account
#: field:account.bank.statement,account_id:0
msgid "Account used in this journal"
-msgstr ""
+msgstr "Cuenta utilizada en este diario"
#. module: account
#: help:account.aged.trial.balance,chart_account_id:0
@@ -557,7 +558,7 @@ msgstr "Cerrar un año fiscal"
#. module: account
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
msgid "The accountant confirms the statement."
-msgstr ""
+msgstr "El contador confirma la declaración."
#. module: account
#: report:account.account.balance:0
@@ -8156,7 +8157,7 @@ msgstr ""
#: field:account.bank.statement,balance_end_real:0
#: field:account.treasury.report,ending_balance:0
msgid "Ending Balance"
-msgstr "Balance final"
+msgstr "Saldo Final"
#. module: account
#: help:account.move.line,blocked:0
diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po
index f4823e4b626..5a013ceacb9 100644
--- a/addons/account/i18n/fr.po
+++ b/addons/account/i18n/fr.po
@@ -7,14 +7,15 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-06-20 16:18+0000\n"
-"Last-Translator: Raphael Collet (OpenERP) \n"
+"PO-Revision-Date: 2012-10-30 15:48+0000\n"
+"Last-Translator: Frederic Clementi - Camptocamp.com "
+"\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 05:01+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: account
#: code:addons/account/account_move_line.py:1215
@@ -151,7 +152,7 @@ msgstr "Définition des enfants"
#: code:addons/account/account_bank_statement.py:302
#, python-format
msgid "Journal item \"%s\" is not valid."
-msgstr "Écriture \"%s\" n'est pas équilibrée"
+msgstr ""
#. module: account
#: model:ir.model,name:account.model_report_aged_receivable
@@ -1608,10 +1609,9 @@ msgid ""
"entry per accounting document: invoice, refund, supplier payment, bank "
"statements, etc."
msgstr ""
-"Une pièce comptable est composée de plusieurs écritures comptables, chacune "
-"étant soit un débit soit un crédit. OpenERP crée automatiquement une pièce "
-"comptable par document comptable : facture, avoir, paiement de fournisseur, "
-"relevés bancaires, etc."
+"Un écriture est composée de plusieurs lignes, chacune étant soit un débit "
+"soit un crédit. OpenERP crée automatiquement une écriture par document "
+"comptable : facture, avoir, paiement de fournisseur, relevés bancaires, etc."
#. module: account
#: view:account.entries.report:0
@@ -1703,7 +1703,7 @@ msgstr "Recherche d'un relevé bancaire"
#. module: account
#: view:account.move.line:0
msgid "Unposted Journal Items"
-msgstr "Pièces non comptabiliisées"
+msgstr "Ecritures brouillon"
#. module: account
#: view:account.chart.template:0
@@ -2478,8 +2478,6 @@ msgid ""
"In order to delete a bank statement, you must first cancel it to delete "
"related journal items."
msgstr ""
-"Pour supprimer un relevé bancaire vous devez préalablement supprimer les "
-"lignes rapprochées."
#. module: account
#: field:account.invoice,payment_term:0
@@ -3629,7 +3627,7 @@ msgstr "État des ventes par type de compte"
#. module: account
#: view:account.move.line:0
msgid "Unreconciled Journal Items"
-msgstr "Ecritures non lettrées"
+msgstr "Ecritures non léttrées"
#. module: account
#: sql_constraint:res.currency:0
@@ -3900,7 +3898,7 @@ msgstr ""
#. module: account
#: model:ir.actions.report.xml,name:account.account_account_balance_landscape
msgid "Account balance"
-msgstr "Balance des comptes"
+msgstr "Balance générale"
#. module: account
#: report:account.invoice:0
@@ -3972,7 +3970,7 @@ msgstr "Nom"
#. module: account
#: model:ir.model,name:account.model_account_aged_trial_balance
msgid "Account Aged Trial balance Report"
-msgstr "Rapport du solde de la balance agée"
+msgstr "Balance agée"
#. module: account
#: code:addons/account/account_move_line.py:582
@@ -4181,7 +4179,7 @@ msgstr ""
#. module: account
#: view:account.move.line:0
msgid "Posted Journal Items"
-msgstr "Ecritures saisies"
+msgstr "Ecritures validées"
#. module: account
#: view:account.tax.template:0
@@ -4244,7 +4242,7 @@ msgstr "Titulaire du compte bancaire"
#: model:ir.actions.report.xml,name:account.account_account_balance
#: model:ir.ui.menu,name:account.menu_general_Balance_report
msgid "Trial Balance"
-msgstr "Balance des comptes"
+msgstr "Balance générale"
#. module: account
#: model:ir.model,name:account.model_account_invoice_cancel
@@ -4659,7 +4657,7 @@ msgstr "Sert de compte par défaut pour le crédit"
#: view:validate.account.move:0
#: view:validate.account.move.lines:0
msgid "Post Journal Entries"
-msgstr "Comptabiliser les pièces comptables dans le journal"
+msgstr "Valider les écritures"
#. module: account
#: selection:account.invoice,state:0
@@ -4927,7 +4925,7 @@ msgstr ""
#: code:addons/account/account.py:923
#, python-format
msgid "Opening Period"
-msgstr "Période ouverte"
+msgstr "Période d'ouverture"
#. module: account
#: view:account.move:0
@@ -5611,7 +5609,7 @@ msgstr "Quantité de produits"
#: selection:account.move,state:0
#: view:account.move.line:0
msgid "Unposted"
-msgstr "Non comptabilisé"
+msgstr "Non validée"
#. module: account
#: view:account.change.currency:0
@@ -5823,7 +5821,7 @@ msgstr "Journal d'écriture"
#: 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 "Générer les écritures d'ouverture"
+msgstr "Générer l'écriture d'ouverture"
#. module: account
#: code:addons/account/account_move_line.py:775
@@ -7117,7 +7115,7 @@ msgstr "Sélection du journal"
#: code:addons/account/account.py:432
#, python-format
msgid "Opening Balance"
-msgstr "Solde initial"
+msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_move_reconcile
@@ -7727,8 +7725,7 @@ msgstr "Signes sur les Rapports"
#: code:addons/account/wizard/account_fiscalyear_close.py:88
#, python-format
msgid "The periods to generate opening entries were not found"
-msgstr ""
-"Les périodes pour générer les écritures d'ouverture n'ont pas été trouvées."
+msgstr "Aucune période d'ouverture trouvée"
#. module: account
#: model:account.account.type,name:account.data_account_type_view
@@ -7822,7 +7819,7 @@ msgstr "Journal des ventes"
#: code:addons/account/wizard/account_move_journal.py:104
#, python-format
msgid "Open Journal Items !"
-msgstr "Écritures ouvertes !"
+msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_invoice_tax
@@ -7859,7 +7856,7 @@ msgstr ""
#. module: account
#: view:account.move:0
msgid "Unposted Journal Entries"
-msgstr "Pièces non comptabilisées"
+msgstr "Ecritures non validées"
#. module: account
#: view:product.product:0
@@ -7976,7 +7973,7 @@ msgstr "Code de la case"
#. module: account
#: view:validate.account.move:0
msgid "Post Journal Entries of a Journal"
-msgstr "Comptabiliser les pièces comptables d'un journal"
+msgstr "Valider les écritures"
#. module: account
#: view:product.product:0
@@ -8161,7 +8158,7 @@ msgstr "Ligne de caisse"
#: 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 "Grand Livre"
+msgstr "Livre des tiers"
#. module: account
#: selection:account.tax.template,type:0
@@ -8359,7 +8356,7 @@ msgstr ""
#: help:account.account,reconcile:0
msgid ""
"Check this box if this account allows reconciliation of journal items."
-msgstr "Cochez si le compte autorise le lettrage des pièces."
+msgstr "Cochez si le compte autorise le lettrage des écritures."
#. module: account
#: help:account.period,state:0
@@ -9220,7 +9217,7 @@ msgstr "inconnu"
#: code:addons/account/account.py:3130
#, python-format
msgid "Opening Entries Journal"
-msgstr "Journal des écritures d'ouverture"
+msgstr "Journal d'ouverture"
#. module: account
#: model:process.transition,note:account.process_transition_customerinvoice0
@@ -10006,7 +10003,7 @@ msgstr "Ce compte de tiers remplacera le compte par défaut."
#. module: account
#: field:account.period,special:0
msgid "Opening/Closing Period"
-msgstr "Ouverture/clôture d'exercice"
+msgstr "Période d'ouverture/clôture"
#. module: account
#: field:account.account,currency_id:0
@@ -10336,7 +10333,7 @@ msgstr "Date de fin"
#: 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 "Annuler les écritures d'ouvertures"
+msgstr "Annuler l'écriture d'ouverture"
#. module: account
#: field:account.payment.term.line,days2:0
@@ -10505,7 +10502,7 @@ msgstr "Signer pour le parent"
#. module: account
#: model:ir.model,name:account.model_account_balance_report
msgid "Trial Balance Report"
-msgstr "Rapport sur la balance des comptes"
+msgstr "Balance générale"
#. module: account
#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree
@@ -10688,7 +10685,7 @@ msgstr "Intervalle"
#. module: account
#: view:account.analytic.line:0
msgid "Analytic Journal Items related to a purchase journal."
-msgstr "Imputations analytiques relatives au journal des achats."
+msgstr "Ecritures analytiques relatives au journal des achats."
#. module: account
#: help:account.account,type:0
@@ -11213,7 +11210,7 @@ msgstr "Future"
#. module: account
#: view:account.move.line:0
msgid "Search Journal Items"
-msgstr "Rechercher des écritures comptables"
+msgstr "Recherche par ligne d'écritures"
#. module: account
#: help:account.tax,base_sign:0
diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po
index d2e8f8ae7cb..f07753022d5 100644
--- a/addons/account/i18n/ru.po
+++ b/addons/account/i18n/ru.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-10-26 09:03+0000\n"
+"PO-Revision-Date: 2012-10-31 10:41+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 05:04+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: account
#: view:account.invoice.report:0
@@ -7939,7 +7939,7 @@ msgstr "Строка кассы"
#: 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 "Книгапартнера"
+msgstr "Книга партнера"
#. module: account
#: selection:account.tax.template,type:0
diff --git a/addons/account/i18n/sl.po b/addons/account/i18n/sl.po
index 7557091bd4e..6748e5db3b1 100644
--- a/addons/account/i18n/sl.po
+++ b/addons/account/i18n/sl.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-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-06-20 16:03+0000\n"
-"Last-Translator: Raphael Collet (OpenERP) \n"
+"PO-Revision-Date: 2012-11-01 18:30+0000\n"
+"Last-Translator: Dusan Laznik \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: 2012-10-30 05:04+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: account
#: view:account.invoice.report:0
@@ -1587,7 +1587,7 @@ msgstr "Neobdavčeno"
#. module: account
#: view:account.partner.reconcile.process:0
msgid "Go to Next Partner"
-msgstr ""
+msgstr "Naslednji parner"
#. module: account
#: view:account.bank.statement:0
@@ -3150,7 +3150,7 @@ msgstr "Predloge kontnih načrtov"
#. module: account
#: model:ir.actions.act_window,name:account.action_wizard_multi_chart
msgid "Set Your Accounting Options"
-msgstr ""
+msgstr "Nastavitve"
#. module: account
#: view:report.account.sales:0
@@ -4358,7 +4358,7 @@ msgstr "res_config_contents"
#. module: account
#: view:account.unreconcile:0
msgid "Unreconciliate Transactions"
-msgstr ""
+msgstr "Neusklajene postavke"
#. module: account
#: help:account.chart.template,visible:0
@@ -4558,7 +4558,7 @@ msgstr "Datum dogodka"
#. module: account
#: view:account.unreconcile.reconcile:0
msgid "Unreconciliation Transactions"
-msgstr ""
+msgstr "Naknadno odprte postavke"
#. module: account
#: field:account.tax,ref_tax_code_id:0
@@ -6046,7 +6046,7 @@ msgstr "Davek(%)"
#. module: account
#: view:account.addtmpl.wizard:0
msgid "Create an Account Based on this Template"
-msgstr ""
+msgstr "Ustvarite konto na osnovi te predloge"
#. module: account
#: view:account.account.type:0
@@ -8827,7 +8827,7 @@ msgstr "Prodaja po vrstah"
#. module: account
#: view:account.analytic.cost.ledger.journal.report:0
msgid "Cost Ledger for Period"
-msgstr ""
+msgstr "Stroški za obdobje"
#. module: account
#: help:account.tax,child_depend:0
@@ -10307,7 +10307,7 @@ msgstr "Urejanje vrst dnevnikov."
#. module: account
#: view:account.payment.term:0
msgid "Description on Invoices"
-msgstr ""
+msgstr "Opis na računih"
#. module: account
#: model:ir.model,name:account.model_account_analytic_chart
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index 3ad8b790323..d722cd5673b 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-10-25 16:26+0000\n"
-"Last-Translator: AllanWong <18895563@qq.com>\n"
+"PO-Revision-Date: 2012-11-01 08:44+0000\n"
+"Last-Translator: ccdos \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: 2012-10-30 05:07+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: account
#: view:account.invoice.report:0
@@ -2330,7 +2330,7 @@ msgstr "筛选"
#: selection:report.invoice.created,state:0
#, python-format
msgid "Open"
-msgstr "打开"
+msgstr "待支付"
#. module: account
#: model:process.node,note:account.process_node_draftinvoices0
@@ -4668,7 +4668,7 @@ msgstr "税适用"
#: model:ir.ui.menu,name:account.menu_eaction_account_moves_sale
#, python-format
msgid "Journal Items"
-msgstr "会计凭证行"
+msgstr "会计凭证明细"
#. module: account
#: code:addons/account/account.py:1095
@@ -9642,7 +9642,7 @@ msgstr "本报表让您打印或产生一个由所有账簿生成的总账"
#: selection:account.account.template,type:0
#: selection:account.entries.report,type:0
msgid "Regular"
-msgstr "定期"
+msgstr "常规科目"
#. module: account
#: view:account.account:0
@@ -10557,7 +10557,7 @@ msgstr "前景"
#. module: account
#: view:account.move.line:0
msgid "Search Journal Items"
-msgstr "搜索分录"
+msgstr "搜索会计凭证明细"
#. module: account
#: help:account.tax,base_sign:0
diff --git a/addons/account/partner.py b/addons/account/partner.py
index a9b2b99588d..3355363308b 100644
--- a/addons/account/partner.py
+++ b/addons/account/partner.py
@@ -209,7 +209,7 @@ class res_partner(osv.osv):
relation='account.fiscal.position',
string="Fiscal Position",
view_load=True,
- help="The fiscal position will determine taxes and the accounts used for the partner.",
+ help="The fiscal position will determine taxes and accounts used for the partner.",
),
'property_payment_term': fields.property(
'account.payment.term',
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index 4bee2002ffd..d17f8c18eee 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -6,7 +6,7 @@
account.fiscal.position.formaccount.fiscal.position
-
-
- Magasin BML 1
+
+ Millennium Industriesnormal
@@ -121,8 +121,8 @@
-
- DistriPC
+
+ Delta PCnormal
@@ -145,8 +145,8 @@
open
-
- Leclerc
+
+ Luminous Technologiesnormal
@@ -161,8 +161,8 @@
-
- OpenERP SA AT Work
+
+ Think Big Systemsnormal
diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml
index d0813edead8..88cf901fdae 100644
--- a/addons/account/project/project_view.xml
+++ b/addons/account/project/project_view.xml
@@ -35,7 +35,6 @@
-
@@ -144,8 +143,8 @@
Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]
+
Filter By [[ get_filter(data)!='No Filters' and get_filter(data) ]]
[[ get_account(data) or removeParentNode('para') ]]
[[ get_fiscalyear(data) or '' ]]
-
[[ get_filter(data)=='No Filter' and get_filter(data) or removeParentNode('para') ]]
+
[[ get_filter(data)=='No Filters' and get_filter(data) or removeParentNode('para') ]] [[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
diff --git a/addons/account/report/account_general_ledger.py b/addons/account/report/account_general_ledger.py
index 294c7fa99cf..38f2392f740 100644
--- a/addons/account/report/account_general_ledger.py
+++ b/addons/account/report/account_general_ledger.py
@@ -299,10 +299,10 @@ class general_ledger(report_sxw.rml_parse, common_report_header):
def _get_sortby(self, data):
if self.sortby == 'sort_date':
- return 'Date'
+ return self._translate('Date')
elif self.sortby == 'sort_journal_partner':
- return 'Journal & Partner'
- return 'Date'
+ return self._translate('Journal & Partner')
+ return self._translate('Date')
report_sxw.report_sxw('report.account.general.ledger', 'account.account', 'addons/account/report/account_general_ledger.rml', parser=general_ledger, header='internal')
report_sxw.report_sxw('report.account.general.ledger_landscape', 'account.account', 'addons/account/report/account_general_ledger_landscape.rml', parser=general_ledger, header='internal landscape')
diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index e352a33d850..289db376e5d 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -42,7 +42,7 @@
-
+
diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml
index 3e8b9b04b62..dd573580c6c 100644
--- a/addons/account/report/account_print_overdue.rml
+++ b/addons/account/report/account_print_overdue.rml
@@ -277,7 +277,7 @@
- [[ getLines(o) and removeParentNode('section')]]There is nothing due with this customer
+ [[ getLines(o) and removeParentNode('section')]]There is nothing due with this customer.
diff --git a/addons/account/report/common_report_header.py b/addons/account/report/common_report_header.py
index c93c3e02ee3..c5719d98b96 100644
--- a/addons/account/report/common_report_header.py
+++ b/addons/account/report/common_report_header.py
@@ -94,10 +94,10 @@ class common_report_header(object):
def _get_filter(self, data):
if data.get('form', False) and data['form'].get('filter', False):
if data['form']['filter'] == 'filter_date':
- return 'Date'
+ return self._translate('Date')
elif data['form']['filter'] == 'filter_period':
- return 'Periods'
- return 'No Filter'
+ return self._translate('Periods')
+ return self._translate('No Filters')
def _sum_debit_period(self, period_id, journal_id=None):
journals = journal_id or self.journal_ids
diff --git a/addons/account/res_config.py b/addons/account/res_config.py
index 41121db20f7..8f525795d1c 100644
--- a/addons/account/res_config.py
+++ b/addons/account/res_config.py
@@ -262,6 +262,7 @@ class account_config_settings(osv.osv_memory):
'sale_tax_rate': config.sale_tax_rate,
'purchase_tax_rate': config.purchase_tax_rate,
'complete_tax_set': config.complete_tax_set,
+ 'currency_id': config.currency_id.id,
}, context)
wizard.execute(cr, uid, [wizard_id], context)
diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml
index d4bafca41be..52c8c8daaa9 100644
--- a/addons/account/res_config_view.xml
+++ b/addons/account/res_config_view.xml
@@ -268,7 +268,7 @@
inline
-
diff --git a/addons/account/static/src/js/account_move_reconciliation.js b/addons/account/static/src/js/account_move_reconciliation.js
index 8e72e24eb22..22fe9b7b392 100644
--- a/addons/account/static/src/js/account_move_reconciliation.js
+++ b/addons/account/static/src/js/account_move_reconciliation.js
@@ -48,7 +48,7 @@ openerp.account = function (instance) {
this.last_group_by = group_by;
this.old_search = _.bind(this._super, this);
var mod = new instance.web.Model("account.move.line", context, domain);
- return mod.call("list_partners_to_reconcile", []).pipe(function(result) {
+ return mod.call("list_partners_to_reconcile", []).then(function(result) {
var current = self.current_partner !== null ? self.partners[self.current_partner][0] : null;
self.partners = result;
var index = _.find(_.range(self.partners.length), function(el) {
@@ -74,7 +74,7 @@ openerp.account = function (instance) {
return fct();
} else {
return new instance.web.Model("res.partner").call("read",
- [self.partners[self.current_partner][0], ["last_reconciliation_date"]]).pipe(function(res) {
+ [self.partners[self.current_partner][0], ["last_reconciliation_date"]]).then(function(res) {
self.last_reconciliation_date =
instance.web.format_value(res.last_reconciliation_date, {"type": "datetime"}, _t("Never"));
return fct();
@@ -92,7 +92,7 @@ openerp.account = function (instance) {
return false;
}
- new instance.web.Model("ir.model.data").call("get_object_reference", ["account", "action_view_account_move_line_reconcile"]).pipe(function(result) {
+ new instance.web.Model("ir.model.data").call("get_object_reference", ["account", "action_view_account_move_line_reconcile"]).then(function(result) {
var additional_context = _.extend({
active_id: ids[0],
active_ids: ids,
@@ -101,7 +101,7 @@ openerp.account = function (instance) {
return self.rpc("/web/action/load", {
action_id: result[1],
context: additional_context
- }).then(function (result) {
+ }).done(function (result) {
result.context = _.extend(result.context || {}, additional_context);
result.flags = result.flags || {};
result.flags.new_window = true;
@@ -116,7 +116,7 @@ openerp.account = function (instance) {
mark_as_reconciled: function() {
var self = this;
var id = self.partners[self.current_partner][0];
- new instance.web.Model("res.partner").call("mark_as_reconciled", [[id]]).pipe(function() {
+ new instance.web.Model("res.partner").call("mark_as_reconciled", [[id]]).then(function() {
self.do_search(self.last_domain, self.last_context, self.last_group_by);
});
},
diff --git a/addons/account/test/account_report.yml b/addons/account/test/account_report.yml
index 64f8ccf838f..7fe3095d47f 100644
--- a/addons/account/test/account_report.yml
+++ b/addons/account/test/account_report.yml
@@ -31,7 +31,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_aged_balance_view',wiz_data=data_dict, context=ctx, our_module='account')
@@ -40,7 +39,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'), 'account_report_id': ref('account_financial_report_balancesheet0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_report',wiz_data=data_dict, context=ctx, our_module='account')
@@ -49,7 +47,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_balance_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -60,7 +57,6 @@
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),
ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
- ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_central_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -71,7 +67,6 @@
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),
ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
- ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -80,7 +75,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'),'landscape':False}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_ledger_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -89,7 +83,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'),'landscape':True}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_general_ledger_menu',wiz_data=data_dict, context=ctx, our_module='account')
@@ -99,7 +92,6 @@
!python {model: account.journal.period}: |
journal_ids = [ref('account.sales_journal'),ref('account.refund_sales_journal'),ref('account.expenses_journal'),ref('account.refund_expenses_journal'),ref('account.bank_journal'),ref('account.check_journal'),ref('account.cash_journal')]
ctx={}
- ctx.update({'model': 'account.journal.period','active_ids':journal_ids})
data_dict = {'chart_account_id':ref('account.chart0'), 'period_from':ref('period_1'), 'period_to':ref('period_12')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_print_journal',wiz_data=data_dict, context=ctx, our_module='account')
@@ -109,7 +101,6 @@
!python {model: account.account}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0')}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_balance',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -118,7 +109,6 @@
!python {model: account.account}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0'),'page_split': True}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_ledger',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -127,7 +117,6 @@
!python {model: res.partner}: |
ctx={}
data_dict = {'chart_account_id':ref('account.chart0'),'page_split': False}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')],'active_id':ref('account.chart0')})
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_partner_ledger',wiz_data=data_dict, context=ctx, our_module='account')
-
@@ -135,7 +124,6 @@
-
!python {model: account.account}: |
ctx={}
- ctx.update({'model': 'account.account','active_ids':[ref('account.chart0')]})
data_dict = {'chart_account_id':ref('account.chart0'), 'target_move': 'all', 'account_report_id': ref('account_financial_report_balancesheet0')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_report',wiz_data=data_dict, context=ctx, our_module='account')
diff --git a/addons/account/tests/__init__.py b/addons/account/tests/__init__.py
new file mode 100644
index 00000000000..11fe4186db6
--- /dev/null
+++ b/addons/account/tests/__init__.py
@@ -0,0 +1,4 @@
+from . import test_tax
+
+fast_suite = [test_tax,
+ ]
diff --git a/addons/account/tests/test_tax.py b/addons/account/tests/test_tax.py
new file mode 100644
index 00000000000..a172a17e30d
--- /dev/null
+++ b/addons/account/tests/test_tax.py
@@ -0,0 +1,49 @@
+from openerp.tests.common import TransactionCase
+
+class TestTax(TransactionCase):
+ """Tests for taxes (account.tax)
+
+ We don't really need at this point to link taxes to tax codes
+ (account.tax.code) nor to companies (base.company) to check computation
+ results.
+ """
+
+ def setUp(self):
+ super(TestTax, self).setUp()
+ self.tax_model = self.registry('account.tax')
+
+ def test_programmatic_tax(self):
+ cr, uid = self.cr, self.uid
+ tax_id = self.tax_model.create(cr, uid, dict(
+ name="Programmatic tax",
+ type='code',
+ python_compute='result = 12.0',
+ python_compute_inv='result = 11.0',
+ ))
+
+ tax_records = self.tax_model.browse(cr, uid, [tax_id])
+ res = self.tax_model.compute_all(cr, uid, tax_records, 50.0, 2)
+
+ tax_detail = res['taxes'][0]
+ self.assertEquals(tax_detail['amount'], 24.0)
+ self.assertEquals(res['total_included'], 124.0)
+
+ def test_percent_tax(self):
+ """Test computations done by a 10 percent tax."""
+ cr, uid = self.cr, self.uid
+ tax_id = self.tax_model.create(cr, uid, dict(
+ name="Percent tax",
+ type='percent',
+ amount='0.1',
+ ))
+
+ tax_records = self.tax_model.browse(cr, uid, [tax_id])
+ res = self.tax_model.compute_all(cr, uid, tax_records, 50.0, 2)
+
+ tax_detail = res['taxes'][0]
+ self.assertEquals(tax_detail['amount'], 10.0)
+ self.assertEquals(res['total_included'], 110.0)
+
+ # now the inverse computation
+ res = self.tax_model.compute_inv(cr, uid, tax_records, 55.0, 2)
+ self.assertEquals(res[0]['amount'], 10.0)
diff --git a/addons/account/wizard/account_financial_report_view.xml b/addons/account/wizard/account_financial_report_view.xml
index 8388284be4a..507809e1961 100644
--- a/addons/account/wizard/account_financial_report_view.xml
+++ b/addons/account/wizard/account_financial_report_view.xml
@@ -14,15 +14,19 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py
index 196c14d3792..dbf815d5218 100644
--- a/addons/account/wizard/account_fiscalyear_close.py
+++ b/addons/account/wizard/account_fiscalyear_close.py
@@ -226,7 +226,7 @@ class account_fiscalyear_close(osv.osv_memory):
for account in obj_acc_account.browse(cr, uid, account_ids, context={'fiscalyear': fy_id}):
balance_in_currency = 0.0
if account.currency_id:
- cr.execute('SELECT sum(amount_currency) as balance_in_currency FROM account_move_line ' \
+ cr.execute('SELECT sum(COALESCE(amount_currency,0.0)) as balance_in_currency FROM account_move_line ' \
'WHERE account_id = %s ' \
'AND ' + query_line + ' ' \
'AND currency_id = %s', (account.id, account.currency_id.id))
diff --git a/addons/account/wizard/account_open_closed_fiscalyear.py b/addons/account/wizard/account_open_closed_fiscalyear.py
index b8d64fac0b5..1b5622a589d 100644
--- a/addons/account/wizard/account_open_closed_fiscalyear.py
+++ b/addons/account/wizard/account_open_closed_fiscalyear.py
@@ -27,7 +27,7 @@ class account_open_closed_fiscalyear(osv.osv_memory):
_description = "Choose Fiscal Year"
_columns = {
'fyear_id': fields.many2one('account.fiscalyear', \
- 'Fiscal Year to Open', required=True, help='Select Fiscal Year which you want to remove entries for its End of year entries journal'),
+ 'Fiscal Year', required=True, help='Select Fiscal Year which you want to remove entries for its End of year entries journal'),
}
def remove_entries(self, cr, uid, ids, context=None):
@@ -36,7 +36,7 @@ class account_open_closed_fiscalyear(osv.osv_memory):
data = self.browse(cr, uid, ids, context=context)[0]
period_journal = data.fyear_id.end_journal_period_id or False
if not period_journal:
- raise osv.except_osv(_('Error!'), _('You have to set the end of the fiscal year for this journal.'))
+ raise osv.except_osv(_('Error!'), _("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'."))
ids_move = move_obj.search(cr, uid, [('journal_id','=',period_journal.journal_id.id),('period_id','=',period_journal.period_id.id)])
if ids_move:
diff --git a/addons/account/wizard/account_open_closed_fiscalyear_view.xml b/addons/account/wizard/account_open_closed_fiscalyear_view.xml
index c2c271af41b..d4cfd398920 100644
--- a/addons/account/wizard/account_open_closed_fiscalyear_view.xml
+++ b/addons/account/wizard/account_open_closed_fiscalyear_view.xml
@@ -5,14 +5,18 @@
account.open.closed.fiscalyear.formaccount.open.closed.fiscalyear
-
diff --git a/addons/account/wizard/account_report_account_balance_view.xml b/addons/account/wizard/account_report_account_balance_view.xml
index b2c8ccd3011..3609ee3b4de 100644
--- a/addons/account/wizard/account_report_account_balance_view.xml
+++ b/addons/account/wizard/account_report_account_balance_view.xml
@@ -9,8 +9,7 @@
-
-
+
diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py
index 9acc09e9026..4438484aaaf 100644
--- a/addons/account/wizard/account_report_common.py
+++ b/addons/account/wizard/account_report_common.py
@@ -119,7 +119,11 @@ class account_common_report(osv.osv_memory):
def _get_fiscalyear(self, cr, uid, context=None):
now = time.strftime('%Y-%m-%d')
- fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, [('date_start', '<', now), ('date_stop', '>', now)], limit=1 )
+ company_id = False
+ ids = context.get('active_ids', [])
+ if ids:
+ company_id = self.browse(cr, uid, ids[0], context=context).company_id.id
+ fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, [('date_start', '<', now), ('date_stop', '>', now), ('company_id', '=', company_id)], limit=1)
return fiscalyears and fiscalyears[0] or False
def _get_all_journal(self, cr, uid, context=None):
diff --git a/addons/account_accountant/account_accountant_data.xml b/addons/account_accountant/account_accountant_data.xml
index e02db45fcd8..c7d6eb80bc6 100644
--- a/addons/account_accountant/account_accountant_data.xml
+++ b/addons/account_accountant/account_accountant_data.xml
@@ -5,6 +5,7 @@
+
@@ -25,12 +26,10 @@
mail.groupnotification
+ Accounting and Finance application installed!
- The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.
- ]]>
+ With OpenERP's accounting, you get instant access to your financial data, and can setup analytic accounting, forecast taxes, control budgets, easily create and send invoices, record bank statements, etc.
+
The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.
]]>
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
index d56b6ee4760..9eb8fe90895 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
@@ -3,13 +3,21 @@
- Time & Costs to Invoice
+ Time & Materials to Invoiceaccount.analytic.lineformtree,form[('invoice_id','=',False)]{'search_default_to_invoice': 1}
+
+
+ You will find here timesheets and purchases you did for
+ contracts that can be reinvoiced to the customer. If you want
+ to record new activities to invoice, you should use the timesheet
+ menu instead.
+
+
diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py
index 213d055f8de..0af606821ce 100644
--- a/addons/account_analytic_default/__openerp__.py
+++ b/addons/account_analytic_default/__openerp__.py
@@ -38,7 +38,7 @@ Allows to automatically select analytic accounts based on criterions:
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'images': ['images/analytic_defaults.jpeg'],
- 'depends': ['sale'],
+ 'depends': ['sale_stock'],
'data': [
'security/ir.model.access.csv',
'security/account_analytic_default_security.xml',
diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml
index 76d6aeed7b8..e5c02c8640e 100644
--- a/addons/account_analytic_plans/account_analytic_plans_view.xml
+++ b/addons/account_analytic_plans/account_analytic_plans_view.xml
@@ -21,17 +21,17 @@
-
+
-
+
-
+
@@ -276,7 +276,7 @@
-
+ account.analytic.default.tree.plansaccount.analytic.default
diff --git a/addons/account_anglo_saxon/invoice.py b/addons/account_anglo_saxon/invoice.py
index 693283b870b..26271015b7e 100644
--- a/addons/account_anglo_saxon/invoice.py
+++ b/addons/account_anglo_saxon/invoice.py
@@ -40,7 +40,7 @@ class account_invoice_line(osv.osv):
if inv.type in ('out_invoice','out_refund'):
for i_line in inv.invoice_line:
- if i_line.product_id:
+ if i_line.product_id and i_line.product_id.valuation == 'real_time':
if inv.type == 'out_invoice':
# debit account dacc will be the output account
# first check the product, if empty check the category
@@ -87,7 +87,7 @@ class account_invoice_line(osv.osv):
})
elif inv.type in ('in_invoice','in_refund'):
for i_line in inv.invoice_line:
- if i_line.product_id:
+ if i_line.product_id and i_line.product_id.valuation == 'real_time':
if i_line.product_id.type != 'service':
# get the price difference account at the product
acc = i_line.product_id.property_account_creditor_price_difference and i_line.product_id.property_account_creditor_price_difference.id
diff --git a/addons/account_anglo_saxon/product.py b/addons/account_anglo_saxon/product.py
index a2a5f7e6e95..87ca24753d6 100644
--- a/addons/account_anglo_saxon/product.py
+++ b/addons/account_anglo_saxon/product.py
@@ -38,14 +38,14 @@ class product_category(osv.osv):
relation='account.account',
string="Income Account",
view_load=True,
- help="This account will be used to value outgoing stock for the current product category using sale price"),
+ help="This account will be used to value outgoing stock using sale price."),
'property_account_expense_categ': fields.property(
'account.account',
type='many2one',
relation='account.account',
string="Expense Account",
view_load=True,
- help="This account will be used to value outgoing stock for the current product category using cost price"),
+ help="This account will be used to value outgoing stock using cost price."),
}
product_category()
@@ -68,14 +68,14 @@ class product_template(osv.osv):
relation='account.account',
string="Income Account",
view_load=True,
- help="This account will be used to value outgoing stock for the current product category using sale price"),
+ help="This account will be used to value outgoing stock using sale price."),
'property_account_expense': fields.property(
'account.account',
type='many2one',
relation='account.account',
string="Expense Account",
view_load=True,
- help="This account will be used to value outgoing stock for the current product category using cost price"),
+ help="This account will be used to value outgoing stock using cost price."),
}
product_template()
diff --git a/addons/account_anglo_saxon/product_view.xml b/addons/account_anglo_saxon/product_view.xml
index 4acc69b7595..43029616c5b 100644
--- a/addons/account_anglo_saxon/product_view.xml
+++ b/addons/account_anglo_saxon/product_view.xml
@@ -29,10 +29,10 @@
product.category.property.form.inherit.stockproduct.category
-
+
-
+
diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py
index 585798a5235..a44226e76c8 100644
--- a/addons/account_asset/account_asset.py
+++ b/addons/account_asset/account_asset.py
@@ -134,10 +134,11 @@ class account_asset_asset(osv.osv):
def compute_depreciation_board(self, cr, uid, ids, context=None):
depreciation_lin_obj = self.pool.get('account.asset.depreciation.line')
+ currency_obj = self.pool.get('res.currency')
for asset in self.browse(cr, uid, ids, context=context):
if asset.value_residual == 0.0:
continue
- posted_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_check', '=', True)])
+ posted_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_check', '=', True)],order='depreciation_date desc')
old_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_id', '=', False)])
if old_depreciation_line_ids:
depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context)
@@ -148,7 +149,12 @@ class account_asset_asset(osv.osv):
else:
# depreciation_date = 1st January of purchase year
purchase_date = datetime.strptime(asset.purchase_date, '%Y-%m-%d')
- depreciation_date = datetime(purchase_date.year, 1, 1)
+ #if we already have some previous validated entries, starting date isn't 1st January but last entry + method period
+ if (len(posted_depreciation_line_ids)>0):
+ last_depreciation_date = datetime.strptime(depreciation_lin_obj.browse(cr,uid,posted_depreciation_line_ids[0],context=context).depreciation_date, '%Y-%m-%d')
+ depreciation_date = (last_depreciation_date+relativedelta(months=+asset.method_period))
+ else:
+ depreciation_date = datetime(purchase_date.year, 1, 1)
day = depreciation_date.day
month = depreciation_date.month
year = depreciation_date.year
@@ -158,6 +164,10 @@ class account_asset_asset(osv.osv):
for x in range(len(posted_depreciation_line_ids), undone_dotation_number):
i = x + 1
amount = self._compute_board_amount(cr, uid, asset, i, residual_amount, amount_to_depr, undone_dotation_number, posted_depreciation_line_ids, total_days, depreciation_date, context=context)
+ company_currency = asset.company_id.currency_id.id
+ current_currency = asset.currency_id.id
+ # compute amount into company currency
+ amount = currency_obj.compute(cr, uid, current_currency, company_currency, amount, context=context)
residual_amount -= amount
vals = {
'amount': amount,
@@ -191,7 +201,7 @@ class account_asset_asset(osv.osv):
def _amount_residual(self, cr, uid, ids, name, args, context=None):
cr.execute("""SELECT
- l.asset_id as id, round(SUM(abs(l.debit-l.credit))) AS amount
+ l.asset_id as id, SUM(abs(l.debit-l.credit)) AS amount
FROM
account_move_line l
WHERE
@@ -349,8 +359,8 @@ class account_asset_depreciation_line(osv.osv):
'sequence': fields.integer('Sequence', required=True),
'asset_id': fields.many2one('account.asset.asset', 'Asset', required=True),
'parent_state': fields.related('asset_id', 'state', type='char', string='State of Asset'),
- 'amount': fields.float('Depreciation Amount', required=True),
- 'remaining_value': fields.float('Amount to Depreciate', required=True),
+ 'amount': fields.float('Depreciation Amount', digits_compute=dp.get_precision('Account'), required=True),
+ 'remaining_value': fields.float('Amount to Depreciate', digits_compute=dp.get_precision('Account'),required=True),
'depreciated_value': fields.float('Amount Already Depreciated', required=True),
'depreciation_date': fields.date('Depreciation Date', select=1),
'move_id': fields.many2one('account.move', 'Depreciation Entry'),
@@ -367,16 +377,15 @@ class account_asset_depreciation_line(osv.osv):
move_line_obj = self.pool.get('account.move.line')
currency_obj = self.pool.get('res.currency')
created_move_ids = []
+ asset_ids = []
for line in self.browse(cr, uid, ids, context=context):
- if currency_obj.is_zero(cr, uid, line.asset_id.currency_id, line.remaining_value):
- can_close = True
depreciation_date = time.strftime('%Y-%m-%d')
period_ids = period_obj.find(cr, uid, depreciation_date, context=context)
company_currency = line.asset_id.company_id.currency_id.id
current_currency = line.asset_id.currency_id.id
context.update({'date': depreciation_date})
amount = currency_obj.compute(cr, uid, current_currency, company_currency, line.amount, context=context)
- sign = line.asset_id.category_id.journal_id.type = 'purchase' and 1 or -1
+ sign = (line.asset_id.category_id.journal_id.type == 'purchase' and 1) or -1
asset_name = line.asset_id.name
reference = line.name
move_vals = {
@@ -399,8 +408,8 @@ class account_asset_depreciation_line(osv.osv):
'period_id': period_ids and period_ids[0] or False,
'journal_id': journal_id,
'partner_id': partner_id,
- 'currency_id': company_currency <> current_currency and current_currency or False,
- 'amount_currency': company_currency <> current_currency and - sign * line.amount or 0.0,
+ 'currency_id': company_currency != current_currency and current_currency or False,
+ 'amount_currency': company_currency != current_currency and - sign * line.amount or 0.0,
'date': depreciation_date,
})
move_line_obj.create(cr, uid, {
@@ -413,16 +422,19 @@ class account_asset_depreciation_line(osv.osv):
'period_id': period_ids and period_ids[0] or False,
'journal_id': journal_id,
'partner_id': partner_id,
- 'currency_id': company_currency <> current_currency and current_currency or False,
- 'amount_currency': company_currency <> current_currency and sign * line.amount or 0.0,
+ 'currency_id': company_currency != current_currency and current_currency or False,
+ 'amount_currency': company_currency != current_currency and sign * line.amount or 0.0,
'analytic_account_id': line.asset_id.category_id.account_analytic_id.id,
'date': depreciation_date,
'asset_id': line.asset_id.id
})
self.write(cr, uid, line.id, {'move_id': move_id}, context=context)
created_move_ids.append(move_id)
- if can_close:
- asset_obj.write(cr, uid, [line.asset_id.id], {'state': 'close'}, context=context)
+ asset_ids.append(line.asset_id.id)
+ # we re-evaluate the assets to determine whether we can close them
+ for asset in asset_obj.browse(cr, uid, list(set(asset_ids)), context=context):
+ if currency_obj.is_zero(cr, uid, asset.currency_id, asset.value_residual):
+ asset.write({'state': 'close'})
return created_move_ids
account_asset_depreciation_line()
diff --git a/addons/account_bank_statement_extensions/account_bank_statement.py b/addons/account_bank_statement_extensions/account_bank_statement.py
index 6eeda843dc5..3d097d3c757 100644
--- a/addons/account_bank_statement_extensions/account_bank_statement.py
+++ b/addons/account_bank_statement_extensions/account_bank_statement.py
@@ -105,8 +105,7 @@ account_bank_statement_line_global()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
_columns = {
- 'date': fields.date('Entry Date', required=True, states={'confirm': [('readonly', True)]}),
- 'val_date': fields.date('Valuta Date', states={'confirm': [('readonly', True)]}),
+ 'val_date': fields.date('Value Date', states={'confirm': [('readonly', True)]}),
'globalisation_id': fields.many2one('account.bank.statement.line.global', 'Globalisation ID',
states={'confirm': [('readonly', True)]},
help="Code to identify transactions belonging to the same globalisation level within a batch payment"),
diff --git a/addons/account_bank_statement_extensions/account_bank_statement_view.xml b/addons/account_bank_statement_extensions/account_bank_statement_view.xml
index 9164c00373f..adc2963c803 100644
--- a/addons/account_bank_statement_extensions/account_bank_statement_view.xml
+++ b/addons/account_bank_statement_extensions/account_bank_statement_view.xml
@@ -72,12 +72,12 @@
-
+
-
-
+
+
@@ -100,8 +100,8 @@
-
-
+
+
@@ -148,7 +148,7 @@
Bank Statement Linesaccount.bank.statement.lineform
- tree,graph,form
+ tree,form{'block_statement_line_delete' : 1}
diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml
index fdc358f5c98..35194e96b82 100644
--- a/addons/account_budget/account_budget_view.xml
+++ b/addons/account_budget/account_budget_view.xml
@@ -220,7 +220,17 @@
-
+
+
+ account.budget.line.search
+ crossovered.budget.lines
+
+
+
+
+
+
+
crossovered.budget.line.treecrossovered.budget.lines
@@ -284,13 +294,13 @@
- account.analytic.account.form.inherot.budget
+ account.analytic.account.form.inherit.budgetaccount.analytic.account
-
+
@@ -310,11 +320,6 @@
-
-
-
-
-
diff --git a/addons/account_check_writing/i18n/es.po b/addons/account_check_writing/i18n/es.po
index 81932642524..c473e077210 100644
--- a/addons/account_check_writing/i18n/es.po
+++ b/addons/account_check_writing/i18n/es.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 00:35+0000\n"
-"PO-Revision-Date: 2012-02-09 19:28+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2012-11-09 12:09+0000\n"
+"Last-Translator: Pedro Manuel Baeza \n"
"Language-Team: Spanish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 05:36+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-10 04:59+0000\n"
+"X-Generator: Launchpad (build 16251)\n"
#. module: account_check_writing
#: selection:res.company,check_layout:0
@@ -154,7 +154,7 @@ msgstr "Compañías"
#. module: account_check_writing
#: view:res.company:0
msgid "Default Check Layout"
-msgstr ""
+msgstr "Comprobar formato por defecto"
#. module: account_check_writing
#: constraint:account.journal:0
diff --git a/addons/account_check_writing/i18n/lt.po b/addons/account_check_writing/i18n/lt.po
new file mode 100644
index 00000000000..35e98d451ad
--- /dev/null
+++ b/addons/account_check_writing/i18n/lt.po
@@ -0,0 +1,199 @@
+# Lithuanian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-11-16 06:33+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Lithuanian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-11-17 04:37+0000\n"
+"X-Generator: Launchpad (build 16278)\n"
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check on Top"
+msgstr ""
+
+#. module: account_check_writing
+#: model:ir.actions.act_window,help:account_check_writing.action_write_check
+msgid ""
+"The check payment form allows you to track the payment you do to your "
+"suppliers specially by check. When you select a supplier, the payment method "
+"and an amount for the payment, OpenERP will propose to reconcile your "
+"payment with the open supplier invoices or bills.You can print the check"
+msgstr ""
+
+#. module: account_check_writing
+#: view:account.voucher:0
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_bottom
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_middle
+#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_top
+msgid "Print Check"
+msgstr ""
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check in middle"
+msgstr ""
+
+#. module: account_check_writing
+#: help:res.company,check_layout:0
+msgid ""
+"Check on top is compatible with Quicken, QuickBooks and Microsoft Money. "
+"Check in middle is compatible with Peachtree, ACCPAC and DacEasy. Check on "
+"bottom is compatible with Peachtree, ACCPAC and DacEasy only"
+msgstr ""
+
+#. module: account_check_writing
+#: selection:res.company,check_layout:0
+msgid "Check on bottom"
+msgstr ""
+
+#. module: account_check_writing
+#: constraint:res.company:0
+msgid "Error! You can not create recursive companies."
+msgstr ""
+
+#. module: account_check_writing
+#: help:account.journal,allow_check_writing:0
+msgid "Check this if the journal is to be used for writing checks."
+msgstr ""
+
+#. module: account_check_writing
+#: field:account.journal,allow_check_writing:0
+msgid "Allow Check writing"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Description"
+msgstr "Aprašas"
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_account_journal
+msgid "Journal"
+msgstr "Žurnalas"
+
+#. module: account_check_writing
+#: model:ir.actions.act_window,name:account_check_writing.action_write_check
+#: model:ir.ui.menu,name:account_check_writing.menu_action_write_check
+msgid "Write Checks"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Discount"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Original Amount"
+msgstr ""
+
+#. module: account_check_writing
+#: view:res.company:0
+msgid "Configuration"
+msgstr ""
+
+#. module: account_check_writing
+#: field:account.voucher,allow_check:0
+msgid "Allow Check Writing"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Payment"
+msgstr ""
+
+#. module: account_check_writing
+#: field:account.journal,use_preprint_check:0
+msgid "Use Preprinted Check"
+msgstr ""
+
+#. module: account_check_writing
+#: sql_constraint:res.company:0
+msgid "The company name must be unique !"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Due Date"
+msgstr ""
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: account_check_writing
+#: view:res.company:0
+msgid "Default Check Layout"
+msgstr ""
+
+#. module: account_check_writing
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+msgid "Balance Due"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.bottom:0
+#: report:account.print.check.middle:0
+#: report:account.print.check.top:0
+msgid "Check Amount"
+msgstr ""
+
+#. module: account_check_writing
+#: model:ir.model,name:account_check_writing.model_account_voucher
+msgid "Accounting Voucher"
+msgstr ""
+
+#. module: account_check_writing
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr ""
+
+#. module: account_check_writing
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr ""
+
+#. module: account_check_writing
+#: field:account.voucher,amount_in_word:0
+msgid "Amount in Word"
+msgstr ""
+
+#. module: account_check_writing
+#: report:account.print.check.top:0
+msgid "Open Balance"
+msgstr ""
+
+#. module: account_check_writing
+#: field:res.company,check_layout:0
+msgid "Choose Check layout"
+msgstr ""
diff --git a/addons/account_coda/i18n/en_AU.po b/addons/account_coda/i18n/en_AU.po
deleted file mode 100644
index 319220741c5..00000000000
--- a/addons/account_coda/i18n/en_AU.po
+++ /dev/null
@@ -1,3739 +0,0 @@
-# English (Australia) translation for openobject-addons
-# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-09-27 03:22+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: English (Australia) \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-09-28 04:39+0000\n"
-"X-Generator: Launchpad (build 16043)\n"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_21
-msgid "Cash withdrawal on card (PROTON)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_412
-msgid "Advice of expiry charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_11
-msgid "Your purchase of luncheon vouchers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_05
-msgid "Partial payment subscription"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_54
-msgid "Unexecutable transfer order"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_02
-msgid "Individual transfer order initiated by the bank"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_21
-msgid "Charges for preparing pay packets"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_9
-msgid "Detail of 7. The records in a separate application keep type 9."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_426
-msgid "Belgian broker's commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_031
-msgid "Charges foreign cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_002
-msgid "Interest paid"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.type,parent_id:0
-msgid "Parent"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_62
-msgid ""
-"cheques debited on account, but debit cancelled afterwards for lack of cover "
-"(double debit/contra-entry of transaction 01 or 05)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_05
-msgid "Bill claimed back"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_016
-msgid "BLIW/IBLC dues"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:911
-#, python-format
-msgid "CODA File is Imported :"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_066
-msgid "Fixed loan advance - reimbursement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_05
-msgid "Purchase of foreign bank notes"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:277
-#: code:addons/account_coda/wizard/account_coda_import.py:469
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid CODA Transaction Family : %s!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_030
-msgid "Account insurance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_042
-msgid "Payment card costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_212
-msgid "Warehousing fee"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:300
-#, python-format
-msgid ""
-"Cannot delete CODA Bank Statement '%s' of Journal '%s'.\n"
-"The associated Bank Statement has already been confirmed !\n"
-"Please undo this action first!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_66
-msgid "Financial centralization"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_420
-msgid "Retention charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_50
-msgid "Transfer in your favour"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_87
-#: model:account.coda.trans.code,description:account_coda.actcc_04_87
-#: model:account.coda.trans.code,description:account_coda.actcc_05_87
-#: model:account.coda.trans.code,description:account_coda.actcc_07_87
-#: model:account.coda.trans.code,description:account_coda.actcc_09_87
-#: model:account.coda.trans.code,description:account_coda.actcc_11_87
-#: model:account.coda.trans.code,description:account_coda.actcc_13_87
-#: model:account.coda.trans.code,description:account_coda.actcc_30_87
-#: model:account.coda.trans.code,description:account_coda.actcc_35_87
-#: model:account.coda.trans.code,description:account_coda.actcc_41_87
-#: model:account.coda.trans.code,description:account_coda.actcc_43_87
-#: model:account.coda.trans.code,description:account_coda.actcc_47_87
-msgid "Reimbursement of costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_56
-msgid "Remittance of supplier's bill with guarantee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_002
-msgid "Communication of the bank"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,amount:0
-msgid "Amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_70
-msgid "Only with stockbrokers when they deliver the securities to the bank"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_413
-msgid "Acceptance charges"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_bic:0
-msgid "Counterparty BIC"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,def_receivable:0
-msgid ""
-"Set here the receivable account that will be used, by default, if the "
-"partner is not found."
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,def_payable:0
-msgid ""
-"Set here the payable account that will be used, by default, if the partner "
-"is not found."
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:144
-#, python-format
-msgid "Warning !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_39
-msgid "Return of an irregular bill of exchange"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_011
-msgid "VAT"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_09
-msgid "Debit of the agios to the account of the drawee"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.comm.type:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_comm_type_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_comm_type_form
-msgid "CODA Structured Communication Types"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_50
-msgid "Spot sale of foreign exchange"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,ref:0
-msgid "Reference"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_58
-msgid "Remittance of supplier's bill without guarantee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_03
-msgid "Payment receipt card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_207
-msgid "Non-conformity fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_022
-msgid "Priority costs"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:268
-#: code:addons/account_coda/wizard/account_coda_import.py:460
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid CODA Transaction Type : %s!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_045
-msgid "Handling costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_47_13
-msgid "Debit customer, payment of agios, interest, exchange commission, etc."
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda,date:0
-msgid "Import Date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_039
-msgid "Telecommunications"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_id:0
-msgid "Globalisation ID"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:399
-#, python-format
-msgid "Delete operation not allowed !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_000
-msgid "Net amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_11
-msgid "Department store cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_206
-msgid "Surety fee/payment under reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_53
-msgid "Cash deposit at an ATM"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_52
-msgid "Forward sale of foreign exchange"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_05
-msgid ""
-"Debit of the subscriber for the complementary payment of partly-paid shares"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_bank_statement_line_global
-msgid "Batch Payment Info"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_33
-#: model:account.coda.trans.code,description:account_coda.actcc_00_83
-msgid "Value correction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_27
-msgid "For publications of the financial institution"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_01
-msgid "Payment of foreign bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_024
-msgid "Growth premium"
-msgstr ""
-
-#. module: account_coda
-#: selection:account.coda.trans.code,type:0
-msgid "Transaction Code"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_13
-msgid "Discount foreign supplier's bills"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_05
-msgid "Direct debit"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_47_11
-msgid "Bills of lading"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_00
-msgid "Undefined transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_62
-msgid "When reimbursed separately to the subscriber"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.category:0
-msgid "CODA Transaction Category"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_067
-msgid "Fixed loan advance - extension"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_07
-msgid "Your repayment instalment credits"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_13
-msgid "On the account of the head office"
-msgstr ""
-
-#. module: account_coda
-#: constraint:account.bank.statement:0
-msgid "The journal and period chosen have to belong to the same company."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_115
-msgid "Terminal cash deposit"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:301
-#: code:addons/account_coda/wizard/account_coda_import.py:493
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid Structured Communication Type : %s!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_43_01
-msgid ""
-"Debit of a cheque in foreign currency or in EUR in favour of a foreigner"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_54
-msgid "Discount abroad"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_62
-msgid "Remittance of documents abroad - credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,name:0
-msgid "Communication"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_35
-#: model:account.coda.trans.code,description:account_coda.actcc_00_85
-msgid "Correction"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:404
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" No partner record assigned: There are multiple partners with the "
-"same Bank Account Number '%s'!\n"
-" Please correct the configuration and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_33
-#: model:account.coda.trans.code,description:account_coda.actcc_30_83
-msgid "Value (date) correction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_063
-msgid "Rounding differences"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:295
-#: code:addons/account_coda/wizard/account_coda_import.py:487
-#, python-format
-msgid "Transaction Category unknown, please consult your bank."
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.code:0
-msgid "CODA Transaction Code"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_052
-msgid "Residence state tax"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_17
-msgid "Amount of the cheque; if any, charges receive code 37"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "Additional Information"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_120
-msgid "Correction of a transaction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_64
-#: model:account.coda.trans.code,description:account_coda.actcc_41_64
-msgid "Transfer to your account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_124
-msgid "Number of the credit card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_13
-msgid "Renting of safes"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,find_bbacom:0
-msgid ""
-"Partner lookup via the 'BBA' Structured Communication field of the Invoice."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_104
-msgid "Equivalent in EUR"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_50
-msgid "Remittance of foreign bill credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_03
-msgid "Your purchase by payment card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_1
-msgid ""
-"Amount as totalised by the customer; e.g. a file regrouping payments of "
-"wages or payments made to suppliers or a file regrouping collections for "
-"which the customer is debited or credited with one single amount. As a "
-"matter of principle, this type is also used when no detailed data is "
-"following (type 5)."
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:519
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on information data record 3.3, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Credit Transactions."
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.type,type:0
-msgid "Transaction Type"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda
-msgid "Object to store CODA Data Files"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_029
-msgid "Protest charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_053
-#: model:account.coda.trans.code,description:account_coda.actcc_80_43
-msgid "Printing of forms"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_003
-msgid "Credit commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_58
-msgid "Remittance of foreign cheque credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_8
-msgid "Detail of 3."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_05_58
-msgid ""
-"(cancellation of an undue debit of the debtor at the initiative of the "
-"financial institution or the debtor for lack of cover)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_11
-msgid "Payable coupons/repayable securities"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_50
-msgid "Sale of securities"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_51
-msgid "Transfer in your favour – initiated by the bank"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,coda_data:0
-#: field:account.coda.import,coda_data:0
-msgid "CODA File"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_38
-msgid "Provisionally unpaid"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_003
-msgid "RBP data"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_06
-msgid "Share option plan – exercising an option"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_051
-msgid "Withholding tax"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_006
-msgid "Information concerning the detail amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_37
-msgid "Costs relating to payment of foreign cheques"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.code,parent_id:0
-msgid "Family"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_66
-msgid "Retrocession of issue commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_68
-msgid "Credit after Proton payments"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement,period_id:0
-msgid "Period"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:588
-#: code:addons/account_coda/wizard/account_coda_import.py:926
-#, python-format
-msgid "CODA Import failed !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_01
-msgid ""
-"Withdrawal by counter cheque or receipt; cash remitted by the bank clerk"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_01
-msgid "Short-term loan"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_01
-msgid "Domestic or local SEPA credit transfers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_03
-msgid "Settlement credit cards"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_402
-msgid "Certification costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_015
-msgid "Correspondent charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_415
-#: model:account.coda.trans.code,description:account_coda.actcc_80_39
-msgid "Surety fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_017
-#: model:account.coda.trans.code,description:account_coda.actcc_80_23
-#: model:account.coda.trans.code,description:account_coda.actcc_80_41
-msgid "Research costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_07
-msgid "Collective transfer"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:912
-#, python-format
-msgid ""
-"\n"
-"\n"
-"Number of statements : "
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_05
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_07
-msgid ""
-"The principal will be debited for the total amount of the file entered."
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:332
-#: code:addons/account_coda/wizard/account_coda_import.py:357
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on movement data record 2.3, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_52
-msgid "Payment in your favour"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_08
-msgid "Registering compensation for savings accounts"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_51
-msgid "Company issues paper in return for cash"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,journal:0
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement,journal_id:0
-msgid "Journal"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_19
-msgid "Settlement of credit cards"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_87
-msgid "Reimbursement of cheque-related costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_50
-msgid "Settlement of instalment credit"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_52
-msgid "Payment by a third person"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_60
-msgid "Remittance of documents abroad - credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_52
-msgid "Loading GSM cards"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-#: field:coda.bank.statement.line,note:0
-msgid "Notes"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_end_real:0
-msgid "Ending Balance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_64
-msgid "Your issue"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:870
-#, python-format
-msgid ""
-"\n"
-"\n"
-"Bank Journal: %s\n"
-"CODA Version: %s\n"
-"CODA Sequence Number: %s\n"
-"Paper Statement Sequence Number: %s\n"
-"Bank Account: %s\n"
-"Account Holder Name: %s\n"
-"Date: %s, Starting Balance: %.2f, Ending Balance: %.2f%s"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,val_date:0
-msgid "Valuta Date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_01
-msgid ""
-"Purchase of domestic or foreign securities, including subscription rights, "
-"certificates, etc."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_38
-msgid "Costs relating to incoming foreign and non-SEPA transfers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_52
-msgid "Whatever the currency of the security"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_069
-msgid "Forward arbitrage contracts : sum to be supplied by customer"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:388
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" There is no invoice matching the Structured Communication '%s'!\n"
-" Please verify and adjust the invoice and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_407
-msgid "Costs Article 45"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_007
-msgid "Information concerning the detail cash"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,company_id:0
-#: field:coda.bank.account,company_id:0
-#: field:coda.bank.statement,company_id:0
-#: field:coda.bank.statement.line,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_35
-msgid "Cash advance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_47
-msgid "Foreign commercial paper"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_15
-msgid ""
-"Hire-purchase agreement under which the financial institution is the lessor"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_66
-msgid "Remittance of cheque by your branch - credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_50
-msgid "Credit of the remitter"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.category,category:0
-msgid "Transaction Category"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda,statement_ids:0
-msgid "Generated CODA Bank Statements"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_09
-msgid "Purchase of petrol coupons"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_52
-msgid "Remittance of foreign bill credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_061
-#: model:account.coda.trans.code,description:account_coda.actcc_80_47
-msgid "Charging fees for transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_category
-msgid "CODA transaction category"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_21
-msgid "Other credit applications"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Supplier"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_009
-msgid "Travelling expenses"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_30
-msgid "Various transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_406
-msgid "Collection charges"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_50
-msgid "Cash payment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_27
-msgid "Subscription fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_036
-msgid "Costs relating to a refused cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_101
-msgid "Credit transfer or cash payment with structured format communication"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_127
-msgid "European direct debit (SEPA)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_068
-msgid "Countervalue of an entry"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_010
-#: model:account.coda.trans.code,description:account_coda.actcc_80_31
-msgid "Writ service fee"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:635
-#, python-format
-msgid ""
-"\n"
-"The CODA Statement %s Starting Balance (%.2f) does not correspond with the "
-"previous Closing Balance (%.2f) in journal %s!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_13
-msgid "Your repurchase of issue"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_409
-msgid "Safe deposit charges"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,def_payable:0
-msgid "Default Payable Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_055
-msgid "Repayment loan or credit capital"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_05
-msgid "Settlement of fixed advance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_15
-msgid ""
-"Commission collected to the debit of the customer to whom the bank delivers "
-"a key which gives access to the night safe"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_059
-msgid "Default interest"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,coda_st_naming:0
-msgid ""
-"Define the rules to create the name of the Bank Statements generated by the "
-"CODA processing.\n"
-"E.g. %(code)s%(y)s/%(paper)s\n"
-"\n"
-"Variables:\n"
-"Bank Journal Code: %(code)s\n"
-"Current Year with Century: %(year)s\n"
-"Current Year without Century: %(y)s\n"
-"CODA sequence number: %(coda)s\n"
-"Paper Statement sequence number: %(paper)s"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_108
-#: model:account.coda.trans.code,description:account_coda.actcc_35_01
-#: model:account.coda.trans.code,description:account_coda.actcc_35_50
-msgid "Closing"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.statement.line,globalisation_id:0
-msgid ""
-"Code to identify transactions belonging to the same globalisation level "
-"within a batch payment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_05
-msgid "Commercial paper claimed back"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_411
-msgid "Fixed collection charge"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_64
-msgid "Your winning lottery ticket"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_009
-msgid ""
-"Identification of the de ultimate ordering customer/debtor (SEPA SCT/SDD)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_05
-msgid "Card charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_03
-msgid "Payment card charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_54
-msgid "Remittance of commercial paper for discount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_01
-msgid "Payment"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "_Cancel"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_07
-msgid "Purchase of gold/pieces"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_15
-msgid "Balance due insurance premium"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_11
-msgid "Debit of the issuer by the bank in charge of the financial service"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_58
-msgid "Remittance of cheques, vouchers, etc. credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_19
-#: model:account.coda.trans.code,description:account_coda.actcc_09_68
-msgid "Difference in payment"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,date:0
-msgid "Entry Date"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:193
-#, python-format
-msgid ""
-"\n"
-"Please check if the 'Bank Account Number', 'Currency' and 'Account "
-"Description' fields of your configuration record match with '%s', '%s' and "
-"'%s' !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_58
-msgid "Idem without guarantee"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:139
-#, python-format
-msgid ""
-"\n"
-"CODA File with Filename '%s' and Creation Date '%s' has already been "
-"imported !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_63
-msgid "Second credit of unpaid cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_065
-msgid "Interest payment advice"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.code,type:0
-#: field:coda.bank.account,state:0
-#: field:coda.bank.statement,type:0
-#: field:coda.bank.statement.line,type:0
-msgid "Type"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_112
-msgid "ATM payment (usually Eurocheque card)"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,description1:0
-msgid "Primary Account Description"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_126
-msgid "Term investments"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_100
-msgid ""
-"(SEPA) payment with a structured format communication applying the ISO "
-"standard 11649: Structured creditor reference to remittan"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:164
-#, python-format
-msgid ""
-"\n"
-"Foreign bank accounts with IBAN structure are not supported !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_100
-msgid "Gross amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_62
-msgid "Reversal of cheques"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:299
-#, python-format
-msgid "Invalid action !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_64
-#: model:account.coda.trans.code,comment:account_coda.actcc_41_13
-#: model:account.coda.trans.code,comment:account_coda.actcc_41_64
-msgid "Intracompany"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_01
-msgid "Spot purchase of foreign exchange"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_429
-msgid "Foreign Stock Exchange tax"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_05
-#: model:account.coda.trans.code,description:account_coda.actcc_05_54
-msgid "Reimbursement"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:868
-#, python-format
-msgid "None"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_405
-msgid "Bill guarantee commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_06
-msgid "Extension"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_008
-msgid "Identification of the de ultimate beneficiary/creditor (SEPA SCT/SDD)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_49
-msgid "Foreign counter transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_01
-msgid "Cash withdrawal"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,partner_id:0
-msgid "Partner"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_37
-msgid ""
-"Fixed right, either one-off or periodical; for details, see \"categories\""
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_05
-msgid "Loading Proton"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_21
-msgid "Pay-packet charges"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,transfer_account:0
-msgid "Default Internal Transfer Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_074
-msgid "Mailing costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_07
-msgid "Unpaid foreign bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_07
-msgid "Payment by GSM"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: selection:coda.bank.account,state:0
-#: view:coda.bank.statement:0
-#: selection:coda.bank.statement,type:0
-msgid "Normal"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_50
-msgid "Credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_80
-msgid "Separately charged costs and provisions"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: field:coda.bank.account,currency:0
-#: field:coda.bank.statement,currency:0
-msgid "Currency"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_06
-msgid "Extension of maturity date"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,def_receivable:0
-msgid "Default Receivable Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_15
-msgid "Night safe"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Total Amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_214
-msgid "Issue commission (delivery order)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_07
-msgid ""
-"Often by standing order or direct debit. In case of direct debit, family 13 "
-"is used."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_01
-msgid "Loading a GSM card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_021
-msgid "Costs for drawing up a bank cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_026
-msgid "Handling commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_201
-msgid "Advice notice commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_64
-#: model:account.coda.trans.code,description:account_coda.actcc_47_64
-msgid "Warrant"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_07
-msgid "Unpaid commercial paper"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:120
-#: code:addons/account_coda/wizard/account_coda_import.py:130
-#: code:addons/account_coda/wizard/account_coda_import.py:159
-#: code:addons/account_coda/wizard/account_coda_import.py:168
-#: code:addons/account_coda/wizard/account_coda_import.py:174
-#: code:addons/account_coda/wizard/account_coda_import.py:198
-#: code:addons/account_coda/wizard/account_coda_import.py:272
-#: code:addons/account_coda/wizard/account_coda_import.py:281
-#: code:addons/account_coda/wizard/account_coda_import.py:305
-#: code:addons/account_coda/wizard/account_coda_import.py:440
-#: code:addons/account_coda/wizard/account_coda_import.py:464
-#: code:addons/account_coda/wizard/account_coda_import.py:473
-#: code:addons/account_coda/wizard/account_coda_import.py:497
-#, python-format
-msgid "Data Error!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_010
-msgid "Information pertaining to sale or purchase of securities"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_54
-msgid "Your payment ATM"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_123
-msgid "Fees and commissions"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:689
-#, python-format
-msgid ""
-"Free Communication:\n"
-" %s"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_15
-msgid "Purchase of an international bank cheque"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,coda_st_naming:0
-msgid "Bank Statement Naming Policy"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,date:0
-msgid "Date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_00
-#: model:account.coda.trans.code,description:account_coda.actcc_30_39
-#: model:account.coda.trans.code,description:account_coda.actcc_30_89
-msgid "Undefined transaction"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_06
-msgid "Costs chargeable to the remitter"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_205
-msgid ""
-"Documentary payment commission | Document commission | Drawdown fee | "
-"Negotiation fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_60
-msgid "Settlement of mortgage loan"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_01
-msgid "Purchase of securities"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda,note:0
-msgid "Import Log"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_07
-msgid "Domestic commercial paper"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_034
-msgid "Reinvestment fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_12
-msgid "Costs for opening a bank guarantee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_414
-msgid "Regularisation charges"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement.line,statement_id:0
-#: model:ir.actions.act_window,name:account_coda.act_account_bank_statement_goto_coda_bank_statement
-#: model:ir.model,name:account_coda.model_coda_bank_statement
-msgid "CODA Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_15
-msgid "Your repayment hire-purchase and similar claims"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_62
-msgid "Reversal of cheque"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.code,code:0
-msgid "Code"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_032
-msgid "Drawing up a circular cheque"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Seq"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_52
-msgid "Payment night safe"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_bank_statement
-#: model:ir.model,name:account_coda.model_account_bank_statement
-msgid "Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_name:0
-msgid "Counterparty Name"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_006
-msgid "Various fees/commissions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_209
-msgid "Transfer commission"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Information"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_39
-#: model:account.coda.trans.code,description:account_coda.actcc_00_89
-msgid "Cancellation of a transaction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_3
-msgid ""
-"Simple amount with detailed data; e.g. in case of charges for cross-border "
-"credit transfers."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_15
-msgid "Your purchase of lottery tickets"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_05
-msgid "Collective payments of wages"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_17
-msgid "Collected for unsealed deposit of securities, and other parcels"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_004
-msgid "Counterparty’s banker"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:426
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" No matching partner record found!\n"
-" Please adjust the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,journal:0
-msgid "Bank Journal for the Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Globalisation"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_54
-msgid "Fixed advance – capital and interest"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_11
-msgid "Payment documents abroad"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_09
-msgid ""
-"Postage recouped to the debit of the customer (including forwarding charges)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_04
-msgid "Costs for holding a documentary cash credit"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_start:0
-msgid "Starting Balance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_13
-msgid "Settlement of bank acceptances"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_200
-msgid "Overall documentary credit charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_25
-msgid "Renting of direct debit box"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_52
-msgid ""
-"Payment of coupons from a deposit or settlement of coupons delivered over "
-"the counter - credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.statement.line,globalisation_level:0
-msgid ""
-"The value which is mentioned (1 to 9), specifies the hierarchy level of the "
-"globalisation of which this record is the first.\n"
-"The same code will be repeated at the end of the globalisation."
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,description2:0
-msgid "Secondary Account Description"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_211
-msgid "Credit arrangement fee | Additional credit arrangement fee"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statements
-#: model:ir.ui.menu,name:account_coda.menu_coda_bank_statements
-msgid "CODA Bank Statements"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_62
-msgid "Term loan"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_70
-msgid "Sale of traveller’s cheque"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,name:0
-#: field:coda.bank.statement,name:0
-msgid "Name"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,coda_creation_date:0
-msgid "CODA Creation Date"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:583
-#: code:addons/account_coda/wizard/account_coda_import.py:904
-#, python-format
-msgid ""
-"\n"
-"Unknown Error : "
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_035
-msgid "Charges foreign documentary bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_39
-msgid "Agios on guarantees given"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_070
-msgid "Forward arbitrage contracts : sum to be supplied by bank"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_56
-#: model:account.coda.trans.code,description:account_coda.actcc_11_56
-msgid "Reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_23
-msgid ""
-"Costs charged for all kinds of research (information on past transactions, "
-"address retrieval, ...)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_14
-msgid "Handling costs instalment credit"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_6
-msgid ""
-"Detail of 2. Simple amount without detailed data. Normally, data of this "
-"kind comes after type 2. The customer may ask for a separate file containing "
-"the detailed data. In that case, one will speak of a ‘separate application’. "
-"The records in a separate application keep type 6."
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "CODA Files"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_17
-msgid "Financial centralisation"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_404
-msgid "Discount commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_45
-msgid "Documentary credit charges"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:913
-#, python-format
-msgid ""
-"\n"
-"Number of errors : "
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_22
-msgid "Management/custody"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_51
-msgid "Tender"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_56
-msgid "Non-presented certified cheques"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_408
-msgid "Cover commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_071
-msgid "Fixed loan advance - availability"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda,name:0
-#: field:account.coda.import,coda_fname:0
-msgid "CODA Filename"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_31
-msgid "E.g. for signing invoices"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_37
-msgid "Various costs for possessing or using a payment card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_37
-msgid "Costs related to commercial paper"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_043
-#: model:account.coda.trans.code,description:account_coda.actcc_80_07
-msgid "Insurance costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_431
-msgid "Delivery of a copy"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,transfer_account:0
-msgid ""
-"Set here the default account that will be used for internal transfer between "
-"own bank accounts (e.g. transfer between current and deposit bank accounts)."
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-#: view:coda.bank.account:0
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Group By..."
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,awaiting_account:0
-msgid "Default Account for Unrecognized Movement"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:580
-#: code:addons/account_coda/wizard/account_coda_import.py:897
-#, python-format
-msgid ""
-"\n"
-"System Error : "
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_60
-msgid "Non-presented circular cheque"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,line_ids:0
-msgid "CODA Bank Statement lines"
-msgstr ""
-
-#. module: account_coda
-#: sql_constraint:account.coda:0
-msgid "This CODA has already been imported !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_19
-msgid "Documentary import credits"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:320
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on movement data record 2.2, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_001
-msgid "Data concerning the counterparty"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.comm.type:0
-msgid "CODA Structured Communication Type"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_07
-msgid "Contra-entry of a direct credit or of a discount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_55
-msgid "Interest term investment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_007
-#: model:account.coda.trans.code,description:account_coda.actcc_80_37
-msgid "Access right to database"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_type
-msgid "CODA transaction type"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,account_id:0
-msgid "Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_37
-msgid "Costs relating to the payment of a foreign bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_13
-msgid "Eurocheque written out abroad"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_01
-msgid "Capital and/or interest (specified by the category)"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Glob. Am."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_17
-msgid "Charge for safe custody"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_102
-msgid ""
-"Credit transfer or cash payment with reconstituted structured format "
-"communication"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_86
-msgid "Payment after cession"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_14
-#: model:account.coda.trans.code,description:account_coda.actcc_47_14
-msgid "Warrant fallen due"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.actions.act_window,name:account_coda.action_imported_coda_files
-#: model:ir.ui.menu,name:account_coda.menu_imported_coda_files
-msgid "Imported CODA Files"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_29
-msgid "Charges collected for: - commercial information - sundry information"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_15
-msgid "In case of subscription before the interest due date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_43
-msgid "Foreign cheques"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_62
-msgid "Sale of gold/pieces under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_51
-msgid "The bank takes the initiative for crediting the customer’s account."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_05
-msgid "Full or partial reimbursement of a fixed advance at maturity date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_26
-msgid "Travel insurance premium"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_416
-msgid "Charges for the deposit of security"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_04
-msgid "At home as well as abroad"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:192
-#, python-format
-msgid ""
-"\n"
-"No matching CODA Bank Account Configuration record found !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_50
-msgid "Remittance of commercial paper - credit after collection"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Search CODA Bank Statements"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_410
-msgid "Reclamation charges"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.actions.act_window,help:account_coda.action_coda_bank_statements
-msgid ""
-"The CODA Bank Statements contain the information encoded in their "
-"originating CODA file in a human readable format. The Bank Statements "
-"associated with a CODA contain the subset of the CODA Bank Statement data "
-"that is required for the creation of the Accounting Entries."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_114
-msgid "POS credit - individual transaction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_70
-msgid "Settlement of discount bank acceptance"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_02
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_08
-msgid "Eurozone = countries which have the euro as their official currency"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_02
-msgid "The bank takes the initiative for debiting the customer’s account."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_58
-msgid "Reversal"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: selection:coda.bank.account,state:0
-#: view:coda.bank.statement:0
-#: selection:coda.bank.statement,type:0
-msgid "Info"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_02
-msgid "Costs relating to electronic output"
-msgstr ""
-
-#. module: account_coda
-#: sql_constraint:account.coda.comm.type:0
-msgid "The Structured Communication Code must be unique !"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:57
-#, python-format
-msgid "Wizard in incorrect state. Please hit the Cancel button!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_418
-msgid "Endorsement commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_005
-msgid "Renting of letterbox"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_13
-msgid "Commission for renting a safe deposit box"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_39
-msgid "To be used for issued circular cheques given in consignment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_11
-msgid "Securities"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Free Communication"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_2
-msgid ""
-"Amount as totalised by the bank; e.g. : the total amount of a series of "
-"credit transfers with a structured communication As a matter of principle, "
-"this type will also be used when no detailed data (type 6 or 7) is following."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_37
-msgid "Cheque-related costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_033
-msgid "Charges for a foreign bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_13
-msgid "Cash withdrawal by your branch or agents"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_049
-msgid "Fiscal stamps/stamp duty"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_58
-msgid ""
-"Also for vouchers, postal orders, anything but bills of exchange, "
-"acquittances, promissory notes, etc."
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Select Your File :"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_06
-msgid "Damage relating to bills and cheques"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_09
-msgid "Unpaid voucher"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_13
-msgid "Unissued part (see 64)"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
-#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_1
-#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_2
-#: model:ir.model,name:account_coda.model_account_coda_import
-msgid "Import CODA File"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:289
-#: code:addons/account_coda/wizard/account_coda_import.py:481
-#, python-format
-msgid "Transaction Code unknown, please consult your bank."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_55
-msgid "Fixed advance – interest only"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.type:0
-msgid "CODA Transaction Type"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_level:0
-msgid "Globalisation Level"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_020
-msgid "Costs of physical delivery"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_60
-msgid "Sale of foreign bank notes"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.import,note:0
-msgid "Log"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "Search CODA Files"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_52
-msgid "Remittance of commercial paper - credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,active:0
-msgid ""
-"If the active field is set to False, it will allow you to hide the Bank "
-"Account without removing it."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_54
-msgid "Among other things advances or promissory notes"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_10
-msgid "Purchase of Smartcard"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:664
-#, python-format
-msgid ""
-"Transaction Type: %s - %s\n"
-"Transaction Family: %s - %s\n"
-"Transaction Code: %s - %s\n"
-"Transaction Category: %s - %s\n"
-"Structured Communication Type: %s - %s\n"
-"Communication: %s"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_208
-msgid "Commitment fee deferred payment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_005
-msgid "Data concerning the correspondent"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_66
-msgid "For professionals such as insurances and stockbrokers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_19
-msgid ""
-"Collected for securities, gold, pass-books, etc. placed in safe custody"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_19
-msgid ""
-"Used in case of payments accepted under reserve of count, result of "
-"overcrediting"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:630
-#, python-format
-msgid ""
-"\n"
-"Configuration Error in journal %s!\n"
-"Please verify the Default Debit and Credit Account settings."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_09
-msgid "Agio on supplier's bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_213
-msgid "Financing fee"
-msgstr ""
-
-#. module: account_coda
-#: field:account.bank.statement.line.global,coda_statement_line_ids:0
-msgid "CODA Bank Statement Lines"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:170
-#, python-format
-msgid ""
-"\n"
-"Unsupported bank account structure !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_037
-msgid "Commission for handling charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_03
-msgid "Subscription to securities"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_425
-msgid "Foreign broker's commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_7
-msgid ""
-"Detail of 2. Simple account with detailed data The records in a separate "
-"application keep type 7."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_125
-#: model:account.coda.trans.code,description:account_coda.actcf_13
-#: view:coda.bank.statement.line:0
-msgid "Credit"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:155
-#, python-format
-msgid ""
-"\n"
-"Foreign bank accounts with BBAN structure are not supported !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_09
-msgid "Counter transactions"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_coda_bank_statement_line
-msgid "CODA Bank Statement Line"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_17
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_66
-msgid ""
-"In case of centralisation by the bank, type 2 will be allotted to this "
-"transaction. This total can be followed by the detailed movement."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_057
-msgid "Interest subsidy"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_41
-msgid "International credit transfers - non-SEPA credit transfers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_87
-msgid "Overall amount, VAT included"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_01
-msgid "Payment of a foreign cheque"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "General"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:856
-#, python-format
-msgid ""
-"\n"
-"Incorrect ending Balance in CODA Statement %s for Bank Account %s!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_04
-msgid "Issues"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_37
-msgid ""
-"If any, detail in the category (e.g. costs for presentation for acceptance, "
-"etc.)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_17
-msgid "Purchase of fiscal stamps"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_01
-#: model:account.coda.trans.code,description:account_coda.actcc_41_50
-msgid "Transfer"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "View Bank Statement(s)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_20
-msgid "Drawing up a certificate"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_013
-msgid "Payment commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_01
-msgid ""
-"Bills of exchange, acquittances, promissory notes; debit of the drawee"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "View CODA Bank Statement(s)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_15
-msgid "Your purchase bank cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_05
-msgid "Payment of voucher"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_68
-msgid "Documentary export credits"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,find_bbacom:0
-msgid "Lookup Invoice"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_03
-msgid "Cheques"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_56
-msgid "Unexecutable reimbursement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_03
-msgid "Unpaid debt"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_52
-msgid ""
-"First credit of cheques, vouchers, luncheon vouchers, postal orders, credit "
-"under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_05
-msgid ""
-"Bill claimed back at the drawer's request (bill claimed back before maturity "
-"date)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_11
-msgid ""
-"Costs chargeable to clients who ask to have their correspondence kept at "
-"their disposal at the bank's counter"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_64
-msgid ""
-"Amount paid to the issuer by the bank in charge of the placement (firm "
-"underwriting or not); also used for the payment in full of partly-paid "
-"shares, see transaction 05"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_15
-msgid "Cheque drawn by the bank on itself, usually with charges."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_072
-msgid "Countervalue of commission to third party"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_01
-msgid "Individual transfer order"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:436
-#, python-format
-msgid ""
-"\n"
-"Movement data records of type 2.%s are not supported !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_02
-msgid "Payment by means of a payment card within the Eurozone"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_01
-msgid ""
-"Credit transfer given by the customer on paper or electronically, even if "
-"the execution date of this transfer is in the future. Domestic payments as "
-"well as euro payments meeting the requirements."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_35
-msgid "Closing (periodical settlements for interest, costs,…)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_51
-msgid "Unloading Proton"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_019
-msgid "Tax on physical delivery"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,statement_id:0
-msgid "Associated Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_08
-msgid ""
-"Debit of the remitter when the drawee pays in advance directly to the "
-"remitter (regards bank acceptances)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_103
-msgid "number (e.g. of the cheque, of the card, etc.)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_24
-msgid "Participation in and management of interest refund system"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Glob. Amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_58
-msgid "Payment by your branch/agents"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_25
-#: model:account.coda.trans.code,description:account_coda.actcc_43_70
-msgid "Purchase of traveller’s cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_39
-msgid "Your issue circular cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_09
-msgid ""
-"For professionals (stockbrokers) only, whoever the issuer may be (Belgian or "
-"foreigner)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_33
-msgid ""
-"Costs not specified otherwise, often with a manual communication (e.g. for "
-"collecting, ordering funds). VAT excluded = type 0 VAT included = type 3 (at "
-"least 3 articles)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_023
-msgid "Exercising fee"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:934
-#, python-format
-msgid "Import CODA File result"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_111
-msgid "POS credit – Globalisation"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Search Bank Transactions"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:577
-#, python-format
-msgid ""
-"\n"
-"Application Error : "
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,description1:0
-#: help:coda.bank.account,description2:0
-msgid ""
-"The Primary or Secondary Account Description should match the corresponding "
-"Account Description in the CODA file."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_17
-msgid "Management fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_03
-msgid "Cash withdrawal by card (ATM)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_16
-msgid "Bank confirmation to revisor or accountant"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_04
-msgid "Cards"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Statement"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.type:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_type_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_type_form
-msgid "CODA Transaction Types"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_50
-msgid "Credit after a payment at a terminal"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_02
-msgid "Long-term loan"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_05
-#: model:account.coda.trans.code,description:account_coda.actcc_30_54
-msgid "Capital and/or interest term investment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_68
-msgid "Credit of a payment via electronic purse"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_028
-msgid "Fidelity premium"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_39
-msgid "Provisionally unpaid due to other reason than manual presentation"
-msgstr ""
-
-#. module: account_coda
-#: constraint:coda.bank.account:0
-msgid ""
-"\n"
-"\n"
-"Configuration Error! \n"
-"The Bank Account Currency should match the Journal Currency !"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_35
-msgid ""
-"Costs charged for calculating the amount of the tax to be paid (e.g. "
-"Fiscomat)."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_014
-msgid "Collection commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_52
-msgid "Remittance of foreign cheque credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_number:0
-msgid "Counterparty Number"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "_Import"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_03
-msgid "See annexe III : communication 124"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:420
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" The bank account '%s' is not defined for the partner '%s'!\n"
-" Please correct the configuration and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_113
-msgid "ATM/POS debit"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_03
-msgid "Forward purchase of foreign exchange"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_50
-msgid "Credit of a payment via terminal"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_52
-msgid "Credit provider"
-msgstr ""
-
-#. module: account_coda
-#: selection:account.coda.trans.code,type:0
-msgid "Transaction Family"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_68
-msgid "In case coupons attached to a purchased security are missing"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:57
-#: code:addons/account_coda/wizard/account_coda_import.py:325
-#: code:addons/account_coda/wizard/account_coda_import.py:337
-#: code:addons/account_coda/wizard/account_coda_import.py:362
-#: code:addons/account_coda/wizard/account_coda_import.py:513
-#: code:addons/account_coda/wizard/account_coda_import.py:524
-#, python-format
-msgid "Error!"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.statement,type:0
-msgid ""
-"No Bank Statements are associated with CODA Bank Statements of type 'Info'."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_58
-msgid ""
-"Takes priority over transaction 52 (hence a payment made by an agent in a "
-"night safe = 58 and not 52)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_121
-msgid "Commercial bills"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_11
-msgid "Costs for the safe custody of correspondence"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_041
-msgid "Credit card costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_56
-msgid "Subsidy"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_06
-msgid "Payment with tank card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_107
-msgid "Direct debit – DOM’80"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_60
-msgid "Reversal of voucher"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_87
-msgid "Costs refunded"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_17
-msgid "Financial centralisation (debit)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_02
-msgid "Payment to the bank on maturity date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_025
-msgid "Individual entry for exchange charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_004
-#: model:account.coda.trans.code,description:account_coda.actcc_80_09
-msgid "Postage"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_50
-msgid ""
-"For own account - the comment for the client is given in the communication; "
-"also for mixed payments (cash + cheques) - not to be communicated to the "
-"clients; for payments made by a third person: see family 01"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_68
-msgid ""
-"In case of payment accepted under reserve of count; result of undercrediting "
-"- see also transaction 19"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,bank_id:0
-msgid ""
-"Bank Account Number.\n"
-"The CODA import function will find its CODA processing parameters on this "
-"number."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_05
-msgid "Payment of wages, etc."
-msgstr ""
-
-#. module: account_coda
-#: sql_constraint:coda.bank.account:0
-msgid ""
-"The combination of Bank Account, Account Description and Currency must be "
-"unique !"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Debit"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_10
-msgid "Renewal of agreed maturity date"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_55
-msgid "Income from payments by GSM"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_19
-msgid "Regularisation costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_13
-#: model:account.coda.trans.code,description:account_coda.actcc_41_13
-msgid "Transfer from your account"
-msgstr ""
-
-#. module: account_coda
-#: sql_constraint:account.bank.statement.line.global:0
-msgid "The code must be unique !"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,currency:0
-#: help:coda.bank.statement,currency:0
-msgid "The currency of the CODA Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_07
-msgid "Collective transfers"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:116
-#, python-format
-msgid ""
-"\n"
-"CODA V%s statements are not supported, please contact your bank!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_427
-msgid "Belgian Stock Exchange tax"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_12
-msgid "Safe custody"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_001
-msgid "Interest received"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
-msgid "Import CODA Files"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_105
-msgid "original amount of the transaction"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_09
-msgid "Your semi-standing order"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:508
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on information data record 3.2, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_09
-#: model:account.coda.trans.code,description:account_coda.actcc_11_70
-msgid "Settlement of securities"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_01
-msgid "Debit customer who is loading"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_047
-msgid "Charges extension bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_18
-msgid "Trade information"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.trans.code,comment:0
-msgid "Comment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_203
-msgid ""
-"Confirmation fee | Additional confirmation fee | Commitment fee | Flat fee | "
-"Confirmation reservation commission | Additional reservation commission"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_027
-msgid "Charges for unpaid bills"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_204
-msgid "Amendment fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_11
-msgid "Your semi-standing order – payment to employees"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_account_coda
-msgid "CODA Processing"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_11
-msgid "Your repayment mortgage loan"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_37
-#: model:account.coda.trans.code,description:account_coda.actcc_01_37
-#: model:account.coda.trans.code,description:account_coda.actcc_04_37
-#: model:account.coda.trans.code,description:account_coda.actcc_05_37
-#: model:account.coda.trans.code,description:account_coda.actcc_09_37
-#: model:account.coda.trans.code,description:account_coda.actcc_11_37
-#: model:account.coda.trans.code,description:account_coda.actcc_30_37
-#: model:account.coda.trans.code,description:account_coda.actcc_35_37
-#: model:account.coda.trans.code,description:account_coda.actcc_80_35
-msgid "Costs"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_050
-msgid "Capital term investment"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_05
-msgid "Payment of holiday pay, etc."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_25
-msgid ""
-"Commission for the renting of boxes put at the disposal for the "
-"correspondence"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_008
-#: model:account.coda.trans.code,description:account_coda.actcc_80_29
-msgid "Information charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_03
-msgid ""
-"Credit transfer for which the order has been given once and which is carried "
-"out again at regular intervals without any change."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_0
-msgid ""
-"Simple amount without detailed data; e.g. : an individual credit transfer "
-"(free of charges)."
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,find_partner:0
-msgid "Partner lookup via Bank Account Number."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_403
-msgid "Minimum discount rate"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_56
-msgid "Remittance of guaranteed foreign supplier's bill"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_02
-msgid "Tenders"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_07
-msgid "Unpaid foreign cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_03
-msgid ""
-"Bonds, shares, tap issues of CDs, with or without payment of interest, etc."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_66
-msgid "Repurchase of petrol coupons"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_058
-msgid "Capital premium"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_15
-#: model:account.coda.trans.code,description:account_coda.actcc_11_62
-msgid "Interim interest on subscription"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_currency:0
-msgid "Counterparty Currency"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_202
-msgid "Advising commission | Additional advising commission"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,find_partner:0
-msgid "Lookup Partner"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Glob. Id"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statement_line
-#: model:ir.ui.menu,name:account_coda.coda_bank_statement_line
-msgid "CODA Statement Lines"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_amount:0
-msgid "Globalisation Amount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_13
-msgid ""
-"Transfer from one account to another account of the same customer at the "
-"bank's or the customer's initiative (intracompany)."
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:890
-#, python-format
-msgid ""
-"\n"
-"Error ! "
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,user_id:0
-msgid "User"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_code
-msgid "CODA transaction code"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_52
-msgid "Credit under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:125
-#, python-format
-msgid ""
-"\n"
-"The CODA creation date doesn't fall within a defined Accounting Period!\n"
-"Please create the Accounting Period for date %s."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_50
-msgid "Except Proton"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_011
-msgid "Information pertaining to coupons"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_122
-msgid "Bills - calculation of interest"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.code:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_code_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_code_form
-msgid "CODA Transaction Codes"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,state:0
-msgid ""
-"No Bank Statements will be generated for CODA Bank Statements from Bank "
-"Accounts of type 'Info'."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_49_03
-msgid "ATM withdrawal"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_012
-msgid "Exchange commission"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_account_form
-#: model:ir.model,name:account_coda.model_coda_bank_account
-#: model:ir.ui.menu,name:account_coda.menu_action_coda_bank_account_form
-msgid "CODA Bank Account Configuration"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.account,active:0
-msgid "Active"
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:724
-#, python-format
-msgid ""
-"Partner name: %s \n"
-"Partner Account Number: %s\n"
-"Transaction Type: %s - %s\n"
-"Transaction Family: %s - %s\n"
-"Transaction Code: %s - %s\n"
-"Transaction Category: %s - %s\n"
-"Structured Communication Type: %s - %s\n"
-"Communication: %s"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_04
-msgid "Cash withdrawal from an ATM"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_end:0
-msgid "Balance"
-msgstr ""
-
-#. module: account_coda
-#: field:account.bank.statement,coda_statement_id:0
-msgid "Associated CODA Bank Statement"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_37
-msgid "Credit-related costs"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_manage_coda
-msgid "CODA Configuration"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_39
-msgid "Debit of the drawer after credit under usual reserve or discount"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_66
-msgid "Financial centralisation (credit)"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_08
-msgid "Payment in advance"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Close"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_19
-msgid "Special charge for safe custody"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_01
-msgid "Payment of your cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_43_07
-msgid "Foreign cheque remitted for collection that returns unpaid"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_07
-msgid ""
-"- insurance costs of account holders against fatal accidents - passing-on of "
-"several insurance costs"
-msgstr ""
-
-#. module: account_coda
-#: help:coda.bank.account,awaiting_account:0
-msgid ""
-"Set here the default account that will be used if the partner cannot be "
-"unambiguously identified."
-msgstr ""
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:280
-#, python-format
-msgid "No CODA Bank Statement found for this Bank Statement!"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_07
-msgid "Definitely unpaid cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_08
-msgid "Payment by means of a payment card outside the Eurozone"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_106
-msgid ""
-"Method of calculation (VAT, withholding tax on income, commission, etc.)"
-msgstr ""
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_comm_type
-msgid "CODA structured communication type"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_64
-msgid "Reversal of settlement of credit card"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_58
-msgid ""
-"Repayable securities from a deposit or delivered at the counter - credit "
-"under usual reserve"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_5
-msgid ""
-"Detail of 1. Standard procedure is no detailing. However, the customer may "
-"ask for detailed data to be included into his file after the overall record "
-"(type 1)."
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.comm.type,description:0
-#: field:account.coda.trans.category,description:0
-#: field:account.coda.trans.code,description:0
-#: field:account.coda.trans.type,description:0
-msgid "Description"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_01
-msgid "Payment commercial paper"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_419
-msgid "Bank service fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_37
-msgid "Costs relating to outgoing foreign transfers and non-SEPA transfers"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_17
-msgid "Your certified cheque"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_400
-msgid "Acceptance fee"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_68
-msgid "Compensation for missing coupon"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Debit Transactions."
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_33
-msgid "Miscellaneous fees and commissions"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_03
-#: model:account.coda.trans.code,description:account_coda.actcc_41_03
-msgid "Standing order"
-msgstr ""
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Customer"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_49
-#: model:account.coda.trans.code,description:account_coda.actcc_01_99
-#: model:account.coda.trans.code,description:account_coda.actcc_03_49
-#: model:account.coda.trans.code,description:account_coda.actcc_03_99
-#: model:account.coda.trans.code,description:account_coda.actcc_04_49
-#: model:account.coda.trans.code,description:account_coda.actcc_04_99
-#: model:account.coda.trans.code,description:account_coda.actcc_05_49
-#: model:account.coda.trans.code,description:account_coda.actcc_05_99
-#: model:account.coda.trans.code,description:account_coda.actcc_07_49
-#: model:account.coda.trans.code,description:account_coda.actcc_07_99
-#: model:account.coda.trans.code,description:account_coda.actcc_09_49
-#: model:account.coda.trans.code,description:account_coda.actcc_09_99
-#: model:account.coda.trans.code,description:account_coda.actcc_11_49
-#: model:account.coda.trans.code,description:account_coda.actcc_11_99
-#: model:account.coda.trans.code,description:account_coda.actcc_13_49
-#: model:account.coda.trans.code,description:account_coda.actcc_13_99
-#: model:account.coda.trans.code,description:account_coda.actcc_30_49
-#: model:account.coda.trans.code,description:account_coda.actcc_30_99
-#: model:account.coda.trans.code,description:account_coda.actcc_35_49
-#: model:account.coda.trans.code,description:account_coda.actcc_35_99
-#: model:account.coda.trans.code,description:account_coda.actcc_41_49
-#: model:account.coda.trans.code,description:account_coda.actcc_41_99
-#: model:account.coda.trans.code,description:account_coda.actcc_43_49
-#: model:account.coda.trans.code,description:account_coda.actcc_43_99
-#: model:account.coda.trans.code,description:account_coda.actcc_47_49
-#: model:account.coda.trans.code,description:account_coda.actcc_47_99
-#: model:account.coda.trans.code,description:account_coda.actcc_80_49
-#: model:account.coda.trans.code,description:account_coda.actcc_80_99
-msgid "Cancellation or correction"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: field:coda.bank.account,bank_id:0
-#: field:coda.bank.statement,coda_bank_account_id:0
-#: view:coda.bank.statement.line:0
-#: field:coda.bank.statement.line,coda_bank_account_id:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_56
-msgid "Interest or capital subsidy"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Fin.Account"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_62
-msgid "Unpaid postal order"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_428
-msgid "Interest accrued"
-msgstr ""
-
-#. module: account_coda
-#: field:account.coda.comm.type,code:0
-msgid "Structured Communication Type"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_401
-msgid "Visa charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_210
-msgid "Commitment fee"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.trans.category:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_category_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_category_form
-msgid "CODA Transaction Categories"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement.line,sequence:0
-msgid "Sequence"
-msgstr ""
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Results :"
-msgstr ""
-
-#. module: account_coda
-#: field:coda.bank.statement,coda_id:0
-#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_coda
-msgid "CODA Data File"
-msgstr ""
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "CODA Statement Line"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_073
-msgid "Costs of ATM abroad"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_018
-msgid "Tental guarantee charges"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_430
-msgid "Recovery of foreign tax"
-msgstr ""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_01
-msgid "Guarantee card charges"
-msgstr ""
diff --git a/addons/account_coda/i18n/ro.po b/addons/account_coda/i18n/ro.po
deleted file mode 100644
index 2e079d94b87..00000000000
--- a/addons/account_coda/i18n/ro.po
+++ /dev/null
@@ -1,4143 +0,0 @@
-# Romanian translation for openobject-addons
-# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
-# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: openobject-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-10-17 08:26+0000\n"
-"Last-Translator: filsys \n"
-"Language-Team: Romanian \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-18 04:40+0000\n"
-"X-Generator: Launchpad (build 16160)\n"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_21
-msgid "Cash withdrawal on card (PROTON)"
-msgstr "Retragere bani pe card (PROTON)"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_412
-msgid "Advice of expiry charges"
-msgstr "Sfaturi privind taxele de expirare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_11
-msgid "Your purchase of luncheon vouchers"
-msgstr "Achizitionarea d-voastra de tichete de masa"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_05
-msgid "Partial payment subscription"
-msgstr "Plata partiala a abonamentului"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_54
-msgid "Unexecutable transfer order"
-msgstr "Viramentul nu poate fi efectuat"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_02
-msgid "Individual transfer order initiated by the bank"
-msgstr "Virament individual initiat de banca"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_21
-msgid "Charges for preparing pay packets"
-msgstr "Taxe privind pregatirea pachetelor de plata"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_9
-msgid "Detail of 7. The records in a separate application keep type 9."
-msgstr ""
-"Detaliul 7. Inregistrarile dintr-o aplicatie separata pastreaza tipul 9."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_426
-msgid "Belgian broker's commission"
-msgstr "Comision broker belgian"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_031
-msgid "Charges foreign cheque"
-msgstr "Taxe cec strain"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_002
-msgid "Interest paid"
-msgstr "Dobanzi platite"
-
-#. module: account_coda
-#: field:account.coda.trans.type,parent_id:0
-msgid "Parent"
-msgstr "Parinte"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_62
-msgid ""
-"cheques debited on account, but debit cancelled afterwards for lack of cover "
-"(double debit/contra-entry of transaction 01 or 05)"
-msgstr ""
-"cecuri debitate in cont, dar debitul a fost anulat ulterior datorita lipsei "
-"de acoperire (debit dublu/contra-inregistrare a tranzactiei 01 sau 05)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_05
-msgid "Bill claimed back"
-msgstr "Polita rechemata inapoi"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_016
-msgid "BLIW/IBLC dues"
-msgstr "BLIW/IBLC datorate"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:911
-#, python-format
-msgid "CODA File is Imported :"
-msgstr "Fisierul CODA este importat :"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_066
-msgid "Fixed loan advance - reimbursement"
-msgstr "Avans fix imprumut - rambursare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_05
-msgid "Purchase of foreign bank notes"
-msgstr "Achizitia de bancnote straine"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:277
-#: code:addons/account_coda/wizard/account_coda_import.py:469
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid CODA Transaction Family : %s!"
-msgstr ""
-"\n"
-"Fisierul contine o Tranzactie CODA de familie nevalida : %s!"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_030
-msgid "Account insurance"
-msgstr "Cont Asigurare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_042
-msgid "Payment card costs"
-msgstr "Costuri plata cu cardul"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_212
-msgid "Warehousing fee"
-msgstr "Taxa de depozitare"
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:300
-#, python-format
-msgid ""
-"Cannot delete CODA Bank Statement '%s' of Journal '%s'.\n"
-"The associated Bank Statement has already been confirmed !\n"
-"Please undo this action first!"
-msgstr ""
-"Nu se pote sterge Extrasul de cont CODA '%s' din Jurnalul '%s'.\n"
-"Extrasul de cont asociat a fost deja confirmat !\n"
-"Va rugam sa anulati mai intai aceasta actiune!"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_66
-msgid "Financial centralization"
-msgstr "Centralizare financiara"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_420
-msgid "Retention charges"
-msgstr "Taxe de retinere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_50
-msgid "Transfer in your favour"
-msgstr "Transfer in favoarea dumneavoastra"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_87
-#: model:account.coda.trans.code,description:account_coda.actcc_04_87
-#: model:account.coda.trans.code,description:account_coda.actcc_05_87
-#: model:account.coda.trans.code,description:account_coda.actcc_07_87
-#: model:account.coda.trans.code,description:account_coda.actcc_09_87
-#: model:account.coda.trans.code,description:account_coda.actcc_11_87
-#: model:account.coda.trans.code,description:account_coda.actcc_13_87
-#: model:account.coda.trans.code,description:account_coda.actcc_30_87
-#: model:account.coda.trans.code,description:account_coda.actcc_35_87
-#: model:account.coda.trans.code,description:account_coda.actcc_41_87
-#: model:account.coda.trans.code,description:account_coda.actcc_43_87
-#: model:account.coda.trans.code,description:account_coda.actcc_47_87
-msgid "Reimbursement of costs"
-msgstr "Rambursare cheltuieli"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_56
-msgid "Remittance of supplier's bill with guarantee"
-msgstr "Expedierea facturii furnizorului cu garantie"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_002
-msgid "Communication of the bank"
-msgstr "Comunicare banca"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,amount:0
-msgid "Amount"
-msgstr "Suma"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_70
-msgid "Only with stockbrokers when they deliver the securities to the bank"
-msgstr "Numai cu agentii de bursa atunci cand livreaza titlurile la banca"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_413
-msgid "Acceptance charges"
-msgstr "Taxa de aprobare"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_bic:0
-msgid "Counterparty BIC"
-msgstr "BIC echivalent"
-
-#. module: account_coda
-#: help:coda.bank.account,def_receivable:0
-msgid ""
-"Set here the receivable account that will be used, by default, if the "
-"partner is not found."
-msgstr ""
-"Aici setati contul de incasari care va fi folosit implicit daca partenerul "
-"nu este gasit."
-
-#. module: account_coda
-#: help:coda.bank.account,def_payable:0
-msgid ""
-"Set here the payable account that will be used, by default, if the partner "
-"is not found."
-msgstr ""
-"Aici setat contul de plati care va fi folosit implicit daca partenerul nu "
-"este gasit."
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:144
-#, python-format
-msgid "Warning !"
-msgstr "Avertizare !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_39
-msgid "Return of an irregular bill of exchange"
-msgstr "Returnarea unei polite inegale"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_011
-msgid "VAT"
-msgstr "TVA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_09
-msgid "Debit of the agios to the account of the drawee"
-msgstr ""
-"Debitul comisioanelor pentru schimbul valutar in contul celui care achita "
-"politele"
-
-#. module: account_coda
-#: view:account.coda.comm.type:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_comm_type_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_comm_type_form
-msgid "CODA Structured Communication Types"
-msgstr "Tipuri de Comunicare Structurata CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_50
-msgid "Spot sale of foreign exchange"
-msgstr "Vanzarea de valuta la fata locului"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,ref:0
-msgid "Reference"
-msgstr "Referinta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_58
-msgid "Remittance of supplier's bill without guarantee"
-msgstr "Expedierea facturii furnizorului fara garantie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_03
-msgid "Payment receipt card"
-msgstr "Card primire plata"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_207
-msgid "Non-conformity fee"
-msgstr "Taxa de neconformitate"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_022
-msgid "Priority costs"
-msgstr "Cheltuieli prioritare"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:268
-#: code:addons/account_coda/wizard/account_coda_import.py:460
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid CODA Transaction Type : %s!"
-msgstr ""
-"\n"
-"Fisierul contine o Tranzactie CODA nevalida de tipul : %s!"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_045
-msgid "Handling costs"
-msgstr "Costuri de manipulare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_47_13
-msgid "Debit customer, payment of agios, interest, exchange commission, etc."
-msgstr ""
-"Debit client, plata comisioanelor pentru schimbul valutar, dobanda, comision "
-"de schimb, etc."
-
-#. module: account_coda
-#: field:account.coda,date:0
-msgid "Import Date"
-msgstr "Importa Data"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_039
-msgid "Telecommunications"
-msgstr "Telecomunicatii"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_id:0
-msgid "Globalisation ID"
-msgstr "ID Globalizare"
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:399
-#, python-format
-msgid "Delete operation not allowed !"
-msgstr "Nu este permisa stergerea operatiunii !"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_000
-msgid "Net amount"
-msgstr "Suma neta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_11
-msgid "Department store cheque"
-msgstr "Cec magazin"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_206
-msgid "Surety fee/payment under reserve"
-msgstr "Taxa de garantie/plata sub rezerva"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_53
-msgid "Cash deposit at an ATM"
-msgstr "Depunere de numerar la un bancomat"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_52
-msgid "Forward sale of foreign exchange"
-msgstr "Vanzarea la termen de schimb valutar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_05
-msgid ""
-"Debit of the subscriber for the complementary payment of partly-paid shares"
-msgstr ""
-"Debitul abonatului pentru plata complementara a actiunilor platite partial"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_bank_statement_line_global
-msgid "Batch Payment Info"
-msgstr "Informatii Plata Lot"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_33
-#: model:account.coda.trans.code,description:account_coda.actcc_00_83
-msgid "Value correction"
-msgstr "Rectificare valoare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_27
-msgid "For publications of the financial institution"
-msgstr "Pentru publicatii ale institutiei financiare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_01
-msgid "Payment of foreign bill"
-msgstr "Plata politei straine"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_024
-msgid "Growth premium"
-msgstr "Crestere premium"
-
-#. module: account_coda
-#: selection:account.coda.trans.code,type:0
-msgid "Transaction Code"
-msgstr "Codul tranzactiei"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_13
-msgid "Discount foreign supplier's bills"
-msgstr "Reducere la plata facturilor furnizorului strain"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_05
-msgid "Direct debit"
-msgstr "Debit direct"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_47_11
-msgid "Bills of lading"
-msgstr "Foi de expeditie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_00
-msgid "Undefined transactions"
-msgstr "Tranzactii nedefinite"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_62
-msgid "When reimbursed separately to the subscriber"
-msgstr "Atunci cand este rambursat separat abonatului"
-
-#. module: account_coda
-#: view:account.coda.trans.category:0
-msgid "CODA Transaction Category"
-msgstr "Categoria Tranzactiei CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_067
-msgid "Fixed loan advance - extension"
-msgstr "Avans fix imprumut - prelungire"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_07
-msgid "Your repayment instalment credits"
-msgstr "Rambursarea in rate a creditelor"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_13
-msgid "On the account of the head office"
-msgstr "In contul sediului social"
-
-#. module: account_coda
-#: constraint:account.bank.statement:0
-msgid "The journal and period chosen have to belong to the same company."
-msgstr "Jurnalul si perioada aleasa trebuie sa apartina aceleiasi companii."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_115
-msgid "Terminal cash deposit"
-msgstr "Terminal depozit in numerar"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:301
-#: code:addons/account_coda/wizard/account_coda_import.py:493
-#, python-format
-msgid ""
-"\n"
-"The File contains an invalid Structured Communication Type : %s!"
-msgstr ""
-"\n"
-"Fisierul contine o Structura de Comunicare nevalida de Tipul : %s!"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_43_01
-msgid ""
-"Debit of a cheque in foreign currency or in EUR in favour of a foreigner"
-msgstr ""
-"Debitul unui cec intr-o moneda straina sau in euro in favoarea unui strain"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_54
-msgid "Discount abroad"
-msgstr "Reducere in strainatate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_62
-msgid "Remittance of documents abroad - credit after collection"
-msgstr "Expedierea documentelor in strainatate - credit dupa incasare"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,name:0
-msgid "Communication"
-msgstr "Comunicare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_35
-#: model:account.coda.trans.code,description:account_coda.actcc_00_85
-msgid "Correction"
-msgstr "Rectificare"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:404
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" No partner record assigned: There are multiple partners with the "
-"same Bank Account Number '%s'!\n"
-" Please correct the configuration and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-"\n"
-" Linia '%s' a Extrasului de Cont '%s':\n"
-" Nicio inregistrare a partenerului alocata: Exista mai multi "
-"parteneri cu acelasi Numar de Cont Bancar '%s'!\n"
-" Va rugam sa corectati configurarea si sa efectuati din nou importul "
-"sau sa schimbati manual inregistrarea corespunzatoare in Extrasul de cont "
-"generat."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_33
-#: model:account.coda.trans.code,description:account_coda.actcc_30_83
-msgid "Value (date) correction"
-msgstr "Rectificare valoare (data)"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_063
-msgid "Rounding differences"
-msgstr "Diferente de rotunjire"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:295
-#: code:addons/account_coda/wizard/account_coda_import.py:487
-#, python-format
-msgid "Transaction Category unknown, please consult your bank."
-msgstr "Categorie necunoscuta a Tranzactiei, va rugam sa consultati banca."
-
-#. module: account_coda
-#: view:account.coda.trans.code:0
-msgid "CODA Transaction Code"
-msgstr "Cod Tranzactie CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_052
-msgid "Residence state tax"
-msgstr "Taxa de resedinta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_17
-msgid "Amount of the cheque; if any, charges receive code 37"
-msgstr "Valoarea cecului; daca este cazul, taxele primesc codul 37"
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "Additional Information"
-msgstr "Informatii suplimentare"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_120
-msgid "Correction of a transaction"
-msgstr "Corectarea unei tranzactii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_64
-#: model:account.coda.trans.code,description:account_coda.actcc_41_64
-msgid "Transfer to your account"
-msgstr "Transfer in contul d-voastra"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_124
-msgid "Number of the credit card"
-msgstr "Numarul cardului de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_13
-msgid "Renting of safes"
-msgstr "Inchiriere seifuri"
-
-#. module: account_coda
-#: help:coda.bank.account,find_bbacom:0
-msgid ""
-"Partner lookup via the 'BBA' Structured Communication field of the Invoice."
-msgstr ""
-"Cautare partener prin campul Comunicare Structurata 'BBA' din Factura."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_104
-msgid "Equivalent in EUR"
-msgstr "Echivalent in euro"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_50
-msgid "Remittance of foreign bill credit after collection"
-msgstr "Expediere polite straine, credit dupa incasare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_03
-msgid "Your purchase by payment card"
-msgstr "Cumparaturi cu plata cu cardul"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_1
-msgid ""
-"Amount as totalised by the customer; e.g. a file regrouping payments of "
-"wages or payments made to suppliers or a file regrouping collections for "
-"which the customer is debited or credited with one single amount. As a "
-"matter of principle, this type is also used when no detailed data is "
-"following (type 5)."
-msgstr ""
-"Suma este calculata de catre client; de ex. un fisier de regrupare a "
-"salariilor sau a platilor facute furnizorilor sau un fisier de regrupare a "
-"incasarilor pentru care clientul este debitat sau creditat cu o singura "
-"suma. Ca o chestiune de principiu, acest tip este folosit de asemenea atunci "
-"cand nu exista date detaliate (tipul 5)."
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:519
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on information data record 3.3, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-"\n"
-"Eroare de analiza CODA la inregistrarea informatiilor 3.3, secv nr %s!\n"
-"Va rugam sa raportati acest lucru prin canalul de asistenta tehnica OpenERP."
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Credit Transactions."
-msgstr "Operatiuni de credit."
-
-#. module: account_coda
-#: field:account.coda.trans.type,type:0
-msgid "Transaction Type"
-msgstr "Tipul tranzactiei"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda
-msgid "Object to store CODA Data Files"
-msgstr "Obiect pentru stocarea Fisierelor CODA de date"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_029
-msgid "Protest charges"
-msgstr "Taxe de protest"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_053
-#: model:account.coda.trans.code,description:account_coda.actcc_80_43
-msgid "Printing of forms"
-msgstr "Taxe protest"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_003
-msgid "Credit commission"
-msgstr "Comision credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_58
-msgid "Remittance of foreign cheque credit after collection"
-msgstr "Expedierea unui cec de credit extern dupa incasare"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_8
-msgid "Detail of 3."
-msgstr "Detaliul 3."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_05_58
-msgid ""
-"(cancellation of an undue debit of the debtor at the initiative of the "
-"financial institution or the debtor for lack of cover)"
-msgstr ""
-"(anularea unui debit necorespunzator al debitorului la initiativa "
-"institutiei financiare sau a debitorului pentru lipsa acoperirii)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_11
-msgid "Payable coupons/repayable securities"
-msgstr "Cupoane de plata/titluri rambursabile"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_50
-msgid "Sale of securities"
-msgstr "Vanzare de titluri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_51
-msgid "Transfer in your favour – initiated by the bank"
-msgstr "Transfer in favoarea d-voastra - initiat de catre banca"
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,coda_data:0
-#: field:account.coda.import,coda_data:0
-msgid "CODA File"
-msgstr "Fisier CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_38
-msgid "Provisionally unpaid"
-msgstr "Temporar neplatit"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_003
-msgid "RBP data"
-msgstr "Date RBP"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_06
-msgid "Share option plan – exercising an option"
-msgstr "Plan optional comun - exercitarea unei optiuni"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_051
-msgid "Withholding tax"
-msgstr "Taxa retinere"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_006
-msgid "Information concerning the detail amount"
-msgstr "informatii referitoare la suma"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_37
-msgid "Costs relating to payment of foreign cheques"
-msgstr "Cheltuieli legate de plata de cecuri straine"
-
-#. module: account_coda
-#: field:account.coda.trans.code,parent_id:0
-msgid "Family"
-msgstr "Familie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_66
-msgid "Retrocession of issue commission"
-msgstr "Retrocesiune comision"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_68
-msgid "Credit after Proton payments"
-msgstr "Credit dupa platile Proton"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement,period_id:0
-msgid "Period"
-msgstr "Perioada"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:588
-#: code:addons/account_coda/wizard/account_coda_import.py:926
-#, python-format
-msgid "CODA Import failed !"
-msgstr "Importul CODA a esuat !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_01
-msgid ""
-"Withdrawal by counter cheque or receipt; cash remitted by the bank clerk"
-msgstr ""
-"Retragere prin cec sau chitanta; numerar platit de functionarul bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_01
-msgid "Short-term loan"
-msgstr "Imprumut pe termen scurt"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_01
-msgid "Domestic or local SEPA credit transfers"
-msgstr "Transferuri de credit interne sau locale SEPA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_03
-msgid "Settlement credit cards"
-msgstr "Bilant carduri de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_402
-msgid "Certification costs"
-msgstr "Costuri de certificare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_015
-msgid "Correspondent charges"
-msgstr "Taxe corespondente"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_415
-#: model:account.coda.trans.code,description:account_coda.actcc_80_39
-msgid "Surety fee"
-msgstr "Taxa de garantie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_017
-#: model:account.coda.trans.code,description:account_coda.actcc_80_23
-#: model:account.coda.trans.code,description:account_coda.actcc_80_41
-msgid "Research costs"
-msgstr "Costuri de cercetare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_07
-msgid "Collective transfer"
-msgstr "Transfer colectiv"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:912
-#, python-format
-msgid ""
-"\n"
-"\n"
-"Number of statements : "
-msgstr ""
-"\n"
-"\n"
-"Numarul de extrase : "
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_05
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_07
-msgid ""
-"The principal will be debited for the total amount of the file entered."
-msgstr "Imprumutul va fi debitat pentru suma totala a fisierului introdus."
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:332
-#: code:addons/account_coda/wizard/account_coda_import.py:357
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on movement data record 2.3, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-"\n"
-"Eroare de analiza CODA la inregistrarea mutarii datelor 2.3, secv nr %s!\n"
-"Va rugam sa raportati acest lucru prin intermediul canalului de asistenta "
-"tehnica OpenERP."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_52
-msgid "Payment in your favour"
-msgstr "Plata in favoarea d-voastra"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_08
-msgid "Registering compensation for savings accounts"
-msgstr "Inregistrarea compensatiilor pentru conturile de economii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_51
-msgid "Company issues paper in return for cash"
-msgstr "Compania emite bancnote in schimbul de numerar"
-
-#. module: account_coda
-#: field:coda.bank.account,journal:0
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement,journal_id:0
-msgid "Journal"
-msgstr "Jurnal"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_19
-msgid "Settlement of credit cards"
-msgstr "Bilant carduri de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_87
-msgid "Reimbursement of cheque-related costs"
-msgstr "Rambursarea cheltuielilor legate de cec"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_50
-msgid "Settlement of instalment credit"
-msgstr "Bilant rata credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_52
-msgid "Payment by a third person"
-msgstr "Plata de catre o persoana terta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_60
-msgid "Remittance of documents abroad - credit under usual reserve"
-msgstr ""
-"Expedierea documentelor in strainatate - credit aflat sub rezerva obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_52
-msgid "Loading GSM cards"
-msgstr "Incarcare carduri GSM"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-#: field:coda.bank.statement.line,note:0
-msgid "Notes"
-msgstr "Note"
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_end_real:0
-msgid "Ending Balance"
-msgstr "Sold final"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_64
-msgid "Your issue"
-msgstr "Problema"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:870
-#, python-format
-msgid ""
-"\n"
-"\n"
-"Bank Journal: %s\n"
-"CODA Version: %s\n"
-"CODA Sequence Number: %s\n"
-"Paper Statement Sequence Number: %s\n"
-"Bank Account: %s\n"
-"Account Holder Name: %s\n"
-"Date: %s, Starting Balance: %.2f, Ending Balance: %.2f%s"
-msgstr ""
-"\n"
-"\n"
-"Jurnal Banca: %s\n"
-"Versiune CODA: %s\n"
-"Numar secventa CODA: %s\n"
-"Numar secventa extras: %s\n"
-"Cont Bancar: %s\n"
-"Nume Titular Cont: %s\n"
-"Data: %s, Sold initial: %.2f, Sold final: %.2f%s"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,val_date:0
-msgid "Valuta Date"
-msgstr "Data Valuta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_01
-msgid ""
-"Purchase of domestic or foreign securities, including subscription rights, "
-"certificates, etc."
-msgstr ""
-"Achizitia de titluri interne sau externe, incluzand drepturi de abonare, "
-"certificare, etc."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_38
-msgid "Costs relating to incoming foreign and non-SEPA transfers"
-msgstr ""
-"Costuri referitoare la transferurile externe sosite si la cele non-SEPA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_52
-msgid "Whatever the currency of the security"
-msgstr "Oricare ar fi moneda titlului"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_069
-msgid "Forward arbitrage contracts : sum to be supplied by customer"
-msgstr ""
-"Transmiteti contracte arbitrar: suma care va fi furnizata de catre client"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:388
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" There is no invoice matching the Structured Communication '%s'!\n"
-" Please verify and adjust the invoice and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-"\n"
-" Linia '%s' a Extrasului de cont '%s':\n"
-" Nu exista nici o factura care sa se potriveasca cu Comunicarea "
-"Structurata '%s'!\n"
-" Va rugam sa verificati si sa reglati factura si sa efectuati din nou "
-"importul sau sa schimbati manual inregistrarea corespunzatoare in Extrasul "
-"de cont generat."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_407
-msgid "Costs Article 45"
-msgstr "Costuri Articolul 45"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_007
-msgid "Information concerning the detail cash"
-msgstr "Informatii referitoare la numerar"
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,company_id:0
-#: field:coda.bank.account,company_id:0
-#: field:coda.bank.statement,company_id:0
-#: field:coda.bank.statement.line,company_id:0
-msgid "Company"
-msgstr "Companie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_35
-msgid "Cash advance"
-msgstr "Avans numerar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_47
-msgid "Foreign commercial paper"
-msgstr "Titluri de credit straine"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_15
-msgid ""
-"Hire-purchase agreement under which the financial institution is the lessor"
-msgstr ""
-"Contract de inchiriere-cumpara in care institutia financiara este cea care "
-"da cu chirie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_66
-msgid "Remittance of cheque by your branch - credit under usual reserve"
-msgstr ""
-"Expedierea cecului de catre filiala D-voastra - creditul sub rezerva "
-"obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_50
-msgid "Credit of the remitter"
-msgstr "Credit expeditor"
-
-#. module: account_coda
-#: field:account.coda.trans.category,category:0
-msgid "Transaction Category"
-msgstr "Categoria Tranzactiei"
-
-#. module: account_coda
-#: field:account.coda,statement_ids:0
-msgid "Generated CODA Bank Statements"
-msgstr "Extrase de cont CODA generate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_09
-msgid "Purchase of petrol coupons"
-msgstr "Achizitie de cupoane de benzina"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_52
-msgid "Remittance of foreign bill credit under usual reserve"
-msgstr "Expediere polita straina, credit sub rezerva obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_061
-#: model:account.coda.trans.code,description:account_coda.actcc_80_47
-msgid "Charging fees for transactions"
-msgstr "Perceperea de taxe pentru tranzactii"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_category
-msgid "CODA transaction category"
-msgstr "Categoria Tranzactiilor CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_21
-msgid "Other credit applications"
-msgstr "Alte aplicatii de credit"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Supplier"
-msgstr "Furnizor"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_009
-msgid "Travelling expenses"
-msgstr "Cheltuieli de calatorie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_30
-msgid "Various transactions"
-msgstr "Diverse tranzactii"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_406
-msgid "Collection charges"
-msgstr "Taxe incasare"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Transactions"
-msgstr "Tranzactii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_50
-msgid "Cash payment"
-msgstr "Plata cu numerar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_27
-msgid "Subscription fee"
-msgstr "Taxa de abonament"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_036
-msgid "Costs relating to a refused cheque"
-msgstr "Costuri legate de un cec refuzat"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_101
-msgid "Credit transfer or cash payment with structured format communication"
-msgstr ""
-"Transfer credit sau plata cu numerar cu comunicare in format structurat"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_127
-msgid "European direct debit (SEPA)"
-msgstr "Debit european direct (SEPA)"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_068
-msgid "Countervalue of an entry"
-msgstr "Valoarea unei inregistrari"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_010
-#: model:account.coda.trans.code,description:account_coda.actcc_80_31
-msgid "Writ service fee"
-msgstr "Taxa serviciu scris"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:635
-#, python-format
-msgid ""
-"\n"
-"The CODA Statement %s Starting Balance (%.2f) does not correspond with the "
-"previous Closing Balance (%.2f) in journal %s!"
-msgstr ""
-"\n"
-"Extrasul %s CODA Sold Initial (%.2f) nu corespunde cu Soldul Final anterior "
-"(%.2f) in jurnalul %s!"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_13
-msgid "Your repurchase of issue"
-msgstr "Rascumpararea editiei"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_409
-msgid "Safe deposit charges"
-msgstr "Taxe depozit seif"
-
-#. module: account_coda
-#: field:coda.bank.account,def_payable:0
-msgid "Default Payable Account"
-msgstr "Cont de plati predefinit"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_055
-msgid "Repayment loan or credit capital"
-msgstr "Rambursarea imprumutului sau capitalul de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_05
-msgid "Settlement of fixed advance"
-msgstr "Bilantul avansului fix"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_15
-msgid ""
-"Commission collected to the debit of the customer to whom the bank delivers "
-"a key which gives access to the night safe"
-msgstr ""
-"Comision strans la debitul clientului caruia banca ii ofera o cheie cu care "
-"acces la seif noaptea"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_059
-msgid "Default interest"
-msgstr "Dobanda implicita"
-
-#. module: account_coda
-#: help:coda.bank.account,coda_st_naming:0
-msgid ""
-"Define the rules to create the name of the Bank Statements generated by the "
-"CODA processing.\n"
-"E.g. %(code)s%(y)s/%(paper)s\n"
-"\n"
-"Variables:\n"
-"Bank Journal Code: %(code)s\n"
-"Current Year with Century: %(year)s\n"
-"Current Year without Century: %(y)s\n"
-"CODA sequence number: %(coda)s\n"
-"Paper Statement sequence number: %(paper)s"
-msgstr ""
-"Definiti normele pentru crearea numelui Extraselor de cont generate de "
-"procesarea CODA.\n"
-"De ex. %(cod)s%(y)s/%(hartie)s\n"
-"\n"
-"Variabile:\n"
-"Cod Jurnal Bancar: %(cod)s\n"
-"Anul curent cu Secol: %(an)s\n"
-"Anul curent fara Secol: %(y)s\n"
-"Numar secventa CODA: %(coda)s\n"
-"Numar secventa extras: %(hartie)s"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_108
-#: model:account.coda.trans.code,description:account_coda.actcc_35_01
-#: model:account.coda.trans.code,description:account_coda.actcc_35_50
-msgid "Closing"
-msgstr "Lichidare"
-
-#. module: account_coda
-#: help:coda.bank.statement.line,globalisation_id:0
-msgid ""
-"Code to identify transactions belonging to the same globalisation level "
-"within a batch payment"
-msgstr ""
-"Cod pentru identificarea tranzactiilor care apartin aceluiasi nivel de "
-"globalizare din cadrul unei plati a unui lot"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_05
-msgid "Commercial paper claimed back"
-msgstr "Titluri de credit solicitate inapoi"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_411
-msgid "Fixed collection charge"
-msgstr "Taxa fixa incasare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_64
-msgid "Your winning lottery ticket"
-msgstr "Biletul d-voastra de loterie castigator"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_009
-msgid ""
-"Identification of the de ultimate ordering customer/debtor (SEPA SCT/SDD)"
-msgstr "Identificarea ultimei comenzi client/debitor (SEPA SCT/SDD)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_05
-msgid "Card charges"
-msgstr "Taxe card"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_03
-msgid "Payment card charges"
-msgstr "Plata taxe card"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_54
-msgid "Remittance of commercial paper for discount"
-msgstr "Expediere titluri de valoare pentru reducere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_01
-msgid "Payment"
-msgstr "Plata"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "_Cancel"
-msgstr "_Anuleaza"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_07
-msgid "Purchase of gold/pieces"
-msgstr "Cumparare aur/piese"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_15
-msgid "Balance due insurance premium"
-msgstr "Sold datorat prima de asigurare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_11
-msgid "Debit of the issuer by the bank in charge of the financial service"
-msgstr ""
-"Debit al emitentului de catre banca ce se ocupa de serviciul financiar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_58
-msgid "Remittance of cheques, vouchers, etc. credit after collection"
-msgstr "Expediere cecuri, vouchere, etc. credit dupa incasare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_19
-#: model:account.coda.trans.code,description:account_coda.actcc_09_68
-msgid "Difference in payment"
-msgstr "Diferenta la plata"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,date:0
-msgid "Entry Date"
-msgstr "Data inregistrarii"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:193
-#, python-format
-msgid ""
-"\n"
-"Please check if the 'Bank Account Number', 'Currency' and 'Account "
-"Description' fields of your configuration record match with '%s', '%s' and "
-"'%s' !"
-msgstr ""
-"\n"
-"Va rugam sa verificati daca campurile 'Numarul Contului Bancar', 'Moneda' si "
-"'Descrierea Contului' din configurarea inregistrarii se potrivesc cu '%s', "
-"'%s' si '%s' !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_58
-msgid "Idem without guarantee"
-msgstr "Idem fara garantie"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:139
-#, python-format
-msgid ""
-"\n"
-"CODA File with Filename '%s' and Creation Date '%s' has already been "
-"imported !"
-msgstr ""
-"\n"
-"Fisierul CODA cu Numele fisierului '%s' si Data Crearii '%s' a fost deja "
-"importat !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_63
-msgid "Second credit of unpaid cheque"
-msgstr "Al doilea credit al cecului neplatit"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_065
-msgid "Interest payment advice"
-msgstr "Sfat plata dobanda"
-
-#. module: account_coda
-#: field:account.coda.trans.code,type:0
-#: field:coda.bank.account,state:0
-#: field:coda.bank.statement,type:0
-#: field:coda.bank.statement.line,type:0
-msgid "Type"
-msgstr "Tip"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_112
-msgid "ATM payment (usually Eurocheque card)"
-msgstr "Plata bancomat (de obicei card Eurocheque)"
-
-#. module: account_coda
-#: field:coda.bank.account,description1:0
-msgid "Primary Account Description"
-msgstr "Descriere Cont Primar"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_126
-msgid "Term investments"
-msgstr "Investitii la termen"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_100
-msgid ""
-"(SEPA) payment with a structured format communication applying the ISO "
-"standard 11649: Structured creditor reference to remittan"
-msgstr ""
-"(SEPA) plata cu o comunicare in format structurat aplicand standardul ISO "
-"11649: Referinta structurata creditor la transmitere"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:164
-#, python-format
-msgid ""
-"\n"
-"Foreign bank accounts with IBAN structure are not supported !"
-msgstr ""
-"\n"
-"Nu sunt acceptate conturile bancare straine cu structura IBAN !"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_100
-msgid "Gross amount"
-msgstr "Valoarea bruta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_62
-msgid "Reversal of cheques"
-msgstr "Revocare cecuri"
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:299
-#, python-format
-msgid "Invalid action !"
-msgstr "Actiune nevalida !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_64
-#: model:account.coda.trans.code,comment:account_coda.actcc_41_13
-#: model:account.coda.trans.code,comment:account_coda.actcc_41_64
-msgid "Intracompany"
-msgstr "Intracompanie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_01
-msgid "Spot purchase of foreign exchange"
-msgstr "Cumpararea pe loc de valuta straina"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_429
-msgid "Foreign Stock Exchange tax"
-msgstr "Taxa Bursa de Valori straina"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_05
-#: model:account.coda.trans.code,description:account_coda.actcc_05_54
-msgid "Reimbursement"
-msgstr "Rambursare"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:868
-#, python-format
-msgid "None"
-msgstr "Niciunul"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_405
-msgid "Bill guarantee commission"
-msgstr "Comision garantie polita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_06
-msgid "Extension"
-msgstr "Prelungire"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_008
-msgid "Identification of the de ultimate beneficiary/creditor (SEPA SCT/SDD)"
-msgstr "Identificarea ultimului beneficiar/creditor (SEPA SCT/SDD)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_49
-msgid "Foreign counter transactions"
-msgstr "Tranzactii externe"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_01
-msgid "Cash withdrawal"
-msgstr "Retragere numerar"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,partner_id:0
-msgid "Partner"
-msgstr "Partener"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_37
-msgid ""
-"Fixed right, either one-off or periodical; for details, see \"categories\""
-msgstr ""
-"Fixat dreapta, fie editie singulara fie periodic; pentru detalii, vedeti "
-"\"categorii\""
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_05
-msgid "Loading Proton"
-msgstr "Incarcare Proton"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_21
-msgid "Pay-packet charges"
-msgstr "Taxe plata pachet"
-
-#. module: account_coda
-#: field:coda.bank.account,transfer_account:0
-msgid "Default Internal Transfer Account"
-msgstr "Cont Predefinit Transfer Intern"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_074
-msgid "Mailing costs"
-msgstr "Costuri de expediere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_07
-msgid "Unpaid foreign bill"
-msgstr "Polita straina neplatita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_07
-msgid "Payment by GSM"
-msgstr "Plata prin GSM"
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: selection:coda.bank.account,state:0
-#: view:coda.bank.statement:0
-#: selection:coda.bank.statement,type:0
-msgid "Normal"
-msgstr "Obisnuit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_50
-msgid "Credit after collection"
-msgstr "Credit dupa incasare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_80
-msgid "Separately charged costs and provisions"
-msgstr "Cheltuieli si dispozitii taxate separat"
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: field:coda.bank.account,currency:0
-#: field:coda.bank.statement,currency:0
-msgid "Currency"
-msgstr "Moneda"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_06
-msgid "Extension of maturity date"
-msgstr "Prelungirea datei scadente"
-
-#. module: account_coda
-#: field:coda.bank.account,def_receivable:0
-msgid "Default Receivable Account"
-msgstr "Cont de Incasari Predefinit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_15
-msgid "Night safe"
-msgstr "Seif noaptea"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Total Amount"
-msgstr "Suma totala"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_214
-msgid "Issue commission (delivery order)"
-msgstr "Emitere comision (comanda de livrare)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_07
-msgid ""
-"Often by standing order or direct debit. In case of direct debit, family 13 "
-"is used."
-msgstr ""
-"Adesea prin comanda ferma sau debit direct. In cazul debitului direct, este "
-"folosita familia 13."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_01
-msgid "Loading a GSM card"
-msgstr "Incarcarea unui card GSM"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_021
-msgid "Costs for drawing up a bank cheque"
-msgstr "Costuri pentru incarcarea unui cec bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_026
-msgid "Handling commission"
-msgstr "Comision de gestionare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_201
-msgid "Advice notice commission"
-msgstr "Comision notificare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_64
-#: model:account.coda.trans.code,description:account_coda.actcc_47_64
-msgid "Warrant"
-msgstr "Imputernicire"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_07
-msgid "Unpaid commercial paper"
-msgstr "Titlu de credit neplatit"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:120
-#: code:addons/account_coda/wizard/account_coda_import.py:130
-#: code:addons/account_coda/wizard/account_coda_import.py:159
-#: code:addons/account_coda/wizard/account_coda_import.py:168
-#: code:addons/account_coda/wizard/account_coda_import.py:174
-#: code:addons/account_coda/wizard/account_coda_import.py:198
-#: code:addons/account_coda/wizard/account_coda_import.py:272
-#: code:addons/account_coda/wizard/account_coda_import.py:281
-#: code:addons/account_coda/wizard/account_coda_import.py:305
-#: code:addons/account_coda/wizard/account_coda_import.py:440
-#: code:addons/account_coda/wizard/account_coda_import.py:464
-#: code:addons/account_coda/wizard/account_coda_import.py:473
-#: code:addons/account_coda/wizard/account_coda_import.py:497
-#, python-format
-msgid "Data Error!"
-msgstr "Eroare Date!"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_010
-msgid "Information pertaining to sale or purchase of securities"
-msgstr "Informatii referitoare la vanzarea sau cumpararea de titluri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_54
-msgid "Your payment ATM"
-msgstr "Plata prin bancomat"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_123
-msgid "Fees and commissions"
-msgstr "Taxe si comisioane"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:689
-#, python-format
-msgid ""
-"Free Communication:\n"
-" %s"
-msgstr ""
-"Comunicare gratuita:\n"
-" %s"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_15
-msgid "Purchase of an international bank cheque"
-msgstr "Achizitia unui cec bancar international"
-
-#. module: account_coda
-#: field:coda.bank.account,coda_st_naming:0
-msgid "Bank Statement Naming Policy"
-msgstr "Politica de denumire a Extrasului de cont"
-
-#. module: account_coda
-#: field:coda.bank.statement,date:0
-msgid "Date"
-msgstr "Data"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_00
-#: model:account.coda.trans.code,description:account_coda.actcc_30_39
-#: model:account.coda.trans.code,description:account_coda.actcc_30_89
-msgid "Undefined transaction"
-msgstr "Tranzactie nedefinita"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Extended Filters..."
-msgstr "Filtre Extinse..."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_06
-msgid "Costs chargeable to the remitter"
-msgstr "Costuri suportate de catre expeditor"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_205
-msgid ""
-"Documentary payment commission | Document commission | Drawdown fee | "
-"Negotiation fee"
-msgstr ""
-"Document plata comision | Document comision | Scadere taxa | Taxa de "
-"negociere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_60
-msgid "Settlement of mortgage loan"
-msgstr "Reglementare imprumut bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_01
-msgid "Purchase of securities"
-msgstr "Achizitia de titluri"
-
-#. module: account_coda
-#: field:account.coda,note:0
-msgid "Import Log"
-msgstr "Importati jurnalul"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_07
-msgid "Domestic commercial paper"
-msgstr "Titlu de credit intern"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_034
-msgid "Reinvestment fee"
-msgstr "Taxa de reinvestire"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_12
-msgid "Costs for opening a bank guarantee"
-msgstr "Costuri pentru deschiderea unei garantii bancare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_414
-msgid "Regularisation charges"
-msgstr "Taxe regularizare"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: field:coda.bank.statement.line,statement_id:0
-#: model:ir.actions.act_window,name:account_coda.act_account_bank_statement_goto_coda_bank_statement
-#: model:ir.model,name:account_coda.model_coda_bank_statement
-msgid "CODA Bank Statement"
-msgstr "Extras de cont CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_15
-msgid "Your repayment hire-purchase and similar claims"
-msgstr "Rambursarea inchiriere-cumparare si alte creante asemanatoare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_62
-msgid "Reversal of cheque"
-msgstr "Revocare cec"
-
-#. module: account_coda
-#: field:account.coda.trans.code,code:0
-msgid "Code"
-msgstr "Cod"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_032
-msgid "Drawing up a circular cheque"
-msgstr "Elaborarea unui cec circular"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Seq"
-msgstr "Secv"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_52
-msgid "Payment night safe"
-msgstr "Plata seif noaptea"
-
-#. module: account_coda
-#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_bank_statement
-#: model:ir.model,name:account_coda.model_account_bank_statement
-msgid "Bank Statement"
-msgstr "Extras de cont"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_name:0
-msgid "Counterparty Name"
-msgstr "Nume echivalent"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_006
-msgid "Various fees/commissions"
-msgstr "Diverse taxe/comisioane"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_209
-msgid "Transfer commission"
-msgstr "Comision transfer"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Information"
-msgstr "Informatii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_39
-#: model:account.coda.trans.code,description:account_coda.actcc_00_89
-msgid "Cancellation of a transaction"
-msgstr "Anularea unei tranzactii"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_3
-msgid ""
-"Simple amount with detailed data; e.g. in case of charges for cross-border "
-"credit transfers."
-msgstr ""
-"Suma simpla cu date detaliate; de ex. in cazul taxelor pentru transferurile "
-"de credit transfrontaliere."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_15
-msgid "Your purchase of lottery tickets"
-msgstr "Cumparati bilete la loterie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_05
-msgid "Collective payments of wages"
-msgstr "Plata colectiva a salariilor"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_17
-msgid "Collected for unsealed deposit of securities, and other parcels"
-msgstr "Colectat pentru depozit de titluri nesigilat, si alte pachete"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_004
-msgid "Counterparty’s banker"
-msgstr "Bacher echivalent"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:426
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" No matching partner record found!\n"
-" Please adjust the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-"\n"
-" Linia '%s' a Extrasului de cont '%s':\n"
-" Nu a fost gasita nici o inregistrare a partenerului care sa se "
-"potriveasca!\n"
-" Va rugam sa reglati manual inregistrarea corespunzatoare in Extrasul "
-"de cont generat."
-
-#. module: account_coda
-#: help:coda.bank.account,journal:0
-msgid "Bank Journal for the Bank Statement"
-msgstr "Jurnal banca pentru Extrasul de cont"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Globalisation"
-msgstr "Globalizare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_54
-msgid "Fixed advance – capital and interest"
-msgstr "Avans fix - capital si dobanzi"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_11
-msgid "Payment documents abroad"
-msgstr "Documente plata in strainatate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_09
-msgid ""
-"Postage recouped to the debit of the customer (including forwarding charges)"
-msgstr ""
-"Recuperare costuri expediere prin posta din debitul clientului (inclusiv "
-"taxele de expediere)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_04
-msgid "Costs for holding a documentary cash credit"
-msgstr "Costuri pentru detinerea unui documentar numerar credit"
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_start:0
-msgid "Starting Balance"
-msgstr "Soldul initial"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_13
-msgid "Settlement of bank acceptances"
-msgstr "Reglementare accepturi bancare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_200
-msgid "Overall documentary credit charges"
-msgstr "Ansamblu de taxe documentar credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_25
-msgid "Renting of direct debit box"
-msgstr "Inchiriere casuta debit direct"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_52
-msgid ""
-"Payment of coupons from a deposit or settlement of coupons delivered over "
-"the counter - credit under usual reserve"
-msgstr ""
-"Plata cupoanelor dintr-un depozit sau reglementarea cupoanelor prezentate la "
-"ghiseu - credit sub rezerva obisnuita"
-
-#. module: account_coda
-#: help:coda.bank.statement.line,globalisation_level:0
-msgid ""
-"The value which is mentioned (1 to 9), specifies the hierarchy level of the "
-"globalisation of which this record is the first.\n"
-"The same code will be repeated at the end of the globalisation."
-msgstr ""
-"Valoarea care este mentionata (1 la 9), specifica nivelul ierarhic al "
-"globalizarii din care aceasta inregistrare este prima.\n"
-"Acelasi cod va fi repetat la sfarsitul globalizarii."
-
-#. module: account_coda
-#: field:coda.bank.account,description2:0
-msgid "Secondary Account Description"
-msgstr "Descriere Cont Secundar"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_211
-msgid "Credit arrangement fee | Additional credit arrangement fee"
-msgstr "Taxa aranjament credit | Taxa aranjament credit suplimentar"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statements
-#: model:ir.ui.menu,name:account_coda.menu_coda_bank_statements
-msgid "CODA Bank Statements"
-msgstr "Extrase de cont CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_62
-msgid "Term loan"
-msgstr "Clauze imprumut"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_70
-msgid "Sale of traveller’s cheque"
-msgstr "Vanzare de cecuri de calatorie"
-
-#. module: account_coda
-#: field:coda.bank.account,name:0
-#: field:coda.bank.statement,name:0
-msgid "Name"
-msgstr "Nume"
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,coda_creation_date:0
-msgid "CODA Creation Date"
-msgstr "Data crearii CODA"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:583
-#: code:addons/account_coda/wizard/account_coda_import.py:904
-#, python-format
-msgid ""
-"\n"
-"Unknown Error : "
-msgstr ""
-"\n"
-"Eroare necunoscuta : "
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_035
-msgid "Charges foreign documentary bill"
-msgstr "Taxe documentar polita straina"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_39
-msgid "Agios on guarantees given"
-msgstr "Comisioane pe garantiile oferite"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_070
-msgid "Forward arbitrage contracts : sum to be supplied by bank"
-msgstr "Transmite arbitrajul contractelor : suma va fi furnizata de banca"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_56
-#: model:account.coda.trans.code,description:account_coda.actcc_11_56
-msgid "Reserve"
-msgstr "Rezerva"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_23
-msgid ""
-"Costs charged for all kinds of research (information on past transactions, "
-"address retrieval, ...)"
-msgstr ""
-"Costuri percepute pentru toate tipurile de informatii accesate(informatii "
-"privind tranzactiile trecute, recuperarea adresei, ...)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_14
-msgid "Handling costs instalment credit"
-msgstr "Gestionare costuri rate credit"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_6
-msgid ""
-"Detail of 2. Simple amount without detailed data. Normally, data of this "
-"kind comes after type 2. The customer may ask for a separate file containing "
-"the detailed data. In that case, one will speak of a ‘separate application’. "
-"The records in a separate application keep type 6."
-msgstr ""
-"Detaliul 2. Suma simpla fara date detaliate. In mod normal, acest tip de "
-"date urmeaza dupa tipul 2. Clientul poate solicita un fisier separat care sa "
-"contina datele detaliate. In acest caz, este vorba despre un 'formular "
-"separat'. Inregistrsarile intr-un formular separat tin de tipul 6."
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "CODA Files"
-msgstr "Fisiere CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_17
-msgid "Financial centralisation"
-msgstr "Centralizare financiara"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_404
-msgid "Discount commission"
-msgstr "Comision de reducere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_45
-msgid "Documentary credit charges"
-msgstr "Taxe documentar credit"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:913
-#, python-format
-msgid ""
-"\n"
-"Number of errors : "
-msgstr ""
-"\n"
-"Numar de greseli : "
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_22
-msgid "Management/custody"
-msgstr "Gestiune/custodie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_51
-msgid "Tender"
-msgstr "Licitatie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_56
-msgid "Non-presented certified cheques"
-msgstr "Cecuri certificate neprezentate"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_408
-msgid "Cover commission"
-msgstr "Acopera comisionul"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_071
-msgid "Fixed loan advance - availability"
-msgstr "Avans fix imprumut - disponibilitate"
-
-#. module: account_coda
-#: field:account.coda,name:0
-#: field:account.coda.import,coda_fname:0
-msgid "CODA Filename"
-msgstr "Fisier CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_31
-msgid "E.g. for signing invoices"
-msgstr "De ex. pentru semnarea facturilor"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_37
-msgid "Various costs for possessing or using a payment card"
-msgstr "Diverse costuri pentru detinerea si utilizarea unui card de plati"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_37
-msgid "Costs related to commercial paper"
-msgstr "Costuri legate de titlul de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_043
-#: model:account.coda.trans.code,description:account_coda.actcc_80_07
-msgid "Insurance costs"
-msgstr "Costuri asigurare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_431
-msgid "Delivery of a copy"
-msgstr "Eliberarea unei copii"
-
-#. module: account_coda
-#: help:coda.bank.account,transfer_account:0
-msgid ""
-"Set here the default account that will be used for internal transfer between "
-"own bank accounts (e.g. transfer between current and deposit bank accounts)."
-msgstr ""
-"Aici setati contul implicit care va fi folosit pentru transferurile interne "
-"intre propriile conturi bancare (de ex. transferul intre conturile bancare "
-"curente si cele de depozit)."
-
-#. module: account_coda
-#: view:account.coda:0
-#: view:coda.bank.account:0
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Group By..."
-msgstr "Grupeaza dupa..."
-
-#. module: account_coda
-#: field:coda.bank.account,awaiting_account:0
-msgid "Default Account for Unrecognized Movement"
-msgstr "Cont predefinit pentru Miscarea Neidentificata"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:580
-#: code:addons/account_coda/wizard/account_coda_import.py:897
-#, python-format
-msgid ""
-"\n"
-"System Error : "
-msgstr ""
-"\n"
-"Eroare de sistem : "
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_60
-msgid "Non-presented circular cheque"
-msgstr "Cec circular neprezentat"
-
-#. module: account_coda
-#: field:coda.bank.statement,line_ids:0
-msgid "CODA Bank Statement lines"
-msgstr "Linii extras de cont CODA"
-
-#. module: account_coda
-#: sql_constraint:account.coda:0
-msgid "This CODA has already been imported !"
-msgstr "Acest CODA a fost importat deja !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_19
-msgid "Documentary import credits"
-msgstr "Documentar import credite"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:320
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on movement data record 2.2, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-"\n"
-"Eroare de analiza CODA la inregistrarea mutarii datelor 2.2, nr secv %s!\n"
-"Va rugam sa raportati aceasta problema prin intermediul canalului de "
-"asistenta OpenERP."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_001
-msgid "Data concerning the counterparty"
-msgstr "Date referitoare la omolog"
-
-#. module: account_coda
-#: view:account.coda.comm.type:0
-msgid "CODA Structured Communication Type"
-msgstr "Comunicare Structurata de tip CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_07
-msgid "Contra-entry of a direct credit or of a discount"
-msgstr "Contra-inregistrare a unui credit direct sau a unei reduceri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_55
-msgid "Interest term investment"
-msgstr "Termeni dobanda investitie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_007
-#: model:account.coda.trans.code,description:account_coda.actcc_80_37
-msgid "Access right to database"
-msgstr "Drept de acces la baza de date"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_type
-msgid "CODA transaction type"
-msgstr "Tipul tranzactiei CODA"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,account_id:0
-msgid "Account"
-msgstr "Cont"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_37
-msgid "Costs relating to the payment of a foreign bill"
-msgstr "Costuri legate de plata unei polite straine"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_13
-msgid "Eurocheque written out abroad"
-msgstr "Eurocec emis in strainatate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_01
-msgid "Capital and/or interest (specified by the category)"
-msgstr "Capital si/sau dobanda (specificat dupa categorie)"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Glob. Am."
-msgstr "Suma Glob."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_17
-msgid "Charge for safe custody"
-msgstr "Taxa pentru pastrarea in siguranta"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_102
-msgid ""
-"Credit transfer or cash payment with reconstituted structured format "
-"communication"
-msgstr ""
-"Virament sau plata in numerar cu comunicarea in format structurat "
-"reconstituit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_86
-msgid "Payment after cession"
-msgstr "Plata dupa cesionare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_14
-#: model:account.coda.trans.code,description:account_coda.actcc_47_14
-msgid "Warrant fallen due"
-msgstr "Imputernicire scadenta"
-
-#. module: account_coda
-#: model:ir.actions.act_window,name:account_coda.action_imported_coda_files
-#: model:ir.ui.menu,name:account_coda.menu_imported_coda_files
-msgid "Imported CODA Files"
-msgstr "Fisiere CODA Importate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_29
-msgid "Charges collected for: - commercial information - sundry information"
-msgstr "Taxe adunate pentru: - informatii comerciale - informatii diverse"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_15
-msgid "In case of subscription before the interest due date"
-msgstr "In cazul abonarii inainte de data scadentei dobanzii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_43
-msgid "Foreign cheques"
-msgstr "Cecuri straine"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_62
-msgid "Sale of gold/pieces under usual reserve"
-msgstr "Vanzare de aur/monede sub rezerva obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_51
-msgid "The bank takes the initiative for crediting the customer’s account."
-msgstr "Banca ia initiativa pentru creditarea contului clientului."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_05
-msgid "Full or partial reimbursement of a fixed advance at maturity date"
-msgstr "Rambursare completa sau partiala a unui avans fix la data scadenta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_26
-msgid "Travel insurance premium"
-msgstr "Asigurare premium de calatorie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_416
-msgid "Charges for the deposit of security"
-msgstr "Taxe pentru depunerea titlurilor"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_04
-msgid "At home as well as abroad"
-msgstr "Acasa, precum si in strainatate"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:192
-#, python-format
-msgid ""
-"\n"
-"No matching CODA Bank Account Configuration record found !"
-msgstr ""
-"\n"
-"Nu a fost gasita nici o Configurare CODA a Contului bancar care sa se "
-"potriveasca !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_50
-msgid "Remittance of commercial paper - credit after collection"
-msgstr "Expedierea titlurilor de valoare - credit dupa incasare"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-msgid "Search CODA Bank Statements"
-msgstr "Cautati Extrasele bancare CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_410
-msgid "Reclamation charges"
-msgstr "Taxe de reconversie"
-
-#. module: account_coda
-#: model:ir.actions.act_window,help:account_coda.action_coda_bank_statements
-msgid ""
-"The CODA Bank Statements contain the information encoded in their "
-"originating CODA file in a human readable format. The Bank Statements "
-"associated with a CODA contain the subset of the CODA Bank Statement data "
-"that is required for the creation of the Accounting Entries."
-msgstr ""
-"Extrasele bancare CODA contin informatiile inregistrate in fisierul lor "
-"original CODA intr-un format lizibil. Extrasele Bancare asociate cu un CODA "
-"contin subansamblul de date ale Extraselor Bancare CODA care sunt necesare "
-"pentru crearea Inregistrarilor Contabile."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_114
-msgid "POS credit - individual transaction"
-msgstr "Credit PdV - tranzactie individuala"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_70
-msgid "Settlement of discount bank acceptance"
-msgstr "Reglementare a acceptarii reducerii de catre banca"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_02
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_08
-msgid "Eurozone = countries which have the euro as their official currency"
-msgstr "Zona euro = tari in care euro este moneda oficiala"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_02
-msgid "The bank takes the initiative for debiting the customer’s account."
-msgstr "Banca preia initiativa pentru debitarea contului clientului."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_58
-msgid "Reversal"
-msgstr "Revocare"
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: selection:coda.bank.account,state:0
-#: view:coda.bank.statement:0
-#: selection:coda.bank.statement,type:0
-msgid "Info"
-msgstr "Informatii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_02
-msgid "Costs relating to electronic output"
-msgstr "Costuri legate de iesirea electronica"
-
-#. module: account_coda
-#: sql_constraint:account.coda.comm.type:0
-msgid "The Structured Communication Code must be unique !"
-msgstr "Codul Comunicarii Structurate trebuie sa fie unic !"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:57
-#, python-format
-msgid "Wizard in incorrect state. Please hit the Cancel button!"
-msgstr "Wizard in stare incorecta. Va rugam sa apasati butonul Anuleaza!"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_418
-msgid "Endorsement commission"
-msgstr "Andosare comision"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_005
-msgid "Renting of letterbox"
-msgstr "Inchirierea cutiei postale"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_13
-msgid "Commission for renting a safe deposit box"
-msgstr "Comision pentru inchirierea unui seif"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_39
-msgid "To be used for issued circular cheques given in consignment"
-msgstr "Va fi folosit pentru cecuri circulare emise date in conosament"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_11
-msgid "Securities"
-msgstr "Titluri de valoare"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Free Communication"
-msgstr "Comunicare gratuita"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_2
-msgid ""
-"Amount as totalised by the bank; e.g. : the total amount of a series of "
-"credit transfers with a structured communication As a matter of principle, "
-"this type will also be used when no detailed data (type 6 or 7) is following."
-msgstr ""
-"Bilantul bancii; de ex. suma totala a unei serii de transferuri cu o "
-"comunicare structurata. Ca o chestiune de principiu, acest tip va fi de "
-"asemenea folosit atunci cand nu urmeaza alte date detaliate (tipul 6 sau 7)."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_37
-msgid "Cheque-related costs"
-msgstr "Cheltuieli legate de cecuri"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_033
-msgid "Charges for a foreign bill"
-msgstr "Taxe pentru o polita straina"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_13
-msgid "Cash withdrawal by your branch or agents"
-msgstr "Retragere de numerar de sucursala sau agentii d-voastra"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_049
-msgid "Fiscal stamps/stamp duty"
-msgstr "Timbre fiscale/taxa de timbru"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_58
-msgid ""
-"Also for vouchers, postal orders, anything but bills of exchange, "
-"acquittances, promissory notes, etc."
-msgstr ""
-"Valabil pentru vouchere, mandate postale, orice in afara de polite, "
-"recipise, obligatiuni, etc."
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Select Your File :"
-msgstr "Selectati fisierul :"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_06
-msgid "Damage relating to bills and cheques"
-msgstr "Daune legate de polite si cecuri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_09
-msgid "Unpaid voucher"
-msgstr "Voucher neplatit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_13
-msgid "Unissued part (see 64)"
-msgstr "Neemis (vedeti 64)"
-
-#. module: account_coda
-#: view:account.coda.import:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
-#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_1
-#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_2
-#: model:ir.model,name:account_coda.model_account_coda_import
-msgid "Import CODA File"
-msgstr "Importati Fisierul CODA"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:289
-#: code:addons/account_coda/wizard/account_coda_import.py:481
-#, python-format
-msgid "Transaction Code unknown, please consult your bank."
-msgstr "Cod Tranzactie necunoscut, va rugam sa consultati banca."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_55
-msgid "Fixed advance – interest only"
-msgstr "Avans fix - numai dobanda"
-
-#. module: account_coda
-#: view:account.coda.trans.type:0
-msgid "CODA Transaction Type"
-msgstr "Tip Tranzactie CODA"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_level:0
-msgid "Globalisation Level"
-msgstr "Nivelul de globalizare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_020
-msgid "Costs of physical delivery"
-msgstr "Costurile de livrare fizica"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_60
-msgid "Sale of foreign bank notes"
-msgstr "Vanzare de bancnote straine"
-
-#. module: account_coda
-#: field:account.coda.import,note:0
-msgid "Log"
-msgstr "Jurnal"
-
-#. module: account_coda
-#: view:account.coda:0
-msgid "Search CODA Files"
-msgstr "Cautati Fisierele CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_52
-msgid "Remittance of commercial paper - credit under usual reserve"
-msgstr "Expedierea titlurilor de valoare - credit sub rezerva obisnuita"
-
-#. module: account_coda
-#: help:coda.bank.account,active:0
-msgid ""
-"If the active field is set to False, it will allow you to hide the Bank "
-"Account without removing it."
-msgstr ""
-"Daca campul activ este setat pe Fals, va va permite sa ascundeti Contul "
-"Bancar fara sa il stergeti."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_54
-msgid "Among other things advances or promissory notes"
-msgstr "Printre alte lucruri, avansuri sau obligatiuni"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_10
-msgid "Purchase of Smartcard"
-msgstr "Achizitia de Smartcard"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:664
-#, python-format
-msgid ""
-"Transaction Type: %s - %s\n"
-"Transaction Family: %s - %s\n"
-"Transaction Code: %s - %s\n"
-"Transaction Category: %s - %s\n"
-"Structured Communication Type: %s - %s\n"
-"Communication: %s"
-msgstr ""
-"Tip Tranzactie: %s - %s\n"
-"Grup Tranzactie: %s - %s\n"
-"Cod Tranzactie: %s - %s\n"
-"Categorie Tranzactie: %s - %s\n"
-"Tip Comunicare Structurata: %s - %s\n"
-"Comunicare: %s"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_208
-msgid "Commitment fee deferred payment"
-msgstr "Amanarea platii taxei de remitere"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_005
-msgid "Data concerning the correspondent"
-msgstr "Date referitoare la corespondent"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_66
-msgid "For professionals such as insurances and stockbrokers"
-msgstr ""
-"In atentia profesionistilor precum agentii de asigurari si agentii de bursa"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_19
-msgid ""
-"Collected for securities, gold, pass-books, etc. placed in safe custody"
-msgstr ""
-"Incasat pentru titluri, aur, carnete de economii, etc. plasate in siguranta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_19
-msgid ""
-"Used in case of payments accepted under reserve of count, result of "
-"overcrediting"
-msgstr ""
-"Utilizat in cazul platilor acceptate sub rezerva numararii, ca rezultat al "
-"supra creditarii"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:630
-#, python-format
-msgid ""
-"\n"
-"Configuration Error in journal %s!\n"
-"Please verify the Default Debit and Credit Account settings."
-msgstr ""
-"\n"
-"Eroare de Configurare in jurnalul %s!\n"
-"Va rugam sa verificati Debitul Implicit si setarile Contului de credit."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_09
-msgid "Agio on supplier's bill"
-msgstr "Comision pentru schimbul valutar pe factura furnizorului"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_213
-msgid "Financing fee"
-msgstr "Taxa de finantare"
-
-#. module: account_coda
-#: field:account.bank.statement.line.global,coda_statement_line_ids:0
-msgid "CODA Bank Statement Lines"
-msgstr "Linii Extrase bancare CODA"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:170
-#, python-format
-msgid ""
-"\n"
-"Unsupported bank account structure !"
-msgstr ""
-"\n"
-"Structura contului bancar nu este acceptata!"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_037
-msgid "Commission for handling charges"
-msgstr "Comision pentru taxele de gestiune"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_03
-msgid "Subscription to securities"
-msgstr "Abonament la titluri de valoare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_425
-msgid "Foreign broker's commission"
-msgstr "Comision broker strain"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_7
-msgid ""
-"Detail of 2. Simple account with detailed data The records in a separate "
-"application keep type 7."
-msgstr ""
-"Detaliu 2. Cont simplu cu date detaliate. Inregistrarile intr-o aplicatie "
-"separata pastreaza tipul 7."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_125
-#: model:account.coda.trans.code,description:account_coda.actcf_13
-#: view:coda.bank.statement.line:0
-msgid "Credit"
-msgstr "Credit"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:155
-#, python-format
-msgid ""
-"\n"
-"Foreign bank accounts with BBAN structure are not supported !"
-msgstr ""
-"\n"
-"Conturile bancare straine cu structura BBAN nu sunt acceptate !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_09
-msgid "Counter transactions"
-msgstr "Tranzactii la ghiseu"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_coda_bank_statement_line
-msgid "CODA Bank Statement Line"
-msgstr "Linia Extrasului bancar CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_17
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_66
-msgid ""
-"In case of centralisation by the bank, type 2 will be allotted to this "
-"transaction. This total can be followed by the detailed movement."
-msgstr ""
-"In cazul centralizarii de catre banca, tipul 2 va fi alocat acestei "
-"tranzactii. Acest total poate fi urmat de o miscare detaliata."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_057
-msgid "Interest subsidy"
-msgstr "Subsidiu dobanda"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_41
-msgid "International credit transfers - non-SEPA credit transfers"
-msgstr ""
-"Transferuri internationale de credit - transferuri de credit non-SEPA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_87
-msgid "Overall amount, VAT included"
-msgstr "Cuantumul total, TVA inclus"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_01
-msgid "Payment of a foreign cheque"
-msgstr "Plata unui cec strain"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "General"
-msgstr "General"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:856
-#, python-format
-msgid ""
-"\n"
-"Incorrect ending Balance in CODA Statement %s for Bank Account %s!"
-msgstr ""
-"\n"
-"Sold final incorect in Extrasul CODA %s pentru Contul Bancar %s!"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_04
-msgid "Issues"
-msgstr "Probleme"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_37
-msgid ""
-"If any, detail in the category (e.g. costs for presentation for acceptance, "
-"etc.)"
-msgstr ""
-"Daca este cazul, detalii in categoria (de ex. costurile pentru prezentarea "
-"de acceptare, etc.)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_17
-msgid "Purchase of fiscal stamps"
-msgstr "Cumparare timbruri fiscale"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_01
-#: model:account.coda.trans.code,description:account_coda.actcc_41_50
-msgid "Transfer"
-msgstr "Transfer"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "View Bank Statement(s)"
-msgstr "Vizualizati Extrasul Bancar(s)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_20
-msgid "Drawing up a certificate"
-msgstr "Intocmirea unui certificat"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_013
-msgid "Payment commission"
-msgstr "Plata comision"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_01
-msgid ""
-"Bills of exchange, acquittances, promissory notes; debit of the drawee"
-msgstr ""
-"Polite, recipise, obligatiuni, debitul persoanei care achita o polita"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "View CODA Bank Statement(s)"
-msgstr "Vizualizati Extrasul Bancar CODA(s)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_15
-msgid "Your purchase bank cheque"
-msgstr "Cumparare cec bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_05
-msgid "Payment of voucher"
-msgstr "Plata voucherului"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_68
-msgid "Documentary export credits"
-msgstr "Credite export documentar"
-
-#. module: account_coda
-#: field:coda.bank.account,find_bbacom:0
-msgid "Lookup Invoice"
-msgstr "Cautati Factura"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_03
-msgid "Cheques"
-msgstr "Cecuri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_56
-msgid "Unexecutable reimbursement"
-msgstr "Nu se poate efectua rambursarea"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_03
-msgid "Unpaid debt"
-msgstr "Datorie neplatita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_52
-msgid ""
-"First credit of cheques, vouchers, luncheon vouchers, postal orders, credit "
-"under usual reserve"
-msgstr ""
-"Primul credit pentru cecuri, vouchere, tichete de masa, mandate postale, "
-"credit aflat sub rezerva obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_05
-msgid ""
-"Bill claimed back at the drawer's request (bill claimed back before maturity "
-"date)"
-msgstr ""
-"Polita rechemata inapoi la solicitarea persoanei care trage o polita asupra "
-"sa (polita rechemata inainte de data scadenta)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_11
-msgid ""
-"Costs chargeable to clients who ask to have their correspondence kept at "
-"their disposal at the bank's counter"
-msgstr ""
-"Costuri suportate de clientii care solicita sa isi aiba corespondenta "
-"pastrata la dispozitia lor la ghiseul bancii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_64
-msgid ""
-"Amount paid to the issuer by the bank in charge of the placement (firm "
-"underwriting or not); also used for the payment in full of partly-paid "
-"shares, see transaction 05"
-msgstr ""
-"Suma platita emitentului de catre banca responsabila cu plasarea (subscriere "
-"ferma sau nu); folosit de asemenea pentru plata integrala a actiunilor "
-"platite partial, vedeti tranzactia 05"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_15
-msgid "Cheque drawn by the bank on itself, usually with charges."
-msgstr "Cec elaborat de banca, de obicei cu taxe."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_072
-msgid "Countervalue of commission to third party"
-msgstr "Contravaloarea comisionului catre partea terta"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_01
-msgid "Individual transfer order"
-msgstr "Ordin individual de transfer"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:436
-#, python-format
-msgid ""
-"\n"
-"Movement data records of type 2.%s are not supported !"
-msgstr ""
-"\n"
-"Mutarea inregistrarii datelor de dipul 2.%s nu este acceptata !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_02
-msgid "Payment by means of a payment card within the Eurozone"
-msgstr "Plata prin intermediul unui card de plati in cadrul Zonei Euro"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_01
-msgid ""
-"Credit transfer given by the customer on paper or electronically, even if "
-"the execution date of this transfer is in the future. Domestic payments as "
-"well as euro payments meeting the requirements."
-msgstr ""
-"Transferul de credit efectuat de client pe hartie sau electronic, chiar daca "
-"date efectuarii acestui transfer este in viitor. Platile interne precum si "
-"platile in euro indeplinesc conditiile."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_35
-msgid "Closing (periodical settlements for interest, costs,…)"
-msgstr "Lichidare (reglementari periodice pentru dobanda, cheltuieli,...)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_51
-msgid "Unloading Proton"
-msgstr "Descarcare Proton"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_019
-msgid "Tax on physical delivery"
-msgstr "Taxa pe livrarea fizica"
-
-#. module: account_coda
-#: field:coda.bank.statement,statement_id:0
-msgid "Associated Bank Statement"
-msgstr "Extras de cont asociat"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_08
-msgid ""
-"Debit of the remitter when the drawee pays in advance directly to the "
-"remitter (regards bank acceptances)"
-msgstr ""
-"Debitul remitentului atunci cand persoana care achita polita ii plateste in "
-"avans direct remitentului (priveste acceptul bancii)"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_103
-msgid "number (e.g. of the cheque, of the card, etc.)"
-msgstr "numar (de ex. al cecului, al cardului, etc.)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_24
-msgid "Participation in and management of interest refund system"
-msgstr "Participare la si gestiunea sistemului de restituire a dobanzii"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Glob. Amount"
-msgstr "Suma Glob."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_58
-msgid "Payment by your branch/agents"
-msgstr "Plata de catre sucursala/agentii d-voastra"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_25
-#: model:account.coda.trans.code,description:account_coda.actcc_43_70
-msgid "Purchase of traveller’s cheque"
-msgstr "Cumparare de cecuri de calatorie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_39
-msgid "Your issue circular cheque"
-msgstr "Emitere cec circular"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_09
-msgid ""
-"For professionals (stockbrokers) only, whoever the issuer may be (Belgian or "
-"foreigner)"
-msgstr ""
-"Doar pentru profesionisti (agenti de bursa), indiferent cine este emitatorul "
-"(Belgian sau strain)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_33
-msgid ""
-"Costs not specified otherwise, often with a manual communication (e.g. for "
-"collecting, ordering funds). VAT excluded = type 0 VAT included = type 3 (at "
-"least 3 articles)"
-msgstr ""
-"Costuri nespecificate, adesea cu o comunicare manuala (de ex. pentru "
-"incasare, ordonare fonduri). TVA exclus = tipul 0 TVA inclus = tipul 3 (cel "
-"putin 3 articole)"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_023
-msgid "Exercising fee"
-msgstr "Exercitare taxa"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:934
-#, python-format
-msgid "Import CODA File result"
-msgstr "Importati rezultatul Fisierului CODA"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_111
-msgid "POS credit – Globalisation"
-msgstr "Credit PdV - Globalizare"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Search Bank Transactions"
-msgstr "Cautati Tranzactiile Bancare"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:577
-#, python-format
-msgid ""
-"\n"
-"Application Error : "
-msgstr ""
-"\n"
-"Eroare de aplicatie : "
-
-#. module: account_coda
-#: help:coda.bank.account,description1:0
-#: help:coda.bank.account,description2:0
-msgid ""
-"The Primary or Secondary Account Description should match the corresponding "
-"Account Description in the CODA file."
-msgstr ""
-"Descrierea Contului Primar sau Secundar trebuie sa se potriveasca cu "
-"Descrierea corespunzatoare a Contului in fisierul Coda."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_17
-msgid "Management fee"
-msgstr "Taxa gestionare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_03
-msgid "Cash withdrawal by card (ATM)"
-msgstr "Retragere numerar de pe card (Bancomat)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_16
-msgid "Bank confirmation to revisor or accountant"
-msgstr "Confirmarea bancii catre revizor sau contabil"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcf_04
-msgid "Cards"
-msgstr "Carduri"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Statement"
-msgstr "Extras de cont"
-
-#. module: account_coda
-#: view:account.coda.trans.type:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_type_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_type_form
-msgid "CODA Transaction Types"
-msgstr "Tipuri de Tranzactii CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_50
-msgid "Credit after a payment at a terminal"
-msgstr "Credit dupa o plata la un terminal"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_02
-msgid "Long-term loan"
-msgstr "Imprumut pe termen lung"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_05
-#: model:account.coda.trans.code,description:account_coda.actcc_30_54
-msgid "Capital and/or interest term investment"
-msgstr "Investitia la termen a capitalului si/sau a dobanzii"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_68
-msgid "Credit of a payment via electronic purse"
-msgstr "Plata unui credit prin intermediul electronic"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_028
-msgid "Fidelity premium"
-msgstr "Prima de fidelitate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_39
-msgid "Provisionally unpaid due to other reason than manual presentation"
-msgstr "Neplatit temporar din alte motive decat prezentarea manuala"
-
-#. module: account_coda
-#: constraint:coda.bank.account:0
-msgid ""
-"\n"
-"\n"
-"Configuration Error! \n"
-"The Bank Account Currency should match the Journal Currency !"
-msgstr ""
-"\n"
-"\n"
-"Eroare de configurare! \n"
-"Moneda Contului Bancar trebuie sa se potriveasca cu Moneda Jurnalului !"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_35
-msgid ""
-"Costs charged for calculating the amount of the tax to be paid (e.g. "
-"Fiscomat)."
-msgstr ""
-"Costuri percepute pentru calcularea cuantumului taxei care va fi platita (de "
-"ex. Fiscomat)."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_014
-msgid "Collection commission"
-msgstr "Incasare comision"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_52
-msgid "Remittance of foreign cheque credit under usual reserve"
-msgstr "Expedierea cecului strain, credit aflat sub rezerva obisnuita"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_number:0
-msgid "Counterparty Number"
-msgstr "Numar Echivalent"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "_Import"
-msgstr "_Importati"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_03
-msgid "See annexe III : communication 124"
-msgstr "Vedeti aneca III : comunicat 124"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:420
-#, python-format
-msgid ""
-"\n"
-" Bank Statement '%s' line '%s':\n"
-" The bank account '%s' is not defined for the partner '%s'!\n"
-" Please correct the configuration and perform the import again or "
-"otherwise change the corresponding entry manually in the generated Bank "
-"Statement."
-msgstr ""
-"\n"
-" Linia '%s' a Extrasului bancar '%s':\n"
-" Contul bancar '%s' nu este definit pentru partenerul '%s;!\n"
-" Va rugam sa corectati configurarea si sa efectuati din nou importul "
-"sau sa schimbati manual inregistrarea corespunzatoare in Extrasul Bancar "
-"generat."
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_113
-msgid "ATM/POS debit"
-msgstr "Debit ATP/PDV"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_30_03
-msgid "Forward purchase of foreign exchange"
-msgstr "Dati curs cumpararii de valuta straina"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_50
-msgid "Credit of a payment via terminal"
-msgstr "Plata unui credit prin terminal"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_52
-msgid "Credit provider"
-msgstr "Credit furnizor"
-
-#. module: account_coda
-#: selection:account.coda.trans.code,type:0
-msgid "Transaction Family"
-msgstr "Tranzactie Familie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_68
-msgid "In case coupons attached to a purchased security are missing"
-msgstr ""
-"In cazul in care lipsesc cupoanele atasate unui titlu de valoare cumparat"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:57
-#: code:addons/account_coda/wizard/account_coda_import.py:325
-#: code:addons/account_coda/wizard/account_coda_import.py:337
-#: code:addons/account_coda/wizard/account_coda_import.py:362
-#: code:addons/account_coda/wizard/account_coda_import.py:513
-#: code:addons/account_coda/wizard/account_coda_import.py:524
-#, python-format
-msgid "Error!"
-msgstr "Eroare!"
-
-#. module: account_coda
-#: help:coda.bank.statement,type:0
-msgid ""
-"No Bank Statements are associated with CODA Bank Statements of type 'Info'."
-msgstr ""
-"Nu exista Extrase Bancare asociate cu Extrasele Bancare CODA de tipul 'Info'."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_58
-msgid ""
-"Takes priority over transaction 52 (hence a payment made by an agent in a "
-"night safe = 58 and not 52)"
-msgstr ""
-"Are prioritate asupra tranzactiei 52 (prin urmare o plata efectuata de un "
-"agent intr-un seif = 58, nu 52)"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_121
-msgid "Commercial bills"
-msgstr "Cambii comerciale"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_11
-msgid "Costs for the safe custody of correspondence"
-msgstr "Costuri cu pastrarea in siguranta a corespondentei"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_041
-msgid "Credit card costs"
-msgstr "Costuri card de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_56
-msgid "Subsidy"
-msgstr "Subsidiu"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_06
-msgid "Payment with tank card"
-msgstr "Plata cu cardul de rezerva"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_107
-msgid "Direct debit – DOM’80"
-msgstr "Debit direct – DOM’80"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_60
-msgid "Reversal of voucher"
-msgstr "Revocare voucher"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_87
-msgid "Costs refunded"
-msgstr "Costuri rambursate"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_17
-msgid "Financial centralisation (debit)"
-msgstr "Centralizare financiara (debit)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_02
-msgid "Payment to the bank on maturity date"
-msgstr "Plata catre banca la data scadentei"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_025
-msgid "Individual entry for exchange charges"
-msgstr "Inregistrare individuala pentru taxele de schimb valutar"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_004
-#: model:account.coda.trans.code,description:account_coda.actcc_80_09
-msgid "Postage"
-msgstr "Tarif postal"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_50
-msgid ""
-"For own account - the comment for the client is given in the communication; "
-"also for mixed payments (cash + cheques) - not to be communicated to the "
-"clients; for payments made by a third person: see family 01"
-msgstr ""
-"Pentru contul propriu - observatiile pentru client sunt date in comunicat; "
-"de asemenea pentru platile mixte (numerar + cecuri) - a nu se comunica "
-"clientilor; pentru platile efectuate de carte o persoana terta: vedeti "
-"familia 01"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_09_68
-msgid ""
-"In case of payment accepted under reserve of count; result of undercrediting "
-"- see also transaction 19"
-msgstr ""
-"In cazul platii acceptate sub rezerva numararii; rezultatul subcreditarii - "
-"vedeti de asemenea tranzactia 19"
-
-#. module: account_coda
-#: help:coda.bank.account,bank_id:0
-msgid ""
-"Bank Account Number.\n"
-"The CODA import function will find its CODA processing parameters on this "
-"number."
-msgstr ""
-"Numarul Contului Bancar.\n"
-"Functia importului CODA va gasi parametrii de procesare CODA pe baza acestui "
-"numar."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_05
-msgid "Payment of wages, etc."
-msgstr "Plata salariilor, etc."
-
-#. module: account_coda
-#: sql_constraint:coda.bank.account:0
-msgid ""
-"The combination of Bank Account, Account Description and Currency must be "
-"unique !"
-msgstr ""
-"Combinatia dintre Contul Bancar, Descrierea Contului si Moneda trebuie sa "
-"fie unica !"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Debit"
-msgstr "Debit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_10
-msgid "Renewal of agreed maturity date"
-msgstr "Reinnoirea datei scadente stabilite"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_55
-msgid "Income from payments by GSM"
-msgstr "Venitul din plati prin GSM"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_19
-msgid "Regularisation costs"
-msgstr "Costuri de regularizare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_13
-#: model:account.coda.trans.code,description:account_coda.actcc_41_13
-msgid "Transfer from your account"
-msgstr "Transfer din contul dumneavoastra"
-
-#. module: account_coda
-#: sql_constraint:account.bank.statement.line.global:0
-msgid "The code must be unique !"
-msgstr "Codul trebuie sa fie unic !"
-
-#. module: account_coda
-#: help:coda.bank.account,currency:0
-#: help:coda.bank.statement,currency:0
-msgid "The currency of the CODA Bank Statement"
-msgstr "Moneda Extrasului Bancar CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_07
-msgid "Collective transfers"
-msgstr "Transferuri colective"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:116
-#, python-format
-msgid ""
-"\n"
-"CODA V%s statements are not supported, please contact your bank!"
-msgstr ""
-"\n"
-"Extrasele CODA V%s nu sunt acceptate, va rugam sa contactati banca!"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_427
-msgid "Belgian Stock Exchange tax"
-msgstr "Taxa Bursa de Valori belgiana"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_12
-msgid "Safe custody"
-msgstr "Custodie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_001
-msgid "Interest received"
-msgstr "Dobanda primita"
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
-msgid "Import CODA Files"
-msgstr "Importati Fisiere CODA"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_105
-msgid "original amount of the transaction"
-msgstr "valoarea originala a tranzactiei"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_09
-msgid "Your semi-standing order"
-msgstr "Ordin de plata fixa la intervale regulate"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:508
-#, python-format
-msgid ""
-"\n"
-"CODA parsing error on information data record 3.2, seq nr %s!\n"
-"Please report this issue via your OpenERP support channel."
-msgstr ""
-"\n"
-"Eroare de analiza CODA cu privire la inregistrarea datelor 3.2,secv nr %s!\n"
-"Va rugam sa raportati aceasta problema prin canalul de asistenta OpenERP."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_09
-#: model:account.coda.trans.code,description:account_coda.actcc_11_70
-msgid "Settlement of securities"
-msgstr "Reglementare titluri"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_01
-msgid "Debit customer who is loading"
-msgstr "Debit client care se incarca"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_047
-msgid "Charges extension bill"
-msgstr "Taxe de prelungire a politei"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_18
-msgid "Trade information"
-msgstr "Informatii schimb"
-
-#. module: account_coda
-#: field:account.coda.trans.code,comment:0
-msgid "Comment"
-msgstr "Observatie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_203
-msgid ""
-"Confirmation fee | Additional confirmation fee | Commitment fee | Flat fee | "
-"Confirmation reservation commission | Additional reservation commission"
-msgstr ""
-"Taxa de confirmare | Taxa de confirmare suplimentara | Taxa de consemnare | "
-"Taxa fixa | Comision de confirmare a rezervarii | Comision de rezervare "
-"suplimentara"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_027
-msgid "Charges for unpaid bills"
-msgstr "Taxe pentru politele neplatite"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_204
-msgid "Amendment fee"
-msgstr "Taxa de rectificare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_11
-msgid "Your semi-standing order – payment to employees"
-msgstr ""
-"Ordinul d-voastra de plata fixa la intervale regulate - plata catre angajati"
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_account_coda
-msgid "CODA Processing"
-msgstr "Procesare CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_11
-msgid "Your repayment mortgage loan"
-msgstr "Rambursarea imprumutului ipotecar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_00_37
-#: model:account.coda.trans.code,description:account_coda.actcc_01_37
-#: model:account.coda.trans.code,description:account_coda.actcc_04_37
-#: model:account.coda.trans.code,description:account_coda.actcc_05_37
-#: model:account.coda.trans.code,description:account_coda.actcc_09_37
-#: model:account.coda.trans.code,description:account_coda.actcc_11_37
-#: model:account.coda.trans.code,description:account_coda.actcc_30_37
-#: model:account.coda.trans.code,description:account_coda.actcc_35_37
-#: model:account.coda.trans.code,description:account_coda.actcc_80_35
-msgid "Costs"
-msgstr "Costuri"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_050
-msgid "Capital term investment"
-msgstr "Investitie capital la termen"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_03_05
-msgid "Payment of holiday pay, etc."
-msgstr "Plata primei de vacanta, etc."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_25
-msgid ""
-"Commission for the renting of boxes put at the disposal for the "
-"correspondence"
-msgstr ""
-"Comision pentru inchirierea casutelor puse la dispozitie pentru corespondenta"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_008
-#: model:account.coda.trans.code,description:account_coda.actcc_80_29
-msgid "Information charges"
-msgstr "Informatii taxe"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_03
-msgid ""
-"Credit transfer for which the order has been given once and which is carried "
-"out again at regular intervals without any change."
-msgstr ""
-"Transfer de fonduri pentru care s-a emis o data un ordin de transfer si care "
-"este efectuat din nou la intervale regulate fara nicio modificare."
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_0
-msgid ""
-"Simple amount without detailed data; e.g. : an individual credit transfer "
-"(free of charges)."
-msgstr ""
-"Suma simpla, fara date detaliate; de ex. un credit individual de transfer "
-"(fara taxe)."
-
-#. module: account_coda
-#: help:coda.bank.account,find_partner:0
-msgid "Partner lookup via Bank Account Number."
-msgstr "Cautare partener prin Numarul Contului Bancar."
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_403
-msgid "Minimum discount rate"
-msgstr "Rata minima de reducere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_47_56
-msgid "Remittance of guaranteed foreign supplier's bill"
-msgstr "Expedierea politei furnizorului strain cu garantie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_02
-msgid "Tenders"
-msgstr "Oferte"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_43_07
-msgid "Unpaid foreign cheque"
-msgstr "Cec strain neplatit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_11_03
-msgid ""
-"Bonds, shares, tap issues of CDs, with or without payment of interest, etc."
-msgstr "Obligatiuni, actiuni, imprumuturi, cu sau fara plata dobanzii, etc."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_09_66
-msgid "Repurchase of petrol coupons"
-msgstr "Rascumparare tichete de benzina"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_058
-msgid "Capital premium"
-msgstr "Prime capital"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_15
-#: model:account.coda.trans.code,description:account_coda.actcc_11_62
-msgid "Interim interest on subscription"
-msgstr "Dobanda provizorie la abonare"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,counterparty_currency:0
-msgid "Counterparty Currency"
-msgstr "Moneda echivalenta"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_202
-msgid "Advising commission | Additional advising commission"
-msgstr "Comision de consultanta | Comision de consultanta suplimentara"
-
-#. module: account_coda
-#: field:coda.bank.account,find_partner:0
-msgid "Lookup Partner"
-msgstr "Cautati Partenerul"
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-msgid "Glob. Id"
-msgstr "Id Glob."
-
-#. module: account_coda
-#: view:coda.bank.statement:0
-#: view:coda.bank.statement.line:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statement_line
-#: model:ir.ui.menu,name:account_coda.coda_bank_statement_line
-msgid "CODA Statement Lines"
-msgstr "Linii Extras CODA"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,globalisation_amount:0
-msgid "Globalisation Amount"
-msgstr "Cuantum globalizare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_01_13
-msgid ""
-"Transfer from one account to another account of the same customer at the "
-"bank's or the customer's initiative (intracompany)."
-msgstr ""
-"Transfer dintr-un cont in alt cont al aceluiasi client la initiativa bancii "
-"sau a clientului (intracompanie)."
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:890
-#, python-format
-msgid ""
-"\n"
-"Error ! "
-msgstr ""
-"\n"
-"Eroare! "
-
-#. module: account_coda
-#: view:account.coda:0
-#: field:account.coda,user_id:0
-msgid "User"
-msgstr "Utilizator"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_trans_code
-msgid "CODA transaction code"
-msgstr "Cod tranzactie CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_05_52
-msgid "Credit under usual reserve"
-msgstr "Credit sub rezerva obisnuita"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:125
-#, python-format
-msgid ""
-"\n"
-"The CODA creation date doesn't fall within a defined Accounting Period!\n"
-"Please create the Accounting Period for date %s."
-msgstr ""
-"\n"
-"Data crearii fisierului CODA nu se incadreaza intr-o Perioada Contabila "
-"definita!\n"
-"Va rugam sa creati Perioada Contabila pentru data %s."
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_04_50
-msgid "Except Proton"
-msgstr "Cu exceptia Proton"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_011
-msgid "Information pertaining to coupons"
-msgstr "Informatii referitoare la cupoane"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_122
-msgid "Bills - calculation of interest"
-msgstr "Polite - calcularea dobanzii"
-
-#. module: account_coda
-#: view:account.coda.trans.code:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_code_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_code_form
-msgid "CODA Transaction Codes"
-msgstr "Coduri Tranzactie CODA"
-
-#. module: account_coda
-#: help:coda.bank.account,state:0
-msgid ""
-"No Bank Statements will be generated for CODA Bank Statements from Bank "
-"Accounts of type 'Info'."
-msgstr ""
-"Nici un Extras Bancar nu va fi generat pentru Extrasele Bancare CODA din "
-"Conturile Bancare de tipul 'Info'."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_49_03
-msgid "ATM withdrawal"
-msgstr "Retragere de la bancomat"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_012
-msgid "Exchange commission"
-msgstr "Comision de schimb"
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: model:ir.actions.act_window,name:account_coda.action_coda_bank_account_form
-#: model:ir.model,name:account_coda.model_coda_bank_account
-#: model:ir.ui.menu,name:account_coda.menu_action_coda_bank_account_form
-msgid "CODA Bank Account Configuration"
-msgstr "Configurare Cont Bancar CODA"
-
-#. module: account_coda
-#: field:coda.bank.account,active:0
-msgid "Active"
-msgstr "Activ(a)"
-
-#. module: account_coda
-#: code:addons/account_coda/wizard/account_coda_import.py:724
-#, python-format
-msgid ""
-"Partner name: %s \n"
-"Partner Account Number: %s\n"
-"Transaction Type: %s - %s\n"
-"Transaction Family: %s - %s\n"
-"Transaction Code: %s - %s\n"
-"Transaction Category: %s - %s\n"
-"Structured Communication Type: %s - %s\n"
-"Communication: %s"
-msgstr ""
-"Nume partener: %s \n"
-"Numar de cont partener: %s\n"
-"Tip Tranzactie: %s - %s\n"
-"Tranzactie Familie: %s - %s\n"
-"Cod Tranzactie: %s - %s\n"
-"Categorie Tranzactie: %s- %s\n"
-"Tip Comunicare Structurata: %s - %s\n"
-"Comunicare: %s"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_04
-msgid "Cash withdrawal from an ATM"
-msgstr "Retragere de numerar de la un bancomat"
-
-#. module: account_coda
-#: field:coda.bank.statement,balance_end:0
-msgid "Balance"
-msgstr "Sold"
-
-#. module: account_coda
-#: field:account.bank.statement,coda_statement_id:0
-msgid "Associated CODA Bank Statement"
-msgstr "Extras de cont asociat CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_13_37
-msgid "Credit-related costs"
-msgstr "Costuri legate de credit"
-
-#. module: account_coda
-#: model:ir.ui.menu,name:account_coda.menu_manage_coda
-msgid "CODA Configuration"
-msgstr "Configurare CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_07_39
-msgid "Debit of the drawer after credit under usual reserve or discount"
-msgstr ""
-"Debitul emitatorului politei dupa creditul aflat sub rezerva obisnuita sau "
-"reducere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_66
-msgid "Financial centralisation (credit)"
-msgstr "Centralizare financiara (credit)"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_08
-msgid "Payment in advance"
-msgstr "Plata in avans"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Close"
-msgstr "Inchideti"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_19
-msgid "Special charge for safe custody"
-msgstr "Taxa speciala pentru custodie"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_01
-msgid "Payment of your cheque"
-msgstr "Plata cecului dumneavoastra"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_43_07
-msgid "Foreign cheque remitted for collection that returns unpaid"
-msgstr "Cec strain expediat pentru incasare se intoarce neplatit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_80_07
-msgid ""
-"- insurance costs of account holders against fatal accidents - passing-on of "
-"several insurance costs"
-msgstr ""
-"- costurile de asigurare ale titularilor de cont impotriva accidentelor "
-"mortale - transmiterea mai multor costuri de asigurare"
-
-#. module: account_coda
-#: help:coda.bank.account,awaiting_account:0
-msgid ""
-"Set here the default account that will be used if the partner cannot be "
-"unambiguously identified."
-msgstr ""
-"Aici configurati contul implicit care va fi folosit daca partenerul nu poate "
-"fi identificat fara echivoc."
-
-#. module: account_coda
-#: code:addons/account_coda/account_coda.py:280
-#, python-format
-msgid "No CODA Bank Statement found for this Bank Statement!"
-msgstr ""
-"Nu a fost gasit niciun Extras Bancar CODA pentru acest Extras Bancar!"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_07
-msgid "Definitely unpaid cheque"
-msgstr "Cec cu siguranta neincasat"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_04_08
-msgid "Payment by means of a payment card outside the Eurozone"
-msgstr "Plata prin intermediul unui card de plati din afara Zonei Euro"
-
-#. module: account_coda
-#: model:account.coda.comm.type,description:account_coda.acct_106
-msgid ""
-"Method of calculation (VAT, withholding tax on income, commission, etc.)"
-msgstr "Metoda de calcul (TVA, taxa retinuta pe venit, comision, etc.)"
-
-#. module: account_coda
-#: model:ir.model,name:account_coda.model_account_coda_comm_type
-msgid "CODA structured communication type"
-msgstr "Tip de comunicare structurata CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_64
-msgid "Reversal of settlement of credit card"
-msgstr "Revocarea reglementarii cardului de credit"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_58
-msgid ""
-"Repayable securities from a deposit or delivered at the counter - credit "
-"under usual reserve"
-msgstr ""
-"Titluri de valoare rambursabile dintr-un depozit sau livrate la ghiseu - "
-"credit aflat sub rezerva obisnuita"
-
-#. module: account_coda
-#: model:account.coda.trans.type,description:account_coda.actt_5
-msgid ""
-"Detail of 1. Standard procedure is no detailing. However, the customer may "
-"ask for detailed data to be included into his file after the overall record "
-"(type 1)."
-msgstr ""
-"Detaliul 1. Procedura standard nu este detaliata. Totusi, clientul poate "
-"cere ca datele sa ii fie incluse in dosar dupa inregistrarea generala (tip "
-"1)."
-
-#. module: account_coda
-#: field:account.coda.comm.type,description:0
-#: field:account.coda.trans.category,description:0
-#: field:account.coda.trans.code,description:0
-#: field:account.coda.trans.type,description:0
-msgid "Description"
-msgstr "Descriere"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_07_01
-msgid "Payment commercial paper"
-msgstr "Plata titluri de valoare"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_419
-msgid "Bank service fee"
-msgstr "Taxa serviciu bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_41_37
-msgid "Costs relating to outgoing foreign transfers and non-SEPA transfers"
-msgstr ""
-"Costuri legate de tansferurile de iesire straine si transferurile non-SEPA"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_03_17
-msgid "Your certified cheque"
-msgstr "Cecul d-voastra certificat"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_400
-msgid "Acceptance fee"
-msgstr "Taxa de acceptare"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_11_68
-msgid "Compensation for missing coupon"
-msgstr "Compensatie pentru cuponul lipsa"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Debit Transactions."
-msgstr "Tranzactii de debit."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_33
-msgid "Miscellaneous fees and commissions"
-msgstr "Taxe si comisioane diverse"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_03
-#: model:account.coda.trans.code,description:account_coda.actcc_41_03
-msgid "Standing order"
-msgstr "Comanda permanenta"
-
-#. module: account_coda
-#: selection:coda.bank.statement.line,type:0
-msgid "Customer"
-msgstr "Client"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_49
-#: model:account.coda.trans.code,description:account_coda.actcc_01_99
-#: model:account.coda.trans.code,description:account_coda.actcc_03_49
-#: model:account.coda.trans.code,description:account_coda.actcc_03_99
-#: model:account.coda.trans.code,description:account_coda.actcc_04_49
-#: model:account.coda.trans.code,description:account_coda.actcc_04_99
-#: model:account.coda.trans.code,description:account_coda.actcc_05_49
-#: model:account.coda.trans.code,description:account_coda.actcc_05_99
-#: model:account.coda.trans.code,description:account_coda.actcc_07_49
-#: model:account.coda.trans.code,description:account_coda.actcc_07_99
-#: model:account.coda.trans.code,description:account_coda.actcc_09_49
-#: model:account.coda.trans.code,description:account_coda.actcc_09_99
-#: model:account.coda.trans.code,description:account_coda.actcc_11_49
-#: model:account.coda.trans.code,description:account_coda.actcc_11_99
-#: model:account.coda.trans.code,description:account_coda.actcc_13_49
-#: model:account.coda.trans.code,description:account_coda.actcc_13_99
-#: model:account.coda.trans.code,description:account_coda.actcc_30_49
-#: model:account.coda.trans.code,description:account_coda.actcc_30_99
-#: model:account.coda.trans.code,description:account_coda.actcc_35_49
-#: model:account.coda.trans.code,description:account_coda.actcc_35_99
-#: model:account.coda.trans.code,description:account_coda.actcc_41_49
-#: model:account.coda.trans.code,description:account_coda.actcc_41_99
-#: model:account.coda.trans.code,description:account_coda.actcc_43_49
-#: model:account.coda.trans.code,description:account_coda.actcc_43_99
-#: model:account.coda.trans.code,description:account_coda.actcc_47_49
-#: model:account.coda.trans.code,description:account_coda.actcc_47_99
-#: model:account.coda.trans.code,description:account_coda.actcc_80_49
-#: model:account.coda.trans.code,description:account_coda.actcc_80_99
-msgid "Cancellation or correction"
-msgstr "Anulare sau corectare"
-
-#. module: account_coda
-#: view:coda.bank.account:0
-#: field:coda.bank.account,bank_id:0
-#: field:coda.bank.statement,coda_bank_account_id:0
-#: view:coda.bank.statement.line:0
-#: field:coda.bank.statement.line,coda_bank_account_id:0
-msgid "Bank Account"
-msgstr "Cont bancar"
-
-#. module: account_coda
-#: model:account.coda.trans.code,comment:account_coda.actcc_13_56
-msgid "Interest or capital subsidy"
-msgstr "Dobanda sau subsidiu capital"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "Fin.Account"
-msgstr "Cont Fin."
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_01_62
-msgid "Unpaid postal order"
-msgstr "Mandat postal neplatit"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_428
-msgid "Interest accrued"
-msgstr "Dobanzi acumulate"
-
-#. module: account_coda
-#: field:account.coda.comm.type,code:0
-msgid "Structured Communication Type"
-msgstr "Tip Comunicare Structurata"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_401
-msgid "Visa charges"
-msgstr "Taxe viza"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_210
-msgid "Commitment fee"
-msgstr "Taxa de consemnare"
-
-#. module: account_coda
-#: view:account.coda.trans.category:0
-#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_category_form
-#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_category_form
-msgid "CODA Transaction Categories"
-msgstr "Categorii Tranzactii CODA"
-
-#. module: account_coda
-#: field:coda.bank.statement.line,sequence:0
-msgid "Sequence"
-msgstr "Secventa"
-
-#. module: account_coda
-#: view:account.coda.import:0
-msgid "Results :"
-msgstr "Rezultate :"
-
-#. module: account_coda
-#: field:coda.bank.statement,coda_id:0
-#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_coda
-msgid "CODA Data File"
-msgstr "Fisier de date CODA"
-
-#. module: account_coda
-#: view:coda.bank.statement.line:0
-msgid "CODA Statement Line"
-msgstr "Linie Extras CODA"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_073
-msgid "Costs of ATM abroad"
-msgstr "Costuri bancomat in strainatate"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_018
-msgid "Tental guarantee charges"
-msgstr "Taxe de garantie"
-
-#. module: account_coda
-#: model:account.coda.trans.category,description:account_coda.actrca_430
-msgid "Recovery of foreign tax"
-msgstr "Recuperarea taxei straine"
-
-#. module: account_coda
-#: model:account.coda.trans.code,description:account_coda.actcc_80_01
-msgid "Guarantee card charges"
-msgstr "Taxe de garantie card"
-
-#~ msgid "Import"
-#~ msgstr "Importă"
-
-#, python-format
-#~ msgid "Coda file not found for bank statement !!"
-#~ msgstr "Nu a fost gasit fisierul Coda pentru extrasul de cont !!"
-
-#~ msgid "Bank Journal"
-#~ msgstr "Jurnal banca"
-
-#~ msgid "Account Coda Import"
-#~ msgstr "Import Cont Coda"
-
-#~ msgid "Coda import"
-#~ msgstr "Import Coda"
-
-#~ msgid "Import log"
-#~ msgstr "Importa jurnal"
-
-#~ msgid "Coda file"
-#~ msgstr "Fisier Coda"
-
-#~ msgid ""
-#~ "Set here the default account that will be used, if the partner is found but "
-#~ "does not have the bank account, or if he is domiciled"
-#~ msgstr ""
-#~ "Setati aici contul predefinit care va fi folosit daca partenerul este gasit, "
-#~ "dar nu are cont bancar, sau daca el are domiciliul stabil"
-
-#~ msgid ""
-#~ "Set here the payable account that will be used, by default, if the partner "
-#~ "is not found"
-#~ msgstr ""
-#~ "Setati aici contul de plati care va fi folosit prin default, daca partenerul "
-#~ "nu este gasit"
-
-#~ msgid "Open Statements"
-#~ msgstr "Extrase deschise"
-
-#~ msgid "coda for an Account"
-#~ msgstr "coda pentru un Cont"
-
-#, python-format
-#~ msgid "The bank account %s is not defined for the partner %s.\n"
-#~ msgstr "Contul bancar %s nu este definit pentru partenerul %s.\n"
-
-#~ msgid "Search Coda"
-#~ msgstr "Cautare Coda"
-
-#~ msgid "Coda Import Logs"
-#~ msgstr "Import Jurnale Coda"
-
-#~ msgid "Cancel"
-#~ msgstr "Anulează"
-
-#~ msgid "Store the detail of bank statements"
-#~ msgstr "Pastreaza detaliile extraselor de cont"
-
-#~ msgid ""
-#~ "Set here the receivable account that will be used, by default, if the "
-#~ "partner is not found"
-#~ msgstr ""
-#~ "Aici setati contul de incasari care va fi folosit, prin default, daca "
-#~ "partenerul nu este gasit"
-
-#~ msgid "Statements"
-#~ msgstr "Extrase de cont"
-
-#~ msgid "Result of Imported Coda Statements"
-#~ msgstr "Rezultat al Extraselor Coda Importate"
-
-#~ msgid "Coda"
-#~ msgstr "Coda"
-
-#~ msgid "Import Coda Statement"
-#~ msgstr "Importa Extras Coda"
-
-#~ msgid "Import Coda Statements"
-#~ msgstr "Importa Extrase Coda"
-
-#~ msgid ""
-#~ "\n"
-#~ " Module provides functionality to import\n"
-#~ " bank statements from coda files.\n"
-#~ " "
-#~ msgstr ""
-#~ "\n"
-#~ " Modulul ofera functionalitate pentru a importa \n"
-#~ " extrase banzare din fisierele coda.\n"
-#~ " "
-
-#~ msgid "Coda File"
-#~ msgstr "Fisier Coda"
-
-#~ msgid "Click on 'New' to select your file :"
-#~ msgstr "Faceti click pe 'Nou' pentru a selecta fisierul dumneavoastra :"
-
-#~ msgid "Coda Logs"
-#~ msgstr "Jurnale Coda"
-
-#, python-format
-#~ msgid "Result"
-#~ msgstr "Rezultat"
-
-#~ msgid "Coda Import"
-#~ msgstr "Importa Coda"
-
-#~ msgid "Account CODA - import bank statements from coda file"
-#~ msgstr "Cont CODA - importa extrase de cont din fisierul coda"
-
-#~ msgid "Generated Bank Statements"
-#~ msgstr "Extrase de cont generate"
-
-#~ msgid "Configure Your Journal and Account :"
-#~ msgstr "Configurati-va Jurnalul si Contul:"
-
-#~ msgid "Select your file :"
-#~ msgstr "Selectati fisierul :"
diff --git a/addons/account_payment/i18n/zh_CN.po b/addons/account_payment/i18n/zh_CN.po
index eabd2b65207..20cb178fe73 100644
--- a/addons/account_payment/i18n/zh_CN.po
+++ b/addons/account_payment/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-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-02-10 15:03+0000\n"
-"Last-Translator: Wei \"oldrev\" Li \n"
+"PO-Revision-Date: 2012-10-30 15:45+0000\n"
+"Last-Translator: ccdos \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: 2012-10-30 05:13+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: account_payment
#: field:payment.order,date_scheduled:0
@@ -653,7 +653,7 @@ msgstr "公司币别"
#: view:payment.line:0
#: view:payment.order:0
msgid "Payment"
-msgstr "付款"
+msgstr "支付"
#. module: account_payment
#: report:payment.order:0
diff --git a/addons/account_sequence/account_sequence_data.xml b/addons/account_sequence/account_sequence_data.xml
index 1ad362b3979..b2d40412d0d 100644
--- a/addons/account_sequence/account_sequence_data.xml
+++ b/addons/account_sequence/account_sequence_data.xml
@@ -43,6 +43,18 @@
+
+ Account Journal
+ account.journal
+
+
+
+ Account journal sequence
+ account.journal
+ AJ
+
+
+
diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py
index c0011c8b3c5..927fda19182 100644
--- a/addons/account_voucher/__openerp__.py
+++ b/addons/account_voucher/__openerp__.py
@@ -61,6 +61,7 @@ This module manages:
'account_voucher_data.xml',
],
'test' : [
+ 'test/case5_suppl_usd_usd.yml',
'test/account_voucher.yml',
'test/sales_receipt.yml',
'test/sales_payment.yml',
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index e1caf190316..32be8c34929 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -267,6 +267,7 @@ class account_voucher(osv.osv):
_order = "date desc, id desc"
# _rec_name = 'number'
_columns = {
+ 'active': fields.boolean('Active', help="By default, reconciliation vouchers made on draft bank statements are set as inactive, which allow to hide the customer/supplier payment while the bank statement isn't confirmed."),
'type':fields.selection([
('sale','Sale'),
('purchase','Purchase'),
@@ -328,6 +329,7 @@ class account_voucher(osv.osv):
'is_multi_currency': fields.boolean('Multi Currency Voucher', help='Fields with internal purpose only that depicts if the voucher is a multi currency one or not'),
}
_defaults = {
+ 'active': True,
'period_id': _get_period,
'partner_id': _get_partner,
'journal_id':_get_journal,
@@ -381,8 +383,9 @@ class account_voucher(osv.osv):
total_tax = 0.0
if not tax[0].price_include:
- for tax_line in tax_pool.compute_all(cr, uid, tax, voucher_amount, 1).get('taxes', []):
- total_tax += tax_line.get('amount', 0.0)
+ for line in voucher.line_ids:
+ for tax_line in tax_pool.compute_all(cr, uid, tax, line.amount, 1).get('taxes', []):
+ total_tax += tax_line.get('amount', 0.0)
total += total_tax
else:
for line in voucher.line_ids:
@@ -413,31 +416,31 @@ class account_voucher(osv.osv):
line_ids = resolve_o2m_operations(cr, uid, line_pool, line_ids, ["amount"], context)
+ total_tax = 0.0
for line in line_ids:
line_amount = 0.0
line_amount = line.get('amount',0.0)
+
+ if tax_id:
+ tax = [tax_pool.browse(cr, uid, tax_id, context=context)]
+ if partner_id:
+ partner = partner_pool.browse(cr, uid, partner_id, context=context) or False
+ taxes = position_pool.map_tax(cr, uid, partner and partner.property_account_position or False, tax)
+ tax = tax_pool.browse(cr, uid, taxes, context=context)
+
+ if not tax[0].price_include:
+ for tax_line in tax_pool.compute_all(cr, uid, tax, line_amount, 1).get('taxes', []):
+ total_tax += tax_line.get('amount')
+
voucher_total += line_amount
-
- total = voucher_total
- total_tax = 0.0
- if tax_id:
- tax = [tax_pool.browse(cr, uid, tax_id, context=context)]
- if partner_id:
- partner = partner_pool.browse(cr, uid, partner_id, context=context) or False
- taxes = position_pool.map_tax(cr, uid, partner and partner.property_account_position or False, tax)
- tax = tax_pool.browse(cr, uid, taxes, context=context)
-
- if not tax[0].price_include:
- for tax_line in tax_pool.compute_all(cr, uid, tax, voucher_total, 1).get('taxes', []):
- total_tax += tax_line.get('amount')
- total += total_tax
+ total = voucher_total + total_tax
res.update({
- 'amount':total or voucher_total,
- 'tax_amount':total_tax
+ 'amount': total or voucher_total,
+ 'tax_amount': total_tax
})
return {
- 'value':res
+ 'value': res
}
def onchange_term_id(self, cr, uid, ids, term_id, amount):
@@ -712,14 +715,14 @@ class account_voucher(osv.osv):
'move_line_id':line.id,
'account_id':line.account_id.id,
'amount_original': amount_original,
- 'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0,
+ 'amount': (move_line_found == line.id) and min(abs(price), amount_unreconciled) or 0.0,
'date_original':line.date,
'date_due':line.date_maturity,
'amount_unreconciled': amount_unreconciled,
'currency_id': line_currency_id,
}
-
- #split voucher amount by most old first, but only for lines in the same currency
+ #in case a corresponding move_line hasn't been found, we now try to assign the voucher amount
+ #on existing invoices: we split voucher amount by most old first, but only for lines in the same currency
if not move_line_found:
if currency_id == line_currency_id:
if line.credit:
@@ -953,6 +956,9 @@ class account_voucher(osv.osv):
if voucher_brw.number:
name = voucher_brw.number
elif voucher_brw.journal_id.sequence_id:
+ if not voucher_brw.journal_id.sequence_id.active:
+ raise osv.except_osv(_('Configuration Error !'),
+ _('Please activate the sequence of selected journal !'))
name = seq_obj.next_by_id(cr, uid, voucher_brw.journal_id.sequence_id.id, context=context)
else:
raise osv.except_osv(_('Error!'),
@@ -1504,6 +1510,15 @@ account_voucher_line()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
+ def button_confirm_bank(self, cr, uid, ids, context=None):
+ voucher_obj = self.pool.get('account.voucher')
+ voucher_ids = []
+ for statement in self.browse(cr, uid, ids, context=context):
+ voucher_ids += [line.voucher_id.id for line in statement.line_ids if line.voucher_id]
+ if voucher_ids:
+ voucher_obj.write(cr, uid, voucher_ids, {'active': True}, context=context)
+ return super(account_bank_statement, self).button_confirm_bank(cr, uid, ids, context=context)
+
def button_cancel(self, cr, uid, ids, context=None):
voucher_obj = self.pool.get('account.voucher')
for st in self.browse(cr, uid, ids, context=context):
@@ -1539,6 +1554,16 @@ account_bank_statement()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
+ def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
+ res = super(account_bank_statement_line, self).onchange_partner_id(cr, uid, ids, partner_id, context=context)
+ if 'value' not in res:
+ res['value'] = {}
+ res['value'].update({'voucher_id' : False})
+ return res
+
+ def onchange_amount(self, cr, uid, ids, amount, context=None):
+ return {'value' : {'voucher_id' : False}}
+
def _amount_reconciled(self, cursor, user, ids, name, args, context=None):
if not ids:
return {}
@@ -1565,7 +1590,7 @@ class account_bank_statement_line(osv.osv):
_columns = {
'amount_reconciled': fields.function(_amount_reconciled,
string='Amount reconciled', type='float'),
- 'voucher_id': fields.many2one('account.voucher', 'Payment'),
+ 'voucher_id': fields.many2one('account.voucher', 'Reconciliation'),
}
def unlink(self, cr, uid, ids, context=None):
diff --git a/addons/account_voucher/account_voucher_data.xml b/addons/account_voucher/account_voucher_data.xml
index 3d4252e697d..fc008e479e9 100644
--- a/addons/account_voucher/account_voucher_data.xml
+++ b/addons/account_voucher/account_voucher_data.xml
@@ -7,12 +7,10 @@
mail.groupnotification
+ eInvoicing & Payments application installed!
- You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability. For advanced accounting features, you should install the "Accounting and Finance" module.
- ]]>
+ OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
+
You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability. For advanced accounting features, you should install the "Accounting and Finance" module.
]]>
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index babe60b640e..2cb393f4008 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -200,33 +200,29 @@
-
+ account.bank.statement.voucher.tree.inheritaccount.bank.statement
-
+
+
+
+
+
+ onchange_amount(amount)
+
-
- account.bank.statement.voucher.form.inherit
- account.bank.statement
-
-
-
-
-
-
- account.cash.statement.voucher.tree.inheritaccount.bank.statement
diff --git a/addons/account_voucher/i18n/fr.po b/addons/account_voucher/i18n/fr.po
index ea825985448..bec649eaea1 100644
--- a/addons/account_voucher/i18n/fr.po
+++ b/addons/account_voucher/i18n/fr.po
@@ -7,14 +7,15 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-05-10 17:31+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2012-11-07 13:27+0000\n"
+"Last-Translator: Frederic Clementi - Camptocamp.com "
+"\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 05:19+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-08 04:47+0000\n"
+"X-Generator: Launchpad (build 16232)\n"
#. module: account_voucher
#: view:sale.receipt.report:0
@@ -469,7 +470,7 @@ msgstr "Délai moyen de règlement"
#. module: account_voucher
#: field:res.company,income_currency_exchange_account_id:0
msgid "Income Currency Rate"
-msgstr "Taux de change d'achat"
+msgstr "Compte de gain de change"
#. module: account_voucher
#: code:addons/account_voucher/account_voucher.py:1063
@@ -625,9 +626,9 @@ msgid ""
"Unable to create accounting entry for currency rate difference. You have to "
"configure the field 'Income Currency Rate' on the company! "
msgstr ""
-"Impossible de créer une entrée de la comptabilité à cause de la différence "
-"de taux de change. Vous devez configurer le champ 'Taux de change de vente' "
-"sur la société! "
+"Impossible de créer une écriture comptable à cause de la différence de taux "
+"de change. Vous devez configurer le champ 'Compte de gain de change' au "
+"niveau du formulaire de la société! "
#. module: account_voucher
#: view:account.voucher:0 view:sale.receipt.report:0
@@ -802,7 +803,7 @@ msgstr "Factures et transactions exceptionnelles"
#. module: account_voucher
#: field:res.company,expense_currency_exchange_account_id:0
msgid "Expense Currency Rate"
-msgstr "Taux de change de la dépense"
+msgstr "Compte de perte de change"
#. module: account_voucher
#: sql_constraint:account.invoice:0
@@ -1089,9 +1090,9 @@ msgid ""
"Unable to create accounting entry for currency rate difference. You have to "
"configure the field 'Expense Currency Rate' on the company! "
msgstr ""
-"Impossible de créer une entrée en comptabilité pour la différence de taux de "
-"change. Vous devez configurer le champ \"Taux de change d'achat\" de la "
-"société ! "
+"Impossible de créer une écriture comptable à cause de la différence de taux "
+"de change. Vous devez configurer le champ 'Compte de perte de change' au "
+"niveau du formulaire de la société! "
#. module: account_voucher
#: field:account.voucher,type:0
@@ -1156,7 +1157,7 @@ msgstr "Année"
#. module: account_voucher
#: field:account.voucher.line,amount_unreconciled:0
msgid "Open Balance"
-msgstr "Solde initial"
+msgstr "Restant dû"
#. module: account_voucher
#: view:account.voucher:0 field:account.voucher,amount:0
diff --git a/addons/account_voucher/i18n/nl.po b/addons/account_voucher/i18n/nl.po
index 87972b2d22c..84eb08244a6 100644
--- a/addons/account_voucher/i18n/nl.po
+++ b/addons/account_voucher/i18n/nl.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-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-05-10 18:01+0000\n"
-"Last-Translator: Raphael Collet (OpenERP) \n"
+"PO-Revision-Date: 2012-11-17 09:57+0000\n"
+"Last-Translator: Stefan Rijnhart (Therp) \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: 2012-10-30 05:19+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-18 04:37+0000\n"
+"X-Generator: Launchpad (build 16278)\n"
#. module: account_voucher
#: view:sale.receipt.report:0
@@ -846,7 +846,7 @@ msgstr ""
#: view:account.voucher:0
#: model:ir.model,name:account_voucher.model_account_voucher
msgid "Accounting Voucher"
-msgstr "Betalingsintentie"
+msgstr "Journaalbon"
#. module: account_voucher
#: field:account.voucher,number:0
diff --git a/addons/account_voucher/test/case5_suppl_usd_usd.yml b/addons/account_voucher/test/case5_suppl_usd_usd.yml
new file mode 100644
index 00000000000..3cae9667d84
--- /dev/null
+++ b/addons/account_voucher/test/case5_suppl_usd_usd.yml
@@ -0,0 +1,185 @@
+-
+ In order to check the Account_voucher module with multi-currency in OpenERP,
+ I create a supplier invoices in USD and make the payment in USD but with another exchange rate and with a write-off
+-
+ I create a cash account with currency USD
+-
+ !record {model: account.account, id: account_cash_usd_id}:
+ currency_id: base.USD
+ name: "cash account in usd"
+ code: "Xcash usd"
+ type: 'liquidity'
+ user_type: "account.data_account_type_cash"
+
+-
+ I create currency USD in OpenERP for November of 1.8 Rate
+-
+ !record {model: res.currency.rate, id: nov_usd}:
+ currency_id: base.USD
+ name: !eval "'%s-11-01' %(datetime.now().year)"
+ rate: 1.8
+-
+ I create currency USD in OpenERP for December of 1.5 Rate
+-
+ !record {model: res.currency.rate, id: dec_usd}:
+ currency_id: base.USD
+ name: !eval "'%s-12-01' %(datetime.now().year)"
+ rate: 1.5
+-
+ I set the income and expense currency accounts on the main company
+-
+ !python {model: res.company}: |
+ from datetime import datetime
+ vals = {
+ 'income_currency_exchange_account_id': ref('account.o_expense'),
+ 'expense_currency_exchange_account_id': ref('account.o_expense')}
+ self.write(cr, uid, ref('base.main_company'), vals)
+-
+ I create a bank journal with EUR as currency
+-
+ !record {model: account.journal, id: bank_journal_EUR}:
+ name: Bank Journal(EUR)
+ code: BEUR
+ type: bank
+ analytic_journal_id: account.sit
+ sequence_id: account.sequence_bank_journal
+ default_debit_account_id: account.cash
+ default_credit_account_id: account.cash
+ company_id: base.main_company
+ view_id: account.account_journal_bank_view
+-
+ I create a bank journal with USD as currency
+-
+ !record {model: account.journal, id: bank_journal_USD}:
+ name: Bank Journal(USD)
+ code: BUSD
+ type: bank
+ analytic_journal_id: account.sit
+ sequence_id: account.sequence_bank_journal
+ default_debit_account_id: account_cash_usd_id
+ default_credit_account_id: account_cash_usd_id
+ currency: base.USD
+ company_id: base.main_company
+ view_id: account.account_journal_bank_view
+-
+ I set the context as would do the action in supplier invoice menuitem
+-
+ !context
+ 'default_type': 'in_invoice'
+-
+ I create the invoice on 1st november for 1000 USD
+-
+ !record {model: account.invoice, id: account_supplier_invoice_november, view: account.invoice_supplier_form}:
+ account_id: account.a_pay
+ company_id: base.main_company
+ currency_id: base.USD
+ date_invoice: !eval "'%s-11-01' %(datetime.now().year)"
+ period_id: account.period_1
+ invoice_line:
+ - account_id: account.a_expense
+ name: '[PCSC234] PC Assemble SC234'
+ price_unit: 1000.0
+ quantity: 1.0
+ product_id: product.product_product_3
+ uos_id: product.product_uom_unit
+ journal_id: account.sales_journal
+ partner_id: base.res_partner_19
+ reference_type: none
+ check_total : 1000
+-
+ I Validate invoice by clicking on Validate button
+-
+ !workflow {model: account.invoice, action: invoice_open, ref: account_supplier_invoice_november}
+-
+ I check that first invoice move is correct for creditor account(debit - credit == -555.56)
+-
+ !python {model: account.invoice}: |
+ invoice_id = self.browse(cr, uid, ref("account_supplier_invoice_november"))
+ assert invoice_id.move_id, "Move not created for open invoice"
+ move_line_obj = self.pool.get('account.move.line')
+ move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('account_id', '=', invoice_id.account_id.id)])
+ move_line = move_line_obj.browse(cr, uid, move_lines[0])
+ assert (move_line.debit - move_line.credit == -555.56), "Invoice move is incorrect for creditor account"
+ assert (move_line.amount_currency == -1000), "Amount currency is incorrect for creditor account"
+-
+ I set the context that will be used for the encoding of all the vouchers of this file
+-
+ !context
+ 'type': 'payment'
+-
+ I create the voucher of payment with values $950, journal USD
+-
+ !record {model: account.voucher, id: account_voucher_case_5_supplier_flow, view: view_vendor_payment_form}:
+ account_id: account.cash
+ amount: 950.0
+ company_id: base.main_company
+ journal_id: bank_journal_USD
+ name: 'Payment: Case Basic SUPPLIER USD/USD'
+ partner_id: base.res_partner_19
+ period_id: account.period_12
+ date: !eval time.strftime("%Y-12-01")
+ payment_option: 'with_writeoff'
+ writeoff_acc_id: account.a_expense
+ comment: 'Write Off'
+ type: 'payment'
+-
+ I fill $1000 for the previously encoded invoice
+-
+ !python {model: account.voucher}: |
+ import netsvc, time
+ vals = {}
+ voucher_id = self.browse(cr, uid, ref('account_voucher_case_5_supplier_flow'))
+ for item in voucher_id.line_dr_ids:
+ if item.amount_unreconciled == 1000.00:
+ self.pool.get('account.voucher.line').write(cr, uid, [item.id], {'amount': 1000})
+ assert (voucher_id.state=='draft'), "Voucher is not in draft state"
+-
+ I check that writeoff amount computed is -50.0
+-
+ !assert {model: account.voucher, id: account_voucher_case_5_supplier_flow}:
+ - writeoff_amount == -50.0
+-
+ I confirm the voucher
+-
+ !workflow {model: account.voucher, action: proforma_voucher, ref: account_voucher_case_5_supplier_flow}
+-
+ I check that the move of my voucher is valid and that it is posted
+-
+ !python {model: account.voucher}: |
+ voucher_id = self.browse(cr, uid, ref('account_voucher_case_5_supplier_flow'))
+ assert voucher_id.state == 'posted', "Voucher state is not posted"
+ for move_line in voucher_id.move_id.line_id:
+ assert move_line.state == 'valid', "Voucher move is not valid"
+-
+ I check that my creditor account is correct
+-
+ I check that the bank entry is -$950 and 633.33€ as amount_currency and credit, respectively.
+-
+ I check that the creditor account has 1 new line with $1000 and 666.67€ as amount_currency and debit, respectively.
+-
+ I check that my currency rate difference is correct (111.11€ in debit/credit with no amount_currency)
+-
+ I check that my writeoff is correct. 33.34€ in credit with -$50 as amount currency
+-
+ !python {model: account.voucher}: |
+ voucher_id = self.browse(cr, uid, ref('account_voucher_case_5_supplier_flow'))
+ for move_line in voucher_id.move_id.line_id:
+ if move_line.amount_currency == -950.00:
+ assert move_line.credit == 633.33, "Wrong bank entry."
+ elif move_line.credit == 111.11 or move_line.debit == 111.11:
+ assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
+ elif move_line.credit == 33.34:
+ assert move_line.amount_currency == -50.0, "Writeoff amount is wrong."
+ elif move_line.debit == 666.67:
+ assert move_line.amount_currency == 1000.0, "Wrong supplier entry."
+ else:
+ assert False, "Wrong entry. Unrecognized account move line"
+-
+ I check the residual amount of invoice, it should be 0 in residual currency and 0 in amount_residual and paid
+-
+ !python {model: account.invoice}: |
+ invoice_id = self.browse(cr, uid, ref("account_supplier_invoice_november"))
+ move_line_obj = self.pool.get('account.move.line')
+ move_lines = move_line_obj.search(cr, uid, [('move_id', '=', invoice_id.move_id.id), ('invoice', '=', invoice_id.id), ('account_id', '=', invoice_id.account_id.id)])
+ move_line = move_line_obj.browse(cr, uid, move_lines[0])
+ assert (move_line.amount_residual_currency == 0.0 and move_line.amount_residual == 0.0 and invoice_id.state == 'paid') , "Residual amount is not correct for supplier invoice"
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 6666ac77d2f..b6f367601ff 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -54,6 +54,8 @@
@@ -172,7 +172,7 @@
Total :
- [[ formatLang(get_nettotal(), currency_obj = o.company_id and o.company_id.currency_id) ]]
+ [[ formatLang(get_nettotal()) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
diff --git a/addons/lunch/report/report_lunch_order.py b/addons/lunch/report/report_lunch_order.py
index 7e2b8de9f49..3a0875c1cd1 100644
--- a/addons/lunch/report/report_lunch_order.py
+++ b/addons/lunch/report/report_lunch_order.py
@@ -23,7 +23,7 @@ import tools
from osv import fields,osv
class report_lunch_order(osv.osv):
- _name = "report.lunch.order"
+ _name = "report.lunch.order.line"
_description = "Lunch Orders Statistics"
_auto = False
_rec_name = 'date'
@@ -35,32 +35,29 @@ class report_lunch_order(osv.osv):
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'user_id': fields.many2one('res.users', 'User Name'),
- 'box_name': fields.char('Name', size=30),
'price_total':fields.float('Total Price', readonly=True),
+ 'note' : fields.text('Note',size=256,readonly=True),
}
_order = 'date desc'
def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_lunch_order')
+ tools.drop_view_if_exists(cr, 'report_lunch_order_line')
cr.execute("""
- create or replace view report_lunch_order as (
+ create or replace view report_lunch_order_line as (
select
min(lo.id) as id,
+ lo.user_id as user_id,
lo.date as date,
to_char(lo.date, 'YYYY') as year,
to_char(lo.date, 'MM') as month,
to_char(lo.date, 'YYYY-MM-DD') as day,
- lo.user_id,
- cm.name as box_name,
+ lo.note as note,
sum(lp.price) as price_total
from
- lunch_order as lo
- left join lunch_cashmove as cm on (cm.id = lo.cashmove)
- left join lunch_cashbox as lc on (lc.id = cm.box)
- left join lunch_product as lp on (lo.product = lp.id)
-
+ lunch_order_line as lo
+ left join lunch_product as lp on (lo.product_id = lp.id)
group by
- lo.date,lo.user_id,cm.name
+ lo.date,lo.user_id,lo.note
)
""")
report_lunch_order()
diff --git a/addons/lunch/report/report_lunch_order_view.xml b/addons/lunch/report/report_lunch_order_view.xml
index e92007592ac..f7bfdcd7395 100644
--- a/addons/lunch/report/report_lunch_order_view.xml
+++ b/addons/lunch/report/report_lunch_order_view.xml
@@ -2,50 +2,6 @@
-
- report.lunch.order.tree
- report.lunch.order
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.lunch.order.search
- report.lunch.order
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Lunch Order Analysis
- report.lunch.order
- form
- tree
-
- {'search_default_month':1,'search_default_User':1}
-
-
-
-
diff --git a/addons/lunch/security/ir.model.access.csv b/addons/lunch/security/ir.model.access.csv
index 72c06cceb2b..22966129142 100644
--- a/addons/lunch/security/ir.model.access.csv
+++ b/addons/lunch/security/ir.model.access.csv
@@ -1,8 +1,16 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_lunch_order_user,lunch.order user,model_lunch_order,base.group_tool_user,1,1,1,1
-access_lunch_cashmove_user,lunch.cashmove user,model_lunch_cashmove,base.group_tool_user,1,1,1,1
-access_report_lunch_amount_manager,report.lunch.amount manager,model_report_lunch_amount,base.group_tool_manager,1,1,1,1
-access_lunch_category_manager,lunch.category.user,model_lunch_category,base.group_tool_user,1,1,1,1
-access_report_lunch_order_manager,report.lunch.order manager,model_report_lunch_order,base.group_tool_manager,1,1,1,1
-access_lunch_product_user,lunch.product user,model_lunch_product,base.group_tool_user,1,1,1,1
-access_lunch_cashbox_user,lunch.cashbox user,model_lunch_cashbox,base.group_tool_user,1,1,1,1
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+order_user,"Order user",model_lunch_order,group_lunch_manager,1,1,1,1
+order_line_user,"Order Line user",model_lunch_order_line,group_lunch_manager,1,1,1,1
+cashmove_user,"Cashmove user",model_lunch_cashmove,group_lunch_manager,1,1,1,1
+product_user,"Product user",model_lunch_product,group_lunch_manager,1,1,1,1
+product_category_user,"Product category user",model_lunch_product_category,group_lunch_manager,1,1,1,1
+alert_user,"Alert user",model_lunch_alert,group_lunch_manager,1,1,1,1
+order_user,"Order user",model_lunch_order,group_lunch_user,1,1,1,0
+order_line_user,"Order Line user",model_lunch_order_line,group_lunch_user,1,1,1,1
+cashmove_user,"Cashmove user",model_lunch_cashmove,group_lunch_user,1,0,0,0
+product_user,"Product user",model_lunch_product,group_lunch_user,1,0,0,0
+product_category_user,"Product category user",model_lunch_product_category,group_lunch_user,1,0,0,0
+alert_user,"Alert user",model_lunch_alert,group_lunch_user,1,0,0,0
+access_report_order_line,access_report_order_line,model_report_lunch_order_line,,1,1,1,1
+access_lunch_validation,access_lunch_validation,model_lunch_validation,,1,1,1,1
+access_lunch_cancel,access_lunch_cancel,model_lunch_cancel,,1,1,1,1
diff --git a/addons/lunch/security/lunch_security.xml b/addons/lunch/security/lunch_security.xml
index 46293a97561..75ab0836b12 100644
--- a/addons/lunch/security/lunch_security.xml
+++ b/addons/lunch/security/lunch_security.xml
@@ -1,17 +1,11 @@
-
+
-
-
-
- User
-
-
-
- Manager
-
-
-
-
-
-
+
+
+ Lunch / Manager
+
+
+ Lunch / User
+
+
diff --git a/addons/lunch/static/src/css/Makefile b/addons/lunch/static/src/css/Makefile
new file mode 100644
index 00000000000..941e8dbfe7d
--- /dev/null
+++ b/addons/lunch/static/src/css/Makefile
@@ -0,0 +1,3 @@
+lunch.css: lunch.sass
+ sass -t expanded lunch.sass lunch.css
+
diff --git a/addons/lunch/static/src/css/lunch.css b/addons/lunch/static/src/css/lunch.css
new file mode 100644
index 00000000000..96e39c53fa6
--- /dev/null
+++ b/addons/lunch/static/src/css/lunch.css
@@ -0,0 +1,43 @@
+@charset "utf-8";
+.openerp .oe_lunch .oe_lunch_alert textarea {
+ background-color: #ffc7c7;
+ padding: 10px;
+ height: 1em;
+ margin-bottom: 20px;
+}
+.openerp .oe_lunch button.oe_button_add {
+ position: relative;
+ top: -2px;
+ left: 3px;
+}
+.openerp .oe_lunch button.oe_button_plus {
+ margin: -2px;
+}
+.openerp .oe_lunch .oe_lunch_30pc {
+ width: 30%;
+ display: inline-block;
+ vertical-align: top;
+}
+.openerp .oe_lunch .oe_lunch_30pc:nth-child(3) {
+ padding-right: 0;
+}
+.openerp .oe_lunch .oe_lunch_30pc {
+ padding-right: 5%;
+}
+.openerp .oe_lunch h2 {
+ color: #7c7bad;
+}
+.openerp .oe_lunch .oe_lunch_button {
+ float: right;
+}
+.openerp .oe_lunch .oe_lunch_vignette {
+ border-bottom: 1px solid #dddddd;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.openerp .oe_lunch .oe_lunch_vignette:last-child {
+ border: none;
+}
+.openerp .oe_lunch .oe_group_text_button {
+ margin-bottom: 3px;
+}
diff --git a/addons/lunch/static/src/css/lunch.sass b/addons/lunch/static/src/css/lunch.sass
new file mode 100644
index 00000000000..9612b5fdd3d
--- /dev/null
+++ b/addons/lunch/static/src/css/lunch.sass
@@ -0,0 +1,36 @@
+@charset "utf-8"
+
+.openerp
+ .oe_lunch
+ .oe_lunch_alert
+ textarea
+ background-color: #ffc7c7
+ padding: 10px
+ height: 1em
+ margin-bottom: 20px
+ button.oe_button_add
+ position: relative
+ top: -2px
+ left: 3px
+ button.oe_button_plus
+ margin: -2px
+ .oe_lunch_30pc
+ width: 30%
+ display: inline-block
+ vertical-align: top
+ .oe_lunch_30pc:nth-child(3)
+ padding-right: 0
+ .oe_lunch_30pc
+ padding-right: 5%
+ h2
+ color: #7C7BAD
+ .oe_lunch_button
+ float: right
+ .oe_lunch_vignette
+ border-bottom: 1px solid #dddddd
+ padding-top: 5px
+ padding-bottom: 5px
+ .oe_lunch_vignette:last-child
+ border: none
+ .oe_group_text_button
+ margin-bottom: 3px
diff --git a/addons/lunch/static/src/img/icon.png b/addons/lunch/static/src/img/icon.png
index 7493a3c7f4e..0dda33edd50 100644
Binary files a/addons/lunch/static/src/img/icon.png and b/addons/lunch/static/src/img/icon.png differ
diff --git a/addons/lunch/test/lunch_report.yml b/addons/lunch/test/lunch_report.yml
deleted file mode 100644
index 2043afe7796..00000000000
--- a/addons/lunch/test/lunch_report.yml
+++ /dev/null
@@ -1,8 +0,0 @@
--
- In order to test the PDF reports defined on a Lunch, we will print a Lunch Order Report
--
- !python {model: lunch.order}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.lunch.order').create(cr, uid, [ref('lunch.lunch_order_0'),ref('lunch.lunch_order_1')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'lunch-lunch_order_report.'+format), 'wb+').write(data)
diff --git a/addons/lunch/test/test_lunch.yml b/addons/lunch/test/test_lunch.yml
deleted file mode 100644
index 7cb23f52dbf..00000000000
--- a/addons/lunch/test/test_lunch.yml
+++ /dev/null
@@ -1,128 +0,0 @@
-- |
- In order to test the Lunch module in OpenERP,
- I will create one lunch order and then check the effect on cashboxes and cashmoves
-
-- |
- Given that I have a category of lunch products "Burger".
--
- !record {model: lunch.category, id: lunch_category_burger0}:
- name: Burger
-- |
- Given that I have a product "Club1" in this category with a price of "2.75".
-
--
- !record {model: lunch.product, id: lunch_product_club1}:
- category_id: lunch_category_burger0
- name: Club1
- price: 2.75
-- |
- Given that I have a cashbox "Employee Cashbox"
--
- !record {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- manager: base.user_root
- name: Employee Cashbox
-- |
- I create a lunch order "LU001" for the "Club1" product
-- |
- When I select the product "club1", the price of 2.75 is automatically proposed
--
- !record {model: lunch.order, id: lunch_order_0}:
- date: !eval time.strftime('%Y-%m-%d')
- product: 'lunch_product_club1'
- price: 2.75
-
-- |
- I check that lunch order is on draft state after having created it.
--
- !assert {model: lunch.order, id: lunch_order_0}:
- - state == 'draft'
-- |
- I confirm the order "LU001" using the "Confirm Order" wizard.
--
- !record {model: lunch.order.confirm, id: lunch_order_confirm_0}:
- confirm_cashbox: 'lunch_cashbox_cashbox0'
--
- I click on "Confirm Order" button of this wizard.
--
- !python {model: lunch.order.confirm}: |
- self.confirm(cr, uid, [ref('lunch_order_confirm_0')], {'active_ids': [ref('lunch_order_0')]})
-
-- |
- I check that the Cash Moves have been generated with the right box
- name
--
- !assert {model: lunch.order, id: lunch_order_0}:
- - cashmove.id != False
-
-- |
- I check that the Total on the "Employee Cashbox" is -2.75
-
--
- !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- - sum_remain == -2.75
-
-- |
- I create a new lunch order "LU002" for the "Club1" product, at another date.
--
- !record {model: lunch.order, id: lunch_order_1}:
- date: !eval "(datetime.now() + timedelta(2)).strftime('%Y-%m-%d')"
- product: 'lunch_product_club1'
- price: 2.75
-
-- |
- I confirm this order.open wizard and select "Employee Cashbox".
--
- !record {model: lunch.order.confirm, id: lunch_order_confirm_1}:
- confirm_cashbox: 'lunch_cashbox_cashbox0'
-- |
- Now I click on "Confirm Order" button of this wizard.
--
- !python {model: lunch.order.confirm}: |
- self.confirm(cr, uid, [ref('lunch_order_confirm_1')], {'active_ids': [ref('lunch_order_1')]})
-
-- |
- I check that the Total on the "Employee Cashbox" is -5.50
--
- !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- - sum_remain == -5.50
-
-- |
- I cancel the order "LU002"
--
- !record {model: lunch.order.cancel, id: lunch_order_cancel_0}:
- {}
-- |
- I click on "Yes" button of this wizard for cancel order.
-
--
- !python {model: lunch.order.cancel}: |
- self.cancel(cr, uid, [ref('lunch_order_cancel_0')], {'active_ids': [ref('lunch_order_1')]})
-
-- |
- I test that the Cash Moves record have been removed for the order LU002.
--
- !assert {model: lunch.order, id: lunch_order_1}:
- - cashmove.id == False
-
-- |
- I check that the Total on the "Employee Cashbox" is -2.75
--
- !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- - sum_remain == -2.75
-- |
- I reset the "Employee Cashbox" to zero using the "Set CashBox to Zero" wizard.
--
- !record {model: lunch.cashbox.clean, id: lunch_cashbox_clean_0}:
- {}
--
- Now click on "Set to Zero" button of this wizard.
--
- !python {model: lunch.cashbox.clean, id: lunch_cashbox_clean_0}: |
- self.set_to_zero(cr, uid, [ref('lunch_cashbox_clean_0')], {'active_ids': [ref('lunch_cashbox_cashbox0')]})
-
-- |
- I check that the Total on the "Employee Cashbox" is -5.50
--
- !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- - sum_remain == 0.00
-
diff --git a/addons/stock_planning/wizard/__init__.py b/addons/lunch/tests/__init__.py
similarity index 81%
rename from addons/stock_planning/wizard/__init__.py
rename to addons/lunch/tests/__init__.py
index 876b4afdf68..194888974b0 100644
--- a/addons/stock_planning/wizard/__init__.py
+++ b/addons/lunch/tests/__init__.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# OpenERP, Open Source Business Applications
+# Copyright (c) 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
@@ -18,9 +18,10 @@
# along with this program. If not, see .
#
##############################################################################
+from . import test_lunch
-import stock_planning_create_periods
-import stock_planning_forecast
-import stock_planning_createlines
+checks = [
+ test_lunch,
+]
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/lunch/tests/test_lunch.py b/addons/lunch/tests/test_lunch.py
new file mode 100644
index 00000000000..128e4796611
--- /dev/null
+++ b/addons/lunch/tests/test_lunch.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# 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
+# 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 tools
+from openerp.tests import common
+
+class Test_Lunch(common.TransactionCase):
+
+ def setUp(self):
+ """*****setUp*****"""
+ super(Test_Lunch, self).setUp()
+ cr, uid = self.cr, self.uid
+
+ self.res_users = self.registry('res.users')
+ self.lunch_order = self.registry('lunch.order')
+ self.lunch_order_line = self.registry('lunch.order.line')
+ self.lunch_cashmove = self.registry('lunch.cashmove')
+ self.lunch_product = self.registry('lunch.product')
+ self.lunch_alert = self.registry('lunch.alert')
+ self.lunch_product_category = self.registry('lunch.product.category')
+
+ self.demo_id = self.res_users.search(cr, uid, [('name', '=', 'Demo User')])
+ self.product_bolognese_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'lunch', 'product_Bolognese')
+ self.product_Bolognese_id = self.product_bolognese_ref and self.product_bolognese_ref[1] or False
+ self.new_id_order = self.lunch_order.create(cr,uid,{
+ 'user_id': self.demo_id[0],
+ 'order_line_ids':'[]',
+ },context=None)
+ self.new_id_order_line = self.lunch_order_line.create(cr,uid,{
+ 'order_id':self.new_id_order,
+ 'product_id':self.product_Bolognese_id,
+ 'note': '+Emmental',
+ 'cashmove': [],
+ 'price': self.lunch_product.browse(cr,uid,self.product_Bolognese_id,context=None).price,
+ })
+
+ def test_00_lunch_order(self):
+ """Change the state of an order line from 'new' to 'ordered'. Check that there are no cashmove linked to that order line"""
+ cr, uid = self.cr, self.uid
+ self.order_one = self.lunch_order_line.browse(cr,uid,self.new_id_order_line,context=None)
+ #we check that our order_line is a 'new' one and that there are no cashmove linked to that order_line:
+ self.assertEqual(self.order_one.state,'new')
+ self.assertEqual(self.order_one.cashmove, [])
+ #we order that orderline so it's state will be 'ordered'
+ self.order_one.order()
+ self.order_one = self.lunch_order_line.browse(cr,uid,self.new_id_order_line,context=None)
+ #we check that our order_line is a 'ordered' one and that there are no cashmove linked to that order_line:
+ self.assertEqual(self.order_one.state,'ordered')
+ self.assertEqual(self.order_one.cashmove, [])
+
+ def test_01_lunch_order(self):
+ """Change the state of an order line from 'new' to 'ordered' then to 'confirmed'. Check that there is a cashmove linked to the order line"""
+ cr, uid = self.cr, self.uid
+ self.test_00_lunch_order()
+ #We receive the order so we confirm the order line so it's state will be 'confirmed'
+ #A cashmove will be created and we will test that the cashmove amount equals the order line price
+ self.order_one.confirm()
+ self.order_one = self.lunch_order_line.browse(cr,uid,self.new_id_order_line,context=None)
+ #we check that our order_line is a 'confirmed' one and that there are a cashmove linked to that order_line with an amount equals to the order line price:
+ self.assertEqual(self.order_one.state,'confirmed')
+ self.assertTrue(self.order_one.cashmove!=[])
+ self.assertTrue(self.order_one.cashmove[0].amount==-self.order_one.price)
+
+ def test_02_lunch_order(self):
+ """Change the state of an order line from 'confirmed' to 'cancelled' and check that the cashmove linked to that order line will be deleted"""
+ cr, uid = self.cr, self.uid
+ self.test_01_lunch_order()
+ #We have a confirmed order with its associate cashmove
+ #We execute the cancel function
+ self.order_one.cancel()
+ self.order_one = self.lunch_order_line.browse(cr,uid,self.new_id_order_line,context=None)
+ #We check that the state is cancelled and that the cashmove has been deleted
+ self.assertEqual(self.order_one.state,'cancelled')
+ self.assertTrue(self.order_one.cashmove==[])
\ No newline at end of file
diff --git a/addons/lunch/wizard/__init__.py b/addons/lunch/wizard/__init__.py
index e6b34c215ac..9af98b65899 100644
--- a/addons/lunch/wizard/__init__.py
+++ b/addons/lunch/wizard/__init__.py
@@ -1,8 +1,8 @@
# -*- encoding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
+# Copyright (C) 2004-2012 Tiny SPRL ().
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -15,13 +15,10 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
+# along with this program. If not, see .
#
##############################################################################
-import lunch_order_confirm
-import lunch_order_cancel
-import lunch_cashbox_clean
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
+import lunch_validation
+import lunch_cancel
+import lunch_order
diff --git a/addons/lunch/wizard/lunch_order_cancel.py b/addons/lunch/wizard/lunch_cancel.py
similarity index 51%
rename from addons/lunch/wizard/lunch_order_cancel.py
rename to addons/lunch/wizard/lunch_cancel.py
index a0c8779b323..648ab4e2396 100644
--- a/addons/lunch/wizard/lunch_order_cancel.py
+++ b/addons/lunch/wizard/lunch_cancel.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
+# Copyright (C) 2004-2012 Tiny SPRL ().
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -18,28 +18,12 @@
# along with this program. If not, see .
#
##############################################################################
-from osv import fields, osv
+from osv import osv, fields
-class lunch_order_cancel(osv.osv_memory):
- """
- Cancel Lunch Order
- """
- _name = "lunch.order.cancel"
- _description = "Cancel Order"
-
- def cancel(self, cr, uid, ids, context=None):
- """
- Cancel cashmove entry from cashmoves and update state to draft.
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List Lunch Order Cancel’s IDs
- """
- if context is None:
- context = {}
- data = context and context.get('active_ids', []) or []
- return self.pool.get('lunch.order').lunch_order_cancel(cr, uid, data, context)
-
-lunch_order_cancel()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+class lunch_cancel(osv.Model):
+ """ lunch cancel """
+ _name = 'lunch.cancel'
+ _description = 'cancel lunch order'
+ def cancel(self,cr,uid,ids,context=None):
+ return self.pool.get('lunch.order.line').cancel(cr, uid, ids, context=context)
diff --git a/addons/lunch/wizard/lunch_cancel_view.xml b/addons/lunch/wizard/lunch_cancel_view.xml
new file mode 100644
index 00000000000..acc0cfc9f13
--- /dev/null
+++ b/addons/lunch/wizard/lunch_cancel_view.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ cancel order lines
+ lunch.cancel
+
+
+
+
+ Cancel a meal means that we didn't receive it from the supplier.
+
+ A cancelled meal should not be paid by employees.
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/lunch/wizard/lunch_cashbox_clean.py b/addons/lunch/wizard/lunch_cashbox_clean.py
deleted file mode 100644
index e95d05870f9..00000000000
--- a/addons/lunch/wizard/lunch_cashbox_clean.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-
-class lunch_cashbox_clean(osv.osv_memory):
-
- _name = "lunch.cashbox.clean"
- _description = "clean cashbox"
-
- def set_to_zero(self, cr, uid, ids, context=None):
-
- """
- clean Cashbox. set active fields False.
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List Lunch cashbox Clean’s IDs
- @return:Dictionary {}.
- """
- #TOFIX: use orm methods
- if context is None:
- context = {}
- data = context and context.get('active_ids', []) or []
- cashmove_ref = self.pool.get('lunch.cashmove')
- cr.execute("select user_cashmove, box,sum(amount) from lunch_cashmove \
- where active = 't' and box IN %s group by user_cashmove, \
- box" , (tuple(data),))
- res = cr.fetchall()
-
- cr.execute("update lunch_cashmove set active = 'f' where active= 't' \
- and box IN %s" , (tuple(data),))
- #TOCHECK: Why need to create duplicate entry after clean box ?
-
- #for (user_id, box_id, amount) in res:
- # cashmove_ref.create(cr, uid, {
- # 'name': 'Summary for user' + str(user_id),
- # 'amount': amount,
- # 'user_cashmove': user_id,
- # 'box': box_id,
- # 'active': True,
- # })
- return {'type': 'ir.actions.act_window_close'}
-
-lunch_cashbox_clean()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/lunch/wizard/lunch_cashbox_clean_view.xml b/addons/lunch/wizard/lunch_cashbox_clean_view.xml
deleted file mode 100644
index 5ba2a6ff3bf..00000000000
--- a/addons/lunch/wizard/lunch_cashbox_clean_view.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
- lunch.cashbox.clean.form
- lunch.cashbox.clean
-
-
-
-
-
-
-
-
-
-
-
- Set CashBox to Zero
- lunch.cashbox.clean
- form
- tree,form
-
- new
-
-
-
-
-
-
diff --git a/addons/lunch/wizard/lunch_order.py b/addons/lunch/wizard/lunch_order.py
new file mode 100644
index 00000000000..767497bcc4b
--- /dev/null
+++ b/addons/lunch/wizard/lunch_order.py
@@ -0,0 +1,29 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2012 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from osv import osv, fields
+
+class lunch_order_order(osv.TransientModel):
+ """ lunch order meal """
+ _name = 'lunch.order.order'
+ _description = 'Wizard to order a meal'
+
+ def order(self,cr,uid,ids,context=None):
+ return self.pool.get('lunch.order.line').order(cr, uid, ids, context=context)
diff --git a/addons/lunch/wizard/lunch_order_cancel_view.xml b/addons/lunch/wizard/lunch_order_cancel_view.xml
deleted file mode 100644
index 91d6a959241..00000000000
--- a/addons/lunch/wizard/lunch_order_cancel_view.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
- lunch.order.cancel.form
- lunch.order.cancel
-
-
-
-
-
-
-
-
-
-
-
- Cancel Order
- lunch.order.cancel
- form
- tree,form
-
- new
-
-
-
-
-
-
diff --git a/addons/lunch/wizard/lunch_order_confirm.py b/addons/lunch/wizard/lunch_order_confirm.py
deleted file mode 100644
index 279234897de..00000000000
--- a/addons/lunch/wizard/lunch_order_confirm.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-
-class lunch_order_confirm(osv.osv_memory):
- """
- Confirm Lunch Order
- """
- _name = "lunch.order.confirm"
- _description = "confirm Order"
-
- _columns = {
- 'confirm_cashbox':fields.many2one('lunch.cashbox', 'Name of box', required=True),
- }
-
- def confirm(self, cr, uid, ids, context=None):
- """
- confirm Lunch Order.Create cashmoves in launch cashmoves when state is
- confirm in lunch order.
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List Lunch Order confirm’s IDs
- @return: Dictionary {}.
- """
- if context is None:
- context = {}
- data = context and context.get('active_ids', []) or []
- order_ref = self.pool.get('lunch.order')
-
- for confirm_obj in self.browse(cr, uid, ids, context=context):
- order_ref.confirm(cr, uid, data, confirm_obj.confirm_cashbox.id, context)
- return {'type': 'ir.actions.act_window_close'}
-
-lunch_order_confirm()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/lunch/wizard/lunch_order_confirm_view.xml b/addons/lunch/wizard/lunch_order_confirm_view.xml
deleted file mode 100644
index 022d17acea3..00000000000
--- a/addons/lunch/wizard/lunch_order_confirm_view.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
- lunch.order.confirm.form
- lunch.order.confirm
-
-
-
-
-
-
-
-
-
-
-
-
- Confirm Order
- lunch.order.confirm
- form
- tree,form
-
- new
-
-
-
-
-
-
diff --git a/addons/lunch/wizard/lunch_order_view.xml b/addons/lunch/wizard/lunch_order_view.xml
new file mode 100644
index 00000000000..ba2d372a543
--- /dev/null
+++ b/addons/lunch/wizard/lunch_order_view.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ Order meal
+ lunch.order.order
+
+
+
+
+ Order a meal doesn't mean that we have to pay it.
+ A meal should be paid when it is received.
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/lunch/wizard/lunch_validation.py b/addons/lunch/wizard/lunch_validation.py
new file mode 100644
index 00000000000..f4b4b30747d
--- /dev/null
+++ b/addons/lunch/wizard/lunch_validation.py
@@ -0,0 +1,29 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2012 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+from osv import osv, fields
+
+class lunch_validation(osv.Model):
+ """ lunch validation """
+ _name = 'lunch.validation'
+ _description = 'lunch validation for order'
+
+ def confirm(self,cr,uid,ids,context=None):
+ return self.pool.get('lunch.order.line').confirm(cr, uid, ids, context=context)
diff --git a/addons/lunch/wizard/lunch_validation_view.xml b/addons/lunch/wizard/lunch_validation_view.xml
new file mode 100644
index 00000000000..bec141d2d4a
--- /dev/null
+++ b/addons/lunch/wizard/lunch_validation_view.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ validate order lines
+ lunch.validation
+
+
+
+
+ Once a meal is received a new cash move is created for the employee.
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py
index aea7ee62cbc..b34993ffd32 100644
--- a/addons/mail/__init__.py
+++ b/addons/mail/__init__.py
@@ -22,12 +22,12 @@
import mail_message_subtype
import mail_alias
import mail_followers
+import mail_vote
+import mail_favorite
import mail_message
import mail_mail
import mail_thread
import mail_group
-import mail_vote
-import mail_favorite
import res_partner
import res_users
import report
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index 0c32ba27d6f..9ad3232d396 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -89,6 +89,7 @@ Main Features
'static/lib/jquery.expander/jquery.expander.js',
'static/src/js/mail.js',
'static/src/js/mail_followers.js',
+ 'static/src/js/many2many_tags_email.js',
],
'qweb': [
'static/src/xml/mail.xml',
diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml
index 522cbe8c7a7..9b91c519348 100644
--- a/addons/mail/data/mail_data.xml
+++ b/addons/mail/data/mail_data.xml
@@ -28,7 +28,7 @@
- comment
+ Discussions
diff --git a/addons/mail/data/mail_demo.xml b/addons/mail/data/mail_demo.xml
index bda93fc485d..a5eaa63956a 100644
--- a/addons/mail/data/mail_demo.xml
+++ b/addons/mail/data/mail_demo.xml
@@ -2,49 +2,90 @@
+
+
+ none
+
+
+
mail.group
- Your monthly meal vouchers arrived. You can get them at Christine's office.
-This month you also get 250 EUR of eco-vouchers if you have been in the company for more than a year.
+ Your monthly meal vouchers arrived. You can get them at Christine's office.]]>comment
+
-
mail.group
-
+ Oh, I had forgotten. This month you also get 250 EUR of eco-vouchers if you have been in the company for more than a year.]]>comment
+
-
mail.group
- Thanks, but where is Christine's office, if I may ask? (I'm new here)
+ Thanks! Could you please remind me where is Christine's office, if I may ask? I'm new here!]]>comment
+
-
+
mail.group
- Building B3, second floor on the right :-)
+ Building B3, second floor on the right :-).]]>comment
+
+
-
mail.group
- Great news, I need to buy a new fridge, I think I can pay it with the eco-vouchers!
+ Many thanks. Actually that's good news, next year I'll have to buy a new fridge, I think I will pay it with the eco-vouchers!]]>comment
+
+
+
+
+
+ Hello Demo User! I was wondering whether you had some issues with our secret task about putting cats everywhere in OpenERP.
+ comment
+
+
+
+
+
+ No specific issues, I think everything is clear.
+
+ comment
+
+
+
+
+
+ Ow, just to be sure... we were talking about lolcats, right ?
+
+ comment
+
+
+
+
+
+ Absolutely!
+
+ comment
+
+
+
diff --git a/addons/mail/data/mail_group_data.xml b/addons/mail/data/mail_group_data.xml
index 11d0ee7d04b..64d989f9e9d 100644
--- a/addons/mail/data/mail_group_data.xml
+++ b/addons/mail/data/mail_group_data.xml
@@ -9,7 +9,7 @@
Whole Company
- Discussion about best sales practices and deals.
+ General announces for all employees.
@@ -17,12 +17,11 @@
mail.groupnotification
+ Welcome to OpenERP!
- Your homepage is a summary of messages you received and key information about documents you follow.
-
-The top menu bar contains all applications you installed. You can use this <i>Settings</i> menu to install more applications, activate others features or give access to new users.
-
-To setup your preferences (name, email signature, avatar), click on the top right corner.
+ Your homepage is a summary of messages you received and key information about documents you follow.
+The top menu bar contains all applications you installed. You can use the Settings menu to install more applications, activate others features or give access to new users.
+To setup your preferences (name, email signature, avatar), click on the top right corner.
]]>
diff --git a/addons/mail/i18n/ru.po b/addons/mail/i18n/ru.po
index e43f9e6d2b8..e35c40f94fe 100644
--- a/addons/mail/i18n/ru.po
+++ b/addons/mail/i18n/ru.po
@@ -8,20 +8,20 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-09 00:36+0000\n"
-"PO-Revision-Date: 2012-10-26 17:02+0000\n"
+"PO-Revision-Date: 2012-10-30 09:52+0000\n"
"Last-Translator: Chertykov Denis \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 05:33+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: mail
#: field:mail.compose.message,subtype:0 field:mail.message,subtype:0
#: field:mail.message.common,subtype:0
msgid "Message Type"
-msgstr ""
+msgstr "Тип сообщения"
#. module: mail
#: help:mail.compose.message,auto_delete:0
@@ -51,7 +51,7 @@ msgstr "История общения"
#. module: mail
#: view:mail.message:0
msgid "Group By..."
-msgstr "Объеденить по..."
+msgstr "Группировать по ..."
#. module: mail
#: model:ir.actions.act_window,name:mail.action_email_compose_message_wizard
@@ -80,7 +80,7 @@ msgstr "Получатели сообщения"
#: field:mail.compose.message,body_text:0 field:mail.message,body_text:0
#: field:mail.message.common,body_text:0
msgid "Text Contents"
-msgstr ""
+msgstr "Текстовое содержимое"
#. module: mail
#: view:mail.message:0 selection:mail.message,state:0
@@ -196,7 +196,7 @@ msgstr "Получатели"
#. module: mail
#: model:ir.model,name:mail.model_mail_compose_message
msgid "Email composition wizard"
-msgstr ""
+msgstr "Мастер составления эл. почты"
#. module: mail
#: field:mail.compose.message,res_id:0 field:mail.message,res_id:0
@@ -219,7 +219,7 @@ msgstr "Ответ:"
#: field:mail.compose.message,model:0 field:mail.message,model:0
#: field:mail.message.common,model:0
msgid "Related Document Model"
-msgstr ""
+msgstr "Модель связанного документа"
#. module: mail
#: view:mail.message:0
@@ -287,7 +287,7 @@ msgstr "%(sender_name)s написал:"
#: field:mail.compose.message,body_html:0 field:mail.message,body_html:0
#: field:mail.message.common,body_html:0
msgid "Rich-text Contents"
-msgstr ""
+msgstr "Форматированное содержимое"
#. module: mail
#: field:mail.message,original:0
@@ -359,7 +359,7 @@ msgstr "[OpenERP-Forward-Failed] %s"
#. module: mail
#: field:mail.message,user_id:0
msgid "Related User"
-msgstr ""
+msgstr "Относится к пользователю"
#. module: mail
#: help:mail.compose.message,headers:0 help:mail.message,headers:0
@@ -454,7 +454,7 @@ msgstr "Сообщения"
#: field:mail.compose.message,headers:0 field:mail.message,headers:0
#: field:mail.message.common,headers:0
msgid "Message Headers"
-msgstr ""
+msgstr "Заголовки сообщений"
#. module: mail
#: field:mail.compose.message,email_bcc:0 field:mail.message,email_bcc:0
diff --git a/addons/mail/mail_followers.py b/addons/mail/mail_followers.py
index e8cf2648f29..8d3876ec91f 100644
--- a/addons/mail/mail_followers.py
+++ b/addons/mail/mail_followers.py
@@ -61,10 +61,10 @@ class mail_notification(osv.Model):
_columns = {
'partner_id': fields.many2one('res.partner', string='Contact',
- ondelete='cascade', required=True),
- 'read': fields.boolean('Read'),
+ ondelete='cascade', required=True, select=1),
+ 'read': fields.boolean('Read', select=1),
'message_id': fields.many2one('mail.message', string='Message',
- ondelete='cascade', required=True),
+ ondelete='cascade', required=True, select=1),
}
_defaults = {
@@ -84,11 +84,13 @@ class mail_notification(osv.Model):
return False
def set_message_read(self, cr, uid, msg_ids, read=None, context=None):
- """ Set a message and its child messages as (un)read for uid.
+ """ Set messages as (un)read. Technically, the notifications related
+ to uid are set to (un)read. If for some msg_ids there are missing
+ notifications (i.e. due to load more or thread parent fetching),
+ they are created.
- :param bool read: read / unread
+ :param bool read: (un)read notification
"""
- # TDE note: use child_of or front-end send correct values ?
user_pid = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0]
notif_ids = self.search(cr, uid, [
('partner_id', '=', user_pid),
@@ -100,10 +102,9 @@ class mail_notification(osv.Model):
return self.write(cr, uid, notif_ids, {'read': read}, context=context)
# some messages do not have notifications: find which one, create notification, update read status
- exist_notification = dict.fromkeys(msg_ids, False)
- for notification in self.browse(cr, uid, notif_ids, context=context):
- exist_notification[notification.message_id] = True
- for msg_id in exist_notification.keys():
+ notified_msg_ids = [notification.message_id.id for notification in self.browse(cr, uid, notif_ids, context=context)]
+ to_create_msg_ids = list(set(msg_ids) - set(notified_msg_ids))
+ for msg_id in to_create_msg_ids:
self.create(cr, uid, {'partner_id': user_pid, 'read': read, 'message_id': msg_id}, context=context)
return self.write(cr, uid, notif_ids, {'read': read}, context=context)
@@ -156,10 +157,10 @@ class mail_notification(osv.Model):
# add signature
body_html = msg.body
# if quote_context:
- # body_html = tools.append_content_to_html(body_html, quote_context, plaintext=False)
- signature = msg.author_id and msg.author_id.user_ids[0].signature or ''
+ # body_html = tools.append_content_to_html(body_html, quote_context, plaintext=False)
+ signature = msg.author_id and msg.author_id.user_ids and msg.author_id.user_ids[0].signature or ''
if signature:
- body_html = tools.append_content_to_html(body_html, signature)
+ body_html = tools.append_content_to_html(body_html, signature, plaintext=True, container_tag='div')
mail_values = {
'mail_message_id': msg.id,
diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml
index 9fc8a545a20..a9d1d80240b 100644
--- a/addons/mail/mail_followers_view.xml
+++ b/addons/mail/mail_followers_view.xml
@@ -19,7 +19,6 @@
mail.followers.formmail.followers
- form
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index bd0ade31b68..9fd476d9d7f 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -25,6 +25,7 @@ import tools
from email.header import decode_header
from openerp import SUPERUSER_ID
from openerp.osv import osv, orm, fields
+from openerp.tools import html_email_clean
from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
@@ -50,8 +51,9 @@ class mail_message(osv.Model):
_description = 'Message'
_inherit = ['ir.needaction_mixin']
_order = 'id desc'
+ _rec_name = 'record_name'
- _message_read_limit = 10
+ _message_read_limit = 30
_message_read_fields = ['id', 'parent_id', 'model', 'res_id', 'body', 'subject', 'date', 'to_read', 'email_from',
'type', 'vote_user_ids', 'attachment_ids', 'author_id', 'partner_ids', 'record_name', 'favorite_user_ids']
_message_record_name_length = 18
@@ -120,21 +122,26 @@ class mail_message(osv.Model):
"message, comment for other messages such as user replies"),
'email_from': fields.char('From',
help="Email address of the sender. This field is set when no matching partner is found for incoming emails."),
- 'author_id': fields.many2one('res.partner', 'Author',
+ 'author_id': fields.many2one('res.partner', 'Author', select=1,
+ ondelete='set null',
help="Author of the message. If not set, email_from may hold an email address that did not match any partner."),
'partner_ids': fields.many2many('res.partner', string='Recipients'),
'notified_partner_ids': fields.many2many('res.partner', 'mail_notification',
- 'message_id', 'partner_id', 'Recipients'),
+ 'message_id', 'partner_id', 'Notified partners',
+ help='Partners that have a notification pushing this message in their mailboxes'),
'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel',
'message_id', 'attachment_id', 'Attachments'),
- 'parent_id': fields.many2one('mail.message', 'Parent Message', select=True, ondelete='set null', help="Initial thread message."),
+ 'parent_id': fields.many2one('mail.message', 'Parent Message', select=True,
+ ondelete='set null', help="Initial thread message."),
'child_ids': fields.one2many('mail.message', 'parent_id', 'Child Messages'),
'model': fields.char('Related Document Model', size=128, select=1),
'res_id': fields.integer('Related Document ID', select=1),
'record_name': fields.function(_get_record_name, type='char',
store=True, string='Message Record Name',
help="Name get of the related document."),
- 'notification_ids': fields.one2many('mail.notification', 'message_id', 'Notifications'),
+ 'notification_ids': fields.one2many('mail.notification', 'message_id',
+ string='Notifications',
+ help='Technical field holding the message notifications. Use notified_partner_ids to access notified partners.'),
'subject': fields.char('Subject'),
'date': fields.datetime('Date'),
'message_id': fields.char('Message-Id', help='Message unique identifier', select=1, readonly=1),
@@ -142,7 +149,8 @@ class mail_message(osv.Model):
'to_read': fields.function(_get_to_read, fnct_search=_search_to_read,
type='boolean', string='To read',
help='Functional field to search for messages the current user has to read'),
- 'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
+ 'subtype_id': fields.many2one('mail.message.subtype', 'Subtype',
+ ondelete='set null', select=1,),
'vote_user_ids': fields.many2many('res.users', 'mail_vote',
'message_id', 'user_id', string='Votes',
help='Users that voted for this message'),
@@ -200,67 +208,99 @@ class mail_message(osv.Model):
# Message loading for web interface
#------------------------------------------------------
- def _message_get_dict(self, cr, uid, message, context=None):
- """ Return a dict representation of the message. This representation is
- used in the JS client code, to display the messages.
+ def _message_read_dict_postprocess(self, cr, uid, messages, message_tree, context=None):
+ """ Post-processing on values given by message_read. This method will
+ handle partners in batch to avoid doing numerous queries.
- :param dict message: read result of a mail.message
+ :param list messages: list of message, as get_dict result
+ :param dict message_tree: {[msg.id]: msg browse record}
"""
- # TDE note: this method should be optimized, to lessen the number of queries, will be done ASAP
- is_author = False
- if message['author_id']:
- is_author = message['author_id'][0] == self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=None)['partner_id'][0]
- author_id = message['author_id']
- elif message['email_from']:
- author_id = (0, message['email_from'])
+ res_partner_obj = self.pool.get('res.partner')
+ ir_attachment_obj = self.pool.get('ir.attachment')
+ pid = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=None)['partner_id'][0]
- has_voted = False
- if uid in message.get('vote_user_ids'):
- has_voted = True
+ # 1. Aggregate partners (author_id and partner_ids) and attachments
+ partner_ids = set()
+ attachment_ids = set()
+ for key, message in message_tree.iteritems():
+ if message.author_id:
+ partner_ids |= set([message.author_id.id])
+ if message.partner_ids:
+ partner_ids |= set([partner.id for partner in message.partner_ids])
+ if message.attachment_ids:
+ attachment_ids |= set([attachment.id for attachment in message.attachment_ids])
- is_favorite = False
- if uid in message.get('favorite_user_ids'):
- is_favorite = True
+ # Filter author_ids uid can see
+ # partner_ids = self.pool.get('res.partner').search(cr, uid, [('id', 'in', partner_ids)], context=context)
+ partners = res_partner_obj.name_get(cr, uid, list(partner_ids), context=context)
+ partner_tree = dict((partner[0], partner) for partner in partners)
- is_private = True
- if message.get('model') and message.get('res_id'):
- is_private = False
+ # 2. Attachments
+ attachments = ir_attachment_obj.read(cr, uid, list(attachment_ids), ['id', 'datas_fname'], context=context)
+ attachments_tree = dict((attachment['id'], {'id': attachment['id'], 'filename': attachment['datas_fname']}) for attachment in attachments)
- try:
- attachment_ids = [{'id': attach[0], 'name': attach[1]} for attach in self.pool.get('ir.attachment').name_get(cr, uid, message['attachment_ids'], context=context)]
- except (orm.except_orm, osv.except_osv):
- attachment_ids = []
-
- # TDE note: should we send partner_ids ?
- # TDE note: shouldn't we separated followers and other partners ? costly to compute maybe ,
- try:
- partner_ids = self.pool.get('res.partner').name_get(cr, uid, message['partner_ids'], context=context)
- except (orm.except_orm, osv.except_osv):
+ # 3. Update message dictionaries
+ for message_dict in messages:
+ message_id = message_dict.get('id')
+ message = message_tree[message_id]
+ if message.author_id:
+ author = partner_tree[message.author_id.id]
+ else:
+ author = (0, message.email_from)
partner_ids = []
+ for partner in message.partner_ids:
+ if partner.id in partner_tree:
+ partner_ids.append(partner_tree[partner.id])
+ attachment_ids = []
+ for attachment in message.attachment_ids:
+ if attachment.id in attachments_tree:
+ attachment_ids.append(attachments_tree[attachment.id])
+ message_dict.update({
+ 'is_author': pid == author[0],
+ 'author_id': author,
+ 'partner_ids': partner_ids,
+ 'attachment_ids': attachment_ids,
+ })
+ return True
- return {
- 'id': message['id'],
- 'type': message['type'],
- 'attachment_ids': attachment_ids,
- 'body': message['body'],
- 'model': message['model'],
- 'res_id': message['res_id'],
- 'record_name': message['record_name'],
- 'subject': message['subject'],
- 'date': message['date'],
- 'author_id': author_id,
- 'is_author': is_author,
- 'partner_ids': partner_ids,
- 'parent_id': False,
- 'vote_nb': len(message['vote_user_ids']),
- 'has_voted': has_voted,
- 'is_private': is_private,
- 'is_favorite': is_favorite,
- 'to_read': message['to_read'],
- }
+ def _message_read_dict(self, cr, uid, message, parent_id=False, context=None):
+ """ Return a dict representation of the message. This representation is
+ used in the JS client code, to display the messages. Partners and
+ attachments related stuff will be done in post-processing in batch.
- def _message_read_add_expandables(self, cr, uid, message_list, read_messages,
- thread_level=0, message_loaded_ids=[], domain=[], parent_id=False, context=None, limit=None):
+ :param dict message: mail.message browse record
+ """
+ # private message: no model, no res_id
+ is_private = False
+ if not message.model or not message.res_id:
+ is_private = True
+ # votes and favorites: res.users ids, no prefetching should be done
+ vote_nb = len(message.vote_user_ids)
+ has_voted = uid in [user.id for user in message.vote_user_ids]
+ is_favorite = uid in [user.id for user in message.favorite_user_ids]
+
+ return {'id': message.id,
+ 'type': message.type,
+ 'body': html_email_clean(message.body),
+ 'model': message.model,
+ 'res_id': message.res_id,
+ 'record_name': message.record_name,
+ 'subject': message.subject,
+ 'date': message.date,
+ 'to_read': message.to_read,
+ 'parent_id': parent_id,
+ 'is_private': is_private,
+ 'author_id': False,
+ 'is_author': False,
+ 'partner_ids': [],
+ 'vote_nb': vote_nb,
+ 'has_voted': has_voted,
+ 'is_favorite': is_favorite,
+ 'attachment_ids': [],
+ }
+
+ def _message_read_add_expandables(self, cr, uid, messages, message_tree, parent_tree,
+ message_unload_ids=[], thread_level=0, domain=[], parent_id=False, context=None):
""" Create expandables for message_read, to load new messages.
1. get the expandable for new threads
if display is flat (thread_level == 0):
@@ -275,96 +315,82 @@ class mail_message(osv.Model):
for each hole in the child list based on message displayed,
create an expandable
- :param list message_list:list of message structure for the Chatter
+ :param list messages: list of message structure for the Chatter
widget to which expandables are added
- :param dict read_messages: dict [id]: read result of the messages to
- easily have access to their values, given their ID
+ :param dict message_tree: dict [id]: browse record of this message
+ :param dict parent_tree: dict [parent_id]: [child_ids]
+ :param list message_unload_ids: list of message_ids we do not want
+ to load
:return bool: True
"""
- def _get_expandable(domain, message_nb, parent_id, id, model):
+ def _get_expandable(domain, message_nb, parent_id, max_limit):
return {
'domain': domain,
'nb_messages': message_nb,
'type': 'expandable',
'parent_id': parent_id,
- 'id': id,
- # TDE note: why do we need model sometimes, and sometimes not ???
- 'model': model,
+ 'max_limit': max_limit,
}
- # all_not_loaded_ids = []
- id_list = sorted(read_messages.keys())
- if not id_list:
- return message_list
+ if not messages:
+ return True
+ message_ids = sorted(message_tree.keys())
# 1. get the expandable for new threads
if thread_level == 0:
- exp_domain = domain + [('id', '<', min(message_loaded_ids + id_list))]
+ exp_domain = domain + [('id', '<', min(message_unload_ids + message_ids))]
else:
- exp_domain = domain + ['!', ('id', 'child_of', message_loaded_ids + id_list)]
+ exp_domain = domain + ['!', ('id', 'child_of', message_unload_ids + parent_tree.keys())]
ids = self.search(cr, uid, exp_domain, context=context, limit=1)
if ids:
- message_list.append(_get_expandable(exp_domain, -1, parent_id, -1, None))
+ # inside a thread: prepend
+ if parent_id:
+ messages.insert(0, _get_expandable(exp_domain, -1, parent_id, True))
+ # new threads: append
+ else:
+ messages.append(_get_expandable(exp_domain, -1, parent_id, True))
# 2. get the expandables for new messages inside threads if display is not flat
if thread_level == 0:
return True
- for message_id in id_list:
- message = read_messages[message_id]
+ for message_id in message_ids:
+ message = message_tree[message_id]
- # message is not a thread header (has a parent_id)
- # TDE note: parent_id is false is there is a parent we can not see -> ok
- if message.get('parent_id'):
+ # generate only for thread header messages (TDE note: parent_id may be False is uid cannot see parent_id, seems ok)
+ if message.parent_id:
continue
- # TDE note: check search is correctly implemented in mail.message
- not_loaded_ids = self.search(cr, uid, [
- ('id', 'child_of', message['id']),
- ('id', 'not in', message_loaded_ids),
- ], context=context, limit=self._message_read_more_limit)
- if not not_loaded_ids:
+ # check there are message for expandable
+ child_ids = set([child.id for child in message.child_ids]) - set(message_unload_ids)
+ child_ids = sorted(list(child_ids), reverse=True)
+ if not child_ids:
continue
- # all_not_loaded_ids += not_loaded_ids
- # group childs not read
- id_min, id_max, nb = max(not_loaded_ids), 0, 0
- for not_loaded_id in not_loaded_ids:
- if not read_messages.get(not_loaded_id):
+ # make groups of unread messages
+ id_min, id_max, nb = max(child_ids), 0, 0
+ for child_id in child_ids:
+ if not child_id in message_ids:
nb += 1
- if id_min > not_loaded_id:
- id_min = not_loaded_id
- if id_max < not_loaded_id:
- id_max = not_loaded_id
+ if id_min > child_id:
+ id_min = child_id
+ if id_max < child_id:
+ id_max = child_id
elif nb > 0:
exp_domain = [('id', '>=', id_min), ('id', '<=', id_max), ('id', 'child_of', message_id)]
- message_list.append(_get_expandable(exp_domain, nb, message_id, id_min, message.get('model')))
- id_min, id_max, nb = max(not_loaded_ids), 0, 0
+ messages.append(_get_expandable(exp_domain, nb, message_id, False))
+ id_min, id_max, nb = max(child_ids), 0, 0
else:
- id_min, id_max, nb = max(not_loaded_ids), 0, 0
+ id_min, id_max, nb = max(child_ids), 0, 0
if nb > 0:
exp_domain = [('id', '>=', id_min), ('id', '<=', id_max), ('id', 'child_of', message_id)]
- message_list.append(_get_expandable(exp_domain, nb, message_id, id_min, message.get('model')))
-
- # message_loaded_ids = list(set(message_loaded_ids + read_messages.keys() + all_not_loaded_ids))
+ idx = [msg.get('id') for msg in messages].index(message_id) + 1
+ # messages.append(_get_expandable(exp_domain, nb, message_id, id_min))
+ messages.insert(idx, _get_expandable(exp_domain, nb, message_id, False))
return True
- def _get_parent(self, cr, uid, message, context=None):
- """ Tools method that tries to get the parent of a mail.message. If
- no parent, or if uid has no access right on the parent, False
- is returned.
-
- :param dict message: read result of a mail.message
- """
- if not message['parent_id']:
- return False
- parent_id = message['parent_id'][0]
- try:
- return self.read(cr, uid, parent_id, self._message_read_fields, context=context)
- except (orm.except_orm, osv.except_osv):
- return False
-
- def message_read(self, cr, uid, ids=None, domain=None, message_unload_ids=None, thread_level=0, context=None, parent_id=False, limit=None):
+ def message_read(self, cr, uid, ids=None, domain=None, message_unload_ids=None,
+ thread_level=0, context=None, parent_id=False, limit=None):
""" Read messages from mail.message, and get back a list of structured
messages to be displayed as discussion threads. If IDs is set,
fetch these records. Otherwise use the domain to fetch messages.
@@ -388,46 +414,56 @@ class mail_message(osv.Model):
ancestors and expandables
:return list: list of message structure for the Chatter widget
"""
- # print 'message_read', ids, domain, message_unload_ids, thread_level, context, parent_id, limit
assert thread_level in [0, 1], 'message_read() thread_level should be 0 (flat) or 1 (1 level of thread); given %s.' % thread_level
domain = domain if domain is not None else []
message_unload_ids = message_unload_ids if message_unload_ids is not None else []
if message_unload_ids:
domain += [('id', 'not in', message_unload_ids)]
limit = limit or self._message_read_limit
- read_messages = {}
+ message_tree = {}
message_list = []
+ parent_tree = {}
# no specific IDS given: fetch messages according to the domain, add their parents if uid has access to
if ids is None:
ids = self.search(cr, uid, domain, context=context, limit=limit)
- for message in self.read(cr, uid, ids, self._message_read_fields, context=context):
- message_id = message['id']
- # if not in tree and not in message_loaded list
- if not message_id in read_messages and not message_id in message_unload_ids:
- read_messages[message_id] = message
- message_list.append(self._message_get_dict(cr, uid, message, context=context))
+ # fetch parent if threaded, sort messages
+ for message in self.browse(cr, uid, ids, context=context):
+ message_id = message.id
+ if message_id in message_tree:
+ continue
+ message_tree[message_id] = message
- # get the older ancestor the user can read, update its ancestor field
- if not thread_level:
- message_list[-1]['parent_id'] = parent_id
- continue
- parent = self._get_parent(cr, uid, message, context=context)
- while parent and parent.get('id') != parent_id:
- message_list[-1]['parent_id'] = parent.get('id')
- message = parent
- parent = self._get_parent(cr, uid, message, context=context)
- # if in thread: add its ancestor to the list of messages
- if not message['id'] in read_messages and not message['id'] in message_unload_ids:
- read_messages[message['id']] = message
- message_list.append(self._message_get_dict(cr, uid, message, context=context))
+ # find parent_id
+ if thread_level == 0:
+ tree_parent_id = parent_id
+ else:
+ tree_parent_id = message_id
+ parent = message
+ while parent.parent_id and parent.parent_id.id != parent_id:
+ parent = parent.parent_id
+ tree_parent_id = parent.id
+ if not parent.id in message_tree:
+ message_tree[parent.id] = parent
+ # newest messages first
+ parent_tree.setdefault(tree_parent_id, [])
+ if tree_parent_id != message_id:
+ parent_tree[tree_parent_id].append(self._message_read_dict(cr, uid, message_tree[message_id], parent_id=tree_parent_id, context=context))
+
+ if thread_level:
+ for key, message_id_list in parent_tree.iteritems():
+ message_id_list.sort(key=lambda item: item['id'])
+ message_id_list.insert(0, self._message_read_dict(cr, uid, message_tree[key], context=context))
+
+ parent_list = parent_tree.items()
+ parent_list = sorted(parent_list, key=lambda item: max([msg.get('id') for msg in item[1]]) if item[1] else item[0], reverse=True)
+ message_list = [message for (key, msg_list) in parent_list for message in msg_list]
# get the child expandable messages for the tree
- message_list = sorted(message_list, key=lambda k: k['id'])
- self._message_read_add_expandables(cr, uid, message_list, read_messages, thread_level=thread_level,
- message_loaded_ids=message_unload_ids, domain=domain, parent_id=parent_id, context=context, limit=limit)
-
+ self._message_read_dict_postprocess(cr, uid, message_list, message_tree, context=context)
+ self._message_read_add_expandables(cr, uid, message_list, message_tree, parent_tree,
+ thread_level=thread_level, message_unload_ids=message_unload_ids, domain=domain, parent_id=parent_id, context=context)
return message_list
# TDE Note: do we need this ?
@@ -461,7 +497,6 @@ class mail_message(osv.Model):
- otherwise: remove the id
"""
# Rules do not apply to administrator
- # print '_search', uid, args
if uid == SUPERUSER_ID:
return super(mail_message, self)._search(cr, uid, args, offset=offset, limit=limit, order=order,
context=context, count=count, access_rights_uid=access_rights_uid)
@@ -599,6 +634,8 @@ class mail_message(osv.Model):
def create(self, cr, uid, values, context=None):
if not values.get('message_id') and values.get('res_id') and values.get('model'):
values['message_id'] = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values)
+ elif not values.get('message_id'):
+ values['message_id'] = tools.generate_tracking_message_id('private')
newid = super(mail_message, self).create(cr, uid, values, context)
self._notify(cr, SUPERUSER_ID, newid, context=context)
return newid
@@ -729,7 +766,7 @@ class mail_message(osv.Model):
], context=context)
fol_objs = fol_obj.read(cr, uid, fol_ids, ['partner_id'], context=context)
partners_to_notify |= set(fol['partner_id'][0] for fol in fol_objs)
- # when writing to a wall
+ # remove me from notified partners, unless the message is written on my own wall
if message.get('author_id') and message.get('model') == "res.partner" and message.get('res_id') == message.get('author_id')[0]:
partners_to_notify |= set([message.get('author_id')[0]])
elif message.get('author_id'):
diff --git a/addons/mail/mail_message_subtype.py b/addons/mail/mail_message_subtype.py
index 32b20d9c11e..e37e20259f8 100644
--- a/addons/mail/mail_message_subtype.py
+++ b/addons/mail/mail_message_subtype.py
@@ -31,14 +31,15 @@ class mail_message_subtype(osv.osv):
_description = 'mail_message_subtype'
_columns = {
'name': fields.char('Message Type', required=True, translate=True,
- help='Message subtype, gives a more precise type on the message, '\
+ help='Message subtype gives a more precise type on the message, '\
'especially for system notifications. For example, it can be '\
'a notification related to a new record (New), or to a stage '\
'change in a process (Stage change). Message subtypes allow to '\
'precisely tune the notifications the user want to receive on its wall.'),
- 'res_model': fields.char('Model', help="link subtype to model"),
+ 'res_model': fields.char('Model',
+ help="Related model of the subtype. If False, this subtype exists for all models."),
'default': fields.boolean('Default',
- help="When subscribing to the document, this subtype will be checked by default."),
+ help="Checked by default when subscribing."),
}
_defaults = {
'default': True,
diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml
index 93b35797fd5..7d2e9483773 100644
--- a/addons/mail/mail_message_view.xml
+++ b/addons/mail/mail_message_view.xml
@@ -59,21 +59,26 @@
+
+
-
+
+
@@ -84,7 +89,6 @@
formtree,form
- {'search_default_to_read_message':True}
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index e986f12b822..ee1a015396b 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -74,17 +74,17 @@ class mail_thread(osv.AbstractModel):
- message_unread: has uid unread message for the document
- message_summary: html snippet summarizing the Chatter for kanban views """
res = dict((id, dict(message_unread=False, message_summary='')) for id in ids)
+ user_pid = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0]
- # search for unread messages, by reading directly mail.notification, as SUPERUSER
- notif_obj = self.pool.get('mail.notification')
- notif_ids = notif_obj.search(cr, SUPERUSER_ID, [
- ('partner_id.user_ids', 'in', [uid]),
- ('message_id.res_id', 'in', ids),
- ('message_id.model', '=', self._name),
- ('read', '=', False)
- ], context=context)
- for notif in notif_obj.browse(cr, SUPERUSER_ID, notif_ids, context=context):
- res[notif.message_id.res_id]['message_unread'] = True
+ # search for unread messages, directly in SQL to improve performances
+ cr.execute(""" SELECT m.res_id FROM mail_message m
+ RIGHT JOIN mail_notification n
+ ON (n.message_id = m.id AND n.partner_id = %s AND n.read = False)
+ WHERE m.model = %s AND m.res_id in %s""",
+ (user_pid, self._name, tuple(ids),))
+ msg_ids = [result[0] for result in cr.fetchall()]
+ for msg_id in msg_ids:
+ res[msg_id]['message_unread'] = True
for thread in self.browse(cr, uid, ids, context=context):
cls = res[thread.id]['message_unread'] and ' class="oe_kanban_mail_new"' or ''
@@ -156,7 +156,7 @@ class mail_thread(osv.AbstractModel):
old = set(fol.partner_id.id for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids))
new = set(old)
- for command in value:
+ for command in value or []:
if isinstance(command, (int, long)):
new.add(command)
elif command[0] == 0:
@@ -319,10 +319,12 @@ class mail_thread(osv.AbstractModel):
"""
assert isinstance(message, Message), 'message must be an email.message.Message at this point'
message_id = message.get('Message-Id')
+ 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
- references = decode_header(message, 'References') or decode_header(message, 'In-Reply-To')
- ref_match = references and tools.reference_re.search(references)
+ thread_references = references or in_reply_to
+ ref_match = thread_references and tools.reference_re.search(thread_references)
if ref_match:
thread_id = int(ref_match.group(1))
model = ref_match.group(2) or model
@@ -333,6 +335,14 @@ class mail_thread(osv.AbstractModel):
message_id, model, thread_id, custom_values, uid)
return [(model, thread_id, custom_values, uid)]
+ # Verify this is a reply to a private message
+ message_ids = self.pool.get('mail.message').search(cr, uid, [('message_id', '=', in_reply_to)], limit=1, context=context)
+ if message_ids:
+ message = self.pool.get('mail.message').browse(cr, uid, message_ids[0], context=context)
+ _logger.debug('Routing mail with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s',
+ message_id, message.id, custom_values, uid)
+ return [(False, 0, custom_values, uid)]
+
# 2. Look for a matching mail.alias entry
# Delivered-To is a safe bet in most modern MTAs, but we have to fallback on To + Cc values
# for all the odd MTAs out there, as there is no standard header for the envelope's `rcpt_to` value.
@@ -376,14 +386,19 @@ class mail_thread(osv.AbstractModel):
def message_process(self, cr, uid, model, message, custom_values=None,
save_original=False, strip_attachments=False,
thread_id=None, context=None):
- """Process an incoming RFC2822 email message, relying on
- ``mail.message.parse()`` for the parsing operation,
- and ``message_route()`` to figure out the target model.
+ """ Process an incoming RFC2822 email message, relying on
+ ``mail.message.parse()`` for the parsing operation,
+ and ``message_route()`` to figure out the target model.
- Once the target model is known, its ``message_new`` method
- is called with the new message (if the thread record did not exist)
+ Once the target model is known, its ``message_new`` method
+ is called with the new message (if the thread record did not exist)
or its ``message_update`` method (if it did).
+ There is a special case where the target model is False: a reply
+ to a private message. In this case, we skip the message_new /
+ message_update step, to just post a new message using mail_thread
+ message_post.
+
:param string model: the fallback model to use if the message
does not match any of the currently configured mail aliases
(may be None if a matching alias is supposed to be present)
@@ -425,15 +440,19 @@ class mail_thread(osv.AbstractModel):
for model, thread_id, custom_values, user_id in routes:
if self._name != model:
context.update({'thread_model': model})
- model_pool = self.pool.get(model)
- assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \
- "Undeliverable mail with Message-Id %s, model %s does not accept incoming emails" % \
- (msg['message_id'], model)
- if thread_id and hasattr(model_pool, 'message_update'):
- model_pool.message_update(cr, user_id, [thread_id], msg, context=context)
+ if model:
+ model_pool = self.pool.get(model)
+ assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \
+ "Undeliverable mail with Message-Id %s, model %s does not accept incoming emails" % \
+ (msg['message_id'], model)
+ if thread_id and hasattr(model_pool, 'message_update'):
+ model_pool.message_update(cr, user_id, [thread_id], msg, context=context)
+ else:
+ thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=context)
else:
- thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=context)
- model_pool.message_post(cr, uid, [thread_id], context=context, **msg)
+ assert thread_id == 0, "Posting a message without model should be with a null res_id, to create a private message."
+ model_pool = self.pool.get('mail.thread')
+ model_pool.message_post_user_api(cr, uid, [thread_id], context=context, content_subtype='html', **msg)
return thread_id
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
@@ -501,7 +520,7 @@ class mail_thread(osv.AbstractModel):
body = tools.ustr(body, encoding, errors='replace')
if message.get_content_type() == 'text/plain':
# text/plain ->
- body = tools.append_content_to_html(u'', body)
+ body = tools.append_content_to_html(u'', body, preserve=True)
else:
alternative = (message.get_content_type() == 'multipart/alternative')
for part in message.walk():
@@ -516,7 +535,7 @@ class mail_thread(osv.AbstractModel):
# 2) text/plain ->
if part.get_content_type() == 'text/plain' and (not alternative or not body):
body = tools.append_content_to_html(body, tools.ustr(part.get_payload(decode=True),
- encoding, errors='replace'))
+ encoding, errors='replace'), preserve=True)
# 3) text/html -> raw
elif part.get_content_type() == 'text/html':
html = tools.ustr(part.get_payload(decode=True), encoding, errors='replace')
@@ -556,7 +575,6 @@ class mail_thread(osv.AbstractModel):
"""
msg_dict = {
'type': 'email',
- 'subtype': 'mail.mt_comment',
'author_id': False,
}
if not isinstance(message, Message):
@@ -588,7 +606,7 @@ class mail_thread(osv.AbstractModel):
else:
msg_dict['email_from'] = message.get('from')
partner_ids = self._message_find_partners(cr, uid, message, ['From', 'To', 'Cc'], context=context)
- msg_dict['partner_ids'] = partner_ids
+ msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids]
if 'Date' in message:
date_hdr = decode(message.get('Date'))
@@ -629,7 +647,8 @@ class mail_thread(osv.AbstractModel):
mail.message ID. Extra keyword arguments will be used as default
column values for the new mail.message record.
Auto link messages for same id and object
- :param int thread_id: thread ID to post into, or list with one ID
+ :param int thread_id: thread ID to post into, or list with one ID;
+ if False/0, mail.message model will also be set as False
:param str body: body of the message, usually raw HTML that will
be sanitized
:param str subject: optional subject
@@ -639,10 +658,13 @@ class mail_thread(osv.AbstractModel):
``(name,content)``, where content is NOT base64 encoded
:return: ID of newly created mail.message
"""
- context = context or {}
- attachments = attachments or []
+ if context is None:
+ context = {}
+ if attachments is None:
+ attachments = {}
+
assert (not thread_id) or isinstance(thread_id, (int, long)) or \
- (isinstance(thread_id, (list, tuple)) and len(thread_id) == 1), "Invalid thread_id"
+ (isinstance(thread_id, (list, tuple)) and len(thread_id) == 1), "Invalid thread_id; should be 0, False, an ID or a list with one ID"
if isinstance(thread_id, (list, tuple)):
thread_id = thread_id and thread_id[0]
mail_message = self.pool.get('mail.message')
@@ -682,7 +704,6 @@ class mail_thread(osv.AbstractModel):
# avoid loops when finding ancestors
processed_list = []
if message_ids:
- _counter, _counter_max = 0, 200
message = mail_message.browse(cr, SUPERUSER_ID, message_ids[0], context=context)
while (message.parent_id and message.parent_id.id not in processed_list):
processed_list.append(message.parent_id.id)
@@ -707,18 +728,45 @@ class mail_thread(osv.AbstractModel):
return mail_message.create(cr, uid, values, context=context)
- def message_post_api(self, cr, uid, thread_id, body='', subject=False, parent_id=False, attachment_ids=None, context=None):
- """ Wrapper on message_post, used only in Chatter (JS). The purpose is
- to handle attachments.
- # TDE FIXME: body is plaintext: convert it into html
+ def message_post_user_api(self, cr, uid, thread_id, body='', subject=False, parent_id=False,
+ attachment_ids=None, context=None, content_subtype='plaintext', **kwargs):
+ """ Wrapper on message_post, used for user input :
+ - mail gateway
+ - quick reply in Chatter (refer to mail.js), not
+ the mail.compose.message wizard
+ The purpose is to perform some pre- and post-processing:
+ - if body is plaintext: convert it into html
+ - if parent_id: handle reply to a previous message by adding the
+ parent partners to the message
+ - type and subtype: comment and mail.mt_comment by default
+ - attachment_ids: supposed not attached to any document; attach them
+ to the related document. Should only be set by Chatter.
"""
- new_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type='comment',
- subtype='mail.mt_comment', parent_id=parent_id, context=context)
+ ir_attachment = self.pool.get('ir.attachment')
+ mail_message = self.pool.get('mail.message')
- # HACK FIXME: Chatter: attachments linked to the document (not done JS-side), load the message
+ # 1. Pre-processing: body, partner_ids, type and subtype
+ if content_subtype == 'plaintext':
+ body = tools.plaintext2html(body)
+
+ partner_ids = kwargs.pop('partner_ids', [])
+ if parent_id:
+ parent_message = self.pool.get('mail.message').browse(cr, uid, parent_id, context=context)
+ partner_ids += [(4, partner.id) for partner in parent_message.partner_ids]
+ # TDE FIXME HACK: mail.thread -> private message
+ if self._name == 'mail.thread' and parent_message.author_id.id:
+ partner_ids.append((4, parent_message.author_id.id))
+
+ message_type = kwargs.pop('type', 'comment')
+ message_subtype = kwargs.pop('subtype', 'mail.mt_comment')
+
+ # 2. Post message
+ new_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=message_type,
+ subtype=message_subtype, parent_id=parent_id, context=context, partner_ids=partner_ids, **kwargs)
+
+ # 3. Post-processing
+ # HACK TDE FIXME: Chatter: attachments linked to the document (not done JS-side), load the message
if attachment_ids:
- ir_attachment = self.pool.get('ir.attachment')
- mail_message = self.pool.get('mail.message')
filtered_attachment_ids = ir_attachment.search(cr, SUPERUSER_ID, [
('res_model', '=', 'mail.compose.message'),
('res_id', '=', 0),
diff --git a/addons/mail/mail_thread_view.xml b/addons/mail/mail_thread_view.xml
index 07b24725b05..3a37218c813 100644
--- a/addons/mail/mail_thread_view.xml
+++ b/addons/mail/mail_thread_view.xml
@@ -4,48 +4,126 @@
Inboxmail.wall
-
+ mail.message
+ {
+ 'default_model': 'res.users',
+ 'default_res_id': uid,
+ }
+
+
+
+ Good Job! Your inbox is empty.
+
+ Your inbox contains private messages or emails sent to you
+ as well as information related to documents or people you
+ follow.
+
\n')
_mail_bodyalt2 = 'Pigs rules\nAdmin'
_attachments = [('First', 'My first attachment'), ('Second', 'My second attachment')]
@@ -399,7 +367,7 @@ class test_mail(TestMailMockups):
# Test: sent_email: email send by server: correct subject, body, body_alternative
for sent_email in sent_emails:
self.assertEqual(sent_email['subject'], _subject, 'sent_email subject incorrect')
- self.assertEqual(sent_email['body'], _mail_body1 + '\n
Bert Tartopoils
\n', 'sent_email body incorrect')
+ self.assertEqual(sent_email['body'], _mail_body1 + '\nBert Tartopoils\n', 'sent_email body incorrect')
# the html2plaintext uses etree or beautiful soup, so the result may be slighly different
# depending if you have installed beautiful soup.
self.assertIn(sent_email['body_alternative'], _mail_bodyalt1 + '\nBert Tartopoils\n', 'sent_email body_alternative is incorrect')
@@ -495,7 +463,8 @@ class test_mail(TestMailMockups):
# 1. Comment group_pigs with body_text and subject
compose_id = mail_compose.create(cr, uid,
{'subject': _subject, 'body_text': _body_text, 'partner_ids': [(4, p_c_id), (4, p_d_id)]},
- {'default_composition_mode': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id})
+ {'default_composition_mode': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id,
+ 'default_content_subtype': 'plaintext'})
compose = mail_compose.browse(cr, uid, compose_id)
# Test: mail.compose.message: composition_mode, model, res_id
self.assertEqual(compose.composition_mode, 'comment', 'mail.compose.message incorrect composition_mode')
@@ -537,17 +506,15 @@ class test_mail(TestMailMockups):
self.assertEqual(compose.parent_id and compose.parent_id.id, message.id, 'mail.message parent_id incorrect')
# Test: mail.message: attachments
for attach in compose.attachment_ids:
- self.assertEqual(attach.res_model, 'mail.group', 'mail.message attachment res_model incorrect')
- self.assertEqual(attach.res_id, self.group_pigs_id, 'mail.message attachment res_id incorrect')
self.assertIn((attach.datas_fname, attach.datas.decode('base64')), _attachments_test, 'mail.message attachment name / data incorrect')
-
+
# ----------------------------------------
# CASE3: mass_mail on Pigs and Bird
# ----------------------------------------
# 1. mass_mail on pigs and bird
compose_id = mail_compose.create(cr, uid,
- {'subject': _subject, 'body': '${object.description}', 'content_subtype': 'html'},
+ {'subject': _subject, 'body': '${object.description}'},
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group', 'default_res_id': False,
'active_ids': [self.group_pigs_id, group_bird_id]})
compose = mail_compose.browse(cr, uid, compose_id)
@@ -576,7 +543,7 @@ class test_mail(TestMailMockups):
cr, uid, user_admin, group_pigs = self.cr, self.uid, self.user_admin, self.group_pigs
pigs_domain = [('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)]
- # Data: create a discussion in Pigs (2 messages, one with 2 and one with 3 answers)
+ # Data: create a discussion in Pigs (3 threads, with respectively 0, 4 and 4 answers)
msg_id0 = self.group_pigs.message_post(body='0', subtype='mt_comment')
msg_id1 = self.group_pigs.message_post(body='1', subtype='mt_comment')
msg_id2 = self.group_pigs.message_post(body='2', subtype='mt_comment')
@@ -588,7 +555,8 @@ class test_mail(TestMailMockups):
msg_id8 = self.group_pigs.message_post(body='2-1-1', subtype='mt_comment', parent_id=msg_id4)
msg_id9 = self.group_pigs.message_post(body='1-1-1', subtype='mt_comment', parent_id=msg_id3)
msg_id10 = self.group_pigs.message_post(body='2-1-1', subtype='mt_comment', parent_id=msg_id4)
- msg_ids = [msg_id0, msg_id1, msg_id2, msg_id3, msg_id4, msg_id5, msg_id6, msg_id7, msg_id8, msg_id9, msg_id10]
+ msg_ids = [msg_id10, msg_id9, msg_id8, msg_id7, msg_id6, msg_id5, msg_id4, msg_id3, msg_id2, msg_id1, msg_id0]
+ ordered_msg_ids = [msg_id2, msg_id4, msg_id6, msg_id8, msg_id10, msg_id1, msg_id3, msg_id5, msg_id7, msg_id9, msg_id0]
# Test: read some specific ids
read_msg_list = self.mail_message.message_read(cr, uid, ids=msg_ids[2:4], domain=[('body', 'like', 'dummy')])
@@ -601,7 +569,8 @@ class test_mail(TestMailMockups):
self.assertEqual(msg_ids, read_msg_ids, 'message_read flat with domain on Pigs should equal all messages of Pigs')
read_msg_list = self.mail_message.message_read(cr, uid, domain=pigs_domain, limit=200, thread_level=1)
read_msg_ids = [msg.get('id') for msg in read_msg_list]
- self.assertEqual(msg_ids, read_msg_ids, 'message_read threaded with domain on Pigs should equal all messages of Pigs')
+ self.assertEqual(ordered_msg_ids, read_msg_ids,
+ 'message_read threaded with domain on Pigs should equal all messages of Pigs, and sort them with newer thread first, last message last in thread')
# ----------------------------------------
# CASE1: message_read with domain, threaded
@@ -611,6 +580,8 @@ class test_mail(TestMailMockups):
# Do: read last message, threaded
read_msg_list = self.mail_message.message_read(cr, uid, domain=pigs_domain, limit=1, thread_level=1)
read_msg_ids = [msg.get('id') for msg in read_msg_list if msg.get('type') != 'expandable']
+ # TDE TODO: test expandables order
+ type_list = map(lambda item: item.get('type'), read_msg_list)
# Test: structure content, ancestor is added to the read messages, ordered by id, ancestor is set, 2 expandables
self.assertEqual(len(read_msg_list), 4, 'message_read on last Pigs message should return 2 messages and 2 expandables')
self.assertEqual(set([msg_id2, msg_id10]), set(read_msg_ids), 'message_read on the last Pigs message should also get its parent')
@@ -618,7 +589,7 @@ class test_mail(TestMailMockups):
# Data: get expandables
new_threads_exp, new_msg_exp = None, None
for msg in read_msg_list:
- if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('id') == -1:
+ if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('max_limit'):
new_threads_exp = msg
elif msg.get('type') == 'expandable':
new_msg_exp = msg
@@ -630,12 +601,20 @@ class test_mail(TestMailMockups):
self.assertIn(('id', 'child_of', msg_id2), domain, 'new messages expandable domain should contain a child_of condition')
self.assertIn(('id', '>=', msg_id4), domain, 'new messages expandable domain should contain an id greater than condition')
self.assertIn(('id', '<=', msg_id8), domain, 'new messages expandable domain should contain an id less than condition')
- self.assertEqual(new_msg_exp.get('parent_id'), msg_id2, 'new messages expandable should have ancestor_id set to the thread header')
- # Do: message_read with domain, thread_level=0, parent_id=msg_id2 (should be imposed by JS)
- read_msg_list = self.mail_message.message_read(cr, uid, domain=domain, limit=200, thread_level=0, parent_id=msg_id2)
+ self.assertEqual(new_msg_exp.get('parent_id'), msg_id2, 'new messages expandable should have parent_id set to the thread header')
+ # Do: message_read with domain, thread_level=0, parent_id=msg_id2 (should be imposed by JS), 2 messages
+ read_msg_list = self.mail_message.message_read(cr, uid, domain=domain, limit=2, thread_level=0, parent_id=msg_id2)
read_msg_ids = [msg.get('id') for msg in read_msg_list if msg.get('type') != 'expandable']
- # Test: other message in thread have been fetch
- self.assertEqual(set([msg_id4, msg_id6, msg_id8]), set(read_msg_ids), 'message_read in Pigs thread should return all the previous messages')
+ new_msg_exp = [msg for msg in read_msg_list if msg.get('type') == 'expandable'][0]
+ # Test: structure content, 2 messages and 1 thread expandable
+ self.assertEqual(len(read_msg_list), 3, 'message_read in Pigs thread should return 2 messages and 1 expandables')
+ self.assertEqual(set([msg_id6, msg_id8]), set(read_msg_ids), 'message_read in Pigs thread should return 2 more previous messages in thread')
+ # Do: read the last message
+ read_msg_list = self.mail_message.message_read(cr, uid, domain=new_msg_exp.get('domain'), limit=2, thread_level=0, parent_id=msg_id2)
+ read_msg_ids = [msg.get('id') for msg in read_msg_list if msg.get('type') != 'expandable']
+ # Test: structure content, 1 message
+ self.assertEqual(len(read_msg_list), 1, 'message_read in Pigs thread should return 1 message')
+ self.assertEqual(set([msg_id4]), set(read_msg_ids), 'message_read in Pigs thread should return the last message in thread')
# Do: fetch a new thread, domain from expandable
self.assertIsNotNone(new_threads_exp, 'message_read on last Pigs message should have returned a new threads expandable')
@@ -643,7 +622,7 @@ class test_mail(TestMailMockups):
# Test: expandable, conditions in domain
for condition in pigs_domain:
self.assertIn(condition, domain, 'new threads expandable domain should contain the message_read domain parameter')
- self.assertFalse(new_threads_exp.get('parent_id'), 'new threads expandable should not have an ancestor_id')
+ self.assertFalse(new_threads_exp.get('parent_id'), 'new threads expandable should not have an parent_id')
# Do: message_read with domain, thread_level=1 (should be imposed by JS)
read_msg_list = self.mail_message.message_read(cr, uid, domain=domain, limit=1, thread_level=1)
read_msg_ids = [msg.get('id') for msg in read_msg_list if msg.get('type') != 'expandable']
@@ -654,7 +633,7 @@ class test_mail(TestMailMockups):
# Data: get expandables
new_threads_exp, new_msg_exp = None, None
for msg in read_msg_list:
- if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('id') == -1:
+ if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('max_limit'):
new_threads_exp = msg
elif msg.get('type') == 'expandable':
new_msg_exp = msg
@@ -701,7 +680,7 @@ class test_mail(TestMailMockups):
# Data: get expandables
new_threads_exp, new_msg_exp = None, None
for msg in read_msg_list:
- if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('id') == -1:
+ if msg.get('type') == 'expandable' and msg.get('nb_messages') == -1 and msg.get('max_limit'):
new_threads_exp = msg
# Do: fetch new messages, domain from expandable
@@ -715,7 +694,7 @@ class test_mail(TestMailMockups):
read_msg_ids = [msg.get('id') for msg in read_msg_list if msg.get('type') != 'expandable']
# Test: structure content, ancestor is added to the read messages, ordered by id, ancestor is set, 2 expandables
self.assertEqual(len(read_msg_list), 9, 'message_read on Pigs should return 9 messages and 0 expandable')
- self.assertEqual([msg_id0, msg_id1, msg_id2, msg_id3, msg_id4, msg_id5, msg_id6, msg_id7, msg_id8], read_msg_ids,
+ self.assertEqual([msg_id8, msg_id7, msg_id6, msg_id5, msg_id4, msg_id3, msg_id2, msg_id1, msg_id0], read_msg_ids,
'message_read, More on flat, should return all remaning messages')
def test_40_needaction(self):
diff --git a/addons/mail/tests/test_mail_access_rights.py b/addons/mail/tests/test_mail_access_rights.py
index 7b90e07b9b5..7594de87faf 100644
--- a/addons/mail/tests/test_mail_access_rights.py
+++ b/addons/mail/tests/test_mail_access_rights.py
@@ -19,11 +19,12 @@
#
##############################################################################
-from openerp.addons.mail.tests import test_mail
-from osv.orm import except_orm
+from openerp.addons.mail.tests import test_mail_mockup
+from openerp.osv.orm import except_orm
+from openerp.tools.misc import mute_logger
-class test_mail_access_rights(test_mail.TestMailMockups):
+class test_mail_access_rights(test_mail_mockup.TestMailMockups):
def setUp(self):
super(test_mail_access_rights, self).setUp()
@@ -84,6 +85,7 @@ class test_mail_access_rights(test_mail.TestMailMockups):
msg_ids = self.mail_message.search(cr, uid, [('subject', 'like', '_Test')])
self.assertEqual(set([msg_id1, msg_id2, msg_id3, msg_id4, msg_id5, msg_id6, msg_id7, msg_id8]), set(msg_ids), 'mail_message search failed')
+ @mute_logger('openerp.osv.orm')
def test_05_mail_message_read_access_rights(self):
""" Test basic mail_message read access rights. """
cr, uid = self.cr, self.uid
@@ -131,6 +133,8 @@ class test_mail_access_rights(test_mail.TestMailMockups):
self.assertRaises(except_orm, self.mail_message.read,
cr, user_bert_id, message_id)
+ @mute_logger('openerp.addons.base.ir.ir_model')
+ @mute_logger('openerp.osv.orm')
def test_10_mail_flow_access_rights(self):
""" Test a Chatter-looks alike flow. """
cr, uid = self.cr, self.uid
diff --git a/addons/mail/tests/test_mail_mockup.py b/addons/mail/tests/test_mail_mockup.py
new file mode 100644
index 00000000000..cba04a0c6b3
--- /dev/null
+++ b/addons/mail/tests/test_mail_mockup.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Business Applications
+# 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
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.tests import common
+
+
+class TestMailMockups(common.TransactionCase):
+
+ def _mock_smtp_gateway(self, *args, **kwargs):
+ return True
+
+ def _init_mock_build_email(self):
+ self._build_email_args_list = []
+ self._build_email_kwargs_list = []
+
+ def _mock_build_email(self, *args, **kwargs):
+ """ Mock build_email to be able to test its values. Store them into
+ some internal variable for latter processing. """
+ self._build_email_args_list.append(args)
+ self._build_email_kwargs_list.append(kwargs)
+ return self._build_email(*args, **kwargs)
+
+ def setUp(self):
+ super(TestMailMockups, self).setUp()
+ # Install mock SMTP gateway
+ self._init_mock_build_email()
+ self._build_email = self.registry('ir.mail_server').build_email
+ self.registry('ir.mail_server').build_email = self._mock_build_email
+ self._send_email = self.registry('ir.mail_server').send_email
+ self.registry('ir.mail_server').send_email = self._mock_smtp_gateway
+
+ def tearDown(self):
+ # Remove mocks
+ self.registry('ir.mail_server').build_email = self._build_email
+ self.registry('ir.mail_server').send_email = self._send_email
+ super(TestMailMockups, self).tearDown()
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 1bcbb0c2efc..c409d4ab076 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -102,9 +102,9 @@ class mail_compose_message(osv.TransientModel):
'partner_ids': fields.many2many('res.partner',
'mail_compose_message_res_partner_rel',
'wizard_id', 'partner_id', 'Additional contacts'),
- 'attachment_ids': fields.one2many('ir.attachment', 'res_id',
- domain=lambda self: [('res_model', '=', self._name)],
- string='Attachments'),
+ 'attachment_ids': fields.many2many('ir.attachment',
+ 'mail_compose_message_ir_attachments_rel',
+ 'wizard_id', 'attachment_id', 'Attachments'),
'filter_id': fields.many2one('ir.filters', 'Filters'),
'body_text': fields.text('Plain-text Contents'),
'content_subtype': fields.char('Message content subtype', size=32, readonly=1,
@@ -114,7 +114,7 @@ class mail_compose_message(osv.TransientModel):
_defaults = {
'composition_mode': 'comment',
- 'content_subtype': lambda self, cr, uid, ctx={}: 'plain',
+ 'content_subtype': lambda self, cr, uid, ctx={}: 'html',
'body_text': lambda self, cr, uid, ctx={}: False,
'body': lambda self, cr, uid, ctx={}: '',
'subject': lambda self, cr, uid, ctx={}: False,
@@ -135,7 +135,12 @@ class mail_compose_message(osv.TransientModel):
related to.
:param int res_id: id of the document record this mail is related to
"""
- return {'model': model, 'res_id': res_id}
+ doc_name_get = self.pool.get(model).name_get(cr, uid, [res_id], context=context)
+ if doc_name_get:
+ record_name = doc_name_get[0][1]
+ else:
+ record_name = False
+ return {'model': model, 'res_id': res_id, 'record_name': record_name}
def get_message_data(self, cr, uid, message_id, context=None):
""" Returns a defaults-like dict with initial values for the composition
@@ -161,6 +166,7 @@ class mail_compose_message(osv.TransientModel):
# update the result
result = {
+ 'record_name': message_data.record_name,
'model': message_data.model,
'res_id': message_data.res_id,
'parent_id': message_data.id,
@@ -186,17 +192,6 @@ class mail_compose_message(osv.TransientModel):
"""
return {'value': {'content_subtype': value}}
- def onchange_partner_ids(self, cr, uid, ids, value, context=None):
- """ The basic purpose of this method is to check that destination partners
- effectively have email addresses. Otherwise a warning is thrown.
- :param value: value format: [[6, 0, [3, 4]]]
- """
- res = {'value': {}}
- if not value or not value[0] or not value[0][0] == 6:
- return
- res.update(self.check_partners_email(cr, uid, value[0][2], context=context))
- return res
-
def dummy(self, cr, uid, ids, context=None):
""" TDE: defined to have buttons that do basically nothing. It is
currently impossible to have buttons that do nothing special
diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml
index 1f00ed419a2..01ceb770f49 100644
--- a/addons/mail/wizard/mail_compose_message_view.xml
+++ b/addons/mail/wizard/mail_compose_message_view.xml
@@ -14,14 +14,22 @@
-
+
+
- Bills of materials components are components and sub-products
+ Bills of materials components are components and by-products
used to create master bills of materials. Use this menu to
search in which BoM a specific component is used.
-
+
diff --git a/addons/mrp/report/price.py b/addons/mrp/report/price.py
index 527505d8ea5..b1e04749ab2 100644
--- a/addons/mrp/report/price.py
+++ b/addons/mrp/report/price.py
@@ -111,7 +111,7 @@ class report_custom(report_rml):
595.27841.8855.00mm,58.00mm,29.00mm,29.00mm,29.00mm
- """ % (user_pool.browse(cr, uid, uid).company_id.name)
+ """ % to_xml(user_pool.browse(cr, uid, uid).company_id.name)
config_stop = """
Generated by OpenERP
diff --git a/addons/mrp/res_config.py b/addons/mrp/res_config.py
index 2cb9fd77f80..ec3deb524a3 100644
--- a/addons/mrp/res_config.py
+++ b/addons/mrp/res_config.py
@@ -28,10 +28,6 @@ class mrp_config_settings(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
- 'module_stock_planning': fields.boolean('Manage master production shedule',
- help ="""This allows to create a manual procurement plan apart of the normal MRP scheduling,
- which works automatically based on minimum stock rules.
- This installs the module stock_planning."""),
'module_mrp_repair': fields.boolean("Manage repairs of products ",
help="""Allows to manage all product repairs.
* Add/remove products in the reparation
@@ -44,11 +40,11 @@ class mrp_config_settings(osv.osv_memory):
'module_mrp_operations': fields.boolean("Allow detailed planning of work order",
help="""This allows to add state, date_start,date_stop in production order operation lines (in the "Work Centers" tab).
This installs the module mrp_operations."""),
- 'module_mrp_subproduct': fields.boolean("Produce several products from one manufacturing order",
- help="""You can configure sub-products in the bill of material.
+ 'module_mrp_byproduct': fields.boolean("Produce several products from one manufacturing order",
+ help="""You can configure by-products in the bill of material.
Without this module: A + B + C -> D.
With this module: A + B + C -> D + E.
- This installs the module mrp_subproduct."""),
+ This installs the module mrp_byproduct."""),
'module_mrp_jit': fields.boolean("Generate procurement in real time",
help="""This allows Just In Time computation of procurement orders.
All procurement orders will be processed immediately, which could in some
diff --git a/addons/mrp/res_config_view.xml b/addons/mrp/res_config_view.xml
index 92b8abc92d1..2c7047380a8 100644
--- a/addons/mrp/res_config_view.xml
+++ b/addons/mrp/res_config_view.xml
@@ -28,8 +28,8 @@
-
-
+
+
@@ -56,10 +56,6 @@
-
-
-
-
diff --git a/addons/mrp_byproduct/test/mrp_byproduct.yml b/addons/mrp_byproduct/test/mrp_byproduct.yml
index 99da9f22baf..2b5fc68406e 100644
--- a/addons/mrp_byproduct/test/mrp_byproduct.yml
+++ b/addons/mrp_byproduct/test/mrp_byproduct.yml
@@ -1,6 +1,6 @@
-
- In order to test mrp_subproduct with OpenERP, I add subproduct in bill of material.
- I make a production order, confirm it so stock moves for subproducts are generated.
+ In order to test mrp_byproduct with OpenERP, I add byproduct in bill of material.
+ I make a production order, confirm it so stock moves for byproducts are generated.
-
I add a sub product in Bill of material for product External Hard Disk.
-
@@ -37,7 +37,7 @@
!assert {model: mrp.production, id: mrp_production_mo0, severity: error, string: Production order should be in state confirmed}:
- state == 'confirmed'
-
- Now I check the stock moves for the subproduct I created in the bill of material.
+ Now I check the stock moves for the byproduct I created in the bill of material.
This move is created automatically when I confirmed the production order.
-
!python {model: stock.move}: |
diff --git a/addons/mrp_jit/i18n/sl.po b/addons/mrp_jit/i18n/sl.po
index dfdea2fbcd0..8527b96e315 100644
--- a/addons/mrp_jit/i18n/sl.po
+++ b/addons/mrp_jit/i18n/sl.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2010-11-27 05:28+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2012-11-18 21:54+0000\n"
+"Last-Translator: Dusan Laznik \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: 2012-10-30 05:22+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-19 04:37+0000\n"
+"X-Generator: Launchpad (build 16278)\n"
#. module: mrp_jit
#: model:ir.module.module,shortdesc:mrp_jit.module_meta_information
@@ -46,3 +46,24 @@ msgid ""
" \n"
" "
msgstr ""
+"\n"
+" This module allows Just In Time computation of procurement orders.\n"
+"\n"
+" If you install this module, you will not have to run the regular "
+"procurement \n"
+" scheduler anymore (but you still need to run the minimum order point "
+"rule \n"
+" scheduler, or for example let it run daily.)\n"
+" All procurement orders will be processed immediately, which could in "
+"some\n"
+" cases entail a small performance impact.\n"
+"\n"
+" It may also increase your stock size because products are reserved as "
+"soon\n"
+" as possible and the scheduler time range is not taken into account "
+"anymore. \n"
+" In that case, you can not use priorities any more on the different "
+"picking.\n"
+" \n"
+" \n"
+" "
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index 90330c4c988..4bca93d260f 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -50,17 +50,6 @@ class stock_move(osv.osv):
stock_move()
class mrp_production_workcenter_line(osv.osv):
- def _get_date_date(self, cr, uid, ids, field_name, arg, context=None):
- """ Finds starting date.
- @return: Dictionary of values.
- """
- res={}
- for op in self.browse(cr, uid, ids, context=context):
- if op.date_start:
- res[op.id] = op.date_start[:10]
- else:
- res[op.id]=False
- return res
def _get_date_end(self, cr, uid, ids, field_name, arg, context=None):
""" Finds ending date.
@@ -92,7 +81,6 @@ class mrp_production_workcenter_line(osv.osv):
"* When work order is in running mode, during that time if user wants to stop or to make changes in order then can set in 'Pending' status.\n" \
"* When the user cancels the work order it will be set in 'Canceled' status.\n" \
"* When order is completely processed that time it is set in 'Finished' status."),
- 'date_start_date': fields.function(_get_date_date, string='Start Date', type='date'),
'date_planned': fields.datetime('Scheduled Date', select=True),
'date_planned_end': fields.function(_get_date_end, string='End Date', type='datetime'),
'date_start': fields.datetime('Start Date'),
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index 13d02c8151c..a16a9b23f0a 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -328,7 +328,7 @@
mrp.production.workcenter.line
-
+
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index bc9b9413c65..d79620ce93c 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -690,7 +690,7 @@ class mrp_repair_line(osv.osv, ProductChangeMixin):
'repair_id': fields.many2one('mrp.repair', 'Repair Order Reference',ondelete='cascade', select=True),
'type': fields.selection([('add','Add'),('remove','Remove')],'Type', required=True),
'to_invoice': fields.boolean('To Invoice'),
- 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok','=',True)], required=True),
+ 'product_id': fields.many2one('product.product', 'Product', required=True),
'invoiced': fields.boolean('Invoiced',readonly=True),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
'price_subtotal': fields.function(_amount_line, string='Subtotal',digits_compute= dp.get_precision('Account')),
diff --git a/addons/mrp_repair/mrp_repair_view.xml b/addons/mrp_repair/mrp_repair_view.xml
index 2e8a1ae6ba9..d3a55ab32c1 100644
--- a/addons/mrp_repair/mrp_repair_view.xml
+++ b/addons/mrp_repair/mrp_repair_view.xml
@@ -34,16 +34,11 @@
-
-
+
-
-
-
-
Repair Order
diff --git a/addons/mrp_repair/mrp_repair_workflow.xml b/addons/mrp_repair/mrp_repair_workflow.xml
index 51485597dc3..4cc592ce058 100644
--- a/addons/mrp_repair/mrp_repair_workflow.xml
+++ b/addons/mrp_repair/mrp_repair_workflow.xml
@@ -144,7 +144,7 @@
- action_repair_start
+ repair_ready
diff --git a/addons/mrp_repair/test/test_mrp_repair_b4inv.yml b/addons/mrp_repair/test/test_mrp_repair_b4inv.yml
index 9ea28a9ecf4..47e301cd0bd 100644
--- a/addons/mrp_repair/test/test_mrp_repair_b4inv.yml
+++ b/addons/mrp_repair/test/test_mrp_repair_b4inv.yml
@@ -22,7 +22,7 @@
-
I start the Repairing process by clicking on "Start Repair" button.
-
- !workflow {model: mrp.repair, action: action_repair_start, ref: mrp_repair_rmrp2}
+ !workflow {model: mrp.repair, action: repair_ready, ref: mrp_repair_rmrp2}
-
Repairing process for this product is in Done state and I end this process by clicking on "End Repair" button for Invoice Method 'Before Repair'.
-
diff --git a/addons/note/__openerp__.py b/addons/note/__openerp__.py
index d87ee70086d..797270637e2 100644
--- a/addons/note/__openerp__.py
+++ b/addons/note/__openerp__.py
@@ -38,6 +38,7 @@ Notes can be found in the 'Home' menu.
'author': 'OpenERP SA',
'website': 'http://openerp.com',
'summary': 'Sticky notes, Collaborative, Memos',
+ 'sequence': 9,
'depends': [
'mail',
],
diff --git a/addons/note/i18n/nl.po b/addons/note/i18n/nl.po
new file mode 100644
index 00000000000..0e3baeee351
--- /dev/null
+++ b/addons/note/i18n/nl.po
@@ -0,0 +1,339 @@
+# Dutch translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-11-02 12:54+0000\n"
+"PO-Revision-Date: 2012-11-07 14:51+0000\n"
+"Last-Translator: Erwin van der Ploeg (Endian Solutions) \n"
+"Language-Team: Dutch \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-11-08 04:47+0000\n"
+"X-Generator: Launchpad (build 16232)\n"
+
+#. module: note
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "U kunt niet twee gebruikers hebben met dezelfde gebruikersnaam !"
+
+#. module: note
+#: field:note.note,memo:0
+msgid "Note Content"
+msgstr "Notitie inhoud"
+
+#. module: note
+#: view:note.stage:0
+msgid "Stages of Notes"
+msgstr "Notitie fases"
+
+#. module: note
+#: model:ir.model,name:note.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: note
+#: model:ir.model,name:note.model_note_tag
+msgid "Note Tag"
+msgstr "Notitie label"
+
+#. module: note
+#: model:res.groups,name:note.group_note_fancy
+msgid "Notes / Fancy mode"
+msgstr "Notitie / Luxe modus"
+
+#. module: note
+#: model:ir.model,name:note.model_note_note
+#: view:note.note:0
+msgid "Note"
+msgstr "Notitie"
+
+#. module: note
+#: view:note.note:0
+msgid "Group By..."
+msgstr "Groepeer op..."
+
+#. module: note
+#: field:note.note,message_summary:0
+msgid "Summary"
+msgstr "Samenvatting"
+
+#. module: note
+#: field:note.note,message_follower_ids:0
+msgid "Followers"
+msgstr "Volgers"
+
+#. module: note
+#: model:ir.actions.act_window,help:note.action_note_note
+msgid ""
+"
\n"
+" Click to add a personal note.\n"
+"
\n"
+" Use notes to organize personal tasks or notes. All\n"
+" notes are private; no one else will be able to see them. "
+"However\n"
+" you can share some notes with other people by inviting "
+"followers\n"
+" on the note. (Useful for meeting minutes, especially if\n"
+" you activate the pad feature for collaborative writings).\n"
+"
\n"
+" You can customize how you process your notes/tasks by adding,\n"
+" removing or modifying columns.\n"
+"
\n"
+" "
+msgstr ""
+"
\n"
+" Klik om een persoonlijke notitie toe te voegen.\n"
+"
\n"
+" Gebruik notities om uw persoonlijke taken en notities te "
+"organiseren. Alle\n"
+" notities zijn prive; niemand anders kan deze notities zien. "
+"Echter is het wel \n"
+" mogenlijk om sommige notities te delen met andere gebruikers, "
+"door deze uit te nodigen\n"
+" op een notitie. (Dit is handig voor bijvoorbeeld een "
+"gespreksverslag, en zeker als je\n"
+" de pad mogelijkheid activeert voor het samenwerken)\n"
+"
\n"
+" U kunt het proces van notities en taken aanpassen door het "
+"toevoegen,\n"
+" verwijderen of aanpassen van kolommen.\n"
+"
\n"
+" Use notes to organize personal tasks or notes. All\n"
+" notes are private; no one else will be able to see them. However\n"
+" you can share some notes with other people by inviting followers\n"
+" on the note. (Useful for meeting minutes, especially if\n"
+" you activate the pad feature for collaborative writings).\n"
+"
\n"
+" You can customize how you process your notes/tasks by adding,\n"
+" removing or modifying columns.\n"
+"
\n"
+" Use notes to organize personal tasks or notes. All\n"
+" notes are private; no one else will be able to see them. "
+"However\n"
+" you can share some notes with other people by inviting "
+"followers\n"
+" on the note. (Useful for meeting minutes, especially if\n"
+" you activate the pad feature for collaborative writings).\n"
+"
\n"
+" You can customize how you process your notes/tasks by adding,\n"
+" removing or modifying columns.\n"
+"
\n"
+" "
+msgstr ""
+"
\n"
+" Clique para adicionar nota pessoal.\n"
+"
\n"
+" Use notas para organizar tarefas ou notas pessoais. Todas\n"
+" notas são privadas; ninguém mais é capaz de vê-las. Contudo\n"
+" você pode compartilhar algumas notas com outras pessoas "
+"convidando seguidores\n"
+" na nota. (Útil para atas de reunião, especialmente se\n"
+" você ativar o recurso \"PAD\" para textos colaborativos).\n"
+"
\n"
+" Você pode customizar a forma como você processa suas "
+"notas/tarefas adicionando,\n"
+" removendo ou modificando colunas.\n"
+"
\n"
+" "
+
+#. module: note
+#: view:note.note:0
+msgid "kanban note"
+msgstr "nota kanban"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_01
+#: model:note.stage,name:note.note_stage_01
+msgid "Today"
+msgstr "Hoje"
+
+#. module: note
+#: model:ir.model,name:note.model_res_users
+msgid "Users"
+msgstr "Usuários"
+
+#. module: note
+#: view:note.note:0
+msgid "í"
+msgstr "í"
+
+#. module: note
+#: view:note.stage:0
+msgid "Stage of Notes"
+msgstr "Estágios das Notas"
+
+#. module: note
+#: field:note.note,message_unread:0
+msgid "Unread Messages"
+msgstr "Mensagens não lidas"
+
+#. module: note
+#: field:note.note,current_partner_id:0
+msgid "unknown"
+msgstr "desconhecido"
+
+#. module: note
+#: view:note.note:0
+msgid "By sticky note Category"
+msgstr ""
+
+#. module: note
+#: help:note.note,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr "Se marcado novas mensagens requerem sua atenção"
+
+#. module: note
+#: field:note.stage,name:0
+msgid "Stage Name"
+msgstr "Nome do Estágio"
+
+#. module: note
+#: field:note.note,message_is_follower:0
+msgid "Is a Follower"
+msgstr "É um seguidor"
+
+#. module: note
+#: view:note.note:0
+msgid "title"
+msgstr "título"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_02
+#: model:note.stage,name:note.note_stage_02
+msgid "Tomorrow"
+msgstr "Amanhã"
+
+#. module: note
+#: view:note.note:0
+#: field:note.note,open:0
+msgid "Active"
+msgstr "Ativo"
+
+#. module: note
+#: help:note.stage,user_id:0
+msgid "Owner of the note stage."
+msgstr "Proprietário do estágio da nota."
+
+#. module: note
+#: model:ir.ui.menu,name:note.menu_notes_stage
+msgid "Categories"
+msgstr "Categorias"
+
+#. module: note
+#: field:note.note,message_comment_ids:0
+#: help:note.note,message_comment_ids:0
+msgid "Comments and emails"
+msgstr "Comentários e emails"
+
+#. module: note
+#: field:note.tag,name:0
+msgid "Tag Name"
+msgstr "Nome da Tag"
+
+#. module: note
+#: field:note.note,message_ids:0
+msgid "Messages"
+msgstr "Mensagens"
+
+#. module: note
+#: view:base.config.settings:0
+#: model:ir.actions.act_window,name:note.action_note_note
+#: model:ir.ui.menu,name:note.menu_note_notes
+#: view:note.note:0
+#: model:note.stage,name:note.note_stage_04
+msgid "Notes"
+msgstr "Notas"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_03
+#: model:note.stage,name:note.note_stage_03
+msgid "Later"
+msgstr "Mais tarde"
+
+#. module: note
+#: model:ir.model,name:note.model_note_stage
+msgid "Note Stage"
+msgstr "Estágio da Nota"
+
+#. module: note
+#: view:note.note:0
+msgid "dropdown menu"
+msgstr "dropdown menu"
+
+#. module: note
+#: model:note.stage,name:note.demo_note_stage_04
+msgid "Morning"
+msgstr "Manhã"
+
+#. module: note
+#: help:note.stage,sequence:0
+msgid "Used to order the note stages"
+msgstr "Usado para ordenar os estágios das notas"
+
+#. module: note
+#: view:note.note:0
+msgid "W"
+msgstr "W"
+
+#. module: note
+#: field:note.note,stage_ids:0
+msgid "Stages of Users"
+msgstr "Estágios de Usuários"
+
+#. module: note
+#: field:note.note,name:0
+msgid "Note Summary"
+msgstr "Resumo da Nota"
+
+#. module: note
+#: model:ir.actions.act_window,name:note.action_note_stage
+#: view:note.note:0
+msgid "Stages"
+msgstr "Estágios"
+
+#. module: note
+#: help:note.note,message_ids:0
+msgid "Messages and communication history"
+msgstr "Histórico de mensagens e comunicação"
+
+#. module: note
+#: view:note.note:0
+msgid "Delete"
+msgstr "Excluir"
+
+#. module: note
+#: field:note.note,color:0
+msgid "Color Index"
+msgstr "Índice de Cores"
+
+#. module: note
+#: field:note.note,sequence:0
+#: field:note.stage,sequence:0
+msgid "Sequence"
+msgstr "Sequencia"
+
+#. module: note
+#: field:note.note,tag_ids:0
+msgid "Tags"
+msgstr "Tags"
+
+#. module: note
+#: view:note.note:0
+msgid "Archive"
+msgstr "Arquivo"
+
+#. module: note
+#: field:base.config.settings,module_note_pad:0
+msgid "Use collaborative pads (etherpad)"
+msgstr "Usar pads colaborativos (etherpad)"
+
+#. module: note
+#: help:note.note,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: note
+#: field:base.config.settings,group_note_fancy:0
+msgid "Use fancy layouts for notes"
+msgstr "Usar leiautes fantasia para notas"
+
+#. module: note
+#: field:note.stage,user_id:0
+msgid "Owner"
+msgstr "Proprietário"
+
+#. module: note
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+"A empresa escolhida não está entre as empresas habilitadas para este usuário"
+
+#. module: note
+#: view:note.note:0
+#: field:note.note,stage_id:0
+msgid "Stage"
+msgstr "Estágio"
+
+#. module: note
+#: field:note.note,date_done:0
+msgid "Date done"
+msgstr "Data de conclusão"
+
+#. module: note
+#: field:note.stage,fold:0
+msgid "Folded by Default"
+msgstr "Dobrado por Padrão"
diff --git a/addons/note/note.py b/addons/note/note.py
index 9d62f7a2cb7..9e1a9187095 100644
--- a/addons/note/note.py
+++ b/addons/note/note.py
@@ -20,16 +20,14 @@
##############################################################################
from openerp.osv import osv, fields
-from tools.translate import _
-import re
-from openerp.tools.misc import html2plaintext
+from openerp.tools import html2plaintext
class note_stage(osv.osv):
""" Category of Note """
_name = "note.stage"
_description = "Note Stage"
_columns = {
- 'name': fields.char('Stage Name', required=True),
+ 'name': fields.char('Stage Name', translate=True, required=True),
'sequence': fields.integer('Sequence', help="Used to order the note stages"),
'user_id': fields.many2one('res.users', 'Owner', help="Owner of the note stage.", required=True),
'fold': fields.boolean('Folded by Default'),
@@ -186,3 +184,21 @@ class note_base_config_settings(osv.osv_memory):
'module_note_pad': fields.boolean('Use collaborative pads (etherpad)'),
'group_note_fancy': fields.boolean('Use fancy layouts for notes', implied_group='note.group_note_fancy'),
}
+
+class res_users(osv.Model):
+ _name = 'res.users'
+ _inherit = ['res.users']
+ def create(self, cr, uid, data, context=None):
+ user_id = super(res_users, self).create(cr, uid, data, context=context)
+ user = self.browse(cr, uid, uid, context=context)
+ note_obj = self.pool.get('note.stage')
+ data_obj = self.pool.get('ir.model.data')
+ model_id = data_obj.get_object_reference(cr, uid, 'base', 'group_user') #Employee Group
+ group_id = model_id and model_id[1] or False
+ if group_id in [x.id for x in user.groups_id]:
+ for note_xml_id in ['note_stage_01','note_stage_02','note_stage_03','note_stage_04']:
+ data_id = data_obj._get_id(cr, uid, 'note', note_xml_id)
+ stage_id = data_obj.browse(cr, uid, data_id, context=context).res_id
+ note_obj.copy(cr, uid, stage_id, default = {
+ 'user_id': user_id}, context=context)
+ return user_id
\ No newline at end of file
diff --git a/addons/note/note_data.xml b/addons/note/note_data.xml
index 91684640d97..592292788b3 100644
--- a/addons/note/note_data.xml
+++ b/addons/note/note_data.xml
@@ -9,16 +9,22 @@
- Later
+ This Week2
- Notes
+ Later3
+
+ Notes
+ 4
+
+
+
diff --git a/addons/note/note_demo.xml b/addons/note/note_demo.xml
index 7769e3ee303..5da11e2e99a 100644
--- a/addons/note/note_demo.xml
+++ b/addons/note/note_demo.xml
@@ -20,7 +20,7 @@
- Morning
+ This Week4
diff --git a/addons/note/note_view.xml b/addons/note/note_view.xml
index 5c3a77b7626..5aae6204d86 100644
--- a/addons/note/note_view.xml
+++ b/addons/note/note_view.xml
@@ -59,18 +59,18 @@
diff --git a/addons/note/security/ir.rule.xml b/addons/note/security/ir.rule.xml
index 1195314cc9e..b0c79561355 100644
--- a/addons/note/security/ir.rule.xml
+++ b/addons/note/security/ir.rule.xml
@@ -6,6 +6,10 @@
[('message_follower_ids','=',user.partner_id.id)]
+
+
+
+
diff --git a/addons/note/static/src/css/note.css b/addons/note/static/src/css/note.css
index 43bc455e04a..16d71e28aa5 100644
--- a/addons/note/static/src/css/note.css
+++ b/addons/note/static/src/css/note.css
@@ -46,11 +46,11 @@
.openerp .oe_kanban_record .oe_kanban_card_fancy {
text-shadow: none;
border-radius: 2px;
- padding: 12px;
+ padding: 8px;
margin-left: 3px;
margin-right: 3px;
- padding-bottom: 16px;
- margin-bottom: 16px;
+ padding-bottom: 8px;
+ margin-bottom: 10px;
-webkit-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
diff --git a/addons/note/static/src/css/note.sass b/addons/note/static/src/css/note.sass
index ff39ce8708c..6f0c0883ae7 100644
--- a/addons/note/static/src/css/note.sass
+++ b/addons/note/static/src/css/note.sass
@@ -50,11 +50,11 @@
.oe_kanban_card_fancy
text-shadow: none
border-radius: 2px
- padding: 12px
+ padding: 8px
margin-left: 3px
margin-right: 3px
- padding-bottom: 16px
- margin-bottom: 16px
+ padding-bottom: 8px
+ margin-bottom: 10px
@include rotate(-2deg)
@include transition(all, 300ms)
.oe_kanban_record:nth-of-type(even)
diff --git a/addons/pad/pad.py b/addons/pad/pad.py
index c7641540a0a..8f9f79a78e0 100644
--- a/addons/pad/pad.py
+++ b/addons/pad/pad.py
@@ -4,10 +4,13 @@ import random
import re
import string
import urllib2
+import logging
from tools.translate import _
-from openerp.tools.misc import html2plaintext
+from openerp.tools import html2plaintext
from py_etherpad import EtherpadLiteClient
+_logger = logging.getLogger(__name__)
+
class pad_common(osv.osv_memory):
_name = 'pad.common'
@@ -16,7 +19,7 @@ class pad_common(osv.osv_memory):
pad = {
"server" : company.pad_server,
- "key" : company.pad_key or "4DxmsNIbnQUVQMW9S9tx2oLOSjFdrx1l",
+ "key" : company.pad_key,
}
# make sure pad server in the form of http://hostname
@@ -59,10 +62,13 @@ class pad_common(osv.osv_memory):
def pad_get_content(self, cr, uid, url, context=None):
content = ''
if url:
- page = urllib2.urlopen('%s/export/html'%url).read()
- mo = re.search('(.*)',page)
- if mo:
- content = mo.group(1)
+ try:
+ page = urllib2.urlopen('%s/export/html'%url).read()
+ mo = re.search('(.*)',page)
+ if mo:
+ content = mo.group(1)
+ except:
+ _logger.warning("No url found '%s'.", url)
return content
# TODO
diff --git a/addons/pad/pad_demo.xml b/addons/pad/pad_demo.xml
index 407f90e8242..99c4b38481c 100644
--- a/addons/pad/pad_demo.xml
+++ b/addons/pad/pad_demo.xml
@@ -1,9 +1,13 @@
-
+
pad.openerp.com
+
+
+ 4DxmsNIbnQUVQMW9S9tx2oLOSjFdrx1l
+
diff --git a/addons/pad/static/src/js/pad.js b/addons/pad/static/src/js/pad.js
index c1252642b91..929d62681c8 100644
--- a/addons/pad/static/src/js/pad.js
+++ b/addons/pad/static/src/js/pad.js
@@ -12,8 +12,9 @@ openerp.pad = function(instance) {
model: self.view.model,
field_name: self.name,
object_id: self.view.datarecord.id
- }}).then(function(data) {
+ }}).done(function(data) {
if(data&&data.url){
+ self.set({value: data.url});
_super(data.url);
self.renderElement();
}
diff --git a/addons/pad_project/i18n/es.po b/addons/pad_project/i18n/es.po
new file mode 100644
index 00000000000..f0dbb565158
--- /dev/null
+++ b/addons/pad_project/i18n/es.po
@@ -0,0 +1,39 @@
+# Spanish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-11-08 12:44+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-11-09 04:39+0000\n"
+"X-Generator: Launchpad (build 16250)\n"
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! Task end-date must be greater then task start-date"
+msgstr ""
+"¡Error! La fecha final de la tarea debe ser mayor que la fecha de inicio"
+
+#. module: pad_project
+#: model:ir.model,name:pad_project.model_project_task
+msgid "Task"
+msgstr "Tarea"
+
+#. module: pad_project
+#: view:project.task:0
+msgid "Pad"
+msgstr "Pad"
+
+#. module: pad_project
+#: constraint:project.task:0
+msgid "Error ! You cannot create recursive tasks."
+msgstr "¡Error! No se pueden crear tareas recursivas."
diff --git a/addons/plugin/i18n/es.po b/addons/plugin/i18n/es.po
new file mode 100644
index 00000000000..8111105ef1f
--- /dev/null
+++ b/addons/plugin/i18n/es.po
@@ -0,0 +1,23 @@
+# Spanish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-11-08 11:25+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-11-09 04:39+0000\n"
+"X-Generator: Launchpad (build 16250)\n"
+
+#. module: plugin
+#: model:ir.model,name:plugin.model_plugin_handler
+msgid "plugin.handler"
+msgstr "Manejador del plug-in"
diff --git a/addons/plugin_outlook/plugin_outlook.xml b/addons/plugin_outlook/plugin_outlook.xml
index e99fbf72b6d..91c51e87ad9 100644
--- a/addons/plugin_outlook/plugin_outlook.xml
+++ b/addons/plugin_outlook/plugin_outlook.xml
@@ -10,7 +10,11 @@
Install Outlook Plug-In
-
+
+
+
@@ -19,10 +23,10 @@
Click on the link above to download the installer for either 32 or 64 bits, and execute it.
System requirements:
-
-
1. MS Outlook 2005 or above.
-
2. MS .Net Framework 3.5 or above.
-
+
+
MS Outlook 2005 or above.
+
MS .Net Framework 3.5 or above.
+
@@ -51,7 +55,7 @@
-
diff --git a/addons/plugin_thunderbird/plugin_thunderbird.py b/addons/plugin_thunderbird/plugin_thunderbird.py
index 6473758883d..923611b97a9 100644
--- a/addons/plugin_thunderbird/plugin_thunderbird.py
+++ b/addons/plugin_thunderbird/plugin_thunderbird.py
@@ -30,13 +30,11 @@ class plugin_thunderbird_installer(osv.osv_memory):
'thunderbird': fields.boolean('Thunderbird Plug-in', help="Allows you to select an object that you would like to add to your email and its attachments."),
'plugin_name': fields.char('File name', size=64),
'plugin_file': fields.char('Thunderbird Plug-in', size=256, readonly=True, help="Thunderbird plug-in file. Save this file and install it in Thunderbird."),
- 'pdf_file': fields.char('Installation Manual', size=256, help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True),
}
_defaults = {
'thunderbird': True,
'plugin_name': 'openerp_plugin.xpi',
- 'pdf_file': 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_thunderbird.html',
}
def default_get(self, cr, uid, fields, context=None):
@@ -45,4 +43,4 @@ class plugin_thunderbird_installer(osv.osv_memory):
res['plugin_file'] = base_url + '/plugin_thunderbird/static/openerp_plugin.xpi'
return res
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/plugin_thunderbird/plugin_thunderbird.xml b/addons/plugin_thunderbird/plugin_thunderbird.xml
index 5ea5fc38219..3774a369437 100644
--- a/addons/plugin_thunderbird/plugin_thunderbird.xml
+++ b/addons/plugin_thunderbird/plugin_thunderbird.xml
@@ -10,25 +10,28 @@
Install Thunderbird Plug-In
-
+
+
+
-
-
Thunderbird plugin installation:
-
-
1. Save the Thunderbird plug-in.
-
2. From the Thunderbird menubar: Tools > Add-ons -> Screwdriver/Wrench Icon -> Install add-on from file...
-
3. Select the plug-in (the file named openerp_plugin.xpi).
-
4. Click "Install Now".
-
5. Restart Thunderbird.
-
6. From the Thunderbird menubar: OpenERP -> Configuration.
-
7. Configure your openerp server.
-
+
Thunderbird plug-in installation:
+
+
Save the Thunderbird plug-in.
+
From the Thunderbird menubar: Tools > Add-ons -> Screwdriver/Wrench Icon -> Install add-on from file...
+
Select the plug-in (the file named openerp_plugin.xpi).
+
Click "Install Now".
+
Restart Thunderbird.
+
From the Thunderbird menubar: OpenERP -> Configuration.
+
Configure your openerp server.
+
@@ -57,7 +60,7 @@
-
diff --git a/addons/point_of_sale/i18n/hr.po b/addons/point_of_sale/i18n/hr.po
index 00db160c4ba..eea44bbbcbd 100644
--- a/addons/point_of_sale/i18n/hr.po
+++ b/addons/point_of_sale/i18n/hr.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-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-05-10 18:27+0000\n"
-"Last-Translator: Goran Kliska \n"
+"PO-Revision-Date: 2012-10-31 09:46+0000\n"
+"Last-Translator: Krešimir Jeđud \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: 2012-10-30 04:54+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:03+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: point_of_sale
#: field:report.transaction.pos,product_nb:0
@@ -916,7 +916,7 @@ msgstr "POS Order lines"
#. module: point_of_sale
#: view:pos.receipt:0
msgid "Receipt :"
-msgstr "Receipt :"
+msgstr "Račun"
#. module: point_of_sale
#: field:account.bank.statement.line,pos_statement_id:0
@@ -1671,7 +1671,7 @@ msgstr "Račun br."
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:231
msgid "Receipt"
-msgstr "Receipt"
+msgstr "Račun"
#. module: point_of_sale
#: view:pos.open.statement:0
@@ -2639,7 +2639,7 @@ msgstr "Godina"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:31
msgid "Disc (%)"
-msgstr ""
+msgstr "Popust(%)"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:41
@@ -2650,7 +2650,7 @@ msgstr ""
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:45
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:268
msgid "Tax:"
-msgstr ""
+msgstr "Porez:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:64
@@ -2671,17 +2671,17 @@ msgstr ""
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:113
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:288
msgid "Change:"
-msgstr ""
+msgstr "Za vratiti:"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:124
msgid "Back to Products"
-msgstr ""
+msgstr "Povratak"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:127
msgid "Validate"
-msgstr ""
+msgstr "Potvrdi"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:140
@@ -2703,7 +2703,7 @@ msgstr ""
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:238
msgid "Next Order"
-msgstr ""
+msgstr "Sljedeći račun"
#. openerp-web
#: /home/odo/repositories/addons/trunk/point_of_sale/static/src/xml/pos.xml:248
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index f219f4111ca..050b8f4cfe7 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -296,49 +296,55 @@ class pos_session(osv.osv):
]
def create(self, cr, uid, values, context=None):
- config_id = values.get('config_id', False) or False
- if config_id:
- # journal_id is not required on the pos_config because it does not
- # exists at the installation. If nothing is configured at the
- # installation we do the minimal configuration. Impossible to do in
- # the .xml files as the CoA is not yet installed.
- jobj = self.pool.get('pos.config')
- pos_config = jobj.browse(cr, uid, config_id, context=context)
- if not pos_config.journal_id:
- jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
- if jid:
- jobj.write(cr, uid, [pos_config.id], {'journal_id': jid}, context=context)
- else:
- raise osv.except_osv( _('error!'),
- _("Unable to open the session. You have to assign a sale journal to your point of sale."))
+ context = context or {}
+ config_id = values.get('config_id', False) or context.get('default_config_id', False)
+ if not config_id:
+ raise osv.except_osv( _('Error!'),
+ _("You should assign a Point of Sale to your session."))
- # define some cash journal if no payment method exists
- if not pos_config.journal_ids:
- journal_proxy = self.pool.get('account.journal')
- cashids = journal_proxy.search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context)
+ # journal_id is not required on the pos_config because it does not
+ # exists at the installation. If nothing is configured at the
+ # installation we do the minimal configuration. Impossible to do in
+ # the .xml files as the CoA is not yet installed.
+ jobj = self.pool.get('pos.config')
+ pos_config = jobj.browse(cr, uid, config_id, context=context)
+ context.update({'company_id': pos_config.shop_id.company_id.id})
+ if not pos_config.journal_id:
+ jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
+ if jid:
+ jobj.write(cr, uid, [pos_config.id], {'journal_id': jid}, context=context)
+ else:
+ raise osv.except_osv( _('error!'),
+ _("Unable to open the session. You have to assign a sale journal to your point of sale."))
+
+ # define some cash journal if no payment method exists
+ if not pos_config.journal_ids:
+ journal_proxy = self.pool.get('account.journal')
+ cashids = journal_proxy.search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context)
+ if not cashids:
+ cashids = journal_proxy.search(cr, uid, [('type', '=', 'cash')], context=context)
if not cashids:
- cashids = journal_proxy.search(cr, uid, [('type', '=', 'cash')], context=context)
- if not cashids:
- cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
+ cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
- jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
+ jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
- pos_config = jobj.browse(cr, uid, config_id, context=context)
- bank_statement_ids = []
- for journal in pos_config.journal_ids:
- bank_values = {
- 'journal_id' : journal.id,
- 'user_id' : uid,
- }
- statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
- bank_statement_ids.append(statement_id)
+ pos_config = jobj.browse(cr, uid, config_id, context=context)
+ bank_statement_ids = []
+ for journal in pos_config.journal_ids:
+ bank_values = {
+ 'journal_id' : journal.id,
+ 'user_id' : uid,
+ 'company_id' : pos_config.shop_id.company_id.id
+ }
+ statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
+ bank_statement_ids.append(statement_id)
- values.update({
- 'name' : pos_config.sequence_id._next(),
- 'statement_ids' : [(6, 0, bank_statement_ids)],
- 'config_id': config_id
- })
+ values.update({
+ 'name' : pos_config.sequence_id._next(),
+ 'statement_ids' : [(6, 0, bank_statement_ids)],
+ 'config_id': config_id
+ })
return super(pos_session, self).create(cr, uid, values, context=context)
@@ -390,7 +396,7 @@ class pos_session(osv.osv):
def wkf_action_closing_control(self, cr, uid, ids, context=None):
for session in self.browse(cr, uid, ids, context=context):
for statement in session.statement_ids:
- if statement != session.cash_register_id and statement.balance_end != statement.balance_end_real:
+ if (statement != session.cash_register_id) and (statement.balance_end != statement.balance_end_real):
self.pool.get('account.bank.statement').write(cr, uid, [statement.id], {'balance_end_real': statement.balance_end})
return self.write(cr, uid, ids, {'state' : 'closing_control', 'stop_at' : time.strftime('%Y-%m-%d %H:%M:%S')}, context=context)
@@ -484,7 +490,8 @@ class pos_order(osv.osv):
'name': order['name'],
'user_id': order['user_id'] or False,
'session_id': order['pos_session_id'],
- 'lines': order['lines']
+ 'lines': order['lines'],
+ 'pos_reference':order['name']
}, context)
for payments in order['statement_ids']:
@@ -492,17 +499,26 @@ class pos_order(osv.osv):
self.add_payment(cr, uid, order_id, {
'amount': payment['amount'] or 0.0,
'payment_date': payment['name'],
+ 'statement_id': payment['statement_id'],
'payment_name': payment.get('note', False),
'journal': payment['journal_id']
}, context=context)
if order['amount_return']:
session = self.pool.get('pos.session').browse(cr, uid, order['pos_session_id'], context=context)
+ cash_journal = session.cash_journal_id
+ cash_statement = False
+ if not cash_journal:
+ cash_journal_ids = filter(lambda st: st.journal_id.type=='cash', session.statement_ids)
+ if not len(cash_journal_ids):
+ raise osv.except_osv( _('error!'),
+ _("No cash statement found for this session. Unable to record returned cash."))
+ cash_journal = cash_journal_ids[0].journal_id
self.add_payment(cr, uid, order_id, {
'amount': -order['amount_return'],
'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
'payment_name': _('return'),
- 'journal': session.cash_journal_id.id
+ 'journal': cash_journal.id,
}, context=context)
order_ids.append(order_id)
wf_service = netsvc.LocalService("workflow")
@@ -592,7 +608,7 @@ class pos_order(osv.osv):
'picking_id': fields.many2one('stock.picking', 'Picking', readonly=True),
'note': fields.text('Internal Notes'),
'nb_print': fields.integer('Number of Print', readonly=True),
-
+ 'pos_reference': fields.char('Receipt Ref', size=64, readonly=True),
'sale_journal': fields.related('session_id', 'config_id', 'journal_id', relation='account.journal', type='many2one', string='Sale Journal', store=True, readonly=True),
}
@@ -702,21 +718,15 @@ class pos_order(osv.osv):
"""Create a new payment for the order"""
if not context:
context = {}
- statement_obj = self.pool.get('account.bank.statement')
statement_line_obj = self.pool.get('account.bank.statement.line')
- prod_obj = self.pool.get('product.product')
property_obj = self.pool.get('ir.property')
- curr_c = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
- curr_company = curr_c.id
order = self.browse(cr, uid, order_id, context=context)
args = {
'amount': data['amount'],
+ 'date': data.get('payment_date', time.strftime('%Y-%m-%d')),
+ 'name': order.name + ': ' + (data.get('payment_name', '') or ''),
}
- if 'payment_date' in data:
- args['date'] = data['payment_date']
- args['name'] = order.name
- if data.get('payment_name', False):
- args['name'] = args['name'] + ': ' + data['payment_name']
+
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \
and order.partner_id.property_account_receivable.id) or (account_def and account_def.id) or False
@@ -731,14 +741,15 @@ class pos_order(osv.osv):
context.pop('pos_session_id', False)
- try:
- journal_id = long(data['journal'])
- except Exception:
- journal_id = False
+ journal_id = data.get('journal', False)
+ statement_id = data.get('statement_id', False)
+ assert journal_id or statement_id, "No statement_id or journal_id passed to the method!"
- statement_id = False
for statement in order.session_id.statement_ids:
- if statement.journal_id.id == journal_id:
+ if statement.id == statement_id:
+ journal_id = statement.journal_id.id
+ break
+ elif statement.journal_id.id == journal_id:
statement_id = statement.id
break
@@ -755,10 +766,6 @@ class pos_order(osv.osv):
statement_line_obj.create(cr, uid, args, context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'pos.order', order_id, 'paid', cr)
- wf_service.trg_write(uid, 'pos.order', order_id, cr)
-
return statement_id
def refund(self, cr, uid, ids, context=None):
@@ -1296,11 +1303,11 @@ class product_product(osv.osv):
# return result
_columns = {
- 'income_pdt': fields.boolean('Point of Sale Cash In', help="This is a product you can use to put cash into a statement for the point of sale backend."),
- 'expense_pdt': fields.boolean('Point of Sale Cash Out', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
+ 'income_pdt': fields.boolean('Point of Sale Cash In', help="Check if, this is a product you can use to put cash into a statement for the point of sale backend."),
+ 'expense_pdt': fields.boolean('Point of Sale Cash Out', help="Check if, this is a product you can use to take cash from a statement for the point of sale backend, example: money lost, transfer to bank, etc."),
'pos_categ_id': fields.many2one('pos.category','Point of Sale Category',
help="If you want to sell this product through the point of sale, select the category it belongs to."),
- 'to_weight' : fields.boolean('To Weigh', help="This category contains products that should to be weighed, mainly used for the self-checkout interface"),
+ 'to_weight' : fields.boolean('To Weigh', help="Check if the product should be weighted (mainly used with self check-out interface)."),
}
def _default_pos_categ_id(self, cr, uid, context=None):
diff --git a/addons/point_of_sale/point_of_sale_data.xml b/addons/point_of_sale/point_of_sale_data.xml
index 634d2606aa8..01d8dd9ff60 100644
--- a/addons/point_of_sale/point_of_sale_data.xml
+++ b/addons/point_of_sale/point_of_sale_data.xml
@@ -20,10 +20,10 @@
mail.groupnotification
+ Point of Sale application installed!
- Record sale orders, register payments, compute change to return, create invoices, and manage refunds through a specific web touch-screen interface.
-
-If you install the PoS proxy you will be able to interface OpenERP with retail hardware: barcode scanners, printers, cash registers, weighing machines, credit card payment terminals.
+ Record sale orders, register payments, compute change to return, create invoices, and manage refunds through a specific web touch-screen interface.
+
If you install the PoS proxy you will be able to interface OpenERP with retail hardware: barcode scanners, printers, cash registers, weighing machines, credit card payment terminals.
diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py
index 27086e08b26..914bef06bbf 100644
--- a/addons/point_of_sale/report/pos_order_report.py
+++ b/addons/point_of_sale/report/pos_order_report.py
@@ -60,7 +60,7 @@ class pos_order_report(osv.osv):
to_date(to_char(s.date_order, 'dd-MM-YYYY'),'dd-MM-YYYY') as date,
sum(l.qty * u.factor) as product_qty,
sum(l.qty * l.price_unit) as price_total,
- sum(l.qty * l.discount) as total_discount,
+ sum((l.qty * l.price_unit) * (l.discount / 100)) as total_discount,
(sum(l.qty*l.price_unit)/sum(l.qty * u.factor))::decimal(16,2) as average_price,
sum(cast(to_char(date_trunc('day',s.date_order) - date_trunc('day',s.create_date),'DD') as int)) as delay_validation,
to_char(s.date_order, 'YYYY') as year,
diff --git a/addons/point_of_sale/report/pos_receipt.py b/addons/point_of_sale/report/pos_receipt.py
index 2ee6b2e3360..58044c28c77 100644
--- a/addons/point_of_sale/report/pos_receipt.py
+++ b/addons/point_of_sale/report/pos_receipt.py
@@ -34,7 +34,7 @@ class order(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(order, self).__init__(cr, uid, name, context=context)
- user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
+ user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
partner = user.company_id.partner_id
self.localcontext.update({
diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml
index d7b8b08ad29..0802114bb48 100644
--- a/addons/point_of_sale/report/pos_receipt.rml
+++ b/addons/point_of_sale/report/pos_receipt.rml
@@ -103,6 +103,12 @@
[[ repeatIn(o.lines,'line') ]][[ line.product_id.name ]]
+
+ With a [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]) % discount.
+
+
+
+
[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
diff --git a/addons/point_of_sale/static/src/css/pos.css b/addons/point_of_sale/static/src/css/pos.css
index 81c6a1e1a6e..675b77345e7 100644
--- a/addons/point_of_sale/static/src/css/pos.css
+++ b/addons/point_of_sale/static/src/css/pos.css
@@ -102,6 +102,11 @@
border: 1px solid #cecbcb;
border-radius: 4px;
}
+.point-of-sale .pos-disc-font {
+ font-size: 12px;
+ font-style:italic;
+ color: #808080;
+}
/* ********* The black header bar ********* */
diff --git a/addons/point_of_sale/static/src/js/devices.js b/addons/point_of_sale/static/src/js/devices.js
index c96aff3d9c1..c5580ec8e46 100644
--- a/addons/point_of_sale/static/src/js/devices.js
+++ b/addons/point_of_sale/static/src/js/devices.js
@@ -37,12 +37,11 @@ function openerp_pos_devices(instance,module){ //module is instance.point_of_sal
callbacks[i](params);
}
- this.connection.rpc('/pos/'+name, params || {}).then(function(result){
- ret.resolve(result);
- },
- function(error){
- ret.reject(error);
- });
+ this.connection.rpc('/pos/' + name, params || {}).done(function(result) {
+ ret.resolve(result);
+ }).fail(function(error) {
+ ret.reject(error);
+ });
return ret;
},
@@ -96,7 +95,7 @@ function openerp_pos_devices(instance,module){ //module is instance.point_of_sal
return this.weight;
}else{
this.message('weighting_read_kg',{})
- .then(function(weight){
+ .done(function(weight){
if(self.weighting && !self.bypass_proxy){
self.weight = weight;
}
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index 2c6f4e8b6e0..f1462424f1e 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -59,10 +59,10 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
// Any change on this data made on the server is thus not reflected on the point of sale until it is relaunched.
// when all the data has loaded, we compute some stuff, and declare the Pos ready to be used.
$.when(this.load_server_data())
- .then(function(){
+ .done(function(){
//self.log_loaded_data(); //Uncomment if you want to log the data to the console for easier debugging
self.ready.resolve();
- },function(){
+ }).fail(function(){
//we failed to load some backend data, or the backend was badly configured.
//the error messages will be displayed in PosWidget
self.ready.reject();
@@ -78,7 +78,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
var self = this;
var loaded = self.fetch('res.users',['name','company_id'],[['id','=',this.session.uid]])
- .pipe(function(users){
+ .then(function(users){
self.set('user',users[0]);
return self.fetch('res.company',
@@ -93,19 +93,19 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
'partner_id',
],
[['id','=',users[0].company_id[0]]]);
- }).pipe(function(companies){
+ }).then(function(companies){
self.set('company',companies[0]);
return self.fetch('res.partner',['contact_address'],[['id','=',companies[0].partner_id[0]]]);
- }).pipe(function(company_partners){
+ }).then(function(company_partners){
self.get('company').contact_address = company_partners[0].contact_address;
return self.fetch('res.currency',['symbol','position'],[['id','=',self.get('company').currency_id[0]]]);
- }).pipe(function(currencies){
+ }).then(function(currencies){
self.set('currency',currencies[0]);
return self.fetch('product.uom', null, null);
- }).pipe(function(units){
+ }).then(function(units){
self.set('units',units);
var units_by_id = {};
for(var i = 0, len = units.length; i < len; i++){
@@ -114,15 +114,15 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
self.set('units_by_id',units_by_id);
return self.fetch('product.packaging', null, null);
- }).pipe(function(packagings){
+ }).then(function(packagings){
self.set('product.packaging',packagings);
return self.fetch('res.users', ['name','ean13'], [['ean13', '!=', false]]);
- }).pipe(function(users){
+ }).then(function(users){
self.set('user_list',users);
return self.fetch('account.tax', ['amount', 'price_include', 'type']);
- }).pipe(function(taxes){
+ }).then(function(taxes){
self.set('taxes', taxes);
return self.fetch(
@@ -130,7 +130,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
['id', 'journal_ids','name','user_id','config_id','start_at','stop_at'],
[['state', '=', 'opened'], ['user_id', '=', self.session.uid]]
);
- }).pipe(function(sessions){
+ }).then(function(sessions){
self.set('pos_session', sessions[0]);
return self.fetch(
@@ -141,7 +141,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'],
[['id','=', self.get('pos_session').config_id[0]]]
);
- }).pipe(function(configs){
+ }).then(function(configs){
var pos_config = configs[0];
self.set('pos_config', pos_config);
self.iface_electronic_scale = !!pos_config.iface_electronic_scale;
@@ -151,15 +151,15 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
self.iface_cashdrawer = !!pos_config.iface_cashdrawer;
return self.fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]);
- }).pipe(function(shops){
+ }).then(function(shops){
self.set('shop',shops[0]);
return self.fetch('product.packaging',['ean','product_id']);
- }).pipe(function(packagings){
+ }).then(function(packagings){
self.db.add_packagings(packagings);
return self.fetch('pos.category', ['id','name','parent_id','child_id','image'])
- }).pipe(function(categories){
+ }).then(function(categories){
self.db.add_categories(categories);
return self.fetch(
@@ -169,7 +169,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
[['pos_categ_id','!=', false],['sale_ok','=',true]],
{pricelist: self.get('shop').pricelist_id[0]} // context for price
);
- }).pipe(function(products){
+ }).then(function(products){
self.db.add_products(products);
return self.fetch(
@@ -177,11 +177,14 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
['account_id','currency','journal_id','state','name','user_id','pos_session_id'],
[['state','=','open'],['pos_session_id', '=', self.get('pos_session').id]]
);
- }).pipe(function(bank_statements){
+ }).then(function(bank_statements){
+ var journals = new Array();
+ _.each(bank_statements,function(statement) {
+ journals.push(statement.journal_id[0])
+ });
self.set('bank_statements', bank_statements);
-
- return self.fetch('account.journal', undefined, [['user_id','=', self.get('pos_session').user_id[0]]]);
- }).pipe(function(journals){
+ return self.fetch('account.journal', undefined, [['id','in', journals]]);
+ }).then(function(journals){
self.set('journals',journals);
// associate the bank statements with their journals.
@@ -317,7 +320,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
module.Product = Backbone.Model.extend({
get_image_url: function(){
- return '/web/binary/image?session_id='+instance.session.session_id+'&model=product.product&field=image&id='+this.get('id');
+ return instance.session.url('/web/binary/image', {model: 'product.product', field: 'image', id: this.get('id')});
},
});
@@ -462,7 +465,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
var product_list = this.pos.get('product_list');
var product = this.get_product();
- var taxes_ids = product.taxes_id;
+ var taxes_ids = product.get('taxes_id');;
var taxes = self.pos.get('taxes');
var taxtotal = 0;
_.each(taxes_ids, function(el) {
@@ -614,6 +617,11 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal
return sum + orderLine.get_price_with_tax();
}), 0);
},
+ getDiscountTotal: function() {
+ return (this.get('orderLines')).reduce((function(sum, orderLine) {
+ return sum + (orderLine.get_list_price() * (orderLine.get_discount()/100) * orderLine.get_quantity());
+ }), 0);
+ },
getTotalTaxExcluded: function() {
return (this.get('orderLines')).reduce((function(sum, orderLine) {
return sum + orderLine.get_price_without_tax();
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index bd174b12fda..0b8ab70a9c0 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -557,7 +557,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
setTimeout(function(){
var def = job.fun();
if(def){
- def.then(run);
+ def.done(run);
}else{
run();
}
@@ -615,7 +615,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
var def = new $.Deferred();
console.log("START");
self.pos.proxy.payment_request(self.pos.get('selectedOrder').getDueLeft())
- .then(function(ack){
+ .done(function(ack){
if(ack === 'ok'){
self.queue.schedule(self.update);
}else if(ack.indexOf('error') === 0){
@@ -638,7 +638,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
return def.resolve();
}
self.pos.proxy.payment_status()
- .then(function(status){
+ .done(function(status){
if(status.status === 'paid'){
var currentOrder = self.pos.get('selectedOrder');
@@ -941,8 +941,10 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
var self = this;
var x = new module.PaymentlineWidget(null, {
payment_line: newPaymentLine
- });
- x.on('delete_payment_line', self, self.deleteLine);
+ });
+ x.on('delete_payment_line', self, function(r) {
+ self.deleteLine(r);
+ });
x.appendTo(this.$('#paymentlines'));
},
renderElement: function() {
@@ -967,6 +969,9 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa
this.$('#payment-paid-total').html(paidTotal.toFixed(2));
this.$('#payment-remaining').html(remaining.toFixed(2));
this.$('#payment-change').html(change.toFixed(2));
+ if((currentOrder.selected_orderline == undefined))
+ remaining = 1
+
if(this.pos_widget.action_bar){
this.pos_widget.action_bar.set_button_disabled('validation', remaining > 0);
}
diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js
index 28ab79c65b2..4728c584b21 100644
--- a/addons/point_of_sale/static/src/js/widgets.js
+++ b/addons/point_of_sale/static/src/js/widgets.js
@@ -202,12 +202,8 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
this.currentOrderLines.bind('remove', this.renderElement, this);
},
update_numpad: function() {
- var reset = false;
- if (this.selected_line !== this.pos.get('selectedOrder').getSelectedLine()) {
- reset = true;
- }
this.selected_line = this.pos.get('selectedOrder').getSelectedLine();
- if (reset && this.numpadState)
+ if (this.numpadState)
this.numpadState.reset();
},
renderElement: function() {
@@ -319,7 +315,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
this._super();
this.$('input').keyup(_.bind(this.changeAmount, this));
this.$('.delete-payment-line').click(function() {
- self.trigger('delete_payment_line');
+ self.trigger('delete_payment_line', self);
});
},
});
@@ -478,7 +474,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
},
get_image_url: function(category){
- return '/web/binary/image?session_id='+instance.session.session_id+'&model=pos.category&field=image&id='+category.id;
+ return instance.session.url('/web/binary/image', {model: 'pos.category', field: 'image', id: category.id});
},
renderElement: function(){
@@ -810,7 +806,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
start: function() {
var self = this;
- return self.pos.ready.then(function() {
+ return self.pos.ready.done(function() {
self.build_currency_template();
self.renderElement();
@@ -849,7 +845,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
self.$('.loader').animate({opacity:0},1500,'swing',function(){self.$('.loader').hide();});
self.$('.loader img').hide();
- },function(){ // error when loading models data from the backend
+ }).fail(function(){ // error when loading models data from the backend
self.$('.loader img').hide();
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_pos_session_opening']], ['res_id'])
.pipe( _.bind(function(res){
@@ -1055,7 +1051,8 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
this.pos.barcode_reader.disconnect();
return new instance.web.Model("ir.model.data").get_func("search_read")([['name', '=', 'action_client_pos_menu']], ['res_id']).pipe(
_.bind(function(res) {
- return this.rpc('/web/action/load', {'action_id': res[0]['res_id']}).pipe(_.bind(function(action) {
+ return this.rpc('/web/action/load', {'action_id': res[0]['res_id']}).pipe(_.bind(function(result) {
+ var action = result;
action.context = _.extend(action.context || {}, {'cancel_action': {type: 'ir.actions.client', tag: 'reload'}});
//self.destroy();
this.do_action(action);
diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml
index 854dd61cc1b..986921af1c5 100644
--- a/addons/point_of_sale/static/src/xml/pos.xml
+++ b/addons/point_of_sale/static/src/xml/pos.xml
@@ -541,8 +541,9 @@
+
+ Date.CultureInfo.formatPatterns.longTime)"/>
Phone:
@@ -553,6 +554,11 @@
+
+
+ With a % discount
+
+
@@ -567,6 +573,9 @@
Tax:
+
Discount:
+
+
Total:
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index ca9331012b7..70b88f35e33 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -43,8 +43,6 @@ class account_journal(osv.osv):
return super(account_journal, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count)
-account_journal()
-
class pos_make_payment(osv.osv_memory):
_name = 'pos.make.payment'
_description = 'Point of Sale Payment'
@@ -77,7 +75,7 @@ class pos_make_payment(osv.osv_memory):
def launch_payment(self, cr, uid, ids, context=None):
return {
- 'name': _('Paiement'),
+ 'name': _('Payment'),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'pos.make.payment',
@@ -85,6 +83,7 @@ class pos_make_payment(osv.osv_memory):
'target': 'new',
'views': False,
'type': 'ir.actions.act_window',
+ 'context': context,
}
def print_report(self, cr, uid, ids, context=None):
diff --git a/addons/portal/mail_mail.py b/addons/portal/mail_mail.py
index f57170ed67b..0dc7348f2c8 100644
--- a/addons/portal/mail_mail.py
+++ b/addons/portal/mail_mail.py
@@ -36,5 +36,5 @@ class mail_mail(osv.Model):
if partner:
context = dict(context or {}, signup_valid=True)
partner = self.pool.get('res.partner').browse(cr, uid, partner.id, context)
- body = tools.append_content_to_html(body, "Log in our portal at: %s" % partner.signup_url)
+ body = tools.append_content_to_html(body, ("
Log in our portal at: %s
" % partner.signup_url), plaintext=False)
return body
diff --git a/addons/portal/portal_demo.xml b/addons/portal/portal_demo.xml
index e8d0fb4159b..fc20bbccae7 100644
--- a/addons/portal/portal_demo.xml
+++ b/addons/portal/portal_demo.xml
@@ -1,17 +1,22 @@
-
+
-
-
+
+ Demo Portal User
- portal
- portal
-
-
+ demo@portal.example.com
- demo@portal.wrong.address
+
+
+
+ portal
+ portal
+ --
+Mr Demo Portal
+
+
@@ -24,33 +29,41 @@
Our company's first blog-post !mail.group
- sit amet, consectetur adipiscing elit. Pellentesque et quam sapien, in sagittis tellus.
-Praesent vel massa sed massa consequat egestas in tristique orci. Praesent iaculis libero et neque vehicula iaculis. Vivamus placerat tincidunt orci ac ornare. Proin ut dolor fringilla velit ultricies consequat. Maecenas sit amet ipsum non leo interdum imperdiet. Donec sapien mi.
-
-Fusce tempus elit volutpat mi auctor adipiscing. Nam congue luctus suscipit. Sed tellus libero, venenatis ut mollis ut, luctus quis dui. Sed rhoncus pulvinar orci in consectetur.
-
-Nulla turpis leo, rhoncus ut egestas sit amet, consectetur vitae urna. Mauris in dolor in sapien tempus vehicula.]]>
+ Hello, and welcome to our company's portal !
+
It is a great pleasure to announce you the creation of our portal by writing this first news! As you may have seen, a new discussion group is now present under your 'My groups' menu: Company's News. We will post news about the company and its employees in this discussion group. Moreover, we will be able to communicate with our partners that are given the opportunity to join us in our portal.
+
A new era of communication has begun! Feel free to post your feelings about our portal by replying on this message!
]]>comment
+ mail.group
-
+ As your first portal member, I am very pleased to be able to be able to communicate directly with you. Be sure I'll read all news carefully!]]>comment
-
+
+ mail.group
-
+ That's good news! As said by Demo Portal User in the previous post, I'm looking forward to hearing from you!]]>comment
+
+
+
+
+
+ mail.group
+
+ This feature is realy great! We will be able to communicate directly to our partners!]]>
+
+ comment
+
diff --git a/addons/portal/tests/test_portal.py b/addons/portal/tests/test_portal.py
index 83b10b39c28..0a2772c9cfe 100644
--- a/addons/portal/tests/test_portal.py
+++ b/addons/portal/tests/test_portal.py
@@ -19,12 +19,12 @@
#
##############################################################################
-from openerp.addons.mail.tests import test_mail
-from openerp.tools import append_content_to_html
-from osv.orm import except_orm
+from openerp.addons.mail.tests import test_mail_mockup
+from openerp.osv.orm import except_orm
+from openerp.tools.misc import mute_logger
-class test_portal(test_mail.TestMailMockups):
+class test_portal(test_mail_mockup.TestMailMockups):
def setUp(self):
super(test_portal, self).setUp()
@@ -53,6 +53,7 @@ class test_portal(test_mail.TestMailMockups):
# Set an email address for the user running the tests, used as Sender for outgoing mails
self.res_users.write(cr, uid, uid, {'email': 'test@localhost'})
+ @mute_logger('openerp.addons.base.ir.ir_model')
def test_00_access_rights(self):
""" Test basic mail_message and mail_group access rights for portal users. """
cr, uid = self.cr, self.uid
diff --git a/addons/portal/wizard/portal_wizard.py b/addons/portal/wizard/portal_wizard.py
index c94d6509f63..bf8353c92c1 100644
--- a/addons/portal/wizard/portal_wizard.py
+++ b/addons/portal/wizard/portal_wizard.py
@@ -24,10 +24,9 @@ import random
from osv import osv, fields
from tools.translate import _
-from tools.misc import email_re
+from tools import email_re
from openerp import SUPERUSER_ID
-from base.res.res_partner import _lang_get
_logger = logging.getLogger(__name__)
# welcome email sent to portal users
diff --git a/addons/portal/wizard/share_wizard.py b/addons/portal/wizard/share_wizard.py
index b1b6e980dec..51e5e59eb0e 100644
--- a/addons/portal/wizard/share_wizard.py
+++ b/addons/portal/wizard/share_wizard.py
@@ -35,8 +35,8 @@ class share_wizard_portal(osv.TransientModel):
def _user_type_selection(self, cr, uid, context=None):
selection = super(share_wizard_portal, self)._user_type_selection(cr, uid, context=context)
- selection.extend([('existing','Users you already shared with'),
- ('groups','Existing Groups (e.g Portal Groups)')])
+ selection.extend([('existing',_('Users you already shared with')),
+ ('groups',_('Existing Groups (e.g Portal Groups)'))])
return selection
_columns = {
diff --git a/addons/portal_claim/portal_claim_view.xml b/addons/portal_claim/portal_claim_view.xml
index 86be0764d26..e08b39e476b 100644
--- a/addons/portal_claim/portal_claim_view.xml
+++ b/addons/portal_claim/portal_claim_view.xml
@@ -10,7 +10,14 @@
{"search_default_user_id":'', "stage_type":'claim'}
- Record and track your customers' claims. Claims may be linked to a sales order or a lot. You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on). Claims may automatically be linked to an email address using the mail gateway module.
+
+
+ Click to register a new claim.
+
+ You can track your claims from this menu and the action we
+ will take.
+
+ [('message_follower_ids','in', [user.partner_id.id])]
+
+
+
+
diff --git a/addons/portal_event/portal_event_view.xml b/addons/portal_event/portal_event_view.xml
index 1e046bc9e7f..5d2397f6148 100755
--- a/addons/portal_event/portal_event_view.xml
+++ b/addons/portal_event/portal_event_view.xml
@@ -13,7 +13,7 @@
kanban,calendar,tree,form,graph{"search_default_upcoming":1}
- No public events.
+ There are no public events.[('message_follower_ids','in', [user.partner_id.id])]
+
+
+
+
diff --git a/addons/portal_project_issue/security/portal_security.xml b/addons/portal_project_issue/security/portal_security.xml
index 9527f1f9628..a121eeb593e 100644
--- a/addons/portal_project_issue/security/portal_security.xml
+++ b/addons/portal_project_issue/security/portal_security.xml
@@ -7,6 +7,10 @@
[('message_follower_ids','in', [user.partner_id.id])]
+
+
+
+
diff --git a/addons/portal_sale/portal_sale_view.xml b/addons/portal_sale/portal_sale_view.xml
index 6b25d87b791..b46175f7feb 100644
--- a/addons/portal_sale/portal_sale_view.xml
+++ b/addons/portal_sale/portal_sale_view.xml
@@ -45,7 +45,7 @@
kanban,tree,form
- No public products.
+ There are no public products.
@@ -65,7 +65,7 @@
{'type':'receipt'}current
- You don't have any payment.
+ You don't have any refunds or payments.[('message_follower_ids','in',[user.partner_id.id])]
+
+
+
+
@@ -42,6 +46,7 @@
Portal Personal Contacts[('message_follower_ids','in',[user.partner_id.id])]
+
diff --git a/addons/process/__openerp__.py b/addons/process/__openerp__.py
index fcae18c5490..c998288a614 100644
--- a/addons/process/__openerp__.py
+++ b/addons/process/__openerp__.py
@@ -35,7 +35,7 @@ This module shows the basic processes involved in the selected modules and in th
""",
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
- 'depends': ['base'],
+ 'depends': ['web'],
'data': [
'security/ir.model.access.csv',
'process_view.xml'
diff --git a/addons/process/static/src/js/process.js b/addons/process/static/src/js/process.js
index 2405f6d2aa5..73ca4396ce6 100644
--- a/addons/process/static/src/js/process.js
+++ b/addons/process/static/src/js/process.js
@@ -20,7 +20,7 @@ instance.web.ViewManager.include({
if(this.active_view == 'form') {
this.record_id = this.views[this.active_view].controller.datarecord.id;
}
- this.process_get_object().pipe(function(process) {
+ this.process_get_object().then(function(process) {
if(process && process.length) {
if(process.length > 1) {
self.process_selection = process;
@@ -30,7 +30,7 @@ instance.web.ViewManager.include({
}
}
return $.Deferred().resolve();
- }).pipe(function() {
+ }).then(function() {
var def = $.Deferred();
if(self.process_id) {
$.when(self.process_graph_get()).done(function(res) {
@@ -221,12 +221,12 @@ instance.web.ViewManager.include({
var dataset = new instance.web.DataSet(this, 'ir.values', this.session.user_context);
var action_manager = new instance.web.ActionManager(self);
dataset.call('get',
- ['action', 'tree_but_open',[['ir.ui.menu', id]], dataset.context]).then(function(res) {
+ ['action', 'tree_but_open',[['ir.ui.menu', id]], dataset.context]).done(function(res) {
var action = res[0][res[0].length - 1];
self.rpc("/web/action/load", {
action_id: action.id,
context: dataset.context
- }).then(function(result) {
+ }).done(function(result) {
action_manager.replace(self.$el);
action_manager.do_action(result.result);
})
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 55a291bd3c2..c166f79e524 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -561,10 +561,10 @@ class stock_warehouse_orderpoint(osv.osv):
'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True),
'product_min_qty': fields.float('Minimum Quantity', required=True,
help="When the virtual stock goes below the Min Quantity specified for this field, OpenERP generates "\
- "a procurement to bring the virtual stock to the Max Quantity."),
+ "a procurement to bring the forecasted quantity to the Max Quantity."),
'product_max_qty': fields.float('Maximum Quantity', required=True,
help="When the virtual stock goes below the Min Quantity, OpenERP generates "\
- "a procurement to bring the virtual stock to the Quantity specified as Max Quantity."),
+ "a procurement to bring the forecasted quantity to the Quantity specified as Max Quantity."),
'qty_multiple': fields.integer('Qty Multiple', required=True,
help="The procurement quantity will be rounded up to this multiple."),
'procurement_id': fields.many2one('procurement.order', 'Latest procurement', ondelete="set null"),
@@ -633,9 +633,9 @@ class product_template(osv.osv):
_inherit="product.template"
_columns = {
- 'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
- 'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
- 'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
+ 'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable: Will not imply stock management for this product. \nStockable product: Will imply stock management for this product."),
+ 'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="Make to Stock: When needed, the product is taken from the stock or we wait for replenishment. \nMake to Order: When needed, the product is purchased or produced."),
+ 'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Manufacture: When procuring the product, a manufacturing order or a task will be generated, depending on the product type. \nBuy: When procuring the product, a purchase order will be generated."),
}
_defaults = {
'procure_method': 'make_to_stock',
diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py
index 1c8ac5934fc..0c96bf1e689 100644
--- a/addons/procurement/schedulers.py
+++ b/addons/procurement/schedulers.py
@@ -197,6 +197,12 @@ class procurement_order(osv.osv):
'location_id': orderpoint.location_id.id,
'procure_method': 'make_to_order',
'origin': orderpoint.name}
+
+ def _product_virtual_get(self, cr, uid, order_point):
+ location_obj = self.pool.get('stock.location')
+ return location_obj._product_virtual_get(cr, uid,
+ order_point.location_id.id, [order_point.product_id.id],
+ {'uom': order_point.product_uom.id})[order_point.product_id.id]
def _procure_orderpoint_confirm(self, cr, uid, automatic=False,\
use_new_cursor=False, context=None, user_id=False):
@@ -217,7 +223,7 @@ class procurement_order(osv.osv):
if use_new_cursor:
cr = pooler.get_db(use_new_cursor).cursor()
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
- location_obj = self.pool.get('stock.location')
+
procurement_obj = self.pool.get('procurement.order')
wf_service = netsvc.LocalService("workflow")
offset = 0
@@ -227,14 +233,9 @@ class procurement_order(osv.osv):
while ids:
ids = orderpoint_obj.search(cr, uid, [], offset=offset, limit=100)
for op in orderpoint_obj.browse(cr, uid, ids, context=context):
- if op.procurement_id.state != 'exception':
- if op.procurement_id and hasattr(op.procurement_id, 'purchase_id'):
- if op.procurement_id.purchase_id.state in ('draft', 'confirmed'):
- continue
- prods = location_obj._product_virtual_get(cr, uid,
- op.location_id.id, [op.product_id.id],
- {'uom': op.product_uom.id})[op.product_id.id]
-
+ prods = self._product_virtual_get(cr, uid, op)
+ if prods is None:
+ continue
if prods < op.product_min_qty:
qty = max(op.product_min_qty, op.product_max_qty)-prods
diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py
index f5c69c7acf7..60736323054 100644
--- a/addons/product/pricelist.py
+++ b/addons/product/pricelist.py
@@ -95,7 +95,7 @@ class product_pricelist(osv.osv):
_description = "Pricelist"
_columns = {
'name': fields.char('Pricelist Name',size=64, required=True, translate=True),
- 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the pricelist without removing it."),
+ 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the pricelist without removing it."),
'type': fields.selection(_pricelist_type_get, 'Pricelist Type', required=True),
'version_id': fields.one2many('product.pricelist.version', 'pricelist_id', 'Pricelist Versions'),
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
@@ -319,8 +319,8 @@ class product_pricelist_version(osv.osv):
"and reactivate the pricelist"),
'items_id': fields.one2many('product.pricelist.item',
'price_version_id', 'Price List Items', required=True),
- 'date_start': fields.date('Start Date', help="Starting date for this pricelist version to be valid."),
- 'date_end': fields.date('End Date', help="Ending date for this pricelist version to be valid."),
+ 'date_start': fields.date('Start Date', help="First valid date for the version."),
+ 'date_end': fields.date('End Date', help="Last valid date for the version."),
'company_id': fields.related('pricelist_id','company_id',type='many2one',
readonly=True, relation='res.company', string='Company', store=True)
}
@@ -403,13 +403,13 @@ class product_pricelist_item(osv.osv):
_columns = {
'name': fields.char('Rule Name', size=64, help="Explicit rule name for this pricelist line."),
'price_version_id': fields.many2one('product.pricelist.version', 'Price List Version', required=True, select=True, ondelete='cascade'),
- 'product_tmpl_id': fields.many2one('product.template', 'Product Template', ondelete='cascade', help="Set a template if this rule only apply to a template of product. Keep empty for all products"),
- 'product_id': fields.many2one('product.product', 'Product', ondelete='cascade', help="Set a product if this rule only apply to one product. Keep empty for all products"),
- 'categ_id': fields.many2one('product.category', 'Product Category', ondelete='cascade', help="Set a category of product if this rule only apply to products of a category and his children. Keep empty for all products"),
+ 'product_tmpl_id': fields.many2one('product.template', 'Product Template', ondelete='cascade', help="Specify a template if this rule only applies to one product template. Keep empty otherwise."),
+ 'product_id': fields.many2one('product.product', 'Product', ondelete='cascade', help="Specify a product if this rule only applies to one product. Keep empty otherwise."),
+ 'categ_id': fields.many2one('product.category', 'Product Category', ondelete='cascade', help="Specify a product category if this rule only applies to products belonging to this category or its children categories. Keep empty otherwise."),
- 'min_quantity': fields.integer('Min. Quantity', required=True, help="The rule only applies if the partner buys/sells equal to or more than this quantity."),
+ 'min_quantity': fields.integer('Min. Quantity', required=True, help="Specify the minimum quantity that needs to be bought/sold for the rule to apply."),
'sequence': fields.integer('Sequence', required=True, help="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."),
- 'base': fields.selection(_price_field_get, 'Based on', required=True, size=-1, help="The mode for computing the price for this rule."),
+ 'base': fields.selection(_price_field_get, 'Based on', required=True, size=-1, help="Base price for computation."),
'base_pricelist_id': fields.many2one('product.pricelist', 'Other Pricelist'),
'price_surcharge': fields.float('Price Surcharge',
diff --git a/addons/product/product.py b/addons/product/product.py
index 6c6c5f2650c..27cd4249a60 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -111,9 +111,9 @@ class product_uom(osv.osv):
_columns = {
'name': fields.char('Unit of Measure', size=64, required=True, translate=True),
'category_id': fields.many2one('product.uom.categ', 'Category', required=True, ondelete='cascade',
- help="Quantity conversions may happen automatically between Units of Measure in the same category, according to their respective ratios."),
+ help="Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios."),
'factor': fields.float('Ratio', required=True,digits=(12, 12),
- help='How many times this Unit of Measure is smaller than the reference Unit of Measure in this category:\n'\
+ help='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)'),
'factor_inv': fields.function(_factor_inv, digits=(12,12),
fnct_inv=_factor_inv_write,
@@ -233,7 +233,7 @@ class product_category(osv.osv):
'parent_id': fields.many2one('product.category','Parent Category', select=True, ondelete='cascade'),
'child_id': fields.one2many('product.category', 'parent_id', string='Child Categories'),
'sequence': fields.integer('Sequence', select=True, help="Gives the sequence order when displaying a list of product categories."),
- 'type': fields.selection([('view','View'), ('normal','Normal')], 'Category Type'),
+ 'type': fields.selection([('view','View'), ('normal','Normal')], 'Category Type', help="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."),
'parent_left': fields.integer('Left Parent', select=1),
'parent_right': fields.integer('Right Parent', select=1),
}
@@ -276,34 +276,34 @@ class product_template(osv.osv):
_columns = {
'name': fields.char('Name', size=128, required=True, translate=True, select=True),
- 'product_manager': fields.many2one('res.users','Product Manager',help="Responsible for product."),
+ 'product_manager': fields.many2one('res.users','Product Manager'),
'description': fields.text('Description',translate=True),
'description_purchase': fields.text('Purchase Description',translate=True),
'description_sale': fields.text('Sale Description',translate=True),
'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
- 'produce_delay': fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. This is only for the production order and, if it is a multi-level bill of material, it's only for the level of this product. Different lead times will be summed for all levels and purchase orders."),
+ 'produce_delay': fields.float('Manufacturing Lead Time', help="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."),
'rental': fields.boolean('Can be Rent'),
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
- 'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
- 'standard_price': fields.float('Cost', digits_compute=dp.get_precision('Product Price'), help="Product's cost for accounting stock valuation. It is the base price for the supplier price.", groups="base.group_user"),
+ 'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price to compute the customer price. Sometimes called the catalog price."),
+ 'standard_price': fields.float('Cost', digits_compute=dp.get_precision('Product Price'), help="Cost price of the product used for standard stock valuation in accounting and used as a base price on purchase orders.", groups="base.group_user"),
'volume': fields.float('Volume', help="The volume in m3."),
'weight': fields.float('Gross Weight', digits_compute=dp.get_precision('Stock Weight'), help="The gross weight in Kg."),
'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."),
'cost_method': fields.selection([('standard','Standard Price'), ('average','Average Price')], 'Costing Method', required=True,
- help="Standard Price: the cost price is fixed and recomputed periodically (usually at the end of the year), Average Price: the cost price is recomputed at each reception of products."),
+ help="Standard Price: The cost price is manually updated at the end of a specific period (usually every year). \nAverage Price: The cost price is recomputed at each incoming shipment."),
'warranty': fields.float('Warranty'),
- 'sale_ok': fields.boolean('Can be Sold', help="Determines if the product can be visible in the list of product within a selection from a sale order line."),
+ 'sale_ok': fields.boolean('Can be Sold', help="Specify if the product can be selected in a sales order line."),
'state': fields.selection([('',''),
('draft', 'In Development'),
('sellable','Normal'),
('end','End of Lifecycle'),
- ('obsolete','Obsolete')], 'Status', help="Tells the user if he can use the product or not."),
+ ('obsolete','Obsolete')], 'Status'),
'uom_id': fields.many2one('product.uom', 'Unit of Measure', required=True, help="Default Unit of Measure used for all stock operation."),
'uom_po_id': fields.many2one('product.uom', 'Purchase Unit of Measure', required=True, help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."),
'uos_id' : fields.many2one('product.uom', 'Unit of Sale',
- help='Used by companies that manage two units of measure: invoicing and inventory management. For example, in food industries, you will manage a stock of ham but invoice in Kg. Keep empty to use the default Unit of Measure.'),
+ help='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.'),
'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'),
- help='Coefficient to convert Unit of Measure to UOS\n'
+ 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', 'Partners'),
@@ -527,10 +527,10 @@ class product_product(osv.osv):
'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),
- 'active': fields.boolean('Active', help="If the active field is set to False, it will allow you to hide the product without removing it."),
+ 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."),
'variants': fields.char('Variants', size=64),
'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade"),
- 'ean13': fields.char('EAN13 Barcode', size=13, help="The numbers encoded in EAN-13 bar codes are product identification numbers."),
+ 'ean13': fields.char('EAN13 Barcode', size=13, help="International Article Number used for product identification."),
'packaging' : fields.one2many('product.packaging', 'product_id', 'Logistical Units', help="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."),
'price_extra': fields.float('Variant Price Extra', digits_compute=dp.get_precision('Product Price')),
'price_margin': fields.float('Variant Price Margin', digits_compute=dp.get_precision('Product Price')),
@@ -657,9 +657,9 @@ class product_product(osv.osv):
# Performing a quick memory merge of ids in Python will give much better performance
ids = set()
ids.update(self.search(cr, user, args + [('default_code',operator,name)], limit=limit, context=context))
- if len(ids) < limit:
+ if not limit or len(ids) < limit:
# we may underrun the limit because of dupes in the results, that's fine
- ids.update(self.search(cr, user, args + [('name',operator,name)], limit=(limit-len(ids)), context=context))
+ ids.update(self.search(cr, user, args + [('name',operator,name)], limit=(limit and (limit-len(ids)) or False) , context=context))
ids = list(ids)
if not ids:
ptrn = re.compile('(\[(.*?)\])')
@@ -763,8 +763,7 @@ class product_packaging(osv.osv):
help="The code of the transport unit."),
'weight': fields.float('Total Package Weight',
help='The weight of a full package, pallet or box.'),
- 'weight_ul': fields.float('Empty Package Weight',
- help='The weight of the empty UL'),
+ 'weight_ul': fields.float('Empty Package Weight'),
'height': fields.float('Height', help='The height of the package'),
'width': fields.float('Width', help='The width of the package'),
'length': fields.float('Length', help='The length of the package'),
diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml
index 14477d2401a..fead62f8521 100644
--- a/addons/product/product_demo.xml
+++ b/addons/product/product_demo.xml
@@ -96,7 +96,6 @@
consu
- 4.017" LCD Monitor
Processor AMD 8-Core
512MB RAM
@@ -113,7 +112,6 @@ HDD SH-1
- 4.019" LCD Monitor
Processor Core i5 2.70 Ghz
2GB RAM
@@ -129,7 +127,6 @@ HDD SH-1consu
- 7.0Custom computer assembled on order based on customer's requirement.
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 028e416984b..7b4197305d4 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -96,7 +96,7 @@
-
+
@@ -318,17 +318,11 @@
-
+
-
-
-
-
-
-
diff --git a/addons/product_expiry/product_expiry.py b/addons/product_expiry/product_expiry.py
index c16ccc2b1ee..e4ed28db4e6 100644
--- a/addons/product_expiry/product_expiry.py
+++ b/addons/product_expiry/product_expiry.py
@@ -45,12 +45,13 @@ class stock_production_lot(osv.osv):
_columns = {
'life_date': fields.datetime('End of Life Date',
- help='The date on which the lot may become dangerous and should not be consumed.'),
+ help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.'),
'use_date': fields.datetime('Best before Date',
- help='The date on which the lot starts deteriorating without becoming dangerous.'),
+ help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.'),
'removal_date': fields.datetime('Removal Date',
- help='The date on which the lot should be removed.'),
- 'alert_date': fields.datetime('Alert Date', help="The date on which an alert should be notified about the serial number."),
+ help='This is the date on which the goods with this Serial Number should be removed from the stock.'),
+ 'alert_date': fields.datetime('Alert Date',
+ help="This is the date on which an alert should be notified about the goods with this Serial Number."),
}
# Assign dates according to products data
def create(self, cr, uid, vals, context=None):
@@ -78,12 +79,13 @@ class product_product(osv.osv):
_inherit = 'product.product'
_columns = {
'life_time': fields.integer('Product Life Time',
- help='The number of days before a serial number may become dangerous and should not be consumed.'),
+ help='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.'),
'use_time': fields.integer('Product Use Time',
- help='The number of days before a serial number starts deteriorating without becoming dangerous.'),
+ help='When a new a Serial Number is issued, this is the number of days before the goods starts deteriorating, without being dangerous yet.'),
'removal_time': fields.integer('Product Removal Time',
- help='The number of days before a serial number should be removed.'),
- 'alert_time': fields.integer('Product Alert Time', help="The number of days after which an alert should be notified about the serial number."),
+ help='When a new a Serial Number is issued, this is the number of days before the goods should be removed from the stock.'),
+ 'alert_time': fields.integer('Product Alert Time',
+ help='When a new a Serial Number is issued, this is the number of days before an alert should be notified.'),
}
product_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/product_margin/product_margin.py b/addons/product_margin/product_margin.py
index 4c033a4a6ca..c06c4971474 100644
--- a/addons/product_margin/product_margin.py
+++ b/addons/product_margin/product_margin.py
@@ -56,11 +56,12 @@ class product_product(osv.osv):
sum(l.price_unit * l.quantity)/sum(l.quantity) as avg_unit_price,
sum(l.quantity) as num_qty,
sum(l.quantity * (l.price_subtotal/l.quantity)) as total,
- sum(l.quantity * product.list_price) as sale_expected,
- sum(l.quantity * product.standard_price) as normal_cost
+ sum(l.quantity * pt.list_price) as sale_expected,
+ sum(l.quantity * pt.standard_price) as normal_cost
from account_invoice_line l
left join account_invoice i on (l.invoice_id = i.id)
- left join product_template product on (product.id=l.product_id)
+ left join product_product product on (product.id=l.product_id)
+ left join product_template pt on (pt.id=product.product_tmpl_id)
where l.product_id = %s and i.state in %s and i.type IN %s and (i.date_invoice IS NULL or (i.date_invoice>=%s and i.date_invoice<=%s))
"""
invoice_types = ('out_invoice', 'in_refund')
diff --git a/addons/product_visible_discount/i18n/lt.po b/addons/product_visible_discount/i18n/lt.po
new file mode 100644
index 00000000000..da70b62c1dd
--- /dev/null
+++ b/addons/product_visible_discount/i18n/lt.po
@@ -0,0 +1,62 @@
+# Lithuanian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:37+0000\n"
+"PO-Revision-Date: 2012-11-15 13:54+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Lithuanian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-11-16 04:36+0000\n"
+"X-Generator: Launchpad (build 16272)\n"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:153
+#, python-format
+msgid "No Sale Pricelist Found!"
+msgstr ""
+
+#. module: product_visible_discount
+#: field:product.pricelist,visible_discount:0
+msgid "Visible Discount"
+msgstr "Matoma Nuolaida"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:145
+#, python-format
+msgid "No Purchase Pricelist Found!"
+msgstr "Nerastas pirkimo kainoraštis !"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "Sąskaitos eilutė"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_product_pricelist
+msgid "Pricelist"
+msgstr "Kainoraštis"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:145
+#, python-format
+msgid "You must first define a pricelist on the supplier form!"
+msgstr "Pirma turite aprašyti kainoraštį tiekėjo formoje !"
+
+#. module: product_visible_discount
+#: model:ir.model,name:product_visible_discount.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Pardavimo užsakymo eilutė"
+
+#. module: product_visible_discount
+#: code:addons/product_visible_discount/product_visible_discount.py:153
+#, python-format
+msgid "You must first define a pricelist on the customer form!"
+msgstr "Pirma turite aprašyti kainoraštį pirkėjo formoje !"
diff --git a/addons/product_visible_discount/product_visible_discount.py b/addons/product_visible_discount/product_visible_discount.py
index 48e3c4a8283..008c1f313a6 100644
--- a/addons/product_visible_discount/product_visible_discount.py
+++ b/addons/product_visible_discount/product_visible_discount.py
@@ -111,9 +111,11 @@ class account_invoice_line(osv.osv):
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
+ 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)
diff --git a/addons/project/project.py b/addons/project/project.py
index 3b0057c67b7..9c28fadeab9 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -166,19 +166,30 @@ class project(osv.osv):
res[id]['progress_rate'] = 0.0
return res
- def unlink(self, cr, uid, ids, *args, **kwargs):
+ def unlink(self, cr, uid, ids, context=None):
alias_ids = []
mail_alias = self.pool.get('mail.alias')
- for proj in self.browse(cr, uid, ids):
+ for proj in self.browse(cr, uid, ids, context=context):
if proj.tasks:
raise osv.except_osv(_('Invalid Action!'),
_('You cannot delete a project containing tasks. You can either delete all the project\'s tasks and then delete the project or simply deactivate the project.'))
elif proj.alias_id:
alias_ids.append(proj.alias_id.id)
- res = super(project, self).unlink(cr, uid, ids, *args, **kwargs)
- mail_alias.unlink(cr, uid, alias_ids, *args, **kwargs)
+ res = super(project, self).unlink(cr, uid, ids, context=context)
+ mail_alias.unlink(cr, uid, alias_ids, context=context)
return res
-
+
+ def _get_attached_docs(self, cr, uid, ids, field_name, arg, context):
+ res = {}
+ attachment = self.pool.get('ir.attachment')
+ task = self.pool.get('project.task')
+ for id in ids:
+ project_attachments = attachment.search(cr, uid, [('res_model', '=', 'project.project'), ('res_id', 'in', [id])], context=context, count=True)
+ task_ids = task.search(cr, uid, [('project_id', 'in', [id])], context=context)
+ task_attachments = attachment.search(cr, uid, [('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)], context=context, count=True)
+ res[id] = project_attachments or 0 + task_attachments or 0
+ return res
+
def _task_count(self, cr, uid, ids, field_name, arg, context=None):
res = dict.fromkeys(ids, 0)
task_ids = self.pool.get('project.task').search(cr, uid, [('project_id', 'in', ids)])
@@ -189,7 +200,26 @@ class project(osv.osv):
def _get_alias_models(self, cr, uid, context=None):
"""Overriden in project_issue to offer more options"""
return [('project.task', "Tasks")]
-
+
+ def attachment_tree_view(self, cr, uid, ids, context):
+ task_ids = self.pool.get('project.task').search(cr, uid, [('project_id', 'in', ids)])
+ domain = [
+ '|',
+ '&', ('res_model', '=', 'project.project'), ('res_id', 'in', ids),
+ '&', ('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)
+ ]
+ res_id = ids and ids[0] or False
+ return {
+ 'name': _('Attachments'),
+ 'domain': domain,
+ 'res_model': 'ir.attachment',
+ 'type': 'ir.actions.act_window',
+ 'view_id': False,
+ 'view_mode': 'tree,form',
+ 'view_type': 'form',
+ 'limit': 80,
+ 'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, res_id)
+ }
# Lambda indirection method to avoid passing a copy of the overridable method when declaring the field
_alias_models = lambda self, *args, **kwargs: self._get_alias_models(*args, **kwargs)
_columns = {
@@ -232,6 +262,7 @@ class project(osv.osv):
help="The kind of document created when an email is received on this project's email alias"),
'privacy_visibility': fields.selection([('public','Public'), ('followers','Followers Only')], 'Privacy / Visibility', required=True),
'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','Pending'),('close','Closed')], 'Status', required=True,),
+ 'doc_count':fields.function(_get_attached_docs, string="Number of documents attached", type='int')
}
def _get_type_common(self, cr, uid, context):
@@ -443,7 +474,7 @@ def Project():
resource = %s
""" % (
project.id,
- project.date_start, working_days,
+ project.date_start or time.strftime('%Y-%m-%d'), working_days,
'|'.join(['User_'+str(x) for x in puids])
)
vacation = calendar_id and tuple(resource_pool.compute_vacation(cr, uid, calendar_id, context=context)) or False
@@ -728,11 +759,11 @@ class task(base_stage, osv.osv):
If the case needs to be reviewed then the status is \
set to \'Pending\'.'),
'categ_ids': fields.many2many('project.category', string='Tags'),
- 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State',
+ 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State',
help="A task's kanban state indicates special situations affecting it:\n"
" * Normal is the default situation\n"
" * Blocked indicates something is preventing the progress of this task\n"
- " * Ready To Pull indicates the task is ready to be pulled to the next stage",
+ " * Ready for next stage indicates the task is ready to be pulled to the next stage",
readonly=True, required=False),
'create_date': fields.datetime('Create Date', readonly=True,select=True),
'date_start': fields.datetime('Starting Date',select=True),
@@ -792,6 +823,11 @@ class task(base_stage, osv.osv):
"""
return self.write(cr, uid, ids, {'priority' : priority})
+ def set_very_high_priority(self, cr, uid, ids, *args):
+ """Set task priority to very high
+ """
+ return self.set_priority(cr, uid, ids, '0')
+
def set_high_priority(self, cr, uid, ids, *args):
"""Set task priority to high
"""
@@ -1093,13 +1129,36 @@ class task(base_stage, osv.osv):
}, context=context)
return True
+ def _subscribe_project_followers_to_task(self, cr, uid, task_id, context=None):
+ """ TDE note: not the best way to do this, we could override _get_followers
+ of task, and perform a better mapping of subtypes than a mapping
+ based on names.
+ However we will keep this implementation, maybe to be refactored
+ in 7.1 of future versions. """
+ # task followers are project followers, with matching subtypes
+ task_record = self.browse(cr, uid, task_id, context=context)
+ subtype_obj = self.pool.get('mail.message.subtype')
+ follower_obj = self.pool.get('mail.followers')
+ if task_record.project_id:
+ # create mapping
+ task_subtype_ids = subtype_obj.search(cr, uid, ['|', ('res_model', '=', False), ('res_model', '=', self._name)], context=context)
+ task_subtypes = subtype_obj.browse(cr, uid, task_subtype_ids, context=context)
+ # fetch subscriptions
+ follower_ids = follower_obj.search(cr, uid, [('res_model', '=', 'project.project'), ('res_id', '=', task_record.project_id.id)], context=context)
+ # copy followers
+ for follower in follower_obj.browse(cr, uid, follower_ids, context=context):
+ if not follower.subtype_ids:
+ continue
+ project_subtype_names = [project_subtype.name for project_subtype in follower.subtype_ids]
+ task_subtype_ids = [task_subtype.id for task_subtype in task_subtypes if task_subtype.name in project_subtype_names]
+ self.message_subscribe(cr, uid, [task_id], [follower.partner_id.id],
+ subtype_ids=task_subtype_ids, context=context)
+
def create(self, cr, uid, vals, context=None):
task_id = super(task, self).create(cr, uid, vals, context=context)
- task_record = self.browse(cr, uid, task_id, context=context)
- if task_record.project_id:
- project_follower_ids = [follower.id for follower in task_record.project_id.message_follower_ids]
- self.message_subscribe(cr, uid, [task_id], project_follower_ids,
- context=context)
+ # subscribe project followers to the task
+ self._subscribe_project_followers_to_task(cr, uid, task_id, context=context)
+
self._store_history(cr, uid, [task_id], context=context)
self.create_send_note(cr, uid, [task_id], context=context)
return task_id
@@ -1109,9 +1168,6 @@ class task(base_stage, osv.osv):
def write(self, cr, uid, ids, vals, context=None):
if isinstance(ids, (int, long)):
ids = [ids]
- if vals.get('project_id'):
- project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context)
- vals['message_follower_ids'] = [(4, follower.id) for follower in project_id.message_follower_ids]
if vals and not 'kanban_state' in vals and 'stage_id' in vals:
new_stage = vals.get('stage_id')
vals_reset_kstate = dict(vals, kanban_state='normal')
@@ -1121,13 +1177,18 @@ class task(base_stage, osv.osv):
#if new_stage not in stages:
#raise osv.except_osv(_('Warning!'), _('Stage is not defined in the project.'))
write_vals = vals_reset_kstate if t.stage_id != new_stage else vals
- super(task,self).write(cr, uid, [t.id], write_vals, context=context)
+ super(task, self).write(cr, uid, [t.id], write_vals, context=context)
self.stage_set_send_note(cr, uid, [t.id], new_stage, context=context)
result = True
else:
- result = super(task,self).write(cr, uid, ids, vals, context=context)
+ result = super(task, self).write(cr, uid, ids, vals, context=context)
if ('stage_id' in vals) or ('remaining_hours' in vals) or ('user_id' in vals) or ('state' in vals) or ('kanban_state' in vals):
self._store_history(cr, uid, ids, context=context)
+
+ # subscribe new project followers to the task
+ if vals.get('project_id'):
+ for id in ids:
+ self._subscribe_project_followers_to_task(cr, uid, id, context=context)
return result
def unlink(self, cr, uid, ids, context=None):
@@ -1244,7 +1305,17 @@ class task(base_stage, osv.osv):
msg = _('Task has been delegated to %s.') % (task.user_id.name)
self.message_post(cr, uid, [task.id], body=msg, context=context)
return True
-
+
+ def project_task_reevaluate(self, cr, uid, ids, context=None):
+ if self.pool.get('res.users').has_group(cr, uid, 'project.group_time_work_estimation_tasks'):
+ return {
+ 'view_type': 'form',
+ "view_mode": 'form',
+ 'res_model': 'project.task.reevaluate',
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+ return self.do_reopen(cr, uid, ids, context=context)
class project_work(osv.osv):
_name = "project.task.work"
@@ -1289,7 +1360,7 @@ class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
_columns = {
- 'use_tasks': fields.boolean('Tasks',help="If check,this contract will be available in the project menu and you will be able to manage tasks or track issues"),
+ 'use_tasks': fields.boolean('Tasks',help="If checked, this contract will be available in the project menu and you will be able to manage tasks or track issues"),
'company_uom_id': fields.related('company_id', 'project_time_mode_id', type='many2one', relation='product.uom'),
}
@@ -1398,7 +1469,7 @@ class project_task_history(osv.osv):
'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True, select=True),
'type_id': fields.many2one('project.task.type', 'Stage'),
'state': fields.selection([('draft', 'New'), ('cancelled', 'Cancelled'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done')], 'Status'),
- 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready To Pull')], 'Kanban State', required=False),
+ 'kanban_state': fields.selection([('normal', 'Normal'),('blocked', 'Blocked'),('done', 'Ready for next stage')], 'Kanban State', required=False),
'date': fields.date('Date', select=True),
'end_date': fields.function(_get_date, string='End Date', type="date", store={
'project.task.history': (_get_related_date, None, 20)
diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml
index 560c1c3552a..08981bd126a 100644
--- a/addons/project/project_data.xml
+++ b/addons/project/project_data.xml
@@ -86,37 +86,37 @@
- New Task
+ Newproject.project
- Task Closed
+ Closedproject.project
- Task Canceled
- project.task
+ Canceled
+ project.project
- Task Stage Changed
- project.task
+ Stage Changed
+ project.project
- New Task
+ Newproject.task
- Task Closed
+ Closedproject.task
- Task canceled
+ Canceledproject.task
- Task Stage Changed
+ Stage Changedproject.task
@@ -125,11 +125,11 @@
mail.groupnotification
+ Project Management application installed!
- Manage multi-level projects and tasks. You can delegate tasks, track task work, and review your planning.
-
-You can manage todo lists on tasks by installing the "Todo Lists" application, supporting the Getting Things Done (GTD) methodology.
-You can also manage issues/bugs in projects by installing the "Issue Tracker" application.
+ Manage multi-level projects and tasks. You can delegate tasks, track task work, and review your planning.
+
You can manage todo lists on tasks by installing the Todo Lists application, supporting the Getting Things Done (GTD) methodology.
+
You can also manage issues/bugs in projects by installing the "Issue Tracker" application.
+
-
-
-
-
-
@@ -380,7 +376,9 @@
- Issues
+ Issues
+ Issue
+
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 6bee4e38842..47ea91fad5f 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -63,7 +63,6 @@
-
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 69fe335c1b0..18e471ddd40 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -120,7 +120,10 @@
Phases()
+ name="%(act_project_phases)d" type="action">
+ Phases
+ Phase
+
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index fe4b848f522..439ff6d835d 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -86,7 +86,7 @@ class project_work(osv.osv):
emp = emp_obj.browse(cr, uid, emp_id[0])
if not emp.product_id:
raise osv.except_osv(_('Bad Configuration !'),
- _('Please define product on the related employee.\nFill in the timesheet tab of the employee form.'))
+ _('Please define product and product category property account on the related employee.\nFill in the HR Settings tab of the employee form.'))
if not emp.journal_id:
raise osv.except_osv(_('Bad Configuration !'),
diff --git a/addons/project_timesheet/project_timesheet_view.xml b/addons/project_timesheet/project_timesheet_view.xml
index 81935b3434b..b8f5675891c 100644
--- a/addons/project_timesheet/project_timesheet_view.xml
+++ b/addons/project_timesheet/project_timesheet_view.xml
@@ -86,11 +86,9 @@
{'search_default_to_invoice': 1}
-
- Click to add a work to invoice.
-
- You will find here all works made on tasks that you can
- invoice.
+
+ You will find here timesheets and purchases you did for contracts that can be reinvoiced to the customer.
+ If you want to record new jobs to invoice, you should use the timesheet menu instead.
diff --git a/addons/purchase/edi/purchase_order_action_data.xml b/addons/purchase/edi/purchase_order_action_data.xml
index daad4467929..fab7eeacf6c 100644
--- a/addons/purchase/edi/purchase_order_action_data.xml
+++ b/addons/purchase/edi/purchase_order_action_data.xml
@@ -40,7 +40,7 @@
Automated Purchase Order Notification Mail${object.validator.email or ''}${object.company_id.name} Order (Ref ${object.name or 'n/a' })
- ${object.partner_id.email}
+ ${object.partner_id.id}1:
+ result['domain'] = "[('id','in',["+','.join(map(str, inv_ids))+"])]"
+ else:
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
+ result['views'] = [(res and res[1] or False, 'form')]
+ result['res_id'] = inv_ids and inv_ids[0] or False
+ return result
+
def view_invoice(self, cr, uid, ids, context=None):
'''
This function returns an action that display existing invoices of given sale order ids. It can either be a in a list or in a form view, if there is only one invoice to show.
@@ -361,6 +395,7 @@ class purchase_order(osv.osv):
'default_res_id': ids[0],
'default_use_template': True,
'default_template_id': template_id,
+ 'default_composition_mode': 'comment',
})
return {
'view_type': 'form',
@@ -534,7 +569,6 @@ class purchase_order(osv.osv):
'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none',
'type': 'in',
'partner_id': order.dest_address_id.id or order.partner_id.id,
- 'invoice_state': '2binvoiced' if order.invoice_method == 'picking' else 'none',
'purchase_id': order.id,
'company_id': order.company_id.id,
'move_lines' : [],
@@ -790,7 +824,7 @@ class purchase_order_line(osv.osv):
cur_obj=self.pool.get('res.currency')
tax_obj = self.pool.get('account.tax')
for line in self.browse(cr, uid, ids, context=context):
- taxes = tax_obj.compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty)
+ taxes = tax_obj.compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, line.product_id, line.order_id.partner_id)
cur = line.order_id.pricelist_id.currency_id
res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
return res
@@ -890,14 +924,16 @@ class purchase_order_line(osv.osv):
account_tax = self.pool.get('account.tax')
# - check for the presence of partner_id and pricelist_id
- if not partner_id:
- raise osv.except_osv(_('No Partner!'), _('Select a partner in purchase order to choose a product.'))
- if not pricelist_id:
- raise osv.except_osv(_('No Pricelist !'), _('Select a price list in the purchase order form before choosing a product.'))
+ #if not partner_id:
+ # raise osv.except_osv(_('No Partner!'), _('Select a partner in purchase order to choose a product.'))
+ #if not pricelist_id:
+ # raise osv.except_osv(_('No Pricelist !'), _('Select a price list in the purchase order form before choosing a product.'))
# - determine name and notes based on product in partner lang.
- lang = res_partner.browse(cr, uid, partner_id).lang
- context_partner = {'lang': lang, 'partner_id': partner_id}
+ context_partner = context.copy()
+ if partner_id:
+ lang = res_partner.browse(cr, uid, partner_id).lang
+ context_partner.update( {'lang': lang, 'partner_id': partner_id} )
product = product_product.browse(cr, uid, product_id, context=context_partner)
name = product.name
if product.description_purchase:
@@ -926,7 +962,7 @@ class purchase_order_line(osv.osv):
qty = qty or 1.0
supplierinfo = False
for supplier in product.seller_ids:
- if supplier.name.id == partner_id:
+ if partner_id and (supplier.name.id == partner_id):
supplierinfo = supplier
if supplierinfo.product_uom.id != uom_id:
res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier only sells this product by %s') % supplierinfo.product_uom.name }
@@ -940,8 +976,11 @@ class purchase_order_line(osv.osv):
res['value'].update({'date_planned': date_planned or dt, 'product_qty': qty})
# - determine price_unit and taxes_id
- price = product_pricelist.price_get(cr, uid, [pricelist_id],
- product.id, qty or 1.0, partner_id, {'uom': uom_id, 'date': date_order})[pricelist_id]
+ if pricelist_id:
+ price = product_pricelist.price_get(cr, uid, [pricelist_id],
+ product.id, qty or 1.0, partner_id or False, {'uom': uom_id, 'date': date_order})[pricelist_id]
+ else:
+ price = product.standard_price
taxes = account_tax.browse(cr, uid, map(lambda x: x.id, product.supplier_taxes_id))
fpos = fiscal_position_id and account_fiscal_position.browse(cr, uid, fiscal_position_id, context=context) or False
@@ -1087,6 +1126,12 @@ class procurement_order(osv.osv):
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
self.purchase_order_create_note(cr, uid, ids, context=context)
return res
+
+ def _product_virtual_get(self, cr, uid, order_point):
+ procurement = order_point.procurement_id
+ if procurement and procurement.state != 'exception' and procurement.purchase_id and procurement.purchase_id.state in ('draft', 'confirmed'):
+ return None
+ return super(procurement_order, self)._product_virtual_get(cr, uid, order_point)
def purchase_order_create_note(self, cr, uid, ids, context=None):
for procurement in self.browse(cr, uid, ids, context=context):
@@ -1111,7 +1156,7 @@ class product_template(osv.osv):
_name = 'product.template'
_inherit = 'product.template'
_columns = {
- 'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
+ 'purchase_ok': fields.boolean('Can be Purchased', help="Specify if the product can be selected in a purchase order line."),
}
_defaults = {
'purchase_ok': 1,
diff --git a/addons/purchase/purchase_data.xml b/addons/purchase/purchase_data.xml
index 693d18eb1ba..fa701c1f179 100644
--- a/addons/purchase/purchase_data.xml
+++ b/addons/purchase/purchase_data.xml
@@ -7,10 +7,10 @@
mail.groupnotification
+ Purchase Management application installed!
- From the top menu Purchases, create purchase orders to buy products from your suppliers, enter supplier invoices and manage payments.
-
-You can also manage purchase requisitions, see also the Purchase Settings.
+ From the top menu Purchases, create purchase orders to buy products from your suppliers, enter supplier invoices and manage payments.
+
You can also manage purchase requisitions, see also the Purchase Settings.
diff --git a/addons/purchase/res_config.py b/addons/purchase/res_config.py
index 19b059d4d5b..9e781d661f2 100644
--- a/addons/purchase/res_config.py
+++ b/addons/purchase/res_config.py
@@ -43,14 +43,13 @@ class purchase_config_settings(osv.osv_memory):
'group_costing_method':fields.boolean("Compute product cost price based on average cost",
implied_group='product.group_costing_method',
help="""Allows you to compute product cost price based on average cost."""),
- 'group_purchase_delivery_address': fields.boolean("Allow a different address for incoming products and invoicings",
+ 'group_purchase_delivery_address': fields.boolean("Allow a different address for incoming products and invoicing",
implied_group='purchase.group_delivery_invoice_address',
help="Allows you to specify different delivery and invoice addresses on a purchase order."),
'module_warning': fields.boolean("Alerts by products or supplier",
- help="""Allow to configure warnings on products and trigger them when a user wants to purchase a given product or a given supplier.
- Example: Product: this product is deprecated, do not purchase more than 5.
- Supplier: don't forget to ask for an express delivery."""),
-
+ help="""Allow to configure notification on products and trigger them when a user wants to purchase a given product or a given supplier.
+Example: Product: this product is deprecated, do not purchase more than 5.
+ Supplier: don't forget to ask for an express delivery."""),
'module_purchase_double_validation': fields.boolean("Force two levels of approvals",
help="""Provide a double validation mechanism for purchases exceeding minimum amount.
This installs the module purchase_double_validation."""),
diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml
index d248ef66160..188baeccd69 100644
--- a/addons/purchase/stock_view.xml
+++ b/addons/purchase/stock_view.xml
@@ -18,7 +18,7 @@
-
+
@@ -48,6 +48,8 @@
+
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index 4e6d6414ddf..9ea2215fe0f 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -123,6 +123,7 @@ class sale_advance_payment_inv(osv.osv_memory):
# create the invoice
inv_line_values = {
'name': res.get('name'),
+ 'origin': sale.name,
'account_id': res['account_id'],
'price_unit': inv_amount,
'quantity': wizard.qtty or 1.0,
diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py
index 2597c1db56c..10225990229 100644
--- a/addons/sale_crm/wizard/crm_make_sale.py
+++ b/addons/sale_crm/wizard/crm_make_sale.py
@@ -64,7 +64,9 @@ class crm_make_sale(osv.osv_memory):
"""
if context is None:
context = {}
-
+ # update context: if come from phonecall, default state values can make the quote crash lp:1017353
+ context.pop('default_state', False)
+
case_obj = self.pool.get('crm.lead')
sale_obj = self.pool.get('sale.order')
partner_obj = self.pool.get('res.partner')
diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py
index e0b6e50f4cf..9951773f36a 100644
--- a/addons/sale_journal/sale_journal.py
+++ b/addons/sale_journal/sale_journal.py
@@ -50,7 +50,7 @@ class res_partner(osv.osv):
string = "Invoicing Type",
view_load = True,
group_name = "Accounting Properties",
- help = "This invoicing type will be used, by default, for invoicing the current partner."),
+ help = "This invoicing type will be used, by default, to invoice the current partner."),
}
res_partner()
@@ -79,7 +79,7 @@ stock_picking_out()
class sale(osv.osv):
_inherit = "sale.order"
_columns = {
- 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type')
+ 'invoice_type_id': fields.many2one('sale_journal.invoice.type', 'Invoice Type', help="Generate invoice based on the selected option.")
}
def _prepare_order_picking(self, cr, uid, order, context=None):
diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py
index 64e07276c08..bbb2df673ff 100644
--- a/addons/sale_margin/sale_margin.py
+++ b/addons/sale_margin/sale_margin.py
@@ -73,7 +73,7 @@ class sale_order(osv.osv):
return super(sale_order, self)._get_order(cr, uid, ids, context=context)
_columns = {
- 'margin': fields.function(_product_margin, string='Margin', help="It gives profitability by calculating the difference between the Unit Price and Cost Price.", store={
+ 'margin': fields.function(_product_margin, string='Margin', help="It gives profitability by calculating the difference between the Unit Price and the cost price.", store={
'sale.order.line': (_get_order, ['margin'], 20),
'sale.order': (lambda self, cr, uid, ids, c={}: ids, ['order_line'], 20),
}),
diff --git a/addons/sale_order_dates/sale_order_dates.py b/addons/sale_order_dates/sale_order_dates.py
index 1b069cb2bed..49e10eab787 100644
--- a/addons/sale_order_dates/sale_order_dates.py
+++ b/addons/sale_order_dates/sale_order_dates.py
@@ -54,8 +54,8 @@ class sale_order_dates(osv.osv):
return res
_columns = {
- 'commitment_date': fields.function(_get_commitment_date, store=True, type='date', string='Commitment Date', help="Date on which delivery of products is to be made."),
- 'requested_date': fields.date('Requested Date', help="Date on which customer has requested for sales."),
+ 'commitment_date': fields.function(_get_commitment_date, store=True, type='date', string='Commitment Date', help="Committed date for delivery."),
+ 'requested_date': fields.date('Requested Date', help="Date requested by the customer for the sale."),
'effective_date': fields.function(_get_effective_date, type='date', store=True, string='Effective Date',help="Date on which picking is created."),
}
diff --git a/addons/sale_stock/i18n/nl.po b/addons/sale_stock/i18n/nl.po
index 557b57cc799..f719d2d7591 100644
--- a/addons/sale_stock/i18n/nl.po
+++ b/addons/sale_stock/i18n/nl.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-09-20 07:32+0000\n"
-"PO-Revision-Date: 2012-09-21 14:06+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2012-11-02 10:21+0000\n"
+"Last-Translator: Erwin van der Ploeg (Endian Solutions) \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: 2012-10-30 05:36+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: sale_stock
#: help:sale.config.settings,group_invoice_deli_orders:0
@@ -27,7 +27,7 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:496
#, python-format
msgid "Delivery Order %sscheduled for %s."
-msgstr ""
+msgstr "Uitgaande levering %singeplant voor %s."
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_deliveryorder0
@@ -81,7 +81,7 @@ msgstr "Document van de mutatie naar de expeditie of naar de klant."
#. module: sale_stock
#: field:sale.config.settings,group_multiple_shops:0
msgid "Manage multiple shops"
-msgstr ""
+msgstr "Beheer meerdere verkooppunten"
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_validate0
@@ -124,7 +124,7 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:678
#, python-format
msgid "Error!"
-msgstr ""
+msgstr "Fout!"
#. module: sale_stock
#: field:sale.order,picking_policy:0
@@ -155,12 +155,12 @@ msgstr "Voorraadmutatie"
#: code:addons/sale_stock/sale_stock.py:164
#, python-format
msgid "Invalid Action!"
-msgstr ""
+msgstr "Ongeldige actie!"
#. module: sale_stock
#: field:sale.config.settings,module_project_timesheet:0
msgid "Project Timesheet"
-msgstr ""
+msgstr "Project urenstaat"
#. module: sale_stock
#: help:sale.config.settings,module_delivery:0
@@ -175,7 +175,7 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:647
#, python-format
msgid "Configuration Error!"
-msgstr ""
+msgstr "Configuratiefout!"
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleprocurement0
@@ -197,7 +197,7 @@ msgstr "Verkooporder"
#: model:ir.model,name:sale_stock.model_stock_picking_out
#: view:sale.order:0
msgid "Delivery Orders"
-msgstr ""
+msgstr "Uitgaande leveringen"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_order_line
@@ -231,7 +231,7 @@ msgstr "Fout ! U kunt geen recursieve bedrijven maken."
#. module: sale_stock
#: field:sale.config.settings,group_invoice_so_lines:0
msgid "Generate invoices based on the sale order"
-msgstr ""
+msgstr "Genereer facturen op basis van verkooporder"
#. module: sale_stock
#: help:res.company,security_lead:0
@@ -259,7 +259,7 @@ msgstr "Forceer toewijzing"
#. module: sale_stock
#: field:sale.config.settings,default_order_policy:0
msgid "The default invoicing method is"
-msgstr ""
+msgstr "De standaard factureer methode is"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:233
@@ -280,7 +280,7 @@ msgstr "Document van de verplaatsing naar de klant."
#. module: sale_stock
#: view:sale.order:0
msgid "View Delivery Order"
-msgstr ""
+msgstr "Bekijk uitgaande levering"
#. module: sale_stock
#: field:sale.order.line,move_ids:0
@@ -290,7 +290,7 @@ msgstr "Voorraadmutaties"
#. module: sale_stock
#: view:sale.config.settings:0
msgid "Default Options"
-msgstr ""
+msgstr "Standaard opties"
#. module: sale_stock
#: field:sale.config.settings,module_project_mrp:0
@@ -363,17 +363,17 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:499
#, python-format
msgid "Order delivered."
-msgstr ""
+msgstr "Order geleverd."
#. module: sale_stock
#: field:sale.config.settings,module_delivery:0
msgid "Allow adding shipping costs"
-msgstr ""
+msgstr "Sta toevoegen afleveringskosten toe"
#. module: sale_stock
#: view:sale.order:0
msgid "days"
-msgstr ""
+msgstr "dagen"
#. module: sale_stock
#: field:sale.order.line,product_packaging:0
@@ -394,7 +394,7 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:689
#, python-format
msgid "Advance of %s %%"
-msgstr ""
+msgstr "Vooruitbetaling van %s %%"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:601
@@ -434,7 +434,7 @@ msgstr "Waarden"
#. module: sale_stock
#: constraint:stock.move:0
msgid "You must assign a serial number for this product."
-msgstr ""
+msgstr "U dient een productie partij toe te wijzen voor dit product."
#. module: sale_stock
#: field:sale.config.settings,group_mrp_properties:0
@@ -479,7 +479,7 @@ msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "View Invoice"
-msgstr ""
+msgstr "Bekijk factuur"
#. module: sale_stock
#: sql_constraint:stock.picking:0
@@ -539,7 +539,7 @@ msgstr ""
#. module: sale_stock
#: selection:sale.config.settings,default_order_policy:0
msgid "Invoice based on sales orders"
-msgstr ""
+msgstr "Factuur gebaseerd op verkooporders"
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_invoiceafterdelivery0
@@ -631,7 +631,7 @@ msgstr ""
#: code:addons/sale_stock/sale_stock.py:659
#, python-format
msgid "Cannot cancel sales order line!"
-msgstr ""
+msgstr "Het is niet mogelijk de verkooporder regel te annuleren!"
#. module: sale_stock
#: view:sale.order:0
@@ -671,7 +671,7 @@ msgstr "De naam van het bedrijf moet uniek zijn!"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_config_settings
msgid "sale.config.settings"
-msgstr ""
+msgstr "sale.config.settings"
#. module: sale_stock
#: help:sale.order,picking_ids:0
@@ -708,12 +708,13 @@ msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "Recreate Delivery Order"
-msgstr ""
+msgstr "Maak uitgaande levering opnieuw"
#. module: sale_stock
#: help:sale.config.settings,group_multiple_shops:0
msgid "This allows to configure and use multiple shops."
msgstr ""
+"Dit geeft u de mogelijkheid om meerdere verkooppunten te configureren."
#. module: sale_stock
#: field:sale.order,picked_rate:0
diff --git a/addons/sale_stock/i18n/zh_CN.po b/addons/sale_stock/i18n/zh_CN.po
index d87aeb77d48..b69c8011aea 100644
--- a/addons/sale_stock/i18n/zh_CN.po
+++ b/addons/sale_stock/i18n/zh_CN.po
@@ -7,21 +7,21 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-09-20 07:32+0000\n"
-"PO-Revision-Date: 2012-10-25 17:47+0000\n"
-"Last-Translator: ccdos \n"
+"PO-Revision-Date: 2012-10-30 16:29+0000\n"
+"Last-Translator: ccdos \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: 2012-10-30 05:36+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-03 05:04+0000\n"
+"X-Generator: Launchpad (build 16218)\n"
#. module: sale_stock
#: help:sale.config.settings,group_invoice_deli_orders:0
msgid ""
"To allow your salesman to make invoices for Delivery Orders using the menu "
"'Deliveries to Invoice'."
-msgstr ""
+msgstr "允许销售员 使用菜单“按已交付数量开票” 根据发运单开发票"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:496
@@ -77,7 +77,7 @@ msgstr "调拨出去或调拨给客户的单据"
#. module: sale_stock
#: field:sale.config.settings,group_multiple_shops:0
msgid "Manage multiple shops"
-msgstr ""
+msgstr "管理多个商店"
#. module: sale_stock
#: model:process.transition.action,name:sale_stock.process_transition_action_validate0
@@ -280,7 +280,7 @@ msgstr "默认选项"
#. module: sale_stock
#: field:sale.config.settings,module_project_mrp:0
msgid "Project MRP"
-msgstr ""
+msgstr "项目MRP"
#. module: sale_stock
#: help:sale.order.line,type:0
@@ -314,7 +314,7 @@ msgstr "已送货"
msgid ""
"To allow your salesman to make invoices for sale order lines using the menu "
"'Lines to Invoice'."
-msgstr ""
+msgstr "允许销售员 使用菜单“逐行开票” 根据销售单明细逐行开发票"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:260
@@ -350,7 +350,7 @@ msgstr "允许追加运输成本"
#. module: sale_stock
#: view:sale.order:0
msgid "days"
-msgstr ""
+msgstr "天数"
#. module: sale_stock
#: field:sale.order.line,product_packaging:0
@@ -371,7 +371,7 @@ msgstr "允许开发运单"
#: code:addons/sale_stock/sale_stock.py:689
#, python-format
msgid "Advance of %s %%"
-msgstr ""
+msgstr "%s %% 的预付款"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:601
@@ -465,7 +465,7 @@ msgstr "编号必须在公司内唯一!"
#: code:addons/sale_stock/sale_stock.py:698
#, python-format
msgid "Advance of %s %s"
-msgstr ""
+msgstr "%s %s 的预付款"
#. module: sale_stock
#: model:process.node,note:sale_stock.process_node_saleprocurement0
@@ -559,7 +559,7 @@ msgstr "生成发票"
#. module: sale_stock
#: help:sale.config.settings,group_mrp_properties:0
msgid "Allows you to tag sale order lines with properties."
-msgstr ""
+msgstr "允许你用 属性 来标记销售订单 明细"
#. module: sale_stock
#: field:sale.config.settings,task_work:0
@@ -591,13 +591,13 @@ msgstr "贸易术语"
#. module: sale_stock
#: constraint:stock.move:0
msgid "You try to assign a lot which is not from the same product."
-msgstr ""
+msgstr "您企图为不一样的产品创建批号"
#. module: sale_stock
#: code:addons/sale_stock/sale_stock.py:659
#, python-format
msgid "Cannot cancel sales order line!"
-msgstr ""
+msgstr "不能取消销售订单明细"
#. module: sale_stock
#: view:sale.order:0
@@ -637,14 +637,14 @@ msgstr "公司名必须唯一!"
#. module: sale_stock
#: model:ir.model,name:sale_stock.model_sale_config_settings
msgid "sale.config.settings"
-msgstr ""
+msgstr "sale.config.settings"
#. module: sale_stock
#: help:sale.order,picking_ids:0
msgid ""
"This is a list of delivery orders that has been generated for this sales "
"order."
-msgstr ""
+msgstr "这是一个销售订单生产的发运单列表"
#. module: sale_stock
#: model:process.node,name:sale_stock.process_node_saleorderprocurement0
@@ -674,12 +674,12 @@ msgstr ""
#. module: sale_stock
#: view:sale.order:0
msgid "Recreate Delivery Order"
-msgstr ""
+msgstr "重建发运单"
#. module: sale_stock
#: help:sale.config.settings,group_multiple_shops:0
msgid "This allows to configure and use multiple shops."
-msgstr ""
+msgstr "允许配置和使用多个商店"
#. module: sale_stock
#: field:sale.order,picked_rate:0
diff --git a/addons/sale_stock/report/sale_report_view.xml b/addons/sale_stock/report/sale_report_view.xml
index 99aefa7e66f..ae8b12ca168 100644
--- a/addons/sale_stock/report/sale_report_view.xml
+++ b/addons/sale_stock/report/sale_report_view.xml
@@ -5,7 +5,6 @@
sale.report.tree.sale.stocksale.report
- tree
diff --git a/addons/sale_stock/res_config_view.xml b/addons/sale_stock/res_config_view.xml
index aa15be1d090..ad3b91b2a30 100644
--- a/addons/sale_stock/res_config_view.xml
+++ b/addons/sale_stock/res_config_view.xml
@@ -5,7 +5,6 @@
sale settingssale.config.settings
- form
diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py
index 5d30dc9a249..d60803aae16 100644
--- a/addons/sale_stock/sale_stock.py
+++ b/addons/sale_stock/sale_stock.py
@@ -127,19 +127,16 @@ class sale_order(osv.osv):
\nThe exception status is automatically set when a cancel operation occurs \
in the invoice validation (Invoice Exception) or in the picking list process (Shipping Exception).\nThe 'Waiting Schedule' status is set when the invoice is confirmed\
but waiting for the scheduler to run on the order date.", select=True),
- 'incoterm': fields.many2one('stock.incoterms', 'Incoterm', help="Incoterm which stands for 'International Commercial terms' implies its a series of sales terms which are used in the commercial transaction."),
+ 'incoterm': fields.many2one('stock.incoterms', 'Incoterm', help="International Commercial Terms are a series of predefined commercial terms used in international transactions."),
'picking_policy': fields.selection([('direct', 'Deliver each product when available'), ('one', 'Deliver all products at once')],
'Shipping Policy', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
- help="""If you don't have enough stock available to deliver all at once, do you accept partial shipments or not?"""),
+ help="""Pick 'Deliver each product when available' if you allow partial delivery."""),
'order_policy': fields.selection([
('manual', 'On Demand'),
('picking', 'On Delivery Order'),
('prepaid', 'Before Delivery'),
], 'Create Invoice', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
- help="""This field controls how invoice and delivery operations are synchronized.
- - With 'On Demand', the invoice is created manually when needed.
- - With 'On Delivery Order', a draft invoice is generated after all pickings have been processed.
- - With 'Before Delivery', a draft invoice is created, and it must be paid before delivery."""),
+ help="""On demand: A draft invoice can be created from the sales order when needed. \nOn delivery order: A draft invoice can be created from the delivery order when the products have been delivered. \nBefore delivery: A draft invoice is created from the sales order and must be paid before the products can be delivered."""),
'picking_ids': fields.one2many('stock.picking.out', 'sale_id', 'Related Picking', readonly=True, help="This is a list of delivery orders that has been generated for this sales order."),
'shipped': fields.boolean('Delivered', readonly=True, help="It indicates that the sales order has been delivered. This field is updated only after the scheduler(s) have been launched."),
'picked_rate': fields.function(_picked_rate, string='Picked', type='float'),
@@ -488,7 +485,7 @@ class sale_order_line(osv.osv):
_inherit = 'sale.order.line'
_columns = {
- 'delay': fields.float('Delivery Lead Time', required=True, help="Number of days between the order confirmation the shipping of the products to the customer", readonly=True, states={'draft': [('readonly', False)]}),
+ 'delay': fields.float('Delivery Lead Time', required=True, help="Number of days between the order confirmation and the shipping of the products to the customer", readonly=True, states={'draft': [('readonly', False)]}),
'procurement_id': fields.many2one('procurement.order', 'Procurement'),
'property_ids': fields.many2many('mrp.property', 'sale_order_line_property_rel', 'order_id', 'property_id', 'Properties', readonly=True, states={'draft': [('readonly', False)]}),
'product_packaging': fields.many2one('product.packaging', 'Packaging'),
@@ -636,7 +633,7 @@ class sale_advance_payment_inv(osv.osv_memory):
result = super(sale_advance_payment_inv, self)._create_invoices(cr, uid, inv_values, sale_id, context=context)
sale_obj = self.pool.get('sale.order')
sale_line_obj = self.pool.get('sale.order.line')
- wizard = self.browse(cr, uid, ids[0], context)
+ wizard = self.browse(cr, uid, [result], context)
sale = sale_obj.browse(cr, uid, sale_id, context=context)
if sale.order_policy == 'postpaid':
raise osv.except_osv(
@@ -646,8 +643,8 @@ class sale_advance_payment_inv(osv.osv_memory):
# If invoice on picking: add the cost on the SO
# If not, the advance will be deduced when generating the final invoice
- line_name = inv_values.get('invoice_line') and inv_values.get('invoice_line')[2].get('name') or ''
- line_tax = inv_values.get('invoice_line') and inv_values.get('invoice_line')[2].get('invoice_line_tax_id') or False
+ line_name = inv_values.get('invoice_line') and inv_values.get('invoice_line')[0][2].get('name') or ''
+ line_tax = inv_values.get('invoice_line') and inv_values.get('invoice_line')[0][2].get('invoice_line_tax_id') or False
if sale.order_policy == 'picking':
vals = {
'order_id': sale.id,
diff --git a/addons/sale_stock/sale_stock_view.xml b/addons/sale_stock/sale_stock_view.xml
index 328581bf77c..4c38e198b60 100644
--- a/addons/sale_stock/sale_stock_view.xml
+++ b/addons/sale_stock/sale_stock_view.xml
@@ -18,7 +18,6 @@
sale.shop.sale.stocksale.shop
- tree
@@ -32,7 +31,6 @@
sale.order.form.sale.stocksale.order
- form
@@ -40,6 +38,7 @@
+
diff --git a/addons/share/static/src/js/share.js b/addons/share/static/src/js/share.js
index e73e68144d0..e627b555de3 100644
--- a/addons/share/static/src/js/share.js
+++ b/addons/share/static/src/js/share.js
@@ -15,7 +15,7 @@ openerp.share = function(session) {
self.rpc('/web/session/eval_domain_and_context', {
domains: [domain],
contexts: [view.dataset.context]
- }).then(function (result) {
+ }).done(function (result) {
Share.create({
name: action.name,
record_name: rec_name,
@@ -24,8 +24,8 @@ openerp.share = function(session) {
user_type: user_type || 'embedded',
view_type: view.fields_view.type,
invite: invite || false,
- }).then(function(share_id) {
- var step1 = Share.call('go_step_1', [[share_id]]).then(function(result) {
+ }).done(function(share_id) {
+ var step1 = Share.call('go_step_1', [[share_id]]).done(function(result) {
var action = result;
self.do_action(action);
});
@@ -37,7 +37,7 @@ openerp.share = function(session) {
if (!session.session.share_flag) {
session.session.share_flag = $.Deferred(function() {
var func = new session.web.Model("share.wizard").get_func("has_share");
- func(session.session.uid).pipe(function(res) {
+ func(session.session.uid).then(function(res) {
if(res) {
session.session.share_flag.resolve();
} else {
diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py
index 360b1eff159..6a1f5681f4f 100644
--- a/addons/share/wizard/share_wizard.py
+++ b/addons/share/wizard/share_wizard.py
@@ -74,7 +74,7 @@ class share_wizard(osv.TransientModel):
def _user_type_selection(self, cr, uid, context=None):
"""Selection values may be easily overridden/extended via inheritance"""
- return [('embedded', 'Direct link or embed code'), ('emails','Emails'), ]
+ return [('embedded', _('Direct link or embed code')), ('emails',_('Emails')), ]
"""Override of create() to auto-compute the action name"""
def create(self, cr, uid, values, context=None):
diff --git a/addons/stock/i18n/zh_CN.po b/addons/stock/i18n/zh_CN.po
index 9610ef7dc1d..64a500b1cca 100644
--- a/addons/stock/i18n/zh_CN.po
+++ b/addons/stock/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-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-06-20 09:34+0000\n"
-"Last-Translator: openerp-china.black-jack \n"
+"PO-Revision-Date: 2012-11-06 14:21+0000\n"
+"Last-Translator: Wei \"oldrev\" Li \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-10-30 04:48+0000\n"
-"X-Generator: Launchpad (build 16206)\n"
+"X-Launchpad-Export-Date: 2012-11-07 04:38+0000\n"
+"X-Generator: Launchpad (build 16232)\n"
#. module: stock
#: field:product.product,track_outgoing:0
@@ -940,7 +940,7 @@ msgstr "如果您需要在成品库位生产请留空.如在固定地点生产
#. module: stock
#: view:res.partner:0
msgid "Inventory Properties"
-msgstr "盘点表属性"
+msgstr "库存属性"
#. module: stock
#: field:report.stock.move,day_diff:0
diff --git a/addons/stock/product.py b/addons/stock/product.py
index 94252f80439..4d955495c28 100644
--- a/addons/stock/product.py
+++ b/addons/stock/product.py
@@ -370,14 +370,14 @@ class product_product(osv.osv):
"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 "
- "typed as 'internal'."),
+ "with 'internal' type."),
'virtual_available': fields.function(_product_available, multi='qty_available',
type='float', digits_compute=dp.get_precision('Product Unit of Measure'),
- string='Future Quantity',
+ string='Forecasted Quantity',
help="Forecast quantity (computed as Quantity On Hand "
"- Outgoing + Incoming)\n"
"In a context with a single Stock Location, this includes "
- "goods stored at this Location, or any of its children.\n"
+ "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"
@@ -385,7 +385,7 @@ class product_product(osv.osv):
"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 "
- "typed as 'internal'."),
+ "with 'internal' type."),
'incoming_qty': fields.function(_product_available, multi='qty_available',
type='float', digits_compute=dp.get_precision('Product Unit of Measure'),
string='Incoming',
@@ -399,21 +399,21 @@ class product_product(osv.osv):
"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 typed as 'internal'."),
+ "Location with 'internal' type."),
'outgoing_qty': fields.function(_product_available, multi='qty_available',
type='float', digits_compute=dp.get_precision('Product Unit of Measure'),
string='Outgoing',
help="Quantity of products that are planned to leave.\n"
"In a context with a single Stock Location, this includes "
- "goods leaving from this Location, or any of its children.\n"
+ "goods leaving this Location, or any of its children.\n"
"In a context with a single Warehouse, this includes "
- "goods leaving from the Stock Location of this Warehouse, or "
+ "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 from the Stock Location of the Warehouse of this "
+ "leaving the Stock Location of the Warehouse of this "
"Shop, or any of its children.\n"
- "Otherwise, this includes goods leaving from any Stock "
- "Location typed as 'internal'."),
+ "Otherwise, this includes goods leaving any Stock "
+ "Location with 'internal' type."),
'track_production': fields.boolean('Track Manufacturing Lots', help="Forces to specify a Serial Number for all moves containing this product and generated by a Manufacturing Order"),
'track_incoming': fields.boolean('Track Incoming Lots', help="Forces to specify a Serial Number for all moves containing this product and coming from a Supplier Location"),
'track_outgoing': fields.boolean('Track Outgoing Lots', help="Forces to specify a Serial Number for all moves containing this product and going to a Customer Location"),
@@ -486,7 +486,7 @@ class product_template(osv.osv):
string="Procurement Location",
view_load=True,
domain=[('usage','like','procurement')],
- help="For the current product, this stock location will be used, instead of the default one, as the source location for stock moves generated by procurements"),
+ help="This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."),
'property_stock_production': fields.property(
'stock.location',
type='many2one',
@@ -494,7 +494,7 @@ class product_template(osv.osv):
string="Production Location",
view_load=True,
domain=[('usage','like','production')],
- help="For the current product, this stock location will be used, instead of the default one, as the source location for stock moves generated by production orders"),
+ help="This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."),
'property_stock_inventory': fields.property(
'stock.location',
type='many2one',
@@ -502,7 +502,7 @@ class product_template(osv.osv):
string="Inventory Location",
view_load=True,
domain=[('usage','like','inventory')],
- help="For the current product, this stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory"),
+ help="This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."),
'property_stock_account_input': fields.property('account.account',
type='many2one', relation='account.account',
string='Stock Input Account', view_load=True,
@@ -513,7 +513,7 @@ class product_template(osv.osv):
string='Stock Output Account', view_load=True,
help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless "
"there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."),
- 'sale_delay': fields.float('Customer Lead Time', help="This is the average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
+ 'sale_delay': fields.float('Customer Lead Time', help="The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
'loc_rack': fields.char('Rack', size=16),
'loc_row': fields.char('Row', size=16),
'loc_case': fields.char('Case', size=16),
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index f71b42300fb..594843eff8d 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -17,15 +17,17 @@
product.category.stock.property.form.inheritproduct.category
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -39,7 +41,7 @@
-
+
@@ -101,7 +103,7 @@
-
+
@@ -219,7 +221,7 @@
On hand:
-
Available:
+
Forecasted:
diff --git a/addons/stock/res_config.py b/addons/stock/res_config.py
index a4094cb9afc..b150847153e 100644
--- a/addons/stock/res_config.py
+++ b/addons/stock/res_config.py
@@ -33,14 +33,14 @@ class stock_config_settings(osv.osv_memory):
help="""This allows to automatically launch the invoicing wizard if the delivery is
to be invoiced when you send or deliver goods.
This installs the module stock_invoice_directly."""),
- 'module_product_expiry': fields.boolean("Expiry date on lots",
+ 'module_product_expiry': fields.boolean("Expiry date on serial numbers",
help="""Track different dates on products and serial numbers.
- The following dates can be tracked:
- - end of life
- - best before date
- - removal date
- - alert date.
- This installs the module product_expiry."""),
+The following dates can be tracked:
+ - end of life
+ - best before date
+ - removal date
+ - alert date.
+This installs the module product_expiry."""),
'module_stock_location': fields.boolean("Create push/pull logistic rules",
help="""Provide push and pull inventory flows. Typical uses of this feature are:
manage product manufacturing chains, manage default locations per product,
@@ -58,11 +58,10 @@ class stock_config_settings(osv.osv_memory):
help="""Allows you to create and manage your packaging dimensions and types you want to be maintained in your system."""),
'group_stock_production_lot': fields.boolean("Track serial number on products",
implied_group='stock.group_production_lot',
- help="""This allows you to manage products by using serial numbers.
- When you select a lot, you can get the upstream or downstream traceability of the products contained in lot."""),
+ help="""This allows you to manage products by using serial numbers. When you select a serial number on product moves, you can get the upstream or downstream traceability of that product."""),
'group_stock_tracking_lot': fields.boolean("Track serial number on logistic units (pallets)",
implied_group='stock.group_tracking_lot',
- help="""Allows you to get the upstream or downstream traceability of the products contained in lot."""),
+ help="""When you select a serial number on product moves, you can get the upstream or downstream traceability of that product."""),
'group_stock_inventory_valuation': fields.boolean("Generate accounting entries per stock movement",
implied_group='stock.group_inventory_valuation',
help="""Allows to configure inventory valuations on products and product categories."""),
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index dffe1d69cc1..859cda8ce94 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -629,7 +629,7 @@ class stock_picking(osv.osv):
'name': fields.char('Reference', size=64, select=True, states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}),
'origin': fields.char('Source Document', size=64, states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="Reference of the document", select=True),
'backorder_id': fields.many2one('stock.picking', 'Back Order of', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="If this shipment was split, then this field links to the shipment which contains the already processed part.", select=True),
- 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal')], 'Shipping Type', required=True, select=True, readonly=True, help="Shipping type specify, goods coming in or going out."),
+ 'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
'note': fields.text('Notes', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}),
'stock_journal_id': fields.many2one('stock.journal','Stock Journal', select=True, states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}),
'location_id': fields.many2one('stock.location', 'Location', states={'done':[('readonly', True)], 'cancel':[('readonly',True)]}, help="Keep empty if you produce at the location where the finished products are needed." \
@@ -1351,14 +1351,14 @@ class stock_picking(osv.osv):
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_confirm', cr)
# Then we finish the good picking
self.write(cr, uid, [pick.id], {'backorder_id': new_picking})
- self.action_move(cr, uid, [new_picking])
+ self.action_move(cr, uid, [new_picking], context=context)
wf_service.trg_validate(uid, 'stock.picking', new_picking, 'button_done', cr)
wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
delivered_pack_id = new_picking
back_order_name = self.browse(cr, uid, delivered_pack_id, context=context).name
self.back_order_send_note(cr, uid, ids, back_order_name, context)
else:
- self.action_move(cr, uid, [pick.id])
+ self.action_move(cr, uid, [pick.id], context=context)
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
delivered_pack_id = pick.id
self.ship_done_send_note(cr, uid, ids, context)
@@ -1553,7 +1553,7 @@ class stock_production_lot(osv.osv):
'product_id': lambda x, y, z, c: c.get('product_id', False),
}
_sql_constraints = [
- ('name_ref_uniq', 'unique (name, ref)', 'The combination of serial number and internal reference must be unique !'),
+ ('name_ref_uniq', 'unique (name, ref)', 'The combination of Serial Number and internal reference must be unique !'),
]
def action_traceability(self, cr, uid, ids, context=None):
""" It traces the information of a product
@@ -2123,14 +2123,14 @@ class stock_move(osv.osv):
old_ptype = location_obj.picking_type_get(cr, uid, picking.move_lines[0].location_id, picking.move_lines[0].location_dest_id)
if old_ptype != picking.type:
old_pick_name = seq_obj.get(cr, uid, 'stock.picking.' + old_ptype)
- self.pool.get('stock.picking').write(cr, uid, [picking.id], {'name': old_pick_name}, context=context)
+ self.pool.get('stock.picking').write(cr, uid, [picking.id], {'name': old_pick_name, 'type': old_ptype}, context=context)
else:
pickid = False
for move, (loc, dummy, delay, dummy, company_id, ptype) in todo:
new_id = move_obj.copy(cr, uid, move.id, {
'location_id': move.location_dest_id.id,
'location_dest_id': loc.id,
- 'date_moved': time.strftime('%Y-%m-%d'),
+ 'date': time.strftime('%Y-%m-%d'),
'picking_id': pickid,
'state': 'waiting',
'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) ,
@@ -2433,14 +2433,17 @@ class stock_move(osv.osv):
if move.picking_id:
picking_ids.append(move.picking_id.id)
if move.move_dest_id.id and (move.state != 'done'):
- self.write(cr, uid, [move.id], {'move_history_ids': [(4, move.move_dest_id.id)]})
- #cr.execute('insert into stock_move_history_ids (parent_id,child_id) values (%s,%s)', (move.id, move.move_dest_id.id))
- if move.move_dest_id.state in ('waiting', 'confirmed'):
- self.force_assign(cr, uid, [move.move_dest_id.id], context=context)
- if move.move_dest_id.picking_id:
- wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr)
- if move.move_dest_id.auto_validate:
- self.action_done(cr, uid, [move.move_dest_id.id], context=context)
+ # Downstream move should only be triggered if this move is the last pending upstream move
+ other_upstream_move_ids = self.search(cr, uid, [('id','!=',move.id),('state','not in',['done','cancel']),
+ ('move_dest_id','=',move.move_dest_id.id)], context=context)
+ if not other_upstream_move_ids:
+ self.write(cr, uid, [move.id], {'move_history_ids': [(4, move.move_dest_id.id)]})
+ if move.move_dest_id.state in ('waiting', 'confirmed'):
+ self.force_assign(cr, uid, [move.move_dest_id.id], context=context)
+ if move.move_dest_id.picking_id:
+ wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr)
+ if move.move_dest_id.auto_validate:
+ self.action_done(cr, uid, [move.move_dest_id.id], context=context)
self._create_product_valuation_moves(cr, uid, move, context=context)
if move.state not in ('confirmed','done','assigned'):
@@ -2875,7 +2878,7 @@ class stock_inventory(osv.osv):
if change:
location_id = line.product_id.product_tmpl_id.property_stock_inventory.id
value = {
- 'name': 'INV:' + str(line.inventory_id.id) + ':' + line.inventory_id.name,
+ 'name': _('INV:') + (line.inventory_id.name or ''),
'product_id': line.product_id.id,
'product_uom': line.product_uom.id,
'prodlot_id': lot_id,
diff --git a/addons/stock/stock_data.xml b/addons/stock/stock_data.xml
index 77c82989a21..a1ce136e304 100644
--- a/addons/stock/stock_data.xml
+++ b/addons/stock/stock_data.xml
@@ -6,9 +6,10 @@
mail.groupnotification
+ Warehouse Management application installed!
- Manage your product inventoy and stock locations: you can control stock moves history and planning,
-watch your stock valuation, and track production lots upstream and downstream (based on serial numbers).
+ Manage your product inventoy and stock locations: you can control stock moves history and planning,
+watch your stock valuation, and track production lots upstream and downstream (based on serial numbers).]]>
diff --git a/addons/stock/stock_sequence.xml b/addons/stock/stock_sequence.xml
index 6c0b3e84cf2..c3569c48c3e 100644
--- a/addons/stock/stock_sequence.xml
+++ b/addons/stock/stock_sequence.xml
@@ -17,7 +17,7 @@
Picking INT
- stock.picking.internal
+ stock.picking
-
- stock_planning multi-company
-
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
- stock_sale_forecast multi-company
-
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
-
diff --git a/addons/stock_planning/stock_planning.py b/addons/stock_planning/stock_planning.py
deleted file mode 100644
index e2c723fa4e2..00000000000
--- a/addons/stock_planning/stock_planning.py
+++ /dev/null
@@ -1,747 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import time
-from datetime import datetime
-from dateutil.relativedelta import relativedelta
-
-from osv import osv, fields
-import netsvc
-from tools.translate import _
-import logging
-import decimal_precision as dp
-
-_logger = logging.getLogger(__name__)
-
-
-def rounding(fl, round_value):
- if not round_value:
- return fl
- return round(fl / round_value) * round_value
-
-# Periods have no company_id field as they can be shared across similar companies.
-# If somone thinks different it can be improved.
-class stock_period(osv.osv):
- _name = "stock.period"
- _description = "stock period"
- _order = "date_start"
- _columns = {
- 'name': fields.char('Period Name', size=64, required=True),
- 'date_start': fields.datetime('Start Date', required=True),
- 'date_stop': fields.datetime('End Date', required=True),
- 'state': fields.selection([('draft','Draft'), ('open','Open'),('close','Close')], 'Status'),
- }
- _defaults = {
- 'state': 'draft'
- }
-
- def button_open(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {'state': 'open'})
- return True
-
- def button_close(self, cr, uid, ids, context=None):
- self.write(cr, uid, ids, {'state': 'close'})
- return True
-
-stock_period()
-
-# Stock and Sales Forecast object. Previously stock_planning_sale_prevision.
-# A lot of changes in 1.1
-class stock_sale_forecast(osv.osv):
- _name = "stock.sale.forecast"
-
- _columns = {
- 'company_id':fields.many2one('res.company', 'Company', required=True),
- 'create_uid': fields.many2one('res.users', 'Responsible'),
- 'name': fields.char('Name', size=64, readonly=True, states={'draft': [('readonly',False)]}),
- 'user_id': fields.many2one('res.users', 'Created/Validated by',readonly=True, \
- help='Shows who created this forecast, or who validated.'),
- 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', required=True, readonly=True, states={'draft': [('readonly',False)]}, \
- help='Shows which warehouse this forecast concerns. '\
- 'If during stock planning you will need sales forecast for all warehouses choose any warehouse now.'),
- 'period_id': fields.many2one('stock.period', 'Period', required=True, readonly=True, states={'draft':[('readonly',False)]}, \
- help = 'Shows which period this forecast concerns.'),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True, required=True, states={'draft':[('readonly',False)]}, \
- help = 'Shows which product this forecast concerns.'),
- 'product_qty': fields.float('Forecast Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True, readonly=True, \
- states={'draft':[('readonly',False)]}, help= 'Forecast Product quantity.'),
- 'product_amt': fields.float('Product Amount', readonly=True, states={'draft':[('readonly',False)]}, \
- help='Forecast value which will be converted to Product Quantity according to prices.'),
- 'product_uom_categ': fields.many2one('product.uom.categ', 'Product Unit of Measure Category'), # Invisible field for product_uom domain
- 'product_uom': fields.many2one('product.uom', 'Product Unit of Measure', required=True, readonly=True, states={'draft':[('readonly',False)]}, \
- help = "Unit of Measure used to show the quantities of stock calculation." \
- "You can use units form default category or from second category (UoS category)."),
- 'product_uos_categ' : fields.many2one('product.uom.categ', 'Product UoS Category'), # Invisible field for product_uos domain
-# Field used in onchange_uom to check what uom was before change and recalculate quantities according to old uom (active_uom) and new uom.
- 'active_uom': fields.many2one('product.uom', string = "Active Unit of Measure"),
- 'state': fields.selection([('draft','Draft'),('validated','Validated')],'Status',readonly=True),
- 'analyzed_period1_id': fields.many2one('stock.period', 'Period1', readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_period2_id': fields.many2one('stock.period', 'Period2', readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_period3_id': fields.many2one('stock.period', 'Period3', readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_period4_id': fields.many2one('stock.period', 'Period4', readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_period5_id': fields.many2one('stock.period' , 'Period5', readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_user_id': fields.many2one('res.users', 'This User', required=False, readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_team_id': fields.many2one('crm.case.section', 'Sales Team', required=False, \
- readonly=True, states={'draft':[('readonly',False)]},),
- 'analyzed_warehouse_id': fields.many2one('stock.warehouse' , 'This Warehouse', required=False, \
- readonly=True, states={'draft':[('readonly',False)]}),
- 'analyze_company': fields.boolean('Per Company', readonly=True, states={'draft':[('readonly',False)]}, \
- help = "Check this box to see the sales for whole company."),
- 'analyzed_period1_per_user': fields.float('This User Period1', readonly=True),
- 'analyzed_period2_per_user': fields.float('This User Period2', readonly=True),
- 'analyzed_period3_per_user': fields.float('This User Period3', readonly=True),
- 'analyzed_period4_per_user': fields.float('This User Period4', readonly=True),
- 'analyzed_period5_per_user': fields.float('This User Period5', readonly=True),
- 'analyzed_period1_per_dept': fields.float('This Dept Period1', readonly=True),
- 'analyzed_period2_per_dept': fields.float('This Dept Period2', readonly=True),
- 'analyzed_period3_per_dept': fields.float('This Dept Period3', readonly=True),
- 'analyzed_period4_per_dept': fields.float('This Dept Period4', readonly=True),
- 'analyzed_period5_per_dept': fields.float('This Dept Period5', readonly=True),
- 'analyzed_period1_per_warehouse': fields.float('This Warehouse Period1', readonly=True),
- 'analyzed_period2_per_warehouse': fields.float('This Warehouse Period2', readonly=True),
- 'analyzed_period3_per_warehouse': fields.float('This Warehouse Period3', readonly=True),
- 'analyzed_period4_per_warehouse': fields.float('This Warehouse Period4', readonly=True),
- 'analyzed_period5_per_warehouse': fields.float('This Warehouse Period5', readonly=True),
- 'analyzed_period1_per_company': fields.float('This Company Period1', readonly=True),
- 'analyzed_period2_per_company': fields.float('This Company Period2', readonly=True),
- 'analyzed_period3_per_company': fields.float('This Company Period3', readonly=True),
- 'analyzed_period4_per_company': fields.float('This Company Period4', readonly=True),
- 'analyzed_period5_per_company': fields.float('This Company Period5', readonly=True),
- }
- _defaults = {
- 'user_id': lambda obj, cr, uid, context: uid,
- 'state': 'draft',
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.sale.forecast', context=c),
- }
-
- def action_validate(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state': 'validated','user_id': uid})
- return True
-
- def unlink(self, cr, uid, ids, context=None):
- forecasts = self.read(cr, uid, ids, ['state'])
- unlink_ids = []
- for t in forecasts:
- if t['state'] in ('draft'):
- unlink_ids.append(t['id'])
- else:
- raise osv.except_osv(_('Invalid Action!'), _('Cannot delete a validated sales forecast.'))
- osv.osv.unlink(self, cr, uid, unlink_ids, context=context)
- return True
-
- def onchange_company(self, cr, uid, ids, company_id=False):
- result = {}
- if not company_id:
- return result
- result['warehouse_id'] = False
- result['analyzed_user_id'] = False
- result['analyzed_team_id'] = False
- result['analyzed_warehouse_id'] = False
- return {'value': result}
-
- def product_id_change(self, cr, uid, ids, product_id=False):
- ret = {}
- if product_id:
- product_rec = self.pool.get('product.product').browse(cr, uid, product_id)
- ret['product_uom'] = product_rec.uom_id.id
- ret['product_uom_categ'] = product_rec.uom_id.category_id.id
- ret['product_uos_categ'] = product_rec.uos_id and product_rec.uos_id.category_id.id or False
- ret['active_uom'] = product_rec.uom_id.id
- else:
- ret['product_uom'] = False
- ret['product_uom_categ'] = False
- ret['product_uos_categ'] = False
- res = {'value': ret}
- return res
-
- def onchange_uom(self, cr, uid, ids, product_uom=False, product_qty=0.0,
- active_uom=False, product_id=False):
- ret = {}
- if product_uom and product_id:
- coeff_uom2def = self._to_default_uom_factor(cr, uid, product_id, active_uom, {})
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, product_id, product_uom, {})
- coeff = coeff_uom2def * coeff_def2uom
- ret['product_qty'] = rounding(coeff * product_qty, round_value)
- ret['active_uom'] = product_uom
- return {'value': ret}
-
- def product_amt_change(self, cr, uid, ids, product_amt=0.0, product_uom=False, product_id=False):
- round_value = 1
- qty = 0.0
- if product_amt and product_id:
- product = self.pool.get('product.product').browse(cr, uid, product_id)
- coeff_def2uom = 1
- if (product_uom != product.uom_id.id):
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, product_id, product_uom, {})
- qty = rounding(coeff_def2uom * product_amt/(product.product_tmpl_id.list_price), round_value)
- res = {'value': {'product_qty': qty}}
- return res
-
- def _to_default_uom_factor(self, cr, uid, product_id, uom_id, context=None):
- uom_obj = self.pool.get('product.uom')
- product_obj = self.pool.get('product.product')
- product = product_obj.browse(cr, uid, product_id, context=context)
- uom = uom_obj.browse(cr, uid, uom_id, context=context)
- coef = uom.factor
- if uom.category_id.id <> product.uom_id.category_id.id:
- coef = coef * product.uos_coeff
- return product.uom_id.factor / coef
-
- def _from_default_uom_factor(self, cr, uid, product_id, uom_id, context=None):
- uom_obj = self.pool.get('product.uom')
- product_obj = self.pool.get('product.product')
- product = product_obj.browse(cr, uid, product_id, context=context)
- uom = uom_obj.browse(cr, uid, uom_id, context=context)
- res = uom.factor
- if uom.category_id.id <> product.uom_id.category_id.id:
- res = res * product.uos_coeff
- return res / product.uom_id.factor, uom.rounding
-
- def _sales_per_users(self, cr, uid, so, so_line, company, users):
- cr.execute("SELECT sum(sol.product_uom_qty) FROM sale_order_line AS sol LEFT JOIN sale_order AS s ON (s.id = sol.order_id) " \
- "WHERE (sol.id IN %s) AND (s.state NOT IN (\'draft\',\'cancel\')) AND (s.id IN %s) AND (s.company_id=%s) " \
- "AND (s.user_id IN %s) " ,(tuple(so_line), tuple(so), company, tuple(users)))
- ret = cr.fetchone()[0] or 0.0
- return ret
-
- def _sales_per_warehouse(self, cr, uid, so, so_line, company, shops):
- cr.execute("SELECT sum(sol.product_uom_qty) FROM sale_order_line AS sol LEFT JOIN sale_order AS s ON (s.id = sol.order_id) " \
- "WHERE (sol.id IN %s) AND (s.state NOT IN (\'draft\',\'cancel\')) AND (s.id IN %s)AND (s.company_id=%s) " \
- "AND (s.shop_id IN %s)" ,(tuple(so_line), tuple(so), company, tuple(shops)))
- ret = cr.fetchone()[0] or 0.0
- return ret
-
- def _sales_per_company(self, cr, uid, so, so_line, company):
- cr.execute("SELECT sum(sol.product_uom_qty) FROM sale_order_line AS sol LEFT JOIN sale_order AS s ON (s.id = sol.order_id) " \
- "WHERE (sol.id IN %s) AND (s.state NOT IN (\'draft\',\'cancel\')) AND (s.id IN %s) AND (s.company_id=%s)", (tuple(so_line), tuple(so), company))
- ret = cr.fetchone()[0] or 0.0
- return ret
-
- def calculate_sales_history(self, cr, uid, ids, context, *args):
- sales = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],]
- for obj in self.browse(cr, uid, ids, context=context):
- periods = obj.analyzed_period1_id, obj.analyzed_period2_id, obj.analyzed_period3_id, obj.analyzed_period4_id, obj.analyzed_period5_id
- so_obj = self.pool.get('sale.order')
- so_line_obj = self.pool.get('sale.order.line')
- so_line_product_ids = so_line_obj.search(cr, uid, [('product_id','=', obj.product_id.id)], context = context)
- if so_line_product_ids:
- shops = users = None
- if obj.analyzed_warehouse_id:
- shops = self.pool.get('sale.shop').search(cr, uid,[('warehouse_id','=', obj.analyzed_warehouse_id.id)], context = context)
- if obj.analyzed_team_id:
- users = [u.id for u in obj.analyzed_team_id.member_ids]
- factor, _ = self._from_default_uom_factor(cr, uid, obj.product_id.id, obj.product_uom.id, context=context)
- for i, period in enumerate(periods):
- if period:
- so_period_ids = so_obj.search(cr, uid, [('date_order','>=',period.date_start),('date_order','<=',period.date_stop) ], context = context)
- if so_period_ids:
- if obj.analyzed_user_id:
- sales[i][0] = self._sales_per_users(cr, uid, so_period_ids, so_line_product_ids, obj.company_id.id, [obj.analyzed_user_id.id])
- sales[i][0] *= factor
- if users:
- sales[i][1] = self._sales_per_users(cr, uid, so_period_ids, so_line_product_ids, obj.company_id.id, users)
- sales[i][1] *= factor
- if shops:
- sales[i][2] = self._sales_per_warehouse(cr, uid, so_period_ids, so_line_product_ids, obj.company_id.id, shops)
- sales[i][2] *= factor
- if obj.analyze_company:
- sales[i][3] = self._sales_per_company(cr, uid, so_period_ids, so_line_product_ids, obj.company_id.id, )
- sales[i][3] *= factor
- self.write(cr, uid, ids, {
- 'analyzed_period1_per_user': sales[0][0],
- 'analyzed_period2_per_user': sales[1][0],
- 'analyzed_period3_per_user': sales[2][0],
- 'analyzed_period4_per_user': sales[3][0],
- 'analyzed_period5_per_user': sales[4][0],
- 'analyzed_period1_per_dept': sales[0][1],
- 'analyzed_period2_per_dept': sales[1][1],
- 'analyzed_period3_per_dept': sales[2][1],
- 'analyzed_period4_per_dept': sales[3][1],
- 'analyzed_period5_per_dept': sales[4][1],
- 'analyzed_period1_per_warehouse': sales[0][2],
- 'analyzed_period2_per_warehouse': sales[1][2],
- 'analyzed_period3_per_warehouse': sales[2][2],
- 'analyzed_period4_per_warehouse': sales[3][2],
- 'analyzed_period5_per_warehouse': sales[4][2],
- 'analyzed_period1_per_company': sales[0][3],
- 'analyzed_period2_per_company': sales[1][3],
- 'analyzed_period3_per_company': sales[2][3],
- 'analyzed_period4_per_company': sales[3][3],
- 'analyzed_period5_per_company': sales[4][3],
- })
- return True
-
-stock_sale_forecast()
-
-# The main Stock Planning object
-# A lot of changes by contributor in ver 1.1
-class stock_planning(osv.osv):
- _name = "stock.planning"
-
- def _get_in_out(self, cr, uid, val, date_start, date_stop, direction, done, context=None):
- if context is None:
- context = {}
- product_obj = self.pool.get('product.product')
- mapping = {'in': {
- 'field': "incoming_qty",
- 'adapter': lambda x: x,
- },
- 'out': {
- 'field': "outgoing_qty",
- 'adapter': lambda x: -x,
- },
- }
- context['from_date'] = date_start
- context['to_date'] = date_stop
- locations = [val.warehouse_id.lot_stock_id.id,]
- if not val.stock_only:
- locations.extend([val.warehouse_id.lot_input_id.id, val.warehouse_id.lot_output_id.id])
- context['location'] = locations
- context['compute_child'] = True
- prod_id = val.product_id.id
- if done:
- context.update({ 'states':('done',), 'what':(direction,) })
- prod_ids = [prod_id]
- st = product_obj.get_product_available(cr, uid, prod_ids, context=context)
- res = mapping[direction]['adapter'](st.get(prod_id,0.0))
- else:
- product = product_obj.read(cr, uid, prod_id,[], context)
- product_qty = product[mapping[direction]['field']]
- res = mapping[direction]['adapter'](product_qty)
- return res
-
- def _get_outgoing_before(self, cr, uid, val, date_start, date_stop, context=None):
- cr.execute("SELECT sum(planning.planned_outgoing), planning.product_uom \
- FROM stock_planning AS planning \
- LEFT JOIN stock_period AS period \
- ON (planning.period_id = period.id) \
- WHERE (period.date_stop >= %s) AND (period.date_stop <= %s) \
- AND (planning.product_id = %s) AND (planning.company_id = %s) \
- GROUP BY planning.product_uom", \
- (date_start, date_stop, val.product_id.id, val.company_id.id,))
- planning_qtys = cr.fetchall()
- res = self._to_default_uom(cr, uid, val, planning_qtys, context)
- return res
-
- def _to_default_uom(self, cr, uid, val, qtys, context=None):
- res_qty = 0
- if qtys:
- for qty, prod_uom in qtys:
- coef = self._to_default_uom_factor(cr, uid, val.product_id.id, prod_uom, context=context)
- res_qty += qty * coef
- return res_qty
-
- def _to_form_uom(self, cr, uid, val, qtys, context=None):
- res_qty = 0
- if qtys:
- for qty, prod_uom in qtys:
- coef = self._to_default_uom_factor(cr, uid, val.product_id.id, prod_uom, context=context)
- res_coef, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, val.product_uom.id, context=context)
- coef = coef * res_coef
- res_qty += rounding(qty * coef, round_value)
- return res_qty
-
-
- def _get_forecast(self, cr, uid, ids, field_names, arg, context=None):
- res = {}
- for val in self.browse(cr, uid, ids, context=context):
- res[val.id] = {}
- valid_part = val.confirmed_forecasts_only and " AND state = 'validated'" or ""
- cr.execute('SELECT sum(product_qty), product_uom \
- FROM stock_sale_forecast \
- WHERE product_id = %s AND period_id = %s AND company_id = %s '+valid_part+ \
- 'GROUP BY product_uom', \
- (val.product_id.id,val.period_id.id, val.company_id.id))
- company_qtys = cr.fetchall()
- res[val.id]['company_forecast'] = self._to_form_uom(cr, uid, val, company_qtys, context)
-
- cr.execute('SELECT sum(product_qty), product_uom \
- FROM stock_sale_forecast \
- WHERE product_id = %s and period_id = %s AND warehouse_id = %s ' + valid_part + \
- 'GROUP BY product_uom', \
- (val.product_id.id,val.period_id.id, val.warehouse_id.id))
- warehouse_qtys = cr.fetchall()
- res[val.id]['warehouse_forecast'] = self._to_form_uom(cr, uid, val, warehouse_qtys, context)
-# res[val.id]['warehouse_forecast'] = rounding(res[val.id]['warehouse_forecast'], val.product_id.uom_id.rounding)
- return res
-
- def _get_stock_start(self, cr, uid, val, date, context=None):
- if context is None:
- context = {}
- context['from_date'] = None
- context['to_date'] = date
- locations = [val.warehouse_id.lot_stock_id.id,]
- if not val.stock_only:
- locations.extend([val.warehouse_id.lot_input_id.id, val.warehouse_id.lot_output_id.id])
- context['location'] = locations
- context['compute_child'] = True
- product_obj = self.pool.get('product.product').read(cr, uid,val.product_id.id,[], context)
- res = product_obj['qty_available'] # value for stock_start
- return res
-
- def _get_past_future(self, cr, uid, ids, field_names, arg, context=None):
- res = {}
- for val in self.browse(cr, uid, ids, context=context):
- if val.period_id.date_stop < time.strftime('%Y-%m-%d'):
- res[val.id] = 'Past'
- else:
- res[val.id] = 'Future'
- return res
-
- def _get_op(self, cr, uid, ids, field_names, arg, context=None):
- res = {}
- for val in self.browse(cr, uid, ids, context=context):
- res[val.id]={}
- cr.execute("SELECT product_min_qty, product_max_qty, product_uom \
- FROM stock_warehouse_orderpoint \
- WHERE warehouse_id = %s AND product_id = %s AND active = 'TRUE'", (val.warehouse_id.id, val.product_id.id))
- ret = cr.fetchone() or [0.0,0.0,False]
- coef = 1
- round_value = 1
- if ret[2]:
- coef = self._to_default_uom_factor(cr, uid, val.product_id.id, ret[2], context)
- res_coef, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, val.product_uom.id, context=context)
- coef = coef * res_coef
- res[val.id]['minimum_op'] = rounding(ret[0]*coef, round_value)
- res[val.id]['maximum_op'] = rounding(ret[1]*coef, round_value)
- return res
-
- def onchange_company(self, cr, uid, ids, company_id=False):
- result = {}
- if company_id:
- result['warehouse_id'] = False
- return {'value': result}
-
- def onchange_uom(self, cr, uid, ids, product_uom=False, product_id=False, active_uom=False,
- planned_outgoing=0.0, to_procure=0.0):
- ret = {}
- if not product_uom:
- return {}
- if active_uom:
- coeff_uom2def = self._to_default_uom_factor(cr, uid, product_id, active_uom, {})
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, product_id, product_uom, {})
- coeff = coeff_uom2def * coeff_def2uom
- ret['planned_outgoing'] = rounding(coeff * planned_outgoing, round_value)
- ret['to_procure'] = rounding(coeff * to_procure, round_value)
- ret['active_uom'] = product_uom
- return {'value': ret}
-
- _columns = {
- 'company_id': fields.many2one('res.company', 'Company', required = True),
- 'history': fields.text('Procurement History', readonly=True, help = "History of procurement or internal supply of this planning line."),
- 'state' : fields.selection([('draft','Draft'),('done','Done')],'Status',readonly=True),
- 'period_id': fields.many2one('stock.period' , 'Period', required=True, \
- help = 'Period for this planning. Requisition will be created for beginning of the period.', select=True),
- 'warehouse_id': fields.many2one('stock.warehouse','Warehouse', required=True),
- 'product_id': fields.many2one('product.product' , 'Product', required=True, help = 'Product which this planning is created for.'),
- 'product_uom_categ' : fields.many2one('product.uom.categ', 'Product Unit of Measure Category'), # Invisible field for product_uom domain
- 'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True, help = "Unit of Measure used to show the quantities of stock calculation." \
- "You can use units from default category or from second category (UoS category)."),
- 'product_uos_categ': fields.many2one('product.uom.categ', 'Product Unit of Measure Category'), # Invisible field for product_uos domain
-# Field used in onchange_uom to check what uom was before change to recalculate quantities according to old uom (active_uom) and new uom.
- 'active_uom': fields.many2one('product.uom', string = "Active Unit of Measure"), # It works only in Forecast
- 'planned_outgoing': fields.float('Planned Out', required=True, \
- help = 'Enter planned outgoing quantity from selected Warehouse during the selected Period of selected Product. '\
- 'To plan this value look at Confirmed Out or Sales Forecasts. This value should be equal or greater than Confirmed Out.'),
- 'company_forecast': fields.function(_get_forecast, string ='Company Forecast', multi = 'company', \
- help = 'All sales forecasts for whole company (for all Warehouses) of selected Product during selected Period.'),
- 'warehouse_forecast': fields.function(_get_forecast, string ='Warehouse Forecast', multi = 'warehouse',\
- help = 'All sales forecasts for selected Warehouse of selected Product during selected Period.'),
- 'stock_simulation': fields.float('Stock Simulation', readonly =True, \
- help = 'Stock simulation at the end of selected Period.\n For current period it is: \n' \
- 'Initial Stock - Already Out + Already In - Expected Out + Incoming Left.\n' \
- 'For periods ahead it is: \nInitial Stock - Planned Out Before + Incoming Before - Planned Out + Planned In.'),
- 'incoming': fields.float('Confirmed In', readonly=True, \
- help = 'Quantity of all confirmed incoming moves in calculated Period.'),
- 'outgoing': fields.float('Confirmed Out', readonly=True, \
- help = 'Quantity of all confirmed outgoing moves in calculated Period.'),
- 'incoming_left': fields.float('Incoming Left', readonly=True, \
- help = 'Quantity left to Planned incoming quantity. This is calculated difference between Planned In and Confirmed In. ' \
- 'For current period Already In is also calculated. This value is used to create procurement for lacking quantity.'),
- 'outgoing_left': fields.float('Expected Out', readonly=True, \
- help = 'Quantity expected to go out in selected period besides Confirmed Out. As a difference between Planned Out and Confirmed Out. ' \
- 'For current period Already Out is also calculated'),
- 'to_procure': fields.float(string='Planned In', required=True, \
- help = 'Enter quantity which (by your plan) should come in. Change this value and observe Stock simulation. ' \
- 'This value should be equal or greater than Confirmed In.'),
- 'line_time': fields.function(_get_past_future, type='char', string='Past/Future'),
- 'minimum_op': fields.function(_get_op, type='float', string = 'Minimum Rule', multi= 'minimum', \
- help = 'Minimum quantity set in Minimum Stock Rules for this Warehouse'),
- 'maximum_op': fields.function(_get_op, type='float', string = 'Maximum Rule', multi= 'maximum', \
- help = 'Maximum quantity set in Minimum Stock Rules for this Warehouse'),
- 'outgoing_before': fields.float('Planned Out Before', readonly=True, \
- help= 'Planned Out in periods before calculated. '\
- 'Between start date of current period and one day before start of calculated period.'),
- 'incoming_before': fields.float('Incoming Before', readonly = True, \
- help= 'Confirmed incoming in periods before calculated (Including Already In). '\
- 'Between start date of current period and one day before start of calculated period.'),
- 'stock_start': fields.float('Initial Stock', readonly=True, \
- help= 'Stock quantity one day before current period.'),
- 'already_out': fields.float('Already Out', readonly=True, \
- help= 'Quantity which is already dispatched out of this warehouse in current period.'),
- 'already_in': fields.float('Already In', readonly=True, \
- help= 'Quantity which is already picked up to this warehouse in current period.'),
- 'stock_only': fields.boolean("Stock Location Only", help = "Check to calculate stock location of selected warehouse only. " \
- "If not selected calculation is made for input, stock and output location of warehouse."),
- "procure_to_stock": fields.boolean("Procure To Stock Location", help = "Check to make procurement to stock location of selected warehouse. " \
- "If not selected procurement will be made into input location of warehouse."),
- "confirmed_forecasts_only": fields.boolean("Validated Forecasts", help = "Check to take validated forecasts only. " \
- "If not checked system takes validated and draft forecasts."),
- 'supply_warehouse_id': fields.many2one('stock.warehouse','Source Warehouse', help = "Warehouse used as source in supply pick move created by 'Supply from Another Warehouse'."),
- "stock_supply_location": fields.boolean("Stock Supply Location", help = "Check to supply from Stock location of Supply Warehouse. " \
- "If not checked supply will be made from Output location of Supply Warehouse. Used in 'Supply from Another Warehouse' with Supply Warehouse."),
-
- }
-
- _defaults = {
- 'state': 'draft' ,
- 'to_procure': 0.0,
- 'planned_outgoing': 0.0,
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.planning', context=c),
- }
-
- _order = 'period_id'
-
- def _to_default_uom_factor(self, cr, uid, product_id, uom_id, context=None):
- uom_obj = self.pool.get('product.uom')
- product_obj = self.pool.get('product.product')
- product = product_obj.browse(cr, uid, product_id, context=context)
- uom = uom_obj.browse(cr, uid, uom_id, context=context)
- coef = uom.factor
- if uom.category_id.id != product.uom_id.category_id.id:
- coef = coef * product.uos_coeff
- return product.uom_id.factor / coef
-
-
- def _from_default_uom_factor(self, cr, uid, product_id, uom_id, context=None):
- uom_obj = self.pool.get('product.uom')
- product_obj = self.pool.get('product.product')
- product = product_obj.browse(cr, uid, product_id, context=context)
- uom = uom_obj.browse(cr, uid, uom_id, context=context)
- res = uom.factor
- if uom.category_id.id != product.uom_id.category_id.id:
- res = res * product.uos_coeff
- return res / product.uom_id.factor, uom.rounding
-
- def calculate_planning(self, cr, uid, ids, context, *args):
- one_second = relativedelta(seconds=1)
- today = datetime.today()
- current_date_beginning_c = datetime(today.year, today.month, today.day)
- current_date_end_c = current_date_beginning_c + relativedelta(days=1, seconds=-1) # to get hour 23:59:59
- current_date_beginning = current_date_beginning_c.strftime('%Y-%m-%d %H:%M:%S')
- current_date_end = current_date_end_c.strftime('%Y-%m-%d %H:%M:%S')
- _logger.debug("Calculate Planning: current date beg: %s and end: %s", current_date_beginning, current_date_end)
- for val in self.browse(cr, uid, ids, context=context):
- day = datetime.strptime(val.period_id.date_start, '%Y-%m-%d %H:%M:%S')
- dbefore = datetime(day.year, day.month, day.day) - one_second
- day_before_calculated_period = dbefore.strftime('%Y-%m-%d %H:%M:%S') # one day before start of calculated period
- _logger.debug("Day before calculated period: %s ", day_before_calculated_period)
- cr.execute("SELECT date_start \
- FROM stock_period AS period \
- LEFT JOIN stock_planning AS planning \
- ON (planning.period_id = period.id) \
- WHERE (period.date_stop >= %s) AND (period.date_start <= %s) AND \
- planning.product_id = %s", (current_date_end, current_date_end, val.product_id.id,)) #
- date = cr.fetchone()
- start_date_current_period = date and date[0] or False
- start_date_current_period = start_date_current_period or current_date_beginning
- day = datetime.strptime(start_date_current_period, '%Y-%m-%d %H:%M:%S')
- dbefore = datetime(day.year, day.month, day.day) - one_second
- date_for_start = dbefore.strftime('%Y-%m-%d %H:%M:%S') # one day before current period
- _logger.debug("Date for start: %s", date_for_start)
- already_out = self._get_in_out(cr, uid, val, start_date_current_period, current_date_end, direction='out', done=True, context=context),
- already_in = self._get_in_out(cr, uid, val, start_date_current_period, current_date_end, direction='in', done=True, context=context),
- outgoing = self._get_in_out(cr, uid, val, val.period_id.date_start, val.period_id.date_stop, direction='out', done=False, context=context),
- incoming = self._get_in_out(cr, uid, val, val.period_id.date_start, val.period_id.date_stop, direction='in', done=False, context=context),
- outgoing_before = self._get_outgoing_before(cr, uid, val, start_date_current_period, day_before_calculated_period, context=context),
- incoming_before = self._get_in_out(cr, uid, val, start_date_current_period, day_before_calculated_period, direction='in', done=False, context=context),
- stock_start = self._get_stock_start(cr, uid, val, date_for_start, context=context),
- if start_date_current_period == val.period_id.date_start: # current period is calculated
- current = True
- else:
- current = False
- factor, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, val.product_uom.id, context=context)
- self.write(cr, uid, ids, {
- 'already_out': rounding(already_out[0]*factor,round_value),
- 'already_in': rounding(already_in[0]*factor,round_value),
- 'outgoing': rounding(outgoing[0]*factor,round_value),
- 'incoming': rounding(incoming[0]*factor,round_value),
- 'outgoing_before' : rounding(outgoing_before[0]*factor,round_value),
- 'incoming_before': rounding((incoming_before[0]+ (not current and already_in[0]))*factor,round_value),
- 'outgoing_left': rounding(val.planned_outgoing - (outgoing[0] + (current and already_out[0]))*factor,round_value),
- 'incoming_left': rounding(val.to_procure - (incoming[0] + (current and already_in[0]))*factor,round_value),
- 'stock_start': rounding(stock_start[0]*factor,round_value),
- 'stock_simulation': rounding(val.to_procure - val.planned_outgoing + (stock_start[0]+ incoming_before[0] - outgoing_before[0] \
- + (not current and already_in[0]))*factor,round_value),
- })
- return True
-
-# method below converts quantities and uoms to general OpenERP standard with UoM Qty, UoM, UoS Qty, UoS.
-# from stock_planning standard where you have one Qty and one UoM (any from UoM or UoS category)
-# so if UoM is from UoM category it is used as UoM in standard and if product has UoS the UoS will be calcualated.
-# If UoM is from UoS category it is recalculated to basic UoS from product (in planning you can use any UoS from UoS category)
-# and basic UoM is calculated.
- def _qty_to_standard(self, cr, uid, val, context=None):
- uos = False
- uos_qty = 0.0
- if val.product_uom.category_id.id == val.product_id.uom_id.category_id.id:
- uom_qty = val.incoming_left
- uom = val.product_uom.id
- if val.product_id.uos_id:
- uos = val.product_id.uos_id.id
- coeff_uom2def = self._to_default_uom_factor(cr, uid, val.product_id.id, val.product_uom.id, {})
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, uos, {})
- uos_qty = rounding(val.incoming_left * coeff_uom2def * coeff_def2uom, round_value)
- elif val.product_uom.category_id.id == val.product_id.uos_id.category_id.id:
- coeff_uom2def = self._to_default_uom_factor(cr, uid, val.product_id.id, val.product_uom.id, {})
- uos = val.product_id.uos_id.id
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, uos, {})
- uos_qty = rounding(val.incoming_left * coeff_uom2def * coeff_def2uom, round_value)
- uom = val.product_id.uom_id.id
- coeff_def2uom, round_value = self._from_default_uom_factor(cr, uid, val.product_id.id, uom, {})
- uom_qty = rounding(val.incoming_left * coeff_uom2def * coeff_def2uom, round_value)
- return uom_qty, uom, uos_qty, uos
-
- def procure_incomming_left(self, cr, uid, ids, context, *args):
- for obj in self.browse(cr, uid, ids, context=context):
- if obj.incoming_left <= 0:
- raise osv.except_osv(_('Error!'), _('Incoming Left must be greater than 0.'))
- uom_qty, uom, uos_qty, uos = self._qty_to_standard(cr, uid, obj, context)
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- proc_id = self.pool.get('procurement.order').create(cr, uid, {
- 'company_id' : obj.company_id.id,
- 'name': _('MPS planning for %s') %(obj.period_id.name),
- 'origin': _('MPS(%s) %s') %(user.login, obj.period_id.name),
- 'date_planned': obj.period_id.date_start,
- 'product_id': obj.product_id.id,
- 'product_qty': uom_qty,
- 'product_uom': uom,
- 'product_uos_qty': uos_qty,
- 'product_uos': uos,
- 'location_id': obj.procure_to_stock and obj.warehouse_id.lot_stock_id.id or obj.warehouse_id.lot_input_id.id,
- 'procure_method': 'make_to_order',
- 'note' : _(' Procurement created by MPS for user: %s Creation Date: %s \
- \n For period: %s \
- \n according to state: \
- \n Warehouse Forecast: %s \
- \n Initial Stock: %s \
- \n Planned Out: %s Planned In: %s \
- \n Already Out: %s Already In: %s \
- \n Confirmed Out: %s Confirmed In: %s \
- \n Planned Out Before: %s Confirmed In Before: %s \
- \n Expected Out: %s Incoming Left: %s \
- \n Stock Simulation: %s Minimum stock: %s') %(user.login, time.strftime('%Y-%m-%d %H:%M:%S'),
- obj.period_id.name, obj.warehouse_forecast, obj.planned_outgoing, obj.stock_start, obj.to_procure,
- obj.already_out, obj.already_in, obj.outgoing, obj.incoming, obj.outgoing_before, obj.incoming_before,
- obj.outgoing_left, obj.incoming_left, obj.stock_simulation, obj.minimum_op)
- }, context=context)
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
- self.calculate_planning(cr, uid, ids, context)
- prev_text = obj.history or ""
- self.write(cr, uid, ids, {
- 'history': _('%s Procurement (%s, %s) %s %s \n') % (prev_text, user.login, time.strftime('%Y.%m.%d %H:%M'),
- obj.incoming_left, obj.product_uom.name)
- })
-
- return True
-
- def internal_supply(self, cr, uid, ids, context, *args):
- for obj in self.browse(cr, uid, ids, context=context):
- if obj.incoming_left <= 0:
- raise osv.except_osv(_('Error!'), _('Incoming Left must be greater than 0.'))
- if not obj.supply_warehouse_id:
- raise osv.except_osv(_('Error!'), _('You must specify a Source Warehouse.'))
- if obj.supply_warehouse_id.id == obj.warehouse_id.id:
- raise osv.except_osv(_('Error!'), _('You must specify a Source Warehouse different than calculated (destination) Warehouse.'))
- uom_qty, uom, uos_qty, uos = self._qty_to_standard(cr, uid, obj, context)
- user = self.pool.get('res.users').browse(cr, uid, uid, context)
- picking_id = self.pool.get('stock.picking').create(cr, uid, {
- 'origin': _('MPS(%s) %s') %(user.login, obj.period_id.name),
- 'type': 'internal',
- 'state': 'auto',
- 'date': obj.period_id.date_start,
- 'move_type': 'direct',
- 'invoice_state': 'none',
- 'company_id': obj.company_id.id,
- 'note': _('Pick created from MPS by user: %s Creation Date: %s \
- \nFor period: %s according to state: \
- \n Warehouse Forecast: %s \
- \n Initial Stock: %s \
- \n Planned Out: %s Planned In: %s \
- \n Already Out: %s Already In: %s \
- \n Confirmed Out: %s Confirmed In: %s \
- \n Planned Out Before: %s Confirmed In Before: %s \
- \n Expected Out: %s Incoming Left: %s \
- \n Stock Simulation: %s Minimum stock: %s ')
- % (user.login, time.strftime('%Y-%m-%d %H:%M:%S'), obj.period_id.name, obj.warehouse_forecast,
- obj.stock_start, obj.planned_outgoing, obj.to_procure, obj.already_out, obj.already_in,
- obj.outgoing, obj.incoming, obj.outgoing_before, obj.incoming_before,
- obj.outgoing_left, obj.incoming_left, obj.stock_simulation, obj.minimum_op)
- })
-
- move_id = self.pool.get('stock.move').create(cr, uid, {
- 'name': _('MPS(%s) %s') %(user.login, obj.period_id.name),
- 'picking_id': picking_id,
- 'product_id': obj.product_id.id,
- 'date': obj.period_id.date_start,
- 'product_qty': uom_qty,
- 'product_uom': uom,
- 'product_uos_qty': uos_qty,
- 'product_uos': uos,
- 'location_id': obj.stock_supply_location and obj.supply_warehouse_id.lot_stock_id.id or \
- obj.supply_warehouse_id.lot_output_id.id,
- 'location_dest_id': obj.procure_to_stock and obj.warehouse_id.lot_stock_id.id or \
- obj.warehouse_id.lot_input_id.id,
- 'tracking_id': False,
- 'company_id': obj.company_id.id,
- })
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
-
- self.calculate_planning(cr, uid, ids, context)
- prev_text = obj.history or ""
- pick_name = self.pool.get('stock.picking').browse(cr, uid, picking_id).name
- self.write(cr, uid, ids, {
- 'history': _('%s Pick List %s (%s, %s) %s %s \n') % (prev_text, pick_name, user.login, time.strftime('%Y.%m.%d %H:%M'),
- obj.incoming_left, obj.product_uom.name)
- })
-
- return True
-
- def product_id_change(self, cr, uid, ids, product_id):
- ret = {}
- if product_id:
- product_rec = self.pool.get('product.product').browse(cr, uid, product_id)
- ret['product_uom'] = product_rec.uom_id.id
- ret['active_uom'] = product_rec.uom_id.id
- ret['product_uom_categ'] = product_rec.uom_id.category_id.id
- ret['product_uos_categ'] = product_rec.uos_id and product_rec.uos_id.category_id.id or False
- else:
- ret['product_uom'] = False
- ret['product_uom_categ'] = False
- ret['product_uos_categ'] = False
- res = {'value': ret}
- return res
-
-stock_planning()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml
deleted file mode 100644
index 56c3b9a1eaa..00000000000
--- a/addons/stock_planning/stock_planning_view.xml
+++ /dev/null
@@ -1,347 +0,0 @@
-
-
-
-
-
-
-
-
- stock.period.form
- stock.period
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.period.tree
- stock.period
-
-
-
-
-
-
-
-
-
-
-
- stock.period.search
- stock.period
-
-
-
-
-
-
-
-
-
-
-
-
- Stock Periods
- stock.period
- form
- tree,form
-
- Stock periods are used for stock planning. Stock periods are independent of account periods. You can use wizard for creating periods and review them here.
-
-
-
-
-
-
- stock.sale.forecast.form
- stock.sale.forecast
-
-
-
-
-
-
- stock.planning.list.select
- stock.planning
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- stock.planning.tree
- stock.planning
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Master Procurement Schedule
- stock.planning
- ir.actions.act_window
- form
- tree,form
- The Master Procurement Schedule can be the main driver for warehouse replenishment, or can complement the automatic MRP scheduling (minimum stock rules, etc.).
-Each MPS line gives you a pre-computed overview of the incoming and outgoing quantities of a given product for a given Stock Period in a given Warehouse, based on the current and future stock levels,
-as well as the planned stock moves. The forecast quantities can be altered manually, and when satisfied with resulting (simulated) Stock quantity, you can trigger the procurement of what is missing to reach your desired quantities
-
-
-
-
-
-
diff --git a/addons/stock_planning/test/stock_planning.yml b/addons/stock_planning/test/stock_planning.yml
deleted file mode 100644
index 0c9bb5ff5ec..00000000000
--- a/addons/stock_planning/test/stock_planning.yml
+++ /dev/null
@@ -1,257 +0,0 @@
--
- In order to test the flow of stock planning module. I will create forecast periods,
- stock forecast and then with master procurement schedule.
--
- I create weekly stock periods for the month of July.
--
- I create stock period for the first week of July.
--
- !record {model: stock.period, id: stock_period_01}:
- date_start: !eval "'%s-07-01 00:00:00' %(datetime.now().year)"
- date_stop: !eval "'%s-07-06 23:59:00' %(datetime.now().year)"
- name: !eval "'%s, week 27' %(datetime.now().year)"
--
- I create stock period for the second week of July.
--
- !record {model: stock.period, id: stock_period_02}:
- date_start: !eval "'%s-07-07 00:00:00' %(datetime.now().year)"
- date_stop: !eval "'%s-07-12 23:59:00' %(datetime.now().year)"
- name: !eval "'%s, week 28' %(datetime.now().year)"
--
- I create stock period for the third week of July.
--
- !record {model: stock.period, id: stock_period_03}:
- date_start: !eval "'%s-07-15 00:00:00' %(datetime.now().year)"
- date_stop: !eval "'%s-07-20 23:59:00' %(datetime.now().year)"
- name: !eval "'%s, week 29' %(datetime.now().year)"
--
- I create stock period for the fourth week of July.
--
- !record {model: stock.period, id: stock_period_04}:
- date_start: !eval "'%s-07-22 00:00:00' %(datetime.now().year)"
- date_stop: !eval "'%s-07-27 23:59:00' %(datetime.now().year)"
- name: !eval "'%s, week 30' %(datetime.now().year)"
--
- I create stock period for the fifth week of July.
--
- !record {model: stock.period, id: stock_period_05}:
- date_start: !eval "'%s-07-29 00:00:00' %(datetime.now().year)"
- date_stop: !eval "'%s-07-31 23:59:00' %(datetime.now().year)"
- name: !eval "'%s, week 31' %(datetime.now().year)"
--
- I validate in open state module stock.period
--
- !python {model: stock.period}: |
- self.button_open(cr, uid, [ref("stock_period_01")], {"lang": 'en_GB', "tz": False, "active_model": 'ir.ui.menu', "active_id": ref("stock_planning.menu_stock_period_main"), "active_ids": [ref("stock_planning.menu_stock_period_main")], "department_id": False})
-
--
- I validate in close state module stock.period
--
- !python {model: stock.period}: |
- self.button_close(cr, uid, [ref("stock_period_01")], {"lang": 'en_GB', "tz": False, "active_model": 'ir.ui.menu', "active_id": ref("stock_planning.menu_stock_period_main"), "active_ids": [ref("stock_planning.menu_stock_period_main")], "department_id": False})
-
--
- Now I create the forecast for this period for all PCs.
--
- !record {model: stock.sale.forecast.createlines, id: stock_sale_forecast_createlines_0}:
- company_id: base.main_company
- period_id: stock_period_03
- product_categ_id: product.product_category_4
- warehouse_id: stock.warehouse0
--
- Performing an osv_memory action create_forecast on module stock.sale.forecast.createlines
--
- !python {model: stock.sale.forecast.createlines}: |
- self.create_forecast(cr, uid, [ref("stock_sale_forecast_createlines_0")], {"lang":
- 'en_US', "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_sale_forecast_createlines")],
- "tz": False, "active_id": ref("stock_planning.menu_stock_sale_forecast_createlines"),
- })
-
--
- I create stock.period.createlines for the first week of August.
--
- !record {model: stock.period.createlines, id: stock_period_createlines_week01}:
- date_start: !eval "'%s-08-01' %(datetime.now().year)"
- date_stop: !eval "'%s-08-06' %(datetime.now().year)"
- name: !eval "'%s, week 31' %(datetime.now().year)"
-
--
- Performing an osv_memory action create_stock_periods on module stock.period.createlines
--
- !python {model: stock.period.createlines}: |
- self.create_stock_periods(cr, uid, [ref("stock_period_createlines_week01")], {"lang":
- 'en_US', "name": 'Weekly', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
- "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
- })
--
- I create stock.period.createlines for the month of August - September
--
- !record {model: stock.period.createlines, id: stock_period_createlines_month01}:
- date_start: !eval "'%s-08-01' %(datetime.now().year)"
- date_stop: !eval "'%s-09-01' %(datetime.now().year)"
- name: !eval "'%s, month 8' %(datetime.now().year)"
-
--
- Performing an osv_memory action create_stock_periods on module stock.period.createlines
--
- !python {model: stock.period.createlines}: |
- self.create_stock_periods(cr, uid, [ref("stock_period_createlines_month01")], {"lang":
- 'en_US', "name": 'Monthly', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
- "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
- })
-
--
- I create stock.period.createlines for the Day of August
--
- !record {model: stock.period.createlines, id: stock_period_createlines_day01}:
- date_start: !eval "'%s-08-01' %(datetime.now().year)"
- date_stop: !eval "'%s-08-01' %(datetime.now().year)"
- name: !eval "'%s, day 01' %(datetime.now().year)"
-
--
- Performing an osv_memory action create_stock_periods on module stock.period.createlines
--
- !python {model: stock.period.createlines}: |
- self.create_stock_periods(cr, uid, [ref("stock_period_createlines_day01")], {"lang":
- 'en_US', "name": 'Daily', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
- "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
- })
-
--
- I Read date_start on module stock.period.createlines.
--
- !python {model: stock.period.createlines }: |
- self._get_new_period_start(cr, uid,{"lang":'en_US', "active_model": "ir.ui.menu",
- "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
- "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),"department_id": False
- })
-
--
- I create a sale order for PC and Laptop.
--
- !record {model: sale.order, id: sale_order_so0}:
- date_order: !eval time.strftime('%Y-07-20')
- invoice_quantity: order
- name: TESTSO006
- order_line:
- - name: '[PC200] PC Assemble + 2GB RAM'
- price_unit: 750.0
- product_uom: product.product_uom_unit
- product_uom_qty: 5.0
- state: draft
- delay: 2.0
- product_id: product.product_product_4
- product_uos_qty: 5.0
- th_weight: 0.0
- type: make_to_stock
- - name: '[LAP-E5] Laptop E5023'
- price_unit: 2950.0
- product_uom: product.product_uom_unit
- product_uom_qty: 12.0
- state: draft
- delay: 3.0
- product_id: product.product_product_25
- product_uos_qty: 12.0
- th_weight: 0.0
- type: make_to_stock
- order_policy: manual
- partner_id: base.res_partner_7
- partner_invoice_id: base.res_partner_address_13
- partner_shipping_id: base.res_partner_address_13
- picking_policy: direct
- pricelist_id: product.list0
- shop_id: sale.sale_shop_1
--
- Now I want to calculate sales history for both the products PC and Laptop and forecast the quantity.
--
- !python {model: stock.sale.forecast}: |
- forecast_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_4'))])
- write_dict = {'product_qty': 30.0,
- 'analyzed_period1_id': ref("stock_period_03"),
- 'analyzed_user_id': ref("base.user_root"),
- 'analyzed_warehouse_id': ref("stock.warehouse0")}
- context = {"lang": "en_US", "tz":False, "search_default_create_uid": 1, "active_model": "ir.ui.menu",
- "department_id": False, "active_ids": [ref("stock_planning.menu_stock_sale_forecast_all")],
- "active_id": ref("stock_planning.menu_stock_sale_forecast_all"), }
- self.write(cr, uid, forecast_ids, write_dict)
- self.calculate_sales_history(cr, uid, forecast_ids, context)
- self.action_validate(cr, uid, forecast_ids, context)
-
--
- Now I applying onchange and unlink forecast record for the product PC.
--
- !python {model: stock.sale.forecast}: |
- forecast_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_5'))])
- self.unlink(cr, uid, forecast_ids, {"lang": "en_US", "tz":
- False, "search_default_create_uid": 1, "active_model": "ir.ui.menu", "department_id":
- False, "active_ids": [ref("stock_planning.menu_stock_sale_forecast_all")], "active_id":
- ref("stock_planning.menu_stock_sale_forecast_all"), })
- self.product_id_change(cr, uid, forecast_ids, ref('product.product_product_20'))
- self.onchange_uom(cr, uid, forecast_ids, ref('product.product_uom_unit'), False, ref('product.product_uom_unit'), ref('product.product_product_20'))
- self.product_amt_change(cr, uid, forecast_ids, 5.0, ref('product.product_uom_unit'), ref('product.product_product_20'))
- self.product_amt_change(cr, uid, forecast_ids, 5.0, ref('product.product_uom_unit'), ref('product.product_product_20'))
- self._to_default_uom_factor(cr, uid, ref('product.product_product_20'), ref('product.product_uom_unit'), {})
- self.onchange_company(cr, uid, forecast_ids, ref('base.res_partner_2'))
-
--
- I create Master procurement schedule for the third week of July.
--
- !record {model: stock.planning.createlines, id: stock_planning_createlines_0}:
- company_id: base.main_company
- period_id: stock_period_03
- product_categ_id: product.product_category_4
- warehouse_id: stock.warehouse0
-
--
- I create source warehouse for supply from another warehouse.
--
- !record {model: stock.warehouse, id: stock_warehouse_0}:
- name: shop1
- company_id: base.main_company
- lot_input_id: stock.stock_location_stock
- lot_stock_id: stock.stock_location_stock
- lot_output_id: stock.stock_location_output
-
--
- Performing an osv_memory action create_planning on module stock.planning.createlines
--
- !python {model: stock.planning.createlines}: |
- self.onchange_company(cr, uid, ref("stock_planning_createlines_0"), ref('base.res_partner_2'))
- self.create_planning(cr, uid, [ref("stock_planning_createlines_0")], {"lang":
- "en_US", "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_planning_createlines")],
- "active_id": ref("stock_planning.menu_stock_planning_createlines"), "department_id":
- False, })
--
- I calculate the planning in master procurement schedule.
--
- !python {model: stock.planning}: |
- planning_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_3')),('period_id','=',ref('stock_period_03'))])
- self.write(cr, uid, planning_ids, {'to_procure': 30.0,'planned_outgoing': 40.0,'supply_warehouse_id': ref("stock_warehouse_0")})
- self.onchange_company(cr, uid, planning_ids, ref('base.res_partner_2'))
- self.onchange_uom(cr, uid, planning_ids, ref('product.product_uom_unit'), ref('product.product_product_3'),ref('product.product_uom_unit'), False, False)
- self.product_id_change(cr, uid, planning_ids, ref('product.product_product_20'))
- context = {"lang": "en_US", "tz": False, "active_model": "ir.ui.menu",
- "active_ids": [ref("stock_planning.menu_stock_planning")],
- "active_id": ref("stock_planning.menu_stock_planning"), "department_id": False,
- }
- self.calculate_planning(cr, uid, planning_ids, context)
- self.internal_supply(cr, uid, planning_ids, context)
-
--
- I create a procurement order for the incoming products left.
--
- !python {model: stock.planning}: |
- planning_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_3')),('period_id','=',ref('stock_period_03'))])
- plann = self.browse(cr, uid, planning_ids)
- assert plann[0].incoming_left, 'Incoming Left must be greater than 0 !'
- self.procure_incomming_left(cr, uid, planning_ids, {"lang": 'en_US', "tz":
- False, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_planning")],
- "active_id": ref("stock_planning.menu_stock_planning"), "department_id": False,
- })
--
- I check whether the procurement orders are created or not.
--
- !python {model: procurement.order}: |
- import datetime
- proc_ids = self.search(cr, uid, [('origin','=','MPS(admin) %s, week 29' % (datetime.datetime.now().year)),('product_id','=',ref("product.product_product_3"))])
- assert proc_ids,'No Procurements!'
diff --git a/addons/stock_planning/wizard/stock_planning_create_periods.py b/addons/stock_planning/wizard/stock_planning_create_periods.py
deleted file mode 100644
index 963ff416822..00000000000
--- a/addons/stock_planning/wizard/stock_planning_create_periods.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from datetime import datetime
-from dateutil.relativedelta import relativedelta
-
-from osv import osv, fields
-
-# Object creating periods quickly
-# changed that stop_date is created with hour 23:59:00 when it was 00:00:00 stop date was excluded from period
-class stock_period_createlines(osv.osv_memory):
- _name = "stock.period.createlines"
-
- def _get_new_period_start(self, cr, uid, context=None):
- cr.execute("select max(date_stop) from stock_period")
- result = cr.fetchone()
- last_date = result and result[0] or False
- if last_date:
- period_start = datetime.strptime(last_date,"%Y-%m-%d %H:%M:%S")+ relativedelta(days=1)
- period_start = period_start - relativedelta(hours=period_start.hour, minutes=period_start.minute, seconds=period_start.second)
- else:
- period_start = datetime.today()
- return period_start.strftime('%Y-%m-%d')
-
-
- _columns = {
- 'name': fields.char('Period Name', size=64),
- 'date_start': fields.date('Start Date', required=True, help="Starting date for planning period."),
- 'date_stop': fields.date('End Date', required=True, help="Ending date for planning period."),
- 'period_ids': fields.one2many('stock.period', 'planning_id', 'Periods'),
- 'period_ids': fields.many2many('stock.period', 'stock_period_createlines_stock_period_rel', 'wizard_id', 'period_id', 'Periods'),
- }
- _defaults={
- 'date_start': _get_new_period_start,
- }
-
- def create_stock_periods(self, cr, uid, ids, context=None):
- interval = context.get('interval',0)
- name = context.get('name','Daily')
- period_obj = self.pool.get('stock.period')
- lines = []
- for p in self.browse(cr, uid, ids, context=context):
- dt_stp = datetime.strptime(p.date_stop, '%Y-%m-%d')
- ds = datetime.strptime(p.date_start, '%Y-%m-%d')
-
- while ds <= dt_stp:
- if name =='Daily':
- de = ds + relativedelta(days=(interval + 1), seconds =-1)
- new_id = period_obj.create(cr, uid, {
- 'name': de.strftime('%Y-%m-%d'),
- 'date_start': ds.strftime('%Y-%m-%d %H:%M:%S'),
- 'date_stop': de.strftime('%Y-%m-%d %H:%M:%S'),
- })
- ds = ds + relativedelta(days=(interval + 1))
- if name =="Weekly":
- de = ds + relativedelta(days=(interval + 1), seconds =-1)
- if dt_stp < de:
- de = dt_stp + relativedelta(days=1, seconds =-1)
- else:
- de = ds + relativedelta(days=(interval + 1), seconds =-1)
- new_name = ds.strftime('Week %W-%Y')
- if ds.strftime('%Y') != de.strftime('%Y'):
- new_name = ds.strftime('Week %W-%Y') + ', ' + de.strftime('Week %W-%Y')
- new_id = period_obj.create(cr, uid, {
- 'name': new_name,
- 'date_start': ds.strftime('%Y-%m-%d %H:%M:%S'),
- 'date_stop': de.strftime('%Y-%m-%d %H:%M:%S'),
- })
- ds = ds + relativedelta(days=(interval + 1))
- if name == "Monthly":
- de = ds + relativedelta(months=interval, seconds=-1)
- if dt_stp < de:
- de = dt_stp + relativedelta(days=1, seconds =-1)
- else:
- de = ds + relativedelta(months=interval, seconds=-1)
- new_name = ds.strftime('%Y/%m')
- if ds.strftime('%m') != de.strftime('%m'):
- new_name = ds.strftime('%Y/%m') + '-' + de.strftime('%Y/%m')
- new_id =period_obj.create(cr, uid, {
- 'name': new_name,
- 'date_start': ds.strftime('%Y-%m-%d %H:%M:%S'),
- 'date_stop': de.strftime('%Y-%m-%d %H:%M:%S'),
- })
- ds = ds + relativedelta(months=interval)
- lines.append(new_id)
-
- return {
- 'domain': "[('id','in', ["+','.join(map(str, lines))+"])]",
- 'view_type': 'form',
- "view_mode": 'tree,form',
- 'res_model': 'stock.period',
- 'type': 'ir.actions.act_window',
- }
-
-stock_period_createlines()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_planning/wizard/stock_planning_create_periods_view.xml b/addons/stock_planning/wizard/stock_planning_create_periods_view.xml
deleted file mode 100644
index 4db5379c491..00000000000
--- a/addons/stock_planning/wizard/stock_planning_create_periods_view.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
- stock.period.createlines.form
- stock.period.createlines
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stock Periods
- stock.period.createlines
- form
- form
-
- This wizard helps with the creation of stock planning periods. These periods are independent of financial periods. If you need periods other than day-, week- or month-based, you may also add then manually.
- new
-
-
-
-
-
diff --git a/addons/stock_planning/wizard/stock_planning_createlines.py b/addons/stock_planning/wizard/stock_planning_createlines.py
deleted file mode 100644
index ba882d59cf3..00000000000
--- a/addons/stock_planning/wizard/stock_planning_createlines.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv, fields
-from tools.translate import _
-
-# Creates stock planning records for products from selected Product Category for selected 'Warehouse - Period'
-# Object added by contributor in ver 1.1
-class stock_planning_createlines(osv.osv_memory):
- _name = "stock.planning.createlines"
-
- def onchange_company(self, cr, uid, ids, company_id=False):
- result = {}
- if company_id:
- result['warehouse_id'] = False
- return {'value': result}
-
- _columns = {
- 'company_id': fields.many2one('res.company', 'Company', required=True),
- 'period_id': fields.many2one('stock.period' , 'Period', required=True, help = 'Period which planning will concern.'),
- 'warehouse_id': fields.many2one('stock.warehouse' , 'Warehouse', required=True, help = 'Warehouse which planning will concern.'),
- 'product_categ_id': fields.many2one('product.category' , 'Product Category', \
- help = 'Planning will be created for products from Product Category selected by this field. '\
- 'This field is ignored when you check \"All Forecasted Product\" box.' ),
- 'forecasted_products': fields.boolean('All Products with Forecast', \
- help = "Check this box to create planning for all products having any forecast for selected Warehouse and Period. "\
- "Product Category field will be ignored."),
- }
-
- _defaults = {
- 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.planning', context=c),
- }
-
- def create_planning(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- product_obj = self.pool.get('product.product')
- planning_obj = self.pool.get('stock.planning')
- mod_obj = self.pool.get('ir.model.data')
- prod_categ_obj = self.pool.get('product.category')
- planning_lines = []
- for f in self.browse(cr, uid, ids, context=context):
- if f.forecasted_products:
- cr.execute("SELECT product_id \
- FROM stock_sale_forecast \
- WHERE (period_id = %s) AND (warehouse_id = %s)", (f.period_id.id, f.warehouse_id.id))
- products_id1 = [x for x, in cr.fetchall()]
- else:
- categ_ids = f.product_categ_id.id and [f.product_categ_id.id] or []
- prod_categ_ids = prod_categ_obj.search(cr,uid,[('parent_id','child_of',categ_ids)])
- products_id1 = product_obj.search(cr,uid,[('categ_id','in',prod_categ_ids)])
- if len(products_id1)==0:
- raise osv.except_osv(_('Error!'), _('No forecasts for selected period or no products available in selected category !'))
-
- for p in product_obj.browse(cr, uid, products_id1,context=context):
- if len(planning_obj.search(cr, uid, [('product_id','=',p.id),
- ('period_id','=',f.period_id.id),
- ('warehouse_id','=',f.warehouse_id.id)]))== 0:
- cr.execute("SELECT period.date_stop, planning.product_uom, planning.planned_outgoing, planning.to_procure, \
- planning.stock_only, planning.procure_to_stock, planning.confirmed_forecasts_only, \
- planning.supply_warehouse_id, planning.stock_supply_location \
- FROM stock_planning AS planning \
- LEFT JOIN stock_period AS period \
- ON planning.period_id = period.id \
- WHERE (planning.create_uid = %s OR planning.write_uid = %s) \
- AND planning.warehouse_id = %s AND planning.product_id = %s \
- AND period.date_stop < %s \
- ORDER BY period.date_stop DESC",
- (uid, uid, f.warehouse_id.id, p.id, f.period_id.date_stop) )
- ret=cr.fetchone()
- if ret:
- prod_uom = ret[1]
- planned_out = ret[2]
- to_procure = ret[3]
- stock_only = ret[4]
- procure_to_stock = ret[5]
- confirmed_forecasts_only = ret[6]
- supply_warehouse_id = ret[7]
- stock_supply_location = ret[8]
- else:
- prod_uom = p.uom_id.id
- planned_out = False
- to_procure = False
- stock_only = False
- procure_to_stock = False
- confirmed_forecasts_only = False
- supply_warehouse_id = False
- stock_supply_location = False
- prod_uos_categ = False
- if p.uos_id:
- prod_uos_categ = p.uos_id.category_id.id
- planning_lines.append(planning_obj.create(cr, uid, {
- 'company_id' : f.warehouse_id.company_id.id,
- 'period_id': f.period_id.id,
- 'warehouse_id' : f.warehouse_id.id,
- 'product_id': p.id,
- 'product_uom' : prod_uom,
- 'product_uom_categ' : p.uom_id.category_id.id,
- 'product_uos_categ' : prod_uos_categ,
- 'active_uom' : prod_uom,
- 'planned_outgoing': planned_out,
- 'to_procure': to_procure,
- 'stock_only': stock_only,
- 'procure_to_stock': procure_to_stock,
- 'confirmed_forecasts_only': confirmed_forecasts_only,
- 'supply_warehouse_id': supply_warehouse_id,
- 'stock_supply_location': stock_supply_location,
-
- }))
-
- return {
- 'domain': "[('id','in', ["+','.join(map(str, planning_lines))+"])]",
- 'view_type': 'form',
- "view_mode": 'tree,form',
- 'res_model': 'stock.planning',
- 'type': 'ir.actions.act_window',
- }
-
-stock_planning_createlines()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_planning/wizard/stock_planning_createlines_view.xml b/addons/stock_planning/wizard/stock_planning_createlines_view.xml
deleted file mode 100644
index 2befba6d820..00000000000
--- a/addons/stock_planning/wizard/stock_planning_createlines_view.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
- stock.planning.createlines.form
- stock.planning.createlines
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create Stock Planning Lines
- stock.planning.createlines
- stock.planning
- form
- form
-
- This wizard helps create MPS planning lines for a given selected period and warehouse, so you don't have to create them one by one. The wizard doesn't duplicate lines if they already exist for this selection.
- new
-
-
-
-
-
diff --git a/addons/stock_planning/wizard/stock_planning_forecast.py b/addons/stock_planning/wizard/stock_planning_forecast.py
deleted file mode 100644
index 3dad3624aa4..00000000000
--- a/addons/stock_planning/wizard/stock_planning_forecast.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv, fields
-from tools.translate import _
-
-# Creates forecasts records for products from selected Product Category for selected 'Warehouse - Period'
-# Object added by contributor in ver 1.1
-class stock_sale_forecast_createlines(osv.osv_memory):
- _name = "stock.sale.forecast.createlines"
- _description = "stock.sale.forecast.createlines"
-
-
- _columns = {
- 'company_id': fields.many2one('res.company', 'Company', required=True, select=1),
- 'warehouse_id': fields.many2one('stock.warehouse' , 'Warehouse', required=True, \
- help='Warehouse which forecasts will concern. '\
- 'If during stock planning you will need sales forecast for all warehouses choose any warehouse now.'),
- 'period_id': fields.many2one('stock.period', 'Period', required=True, help='Period which forecasts will concern.'),
- 'product_categ_id': fields.many2one('product.category' , 'Product Category', required=True, \
- help ='Product Category of products which created forecasts will concern.'),
- 'copy_forecast': fields.boolean('Copy Last Forecast', help="Copy quantities from last Stock and Sale Forecast."),
- }
-
- _defaults = {
- 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.sale.forecast.createlines', context=c),
- }
-
- def create_forecast(self, cr, uid, ids, context=None):
- product_obj = self.pool.get('product.product')
- forecast_obj = self.pool.get('stock.sale.forecast')
- mod_obj = self.pool.get('ir.model.data')
- prod_categ_obj = self.pool.get('product.category')
- forecast_lines = []
- for f in self.browse(cr, uid, ids, context=context):
- categ_ids = f.product_categ_id.id and [f.product_categ_id.id] or []
- prod_categ_ids = prod_categ_obj.search(cr, uid, [('parent_id','child_of', categ_ids)])
- products_ids = product_obj.search(cr, uid, [('categ_id','in',prod_categ_ids)])
- if len(products_ids) == 0:
- raise osv.except_osv(_('Error!'), _('No products available in selected category !'))
- copy = f.copy_forecast
- for p in product_obj.browse(cr, uid, products_ids,{}):
- if len(forecast_obj.search(cr, uid, [('product_id','=',p.id) , \
- ('period_id','=',f.period_id.id), \
- ('user_id','=',uid), \
- ('warehouse_id','=',f.warehouse_id.id)]))== 0:
- forecast_qty = 0.0
- prod_uom = False
- if copy:
- cr.execute("SELECT period.date_stop, forecast.product_qty, forecast.product_uom \
- FROM stock_sale_forecast AS forecast \
- LEFT JOIN stock_period AS period \
- ON forecast.period_id = period.id \
- WHERE (forecast.user_id = %s OR forecast.create_uid = %s OR forecast.write_uid = %s) \
- AND forecast.warehouse_id = %s AND forecast.product_id = %s \
- AND period.date_stop < %s \
- ORDER BY period.date_stop DESC",
- (uid, uid, uid, f.warehouse_id.id, p.id, f.period_id.date_stop) )
- ret = cr.fetchone()
- if ret:
- forecast_qty = ret[1]
- prod_uom = ret[2]
- prod_uom = prod_uom or p.uom_id.id
- prod_uos_categ = False
- if p.uos_id:
- prod_uos_categ = p.uos_id.category_id.id
- forecast_lines.append(forecast_obj.create(cr, uid, {
- 'company_id': f.warehouse_id.company_id.id,
- 'period_id': f.period_id.id,
- 'warehouse_id': f.warehouse_id.id,
- 'product_id': p.id,
- 'product_qty': forecast_qty,
- 'product_amt': 0.0,
- 'product_uom': prod_uom,
- 'active_uom': prod_uom,
- 'product_uom_categ': p.uom_id.category_id.id,
- 'product_uos_categ': prod_uos_categ,
- }))
-
- return {
- 'domain': "[('id','in', ["+','.join(map(str, forecast_lines))+"])]",
- 'view_type': 'form',
- "view_mode": 'tree,form',
- 'res_model': 'stock.sale.forecast',
- 'type': 'ir.actions.act_window',
- }
-
-stock_sale_forecast_createlines()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock_planning/wizard/stock_planning_forecast_view.xml b/addons/stock_planning/wizard/stock_planning_forecast_view.xml
deleted file mode 100644
index 705e0a8cfb7..00000000000
--- a/addons/stock_planning/wizard/stock_planning_forecast_view.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
- stock.sale.forecast.createlines
- stock.sale.forecast.createlines
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create Sales Forecasts
- stock.sale.forecast.createlines
- form
- form
-
- new
- This wizard helps create many forecast lines at once. After creating them you only have to fill in the forecast quantities. The wizard doesn't duplicate the line when another one exist for the same selection.
-
-
-
-
-
diff --git a/addons/survey/survey.py b/addons/survey/survey.py
index b57f778a5cc..ad903ffd06b 100644
--- a/addons/survey/survey.py
+++ b/addons/survey/survey.py
@@ -169,7 +169,7 @@ class survey(osv.osv):
pages = sur['page_ids']
if not pages:
raise osv.except_osv(_('Warning!'), _('This survey has no pages defined. Please define pages first.'))
- context.update({'active':True,'survey_id': ids[0]})
+ context.update({'active':False,'survey_id': ids[0]})
return {
'view_type': 'form',
'view_mode': 'form',
@@ -179,6 +179,25 @@ class survey(osv.osv):
'name': name,
'context': context
}
+
+ def edit_survey(self, cr, uid, ids, context=None):
+ sur_obj = self.read(cr, uid, ids,['title','page_ids'], context=context)
+ for sur in sur_obj:
+ name = sur['title']
+ pages = sur['page_ids']
+ if not pages:
+ raise osv.except_osv(_('Warning!'), _('This survey has no question defined. Please define the questions and answers first.'))
+ context.update({'survey_id': ids[0]})
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'survey.question.wiz',
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'name': name,
+ 'context': context
+ }
+
survey()
class survey_history(osv.osv):
@@ -386,7 +405,7 @@ class survey_question(osv.osv):
def write(self, cr, uid, ids, vals, context=None):
questions = self.read(cr,uid, ids, ['answer_choice_ids', 'type', 'required_type',\
- 'req_ans', 'minimum_req_ans', 'maximum_req_ans', 'column_heading_ids'])
+ 'req_ans', 'minimum_req_ans', 'maximum_req_ans', 'column_heading_ids', 'page_id', 'question'])
for question in questions:
col_len = len(question['column_heading_ids'])
if vals.has_key('column_heading_ids'):
@@ -404,7 +423,7 @@ class survey_question(osv.osv):
if que_type in ['matrix_of_choices_only_one_ans', 'matrix_of_choices_only_multi_ans',\
'matrix_of_drop_down_menus', 'rating_scale']:
if not col_len:
- raise osv.except_osv(_('Warning!'),_("You must enter one or more column headings."))
+ raise osv.except_osv(_('Warning!'),_('You must enter one or more column headings for question "%s" of page %s.') % (question['question'], question['page_id'][1]))
ans_len = len(question['answer_choice_ids'])
if vals.has_key('answer_choice_ids'):
@@ -416,7 +435,7 @@ class survey_question(osv.osv):
if que_type not in ['descriptive_text', 'single_textbox', 'comment','table']:
if not ans_len:
- raise osv.except_osv(_('Warning!'),_("You must enter one or more Answers."))
+ raise osv.except_osv(_('Warning!'),_('You must enter one or more Answers for question "%s" of page %s.') % (question['question'], question['page_id'][1]))
req_type = ""
if vals.has_key('required_type'):
@@ -485,13 +504,14 @@ class survey_question(osv.osv):
def create(self, cr, uid, vals, context=None):
minimum_ans = 0
maximum_ans = 0
+ page = self.pool.get('survey.page').browse(cr, uid, vals['page_id'], context=context).title
if vals.has_key('answer_choice_ids') and not len(vals['answer_choice_ids']):
if vals.has_key('type') and vals['type'] not in ['descriptive_text', 'single_textbox', 'comment','table']:
- raise osv.except_osv(_('Warning!'),_("You must enter one or more answers."))
+ raise osv.except_osv(_('Warning!'),_('You must enter one or more answers for question "%s" of page %s .') % (vals['question'], page))
if vals.has_key('column_heading_ids') and not len(vals['column_heading_ids']):
if vals.has_key('type') and vals['type'] in ['matrix_of_choices_only_one_ans', 'matrix_of_choices_only_multi_ans', 'matrix_of_drop_down_menus', 'rating_scale']:
- raise osv.except_osv(_('Warning!'),_("You must enter one or more column heading."))
+ raise osv.except_osv(_('Warning!'),_('You must enter one or more column headings for question "%s" of page %s.')% (vals['question'], page))
if vals['type'] in ['multiple_choice_multiple_ans','matrix_of_choices_only_one_ans', 'matrix_of_choices_only_multi_ans', 'matrix_of_drop_down_menus', 'rating_scale','multiple_textboxes','numerical_textboxes','date','date_and_time']:
if vals.has_key('is_require_answer') and vals.has_key('required_type') and vals['required_type'] in ['at least', 'at most', 'exactly']:
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index c01e8b45ce2..f6920c68d34 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -31,8 +31,8 @@
-
+
diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py
index f1a96fa154a..17253447c4f 100644
--- a/addons/survey/wizard/survey_answer.py
+++ b/addons/survey/wizard/survey_answer.py
@@ -208,6 +208,7 @@ class survey_question_wiz(osv.osv_memory):
etree.SubElement(xml_group1, 'button', {'string':'','icon': "gtk-edit", 'type' :'object', 'name':"action_edit_question", 'context' : tools.ustr(context)})
etree.SubElement(xml_group1, 'button', {'string':'','icon': "gtk-delete", 'type' :'object','name':"action_delete_question", 'context' : tools.ustr(context)})
else:
+ etree.SubElement(xml_form, 'newline')
etree.SubElement(xml_form, 'separator', {'string': star+to_xml(separator_string)})
ans_ids = que_rec.answer_choice_ids
@@ -1093,6 +1094,10 @@ class survey_question_wiz(osv.osv_memory):
context.pop(key)
self.pool.get('survey.page').unlink(cr, uid, [context.get('page_id',False)])
+ for survey in self.pool.get('survey').browse(cr, uid, [context.get('survey_id',False)], context=context):
+ if not survey.page_ids:
+ return {'type':'ir.actions.act_window_close'}
+
search_id = self.pool.get('ir.ui.view').search(cr,uid,[('model','=','survey.question.wiz'),\
('name','=','Survey Search')])
surv_name_wiz = self.pool.get('survey.name.wiz')
diff --git a/addons/web_analytics/__init__.py b/addons/web_analytics/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/addons/web_analytics/__openerp__.py b/addons/web_analytics/__openerp__.py
new file mode 100644
index 00000000000..66ec959ac7b
--- /dev/null
+++ b/addons/web_analytics/__openerp__.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010-2012 OpenERP s.a. ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+{
+ 'name': 'Google Analytics',
+ 'version': '1.0',
+ 'category': 'Tools',
+ 'complexity': "easy",
+ 'description': """
+Google Analytics.
+==============================
+
+Collects web application usage with Google Analytics.
+ """,
+ 'author': 'OpenERP SA',
+ 'website': 'http://openerp.com',
+ 'depends': ['web', 'auth_signup'],
+ 'data': [],
+ 'installable': True,
+ 'active': False,
+ 'js': ['static/src/js/web_analytics.js'],
+}
+
diff --git a/addons/web_analytics/static/src/img/icon.png b/addons/web_analytics/static/src/img/icon.png
new file mode 100644
index 00000000000..320c1f3ec34
Binary files /dev/null and b/addons/web_analytics/static/src/img/icon.png differ
diff --git a/addons/web_analytics/static/src/js/web_analytics.js b/addons/web_analytics/static/src/js/web_analytics.js
new file mode 100644
index 00000000000..0de8e9e087b
--- /dev/null
+++ b/addons/web_analytics/static/src/js/web_analytics.js
@@ -0,0 +1,134 @@
+
+var _gaq = _gaq || []; // asynchronous stack used by google analytics
+
+openerp.web_analytics = function(instance) {
+
+ /** The Google Analytics Module inserts the Google Analytics JS Snippet
+ * at the top of the page, and sends to google an url each time the
+ * openerp url is changed.
+ * The pushes of the urls is made by triggering the 'state_pushed' event in the
+ * web_client.do_push_state() method which is responsible of changing the openerp current url
+ */
+
+ // Google Analytics Code snippet
+ (function() {
+ var ga = document.createElement('script');
+ ga.type = 'text/javascript';
+ ga.async = true
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
+ s.parentNode.insertBefore(ga,s);
+ })();
+
+ if (instance.webclient) {
+
+ // Set the account and domain to start tracking
+ _gaq.push(['_setAccount', 'UA-7333765-1']); // vta@openerp.com localhost
+ _gaq.push(['_setDomainName', 'none']); // Change for the real domain
+
+ // Track user types
+ if (instance.session.uid !== 1) {
+ if ((/\.demo.openerp.com/).test(instance.session.server)) {
+ _gaq.push(['_setCustomVar', 1, 'User Type', 'Demo User', 1]);
+ } else {
+ _gaq.push(['_setCustomVar', 1, 'User Type', 'Normal User', 1]);
+ }
+ } else {
+ _gaq.push(['_setCustomVar', 1, 'User Type', 'Admin User', 1]);
+ }
+
+ // Track object usage
+ _gaq.push(['_setCustomVar', 2, 'Object', 'no_model', 3]);
+ // Tack view usage
+ _gaq.push(['_setCustomVar', 3, 'View Type', 'default', 3]);
+
+ _gaq.push(['_trackPageview']);
+
+ var self = this;
+ instance.webclient.on('state_pushed', self, function(state) {
+ // Track only pages corresponding to a 'normal' view of OpenERP, views
+ // related to client actions are tracked by the action manager
+ if (state.model && state.view_type) {
+ // Track object usage
+ _gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]);
+ // Tack view usage
+ _gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]);
+ // Track the page
+ var url = instance.web_analytics.parseUrl({'model': state.model, 'view_type': state.view_type});
+ _gaq.push(['_trackPageview', url]);
+ }
+ });
+ }
+
+ // Track the events related with the creation and the modification of records
+ instance.web.FormView = instance.web.FormView.extend({
+ init: function(parent, dataset, view_id, options) {
+ this._super.apply(this, arguments);
+ var self = this;
+ this.on('record_created', self, function(r) {
+ var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'});
+ _gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]);
+ });
+ this.on('record_saved', self, function(r) {
+ var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'});
+ _gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]);
+ });
+ }
+ });
+
+ // Track client actions
+ instance.web.ActionManager.include({
+ ir_actions_client: function (action, options) {
+ var url = instance.web_analytics.parseUrl({'action': action.tag});
+ _gaq.push(['_trackPageview', url]);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ // Track button events
+ instance.web.View.include({
+ do_execute_action: function(action_data, dataset, record_id, on_closed) {
+ console.log(action_data);
+ var category = this.model || dataset.model || '';
+ var action;
+ if (action_data.name && _.isNaN(action_data.name-0)) {
+ action = action_data.name;
+ } else {
+ action = action_data.string || action_data.special || '';
+ }
+ var label = instance.web_analytics.parseUrl({'model': category, 'view_type': this.view_type});
+ _gaq.push(['_trackEvent', category, action, label]);
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ // Track error events
+ instance.web.CrashManager = instance.web.CrashManager.extend({
+ show_error: function(error) {
+ var hash = window.location.hash;
+ var params = $.deparam(hash.substr(hash.indexOf('#')+1));
+ var options = {};
+ if (params.model && params.view_type) {
+ options = {'model': params.model, 'view_type': params.view_type};
+ } else {
+ options = {'action': params.action};
+ }
+ var label = instance.web_analytics.parseUrl(options);
+ if (error.code) {
+ _gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]);
+ } else {
+ _gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]);
+ }
+ this._super.apply(this, arguments);
+ },
+ });
+
+ instance.web_analytics.parseUrl = function(options) {
+ var url = '';
+ _.each(options, function(value, key) {
+ url += '/' + key + '=' + value;
+ });
+ return url;
+ };
+
+};
\ No newline at end of file
diff --git a/addons/web_linkedin/static/src/js/linkedin.js b/addons/web_linkedin/static/src/js/linkedin.js
index 863e51e913f..d6237e48d51 100644
--- a/addons/web_linkedin/static/src/js/linkedin.js
+++ b/addons/web_linkedin/static/src/js/linkedin.js
@@ -14,13 +14,13 @@ openerp.web_linkedin = function(instance) {
},
test_linkedin: function() {
var self = this;
- return this.test_api_key().pipe(function() {
+ return this.test_api_key().then(function() {
if (self.linkedin_added)
return self.linkedin_def.promise();
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = "http://platform.linkedin.com/in.js";
- tag.innerHTML = 'api_key : ' + self.api_key + '\nauthorize : true';
+ tag.innerHTML = 'api_key : ' + self.api_key + '\nauthorize : true\nscope: r_network r_contactinfo';
document.getElementsByTagName('head')[0].appendChild(tag);
self.linkedin_added = true;
$(tag).load(function() {
@@ -37,7 +37,7 @@ openerp.web_linkedin = function(instance) {
if (this.api_key) {
return $.when();
}
- return new instance.web.Model("ir.config_parameter").call("get_param", ["web.linkedin.apikey"]).pipe(function(a) {
+ return new instance.web.Model("ir.config_parameter").call("get_param", ["web.linkedin.apikey"]).then(function(a) {
if (!!a) {
self.api_key = a;
return true;
@@ -69,13 +69,13 @@ openerp.web_linkedin = function(instance) {
},
search_linkedin: function() {
var self = this;
- this.display_dm.add(instance.web_linkedin.tester.test_linkedin()).then(function() {
+ this.display_dm.add(instance.web_linkedin.tester.test_linkedin()).done(function() {
var pop = new instance.web_linkedin.LinkedinPopup(self, self.get("value"));
pop.open();
pop.on("selected", this, function(entity) {
self.selected_entity(entity);
});
- }, _.bind(this.linkedin_disabled, this));
+ }).fail(_.bind(this.linkedin_disabled, this));
},
linkedin_disabled: function() {
instance.web.dialog($(QWeb.render("LinkedIn.DisabledWarning")), {
@@ -87,7 +87,7 @@ openerp.web_linkedin = function(instance) {
},
selected_entity: function(entity) {
var self = this;
- this.create_on_change(entity).then(function(to_change) {
+ this.create_on_change(entity).done(function(to_change) {
self.view.set_values(to_change);
});
},
@@ -101,13 +101,13 @@ openerp.web_linkedin = function(instance) {
to_change.image = false;
if (entity.logoUrl) {
defs.push(self.rpc('/web_linkedin/binary/url2binary',
- {'url': entity.logoUrl}).pipe(function(data){
+ {'url': entity.logoUrl}).then(function(data){
to_change.image = data;
}));
}
to_change.website = entity.websiteUrl;
to_change.phone = false;
- _.each(entity.locations.values || [], function(el) {
+ _.each((entity.locations || {}).values || [], function(el) {
to_change.phone = el.contactInfo.phone1;
});
var children_def = $.Deferred();
@@ -120,7 +120,7 @@ openerp.web_linkedin = function(instance) {
}).error(function() {
children_def.reject();
});
- defs.push(children_def.pipe(function(result) {
+ defs.push(children_def.then(function(result) {
result = _.reject(result.people.values || [], function(el) {
return ! el.formattedName;
});
@@ -128,7 +128,7 @@ openerp.web_linkedin = function(instance) {
el.__type = "people";
return self.create_on_change(el);
});
- return $.when.apply($, defs).pipe(function() {
+ return $.when.apply($, defs).then(function() {
var p_to_change = _.toArray(arguments);
to_change.child_ids = p_to_change;
});
@@ -144,7 +144,7 @@ openerp.web_linkedin = function(instance) {
to_change.image = false;
if (entity.pictureUrl) {
defs.push(self.rpc('/web_linkedin/binary/url2binary',
- {'url': entity.pictureUrl}).pipe(function(data){
+ {'url': entity.pictureUrl}).then(function(data){
to_change.image = data;
}));
}
@@ -163,7 +163,7 @@ openerp.web_linkedin = function(instance) {
to_change.linkedinUrl = entity.publicProfileUrl;
*/
}
- return $.when.apply($, defs).pipe(function() {
+ return $.when.apply($, defs).then(function() {
return to_change;
});
},
@@ -186,7 +186,7 @@ openerp.web_linkedin = function(instance) {
this._super();
var self = this;
this.on("authentified", this, this.authentified);
- instance.web_linkedin.tester.test_authentication().then(function() {
+ instance.web_linkedin.tester.test_authentication().done(function() {
self.trigger("authentified");
});
},
@@ -200,7 +200,7 @@ openerp.web_linkedin = function(instance) {
encodeURI(this.text), this.limit)).result(function (result) {
cdef.resolve(result);
});
- var def = cdef.pipe(function(companies) {
+ var def = cdef.then(function(companies) {
var lst = companies.companies.values || [];
lst = _.first(lst, self.limit);
lst = _.map(lst, function(el) {
@@ -214,7 +214,7 @@ openerp.web_linkedin = function(instance) {
params({"keywords": this.text, "count": this.limit}).result(function(result) {
pdef.resolve(result);
});
- var def2 = pdef.pipe(function(people) {
+ var def2 = pdef.then(function(people) {
var plst = people.people.values || [];
plst = _.first(plst, self.limit);
plst = _.map(plst, function(el) {
diff --git a/addons/web_shortcuts/static/src/js/web_shortcuts.js b/addons/web_shortcuts/static/src/js/web_shortcuts.js
index 2f92950262c..918feb4634d 100644
--- a/addons/web_shortcuts/static/src/js/web_shortcuts.js
+++ b/addons/web_shortcuts/static/src/js/web_shortcuts.js
@@ -46,7 +46,7 @@ instance.web_shortcuts.Shortcuts = instance.web.Widget.extend({
load: function() {
var self = this;
this.$el.find('.oe_systray_shortcuts_items').empty();
- return this.rpc('/web/shortcuts/list', {}).then(function(shortcuts) {
+ return this.rpc('/web/shortcuts/list', {}).done(function(shortcuts) {
_.each(shortcuts, function(sc) {
self.trigger('display', sc);
});
@@ -54,12 +54,8 @@ instance.web_shortcuts.Shortcuts = instance.web.Widget.extend({
},
add: function (sc) {
var self = this;
- this.dataset.create(sc, function (out) {
- self.trigger('display', {
- name : sc.name,
- id : out.result,
- res_id : sc.res_id
- });
+ this.dataset.create(sc).then(function(out){
+ self.trigger('load');
});
},
display: function(sc) {
@@ -80,7 +76,7 @@ instance.web_shortcuts.Shortcuts = instance.web.Widget.extend({
id = $link.data('id');
self.session.active_id = id;
// TODO: Use do_action({menu_id: id, type: 'ir.actions.menu'})
- self.rpc('/web/menu/action', {'menu_id': id}).then(function(ir_menu_data) {
+ self.rpc('/web/menu/action', {'menu_id': id}).done(function(ir_menu_data) {
if (ir_menu_data.action.length){
instance.webclient.on_menu_action({action_id: ir_menu_data.action[0][2].id});
}
@@ -96,7 +92,7 @@ instance.web.UserMenu.include({
do_update: function() {
var self = this;
this._super.apply(this, arguments);
- this.update_promise.then(function() {
+ this.update_promise.done(function() {
if (self.shortcuts) {
self.shortcuts.trigger('load');
} else {
@@ -110,7 +106,7 @@ instance.web.UserMenu.include({
instance.web.ViewManagerAction.include({
switch_mode: function (view_type, no_store) {
var self = this;
- this._super.apply(this, arguments).then(function() {
+ this._super.apply(this, arguments).done(function() {
self.shortcut_check(self.views[view_type]);
});
},