[Merge] with : lp:openobject-addons

bzr revid: dbr@tinyerp.com-20110831052453-l1nyes1bm7pewk2k
This commit is contained in:
DBR (OpenERP)
2011-08-31 10:54:53 +05:30
53 changed files with 2543 additions and 712 deletions
+10 -1
View File
@@ -711,6 +711,8 @@ class account_journal(osv.osv):
name = rs.name
if rs.currency:
name = "%s (%s)" % (rs.name, rs.currency.name)
else:
name = "%s (%s)" % (rs.name, rs.company_id.currency_id.name)
res += [(rs.id, name)]
return res
@@ -916,10 +918,17 @@ class account_period(osv.osv):
return False
def find(self, cr, uid, dt=None, context=None):
if context is None: context = {}
if not dt:
dt = time.strftime('%Y-%m-%d')
#CHECKME: shouldn't we check the state of the period?
ids = self.search(cr, uid, [('date_start','<=',dt),('date_stop','>=',dt)])
args = [('date_start', '<=' ,dt), ('date_stop', '>=', dt)]
if context.get('company_id', False):
args.append(('company_id', '=', context['company_id']))
else:
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
args.append(('company_id', '=', company_id))
ids = self.search(cr, uid, args, context=context)
if not ids:
raise osv.except_osv(_('Error !'), _('No period defined for this date: %s !\nPlease create one.')%dt)
return ids
+2
View File
@@ -238,6 +238,7 @@
<field name="payment_ids" colspan="4" nolabel="1" >
<tree string="Payments">
<field name="date" string="Payment Date"/>
<field name="move_id"/>
<field name="ref"/>
<field name="name" groups="base.group_extended"/>
<field name="journal_id"/>
@@ -336,6 +337,7 @@
<field name="payment_ids" colspan="4" nolabel="1">
<tree string="Payments">
<field name="date"/>
<field name="move_id"/>
<field name="ref"/>
<field name="name"/>
<field name="journal_id" groups="base.group_user"/>
+1 -1
View File
@@ -209,7 +209,7 @@ class account_invoice(osv.osv):
\n* The \'Open\' state is used when user create invoice,a invoice number is generated.Its in open state till user does not pay invoice. \
\n* The \'Paid\' state is set automatically when invoice is paid.\
\n* The \'Cancelled\' state is used when user cancel invoice.'),
'date_invoice': fields.date('Invoice Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True, help="Keep empty to use the current date"),
'date_invoice': fields.date('Invoice Date', readonly=True, states={'draft':[('readonly',False)]}, select=True, help="Keep empty to use the current date"),
'date_due': fields.date('Due Date', states={'paid':[('readonly',True)], 'open':[('readonly',True)], 'close':[('readonly',True)]}, select=True,
help="If you use payment terms, the due date will be computed automatically at the generation "\
"of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."),
+46 -46
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-24 12:54+0000\n"
"PO-Revision-Date: 2011-07-12 12:04+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2011-08-29 20:43+0000\n"
"Last-Translator: lholivier <olivier.lenoir@free.fr>\n"
"Language-Team: French <fr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-07-13 04:36+0000\n"
"X-Generator: Launchpad (build 13168)\n"
"X-Launchpad-Export-Date: 2011-08-30 04:49+0000\n"
"X-Generator: Launchpad (build 13794)\n"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
@@ -27,7 +27,7 @@ msgstr ""
#: field:account.asset.property,method_end:0
#: field:account.asset.property.history,method_end:0
msgid "Ending date"
msgstr ""
msgstr "Date de Fin"
#. module: account_asset
#: view:account.asset.asset:0
@@ -50,17 +50,17 @@ msgstr ""
#. module: account_asset
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Nom de modèle invalide pour la définition de l'action."
#. module: account_asset
#: selection:account.asset.property,method:0
msgid "Linear"
msgstr ""
msgstr "Linéaire"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Change duration"
msgstr ""
msgstr "Changer la durée"
#. module: account_asset
#: field:account.asset.asset,child_ids:0
@@ -75,19 +75,19 @@ msgstr ""
#. module: account_asset
#: wizard_field:account.asset.modify,init,name:0
msgid "Reason"
msgstr ""
msgstr "Motif"
#. module: account_asset
#: view:account.asset.asset:0
#: field:account.asset.asset,entry_ids:0
#: wizard_field:account.asset.compute,asset_compute,move_ids:0
msgid "Entries"
msgstr ""
msgstr "Ecritures"
#. module: account_asset
#: wizard_view:account.asset.compute,asset_compute:0
msgid "Generated entries"
msgstr ""
msgstr "Écritures générées"
#. module: account_asset
#: wizard_field:account.asset.modify,init,method_delay:0
@@ -113,7 +113,7 @@ msgstr ""
#. module: account_asset
#: selection:account.asset.property,method:0
msgid "Progressive"
msgstr ""
msgstr "Progressif"
#. module: account_asset
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_draft
@@ -126,7 +126,7 @@ msgstr ""
#: wizard_field:account.asset.modify,init,note:0
#: view:account.asset.property.history:0
msgid "Notes"
msgstr ""
msgstr "Commentaires"
#. module: account_asset
#: view:account.asset.asset:0
@@ -136,7 +136,7 @@ msgstr ""
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation entries"
msgstr ""
msgstr "Écritures d'amortissement"
#. module: account_asset
#: view:account.asset.asset:0
@@ -151,7 +151,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.asset,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Partenaire"
#. module: account_asset
#: wizard_field:account.asset.modify,init,method_period:0
@@ -163,12 +163,12 @@ msgstr ""
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation duration"
msgstr ""
msgstr "Durée de l'amortissement"
#. module: account_asset
#: field:account.asset.property,account_analytic_id:0
msgid "Analytic account"
msgstr ""
msgstr "Compte Analytique"
#. module: account_asset
#: field:account.asset.property,state:0
@@ -178,17 +178,17 @@ msgstr ""
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation methods"
msgstr ""
msgstr "Méthodes d'amortissement"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Other information"
msgstr ""
msgstr "Autre information"
#. module: account_asset
#: field:account.asset.board,value_asset_cumul:0
msgid "Cumul. value"
msgstr ""
msgstr "Valeur cumulée"
#. module: account_asset
#: view:account.asset.property:0
@@ -203,7 +203,7 @@ msgstr ""
#. module: account_asset
#: model:ir.model,name:account_asset.model_account_asset_property
msgid "Asset property"
msgstr ""
msgstr "Propriété de l'immobilisation"
#. module: account_asset
#: wizard_view:account.asset.compute,asset_compute:0
@@ -212,30 +212,30 @@ msgstr ""
#: model:ir.actions.wizard,name:account_asset.wizard_asset_compute
#: model:ir.ui.menu,name:account_asset.menu_wizard_asset_compute
msgid "Compute assets"
msgstr ""
msgstr "Calculer les immobilisations"
#. module: account_asset
#: wizard_view:account.asset.modify,init:0
#: wizard_button:account.asset.modify,init,asset_modify:0
#: model:ir.actions.wizard,name:account_asset.wizard_asset_modify
msgid "Modify asset"
msgstr ""
msgstr "Modifier l'immobilisation"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Confirm asset"
msgstr ""
msgstr "Confirmer l'immobilisation"
#. module: account_asset
#: view:account.asset.property.history:0
#: model:ir.model,name:account_asset.model_account_asset_property_history
msgid "Asset history"
msgstr ""
msgstr "Historique de l'immobilisation"
#. module: account_asset
#: field:account.asset.property,date:0
msgid "Date created"
msgstr ""
msgstr "Date de création"
#. module: account_asset
#: model:ir.module.module,description:account_asset.module_meta_information
@@ -274,43 +274,43 @@ msgstr ""
#: field:account.asset.category,note:0
#: field:account.asset.property.history,note:0
msgid "Note"
msgstr ""
msgstr "Remarque"
#. module: account_asset
#: selection:account.asset.asset,state:0
#: selection:account.asset.property,state:0
msgid "Draft"
msgstr ""
msgstr "Brouilon"
#. module: account_asset
#: field:account.asset.property,type:0
msgid "Depr. method type"
msgstr ""
msgstr "Type de méthode d'immobilisation"
#. module: account_asset
#: field:account.asset.property,account_asset_id:0
msgid "Asset account"
msgstr ""
msgstr "Compte d'immobilisation"
#. module: account_asset
#: field:account.asset.property.history,asset_property_id:0
msgid "Method"
msgstr ""
msgstr "Méthode"
#. module: account_asset
#: selection:account.asset.asset,state:0
msgid "Normal"
msgstr ""
msgstr "Standard"
#. module: account_asset
#: field:account.asset.property,method_progress_factor:0
msgid "Progressif factor"
msgstr ""
msgstr "Facteur progressif"
#. module: account_asset
#: field:account.asset.asset,localisation:0
msgid "Localisation"
msgstr ""
msgstr "Emplacement"
#. module: account_asset
#: field:account.asset.property,method:0
@@ -330,7 +330,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.property.history,user_id:0
msgid "User"
msgstr ""
msgstr "Utilisateur"
#. module: account_asset
#: field:account.asset.asset,property_ids:0
@@ -346,7 +346,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.board,value_net:0
msgid "Net value"
msgstr ""
msgstr "Valeur nette"
#. module: account_asset
#: wizard_view:account.asset.close,init:0
@@ -357,12 +357,12 @@ msgstr ""
#. module: account_asset
#: field:account.asset.property,history_ids:0
msgid "History"
msgstr ""
msgstr "Hstorique"
#. module: account_asset
#: field:account.asset.property,account_actif_id:0
msgid "Depreciation account"
msgstr ""
msgstr "Comte d'amortissement"
#. module: account_asset
#: field:account.asset.asset,period_id:0
@@ -381,19 +381,19 @@ msgstr ""
#: wizard_button:account.asset.compute,init,end:0
#: wizard_button:account.asset.modify,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Annuler"
#. module: account_asset
#: selection:account.asset.asset,state:0
#: wizard_button:account.asset.compute,asset_compute,end:0
#: selection:account.asset.property,state:0
msgid "Close"
msgstr ""
msgstr "Fermer"
#. module: account_asset
#: selection:account.asset.property,state:0
msgid "Open"
msgstr ""
msgstr "Ouvrir"
#. module: account_asset
#: constraint:ir.model:0
@@ -416,7 +416,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.asset,state:0
msgid "Global state"
msgstr ""
msgstr "État global"
#. module: account_asset
#: selection:account.asset.property,method_time:0
@@ -431,7 +431,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.property,journal_analytic_id:0
msgid "Analytic journal"
msgstr ""
msgstr "Journal analytique"
#. module: account_asset
#: field:account.asset.property,name:0
@@ -441,7 +441,7 @@ msgstr ""
#. module: account_asset
#: field:account.asset.property,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Journal"
#. module: account_asset
#: field:account.asset.property.history,name:0
@@ -464,12 +464,12 @@ msgstr ""
#: field:account.asset.category,name:0
#: model:ir.model,name:account_asset.model_account_asset_category
msgid "Asset category"
msgstr ""
msgstr "Catégorie d'immobilisation"
#. module: account_asset
#: view:account.asset.asset:0
msgid "Depreciation"
msgstr ""
msgstr "Amortissement"
#. module: account_asset
#: field:account.asset.asset,code:0
+37
View File
@@ -0,0 +1,37 @@
# Latvian 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 <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-08-30 20:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Latvian <lv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_cancel
#: model:ir.module.module,description:account_cancel.module_meta_information
msgid ""
"\n"
" Module adds 'Allow cancelling entries' field on form view of account "
"journal. If set to true it allows user to cancel entries & invoices.\n"
" "
msgstr ""
"\n"
" Modulis pievieno 'Atļaut anulējošus uzskaites žurnāla ierakstus' lauku "
"kontu plāna formas skatā. Ja tā ir aktivēta, tā ļauj lietotājam atcelt "
"ierakstus un rēķinus.\n"
" "
#. module: account_cancel
#: model:ir.module.module,shortdesc:account_cancel.module_meta_information
msgid "Account Cancel"
msgstr "Atcelt Kontu"
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:34+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:34+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+52 -42
View File
@@ -14,66 +14,66 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:34+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
#: field:account.coda.import,journal_id:0
msgid "Bank Journal"
msgstr ""
msgstr "Diari bancari"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda.import,note:0
msgid "Log"
msgstr ""
msgstr "Registre"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda_import
msgid "Account Coda Import"
msgstr ""
msgstr "Importació comptabilitat Coda"
#. module: account_coda
#: field:account.coda,name:0
msgid "Coda file"
msgstr ""
msgstr "Fitxer Coda"
#. module: account_coda
#: view:account.coda:0
msgid "Group By..."
msgstr ""
msgstr "Agrupa per..."
#. module: account_coda
#: field:account.coda.import,awaiting_account:0
msgid "Default Account for Unrecognized Movement"
msgstr ""
msgstr "Compte per defecte per a moviments no reconeguts"
#. module: account_coda
#: help:account.coda,date:0
msgid "Import Date"
msgstr ""
msgstr "Data de l'importació"
#. module: account_coda
#: field:account.coda,note:0
msgid "Import log"
msgstr ""
msgstr "Registre de la importació"
#. module: account_coda
#: view:account.coda.import:0
msgid "Import"
msgstr ""
msgstr "Importa"
#. module: account_coda
#: view:account.coda:0
msgid "Coda import"
msgstr ""
msgstr "Importa Coda"
#. module: account_coda
#: code:addons/account_coda/account_coda.py:51
#, python-format
msgid "Coda file not found for bank statement !!"
msgstr ""
msgstr "No s'ha trobat el fitxer Coda per a l'extracte bancari!"
#. module: account_coda
#: help:account.coda.import,awaiting_account:0
@@ -81,12 +81,14 @@ 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 ""
"Indiqueu aquí el compte per defecte que s'utilitzarà, si es troba l'empresa "
"però no té el compte bancari, o si està domiciliat."
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,company_id:0
msgid "Company"
msgstr ""
msgstr "Companyia"
#. module: account_coda
#: help:account.coda.import,def_payable:0
@@ -94,70 +96,72 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
"Indiqueu aquí el compte a pagar que s'utilitzarà per defecte, si no es troba "
"l'empresa."
#. module: account_coda
#: view:account.coda:0
msgid "Search Coda"
msgstr ""
msgstr "Cerca Coda"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,user_id:0
msgid "User"
msgstr ""
msgstr "Usuari"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,date:0
msgid "Date"
msgstr ""
msgstr "Data"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
msgid "Coda Import Logs"
msgstr ""
msgstr "Històric de la importació Coda"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda
msgid "coda for an Account"
msgstr ""
msgstr "Coda per a un compte"
#. module: account_coda
#: field:account.coda.import,def_payable:0
msgid "Default Payable Account"
msgstr ""
msgstr "Compte a pagar per defecte"
#. module: account_coda
#: help:account.coda,name:0
msgid "Store the detail of bank statements"
msgstr ""
msgstr "Desa el detall d'extractes bancaris."
#. module: account_coda
#: view:account.coda.import:0
msgid "Cancel"
msgstr ""
msgstr "Cancel·la"
#. module: account_coda
#: view:account.coda.import:0
msgid "Open Statements"
msgstr ""
msgstr "Obre extractes"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:167
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
msgstr ""
msgstr "El compte bancari %s no està definit per a l'empresa %s.\n"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
msgid "Import Coda Statements"
msgstr ""
msgstr "Importa els extractes Coda"
#. module: account_coda
#: view:account.coda.import:0
#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
msgid "Import Coda Statement"
msgstr ""
msgstr "Importa l'extracte Coda"
#. module: account_coda
#: model:ir.module.module,description:account_coda.module_meta_information
@@ -167,26 +171,30 @@ msgid ""
" bank statements from coda files.\n"
" "
msgstr ""
"\n"
" El mòdul proporciona la funcionalitat per importar\n"
" extractes bancaris des de fitxers coda.\n"
" "
#. module: account_coda
#: view:account.coda:0
msgid "Statements"
msgstr ""
msgstr "Extractes"
#. module: account_coda
#: field:account.bank.statement,coda_id:0
msgid "Coda"
msgstr ""
msgstr "Coda"
#. module: account_coda
#: view:account.coda.import:0
msgid "Results :"
msgstr ""
msgstr "Resultats :"
#. module: account_coda
#: view:account.coda.import:0
msgid "Result of Imported Coda Statements"
msgstr ""
msgstr "Resultat dels extractes Coda importats"
#. module: account_coda
#: help:account.coda.import,def_receivable:0
@@ -194,66 +202,68 @@ msgid ""
"Set here the receivable account that will be used, by default, if the "
"partner is not found"
msgstr ""
"Indiqueu aquí el compte a cobrar que s'utilitzarà per defecte, si no es "
"troba l'empresa."
#. module: account_coda
#: field:account.coda.import,coda:0
#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
msgid "Coda File"
msgstr ""
msgstr "Fitxer Coda"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
msgstr "Extracte bancari"
#. module: account_coda
#: model:ir.actions.act_window,name:account_coda.action_account_coda
msgid "Coda Logs"
msgstr ""
msgstr "Històric Coda"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:311
#, python-format
msgid "Result"
msgstr ""
msgstr "Resultat"
#. module: account_coda
#: view:account.coda.import:0
msgid "Click on 'New' to select your file :"
msgstr ""
msgstr "Feu clic en 'Nou' per seleccionar el fitxer :"
#. module: account_coda
#: field:account.coda.import,def_receivable:0
msgid "Default Receivable Account"
msgstr ""
msgstr "Compte a cobrar per defecte"
#. module: account_coda
#: view:account.coda.import:0
msgid "Close"
msgstr ""
msgstr "Tanca"
#. module: account_coda
#: field:account.coda,statement_ids:0
msgid "Generated Bank Statements"
msgstr ""
msgstr "Extractes bancaris generats"
#. module: account_coda
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
msgid "Account CODA - import bank statements from coda file"
msgstr ""
msgstr "Comptabilitat CODA - importa extractes bancaris des de fitxer Coda"
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
msgstr ""
msgstr "Configureu el diari i compte :"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
msgstr ""
msgstr "Importació Coda"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Diari"
+3 -23
View File
@@ -7,15 +7,15 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-01-13 17:16+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: Thorsten Vocks (OpenBig.org) <thorsten.vocks@big-"
"consulting.net>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -319,23 +319,3 @@ msgstr "Journal"
#~ msgid "Select your bank journal :"
#~ msgstr "Wähle Bank Journal :"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Fehler ! Sie können kein rekursives Menü erstellen."
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Regeln werden nur unterstützt für osv_memory Objekte !"
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "Die Zertifikat ID des Moduls sollte eindeutig sein !"
#~ msgid "Rule must have at least one checked access right !"
#~ msgstr ""
#~ "Die Berechtigung für diese Regel sollte mindestens bei einem Benutzer "
#~ "vorhanden sein !"
#~ msgid "The name of the module must be unique !"
#~ msgstr "Die Modulbezeichnung sollte eindeutig sein !"
#~ msgid "Size of the field can never be less than 1 !"
#~ msgstr "Die Größe des Feldes sollte niemals kleiner als 1 sein !"
+3 -6
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-11-14 08:11+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: Dimitris Andavoglou <dimitrisand@gmail.com>\n"
"Language-Team: Greek <el@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -311,6 +311,3 @@ msgstr "Ημερολόγιο"
#~ msgid "Select your bank journal :"
#~ msgstr "Επιλέξτε το ημερολόγιο τράπεζά σας :"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Λάθος ! Δεν μπορείς να δημιουργήσεις κενό Μενού"
+3 -21
View File
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-12-26 07:57+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
"<jesteve@zikzakmedia.com>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -294,21 +294,3 @@ msgstr "Diario"
#~ msgid "Select your bank journal :"
#~ msgstr "Seleccione su diario bancario :"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "¡Error! No puede crear menús recursivos."
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "¡Las reglas no son soportadas en objetos osv_memory!"
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "¡El ID del certificado del módulo debe ser único!"
#~ msgid "Rule must have at least one checked access right !"
#~ msgstr "¡La regla debe tener por lo menos un derecho de acceso marcado!"
#~ msgid "The name of the module must be unique !"
#~ msgstr "¡El nombre del módulo debe ser único!"
#~ msgid "Size of the field can never be less than 1 !"
#~ msgstr "¡El tamaño del campo nunca puede ser menor que 1!"
+14 -10
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -32,22 +32,22 @@ msgstr "Registro"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda_import
msgid "Account Coda Import"
msgstr ""
msgstr "Contabilidad Importación Coda"
#. module: account_coda
#: field:account.coda,name:0
msgid "Coda file"
msgstr ""
msgstr "Fichero Coda"
#. module: account_coda
#: view:account.coda:0
msgid "Group By..."
msgstr ""
msgstr "Agrupar por..."
#. module: account_coda
#: field:account.coda.import,awaiting_account:0
msgid "Default Account for Unrecognized Movement"
msgstr ""
msgstr "Cuenta por defecto para movimientos no reconocidos"
#. module: account_coda
#: help:account.coda,date:0
@@ -62,18 +62,18 @@ msgstr "Registro de importación"
#. module: account_coda
#: view:account.coda.import:0
msgid "Import"
msgstr ""
msgstr "Importar"
#. module: account_coda
#: view:account.coda:0
msgid "Coda import"
msgstr ""
msgstr "Importar Coda"
#. module: account_coda
#: code:addons/account_coda/account_coda.py:51
#, python-format
msgid "Coda file not found for bank statement !!"
msgstr ""
msgstr "¡No se ha encontrado el archivo Coda para el extracto bancario!"
#. module: account_coda
#: help:account.coda.import,awaiting_account:0
@@ -81,12 +81,14 @@ 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 ""
"Indique aquí la cuenta por defecto que se utilizará, si se encuentra la "
"empresa pero no tiene la cuenta bancaria, o si está domiciliado."
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,company_id:0
msgid "Company"
msgstr ""
msgstr "Compañía"
#. module: account_coda
#: help:account.coda.import,def_payable:0
@@ -94,6 +96,8 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
"Indique aquí la cuenta a pagar que se utilizará por defecto, si no se "
"encuentra la empresa."
#. module: account_coda
#: view:account.coda:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+10 -7
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-06-29 04:43+0000\n"
"X-Generator: Launchpad (build 13168)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -81,6 +81,8 @@ 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 ""
"Aseta tähän tili jota käytetään oletuksena, jos kumppani löytyy mutta "
"pankkitiliä ei ole määriteltynä"
#. module: account_coda
#: view:account.coda:0
@@ -94,6 +96,7 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
"Aseta tähän maksutili jota käytetään oletuksena, jos kumppania ei löydy"
#. module: account_coda
#: view:account.coda:0
@@ -146,7 +149,7 @@ msgstr "Avaa tiliotteet"
#: code:addons/account_coda/wizard/account_coda_import.py:167
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
msgstr ""
msgstr "Pankkitiliä %s ei ole määritelty kumppanille %s.\n"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
@@ -242,20 +245,20 @@ msgstr "Luodut tiliotteet"
#. module: account_coda
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
msgid "Account CODA - import bank statements from coda file"
msgstr ""
msgstr "CODA tili - tuo pankkitiliotteet coda tiedostosta"
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
msgstr ""
msgstr "Konfiguroi päiväkirja ja tili :"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
msgstr ""
msgstr "Coda tuonti"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Päiväkirja"
+3 -3
View File
@@ -9,13 +9,13 @@ msgstr ""
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-12-31 10:33+0000\n"
"Last-Translator: lolivier <olivier.lenoir@free.fr>\n"
"Last-Translator: lholivier <olivier.lenoir@free.fr>\n"
"Language-Team: French <fr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+4 -19
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-01-13 08:19+0000\n"
"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Italian <it@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -303,18 +303,3 @@ msgstr ""
#~ msgid "Coda Statements"
#~ msgstr "Dichiarazione CODA"
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "L'ID certificato del modulo deve essere unico!"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Errore! Non è possibile creare un menù ricorsivo."
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Le regole non sono supportate per gli oggetti: osv_memory!"
#~ msgid "Rule must have at least one checked access right !"
#~ msgstr "La regola deve avere almeno un diritto di accesso spuntato!"
#~ msgid "The name of the module must be unique !"
#~ msgstr "Il nome del modulo deve essere unico!"
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+4 -22
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-01-13 06:02+0000\n"
"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Dutch <nl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -317,21 +317,3 @@ msgstr "Dagboek"
#~ msgid "Select your bank journal :"
#~ msgstr "Selecteer bank dagboek :"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Fout ! U kan geen herhalend Menu maken"
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Regels worden niet ondersteund bij osv_memory objecten !"
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "Het kwaliteitscertificaat id van de module moet uniek zijn !"
#~ msgid "Rule must have at least one checked access right !"
#~ msgstr "Regel moet tenminste één toegangsrecht aangevinkt hebben !"
#~ msgid "The name of the module must be unique !"
#~ msgstr "De modulenaam moet uniek zijn !"
#~ msgid "Size of the field can never be less than 1 !"
#~ msgstr "De veldlengte kan nooit kleiner dan 1 zijn !"
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-08-26 04:33+0000\n"
"X-Generator: Launchpad (build 13779)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+3 -3
View File
@@ -9,13 +9,13 @@ msgstr ""
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-01-20 20:13+0000\n"
"Last-Translator: Mihai Boiciuc <Unknown>\n"
"Last-Translator: Mihai Satmarean <Unknown>\n"
"Language-Team: Romanian <ro@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+26 -36
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-11-29 07:47+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -37,7 +37,7 @@ msgstr ""
#. module: account_coda
#: field:account.coda,name:0
msgid "Coda file"
msgstr ""
msgstr "Coda файл"
#. module: account_coda
#: view:account.coda:0
@@ -67,13 +67,13 @@ msgstr "Импорт"
#. module: account_coda
#: view:account.coda:0
msgid "Coda import"
msgstr ""
msgstr "Импорт coda"
#. module: account_coda
#: code:addons/account_coda/account_coda.py:51
#, python-format
msgid "Coda file not found for bank statement !!"
msgstr ""
msgstr "Не найден coda файл для банковской выписки!"
#. module: account_coda
#: help:account.coda.import,awaiting_account:0
@@ -81,6 +81,8 @@ msgid ""
"Set here the default account that will be used, if the partner is found but "
"does not have the bank account, or if he is domiciled"
msgstr ""
"Установите счет, который будет использоваться, если у партнера не имеется "
"банковского счета или он домицилирован"
#. module: account_coda
#: view:account.coda:0
@@ -94,11 +96,13 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
"Установите расчетный счет для использования по-умолчанию, если партнер не "
"найден."
#. module: account_coda
#: view:account.coda:0
msgid "Search Coda"
msgstr ""
msgstr "Искать Coda файл"
#. module: account_coda
#: view:account.coda:0
@@ -115,22 +119,22 @@ msgstr "Дата"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
msgid "Coda Import Logs"
msgstr ""
msgstr "Журналы импорта Coda"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda
msgid "coda for an Account"
msgstr ""
msgstr "coda для счета"
#. module: account_coda
#: field:account.coda.import,def_payable:0
msgid "Default Payable Account"
msgstr ""
msgstr "Расчетный счет по-умолчанию"
#. module: account_coda
#: help:account.coda,name:0
msgid "Store the detail of bank statements"
msgstr ""
msgstr "Сохранить детали банковской выписки"
#. module: account_coda
#: view:account.coda.import:0
@@ -146,18 +150,18 @@ msgstr ""
#: code:addons/account_coda/wizard/account_coda_import.py:167
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
msgstr ""
msgstr "Банковский счет %s не установлен для контрагента %s.\n"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
msgid "Import Coda Statements"
msgstr ""
msgstr "Импортировать Coda выписки"
#. module: account_coda
#: view:account.coda.import:0
#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
msgid "Import Coda Statement"
msgstr ""
msgstr "Импортировать Coda выписку"
#. module: account_coda
#: model:ir.module.module,description:account_coda.module_meta_information
@@ -167,6 +171,10 @@ msgid ""
" bank statements from coda files.\n"
" "
msgstr ""
"\n"
" Модуль предоставляет функции импорта\n"
" банковских выписок из Coda файлов.\n"
" "
#. module: account_coda
#: view:account.coda:0
@@ -186,7 +194,7 @@ msgstr "Результаты:"
#. module: account_coda
#: view:account.coda.import:0
msgid "Result of Imported Coda Statements"
msgstr ""
msgstr "Результат импортированных из Coda выписок"
#. module: account_coda
#: help:account.coda.import,def_receivable:0
@@ -199,7 +207,7 @@ msgstr ""
#: field:account.coda.import,coda:0
#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
msgid "Coda File"
msgstr ""
msgstr "Coda файл"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_bank_statement
@@ -245,12 +253,12 @@ msgstr ""
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
msgstr ""
msgstr "Настройте журнал и счет:"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
msgstr ""
msgstr "Импорт Coda файла"
#. module: account_coda
#: view:account.coda:0
@@ -275,21 +283,3 @@ msgstr "Журнал"
#~ msgid "_Ok"
#~ msgstr "_Далее"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Ошибка ! Нельзя создать зацикленные меню."
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "Идентификатор сертификата модуля должен быть уникальным !"
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Правила не поддерживаются в объектах osv_memory !"
#~ msgid "Rule must have at least one checked access right !"
#~ msgstr "Правило должно иметь хотя бы одно проверенное право доступа !"
#~ msgid "The name of the module must be unique !"
#~ msgstr "Название модуля должно быть уникальным !"
#~ msgid "Size of the field can never be less than 1 !"
#~ msgstr "Размер поля никогда не может быть меньше 1 !"
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:34+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+3 -9
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-11-14 08:09+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Serbian <sr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -313,9 +313,3 @@ msgstr "Dnevnik"
#~ msgid "Select your bank journal :"
#~ msgstr "Izaberi svoj bancin dnevnik"
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Greska ! Ne mozes kreirati rekursivni meni."
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Pravila nisu podrzana od strane osv_memory objekta !"
+3 -9
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2010-12-23 15:47+0000\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Serbian latin <sr@latin@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -272,15 +272,9 @@ msgstr "Dnevnik"
#~ msgid "Invalid model name in the action definition."
#~ msgstr "Pogrešno ime modela u definiciji akcije."
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Greska ! Ne mozes kreirati rekursivni meni."
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Nevažeći XML za pregled arhitekture"
#~ msgid "Rules are not supported for osv_memory objects !"
#~ msgstr "Pravila nisu podrzana od strane osv_memory objekta !"
#~ msgid "Clic on 'New' to select your file :"
#~ msgstr "Klikni na 'Novi' da izaberes svoj fajl"
+4 -13
View File
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-01-26 07:01+0000\n"
"Last-Translator: Magnus Brandt (mba), Aspirix AB <Unknown>\n"
"PO-Revision-Date: 2011-08-30 17:18+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Swedish <sv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -266,14 +266,5 @@ msgstr ""
#~ msgid "Invalid model name in the action definition."
#~ msgstr "Ogiltigt modellnamn i åtgärdsdefinitionen."
#~ msgid "Error ! You can not create recursive Menu."
#~ msgstr "Fel! Ni kan inte skapa recursiva menyer"
#~ msgid "The certificate ID of the module must be unique !"
#~ msgstr "Certifikat ID för modulen måste vara unik!"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "Ogiltig XML för Vy-arkitektur!"
#~ msgid "The name of the module must be unique !"
#~ msgstr "Namnet på modulen måste vara unikt!"
+39 -29
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-05-16 04:39+0000\n"
"X-Generator: Launchpad (build 12959)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
@@ -81,6 +81,8 @@ 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 ""
"Eğer bir paydaş var ama banka hesabı yok ise ya da ikametgahlı ise burada "
"kullanılacak varsayılan hesabı ayarlayın"
#. module: account_coda
#: view:account.coda:0
@@ -94,6 +96,8 @@ msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
"Eğer bir paydaş yok ise burada kullanılacak varsayılan alıcı hesabını "
"ayarlayın"
#. module: account_coda
#: view:account.coda:0
@@ -104,60 +108,60 @@ msgstr "Coda Araştır"
#: view:account.coda:0
#: field:account.coda,user_id:0
msgid "User"
msgstr ""
msgstr "Kullanıcı"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,date:0
msgid "Date"
msgstr ""
msgstr "Tarih"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
msgid "Coda Import Logs"
msgstr ""
msgstr "Coda içeaktarım günlüğü"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda
msgid "coda for an Account"
msgstr ""
msgstr "Bir hesap için Coda"
#. module: account_coda
#: field:account.coda.import,def_payable:0
msgid "Default Payable Account"
msgstr ""
msgstr "Varsayılan Satıcılar Hesabı"
#. module: account_coda
#: help:account.coda,name:0
msgid "Store the detail of bank statements"
msgstr ""
msgstr "Banka ekstreleri ayrıntılarını saklayın"
#. module: account_coda
#: view:account.coda.import:0
msgid "Cancel"
msgstr ""
msgstr "Vazgeç"
#. module: account_coda
#: view:account.coda.import:0
msgid "Open Statements"
msgstr ""
msgstr "Ekstreleri Aç"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:167
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
msgstr ""
msgstr "%s Paydaşı için %s banka hesabı tanımlanmamıştır.\n"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
msgid "Import Coda Statements"
msgstr ""
msgstr "Coda Ekstrelerini İçeaktar"
#. module: account_coda
#: view:account.coda.import:0
#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
msgid "Import Coda Statement"
msgstr ""
msgstr "Coda Ekstresini İçeaktar"
#. module: account_coda
#: model:ir.module.module,description:account_coda.module_meta_information
@@ -167,26 +171,30 @@ msgid ""
" bank statements from coda files.\n"
" "
msgstr ""
"\n"
" Modül banka ekstrelerinin coda\n"
" dosyalarından içeaktarımını sağlar.\n"
" "
#. module: account_coda
#: view:account.coda:0
msgid "Statements"
msgstr ""
msgstr "Ekstreler"
#. module: account_coda
#: field:account.bank.statement,coda_id:0
msgid "Coda"
msgstr ""
msgstr "Coda"
#. module: account_coda
#: view:account.coda.import:0
msgid "Results :"
msgstr ""
msgstr "Sonuçlar :"
#. module: account_coda
#: view:account.coda.import:0
msgid "Result of Imported Coda Statements"
msgstr ""
msgstr "İçeaktarılmış Coda Ekstreleri Sonucu"
#. module: account_coda
#: help:account.coda.import,def_receivable:0
@@ -194,66 +202,68 @@ msgid ""
"Set here the receivable account that will be used, by default, if the "
"partner is not found"
msgstr ""
"Eğer bir paydaş yoksa, burada kullanılacak varsayılan alıcılar hesabını "
"ayarlayın"
#. module: account_coda
#: field:account.coda.import,coda:0
#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
msgid "Coda File"
msgstr ""
msgstr "Coda Dosyası"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
msgstr "Banka Ekstresi"
#. module: account_coda
#: model:ir.actions.act_window,name:account_coda.action_account_coda
msgid "Coda Logs"
msgstr ""
msgstr "Coda Günlükleri"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:311
#, python-format
msgid "Result"
msgstr ""
msgstr "Sonuç"
#. module: account_coda
#: view:account.coda.import:0
msgid "Click on 'New' to select your file :"
msgstr ""
msgstr "Dosyanızı seçmek için 'Yeni' ye tıklayın :"
#. module: account_coda
#: field:account.coda.import,def_receivable:0
msgid "Default Receivable Account"
msgstr ""
msgstr "Varsayılan Alıcı Hesabı"
#. module: account_coda
#: view:account.coda.import:0
msgid "Close"
msgstr ""
msgstr "Kapat"
#. module: account_coda
#: field:account.coda,statement_ids:0
msgid "Generated Bank Statements"
msgstr ""
msgstr "Oluşturulan Banka Ekstreleri"
#. module: account_coda
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
msgid "Account CODA - import bank statements from coda file"
msgstr ""
msgstr "CODA Hesabı - coda dosyalarından banka ekstrelerini içe aktar"
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
msgstr ""
msgstr "Yevmiye ve Hesaplarınızı Yapılandırın"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
msgstr ""
msgstr "Coda İçeaktar"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Yevmiye"
+2 -2
View File
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-06-06 04:37+0000\n"
"X-Generator: Launchpad (build 12959)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
+39 -36
View File
@@ -14,14 +14,14 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:42+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-31 04:35+0000\n"
"X-Generator: Launchpad (build 13815)\n"
#. module: account_coda
#: help:account.coda,journal_id:0
#: field:account.coda.import,journal_id:0
msgid "Bank Journal"
msgstr "银行记录集合"
msgstr "银行日记账"
#. module: account_coda
#: view:account.coda:0
@@ -32,12 +32,12 @@ msgstr "日志"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda_import
msgid "Account Coda Import"
msgstr ""
msgstr "结帐科目录入"
#. module: account_coda
#: field:account.coda,name:0
msgid "Coda file"
msgstr "Coda 文件"
msgstr "归档结帐"
#. module: account_coda
#: view:account.coda:0
@@ -47,7 +47,7 @@ msgstr "分组..."
#. module: account_coda
#: field:account.coda.import,awaiting_account:0
msgid "Default Account for Unrecognized Movement"
msgstr ""
msgstr "默认科目无法识别的记帐"
#. module: account_coda
#: help:account.coda,date:0
@@ -67,38 +67,38 @@ msgstr "导入"
#. module: account_coda
#: view:account.coda:0
msgid "Coda import"
msgstr "Coda 导入"
msgstr "结帐录入"
#. module: account_coda
#: code:addons/account_coda/account_coda.py:51
#, python-format
msgid "Coda file not found for bank statement !!"
msgstr ""
msgstr "结账文件未找到银行对帐单"
#. module: account_coda
#: help:account.coda.import,awaiting_account:0
msgid ""
"Set here the default account that will be used, if the partner is found but "
"does not have the bank account, or if he is domiciled"
msgstr ""
msgstr "针对没有银行帐号或指定支付地点的业务伙伴,这里设置要使用的默认银行帐号。"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,company_id:0
msgid "Company"
msgstr ""
msgstr "公司"
#. module: account_coda
#: help:account.coda.import,def_payable:0
msgid ""
"Set here the payable account that will be used, by default, if the partner "
"is not found"
msgstr ""
msgstr "如果没有找到合作伙伴,那么在这里设置默认支付帐户."
#. module: account_coda
#: view:account.coda:0
msgid "Search Coda"
msgstr ""
msgstr "结账搜索"
#. module: account_coda
#: view:account.coda:0
@@ -110,17 +110,17 @@ msgstr "用户"
#: view:account.coda:0
#: field:account.coda,date:0
msgid "Date"
msgstr ""
msgstr "日期"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement
msgid "Coda Import Logs"
msgstr ""
msgstr "导入结账日志"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_coda
msgid "coda for an Account"
msgstr "帐号的CODA"
msgstr "科目结账"
#. module: account_coda
#: field:account.coda.import,def_payable:0
@@ -130,34 +130,34 @@ msgstr "默认应付帐款科目"
#. module: account_coda
#: help:account.coda,name:0
msgid "Store the detail of bank statements"
msgstr ""
msgstr "银行对账单的详细"
#. module: account_coda
#: view:account.coda.import:0
msgid "Cancel"
msgstr ""
msgstr "取消"
#. module: account_coda
#: view:account.coda.import:0
msgid "Open Statements"
msgstr ""
msgstr "打开报表"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:167
#, python-format
msgid "The bank account %s is not defined for the partner %s.\n"
msgstr ""
msgstr "银行帐户%s没有定义合作伙伴%s\n"
#. module: account_coda
#: model:ir.ui.menu,name:account_coda.menu_account_coda_import
msgid "Import Coda Statements"
msgstr "导入CODA"
msgstr "导入结账"
#. module: account_coda
#: view:account.coda.import:0
#: model:ir.actions.act_window,name:account_coda.action_account_coda_import
msgid "Import Coda Statement"
msgstr "导入CODA"
msgstr "导入结账报表"
#. module: account_coda
#: model:ir.module.module,description:account_coda.module_meta_information
@@ -167,11 +167,14 @@ msgid ""
" bank statements from coda files.\n"
" "
msgstr ""
"\n"
" 模块提供了导入结账报表功能\n"
" "
#. module: account_coda
#: view:account.coda:0
msgid "Statements"
msgstr ""
msgstr "报表"
#. module: account_coda
#: field:account.bank.statement,coda_id:0
@@ -186,77 +189,77 @@ msgstr "结果:"
#. module: account_coda
#: view:account.coda.import:0
msgid "Result of Imported Coda Statements"
msgstr ""
msgstr "导入结账报表"
#. module: account_coda
#: help:account.coda.import,def_receivable:0
msgid ""
"Set here the receivable account that will be used, by default, if the "
"partner is not found"
msgstr ""
msgstr "如果没找到业务伙伴,在这里设置应收账款科目"
#. module: account_coda
#: field:account.coda.import,coda:0
#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement
msgid "Coda File"
msgstr "CODA文件"
msgstr "结账文件"
#. module: account_coda
#: model:ir.model,name:account_coda.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
msgstr "银行对账单"
#. module: account_coda
#: model:ir.actions.act_window,name:account_coda.action_account_coda
msgid "Coda Logs"
msgstr ""
msgstr "结账日志"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:311
#, python-format
msgid "Result"
msgstr ""
msgstr "结果"
#. module: account_coda
#: view:account.coda.import:0
msgid "Click on 'New' to select your file :"
msgstr ""
msgstr "点击“新建”,选择您的文件"
#. module: account_coda
#: field:account.coda.import,def_receivable:0
msgid "Default Receivable Account"
msgstr ""
msgstr "默认的应收账款"
#. module: account_coda
#: view:account.coda.import:0
msgid "Close"
msgstr ""
msgstr "关闭"
#. module: account_coda
#: field:account.coda,statement_ids:0
msgid "Generated Bank Statements"
msgstr ""
msgstr "生成银行对账单"
#. module: account_coda
#: model:ir.module.module,shortdesc:account_coda.module_meta_information
msgid "Account CODA - import bank statements from coda file"
msgstr ""
msgstr "科目结账 - 导入结账的银行对账单"
#. module: account_coda
#: view:account.coda.import:0
msgid "Configure Your Journal and Account :"
msgstr ""
msgstr "设置你的账簿和科目"
#. module: account_coda
#: view:account.coda:0
msgid "Coda Import"
msgstr ""
msgstr "导入结账"
#. module: account_coda
#: view:account.coda:0
#: field:account.coda,journal_id:0
msgid "Journal"
msgstr ""
msgstr "账簿"
#~ msgid "Clic on 'New' to select your file :"
#~ msgstr "点击\"新\"去选择你的文件:"
+2 -1
View File
@@ -20,8 +20,9 @@
##############################################################################
import account_voucher
import company
import invoice
import report
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+20 -7
View File
@@ -25,15 +25,22 @@
"author" : 'OpenERP SA',
'complexity': "normal",
"description": """
Account Voucher module includes all the basic requirements of Voucher Entries for Bank, Cash, Sales, Purchase, Expanse, Contra, etc.
====================================================================================================================================
Account Voucher module offers an easy way to deal with all the basic requirements of Voucher Entries
====================================================================================================
* Voucher Entry
* Voucher Receipt
* Cheque Register
Its increased usabililty allows you to create easily sales/purchases documents but also to encode payments.
Doing so, you'll be able to see all the open transactions for the selected partner and that will help you
to reconcile your entry with its invoice.
Account Voucher module multi-currency support
=============================================
Thanks to the contribution of Camptocamp, the vouchers fully support the multi currency and compute the
currency rate difference besides the write off amount. Of course, the accounting entries are also created
accordingly.
""",
"category" : "Finance",
"website" : "http://tinyerp.com",
"website" : "http://www.openerp.com",
"images" : ["images/customer_payment.jpeg","images/journal_voucher.jpeg","images/sales_receipt.jpeg","images/supplier_voucher.jpeg"],
"depends" : ["account"],
"init_xml" : [],
@@ -48,6 +55,7 @@ Account Voucher module includes all the basic requirements of Voucher Entries fo
"wizard/account_voucher_unreconcile_view.xml",
"wizard/account_statement_from_invoice_view.xml",
"account_voucher_view.xml",
"company_view.xml",
"voucher_payment_receipt_view.xml",
"voucher_sales_purchase_view.xml",
"account_voucher_wizard.xml",
@@ -59,7 +67,12 @@ Account Voucher module includes all the basic requirements of Voucher Entries fo
"test/account_voucher.yml",
"test/sales_receipt.yml",
"test/sales_payment.yml",
"test/account_voucher_report.yml"
"test/account_voucher_report.yml",
"test/case1_usd_usd.yml",
"test/case2_usd_eur.yml",
"test/case2_suppl_usd_eur.yml",
"test/case3_eur_eur.yml",
"test/case4_cad_chf.yml",
],
'certificate': '0037580727101',
"active": False,
+326 -171
View File
@@ -39,7 +39,10 @@ class account_voucher(osv.osv):
if context is None: context = {}
if context.get('period_id', False):
return context.get('period_id')
periods = self.pool.get('account.period').find(cr, uid)
if context.get('invoice_id', False):
company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id
context.update({'company_id': company_id})
periods = self.pool.get('account.period').find(cr, uid, context=context)
return periods and periods[0] or False
def _get_journal(self, cr, uid, context=None):
@@ -142,39 +145,92 @@ class account_voucher(osv.osv):
res['arch'] = etree.tostring(doc)
return res
def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount):
debit = credit = 0.0
def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=None):
if context is None:
context = {}
currency_pool = self.pool.get('res.currency')
ctx = context.copy()
voucher_type = context.get('type', False)
counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0
ctx.update({'date': voucher_date})
for l in line_dr_ids:
debit += l['amount']
#compute the amount in voucher currency and in company currency if there aren't set yet
if not l.get('amount_in_company_currency', False):
ctx.update({'date': l['date_original']})
amount_in_company_currency = currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
ctx.update({'date': voucher_date})
else:
amount_in_company_currency = l.get('amount_in_company_currency', 0.0)
if not l.get('amount_in_voucher_currency'):
amount_in_voucher_currency = currency_pool.compute(cr, uid, l['currency_id'], l['voucher_currency_id'], l['amount'], context=ctx)
else:
amount_in_voucher_currency = l.get('amount_in_voucher_currency', 0.0)
real_amount -= amount_in_company_currency
counter_for_writeoff -= l.get('voucher_currency_id') == l.get('currency_id') and l['amount'] or amount_in_voucher_currency
counter_for_currency_diff -= currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
for l in line_cr_ids:
credit += l['amount']
return abs(amount - abs(credit - debit))
#compute the amount in voucher currency and in company currency if there aren't set yet
if not l.get('amount_in_company_currency', False):
ctx.update({'date': l['date_original']})
amount_in_company_currency = currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
ctx.update({'date': voucher_date})
else:
amount_in_company_currency = l.get('amount_in_company_currency', 0.0)
if not l.get('amount_in_voucher_currency'):
amount_in_voucher_currency = currency_pool.compute(cr, uid, l['currency_id'], l['voucher_currency_id'], l['amount'], context=ctx)
else:
amount_in_voucher_currency = l.get('amount_in_voucher_currency', 0.0)
real_amount += amount_in_company_currency
counter_for_writeoff += l.get('voucher_currency_id') == l.get('currency_id') and l['amount'] or amount_in_voucher_currency
counter_for_currency_diff += currency_pool.compute(cr, uid, l['currency_id'], l['company_currency_id'], l['amount'], context=ctx)
sign = voucher_type in ['sale','receipt'] and 1 or -1
writeoff_amount = (sign * amount) - counter_for_writeoff
currency_rate_difference = real_amount - counter_for_currency_diff
return writeoff_amount, currency_rate_difference
def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, context=None):
context = context or {}
def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_date, context=None):
if not line_dr_ids and not line_cr_ids:
return {'value':{}}
line_osv = self.pool.get("account.voucher.line")
line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context)
line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context)
return {'value': {'writeoff_amount': self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount)}}
writeoff_amount, currency_rate_diff = self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, voucher_date, context=context)
return {'value': {'writeoff_amount': writeoff_amount, 'currency_rate_difference': currency_rate_diff}}
def _get_writeoff_amount(self, cr, uid, ids, name, args, context=None):
if not ids: return {}
res = {}
debit = credit = 0.0
if context is None:
context = {}
res = {}.fromkeys(ids,{})
counter_for_writeoff = counter_for_currency_diff = real_amount = 0.0
currency_pool = self.pool.get('res.currency')
for voucher in self.browse(cr, uid, ids, context=context):
ctx = context.copy()
ctx.update({'date': voucher.date})
for l in voucher.line_dr_ids:
debit += l.amount
real_amount -= l.amount_in_company_currency
counter_for_writeoff -= (l.voucher_currency_id.id == l.currency_id.id) and l.amount or l.amount_in_voucher_currency
counter_for_currency_diff -= currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx)
for l in voucher.line_cr_ids:
credit += l.amount
res[voucher.id] = abs(voucher.amount - abs(credit - debit))
real_amount += l.amount_in_company_currency
counter_for_writeoff += (l.voucher_currency_id.id == l.currency_id.id) and l.amount or l.amount_in_voucher_currency
counter_for_currency_diff += currency_pool.compute(cr, uid, l.currency_id.id, voucher.company_id.currency_id.id, l.amount, context=ctx)
sign = voucher.type in ['sale','receipt'] and 1 or -1
writeoff_amount = (sign * voucher.amount) - counter_for_writeoff
res[voucher.id]['writeoff_amount'] = writeoff_amount
res[voucher.id]['currency_rate_difference'] = real_amount - counter_for_currency_diff
return res
def _currency_id(self, cr, uid, ids, name, args, context=None):
res = {}
for voucher in self.browse(cr, uid, ids, context=context):
currency = voucher.journal_id.currency and voucher.journal_id.currency.id or voucher.company_id.currency_id.id
res[voucher.id] = {'currency_id': currency, 'currency_id2': currency}
return res
_name = 'account.voucher'
_description = 'Accounting Voucher'
_order = "date desc, id desc"
# _rec_name = 'number'
_columns = {
'type':fields.selection([
('sale','Sale'),
@@ -184,7 +240,7 @@ class account_voucher(osv.osv):
],'Default Type', readonly=True, states={'draft':[('readonly',False)]}),
'name':fields.char('Memo', size=256, readonly=True, states={'draft':[('readonly',False)]}),
'date':fields.date('Date', readonly=True, select=True, states={'draft':[('readonly',False)]}, help="Effective date for accounting entries"),
'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}, change_default=1),
'account_id':fields.many2one('account.account', 'Account', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'line_ids':fields.one2many('account.voucher.line','voucher_id','Voucher Lines', readonly=True, states={'draft':[('readonly',False)]}),
'line_cr_ids':fields.one2many('account.voucher.line','voucher_id','Credits',
@@ -193,9 +249,11 @@ class account_voucher(osv.osv):
domain=[('type','=','dr')], context={'default_type':'dr'}, readonly=True, states={'draft':[('readonly',False)]}),
'period_id': fields.many2one('account.period', 'Period', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'narration':fields.text('Notes', readonly=True, states={'draft':[('readonly',False)]}),
'currency_id':fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
# 'currency_id': fields.related('journal_id','currency', type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, states={'draft':[('readonly',False)]}),
'company_id': fields.many2one('res.company', 'Company', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'currency_id': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"),
#duplicated field for display purposes
'currency_id2': fields.function(_currency_id, type='many2one', relation='res.currency', string='Currency', store=True, readonly=True, multi="currency"),
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
'company_currency': fields.related('company_id','currency_id', type='many2one', relation='res.currency', string='Currency', readonly=True),
'state':fields.selection(
[('draft','Draft'),
('proforma','Pro-forma'),
@@ -223,12 +281,13 @@ class account_voucher(osv.osv):
'date_due': fields.date('Due Date', readonly=True, select=True, states={'draft':[('readonly',False)]}),
'payment_option':fields.selection([
('without_writeoff', 'Keep Open'),
('with_writeoff', 'Reconcile with Write-Off'),
('with_writeoff', 'Reconcile'),
], 'Payment Difference', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'writeoff_acc_id': fields.many2one('account.account', 'Write-Off account', readonly=True, states={'draft': [('readonly', False)]}),
'comment': fields.char('Write-Off Comment', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
'analytic_id': fields.many2one('account.analytic.account','Write-Off Analytic Account', readonly=True, states={'draft': [('readonly', False)]}),
'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True),
'writeoff_amount': fields.function(_get_writeoff_amount, string='Write-Off Amount', type='float', readonly=True, multi="writeoff"),
'currency_rate_difference': fields.function(_get_writeoff_amount, string="Currency Rate Difference", type='float', multi="writeoff"),
}
_defaults = {
'period_id': _get_period,
@@ -253,7 +312,7 @@ class account_voucher(osv.osv):
tax_pool = self.pool.get('account.tax')
partner_pool = self.pool.get('res.partner')
position_pool = self.pool.get('account.fiscal.position')
voucher_line_pool = self.pool.get('account.voucher.line')
voucher_voucher_line_obj = self.pool.get('account.voucher.line')
voucher_pool = self.pool.get('account.voucher')
if context is None: context = {}
@@ -262,7 +321,7 @@ class account_voucher(osv.osv):
for line in voucher.line_ids:
voucher_amount += line.untax_amount or line.amount
line.amount = line.untax_amount or line.amount
voucher_line_pool.write(cr, uid, [line.id], {'amount':line.amount, 'untax_amount':line.untax_amount})
voucher_voucher_line_obj.write(cr, uid, [line.id], {'amount':line.amount, 'untax_amount':line.untax_amount})
if not voucher.tax_id:
self.write(cr, uid, [voucher.id], {'amount':voucher_amount, 'tax_amount':0.0})
@@ -290,7 +349,7 @@ class account_voucher(osv.osv):
line_total += tax_line.get('price_unit')
total_tax += line_tax
untax_amount = line.untax_amount or line.amount
voucher_line_pool.write(cr, uid, [line.id], {'amount':line_total, 'untax_amount':untax_amount})
voucher_voucher_line_obj.write(cr, uid, [line.id], {'amount':line_total, 'untax_amount':untax_amount})
self.write(cr, uid, [voucher.id], {'amount':total, 'tax_amount':total_tax})
return True
@@ -300,14 +359,14 @@ class account_voucher(osv.osv):
tax_pool = self.pool.get('account.tax')
partner_pool = self.pool.get('res.partner')
position_pool = self.pool.get('account.fiscal.position')
line_pool = self.pool.get('account.voucher.line')
voucher_line_obj = self.pool.get('account.voucher.line')
res = {
'tax_amount': False,
'amount': False,
}
voucher_total = 0.0
line_ids = resolve_o2m_operations(cr, uid, line_pool, line_ids, ["amount"], context)
line_ids = resolve_o2m_operations(cr, uid, voucher_line_obj, line_ids, ["amount"], context)
total = 0.0
total_tax = 0.0
@@ -396,7 +455,7 @@ class account_voucher(osv.osv):
return default
def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None):
def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id, price, voucher_currency_id, ttype, date, context=None):
"""price
Returns a dict that contains new values and context
@@ -406,38 +465,33 @@ class account_voucher(osv.osv):
@return: Returns a dict which contains new values, and context
"""
if context is None:
context = {}
if not journal_id:
return {}
if context is None:
context = {}
context_multi_currency = context.copy()
if date:
context_multi_currency.update({'date': date})
line_pool = self.pool.get('account.voucher.line')
line_ids = ids and line_pool.search(cr, uid, [('voucher_id', '=', ids[0])]) or False
if line_ids:
line_pool.unlink(cr, uid, line_ids)
currency_pool = self.pool.get('res.currency')
move_line_pool = self.pool.get('account.move.line')
move_line_obj = self.pool.get('account.move.line')
partner_pool = self.pool.get('res.partner')
journal_pool = self.pool.get('account.journal')
vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context)
vals = vals.get('value')
currency_id = vals.get('currency_id', currency_id)
voucher_line_obj = self.pool.get('account.voucher.line')
#get default values
vals = self.onchange_journal(cr, uid, ids, journal_id, [], False, partner_id, context=context)
vals = vals.get('value',{})
voucher_currency_id = vals.get('currency_id', voucher_currency_id)
default = {
'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id':currency_id},
'value':{'line_ids':[], 'line_dr_ids':[], 'line_cr_ids':[], 'pre_line': False, 'currency_id': voucher_currency_id},
}
if not partner_id:
return default
#drop existing lines
line_ids = ids and voucher_line_obj.search(cr, uid, [('voucher_id', 'in', ids)]) or []
if line_ids:
voucher_line_obj.unlink(cr, uid, line_ids, context=context)
if not partner_id and ids:
line_ids = line_pool.search(cr, uid, [('voucher_id', '=', ids[0])])
if line_ids:
line_pool.unlink(cr, uid, line_ids)
if not partner_id:
return default
journal = journal_pool.browse(cr, uid, journal_id, context=context)
@@ -455,63 +509,98 @@ class account_voucher(osv.osv):
if journal.type not in ('cash', 'bank'):
return default
total_credit = 0.0
total_debit = 0.0
account_type = 'receivable'
if ttype == 'payment':
account_type = 'payable'
total_debit = price or 0.0
else:
total_credit = price or 0.0
account_type = 'receivable'
if not context.get('move_line_ids', False):
ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context)
ids = move_line_obj.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context)
else:
ids = context['move_line_ids']
ids.reverse()
moves = move_line_pool.browse(cr, uid, ids, context=context)
#computation of the assignation of voucher amount on voucher lines
total_credit = account_type == 'receivable' and price or 0.0
total_debit = account_type == 'payable' and price or 0.0
moves = move_line_obj.browse(cr, uid, ids, context=context)
company_currency = journal.company_id.currency_id.id
if company_currency != currency_id and ttype == 'payment':
total_debit = currency_pool.compute(cr, uid, currency_id, company_currency, total_debit, context=context_multi_currency)
elif company_currency != currency_id and ttype == 'receipt':
total_credit = currency_pool.compute(cr, uid, currency_id, company_currency, total_credit, context=context_multi_currency)
invoice_id = context.get('invoice_id', False)
move_line_found = False
#order the lines by most old first
ids.reverse()
for line in moves:
if line.credit and line.reconcile_partial_id and ttype == 'receipt':
continue
if line.debit and line.reconcile_partial_id and ttype == 'payment':
continue
total_credit += line.credit or 0.0
total_debit += line.debit or 0.0
if invoice_id:
if line.invoice.id == invoice_id:
#if the invoice linked to the voucher line is equal to the invoice_id in context
#then we assign the amount on that line, whatever the other voucher lines
move_line_found = line.id
break
elif voucher_currency_id == company_currency:
#otherwise treatments is the same but with other field names
if line.amount_residual == price:
#if the amount residual is equal the amount voucher, we assign it to that voucher
#line, whatever the other voucher lines
move_line_found = line.id
break
#otherwise we will split the voucher amount on each line (by most old first)
total_credit += line.credit or 0.0
total_debit += line.debit or 0.0
elif voucher_currency_id == line.currency_id.id:
if line.amount_residual_currency == price:
move_line_found = line.id
break
total_credit += line.credit and line.amount_currency or 0.0
total_debit += line.debit and line.amount_currency or 0.0
#voucher line creation
for line in moves:
if line.credit and line.reconcile_partial_id and ttype == 'receipt':
continue
if line.debit and line.reconcile_partial_id and ttype == 'payment':
continue
original_amount = line.credit or line.debit or 0.0
amount_unreconciled = currency_pool.compute(cr, uid, line.currency_id and line.currency_id.id or company_currency, currency_id, abs(line.amount_residual_currency), context=context_multi_currency)
amount_original, amount_unreconciled = voucher_line_obj._get_amounts(cr, uid, line, context=context)
currency_id = line.currency_id and line.currency_id.id or line.company_id.currency_id.id
rs = {
'name':line.move_id.name,
'type': line.credit and 'dr' or 'cr',
'move_line_id':line.id,
'account_id':line.account_id.id,
'amount_original': currency_pool.compute(cr, uid, line.currency_id and line.currency_id.id or company_currency, currency_id, line.currency_id and abs(line.amount_currency) or original_amount, context=context_multi_currency),
'amount_original': amount_original,
'amount': (move_line_found == line.id) and min(price, amount_unreconciled) or 0.0,
'currency_id': currency_id,
'voucher_currency_id': voucher_currency_id,
'date_original':line.date,
'company_currency_id': line.company_id.currency_id.id,
'date_due':line.date_maturity,
'amount_unreconciled': amount_unreconciled,
}
if line.credit:
amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_debit), context=context_multi_currency))
rs['amount'] = amount
total_debit -= amount
else:
amount = min(amount_unreconciled, currency_pool.compute(cr, uid, company_currency, currency_id, abs(total_credit), context=context_multi_currency))
rs['amount'] = amount
total_credit -= amount
#split voucher amount by most old first
if not move_line_found:
if company_currency == voucher_currency_id:
if line.credit:
amount = min(amount_unreconciled, abs(total_debit))
rs['amount'] = amount
total_debit -= amount
else:
amount = min(amount_unreconciled, abs(total_credit))
rs['amount'] = amount
total_credit -= amount
elif voucher_currency_id == line.currency_id.id:
if line.credit:
amount = min(amount_unreconciled, abs(total_debit))
rs['amount'] = amount
total_debit -= amount
else:
amount = min(amount_unreconciled, abs(total_credit))
rs['amount'] = amount
total_credit -= amount
default['value']['line_ids'].append(rs)
if rs['type'] == 'cr':
@@ -523,7 +612,7 @@ class account_voucher(osv.osv):
default['value']['pre_line'] = 1
elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0:
default['value']['pre_line'] = 1
default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price)
default['value']['writeoff_amount'], default['value']['currency_rate_difference'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, date, context=context)
return default
def onchange_date(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None):
@@ -533,9 +622,13 @@ class account_voucher(osv.osv):
@param context: context arguments, like lang, time zone
@return: Returns a dict which contains new values, and context
"""
if context is None: context = {}
period_pool = self.pool.get('account.period')
res = self.onchange_partner_id(cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=context)
pids = period_pool.search(cr, uid, [('date_start', '<=', date), ('date_stop', '>=', date)])
if context.get('invoice_id', False):
company_id = self.pool.get('account.invoice').browse(cr, uid, context['invoice_id'], context=context).company_id.id
context.update({'company_id': company_id})
pids = period_pool.find(cr, uid, date, context=context)
if pids:
if not 'value' in res:
res['value'] = {}
@@ -543,8 +636,9 @@ class account_voucher(osv.osv):
return res
def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, context=None):
if context is None: context = {}
if not journal_id:
return False
return {}
journal_pool = self.pool.get('account.journal')
journal = journal_pool.browse(cr, uid, journal_id, context=context)
account_id = journal.default_credit_account_id or journal.default_debit_account_id
@@ -558,6 +652,10 @@ class account_voucher(osv.osv):
if journal.currency:
currency_id = journal.currency.id
vals['value'].update({'currency_id':currency_id})
context.update({'company_id': journal.company_id.id})
periods = self.pool.get('account.period').find(cr, uid, context=context)
if periods:
vals['value'].update({'period_id':periods[0]})
return vals
def proforma_voucher(self, cr, uid, ids, context=None):
@@ -601,7 +699,6 @@ class account_voucher(osv.osv):
raise osv.except_osv(_('Invalid action !'), _('Cannot delete Voucher(s) which are already opened or paid !'))
return super(account_voucher, self).unlink(cr, uid, ids, context=context)
# TODO: may be we can remove this method if not used anyware
def onchange_payment(self, cr, uid, ids, pay_now, journal_id, partner_id, ttype='sale'):
res = {}
if not partner_id:
@@ -632,48 +729,44 @@ class account_voucher(osv.osv):
if context is None:
context = {}
move_pool = self.pool.get('account.move')
move_line_pool = self.pool.get('account.move.line')
move_line_obj = self.pool.get('account.move.line')
currency_pool = self.pool.get('res.currency')
tax_obj = self.pool.get('account.tax')
seq_obj = self.pool.get('ir.sequence')
for inv in self.browse(cr, uid, ids, context=context):
if inv.move_id:
for voucher in self.browse(cr, uid, ids, context=context):
if voucher.move_id:
continue
context_multi_currency = context.copy()
context_multi_currency.update({'date': inv.date})
context_multi_currency.update({'date': voucher.date})
if inv.number:
name = inv.number
elif inv.journal_id.sequence_id:
name = seq_obj.get_id(cr, uid, inv.journal_id.sequence_id.id)
if voucher.number:
name = voucher.number
else:
raise osv.except_osv(_('Error !'), _('Please define a sequence on the journal !'))
if not inv.reference:
name = seq_obj.get_id(cr, uid, voucher.journal_id.sequence_id.id)
if not voucher.reference:
ref = name.replace('/','')
else:
ref = inv.reference
ref = voucher.reference
move = {
'name': name,
'journal_id': inv.journal_id.id,
'narration': inv.narration,
'date': inv.date,
'journal_id': voucher.journal_id.id,
'narration': voucher.narration,
'date': voucher.date,
'ref': ref,
'period_id': inv.period_id and inv.period_id.id or False
'period_id': voucher.period_id and voucher.period_id.id or False
}
move_id = move_pool.create(cr, uid, move)
#create the first line manually
company_currency = inv.journal_id.company_id.currency_id.id
current_currency = inv.currency_id.id
company_currency = voucher.journal_id.company_id.currency_id.id
voucher_currency = voucher.currency_id.id
debit = 0.0
credit = 0.0
# TODO: is there any other alternative then the voucher type ??
# -for sale, purchase we have but for the payment and receipt we do not have as based on the bank/cash journal we can not know its payment or receipt
if inv.type in ('purchase', 'payment'):
credit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency)
elif inv.type in ('sale', 'receipt'):
debit = currency_pool.compute(cr, uid, current_currency, company_currency, inv.amount, context=context_multi_currency)
if voucher.type in ('purchase', 'payment'):
credit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency)
elif voucher.type in ('sale', 'receipt'):
debit = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.amount, context=context_multi_currency)
if debit < 0:
credit = -debit
debit = 0.0
@@ -683,28 +776,48 @@ class account_voucher(osv.osv):
sign = debit - credit < 0 and -1 or 1
#create the first line of the voucher
move_line = {
'name': inv.name or '/',
'name': voucher.name or '/',
'debit': debit,
'credit': credit,
'account_id': inv.account_id.id,
'account_id': voucher.account_id.id,
'move_id': move_id,
'journal_id': inv.journal_id.id,
'period_id': inv.period_id.id,
'partner_id': inv.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'amount_currency': company_currency <> current_currency and sign * inv.amount or 0.0,
'date': inv.date,
'date_maturity': inv.date_due
'journal_id': voucher.journal_id.id,
'period_id': voucher.period_id.id,
'partner_id': voucher.partner_id.id,
'currency_id': company_currency <> voucher_currency and voucher_currency or False,
'amount_currency': company_currency <> voucher_currency and sign * voucher.amount or 0.0,
'date': voucher.date,
'date_maturity': voucher.date_due
}
move_line_pool.create(cr, uid, move_line)
rec_list_ids = []
line_total = debit - credit
if inv.type == 'sale':
line_total = line_total - currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.tax_amount, context=context_multi_currency)
elif inv.type == 'purchase':
line_total = line_total + currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.tax_amount, context=context_multi_currency)
move_line_obj.create(cr, uid, move_line)
for line in inv.line_ids:
#create the move line for the currency difference
if voucher.currency_rate_difference:
if voucher.currency_rate_difference > 0:
account_id = voucher.company_id.property_expense_currency_exchange
if not account_id:
raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Income Currency Rate' on the company! "))
else:
account_id = voucher.company_id.property_income_currency_exchange
if not account_id:
raise osv.except_osv(_('Warning'),_("Unable to create accounting entry for currency rate difference. You have to configure the field 'Expense Currency Rate' on the company! "))
currency_diff_line = {
'name': _('Currency Difference'),
'debit': voucher.currency_rate_difference > 0 and voucher.currency_rate_difference or 0.0,
'credit': voucher.currency_rate_difference < 0 and -voucher.currency_rate_difference or 0.0,
'account_id': account_id.id,
'move_id': move_id,
'journal_id': voucher.journal_id.id,
'period_id': voucher.period_id.id,
'partner_id': voucher.partner_id.id,
'date': voucher.date,
'date_maturity': voucher.date_due
}
move_line_obj.create(cr, uid, currency_diff_line, context=context)
rec_list_ids = []
for line in voucher.line_ids:
#create one move line per voucher line where amount is not 0.0
if not line.amount:
continue
@@ -712,20 +825,20 @@ class account_voucher(osv.osv):
if line.amount == line.amount_unreconciled:
amount = line.move_line_id.amount_residual #residual amount in company currency
else:
amount = currency_pool.compute(cr, uid, current_currency, company_currency, line.untax_amount or line.amount, context=context_multi_currency)
amount = line.amount_in_company_currency
move_line = {
'journal_id': inv.journal_id.id,
'period_id': inv.period_id.id,
'journal_id': voucher.journal_id.id,
'period_id': voucher.period_id.id,
'name': line.name or '/',
'account_id': line.account_id.id,
'move_id': move_id,
'partner_id': inv.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'partner_id': voucher.partner_id.id,
'currency_id': company_currency <> line.currency_id.id and line.currency_id.id or False,
'analytic_account_id': line.account_analytic_id and line.account_analytic_id.id or False,
'quantity': 1,
'credit': 0.0,
'debit': 0.0,
'date': inv.date
'date': voucher.date
}
if amount < 0:
amount = -amount
@@ -734,60 +847,59 @@ class account_voucher(osv.osv):
else:
line.type = 'dr'
if (line.type=='dr'):
line_total += amount
move_line['debit'] = amount
else:
line_total -= amount
move_line['credit'] = amount
if inv.tax_id and inv.type in ('sale', 'purchase'):
if voucher.tax_id and voucher.type in ('sale', 'purchase'):
move_line.update({
'account_tax_id': inv.tax_id.id,
'account_tax_id': voucher.tax_id.id,
})
if move_line.get('account_tax_id', False):
tax_data = tax_obj.browse(cr, uid, [move_line['account_tax_id']], context=context)[0]
if not (tax_data.base_code_id and tax_data.tax_code_id):
raise osv.except_osv(_('No Account Base Code and Account Tax Code!'),_("You have to configure account base code and account tax code on the '%s' tax!") % (tax_data.name))
sign = (move_line['debit'] - move_line['credit']) < 0 and -1 or 1
move_line['amount_currency'] = company_currency <> current_currency and sign * line.amount or 0.0
voucher_line = move_line_pool.create(cr, uid, move_line)
move_line['amount_currency'] = company_currency <> line.currency_id.id and sign * line.amount or 0.0
voucher_line = move_line_obj.create(cr, uid, move_line)
if line.move_line_id.id:
rec_ids = [voucher_line, line.move_line_id.id]
rec_list_ids.append(rec_ids)
if not currency_pool.is_zero(cr, uid, inv.currency_id, line_total):
diff = line_total
if not currency_pool.is_zero(cr, uid, voucher.currency_id, voucher.writeoff_amount):
#create one line for the write off if needed
diff = currency_pool.compute(cr, uid, voucher_currency, company_currency, voucher.writeoff_amount, context=context_multi_currency)
account_id = False
write_off_name = ''
if inv.payment_option == 'with_writeoff':
account_id = inv.writeoff_acc_id.id
write_off_name = inv.comment
elif inv.type in ('sale', 'receipt'):
account_id = inv.partner_id.property_account_receivable.id
if voucher.payment_option == 'with_writeoff':
account_id = voucher.writeoff_acc_id.id
write_off_name = voucher.comment
elif voucher.type in ('sale', 'receipt'):
account_id = voucher.partner_id.property_account_receivable.id
else:
account_id = inv.partner_id.property_account_payable.id
account_id = voucher.partner_id.property_account_payable.id
move_line = {
'name': write_off_name or name,
'account_id': account_id,
'move_id': move_id,
'partner_id': inv.partner_id.id,
'date': inv.date,
'credit': diff > 0 and diff or 0.0,
'partner_id': voucher.partner_id.id,
'date': voucher.date,
'debit': diff < 0 and -diff or 0.0,
#'amount_currency': company_currency <> current_currency and currency_pool.compute(cr, uid, company_currency, current_currency, diff * -1, context=context_multi_currency) or 0.0,
#'currency_id': company_currency <> current_currency and current_currency or False,
'credit': diff > 0 and diff or 0.0,
'amount_currency': company_currency <> voucher_currency and -voucher.writeoff_amount or 0.0,
'currency_id': company_currency <> voucher_currency and voucher_currency or False,
}
move_line_pool.create(cr, uid, move_line)
self.write(cr, uid, [inv.id], {
move_line_obj.create(cr, uid, move_line)
self.write(cr, uid, [voucher.id], {
'move_id': move_id,
'state': 'posted',
'number': name,
})
if inv.journal_id.entry_posted:
if voucher.journal_id.entry_posted:
move_pool.post(cr, uid, [move_id], context={})
for rec_ids in rec_list_ids:
if len(rec_ids) >= 2:
move_line_pool.reconcile_partial(cr, uid, rec_ids)
move_line_obj.reconcile_partial(cr, uid, rec_ids)
return True
def copy(self, cr, uid, id, default={}, context=None):
@@ -810,43 +922,86 @@ class account_voucher_line(osv.osv):
_description = 'Voucher Lines'
_order = "move_line_id"
def _currency_id(self, cr, uid, ids, name, args, context=None):
res = {}
for line in self.browse(cr, uid, ids, context=context):
move_line = line.move_line_id
if move_line:
res[line.id] = move_line.currency_id and move_line.currency_id.id or move_line.company_id.currency_id.id
else:
res[line.id] = line.voucher_id.currency_id.id
return res
def _get_amounts(self, cr, uid, line_browse_rec, context=None):
if line_browse_rec.currency_id:
amount_original = line_browse_rec.amount_currency or 0.0
amount_unreconciled = line_browse_rec.amount_residual_currency
elif line_browse_rec.credit > 0:
amount_original = line_browse_rec.credit or 0.0
amount_unreconciled = line_browse_rec.amount_residual
else:
amount_original = line_browse_rec.debit or 0.0
amount_unreconciled = line_browse_rec.amount_residual
return amount_original, amount_unreconciled
def _compute_balance(self, cr, uid, ids, name, args, context=None):
currency_pool = self.pool.get('res.currency')
rs_data = {}
res = {}
for line in self.browse(cr, uid, ids, context=context):
ctx = context.copy()
ctx.update({'date': line.voucher_id.date})
res = {}
company_currency = line.voucher_id.journal_id.company_id.currency_id.id
voucher_currency = line.voucher_id.currency_id.id
move_line = line.move_line_id or False
amount_original, amount_unreconciled = self._get_amounts(cr, uid, line.move_line_id, context)
res[line.id] = {
'amount_original': amount_original,
'amount_unreconciled': amount_unreconciled,
}
if not move_line:
res['amount_original'] = 0.0
res['amount_unreconciled'] = 0.0
return res
elif move_line.currency_id:
res['amount_original'] = currency_pool.compute(cr, uid, move_line.currency_id.id, voucher_currency, move_line.amount_currency, context=ctx)
elif move_line and move_line.credit > 0:
res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.credit, context=ctx)
else:
res['amount_original'] = currency_pool.compute(cr, uid, company_currency, voucher_currency, move_line.debit, context=ctx)
def __company_currency_amount(self, cr, uid, line, amount, context=None):
if context is None:
context = {}
ctx = context.copy()
ctx.update({'date': line.date_original})
currency_pool = self.pool.get('res.currency')
amount_company_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.company_currency_id.id, amount, context=ctx)
ctx.update({'date': line.voucher_id.date})
amount_voucher_cur = currency_pool.compute(cr, uid, line.currency_id.id, line.voucher_currency_id.id, amount, context=ctx)
return amount_company_cur, amount_voucher_cur
if move_line:
res['amount_unreconciled'] = currency_pool.compute(cr, uid, move_line.currency_id and move_line.currency_id.id or company_currency, voucher_currency, abs(move_line.amount_residual_currency), context=ctx)
rs_data[line.id] = res
return rs_data
def onchange_amount(self, cr, uid, ids, amount, context=None):
if not amount or not ids:
return {'value':{'amount_in_company_currency': 0.0, 'amount_in_voucher_currency': 0.0}}
for line in self.browse(cr, uid, ids, context=context):
amount_company_cur, amount_voucher_cur = self.__company_currency_amount(cr, uid, line, amount, context=context)
return {'value': {'amount_in_company_currency': amount_company_cur, 'amount_in_voucher_currency': amount_voucher_cur}}
def _get_amount_in_company_currency(self, cr, uid, ids, name, args, context=None):
res = {}
for line in self.browse(cr, uid, ids, context=context):
amount_in_company_currency, amount_in_voucher_currency = self.__company_currency_amount(cr, uid, line, line.amount, context=context)
res[line.id] = {
'amount_in_company_currency': amount_in_company_currency,
'amount_in_voucher_currency': amount_in_voucher_currency,
}
return res
_columns = {
'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'),
'move_line_id': fields.many2one('account.move.line', 'Journal Item'),
'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'),
'name':fields.char('Description', size=256),
'account_id':fields.many2one('account.account','Account', required=True),
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'),
'untax_amount':fields.float('Untax Amount'),
'currency_id': fields.function(_currency_id, string='Currency', type='many2one', relation='res.currency'),
'company_currency_id': fields.related('move_line_id','company_id','currency_id', type='many2one', relation='res.currency', string="Company Currency"),
'voucher_currency_id': fields.related('voucher_id', 'currency_id', type='many2one', relation='res.currency', string="Voucher Currency"),
'amount':fields.float('Amount', digits_compute=dp.get_precision('Account')),
'type':fields.selection([('dr','Debit'),('cr','Credit')], 'Dr/Cr'),
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
'move_line_id': fields.many2one('account.move.line', 'Journal Item'),
'amount_in_company_currency': fields.function(_get_amount_in_company_currency, string='Amount in Company Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"),
'amount_in_voucher_currency': fields.function(_get_amount_in_company_currency, string='Amount in Voucher Currency', type='float', digits_compute=dp.get_precision('Account'), multi="voucher_line_amount"),
'date_original': fields.related('move_line_id','date', type='date', relation='account.move.line', string='Date', readonly=1),
'date_due': fields.related('move_line_id','date_maturity', type='date', relation='account.move.line', string='Due Date', readonly=1),
'amount_original': fields.function(_compute_balance, multi='dc', type='float', string='Original Amount', store=True),
@@ -868,9 +1023,9 @@ class account_voucher_line(osv.osv):
@return: Returns a dict which contains new values, and context
"""
res = {}
move_line_pool = self.pool.get('account.move.line')
move_line_obj = self.pool.get('account.move.line')
if move_line_id:
move_line = move_line_pool.browse(cr, user, move_line_id, context=context)
move_line = move_line_obj.browse(cr, user, move_line_id, context=context)
if move_line.credit:
ttype = 'dr'
else:
@@ -945,7 +1100,7 @@ class account_bank_statement(osv.osv):
bank_st_line_obj = self.pool.get('account.bank.statement.line')
st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
if st_line.voucher_id:
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number}, context=context)
voucher_obj.write(cr, uid, [st_line.voucher_id.id], {'number': next_number, 'date': st_line.date}, context=context)
if st_line.voucher_id.state == 'cancel':
voucher_obj.action_cancel_draft(cr, uid, [st_line.voucher_id.id], context=context)
wf_service.trg_validate(uid, 'account.voucher', st_line.voucher_id.id, 'proforma_voucher', cr)
@@ -955,7 +1110,7 @@ class account_bank_statement(osv.osv):
'move_ids': [(4, v.move_id.id, False)]
})
return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id, 'date': st_line.date}, update_check=False, context=context)
return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line.id, company_currency_id, next_number, context=context)
account_bank_statement()
@@ -43,7 +43,7 @@
<form string="Accounting Voucher">
<group col="6" colspan="4">
<field name="partner_id" required="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
<field name="journal_id" widget="selection" select="1" on_change="onchange_journal_voucher(line_ids, tax_id, amount, partner_id, journal_id, type)"/>
<field name="type" required="1"/>
<field name="name" colspan="2"/>
+45
View File
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields, osv
class res_company(osv.osv):
_inherit = "res.company"
_columns = {
'property_income_currency_exchange': fields.property(
'account.account',
type='many2one',
relation='account.account',
string="Income Currency Rate",
view_load=True,
domain="[('type', '=', 'other')]",),
'property_expense_currency_exchange': fields.property(
'account.account',
type='many2one',
relation='account.account',
string="Expense Currency Rate",
view_load=True,
domain="[('type', '=', 'other')]",),
}
res_company()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_company_inherit_currency_xchange_form">
<field name="name">res.company.form.inherit</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="currency_id" position="after">
<field name="property_income_currency_exchange" colspan="2"/>
<field name="property_expense_currency_exchange" colspan="2"/>
</field>
</field>
</record>
</data>
</openerp>
+3 -2
View File
@@ -45,10 +45,11 @@ class invoice(osv.osv):
'close_after_process': True,
'invoice_type':inv.type,
'invoice_id':inv.id,
'default_type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment'
'default_type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment',
'type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment'
}
}
invoice()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+355
View File
@@ -0,0 +1,355 @@
-
In order to check the Account_voucher module with multi-currency in OpenERP,
I create 2 Invoices in USD and make 2 Payments in USD based on the currency rating on that particular date
-
I create currency USD in OpenERP for January of 1.333333 Rate
-
!python {model: res.currency.rate}: |
from datetime import datetime
curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')])
date = '%s-01-01' %(datetime.now().year)
ids = self.search(cr, uid, [('currency_id','=',curr_id), ('name', '=', date)])
self.write(cr, uid, ids, {'rate': 1.333333})
-
I create currency USD in OpenERP for February of 1.250000 Rate
-
!record {model: res.currency.rate, id: feb_usd}:
currency_id: base.USD
name: !eval "'%s-02-01' %(datetime.now().year)"
rate: 1.250000
-
I create currency USD in OpenERP for March of 1.111111 Rate
-
!record {model: res.currency.rate, id: mar_usd}:
currency_id: base.USD
name: !eval "'%s-03-01' %(datetime.now().year)"
rate: 1.111111
-
I create currency USD in OpenERP for April of 1.052632 Rate
-
!record {model: res.currency.rate, id: apr_usd}:
currency_id: base.USD
name: !eval "'%s-04-01' %(datetime.now().year)"
rate: 1.052632
-
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
default_credit_account_id: account.cash
currency: base.USD
company_id: base.main_company
view_id: account.account_journal_bank_view
-
I set up some accounts for currency rate expense/income in my company
-
!record {model: res.company, id: base.main_company}:
property_expense_currency_exchange: account.o_expense
property_income_currency_exchange: account.o_income
-
I create new partner Mark Strauss.
-
!record {model: res.partner, id: res_partner_strauss0}:
address:
- city: paris
country_id: base.fr
name: Mark Strauss
street: 1 rue Rockfeller
type: invoice
zip: '75016'
name: Mr. Mark Strauss
-
I create the first invoice on 1st January for 200 USD
-
!record {model: account.invoice, id: account_invoice_jan}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 200.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_strauss0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_invoice_jan}
-
I check that first invoice move is correct for debtor account (debit - credit == 150.0)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_invoice_jan"))
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 == 150.0), "Invoice move is not correct for debtors account"
-
I create the second invoice on 1st February for 100 USD
-
!record {model: account.invoice, id: account_invoice_feb}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
period_id: account.period_2
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 100.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_strauss0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_invoice_feb}
-
I check that second invoice move is correct for debtor account (debit - credit == 80)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_invoice_feb"))
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 == 80), "Invoice move is not correct for debtors account"
-
I create the first voucher of payment
<create with values 240 USD, journal USD, and fill amounts 180 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 240.00, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 240.00,
'company_id': ref('base.main_company'),
'currency_id': ref('base.USD'),
'journal_id': ref('bank_journal_USD'),
'partner_id': ref('res_partner_strauss0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-03-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'First payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 200.00:
item['amount'] = 180.00
else:
item['amount'] = 70.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is -10.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == -10.0), "Writeoff amount is not -10.0"
-
I check that currency rate difference is -34.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my first voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with -180 and -70 as amount_currency columns and that their credit columns are respectively 135 and 56
-
I check that my currency rate difference is correct. 34 in credit with no amount_currency
-
I check that my write-off is correct. 9 debit and 10 amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == -180.00:
assert move_line.credit == 135.00, "Debtor account has wrong entry."
elif move_line.amount_currency == -70.00:
assert move_line.credit == 56.00, "Debtor account has wrong entry."
elif move_line.credit == 34.00:
assert move_line.amount_currency == 0.00, "Incorrect currency rate difference."
elif move_line.amount_currency == 10.00:
assert move_line.debit == 9.00, "Writeoff amount is wrong."
-
I check the residual amount of Invoice1, should be 20 in amount_currency and 15 in company currency
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_invoice_jan"))
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 == 20.0 and move_line.amount_residual == 15.0) , "Residual amount is not correct for first Invoice"
-
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_invoice_feb"))
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 == 30.0 and move_line.amount_residual == 24.0) , "Residual amount is not correct for first Invoice"
-
I create the second voucher of payment
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_strauss0"), ref('bank_journal_USD'), 45.00, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 45.00,
'company_id': ref('base.main_company'),
'currency_id': ref('base.USD'),
'journal_id': ref('bank_journal_USD'),
'partner_id': ref('res_partner_strauss0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-04-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'Second payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 20.00:
item['amount'] = 20.00
else:
item['amount'] = 30.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is -5.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0"
-
I check that currency rate difference is -8.50
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my second voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with -20 and -30 as amount_currency columns and their credit columns are respectively 15 and 24.
-
I check that my currency rate difference is correct. 8.5 in credit with no amount_currency
-
I check that my writeoff is correct. 4.75 debit and 5 amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_strauss0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == -20.00:
assert move_line.credit == 15.00, "Debtor account has wrong entry."
elif move_line.amount_currency == -30.00:
assert move_line.credit == 24.00, "Debtor account has wrong entry."
elif move_line.credit == 8.50:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.amount_currency == 5.00:
assert move_line.debit == 4.75, "Writeoff amount is wrong."
-
I check the residual amount of Invoice1, 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_invoice_jan"))
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 first Invoice"
-
I check the residual amuont of Invoice2, 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_invoice_feb"))
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 second Invoice"
@@ -0,0 +1,328 @@
-
In order to check the Account_voucher module with multi-currency in OpenERP,
I create 2 Invoices in USD and make 2 Payments one in USD and another in EUR, based on the currency rating on that particular date
-
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
currency: base.EUR
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
default_credit_account_id: account.cash
currency: base.USD
company_id: base.main_company
view_id: account.account_journal_bank_view
-
I create a new partner Robert Clements
-
!record {model: res.partner, id: res_partner_clements0}:
address:
- city: marseille
country_id: base.fr
name: Robert
street: 1 rue Rockfeller
type: invoice
zip: '13016'
name: Mr.Robert Clements
-
I create the first invoice on 1st January for 200 USD
-
!record {model: account.invoice, id: account_first_invoice_jan_suppl}:
account_id: account.a_pay
type : in_invoice
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_expense
name: '[PC1] Basic PC'
price_unit: 200.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_clements0
reference_type: none
check_total : 200
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_suppl}
-
I check that first invoice move is correct for debtor account(debit - credit == -150)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_suppl"))
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 == -150.00), "Invoice move is incorrect for debtors account"
-
I create the second invoice on 1st February for 100 USD
-
!record {model: account.invoice, id: account_second_invoice_feb_suppl}:
account_id: account.a_pay
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
period_id: account.period_2
type : in_invoice
invoice_line:
- account_id: account.a_expense
name: '[PC1] Basic PC'
price_unit: 100.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_clements0
reference_type: none
check_total : 100.0
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_suppl}
-
I check that second invoice move is correct for debtor account (debit - credit == -80)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_suppl"))
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 == -80), "Invoice move is incorrect for debtors account"
-
I create the first voucher of payment
<create with values 240 EUR, journal EUR, and fills amount 180 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 240.0, 2, ttype='payment', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 240.0,
'company_id': ref('base.main_company'),
'currency_id': ref('base.EUR'),
'journal_id': ref('bank_journal_EUR'),
'partner_id': ref('res_partner_clements0'),
'period_id': ref('account.period_3'),
'type': 'payment',
'date': time.strftime("%Y-03-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'First payment',
}
if not res['value']['line_dr_ids']:
res['value']['line_dr_ids'] = [{'type': 'dr', 'account_id': ref('account.a_pay'),}]
for item in res['value']['line_dr_ids']:
if item['amount_unreconciled'] == 200.00:
item['amount'] = 180.00
else:
item['amount'] = 70.00
vals['line_dr_ids'] = [(0,0,i) for i in res['value']['line_dr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is -15.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == -15.0), "Writeoff amount is not -15.0"
-
I check that currency rate difference is 34.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == 34.0), "Currency rate difference is not 34.0"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my creditor account is correct
-
I check that the creditor account has 2 new lines with 180 and 70 in amount_currency columns and their debit columns are respectively 135 and 56 and currency is USD($).
-
I check that my currency rate difference is correct. -34 in credit with no amount_currency
-
I check that my writeoff is correct. -15 in credit with no amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == 180.00:
assert move_line.debit == 135.00, "Creditor account has wrong entry."
elif move_line.amount_currency == 70.00:
assert move_line.debit == 56.00, "Debtor account has wrong entry."
elif move_line.debit == 34.00:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.debit == 15.00:
assert move_line.amount_currency == 0.00, "Writeoff amount is wrong."
-
I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_suppl"))
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 == 20.0 and move_line.amount_residual == 15) , "Residual amount is not correct for first Invoice"
-
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_suppl"))
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 == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice"
-
I create the second voucher of payment
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_clements0"), ref('bank_journal_EUR'), 45.0, 2, ttype='payment', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 45.0,
'company_id': ref('base.main_company'),
'currency_id': ref('base.USD'),
'journal_id': ref('bank_journal_USD'),
'partner_id': ref('res_partner_clements0'),
'period_id': ref('account.period_3'),
'type': 'payment',
'date': time.strftime("%Y-04-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'Second payment',
}
if not res['value']['line_dr_ids']:
res['value']['line_dr_ids'] = [{'type': 'dr', 'account_id': ref('account.a_pay'),}]
for item in res['value']['line_dr_ids']:
if item['amount_unreconciled'] == 20.00:
item['amount'] = 20.00
else:
item['amount'] = 30.00
vals['line_dr_ids'] = [(0,0,i) for i in res['value']['line_dr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is -5.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == 5.0), "Writeoff amount is not 5.0"
-
I check that currency rate difference is 8.50
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == 8.50), "Currency rate difference is not 8.50"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that my voucher state is posted
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert voucher_id.state == 'posted', "Voucher state is not posted"
-
I check that my creditor account is correct
-
I check that the creditor account has 2 new lines with 20 and 30 in amount_currency columns and their debit columns are respectively 15 and 24 and currency is USD($).
-
I check that my currency rate difference is correct. 8.50 in debit with no amount_currency
-
I check that my writeoff is correct. 4.75 in credit and 5 in amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_clements0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == 20.00:
assert move_line.debit == 15.00, "Debtor account has wrong entry."
elif move_line.amount_currency == 30.00:
assert move_line.debit == 24.00, "Debtor account has wrong entry."
elif move_line.debit == 8.50:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.amount_currency == -5.00:
assert move_line.credit == 4.75, "Writeoff amount is wrong."
-
I check the residual amount of invoice 1, 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_first_invoice_jan_suppl"))
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 first Invoice"
-
I check the residual amount of invoice 2, 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_second_invoice_feb_suppl"))
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 second Invoice"
@@ -0,0 +1,360 @@
-
In order to check the Account_voucher module with multi-currency in OpenERP,
I create 2 Invoices in USD and make 2 Payments one in USD and another in EUR, based on the currency rating on that particular date
-
I create currency USD in OpenERP for January of 1.333333 Rate
-
!python {model: res.currency.rate}: |
from datetime import datetime
curr_id = self.pool.get('res.currency').search(cr, uid, [('name', '=', 'USD')])
date = '%s-01-01' %(datetime.now().year)
ids = self.search(cr, uid, [('currency_id', '=', curr_id), ('name', '=', date)])
self.write(cr, uid, ids, {'rate': 1.333333})
-
I create currency USD in OpenERP for February of 1.250000 Rate
-
!record {model: res.currency.rate, id: febr_usd}:
currency_id: base.USD
name: !eval "'%s-02-01' %(datetime.now().year)"
rate: 1.250000
-
I create currency USD in OpenERP for March of 1.111111 Rate
-
!record {model: res.currency.rate, id: marc_usd}:
currency_id: base.USD
name: !eval "'%s-03-01' %(datetime.now().year)"
rate: 1.111111
-
I create currency USD in OpenERP for April of 1.052632 Rate
-
!record {model: res.currency.rate, id: apri_usd}:
currency_id: base.USD
name: !eval "'%s-04-01' %(datetime.now().year)"
rate: 1.052632
-
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
currency: base.EUR
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
default_credit_account_id: account.cash
currency: base.USD
company_id: base.main_company
view_id: account.account_journal_bank_view
-
I set up some accounts for currency rate expense/income in my company
-
!record {model: res.company, id: base.main_company}:
property_expense_currency_exchange: account.o_expense
property_income_currency_exchange: account.o_income
-
I create a new partner Michael Geller
-
!record {model: res.partner, id: res_partner_michael0}:
address:
- city: paris
country_id: base.fr
name: Michael
street: 1 rue Rockfeller
type: invoice
zip: '75016'
name: Mr.Michael Geller
-
I create the first invoice on 1st January for 200 USD
-
!record {model: account.invoice, id: account_first_invoice_jan}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 200.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_michael0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan}
-
I check that first invoice move is correct for debtor account(debit - credit == 150)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan"))
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 == 150.00), "Invoice move is incorrect for debtors account"
-
I create the second invoice on 1st February for 100 USD
-
!record {model: account.invoice, id: account_second_invoice_feb}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.USD
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
period_id: account.period_2
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 100.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_michael0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb}
-
I check that second invoice move is correct for debtor account (debit - credit == 80)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb"))
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 == 80), "Invoice move is incorrect for debtors account"
-
I create the first voucher of payment
<create with values 240 EUR, journal EUR, and fills amount 180 for the invoice of 200$ and 70 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 240.0, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 240.0,
'company_id': ref('base.main_company'),
'currency_id': ref('base.EUR'),
'journal_id': ref('bank_journal_EUR'),
'partner_id': ref('res_partner_michael0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-03-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'First payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 200.00:
item['amount'] = 180.00
else:
item['amount'] = 70.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is 15.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == 15.0), "Writeoff amount is not 15.0"
-
I check that currency rate difference is -34.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == -34.0), "Currency rate difference is not -34.0"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with -180 and -70 in amount_currency columns and their credit columns are respectively 135 and 56 and currency is USD($).
-
I check that my currency rate difference is correct. 34 in credit with no amount_currency
-
I check that my writeoff is correct. 15 in credit with no amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == -180.00:
assert move_line.credit == 135.00, "Debtor account has wrong entry."
elif move_line.amount_currency == -70.00:
assert move_line.credit == 56.00, "Debtor account has wrong entry."
elif move_line.credit == 34.00:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.credit == 15.00:
assert move_line.amount_currency == 0.00, "Writeoff amount is wrong."
-
I check the residual amount of Invoice1, should be 20 in residual currency and 15 in amount_residual
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan"))
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 == 20.0 and move_line.amount_residual == 15) , "Residual amount is not correct for first Invoice"
-
I check the residual amuont of Invoice2, should be 30 in residual currency and 24 in amount_residual
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb"))
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 == 30 and move_line.amount_residual == 24) , "Residual amount is not correct for second Invoice"
-
I create the second voucher of payment
<create with values 45 USD, journal USD, and fill amounts 20 for the invoice of 200$ and 30 for the invoice of 100$>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_michael0"), ref('bank_journal_EUR'), 45.0, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 45.0,
'company_id': ref('base.main_company'),
'currency_id': ref('base.USD'),
'journal_id': ref('bank_journal_USD'),
'partner_id': ref('res_partner_michael0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-04-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'Second payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 20.00:
item['amount'] = 20.00
else:
item['amount'] = 30.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is -5.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == -5.0), "Writeoff amount is not -5.0"
-
I check that currency rate difference is -8.50
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == -8.50), "Currency rate difference is not -8.50"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that my voucher state is posted
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert voucher_id.state == 'posted', "Voucher state is not posted"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with -20 and -30 in amount_currency columns and their credit columns are respectively 15 and 24 and currency is USD($).
-
I check that my currency rate difference is correct. 8.50 in credit with no amount_currency
-
I check that my writeoff is correct. 4.75 in debit and 5 in amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_michael0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == -20.00:
assert move_line.credit == 15.00, "Debtor account has wrong entry."
elif move_line.amount_currency == -30.00:
assert move_line.credit == 24.00, "Debtor account has wrong entry."
elif move_line.credit == 8.50:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.amount_currency == 5.00:
assert move_line.debit == 4.75, "Writeoff amount is wrong."
-
I check the residual amount of invoice 1, 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_first_invoice_jan"))
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 first Invoice"
-
I check the residual amuont of invoice 2, 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_second_invoice_feb"))
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 second Invoice"
@@ -0,0 +1,331 @@
-
In order to check the Account_voucher module with multi-currency in OpenERP,
I create 2 Invoices in EUR and make 2 Payments in EUR based on the currency rating on that particular date.
-
I create currency EUR in OpenERP for January of 1.000000 Rate
-
!record {model: res.currency.rate, id: jan_eur}:
currency_id: base.EUR
name: !eval "'%s-01-01' %(datetime.now().year)"
rate: 1.000000
-
I create currency EUR in OpenERP for February of 1.000000 Rate
-
!record {model: res.currency.rate, id: feb_eur}:
currency_id: base.EUR
name: !eval "'%s-02-01' %(datetime.now().year)"
rate: 1.000000
-
I create currency EUR in OpenERP for March of 1.000000 Rate
-
!record {model: res.currency.rate, id: mar_eur}:
currency_id: base.EUR
name: !eval "'%s-03-01' %(datetime.now().year)"
rate: 1.000000
-
I create currency EUR in OpenERP for April of 1.000000 Rate
-
!record {model: res.currency.rate, id: apr_eur}:
currency_id: base.EUR
name: !eval "'%s-04-01' %(datetime.now().year)"
rate: 1.000000
-
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
currency: base.EUR
company_id: base.main_company
view_id: account.account_journal_bank_view
-
I set up some accounts for currency rate expense/income in my company
-
!record {model: res.company, id: base.main_company}:
property_expense_currency_exchange: account.o_expense
property_income_currency_exchange: account.o_income
-
I create a new partner Peter Lawson.
-
!record {model: res.partner, id: res_partner_peter0}:
address:
- city: paris
country_id: base.fr
name: Peter
street: 1 rue Rockfeller
type: invoice
zip: '75016'
name: Mr.Peter Lawson
-
I create the first invoice on 1st January for 150 EUR
-
!record {model: account.invoice, id: account_first_invoice_jan_eur}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.EUR
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 150.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_peter0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_eur}
-
I check that first invoice move is correct for debtor account(debit - credit == 150)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
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 == 150.00), "Invoice move is incorrect for debtors account"
-
I create the second invoice on 1st February for 80 EUR
-
!record {model: account.invoice, id: account_second_invoice_feb_eur}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.EUR
date_invoice: !eval "'%s-02-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 80.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_peter0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_second_invoice_feb_eur}
-
I check that second invoice move is correct for debtor account (debit - credit == 80)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
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 == 80.00), "Invoice move is incorrect for debtors account"
-
I create the first voucher of payment
<create with values 120 EUR, journal EUR, and fill amounts 100 for the invoice of 150 EUR and 20 for the invoice of 80 EUR>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 120.00,
'company_id': ref('base.main_company'),
'currency_id': ref('base.EUR'),
'journal_id': ref('bank_journal_EUR'),
'partner_id': ref('res_partner_peter0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-03-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'First payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 150.00:
item['amount'] = 100.00
else:
item['amount'] = 20.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is 0.00
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0.00"
-
I check that currency rate difference is 0.00
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0.00"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my first voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 20 and 100 respectively
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'),('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.credit == 20.00:
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
elif move_line.credit == 100.00:
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
-
I check the residual amount of Invoice1 is 50
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
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 == 50.0 and move_line.amount_residual == 50.0) , "Residual amount is not correct for first Invoice"
-
I check the residual amuont of Invoice2 is 60
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
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 == 60.0 and move_line.amount_residual == 60.0) , "Residual amount is not correct for second Invoice"
-
I create the second voucher of payment and check to let open the debtor overpaid amount.
<create with values 120 EUR, journal EUR, and fill amounts 50 for the invoice of 150 EUR and 70 for the invoice of 80 EUR>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_peter0"), ref('bank_journal_EUR'), 120.00, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 120.00,
'company_id': ref('base.main_company'),
'currency_id': ref('base.EUR'),
'journal_id': ref('bank_journal_EUR'),
'partner_id': ref('res_partner_peter0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-04-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'Second payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 50.00:
item['amount'] = 50.00
elif item['amount_unreconciled'] == 60.00:
item['amount'] = 70.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is 0.00
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'),('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == 0.00), "Writeoff amount is not 0"
-
I check that currency rate difference is 0.00
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.currency_rate_difference == 0.00), "Currency rate difference is not 0"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my second voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
-
I check that my debtor account is correct
-
I check that the debtor account has 2 new lines with 0.00 and 0.00 in amount_currency columns and their credit are 70 and 50
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'Second payment'), ('partner_id', '=', ref('res_partner_peter0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.credit == 70.00:
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
elif move_line.credit == 50.00:
assert move_line.amount_currency == 0.00, "Debtor account has wrong entry."
-
I check the residual amount of Invoice1 is 0
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_eur"))
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 and move_line.amount_residual == 0) , "Residual amount is not correct for first Invoice"
-
I check the residual amuont of Invoice2 is -10
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_second_invoice_feb_eur"))
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 == -10.0 and move_line.amount_residual == -10.0) , "Residual amount is not correct for second Invoice"
@@ -0,0 +1,194 @@
-
In order to check the Account_voucher module with multi-currency in OpenERP,
I create an invoice in CAD and make its Payment in CHF based on the currency rating on that particular date.
-
I create currency CAD in OpenERP for January of 1.338800 Rate
-
!record {model: res.currency.rate, id: jan_cad}:
currency_id: base.CAD
name: !eval "'%s-01-01' %(datetime.now().year)"
rate: 1.338800
-
I create currency CAD in OpenERP for March of 2.000000 Rate
-
!record {model: res.currency.rate, id: mar_cad}:
currency_id: base.CAD
name: !eval "'%s-03-01' %(datetime.now().year)"
rate: 2.000000
-
I create currency CHF in OpenERP for January of 1.308600 Rate
-
!record {model: res.currency.rate, id: jan_chf}:
currency_id: base.CHF
name: !eval "'%s-01-01' %(datetime.now().year)"
rate: 1.308600
-
I create currency CHF in OpenERP for March of 1.250000 Rate
-
!record {model: res.currency.rate, id: mar_chf}:
currency_id: base.CHF
name: !eval "'%s-03-01' %(datetime.now().year)"
rate: 1.250000
-
I create a bank journal with CHF as currency
-
!record {model: account.journal, id: bank_journal_CHF}:
name: Bank Journal(CHF)
code: BCHF
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
currency: base.CHF
company_id: base.main_company
view_id: account.account_journal_bank_view
-
I set up some accounts for currency rate expense/income in my company
-
!record {model: res.company, id: base.main_company}:
property_expense_currency_exchange: account.o_expense
property_income_currency_exchange: account.o_income
-
I create a new partner John Armani.
-
!record {model: res.partner, id: res_partner_john0}:
address:
- city: paris
country_id: base.fr
name: John
street: 1 rue Rockfeller
type: invoice
zip: '75016'
name: Mr.John Armani
-
I create the first invoice on 1st January for 200 CAD
-
!record {model: account.invoice, id: account_first_invoice_jan_cad}:
account_id: account.a_recv
address_contact_id: base.res_partner_address_3000
address_invoice_id: base.res_partner_address_3000
company_id: base.main_company
currency_id: base.CAD
date_invoice: !eval "'%s-01-01' %(datetime.now().year)"
period_id: account.period_1
invoice_line:
- account_id: account.a_sale
name: '[PC1] Basic PC'
price_unit: 200.0
quantity: 1.0
product_id: product.product_product_pc1
uos_id: product.product_uom_unit
journal_id: account.sales_journal
partner_id: res_partner_john0
reference_type: none
-
I Validate invoice by clicking on Validate button
-
!workflow {model: account.invoice, action: invoice_open, ref: account_first_invoice_jan_cad}
-
I check that first invoice move is correct for debtor account (debit - credit == 149.39)
-
!python {model: account.invoice}: |
invoice_id = self.browse(cr, uid, ref("account_first_invoice_jan_cad"))
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 == 149.39), "Invoice move is incorrect for debtors account"
-
I create the first voucher of payment
<create with values 300 CHF, journal CHF, and fill amounts 200 for the invoice of 200 CAD>
-
!python {model: account.voucher}: |
import netsvc, time
vals = {}
res = self.onchange_partner_id(cr, uid, [], ref("res_partner_john0"), ref('bank_journal_CHF'), 300.00, 2, ttype='receipt', date=False)
vals = {
'account_id': ref('account.cash'),
'amount': 300.00,
'company_id': ref('base.main_company'),
'currency_id': ref('base.CHF'),
'journal_id': ref('bank_journal_CHF'),
'partner_id': ref('res_partner_john0'),
'period_id': ref('account.period_3'),
'type': 'receipt',
'date': time.strftime("%Y-03-01"),
'payment_option': 'with_writeoff',
'writeoff_acc_id': ref('account.a_expense'),
'comment': 'Write Off',
'name': 'First payment',
}
if not res['value']['line_cr_ids']:
res['value']['line_cr_ids'] = [{'type': 'cr', 'account_id': ref('account.a_recv'),}]
for item in res['value']['line_cr_ids']:
if item['amount_unreconciled'] == 200.00:
item['amount'] = 200.00
vals['line_cr_ids'] = [(0,0,i) for i in res['value']['line_cr_ids']]
id = self.create(cr, uid, vals)
voucher_id = self.browse(cr, uid, id)
assert (voucher_id.state=='draft'), "Voucher is not in draft state"
-
I check that writeoff amount computed is 175.0
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
voucher_id = self.browse(cr, uid, voucher[0])
assert (voucher_id.writeoff_amount == 175.0), "Writeoff amount is not 175.0"
-
I check that currency rate difference is 49.39
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
voucher_id = self.browse(cr, uid, voucher[0])
curr_diff = float(str(voucher_id.currency_rate_difference))
assert (curr_diff == 49.39), "Currency rate difference is not 49.39"
-
I confirm the voucher
-
!python {model: account.voucher}: |
import netsvc
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'account.voucher', voucher[0], 'proforma_voucher', cr)
-
I check that the move of my voucher is valid
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
assert move_line.state == 'valid', "Voucher move is not valid"
assert voucher_id.state == 'posted', "Voucher state is not posted"
-
I check that my debtor account is correct
-
I check that the debtor account has 1 new line with -200 as amount_currency columns and 149.39 of credit and currency is CAD($).
-
I check that my currency rate difference is correct. 49.39 in debit with no amount_currency
-
I check that my writeoff is correct. 140 credit and -175 amount_currency
-
!python {model: account.voucher}: |
voucher = self.search(cr, uid, [('name', '=', 'First payment'), ('partner_id', '=', ref('res_partner_john0'))])
voucher_id = self.browse(cr, uid, voucher[0])
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('move_id', '=', voucher_id.move_id.id)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.amount_currency == -200:
assert move_line.credit == 149.39, "Debtor account has wrong entry."
elif move_line.debit == 49.39:
assert move_line.amount_currency == 0.00, "Incorrect Currency Difference."
elif move_line.credit == 140.00:
assert move_line.amount_currency == -175.00, "Writeoff amount is wrong."
-
I check the residual amount of Invoice1, 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_first_invoice_jan_cad"))
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 first Invoice"
@@ -74,14 +74,24 @@
<field name="arch" type="xml">
<form string="Bill Payment">
<group col="6" colspan="4">
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" context="{'invoice_currency':currency_id}" string="Supplier"/>
<field name="amount" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="partner_id"
required="1"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Supplier"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
widget="selection" select="1"
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Payment Method"/>
<field name="date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="amount"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="date"
select="1"
on_change="onchange_date(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="reference" select="1" string="Payment Ref"/>
<field name="name" colspan="2"/>
<field name="account_id"
@@ -94,25 +104,37 @@
<page string="Payment Information">
<field name="line_dr_ids" attrs="{'invisible': [('type', '=', 'receipt')]}" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
<tree string="Open Supplier Journal Entries" editable="bottom">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]"/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]" invisible="1"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="amount_original" readonly="1"/>
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
<field name="amount" sum="Payment"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('type', '=', 'payment')]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
<tree string="Open Customer Journal Entries" editable="bottom">
<field name="move_line_id"/>
<field name="move_line_id" required="1"/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
<field name="date_original"/>
<field name="amount_original"/>
<field name="amount" sum="Payment"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<group col="2" colspan="3">
@@ -137,15 +159,28 @@
<field name="arch" type="xml">
<form string="Bill Payment">
<group col="6" colspan="4">
<field name="partner_id" domain="[('supplier','=',True)]" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" context="{'invoice_currency':currency_id}" string="Supplier"/>
<field name="amount" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="partner_id"
domain="[('supplier','=',True)]"
required="1"
invisible="context.get('line_type', False)"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Supplier"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
invisible="context.get('line_type', False)"
widget="selection" select="1"
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Payment Method"/>
<field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="amount"
invisible="context.get('line_type', False)"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="date"
invisible="context.get('line_type', False)"
on_change="onchange_date(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
<field name="name" colspan="2" invisible="context.get('line_type', False)"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
@@ -159,25 +194,37 @@
<page string="Payment Information">
<field name="line_dr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140">
<tree string="Supplier Invoices and Outstanding transactions" editable="bottom">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','payable')]"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="amount_original" readonly="1"/>
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
<field name="amount" sum="Payment"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}">
<tree string="Credits" editable="bottom">
<field name="move_line_id"/>
<field name="move_line_id" required="1"/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
<field name="date_original"/>
<field name="amount_original"/>
<field name="amount" sum="Payment"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<group col="2" colspan="3">
@@ -185,24 +232,26 @@
<field name="narration" colspan="2" nolabel="1"/>
</group>
<group col="2" colspan="1">
<group col="2" colspan="1">
<separator string="Payment Options" colspan="2"/>
<field name="payment_option" required="1"/>
<group col="4" colspan="1">
<separator string="Payment Options" colspan="4"/>
<field name="payment_option" required="1" colspan="4"/>
<field name="currency_rate_difference" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
<field name="company_currency" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" nolabel="1"/><newline/>
<field name="writeoff_amount"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
<field name="currency_id2" nolabel="1" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/><newline/>
<field name="writeoff_acc_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
domain="[('type','=','other')]"/>
domain="[('type','=','other')]" colspan="4"/>
<field name="comment"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" colspan="4"/>
<field name="analytic_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"
groups="analytic.group_analytic_accounting"/>
groups="analytic.group_analytic_accounting" colspan="4"/>
</group>
<separator string="Other Information" colspan="2"/>
<group col="4" colspan="1">
<field name="currency_id"/>
<field name="number"/>
<field name="number"/>
</group>
</group>
</page>
@@ -269,56 +318,88 @@
id="menu_action_vendor_payment" parent="account.menu_finance_payables"/>
<record model="ir.ui.view" id="view_vendor_receipt_form">
<field name="name">account.voucher.receipt.form</field>
<field name="name">voucher.form.customer.payment</field>
<field name="model">account.voucher</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Customer Payment">
<group col="6" colspan="4">
<field name="partner_id" required="1" invisible="context.get('line_type', False)" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" string="Customer"/>
<field name="amount"
invisible="context.get('line_type', False)"
string="Paid Amount"
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
<group col="12" colspan="4">
<field name="partner_id"
colspan="4"
required="1"
invisible="context.get('line_type', False)"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Customer"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
invisible="context.get('line_type', False)"
widget="selection" select="1"
on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"
string="Payment Method"/>
<field name="date" select="1" invisible="context.get('line_type', False)" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="reference" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
<field name="name" colspan="2" invisible="context.get('line_type', False)"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
<field name="account_id"
widget="selection"
select="1"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"
string="Payment Method"
colspan="4"/>
<field name="amount"
colspan="1"
invisible="context.get('line_type', False)"
string="Paid Amount"
on_change="onchange_partner_id(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="currency_id" nolabel="1" invisible="1"/>
<field name="date"
colspan="4"
select="1"
invisible="context.get('line_type', False)"
on_change="onchange_date(partner_id, journal_id, amount,
currency_id, type, date, context)"/>
<field name="reference" colspan="4" select="1" invisible="context.get('line_type', False)" string="Payment Ref"/>
<field name="name" colspan="4" invisible="context.get('line_type', False)"/>
<field name="company_id" colspan="4" widget="selection" groups="base.group_multi_company"/>
<field name="account_id" colspan="4"
widget="selection"
invisible="True"/>
<field name="pre_line" invisible="1"/>
<field name="type" invisible="True"/>
<field name="pre_line" colspan="4" invisible="1"/>
<field name="type" colspan="4" invisible="True"/>
</group>
<notebook colspan="4">
<page string="Payment Information">
<field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
<field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, date, context)">
<tree string="Invoices and outstanding transactions" editable="bottom">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]" invisible="1"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="amount_original" readonly="1"/>
<field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
<field name="amount" sum="Payment"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<field name="line_dr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount)">
<field name="line_dr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" on_change="onchange_line_ids(line_dr_ids, line_cr_ids, amount, date, context)">
<tree string="Credits" editable="bottom">
<field name="move_line_id"/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]"/>
<field name="date_original"/>
<field name="amount_original"/>
<field name="amount" sum="Payment"/>
<field name="move_line_id" required="1" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"
domain="[('account_id.type','in',('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
/>
<field name="account_id" groups="base.group_extended" domain="[('type','=','receivable')]" invisible="1"/>
<field name="date_original" readonly="1"/>
<field name="date_due" readonly="1"/>
<field name="currency_id" readonly="1"/>
<field name="amount_original" readonly="1" invisible="1"/>
<field name="amount_unreconciled" readonly="1"/>
<field name="amount" on_change="onchange_amount(amount)"/>
<field name="amount_in_voucher_currency" readonly="1" groups="base.group_no_one"/>
<field name="voucher_currency_id" readonly="1" groups="base.group_no_one"/>
<field name="amount_in_company_currency" readonly="1" invisible="1"/>
<field name="company_currency_id" readonly="1" invisible="1"/>
</tree>
</field>
<group col="2" colspan="3">
@@ -326,23 +407,25 @@
<field name="narration" colspan="2" nolabel="1"/>
</group>
<group col="2" colspan="1">
<group col="2" colspan="1">
<separator string="Payment Options" colspan="2"/>
<field name="payment_option" required="1"/>
<group col="4" colspan="1">
<separator string="Payment Options" colspan="4"/>
<field name="payment_option" required="1" colspan="4"/>
<field name="currency_rate_difference" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
<field name="company_currency" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" nolabel="1"/><newline/>
<field name="writeoff_amount"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
<field name="currency_id2" nolabel="1" attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/><newline/>
<field name="writeoff_acc_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
domain="[('type','=','other')]"/>
domain="[('type','=','other')]" colspan="4"/>
<field name="comment"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}" colspan="4"/>
<field name="analytic_id"
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"
groups="analytic.group_analytic_accounting"/>
groups="analytic.group_analytic_accounting" colspan="4"/>
</group>
<separator string="Other Information" colspan="2"/>
<group col="4" colspan="1">
<field name="currency_id"/>
<field name="number"/>
</group>
</group>
@@ -83,7 +83,7 @@
<form string="Sales Receipt">
<group col="6" colspan="4">
<field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)" string="Customer"/>
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="date" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
<field name="journal_id" domain="[('type','in',['sale','sale_refund'])]" widget="selection" on_change="onchange_journal(journal_id, line_cr_ids, tax_id, partner_id)"/>
<field name="number"/>
<field name="name" colspan="2"/>
@@ -209,7 +209,7 @@
<form string="Supplier Voucher">
<group col="6" colspan="4">
<field name="partner_id" domain="[('supplier','=',True)]" required="1" string="Supplier" on_change="onchange_partner_id(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="date" string="Bill Date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date)"/>
<field name="date" string="Bill Date" select="1" on_change="onchange_date(partner_id, journal_id, amount, currency_id, type, date, context)"/>
<field name="journal_id" domain="[('type','in',['purchase','purchase_refund'])]" widget="selection" select="1" on_change="onchange_journal(journal_id, line_dr_ids, tax_id, partner_id)"/>
<field name="number"/>
<field name="name" colspan="2"/>
@@ -75,7 +75,7 @@ class account_statement_from_invoice_lines(osv.osv_memory):
statement.currency.id, amount, context=ctx)
context.update({'move_line_ids': [line.id]})
result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context)
result = voucher_obj.onchange_partner_id(cr, uid, [], partner_id=line.partner_id.id, journal_id=statement.journal_id.id, price=abs(amount), voucher_currency_id= statement.currency.id, ttype=(amount < 0 and 'payment' or 'receipt'), date=line_date, context=context)
voucher_res = { 'type':(amount < 0 and 'payment' or 'receipt'),
'name': line.name,
'partner_id': line.partner_id.id,
+1 -1
View File
@@ -137,7 +137,7 @@
<menuitem
action="action_view_board_list_form"
id="menu_view_board_form" parent="base.reporting_menu" groups="base.group_no_one" sequence="1"/>
id="menu_view_board_form" parent="base.reporting_menu" sequence="1"/>
<act_window context="{'view': active_id}" id="dashboard_open"
multi="True" name="Open Dashboard" res_model="board.board"
+1 -1
View File
@@ -62,7 +62,7 @@
<field name="res_model">crm.lead</field>
<field name="view_mode">tree,form,graph,calendar</field>
<field name="domain">[('type','=','opportunity')]</field>
<field name="context">{'search_default_user_id':uid,'search_default_current':1, 'search_default_section_id':section_id, 'stage_type': 'opportunity'}</field>
<field name="context">{'search_default_user_id':uid,'search_default_current':1, 'search_default_section_id':section_id, 'stage_type': 'opportunity', 'default_type': 'opportunity'}</field>
<field name="view_id" ref="crm_case_tree_view_oppor"/>
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="help">With opportunities you can manage and keep track of your sales pipeline by creating specific customer- or prospect-related sales documents to follow up potential sales. Information such as expected revenue, opportunity stage, expected closing date, communication history and much more can be stored. Opportunities can be connected to the email gateway: new emails may create opportunities, each of them automatically gets the history of the conversation with the customer.
+10 -35
View File
@@ -7,15 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
"PO-Revision-Date: 2011-01-14 08:49+0000\n"
"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) "
"<maxime.chambreuil@savoirfairelinux.com>\n"
"PO-Revision-Date: 2011-08-29 20:46+0000\n"
"Last-Translator: t.o <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 05:22+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-30 04:49+0000\n"
"X-Generator: Launchpad (build 13794)\n"
#. module: hr_timesheet_invoice
#: view:report.timesheet.line:0
@@ -109,7 +108,7 @@ msgstr "Cette année"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create.final,time:0
msgid "Display time in the history of works"
msgstr "Affiché le temps dans l'historique des travaux"
msgstr "Afficher le temps dans l'historique des travaux"
#. module: hr_timesheet_invoice
#: view:hr.timesheet.analytic.profit:0
@@ -136,7 +135,7 @@ msgstr "Compte"
#: field:hr.timesheet.invoice.create,time:0
#: field:hr.timesheet.invoice.create.final,time:0
msgid "Time spent"
msgstr "Temps dépensé"
msgstr "Temps passé"
#. module: hr_timesheet_invoice
#: field:account.analytic.account,amount_invoiced:0
@@ -470,7 +469,7 @@ msgid "Employee or Journal Name"
msgstr "Employé ou nom du journal"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:189
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py:191
#, python-format
msgid "Invoices"
msgstr "Factures"
@@ -500,6 +499,7 @@ msgid "Currency"
msgstr "Devise"
#. module: hr_timesheet_invoice
#: field:hr.timesheet.analytic.profit,employee_ids:0
#: view:report.timesheet.line:0
#: field:report.timesheet.line,user_id:0
#: field:report_timesheet.account,user_id:0
@@ -833,7 +833,7 @@ msgid "Timesheet Line"
msgstr "Ligne de feuille de temps"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:147
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:142
#, python-format
msgid "Balance product needed"
msgstr "Balance produit nécéssaire"
@@ -1073,7 +1073,7 @@ msgid "Analytic Lines to Invoice"
msgstr "Lignes analytique à facturer"
#. module: hr_timesheet_invoice
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:147
#: code:addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py:142
#, python-format
msgid "Please fill a Balance product in the wizard"
msgstr "Veuillez remplir la balance produit dans l'assistant"
@@ -1175,28 +1175,3 @@ msgstr "Année"
#~ msgid "Invalid model name in the action definition."
#~ msgstr "Nom du model invalide pour la définition de l'action."
#~ msgid "Analytic Account Reporting"
#~ msgstr "Rapports des Comptes Analytiques"
#~ msgid "My daily timesheets by account"
#~ msgstr "Mes feuilles de présence journalières par comptes"
#~ msgid "My Timesheet of the Month"
#~ msgstr "Mes feuilles de présence du mois"
#~ msgid "My timesheets by account"
#~ msgstr "Mes feuilles de présence par compte"
#~ msgid "My timesheets to invoice"
#~ msgstr "Mes feuilles de présence à facturer"
#~ msgid "Timesheet by user (this month)"
#~ msgstr "Feuille de présence par utilisateur (ce mois)"
#~ msgid ""
#~ "This lists show you every task work you can invoice to the customer. Select "
#~ "the lines in order to generate the invoices automatically."
#~ msgstr ""
#~ "Cette liste regroupe toutes les tâches que vous pouvez facturer au client. "
#~ "Sélectionnez les lignes dans l'ordre pour créer les factures automatiquement."
+58 -59
View File
@@ -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-08-03 07:25+0000\n"
"Last-Translator: Mantavya Gajjar (Open ERP) <Unknown>\n"
"PO-Revision-Date: 2011-08-29 07:21+0000\n"
"Last-Translator: Stanislav Hanzhin <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-29 04:55+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-08-30 04:49+0000\n"
"X-Generator: Launchpad (build 13794)\n"
#. module: membership
#: model:process.transition,name:membership.process_transition_invoicetoassociate0
@@ -37,12 +37,12 @@ msgstr "Уплативший член"
#: view:report.membership:0
#: view:res.partner:0
msgid "Group By..."
msgstr ""
msgstr "Группировать по ..."
#. module: membership
#: field:report.membership,num_paid:0
msgid "# Paid"
msgstr ""
msgstr "# Оплаченных"
#. module: membership
#: field:report.membership,tot_earned:0
@@ -57,7 +57,7 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "March"
msgstr ""
msgstr "Март"
#. module: membership
#: model:process.node,note:membership.process_node_setassociation0
@@ -67,14 +67,14 @@ msgstr ""
#. module: membership
#: model:process.transition,note:membership.process_transition_invoicetopaid0
msgid "Invoice is be paid."
msgstr ""
msgstr "Счет будет оплачен."
#. module: membership
#: field:membership.membership_line,company_id:0
#: view:report.membership:0
#: field:report.membership,company_id:0
msgid "Company"
msgstr ""
msgstr "Организация"
#. module: membership
#: field:product.product,membership_date_to:0
@@ -84,7 +84,7 @@ msgstr "Дата до"
#. module: membership
#: model:process.transition,name:membership.process_transition_waitingtoinvoice0
msgid "Waiting to invoice"
msgstr ""
msgstr "Ожидание счета"
#. module: membership
#: help:report.membership,date_to:0
@@ -94,7 +94,7 @@ msgstr ""
#. module: membership
#: view:res.partner:0
msgid "Suppliers"
msgstr ""
msgstr "Поставщики"
#. module: membership
#: view:res.partner:0
@@ -140,7 +140,7 @@ msgstr ""
#. module: membership
#: field:report.membership,num_invoiced:0
msgid "# Invoiced"
msgstr ""
msgstr "# выставленных счетов"
#. module: membership
#: model:ir.ui.menu,name:membership.menu_report_membership
@@ -161,7 +161,7 @@ msgstr "Дата с"
#: code:addons/membership/membership.py:414
#, python-format
msgid "Partner doesn't have an address to make the invoice."
msgstr ""
msgstr "Партнер не имеет адреса, чтобы выставить счет"
#. module: membership
#: model:ir.model,name:membership.model_res_partner
@@ -228,7 +228,7 @@ msgstr "Начало членства"
#: code:addons/membership/membership.py:413
#, python-format
msgid "Error !"
msgstr ""
msgstr "Ошибка !"
#. module: membership
#: model:process.node,name:membership.process_node_paidmember0
@@ -238,7 +238,7 @@ msgstr ""
#. module: membership
#: field:report.membership,num_waiting:0
msgid "# Waiting"
msgstr ""
msgstr "# Ожидающих"
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_members
@@ -262,7 +262,7 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "July"
msgstr ""
msgstr "Июль"
#. module: membership
#: model:product.template,name:membership.membership_0_product_template
@@ -296,7 +296,7 @@ msgstr ""
#. module: membership
#: view:membership.invoice:0
msgid "Join"
msgstr ""
msgstr "Присоединиться"
#. module: membership
#: help:product.product,membership_date_to:0
@@ -312,7 +312,7 @@ msgstr ""
#. module: membership
#: field:membership.membership_line,date:0
msgid "Join Date"
msgstr ""
msgstr "Дата вступления"
#. module: membership
#: help:res.partner,free_member:0
@@ -342,12 +342,12 @@ msgstr ""
#. module: membership
#: model:ir.model,name:membership.model_product_template
msgid "Product Template"
msgstr ""
msgstr "Шаблон ТМЦ"
#. module: membership
#: selection:report.membership,month:0
msgid "September"
msgstr ""
msgstr "Сентябрь"
#. module: membership
#: model:ir.module.module,description:membership.module_meta_information
@@ -369,7 +369,7 @@ msgstr ""
#. module: membership
#: model:ir.model,name:membership.model_account_invoice_line
msgid "Invoice Line"
msgstr ""
msgstr "Позиция счета"
#. module: membership
#: help:membership.membership_line,state:0
@@ -393,12 +393,12 @@ msgstr ""
#: view:report.membership:0
#: field:report.membership,month:0
msgid "Month"
msgstr ""
msgstr "Месяц"
#. module: membership
#: view:product.product:0
msgid "Group by..."
msgstr ""
msgstr "Объединять по..."
#. module: membership
#: code:addons/membership/membership.py:411
@@ -426,7 +426,7 @@ msgstr ""
#. module: membership
#: view:report.membership:0
msgid "Associated Partner"
msgstr ""
msgstr "Связанный контрагент"
#. module: membership
#: model:ir.model,name:membership.model_membership_invoice
@@ -439,7 +439,7 @@ msgstr ""
#: field:report.membership,user_id:0
#: view:res.partner:0
msgid "Salesman"
msgstr ""
msgstr "Менеджер продаж"
#. module: membership
#: model:process.node,note:membership.process_node_membershipproduct0
@@ -449,13 +449,13 @@ msgstr ""
#. module: membership
#: view:product.product:0
msgid "Category"
msgstr ""
msgstr "Категория"
#. module: membership
#: model:ir.model,name:membership.model_account_invoice
#: field:membership.membership_line,account_invoice_id:0
msgid "Invoice"
msgstr ""
msgstr "Счет"
#. module: membership
#: selection:membership.membership_line,state:0
@@ -474,26 +474,28 @@ msgstr ""
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
"Ошибка. ед. изм. по умолчанию и закупочные ед. изм. должны иметь одинаковую "
"категорию."
#. module: membership
#: view:report.membership:0
msgid "Forecast"
msgstr ""
msgstr "Прогноз"
#. module: membership
#: field:report.membership,partner_id:0
msgid "Member"
msgstr ""
msgstr "Участник"
#. module: membership
#: constraint:res.partner:0
msgid "Error ! You can not create recursive associated members."
msgstr ""
msgstr "Ошибка! Вы не можете создать рекурсивно связанных участников."
#. module: membership
#: view:product.product:0
msgid "Date From"
msgstr ""
msgstr "Дата с"
#. module: membership
#: model:process.node,name:membership.process_node_associatedmember0
@@ -513,12 +515,12 @@ msgstr "Дата отмены членства"
#. module: membership
#: view:res.partner:0
msgid "Customers"
msgstr ""
msgstr "Заказчики"
#. module: membership
#: selection:report.membership,month:0
msgid "August"
msgstr ""
msgstr "Август"
#. module: membership
#: model:ir.actions.act_window,name:membership.action_membership_products
@@ -530,7 +532,7 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "June"
msgstr ""
msgstr "Июнь"
#. module: membership
#: model:ir.module.module,shortdesc:membership.module_meta_information
@@ -571,12 +573,12 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "November"
msgstr ""
msgstr "Ноябрь"
#. module: membership
#: view:product.product:0
msgid "Extended Filters..."
msgstr ""
msgstr "Расширенные фильтры..."
#. module: membership
#: field:membership.membership_line,state:0
@@ -586,17 +588,17 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "October"
msgstr ""
msgstr "Октябрь"
#. module: membership
#: view:product.product:0
msgid "Sale Description"
msgstr ""
msgstr "Описание продажи"
#. module: membership
#: selection:report.membership,month:0
msgid "January"
msgstr ""
msgstr "Январь"
#. module: membership
#: view:product.product:0
@@ -645,37 +647,37 @@ msgstr ""
#. module: membership
#: view:report.membership:0
msgid "Last 365 Days"
msgstr ""
msgstr "Последние 365 дней"
#. module: membership
#: view:product.product:0
msgid "General"
msgstr ""
msgstr "Общие"
#. module: membership
#: model:process.transition,note:membership.process_transition_waitingtoinvoice0
msgid "Draft invoice is now open."
msgstr ""
msgstr "Черновик счета открыт."
#. module: membership
#: view:product.product:0
msgid "Inactive"
msgstr ""
msgstr "Неактивен"
#. module: membership
#: view:report.membership:0
msgid "Last 30 Days"
msgstr ""
msgstr "Последние 30 дней"
#. module: membership
#: selection:report.membership,month:0
msgid "December"
msgstr ""
msgstr "Декабрь"
#. module: membership
#: view:membership.invoice:0
msgid "Close"
msgstr ""
msgstr "Закрыть"
#. module: membership
#: view:res.partner:0
@@ -695,7 +697,7 @@ msgstr ""
#. module: membership
#: view:product.product:0
msgid "Categorization"
msgstr ""
msgstr "Категоризация"
#. module: membership
#: model:process.node,note:membership.process_node_waitingmember0
@@ -713,17 +715,17 @@ msgstr "Цена члена"
#. module: membership
#: view:product.product:0
msgid "Purchase Description"
msgstr ""
msgstr "Описание закупки"
#. module: membership
#: model:ir.model,name:membership.model_product_product
msgid "Product"
msgstr ""
msgstr "ТМЦ"
#. module: membership
#: view:product.product:0
msgid "Description"
msgstr ""
msgstr "Описание"
#. module: membership
#: field:res.partner,free_member:0
@@ -733,7 +735,7 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "May"
msgstr ""
msgstr "Май"
#. module: membership
#: model:product.template,name:membership.membership_1_product_template
@@ -743,18 +745,18 @@ msgstr ""
#. module: membership
#: view:product.product:0
msgid "Sale Taxes"
msgstr ""
msgstr "Налоги с продаж"
#. module: membership
#: field:report.membership,date_to:0
#: view:res.partner:0
msgid "End Date"
msgstr ""
msgstr "Дата окончания"
#. module: membership
#: selection:report.membership,month:0
msgid "February"
msgstr ""
msgstr "Февраль"
#. module: membership
#: model:process.node,name:membership.process_node_invoicedmember0
@@ -764,7 +766,7 @@ msgstr ""
#. module: membership
#: selection:report.membership,month:0
msgid "April"
msgstr ""
msgstr "Апрель"
#. module: membership
#: help:res.partner,membership_cancel:0
@@ -785,7 +787,7 @@ msgstr ""
#: field:report.membership,date_from:0
#: view:res.partner:0
msgid "Start Date"
msgstr ""
msgstr "Дата начала"
#. module: membership
#: model:process.node,name:membership.process_node_membershipproduct0
@@ -820,9 +822,6 @@ msgstr "Год"
msgid "Revenue Done"
msgstr ""
#~ msgid "You can not have 2 pricelist version that overlaps!"
#~ msgstr "Невозможно использовать 2 перекрывающиеся версии каталогов!"
#~ msgid "Currency"
#~ msgstr "Валюта"