diff --git a/addons/account/account.py b/addons/account/account.py
index 3133d102c66..37bf0fc2023 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -925,11 +925,11 @@ class account_move(osv.osv):
if not company_id:
company_id = line.account_id.company_id.id
if not company_id == line.account_id.company_id.id:
- raise osv.except_osv(_('Error'), _('Couldn\'t create move between different companies'))
+ raise osv.except_osv(_('Error'), _("Couldn't create move between different companies"))
if line.account_id.currency_id:
if line.account_id.currency_id.id != line.currency_id.id and (line.account_id.currency_id.id != line.account_id.company_id.currency_id.id or line.currency_id):
- raise osv.except_osv(_('Error'), _('Couldn\'t create move with currency different than the secondary currency of the account "%s - %s". Clear the secondary currency field of the account definition if you want to accept all currencies.' % (line.account_id.code, line.account_id.name)))
+ raise osv.except_osv(_('Error'), _("""Couldn't create move with currency different than the secondary currency of the account "%s - %s". Clear the secondary currency field of the account definition if you want to accept all currencies.""" % (line.account_id.code, line.account_id.name)))
if abs(amount) < 0.0001:
if not len(line_draft_ids):
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index 2b0a8aee54d..f1a1050cf81 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -492,6 +492,8 @@ class account_move_line(osv.osv):
#TODO: move this check to a constraint in the account_move_reconcile object
if len(r) != 1:
raise osv.except_osv(_('Error'), _('Entries are not of the same account or already reconciled ! '))
+ if not unrec_lines:
+ raise osv.except_osv(_('Error'), _('Entry is already reconciled'))
account = self.pool.get('account.account').browse(cr, uid, account_id, context=context)
if not account.reconcile:
raise osv.except_osv(_('Error'), _('The account is not defined to be reconcile !'))
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 9924fab10ec..012f63a4392 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -989,7 +989,7 @@
diff --git a/addons/account/i18n/account.pot b/addons/account/i18n/account.pot
index 8e759ccd488..c47d1c5d9db 100644
--- a/addons/account/i18n/account.pot
+++ b/addons/account/i18n/account.pot
@@ -4,16 +4,16 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: OpenERP Server 4.3.0"
-"Report-Msgid-Bugs-To: support@openerp.com"
-"POT-Creation-Date: 2008-09-11 15:45:09+0000"
-"PO-Revision-Date: 2008-09-11 15:45:09+0000"
-"Last-Translator: <>"
-"Language-Team: "
-"MIME-Version: 1.0"
-"Content-Type: text/plain; charset=UTF-8"
-"Content-Transfer-Encoding: "
-"Plural-Forms: "
+"Project-Id-Version: OpenERP Server 4.3.0\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2008-09-11 15:45:09+0000\n"
+"PO-Revision-Date: 2008-09-11 15:45:09+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
#. module: account
#, python-format
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/cs_CZ.po b/addons/account/i18n/cs_CZ.po
index be9d6428d05..b238142e695 100644
--- a/addons/account/i18n/cs_CZ.po
+++ b/addons/account/i18n/cs_CZ.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/de_DE.po b/addons/account/i18n/de_DE.po
index d3fb0d5093f..9fe64521a46 100644
--- a/addons/account/i18n/de_DE.po
+++ b/addons/account/i18n/de_DE.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/es_AR.po b/addons/account/i18n/es_AR.po
index 07e63aa5bb2..8a75f1ad15a 100644
--- a/addons/account/i18n/es_AR.po
+++ b/addons/account/i18n/es_AR.po
@@ -3915,7 +3915,7 @@ msgstr "Días netos"
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/es_ES.po b/addons/account/i18n/es_ES.po
index ec4dd8938aa..13b77686fd4 100644
--- a/addons/account/i18n/es_ES.po
+++ b/addons/account/i18n/es_ES.po
@@ -3915,7 +3915,7 @@ msgstr "Dias habiles(netos)"
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/fr_FR.po b/addons/account/i18n/fr_FR.po
index b50eb74671e..401f31fbff5 100644
--- a/addons/account/i18n/fr_FR.po
+++ b/addons/account/i18n/fr_FR.po
@@ -19,7 +19,7 @@ msgstr ""
#, python-format
#: code:addons/account/account.py:0
msgid "Integrity Error !"
-msgstr ""
+msgstr "Erreur d'intégrité référentielle !"
#. module: account
#: view:account.move:0
@@ -61,7 +61,7 @@ msgstr "Actif (avoirs)"
#, python-format
#: code:addons/account/wizard/wizard_validate_account_move.py:0
msgid "Specified Journal does not have any account move entries in draft state for this period"
-msgstr ""
+msgstr "Le journal spécifié ne possède pas d'entrée de mouvements de compte à l'état brouillon pour cette période"
#. module: account
#: selection:account.tax,tax_group:0
@@ -94,12 +94,12 @@ msgstr "Nouvelle facture client"
#. module: account
#: view:account.account:0
msgid "Account Statistics"
-msgstr ""
+msgstr "Statistiques du Compte"
#. module: account
#: wizard_field:account.general.ledger.report,checktype,date_from:0
msgid " Start date"
-msgstr ""
+msgstr " Date de Début"
#. module: account
#: field:account.account,parent_id:0
@@ -111,17 +111,17 @@ msgstr "Parent"
#, python-format
#: code:addons/account/account_bank_statement.py:0
msgid "Account move line \"%s\" is not valid"
-msgstr ""
+msgstr "La ligne de mouvement de Compte \"%s\" n'est pas valide"
#. module: account
#: field:account.invoice,residual:0
msgid "Residual"
-msgstr ""
+msgstr "Résiduelle"
#. module: account
#: wizard_field:account.general.ledger.report,checktype,sortbydate:0
msgid "Sort by:"
-msgstr ""
+msgstr "Trier par :"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_unreconcile_select
@@ -169,13 +169,13 @@ msgstr "UdM"
#. module: account
#: rml:account.account.balance:0
msgid "Account Balance -"
-msgstr ""
+msgstr "Balance de Compte -"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_general_journal
#: model:ir.ui.menu,name:account.menu_general_journal
msgid "Print General journal"
-msgstr ""
+msgstr "Imprimer le journal Général"
#. module: account
#: rml:account.third_party_ledger:0
@@ -192,7 +192,7 @@ msgstr "Modèle d'écriture comptable"
#. module: account
#: model:account.journal,name:account.expenses_journal
msgid "x Expenses Journal"
-msgstr ""
+msgstr "Journal de Dépense x"
#. module: account
#: view:account.tax.template:0
@@ -204,7 +204,7 @@ msgstr "Code de Calcul (si type=code)"
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "You have to provide an account for the write off entry !"
-msgstr ""
+msgstr "Vous devez fournir un compte pour les Pertes et Profits !"
#. module: account
#: view:account.move:0
@@ -220,7 +220,7 @@ msgstr "Echéancier"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries
msgid "Recurrent Entries"
-msgstr ""
+msgstr "Entrées Récurrentes"
#. module: account
#: rml:account.invoice:0
@@ -240,7 +240,7 @@ msgstr "Montant"
#: model:ir.actions.wizard,name:account.wizard_third_party_ledger
#: model:ir.ui.menu,name:account.menu_third_party_ledger
msgid "Partner Ledger"
-msgstr ""
+msgstr "Registre Partenaire"
#. module: account
#: field:product.template,supplier_taxes_id:0
@@ -250,17 +250,17 @@ msgstr "Taxes fournisseurs"
#. module: account
#: model:process.transition,name:account.process_transition_entriesreconcile0
msgid "Entries Reconcile"
-msgstr ""
+msgstr "Réconciliation des Entrées"
#. module: account
#: rml:account.tax.code.entries:0
msgid "Accounting Entries-"
-msgstr ""
+msgstr "Entrées Comptables-"
#. module: account
#: rml:account.vat.declaration:0
msgid "Tax Report"
-msgstr "Taxes Statement"
+msgstr "Rapport de Taxes"
#. module: account
#: selection:account.tax.template,type:0
@@ -272,12 +272,12 @@ msgstr "Fixe"
#, python-format
#: code:addons/account/invoice.py:0
msgid "Warning !"
-msgstr ""
+msgstr "Avertissement !"
#. module: account
#: rml:account.invoice:0
msgid "Partner Code"
-msgstr ""
+msgstr "Code Partenaire"
#. module: account
#: wizard_view:account.analytic.account.analytic.check.report,init:0
@@ -320,12 +320,12 @@ msgstr "Calcul de la souscription"
#. module: account
#: rml:account.analytic.account.analytic.check:0
msgid "Delta Credit"
-msgstr ""
+msgstr "Différence de Crédit"
#. module: account
#: rml:account.analytic.account.analytic.check:0
msgid "Delta Debit"
-msgstr ""
+msgstr "Différence de Débit"
#. module: account
#: rml:account.invoice:0
@@ -337,7 +337,7 @@ msgstr "Impôts et taxes"
#. module: account
#: rml:account.general.journal:0
msgid "Debit Trans."
-msgstr ""
+msgstr "Trans. Débit"
#. module: account
#: field:account.analytic.line,account_id:0
@@ -372,7 +372,7 @@ msgstr "Partenaire"
#. module: account
#: field:account.fiscal.position.account,account_src_id:0
msgid "Account Source"
-msgstr ""
+msgstr "Source du Compte"
#. module: account
#: field:account.journal,update_posted:0
@@ -383,7 +383,7 @@ msgstr "Autoriser l'annulation des entrées"
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "Wrong Accounting Entry!"
-msgstr ""
+msgstr "Entrée du Compte Incorrecte !"
#. module: account
#: model:ir.actions.act_window,name:account.act_acc_analytic_acc_5_report_hr_timesheet_invoice_journal
@@ -403,7 +403,7 @@ msgstr "Rem. (%)"
#. module: account
#: selection:account.account.type,sign:0
msgid "Negative"
-msgstr ""
+msgstr "Négative"
#. module: account
#: field:account.analytic.line,move_id:0
@@ -428,7 +428,7 @@ msgstr "État"
#. module: account
#: model:process.node,name:account.process_node_reconciliationofentries0
msgid "Reconciliation of Entries"
-msgstr ""
+msgstr "Réconciliation des Entrées"
#. module: account
#: help:account.tax,base_code_id:0
@@ -451,7 +451,7 @@ msgstr "Calcul particulier"
#. module: account
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
msgid "Confirm statement with/without reconciliation from draft statement"
-msgstr ""
+msgstr "Confirmez la déclaration avec/sans réconciliation de la déclaration brouillon"
#. module: account
#: wizard_view:account.move.bank.reconcile,init:0
@@ -471,7 +471,7 @@ msgstr "Réf"
#. module: account
#: wizard_view:account.analytic.line,init:0
msgid "View Account Analytic Lines"
-msgstr ""
+msgstr "Voir les Lignes de Compte Analytique"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing
@@ -487,7 +487,7 @@ msgstr "Stats des entrées analytiques"
#: model:ir.actions.act_window,name:account.action_account_tax_code_template_form
#: model:ir.ui.menu,name:account.menu_action_account_tax_code_template_form
msgid "Tax Code Templates"
-msgstr ""
+msgstr "Modèles de Code de Taxe"
#. module: account
#: view:account.invoice:0
@@ -497,13 +497,13 @@ msgstr "Facture fournisseur"
#. module: account
#: model:process.transition,name:account.process_transition_reconcilepaid0
msgid "Reconcile Paid"
-msgstr ""
+msgstr "Réconcilier les Payés"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tax_template_form
#: model:ir.ui.menu,name:account.menu_action_account_tax_template_form
msgid "Tax Templates"
-msgstr ""
+msgstr "Modèles de taxe"
#. module: account
#: field:account.invoice,reconciled:0
@@ -524,7 +524,7 @@ msgstr "Cette condition de paiement sera utilisée, au lieu de celle par défaut
#: field:account.tax,ref_base_code_id:0
#: field:account.tax.template,ref_base_code_id:0
msgid "Refund Base Code"
-msgstr ""
+msgstr "Code de Base des Notes de Crédit"
#. module: account
#: view:account.invoice.line:0
@@ -550,19 +550,19 @@ msgstr ""
#. module: account
#: rml:account.general.ledger:0
msgid "Mvt"
-msgstr ""
+msgstr "Mvt"
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "You can not use this general account in this journal !"
-msgstr ""
+msgstr "Vous ne pouvez pas utiliser le compte général dans ce journal !"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_aged_trial_balance
#: model:ir.ui.menu,name:account.menu_aged_trial_balance
msgid "Aged Partner Balance"
-msgstr ""
+msgstr "Échéancier Partenaite"
#. module: account
#: view:account.journal:0
@@ -578,7 +578,7 @@ msgstr "# de transactions"
#. module: account
#: wizard_view:account.analytic.line,init:0
msgid "(Keep empty to open the current situation)"
-msgstr ""
+msgstr "(Laisser vide pour ouvrir la situation actuelle)"
#. module: account
#: model:ir.model,name:account.model_account_fiscal_position_account
@@ -588,7 +588,7 @@ msgstr ""
#. module: account
#: model:account.journal,name:account.sales_journal
msgid "x Sales Journal"
-msgstr ""
+msgstr "Journal des Ventes x"
#. module: account
#: field:account.analytic.account,contact_id:0
@@ -599,7 +599,7 @@ msgstr "Contact"
#, python-format
#: code:addons/account/account.py:0
msgid "You can not validate a non balanced entry !"
-msgstr ""
+msgstr "Vous ne pouvez pas valider une entrée non équilibrée !"
#. module: account
#: selection:account.model.line,date:0
@@ -638,13 +638,15 @@ msgstr "Début de la période"
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "You can not add/modify entries in a closed journal."
-msgstr ""
+msgstr "Vous ne pouvez pas ajouter/modifier d'entrées dans un journal fermé."
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "You can not do this modification on a reconciled entry ! Please note that you can just change some non important fields !"
msgstr ""
+"Vous ne pouvez pas effectuer cette modification dans une entrée réconciliée ! Veuillez "
+"noter que vous pouvez quand même changer certains champs non importants !"
#. module: account
#: view:account.bank.statement:0
@@ -655,7 +657,7 @@ msgstr "Sélectionner entrées"
#: wizard_field:account.move.line.reconcile,init_partial,writeoff:0
#: wizard_field:account.move.line.reconcile,init_full,writeoff:0
msgid "Write-Off amount"
-msgstr ""
+msgstr "Montant des Pertes et Profits"
#. module: account
#: field:account.analytic.account,child_ids:0
@@ -681,13 +683,13 @@ msgstr "Ce compte sera utilisé, au lieu de celui par defaut, pour valoriser les
#. module: account
#: wizard_button:populate_statement_from_inv,init,customer:0
msgid "_Customer invoices"
-msgstr ""
+msgstr "Factures _Clients"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
msgid "You must first select a partner !"
-msgstr ""
+msgstr "Vous devez sélectionner un partenaire !"
#. module: account
#: selection:account.invoice,type:0
@@ -702,7 +704,7 @@ msgstr ""
#. module: account
#: wizard_view:populate_statement_from_inv,init:0
msgid "Import invoices in statement"
-msgstr ""
+msgstr "Importer les factures dans la déclaration"
#. module: account
#: field:account.tax,ref_tax_sign:0
@@ -736,7 +738,7 @@ msgstr "Signe pour le parent"
#. module: account
#: model:process.transition.action,name:account.process_transition_action_createentries0
msgid "Create entry"
-msgstr ""
+msgstr "Créer une entrée"
#. module: account
#: field:account.fiscalyear,end_journal_period_id:0
@@ -746,7 +748,7 @@ msgstr "Journal des Traitements de fin d'année"
#. module: account
#: model:process.transition,name:account.process_transition_accountentryreconcile0
msgid "Account entry reconcile"
-msgstr ""
+msgstr "Réconciliation des entrées de Compte"
#. module: account
#: help:res.partner,property_account_payable:0
@@ -768,7 +770,7 @@ msgstr "Codes de taxe"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_populate_statement_from_inv
msgid "Import invoices"
-msgstr ""
+msgstr "Import de factures"
#. module: account
#: wizard_view:account_use_models,create:0
@@ -794,7 +796,7 @@ msgstr "Compte de taxe enfant"
#: rml:account.analytic.account.cost_ledger:0
#: rml:account.analytic.account.quantity_cost_ledger:0
msgid "Period to"
-msgstr ""
+msgstr "Période au"
#. module: account
#: field:account.account.type,partner_account:0
@@ -818,13 +820,13 @@ msgstr "Grand livre analytique"
#: wizard_view:account.partner.balance.report,init:0
#: wizard_view:account.third_party_ledger.report,init:0
msgid "(Keep empty for all open fiscal years)"
-msgstr ""
+msgstr "(Laisser vide pour ouvrir toutes les années fiscales ouvertes)"
#. module: account
#: field:account.invoice,move_lines:0
#: view:account.move.line:0
msgid "Move Lines"
-msgstr ""
+msgstr "Lignes de Mouvement"
#. module: account
#: model:ir.model,name:account.model_account_config_wizard
@@ -870,7 +872,7 @@ msgstr "Comptes analytiques"
#: model:ir.actions.wizard,name:account.wizard_print_journal
#: model:ir.ui.menu,name:account.menu_print_journal
msgid "Print Journal"
-msgstr ""
+msgstr "Imprimer le Journal"
#. module: account
#: model:ir.model,name:account.model_account_bank_accounts_wizard
@@ -898,13 +900,13 @@ msgstr "Compte de dépenses"
#: model:ir.actions.act_window,name:account.action_account_fiscal_position_form
#: model:ir.ui.menu,name:account.menu_action_account_fiscal_position_form
msgid "Fiscal Positions"
-msgstr ""
+msgstr "Positions Fiscales"
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "Both Credit and Debit cannot be zero!"
-msgstr ""
+msgstr "Ni le Crédit, ni le Débit ne peuvent être égal à zéro !"
#. module: account
#: help:account.journal,currency:0
@@ -919,7 +921,7 @@ msgstr "Année Fiscal à ouvrir"
#. module: account
#: view:account.config.wizard:0
msgid "Select Chart of Accounts"
-msgstr ""
+msgstr "Sélectionnez le Plan de Comptes"
#. module: account
#: model:ir.actions.wizard,name:account.wizard_open_closed_fiscalyear
@@ -955,12 +957,12 @@ msgstr "Compte de débit par défaut"
#: model:ir.actions.act_window,name:account.action_bank_statement_tree
#: model:ir.ui.menu,name:account.menu_bank_statement_tree
msgid "Entries by Statements"
-msgstr ""
+msgstr "Entrées par Relevé"
#. module: account
#: model:process.transition,name:account.process_transition_analyticinvoice0
msgid "analytic Invoice"
-msgstr ""
+msgstr "Facture analytique"
#. module: account
#: rml:account.general.journal:0
@@ -979,7 +981,7 @@ msgstr ""
#: view:account.fiscalyear:0
#: view:account.period:0
msgid "Period"
-msgstr "Période"
+msgstr "Période au"
#. module: account
#: rml:account.partner.balance:0
@@ -994,7 +996,7 @@ msgstr "Comptabilité Financière"
#. module: account
#: rml:account.invoice:0
msgid "Net Total:"
-msgstr ""
+msgstr "Total Net :"
#. module: account
#: help:account.journal,view_id:0
@@ -1009,23 +1011,23 @@ msgstr "Donne la vue utilisée lors de l'écriture ou la navigation dans ce jour
#: field:res.partner,property_account_position:0
#: view:account.fiscal.position:0
msgid "Fiscal Position"
-msgstr ""
+msgstr "Position Fiscale"
#. module: account
#: field:account.config.wizard,charts:0
msgid "Charts of Account"
-msgstr ""
+msgstr "Plans de Compte"
#. module: account
#: view:product.product:0
#: view:product.template:0
msgid "Purchases Properties"
-msgstr ""
+msgstr "Propriétés des Achats"
#. module: account
#: wizard_field:account.third_party_ledger.report,init,page_split:0
msgid "One Partner Per Page"
-msgstr ""
+msgstr "Un Partenaire par Page"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_analytic_line_form
@@ -1053,7 +1055,7 @@ msgstr "Montant payé"
#. module: account
#: selection:account.account.type,sign:0
msgid "Positive"
-msgstr ""
+msgstr "Positif"
#. module: account
#: wizard_view:account.open_closed_fiscalyear,init:0
@@ -1075,7 +1077,7 @@ msgstr "Ligne de facture"
#: field:account.tax.template,chart_template_id:0
#: field:wizard.multi.charts.accounts,chart_template_id:0
msgid "Chart Template"
-msgstr ""
+msgstr "Modèle de Plan"
#. module: account
#: field:account.bank.statement.reconcile,total_new:0
@@ -1085,7 +1087,7 @@ msgstr "Total des ajustements"
#. module: account
#: view:account.tax.template:0
msgid "Compute Code for Taxes included prices"
-msgstr ""
+msgstr "Calculer le Code pour les Prix Taxes Inclus"
#. module: account
#: help:account.payment.term.line,sequence:0
@@ -1157,17 +1159,17 @@ msgstr "Compte banquaire"
#. module: account
#: wizard_field:account.general.ledger.report,checktype,amount_currency:0
msgid "With Currency"
-msgstr ""
+msgstr "Avec Devise"
#. module: account
#: model:process.transition,name:account.process_transition_invoiceimport0
msgid "Invoice import"
-msgstr ""
+msgstr "Importation de Factures"
#. module: account
#: rml:account.invoice:0
msgid "Tel. :"
-msgstr ""
+msgstr "Tél. :"
#. module: account
#: field:account.tax.code,sum_period:0
@@ -1182,12 +1184,17 @@ msgstr "Devise société"
#. module: account
#: help:account.journal,entry_posted:0
msgid "Check this box if you don't want that new account moves pass through the 'draft' state and goes direclty to the 'posted state' without any manual validation."
-msgstr "Cochez cette case si vous ne voulez pas que les nouveaux mouvements de comptes passent par l'état 'Brouillon' et se retrouvent directement dans l'état 'Transféré' sans validation manuelle."
+msgstr ""
+"Cochez cette case si vous ne voulez pas que les nouveaux mouvements de comptes "
+"passent par l'état 'Brouillon' et se retrouvent directement dans "
+"l'état 'Transféré' sans validation manuelle."
#. module: account
#: help:account.payment.term.line,days2:0
msgid "Day of the month, set -1 for the last day of the current month. If it's positive, it gives the day of the next month. Set 0 for net days (otherwise it's based on the end of the month)."
msgstr ""
+"Jour du mois, mettre -1 pour le dernier jour du mois courant. S'il est positif, il donne "
+"le jour du mois suivant. Mettre 0 pour les jours nets (sinon, se base sur la fin du mois)"
#. module: account
#: model:ir.actions.act_window,name:account.action_invoice_tree7
@@ -1203,18 +1210,18 @@ msgstr ""
#. module: account
#: wizard_button:account.move.line.reconcile,init_partial,addendum:0
msgid "Reconcile With Write-Off"
-msgstr ""
+msgstr "Réconcilier avec Pertes et Profits"
#. module: account
#, python-format
#: code:addons/account/account_bank_statement.py:0
msgid "The expected balance (%.2f) is different than the computed one. (%.2f)"
-msgstr ""
+msgstr "La balance attendue (%.2f) est différente de la balance calculée. (%.2f)"
#. module: account
#: help:wizard.multi.charts.accounts,code_digits:0
msgid "No. of Digits to use for account code"
-msgstr ""
+msgstr "No. de Chiffres à utiliser pour le code de compte"
#. module: account
#: help:account.account.type,sequence:0
@@ -1255,7 +1262,7 @@ msgstr "Transaction non réconciliées"
#. module: account
#: view:account.config.wizard:0
msgid "Continue"
-msgstr ""
+msgstr "Continuer"
#. module: account
#: field:account.payment.term.line,value:0
@@ -1304,7 +1311,7 @@ msgstr "Lignes analytiques"
#. module: account
#: wizard_field:account.third_party_ledger.report,init,reconcil:0
msgid " Include Reconciled Entries"
-msgstr ""
+msgstr " Inclure les Entrées Réconciliées"
#. module: account
#: wizard_view:account.reconcile.unreconcile,init:0
@@ -1315,7 +1322,7 @@ msgstr "Si vous déreconciliez des transactions, vous devez aussi vérifier tout
#. module: account
#: field:wizard.multi.charts.accounts,bank_accounts_id:0
msgid "Bank Accounts"
-msgstr ""
+msgstr "Comptes Banquaires"
#. module: account
#: view:res.partner:0
@@ -1336,13 +1343,13 @@ msgstr "Types de compte"
#. module: account
#: model:ir.model,name:account.model_account_tax_code_template
msgid "Tax Code Template"
-msgstr ""
+msgstr "Modèle de Code de Taxe"
#. module: account
#: field:account.fiscal.position,tax_ids:0
#: view:account.fiscal.position:0
msgid "Taxes Mapping"
-msgstr ""
+msgstr "Associations des Taxes"
#. module: account
#: wizard_view:account.automatic.reconcile,init:0
@@ -1363,12 +1370,12 @@ msgstr "Créer entrées"
#: wizard_field:account.account.balance.report,checktype,display_account:0
#: wizard_field:account.general.ledger.report,checktype,display_account:0
msgid "Display accounts "
-msgstr ""
+msgstr "Afficher les Comptes"
#. module: account
#: field:account.chart.template,property_account_receivable:0
msgid "Receivable Account"
-msgstr ""
+msgstr "Compte Recevable"
#. module: account
#: wizard_view:account.move.line.reconcile,init_partial:0
@@ -1376,12 +1383,12 @@ msgstr ""
#: field:account.bank.statement.reconcile,line_new_ids:0
#: view:account.bank.statement.reconcile:0
msgid "Write-Off"
-msgstr ""
+msgstr "Pertes et Profits"
#. module: account
#: field:account.chart.template,tax_template_ids:0
msgid "Tax Template List"
-msgstr ""
+msgstr "Liste des Modèles de Taxes"
#. module: account
#: field:account.analytic.account,date:0
@@ -1391,7 +1398,7 @@ msgstr "Date de fin"
#. module: account
#: wizard_field:account.third_party_ledger.report,init,date1:0
msgid " Start date"
-msgstr ""
+msgstr " date de Début"
#. module: account
#: view:account.subscription:0
@@ -1407,7 +1414,7 @@ msgstr "Adresse du contact"
#: rml:account.partner.balance:0
#: rml:account.vat.declaration:0
msgid "Crédit"
-msgstr ""
+msgstr "Crédit"
#. module: account
#: model:account.account.type,name:account.account_type_income
@@ -1427,7 +1434,7 @@ msgstr "Creer periodes par trimestre"
#. module: account
#: wizard_view:account.general.journal.report,init:0
msgid "Print General Journal"
-msgstr ""
+msgstr "Imprimer le Journal Général"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_chart_template_form
@@ -1445,18 +1452,18 @@ msgstr "Transactions"
#: model:ir.ui.menu,name:account.menu_wizard
#: view:wizard.multi.charts.accounts:0
msgid "Generate Chart of Accounts from a Chart Template"
-msgstr ""
+msgstr "Générer le Plan des Comptes à partir du Modèle de Plan"
#. module: account
#, python-format
#: code:addons/account/account_bank_statement.py:0
msgid "The statement balance is incorrect !\n"
-msgstr ""
+msgstr "La balance du relevé est incorrecte !\n"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_legal_statement
msgid "Legal Statements"
-msgstr ""
+msgstr "Déclarations Légales"
#. module: account
#: field:account.tax.code,parent_id:0
@@ -1478,7 +1485,7 @@ msgstr "Ouvrir pour réconciliation"
#, python-format
#: code:addons/account/account.py:0
msgid "Purchase Journal"
-msgstr ""
+msgstr "Journal des Achats"
#. module: account
#: selection:account.tax,tax_group:0
@@ -1564,7 +1571,7 @@ msgstr "Type de comptes autorisés (vide pour aucun contrôle)"
#. module: account
#: model:process.node,name:account.process_node_electronicfile0
msgid "Electronic File"
-msgstr ""
+msgstr "Fichier Électronique"
#. module: account
#: field:account.bank.statement,balance_start:0
@@ -1575,7 +1582,7 @@ msgstr "Solde de début"
#, python-format
#: code:addons/account/invoice.py:0
msgid "No Partner Defined !"
-msgstr ""
+msgstr "Aucun Partenaire défini !"
#. module: account
#: field:account.tax,child_depend:0
@@ -1599,7 +1606,7 @@ msgstr "Déréconciliation"
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
#: code:addons/account/wizard/wizard_journal.py:0
msgid "UserError"
-msgstr ""
+msgstr "Erreur Utilisateur"
#. module: account
#: field:account.invoice,address_invoice_id:0
@@ -1624,7 +1631,7 @@ msgstr "TVA:"
#. module: account
#: wizard_button:populate_statement_from_inv,init,supplier:0
msgid "_Supplier invoices"
-msgstr ""
+msgstr "_Factures Fournisseur"
#. module: account
#: field:account.invoice,period_id:0
@@ -1645,7 +1652,7 @@ msgstr "Ré-Ouvrir"
#. module: account
#: help:account.invoice,number:0
msgid "Uniq number of the invoice, computed automatically when the invoice is created."
-msgstr ""
+msgstr "Nombre unique de la facture, calculé automatiquement lorsque la facture est créée."
#. module: account
#: rml:account.tax.code.entries:0
@@ -1657,12 +1664,12 @@ msgstr "Tiers (pays)"
#: wizard_button:populate_statement_from_inv,supplier,end:0
#: wizard_button:populate_statement_from_inv,init,end:0
msgid "_Cancel"
-msgstr ""
+msgstr "_Annuler"
#. module: account
#: rml:account.central.journal:0
msgid "Account Num."
-msgstr ""
+msgstr "Num. de Compte"
#. module: account
#: selection:account.analytic.account,state:0
@@ -1685,12 +1692,12 @@ msgstr "Grand Livre par période"
#. module: account
#: wizard_field:account.analytic.line,init,from_date:0
msgid "From"
-msgstr ""
+msgstr "De"
#. module: account
#: wizard_view:account.central.journal.report,init:0
msgid "Print Central Journal"
-msgstr ""
+msgstr "Imprimer le Journal Central"
#. module: account
#: field:account.analytic.account,code:0
@@ -1700,7 +1707,7 @@ msgstr "Code du compte"
#. module: account
#: model:process.node,note:account.process_node_accountingstatemententries0
msgid "Accounting entries can be draft or validated"
-msgstr ""
+msgstr "Les entrées Comptable peuvent être brouillon ou validée"
#. module: account
#: selection:account.payment.term.line,value:0
@@ -1728,7 +1735,7 @@ msgstr "Journal des ajustements"
#. module: account
#: help:res.partner,property_account_position:0
msgid "The fiscal position will determine taxes and the accounts used for the the partner."
-msgstr ""
+msgstr "La position fiscale détermine les taxes et les comptes utilisés pour le partenaire."
#. module: account
#: field:account.analytic.account,user_id:0
@@ -1739,7 +1746,7 @@ msgstr "Comptable"
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "Entries are not of the same account or already reconciled ! "
-msgstr ""
+msgstr "Les Entrées ne sont pas du même compte ou sont déjà réconciliées !"
#. module: account
#: wizard_field:account.invoice.pay,init,date:0
@@ -1849,28 +1856,28 @@ msgstr "Code Python"
#. module: account
#: help:account.invoice,reference:0
msgid "The partner reference of this invoice."
-msgstr ""
+msgstr "La référence Partenaire de cette facture."
#. module: account
#: rml:account.analytic.account.cost_ledger:0
msgid "Total :"
-msgstr ""
+msgstr "Total :"
#. module: account
#: field:account.move,to_check:0
msgid "To Be Verified"
-msgstr ""
+msgstr "À Vérifier"
#. module: account
#: help:res.partner,credit:0
msgid "Total amount this customer owns you."
-msgstr ""
+msgstr "Montant total dû par ce client."
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
msgid "Invalid action !"
-msgstr ""
+msgstr "Action non valide !"
#. module: account
#: model:ir.actions.report.xml,name:account.account_transfers
@@ -1893,7 +1900,7 @@ msgstr "Nom du Journal"
#: rml:account.analytic.account.cost_ledger:0
#: rml:account.analytic.account.quantity_cost_ledger:0
msgid "Printing date"
-msgstr ""
+msgstr "Date d'impression"
#. module: account
#: selection:account.account.type,close_method:0
@@ -1906,7 +1913,7 @@ msgstr "Aucun"
#: wizard_field:account.account.balance.report,checktype,date_from:0
#: wizard_field:account.partner.balance.report,init,date1:0
msgid " Start date"
-msgstr ""
+msgstr " date de Début"
#. module: account
#: wizard_view:account.analytic.account.journal.report,init:0
@@ -1938,7 +1945,7 @@ msgstr "Nom de la période du journal"
#, python-format
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
msgid "There are no periods defined on New Fiscal Year."
-msgstr ""
+msgstr "Il n'y a pas de périodes définies sur la Nouvelle Année Fiscale."
#. module: account
#: field:account.tax.code,name:0
@@ -2010,7 +2017,7 @@ msgstr "Factures impayées"
#. module: account
#: model:process.transition,name:account.process_transition_paymentreconcile0
msgid "Payment Reconcile"
-msgstr ""
+msgstr "Réconciliation du Paiement"
#. module: account
#: model:ir.actions.act_window,name:account.action_bank_statement_reconciliation_form
@@ -2038,7 +2045,7 @@ msgstr "Centre de coût parent"
#, python-format
#: code:addons/account/account.py:0
msgid "You can not modify a posted entry of this journal !"
-msgstr ""
+msgstr "Vous ne pouvez pas modifier une entrée postée de ce journal !"
#. module: account
#: view:account.analytic.line:0
@@ -2048,7 +2055,7 @@ msgstr "Entrée analytique"
#. module: account
#: model:process.node,note:account.process_node_accountingentries0
msgid "Validated accounting entries."
-msgstr ""
+msgstr "Entrées comptables Validées."
#. module: account
#: model:ir.actions.act_window,name:account.action_tax_code_tree
@@ -2111,7 +2118,7 @@ msgstr "Compte Racine"
#, python-format
#: code:addons/account/account_bank_statement.py:0
msgid "Configration Error !"
-msgstr ""
+msgstr "Erreur de Configuration !"
#. module: account
#: rml:account.overdue:0
@@ -2121,13 +2128,13 @@ msgstr "Sauf erreur de notre part, il semble que les factures suivantes demeuren
#. module: account
#: rml:account.invoice:0
msgid "VAT :"
-msgstr ""
+msgstr "TVA :"
#. module: account
#: rml:account.partner.balance:0
#: rml:account.vat.declaration:0
msgid "Débit"
-msgstr ""
+msgstr "Débit"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_tree
@@ -2148,7 +2155,7 @@ msgstr "Modèle"
#, python-format
#: code:addons/account/wizard/wizard_pay_invoice.py:0
msgid "Your journal must have a default credit and debit account."
-msgstr ""
+msgstr "Votre journal doit avoir un compte de crédit et de débit par défaut."
#. module: account
#: rml:account.overdue:0
@@ -2163,13 +2170,13 @@ msgstr "Centralisation"
#. module: account
#: view:account.config.wizard:0
msgid "Create a Fiscal Year"
-msgstr ""
+msgstr "Créer une Année Fiscale"
#. module: account
#: selection:account.account.template,type:0
#: selection:account.account,type:0
msgid "Consolidation"
-msgstr ""
+msgstr "Consolidation"
#. module: account
#: field:account.invoice,date_invoice:0
@@ -2179,7 +2186,7 @@ msgstr "Date facture"
#. module: account
#: model:account.account.type,name:account.account_type_liability
msgid "Liability"
-msgstr ""
+msgstr "Passif"
#. module: account
#: rml:account.third_party_ledger:0
@@ -2201,7 +2208,7 @@ msgstr "Date"
#. module: account
#: model:process.transition,name:account.process_transition_confirmaccountingentries0
msgid "Confirm Accounting entries"
-msgstr ""
+msgstr "Confirmer les entrées Comptables"
#. module: account
#: field:account.invoice,reference_type:0
@@ -2223,13 +2230,13 @@ msgstr "Type de Taxe"
#. module: account
#: model:process.transition,name:account.process_transition_statemententries0
msgid "Statement Entries"
-msgstr ""
+msgstr "Entrées de la Déclaration"
#. module: account
#, python-format
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
msgid "The journal must have default credit and debit account"
-msgstr ""
+msgstr "Le journal doit avoir un compte de crédit et de débit par défaut"
#. module: account
#: field:account.invoice.tax,base_code_id:0
@@ -2258,13 +2265,13 @@ msgstr "Réconciliation automatique"
#. module: account
#: view:account.bank.statement:0
msgid "Import Invoice"
-msgstr ""
+msgstr "Importer la Facture"
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "Some entries are already reconciled !"
-msgstr ""
+msgstr "Certaines entrées sont déjà réconciliées !"
#. module: account
#: model:process.node,note:account.process_node_reconciliationofentries0
@@ -2308,7 +2315,7 @@ msgstr ""
#. module: account
#: rml:account.central.journal:0
msgid "Journal Code"
-msgstr ""
+msgstr "Code du Journal"
#. module: account
#: field:account.model,lines_id:0
@@ -2349,13 +2356,13 @@ msgstr "Écritures"
#: model:ir.actions.wizard,name:account.wizard_central_journal
#: model:ir.ui.menu,name:account.menu_central_journal
msgid "Print Central journal"
-msgstr ""
+msgstr "Imprimer le Journal Central"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
msgid "No Analytic Journal !"
-msgstr ""
+msgstr "Pas de Journal Analytique !"
#. module: account
#: view:account.tax.template:0
@@ -2371,7 +2378,7 @@ msgstr "Ouvrir journal"
#. module: account
#: rml:account.vat.declaration:0
msgid "Solde"
-msgstr ""
+msgstr "Solde"
#. module: account
#: model:ir.actions.wizard,name:account.action_account_analytic_line
@@ -2406,7 +2413,7 @@ msgstr "Informations supplémentaires"
#. module: account
#: field:account.config.wizard,date2:0
msgid "Ending Date"
-msgstr ""
+msgstr "Date de Fin"
#. module: account
#: wizard_field:account.account.balance.report,checktype,fiscalyear:0
@@ -2420,7 +2427,7 @@ msgstr "Année fiscale"
#. module: account
#: wizard_field:account.general.ledger.report,checktype,landscape:0
msgid "Landscape Mode"
-msgstr ""
+msgstr "Mode Paysage"
#. module: account
#: model:process.transition,note:account.process_transition_analyticinvoice0
@@ -2487,7 +2494,7 @@ msgstr "Intitulé"
#: selection:account.account.template,type:0
#: selection:account.account,type:0
msgid "Receivable"
-msgstr ""
+msgstr "Recevable"
#. module: account
#: wizard_view:account.move.validate,init:0
@@ -2499,7 +2506,7 @@ msgstr "Information"
#. module: account
#: model:ir.ui.menu,name:account.menu_tax_report
msgid "Taxes Reports"
-msgstr ""
+msgstr "Rapports de Taxes"
#. module: account
#: field:res.partner,property_account_payable:0
@@ -2535,7 +2542,7 @@ msgstr "Le champ sequence est utilisé pour classer les lignes de taxes des plu
#, python-format
#: code:addons/account/account_move_line.py:0
msgid "Already Reconciled"
-msgstr ""
+msgstr "Déjà Réconciliées"
#. module: account
#: rml:account.analytic.account.journal:0
@@ -2564,7 +2571,7 @@ msgstr "En litige"
#, python-format
#: code:addons/account/account.py:0
msgid "No fiscal year defined for this date !\nPlease create one."
-msgstr ""
+msgstr "Pas d'année fiscale définie pour cette date !\nVeuillez en créer une."
#. module: account
#: rml:account.overdue:0
@@ -4369,7 +4376,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/hu_HU.po b/addons/account/i18n/hu_HU.po
index 3e90cdf1e68..07ee4a35c18 100644
--- a/addons/account/i18n/hu_HU.po
+++ b/addons/account/i18n/hu_HU.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/it_IT.po b/addons/account/i18n/it_IT.po
index 03da0d130aa..be7e7a121a3 100644
--- a/addons/account/i18n/it_IT.po
+++ b/addons/account/i18n/it_IT.po
@@ -3915,7 +3915,7 @@ msgstr "Giorni netti"
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/nl_NL.po b/addons/account/i18n/nl_NL.po
index c6cd6a37f3d..8f1142f0085 100644
--- a/addons/account/i18n/nl_NL.po
+++ b/addons/account/i18n/nl_NL.po
@@ -3915,7 +3915,7 @@ msgstr "Netto Dagen"
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/pt_BR.po b/addons/account/i18n/pt_BR.po
index 73195c6ef60..d433ac261ac 100644
--- a/addons/account/i18n/pt_BR.po
+++ b/addons/account/i18n/pt_BR.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/pt_PT.po b/addons/account/i18n/pt_PT.po
index 452cb8f1b17..16779a2b9d6 100644
--- a/addons/account/i18n/pt_PT.po
+++ b/addons/account/i18n/pt_PT.po
@@ -3915,7 +3915,7 @@ msgstr "Dias"
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/ro_RO.po b/addons/account/i18n/ro_RO.po
index 74d2636f095..2958758142b 100644
--- a/addons/account/i18n/ro_RO.po
+++ b/addons/account/i18n/ro_RO.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/ru_RU.po b/addons/account/i18n/ru_RU.po
index a2b7c55e5ed..24988e7fb2a 100644
--- a/addons/account/i18n/ru_RU.po
+++ b/addons/account/i18n/ru_RU.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/sv_SE.po b/addons/account/i18n/sv_SE.po
index 02b34962fb6..794a08b8d42 100644
--- a/addons/account/i18n/sv_SE.po
+++ b/addons/account/i18n/sv_SE.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po
index a96f4ae9aac..16d0b5eba83 100644
--- a/addons/account/i18n/zh_CN.po
+++ b/addons/account/i18n/zh_CN.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/i18n/zh_TW.po b/addons/account/i18n/zh_TW.po
index 01f037716ce..97a1a11f46c 100644
--- a/addons/account/i18n/zh_TW.po
+++ b/addons/account/i18n/zh_TW.po
@@ -3915,7 +3915,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move between different companies"
+msgid "Couldn't create move between different companies"
msgstr ""
#. module: account
@@ -4566,7 +4566,7 @@ msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
-msgid "Couldn\'t create move with currency different than the secondary currency of the account"
+msgid "Couldn't create move with currency different than the secondary currency of the account"
msgstr ""
#. module: account
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index 23544989049..d346a5824fe 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -718,9 +718,15 @@ class account_invoice(osv.osv):
line['invoice_line_tax_id'] = [(6,0, line.get('invoice_line_tax_id', [])) ]
if 'account_analytic_id' in line:
line['account_analytic_id'] = line.get('account_analytic_id', False) and line['account_analytic_id'][0]
+ if 'tax_code_id' in line :
+ if isinstance(line['tax_code_id'],tuple) and len(line['tax_code_id']) >0 :
+ line['tax_code_id'] = line['tax_code_id'][0]
+ if 'base_code_id' in line :
+ if isinstance(line['base_code_id'],tuple) and len(line['base_code_id']) >0 :
+ line['base_code_id'] = line['base_code_id'][0]
return map(lambda x: (0,0,x), lines)
- def refund(self, cr, uid, ids):
+ def refund(self, cr, uid, ids, date=None, period_id=None, description=None):
invoices = self.read(cr, uid, ids, ['name', 'type', 'number', 'reference', 'comment', 'date_due', 'partner_id', 'address_contact_id', 'address_invoice_id', 'partner_contact', 'partner_insite', 'partner_ref', 'payment_term', 'account_id', 'currency_id', 'invoice_line', 'tax_line', 'journal_id'])
new_ids = []
@@ -741,21 +747,28 @@ class account_invoice(osv.osv):
tax_lines = self.pool.get('account.invoice.tax').read(cr, uid, invoice['tax_line'])
tax_lines = filter(lambda l: l['manual'], tax_lines)
tax_lines = self._refund_cleanup_lines(tax_lines)
-
+ if not date :
+ date = time.strftime('%Y-%m-%d')
invoice.update({
'type': type_dict[invoice['type']],
- 'date_invoice': time.strftime('%Y-%m-%d'),
+ 'date_invoice': date,
'state': 'draft',
'number': False,
'invoice_line': invoice_lines,
'tax_line': tax_lines
})
-
+ if period_id :
+ invoice.update({
+ 'period_id': period_id,
+ })
+ if description :
+ invoice.update({
+ 'name': description,
+ })
# take the id part of the tuple returned for many2one fields
for field in ('address_contact_id', 'address_invoice_id', 'partner_id',
'account_id', 'currency_id', 'payment_term', 'journal_id'):
invoice[field] = invoice[field] and invoice[field][0]
-
# create the new invoice
new_ids.append(self.create(cr, uid, invoice))
return new_ids
diff --git a/addons/account/wizard/wizard_refund.py b/addons/account/wizard/wizard_refund.py
index 82f3699f37d..54303a992e8 100644
--- a/addons/account/wizard/wizard_refund.py
+++ b/addons/account/wizard/wizard_refund.py
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
+# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved
# $Id$
#
@@ -19,44 +19,208 @@
# along with this program. If not, see .
#
##############################################################################
-
import wizard
import pooler
+import osv
+import netsvc
+import time
sur_form = '''
'''
sur_fields = {
-}
+ 'date': {'string':'Operation date','type':'date', 'required':'False'},
+ 'period':{'string': 'Force period', 'type': 'many2one',
+ 'relation': 'account.period', 'required': False},
+ 'description':{'string':'Description', 'type':'char', 'required':'True'},
+ }
+
class wiz_refund(wizard.interface):
+
def _invoice_refund(self, cr, uid, data, context):
+ return self._compute_refund(cr, uid, data, 'refund', context)
+
+ def _invoice_cancel(self, cr, uid, data, context):
+ return self._compute_refund(cr, uid, data, 'cancel', context)
+
+ def _invoice_modify(self, cr, uid, data, context):
+ return self._compute_refund(cr, uid, data, 'modify', context)
+
+ def _compute_refund(self, cr, uid, data, mode, context):
+ form = data['form']
pool = pooler.get_pool(cr.dbname)
- ids = pool.get('account.invoice').refund(cr, uid, data['ids'])
- return {
- 'domain': "[('id','in', ["+','.join(map(str,ids))+"])]",
- 'name': 'Invoices',
- 'view_type': 'form',
- 'view_mode': 'tree,form',
- 'res_model': 'account.invoice',
- 'view_id': False,
- 'context': "{'type':'out_refund'}",
- 'type': 'ir.actions.act_window'
- }
+ reconcile_obj = pool.get('account.move.reconcile')
+ account_m_line_obj = pool.get('account.move.line')
+ created_inv = []
+ date = False
+ period = False
+ description = False
+ for inv in pool.get('account.invoice').browse(cr, uid, data['ids']):
+ if inv.state == 'draft':
+ raise wizard.except_wizard(_('Error !'), _('Can not %s draft invoice.') % (mode))
+ if form['period'] :
+ period = form['period']
+ else:
+ period = inv.period_id.id
+
+ if form['date'] :
+ date = form['date']
+ if not form['period'] :
+ try :
+ #we try in multy company mode
+ cr.execute("""SELECT id
+ from account_period where date('%s')
+ between date_start AND date_stop and company_id = %s limit 1 """%(
+ form['date'],
+ pool.get('res.users').browse(cr,uid,uid).company_id.id
+ )
+
+ )
+ except :
+ #we try in mono company mode
+ cr.execute("""SELECT id
+ from account_period where date('%s')
+ between date_start AND date_stop limit 1 """%(
+ form['date'],
+ )
+
+ )
+ res = cr.fetchone()
+ if res:
+ period = res[0]
+
+
+ else:
+ date = inv.date_invoice
+
+ if form['description'] :
+ description = form['description']
+ else:
+ description = inv.name
+ refund_id = pool.get('account.invoice').refund(cr, uid, [inv.id],date, period, description)
+ refund = pool.get('account.invoice').browse(cr, uid, refund_id[0])
+ # we compute due date
+ #!!!due date = date inv date on formdate
+ pool.get('account.invoice').write(cr, uid, [refund.id],{'date_due':date,'check_total':inv.check_total})
+
+ created_inv.append(refund_id[0])
+ #if inv is paid we unreconcile
+ if mode in ('cancel','modify'):
+ movelines = inv.move_id.line_id
+ #we unreconcile the lines
+ to_reconcile_ids = {}
+ for line in movelines :
+ #if the account of the line is the as the one in the invoice
+ #we reconcile
+ if line.account_id.id == inv.account_id.id :
+ to_reconcile_ids[line.account_id.id] =[line.id]
+ if type(line.reconcile_id) != osv.orm.browse_null :
+ reconcile_obj.unlink(cr,uid, line.reconcile_id.id)
+ #we advance the workflow of the refund to open
+ wf_service = netsvc.LocalService('workflow')
+ wf_service.trg_validate(uid, 'account.invoice', refund.id, 'invoice_open', cr)
+ #we reload the browse record
+ refund = pool.get('account.invoice').browse(cr, uid, refund_id[0])
+ #we match the line to reconcile
+ for tmpline in refund.move_id.line_id :
+ if tmpline.account_id.id == inv.account_id.id :
+ to_reconcile_ids[tmpline.account_id.id].append(tmpline.id)
+ for account in to_reconcile_ids :
+ account_m_line_obj.reconcile(cr, uid, to_reconcile_ids[account],
+ writeoff_period_id=period,
+ writeoff_journal_id=inv.journal_id.id,
+ writeoff_acc_id=inv.account_id.id
+ )
+ #we create a new invoice that is the copy of the original
+ if mode == 'modify' :
+ invoice = pool.get('account.invoice').read(cr, uid, [inv.id],
+ ['name', 'type', 'number', 'reference',
+ 'comment', 'date_due', 'partner_id', 'address_contact_id',
+ 'address_invoice_id', 'partner_insite','partner_contact',
+ 'partner_ref', 'payment_term', 'account_id', 'currency_id',
+ 'invoice_line', 'tax_line', 'journal_id','period_id'
+ ]
+ )
+ invoice = invoice[0]
+ del invoice['id']
+ invoice_lines = pool.get('account.invoice.line').read(cr, uid, invoice['invoice_line'])
+ invoice_lines = pool.get('account.invoice')._refund_cleanup_lines(invoice_lines)
+ tax_lines = pool.get('account.invoice.tax').read(
+ cr, uid, invoice['tax_line'])
+ tax_lines = pool.get('account.invoice')._refund_cleanup_lines(tax_lines)
+
+ invoice.update({
+ 'type': inv.type,
+ 'date_invoice': date,
+ 'state': 'draft',
+ 'number': False,
+ 'invoice_line': invoice_lines,
+ 'tax_line': tax_lines,
+ 'period_id': period,
+ 'name':description
+ })
+
+ #take the id part of the tuple returned for many2one fields
+ for field in ('address_contact_id', 'address_invoice_id', 'partner_id',
+ 'account_id', 'currency_id', 'payment_term', 'journal_id'):
+ invoice[field] = invoice[field] and invoice[field][0]
+
+ # create the new invoice
+ inv_id = pool.get('account.invoice').create(cr, uid, invoice,{})
+ # we compute due date
+ if inv.payment_term.id:
+ data = pool.get('account.invoice').onchange_payment_term_date_invoice(cr, uid, [inv_id],inv.payment_term.id,date)
+ if 'value' in data and data['value']:
+ pool.get('account.invoice').write(cr, uid, [inv_id],data['value'])
+ created_inv.append(inv_id)
+
+ #we get the view id
+ mod_obj = pool.get('ir.model.data')
+ act_obj = pool.get('ir.actions.act_window')
+ if inv.type == 'out_invoice':
+ xml_id = 'action_invoice_tree5'
+ elif inv.type == 'in_invoice':
+ xml_id = 'action_invoice_tree8'
+ elif type == 'out_refund':
+ xml_id = 'action_invoice_tree10'
+ else:
+ xml_id = 'action_invoice_tree12'
+ #we get the model
+ result = mod_obj._get_id(cr, uid, 'account', xml_id)
+ id = mod_obj.read(cr, uid, result, ['res_id'])['res_id']
+ # we read the act window
+ result = act_obj.read(cr, uid, id)
+ result['res_id'] = created_inv
+
+ return result
+
states = {
'init': {
'actions': [],
- 'result': {'type':'form', 'arch':sur_form, 'fields':sur_fields, 'state':[('end','Cancel'),('refund','Credit Note')]}
+ 'result': {'type':'form', 'arch':sur_form, 'fields':sur_fields, 'state':[('end','Cancel'),('refund','Refund Invoice'),('cancel_invoice','Cancel Invoice'),('modify_invoice','Modify Invoice')]}
},
'refund': {
'actions': [],
- 'result': {'type':'action', 'action':_invoice_refund, 'state':'end'}
- }
+ 'result': {'type':'action', 'action':_invoice_refund, 'state':'end'},
+ },
+ 'cancel_invoice': {
+ 'actions': [],
+ 'result': {'type':'action', 'action':_invoice_cancel, 'state':'end'},
+ },
+ 'modify_invoice': {
+ 'actions': [],
+ 'result': {'type':'action', 'action':_invoice_modify, 'state':'end'},
+ },
+
}
wiz_refund('account.invoice.refund')
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_budget/__terp__.py b/addons/account_budget/__terp__.py
index b00adefef3c..e61f81ffbae 100644
--- a/addons/account_budget/__terp__.py
+++ b/addons/account_budget/__terp__.py
@@ -41,7 +41,7 @@
""",
"depends" : ["account"],
"init_xml" : [],
- "demo_xml" : [],
+ "demo_xml" : ["crossovered_budget_demo.xml"],
"update_xml" : [
"security/ir.model.access.csv","account_budget_wizard.xml",
"crossovered_budget_view.xml","crossovered_budget_report.xml","crossovered_budget_workflow.xml"
diff --git a/addons/account_budget/crossovered_budget.py b/addons/account_budget/crossovered_budget.py
index e9808f760f6..60ca40411ea 100644
--- a/addons/account_budget/crossovered_budget.py
+++ b/addons/account_budget/crossovered_budget.py
@@ -30,17 +30,17 @@ import datetime
def strToDate(dt):
dt_date=datetime.date(int(dt[0:4]),int(dt[5:7]),int(dt[8:10]))
return dt_date
-#moved from account/account.py
+
# ---------------------------------------------------------
# Budgets
# ---------------------------------------------------------
class account_budget_post(osv.osv):
_name = 'account.budget.post'
- _description = 'Budget item'
+ _description = 'Budgetary Position'
_columns = {
'code': fields.char('Code', size=64, required=True),
'name': fields.char('Name', size=256, required=True),
- 'dotation_ids': fields.one2many('account.budget.post.dotation', 'post_id', 'Expenses'),
+ 'dotation_ids': fields.one2many('account.budget.post.dotation', 'post_id', 'Spreading'),
'account_ids': fields.many2many('account.account', 'account_budget_rel', 'budget_id', 'account_id', 'Accounts'),
'crossovered_budget_line': fields.one2many('crossovered.budget.lines', 'general_budget_id', 'Budget Lines'),
}
@@ -88,22 +88,20 @@ class account_budget_post_dotation(osv.osv):
return res
_name = 'account.budget.post.dotation'
- _description = "Budget item endowment"
+ _description = "Budget Dotation"
_columns = {
'name': fields.char('Name', size=64),
'post_id': fields.many2one('account.budget.post', 'Item', select=True),
'period_id': fields.many2one('account.period', 'Period'),
-# 'quantity': fields.float('Quantity', digits=(16,2)),
'amount': fields.float('Amount', digits=(16,2)),
'tot_planned':fields.function(_tot_planned,method=True, string='Total Planned Amount',type='float',store=True),
}
account_budget_post_dotation()
-#===
class crossovered_budget(osv.osv):
_name = "crossovered.budget"
- _description = "Crossovered Budget"
+ _description = "Budget"
_columns = {
'name': fields.char('Name', size=50, required=True,states={'done':[('readonly',True)]}),
@@ -227,11 +225,11 @@ class crossovered_budget_lines(osv.osv):
res[line.id]=0.00
return res
_name="crossovered.budget.lines"
- _description = "Crossovered Budget Lines"
+ _description = "Budget Lines"
_columns = {
- 'crossovered_budget_id': fields.many2one('crossovered.budget', 'Budget Ref', ondelete='cascade', select=True, required=True),
- 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account Ref',required=True),
- 'general_budget_id': fields.many2one('account.budget.post', 'Master Budget Ref',required=True),
+ 'crossovered_budget_id': fields.many2one('crossovered.budget', 'Budget', ondelete='cascade', select=True, required=True),
+ 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account',required=True),
+ 'general_budget_id': fields.many2one('account.budget.post', 'Budgetary Position',required=True),
'date_from': fields.date('Start Date',required=True),
'date_to': fields.date('End Date',required=True),
'paid_date': fields.date('Paid Date'),
@@ -252,52 +250,5 @@ class account_analytic_account(osv.osv):
account_analytic_account()
-#--------------------------------------------------------------
-# moved from account/project/project.py
-# ---------------------------------------------------------
-# Budgets.
-# ---------------------------------------------------------
-
-#class account_analytic_budget_post(osv.osv):
-# _name = 'account.analytic.budget.post'
-# _description = 'Budget item'
-# _columns = {
-# 'code': fields.char('Code', size=64, required=True),
-# 'name': fields.char('Name', size=256, required=True),
-# 'sens': fields.selection( [('charge','Charge'), ('produit','Product')], 'Direction', required=True),
-# 'dotation_ids': fields.one2many('account.analytic.budget.post.dotation', 'post_id', 'Expenses'),
-# 'account_ids': fields.many2many('account.analytic.account', 'account_analytic_budget_rel', 'budget_id', 'account_id', 'Accounts'),
-# }
-# _defaults = {
-# 'sens': lambda *a: 'produit',
-# }
-#
-# def spread(self, cr, uid, ids, fiscalyear_id=False, quantity=0.0, amount=0.0):
-#
-# dobj = self.pool.get('account.analytic.budget.post.dotation')
-# for o in self.browse(cr, uid, ids):
-# # delete dotations for this post
-# dobj.unlink(cr, uid, dobj.search(cr, uid, [('post_id','=',o.id)]))
-#
-# # create one dotation per period in the fiscal year, and spread the total amount/quantity over those dotations
-# fy = self.pool.get('account.fiscalyear').browse(cr, uid, [fiscalyear_id])[0]
-# num = len(fy.period_ids)
-# for p in fy.period_ids:
-# dobj.create(cr, uid, {'post_id': o.id, 'period_id': p.id, 'quantity': quantity/num, 'amount': amount/num})
-# return True
-#account_analytic_budget_post()
-#
-#class account_analytic_budget_post_dotation(osv.osv):
-# _name = 'account.analytic.budget.post.dotation'
-# _description = "Budget item endowment"
-# _columns = {
-# 'name': fields.char('Name', size=64),
-# 'post_id': fields.many2one('account.analytic.budget.post', 'Item', select=True),
-# 'period_id': fields.many2one('account.period', 'Period'),
-# 'quantity': fields.float('Quantity', digits=(16,2)),
-# 'amount': fields.float('Amount', digits=(16,2)),
-# }
-#account_analytic_budget_post_dotation()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_budget/crossovered_budget_demo.xml b/addons/account_budget/crossovered_budget_demo.xml
new file mode 100644
index 00000000000..8e9ba6a9493
--- /dev/null
+++ b/addons/account_budget/crossovered_budget_demo.xml
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/account_budget/crossovered_budget_view.xml b/addons/account_budget/crossovered_budget_view.xml
index c61e6a19805..059a73175b6 100644
--- a/addons/account_budget/crossovered_budget_view.xml
+++ b/addons/account_budget/crossovered_budget_view.xml
@@ -12,34 +12,13 @@
-
+
account.budget.post.treeaccount.budget.posttree
-
+
@@ -50,7 +29,7 @@
account.budget.post.dotationform
-
- Master Budgets
+ Budgetary Positionsaccount.budget.postform
-
+
+
-
-
-
-
-
account.budget.post.form.inheritaccount.budget.postform
-
-
+
crossovered.budget.view.formcrossovered.budget
diff --git a/addons/account_payment/payment_view.xml b/addons/account_payment/payment_view.xml
index 1f112c58c03..5de9f36a074 100644
--- a/addons/account_payment/payment_view.xml
+++ b/addons/account_payment/payment_view.xml
@@ -208,7 +208,7 @@
formform,tree
-
+
diff --git a/addons/account_report/report/print_indicator.py b/addons/account_report/report/print_indicator.py
index cda78ea2a53..43960f1df6a 100644
--- a/addons/account_report/report/print_indicator.py
+++ b/addons/account_report/report/print_indicator.py
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
+# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved
# $Id$
#
@@ -70,6 +70,7 @@ theme.default_font_family = "Helvetica-Bold"
theme.default_font_size = 18
theme.default_line_width = 1.0
import tools
+import os
parents = {
@@ -86,11 +87,13 @@ class accounting_report_indicator(report_sxw.rml_parse):
self.ret_list = []
self.localcontext.update({
'time': time,
- 'test': self.test1,
+ 'getgraph': self.getgraph,
'lines':self.lines,
'getarray':self.getarray,
+ 'gettree':self.gettree,
})
self.count=0
+ self.treecount=0
self.list=[]
self.header_name=self.header_val=[]
@@ -166,6 +169,7 @@ class accounting_report_indicator(report_sxw.rml_parse):
'code':obj_ind.code,
'expression':obj_ind.expression,
'disp_graph':obj_ind.disp_graph,
+ 'disp_tree':obj_ind.disp_tree,
'note':obj_ind.note,
'type':obj_ind.type,
}
@@ -175,7 +179,7 @@ class accounting_report_indicator(report_sxw.rml_parse):
def getarray(self,data,object):
res={}
result=[]
- self.test1(data,object,intercall=True)
+ self.getgraph(data,object,intercall=True)
self.header_val=[str(x) for x in self.header_val]
temp_dict=zip(self.header_name,self.header_val)
res=dict(temp_dict)
@@ -183,8 +187,62 @@ class accounting_report_indicator(report_sxw.rml_parse):
result.append(res)
return result
+ def gettree(self,data,object):
+ pool_history=self.pool.get('account.report.report')
+ obj_history=pool_history.browse(self.cr,self.uid,object['id'])
+ result=[]
+ self.treecount +=1
+ path=tools.config['addons_path']+"/account_report/tmp_images/tree_image"
- def test1(self,data,object,intercall=False):
+ dirname =tools.config['addons_path']+'/account_report/tmp_images/'
+ if not os.path.isdir(dirname):
+ os.mkdir(dirname)
+
+ can = canvas.init('tree_image'+str(self.treecount)+".png")
+
+ theme.default_font_size = 12
+
+ tb = text_box.T(loc=(0,700),line_style=line_style.darkblue,text=str(obj_history.code))
+
+ base_x=100
+ base_y=700
+
+ if obj_history.child_ids:
+ tb.add_arrow((100, 700))
+ can.line(line_style.black,base_x-30,base_y,base_x-30,base_y-(50*(len(obj_history.child_ids)-1)))
+ tb.draw()
+ self.child_dist=0
+ def draw_tree(obj_his,base_x,base_y,level=0):
+ self.child_dist=0
+ for i in range(len(obj_his.child_ids)):
+ can.line(line_style.black,base_x-30,base_y,base_x-30,base_y-(50*(i+len(obj_his.child_ids[i].child_ids))))
+ if i<>0:
+ a = arrow.T(head_style = 1)
+ if self.child_dist:
+ diff=self.child_dist
+ else:
+ diff=self.child_dist+i
+ a.draw([(base_x-(30),base_y-(50*diff)), (base_x,base_y-(50*diff))])
+
+ if obj_his.child_ids[i].child_ids:
+ tb12 = text_box.T(loc=(base_x,base_y-(50*(self.child_dist))), text=str(obj_his.child_ids[i].code))
+ tb12.add_arrow((base_x+(100*(level+1)),base_y-(50*(self.child_dist))))
+ tb12.draw()
+ draw_tree(obj_his.child_ids[i],base_x+(100*(level+1)),base_y-(50*(self.child_dist)),level+1)
+ else:
+ tb12 = text_box.T(loc=(base_x,base_y-(50*(i+self.child_dist))), text=str(obj_his.child_ids[i].code))
+ tb12.draw()
+ self.child_dist=len(obj_his.child_ids[i].child_ids)
+#
+ draw_tree(obj_history,base_x,base_y,0)
+ can.close()
+
+ os.system('cp '+'tree_image'+str(self.treecount)+'.png ' +path+str(self.treecount)+'.png')
+ os.system('rm '+'tree_image'+str(self.treecount)+'.png')
+
+ return path+str(self.treecount)+'.png'
+
+ def getgraph(self,data,object,intercall=False):
obj_history=self.pool.get('account.report.history')
if data['select_base']=='year':
diff --git a/addons/account_report/report/print_indicator.rml b/addons/account_report/report/print_indicator.rml
index 6134b48dea1..82540e64e59 100644
--- a/addons/account_report/report/print_indicator.rml
+++ b/addons/account_report/report/print_indicator.rml
@@ -120,7 +120,8 @@
-[[ o['disp_graph'] and setTag('para','image',{'width':'450.00','height':'215.00','file':test(data['form'],o)}) or removeParentNode('para') ]]
+[[ o['disp_tree'] and setTag('para','image',{'file':gettree(data['form'],o)}) or removeParentNode('para') ]]
+[[ o['disp_graph'] and setTag('para','image',{'width':'450.00','height':'215.00','file':getgraph(data['form'],o)}) or removeParentNode('para') ]]
diff --git a/addons/base_module_record/base_module_record.py b/addons/base_module_record/base_module_record.py
index 18289f3531c..1eef18d6df4 100644
--- a/addons/base_module_record/base_module_record.py
+++ b/addons/base_module_record/base_module_record.py
@@ -26,6 +26,34 @@ import netsvc
import pooler
import string
+installed = False
+
+def fnct_call(fnct):
+ def execute(*args, **argv):
+ if len(args) >= 6 and isinstance(args[5], dict):
+ _old_args = args[5].copy()
+ else:
+ _old_args = None
+ res = fnct(*args, **argv)
+ pool = pooler.get_pool(args[0])
+ mod = pool.get('ir.module.record')
+ if mod and mod.recording:
+ if args[4] not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc'):
+ if _old_args is not None:
+ args[5].update(_old_args)
+ mod.recording_data.append(('query', args, argv,res))
+ return res
+ return execute
+
+def fnct_call_workflow(fnct):
+ def exec_workflow(*args, **argv):
+ res = fnct(*args, **argv)
+ pool = pooler.get_pool(args[0])
+ mod = pool.get('ir.module.record')
+ if mod and mod.recording:
+ mod.recording_data.append(('workflow', args, argv))
+ return res
+ return exec_workflow
class base_module_record(osv.osv):
_name = "ir.module.record"
@@ -33,6 +61,7 @@ class base_module_record(osv.osv):
}
def __init__(self, pool, cr=None):
+ global installed
if super(base_module_record, self).__init__.func_code.co_argcount ==3:
super(base_module_record, self).__init__(pool,cr)
else:
@@ -40,6 +69,13 @@ class base_module_record(osv.osv):
self.recording = 0
self.recording_data = []
self.depends = {}
+ if not installed:
+ obj = netsvc._service['object']
+ obj.execute = fnct_call(obj.execute)
+ obj.exportMethod(obj.execute)
+ obj.exec_workflow = fnct_call_workflow(obj.exec_workflow)
+ obj.exportMethod(obj.exec_workflow)
+ installed = True
# To Be Improved
def _create_id(self, cr, uid, model, data):
@@ -56,8 +92,8 @@ class base_module_record(osv.osv):
return val
def _get_id(self, cr, uid, model, id):
-# if type(id)==type(()):
-# id=id[0]
+ if type(id)==type(()):
+ id=id[0]
if (model,id) in self.ids:
return self.ids[(model,id)], False
dt = self.pool.get('ir.model.data')
@@ -270,40 +306,5 @@ class base_module_record(osv.osv):
return doc.toprettyxml(indent="\t").encode('utf8')
base_module_record()
-def fnct_call(fnct):
- def execute(*args, **argv):
- if len(args) >= 6 and isinstance(args[5], dict):
- _old_args = args[5].copy()
- else:
- _old_args = None
- db=args[0]
- res = fnct(*args, **argv)
- pool = pooler.get_pool(args[0])
- mod = pool.get('ir.module.record')
- if mod and mod.recording:
- if args[4] not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc'):
- if _old_args is not None:
- args[5].update(_old_args)
- if args[5]:
- mod.recording_data.append(('query', args, argv,res))
- return res
- return execute
-
-def fnct_call_workflow(fnct):
- def exec_workflow(*args, **argv):
- res = fnct(*args, **argv)
- pool = pooler.get_pool(args[0])
- mod = pool.get('ir.module.record')
- if mod and mod.recording:
- mod.recording_data.append(('workflow', args, argv))
- return res
- return exec_workflow
-
-obj = netsvc._service['object']
-obj.execute = fnct_call(obj.execute)
-obj.exportMethod(obj.execute)
-obj.exec_workflow = fnct_call_workflow(obj.exec_workflow)
-obj.exportMethod(obj.exec_workflow)
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm_configuration/crm_bugs_view.xml b/addons/crm_configuration/crm_bugs_view.xml
index 6c421648ebe..8a78547583e 100644
--- a/addons/crm_configuration/crm_bugs_view.xml
+++ b/addons/crm_configuration/crm_bugs_view.xml
@@ -17,7 +17,11 @@
-
+
+
+
+
+
diff --git a/addons/crm_configuration/crm_claims_view.xml b/addons/crm_configuration/crm_claims_view.xml
index a46410a298e..c457b6c0b80 100644
--- a/addons/crm_configuration/crm_claims_view.xml
+++ b/addons/crm_configuration/crm_claims_view.xml
@@ -35,7 +35,11 @@
-
+
+
+
+
+
diff --git a/addons/crm_configuration/crm_config.py b/addons/crm_configuration/crm_config.py
index 5f287f3253b..572c7880fc4 100644
--- a/addons/crm_configuration/crm_config.py
+++ b/addons/crm_configuration/crm_config.py
@@ -68,6 +68,25 @@ class crm_cases(osv.osv):
'partner_phone': fields.char('Phone', size=16),
'partner_mobile': fields.char('Mobile', size=16),
}
+ def stage_next(self, cr, uid, ids, context={}):
+ ok = False
+ sid = self.pool.get('crm.case.stage').search(cr, uid, [], context=context)
+ s = {}
+ previous = {}
+ for stage in self.pool.get('crm.case.stage').browse(cr, uid, sid, context=context):
+ section = stage.section_id.id or False
+ s.setdefault(section, {})
+ s[section][previous.get(section, False)] = stage.id
+ previous[section] = stage.id
+
+ for case in self.browse(cr, uid, ids, context):
+ section = (case.section_id.id or False)
+ if section in s:
+ st = case.stage_id.id or False
+ if st in s[section]:
+ self.write(cr, uid, [case.id], {'stage_id': s[section][st]})
+
+ return True
def onchange_case_id(self, cr, uid, ids, case_id, name, partner_id, context={}):
if not case_id: return {}
case = self.browse(cr, uid, case_id, context=context)
diff --git a/addons/crm_configuration/crm_jobs_view.xml b/addons/crm_configuration/crm_jobs_view.xml
index 0123cebca6d..dd33f9c2e0a 100644
--- a/addons/crm_configuration/crm_jobs_view.xml
+++ b/addons/crm_configuration/crm_jobs_view.xml
@@ -37,7 +37,11 @@
-
+
+
+
+
+
diff --git a/addons/crm_configuration/crm_lead_view.xml b/addons/crm_configuration/crm_lead_view.xml
index be8184a3f5d..c3c84523deb 100644
--- a/addons/crm_configuration/crm_lead_view.xml
+++ b/addons/crm_configuration/crm_lead_view.xml
@@ -15,7 +15,11 @@
-
+
+
+
+
+
diff --git a/addons/crm_configuration/crm_opportunity_view.xml b/addons/crm_configuration/crm_opportunity_view.xml
index a8360cf06d3..dd73bc83231 100644
--- a/addons/crm_configuration/crm_opportunity_view.xml
+++ b/addons/crm_configuration/crm_opportunity_view.xml
@@ -16,7 +16,12 @@
-
+
+
+
+
+
+
diff --git a/addons/document/document.py b/addons/document/document.py
index 79d8960363b..31de70cc63f 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
-# OpenERP, Open Source Management Solution
+# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved
# $Id$
#
@@ -74,28 +74,29 @@ class node_class(object):
if self.object2:
where.append( ('res_model','=',self.object2._name) )
where.append( ('res_id','=',self.object2.id) )
- for content in self.object.content_ids:
- if self.object2 or not content.include_name:
- if content.include_name:
- test_nodename = self.object2.name + (content.suffix or '') + (content.extension or '')
- else:
- test_nodename = (content.suffix or '') + (content.extension or '')
- if test_nodename.find('/'):
- test_nodename=test_nodename.replace('/', '_')
- path = self.path+'/'+test_nodename
- #path = self.path+'/'+self.object2.name + (content.suffix or '') + (content.extension or '')
- if not nodename:
- n = node_class(self.cr, self.uid,path, self.object2, False, content=content, type='content', root=False)
- res2.append( n)
- else:
- if nodename == test_nodename:
- n = node_class(self.cr, self.uid, path, self.object2, False, content=content, type='content', root=False)
- res2.append(n)
+ for content in self.object.content_ids:
+ if self.object2 or not content.include_name:
+ if content.include_name:
+ test_nodename = self.object2.name + (content.suffix or '') + (content.extension or '')
+ else:
+ test_nodename = (content.suffix or '') + (content.extension or '')
+ if test_nodename.find('/'):
+ test_nodename=test_nodename.replace('/', '_')
+ path = self.path+'/'+test_nodename
+ #path = self.path+'/'+self.object2.name + (content.suffix or '') + (content.extension or '')
+ if not nodename:
+ n = node_class(self.cr, self.uid,path, self.object2, False, content=content, type='content', root=False)
+ res2.append( n)
+ else:
+ if nodename == test_nodename:
+ n = node_class(self.cr, self.uid, path, self.object2, False, content=content, type='content', root=False)
+ res2.append(n)
else:
where.append( ('parent_id','=',self.object.id) )
where.append( ('res_id','=',False) )
if nodename:
where.append( (fobj._rec_name,'=',nodename) )
+ print where+[ ('parent_id','=',self.object and self.object.id or False) ]
ids = fobj.search(self.cr, self.uid, where+[ ('parent_id','=',self.object and self.object.id or False) ], context=self.context)
if self.object and self.root and (self.object.type=='ressource'):
ids += fobj.search(self.cr, self.uid, where+[ ('parent_id','=',False) ], context=self.context)
@@ -560,6 +561,7 @@ class document_file(osv.osv):
if not self._check_duplication(cr,uid,vals):
raise except_orm('ValidateError', 'File name must be unique!')
result = super(document_file,self).write(cr,uid,ids,vals,context=context)
+ cr.commit()
try:
for f in self.browse(cr, uid, ids, context=context):
if 'datas' not in vals:
@@ -568,6 +570,7 @@ class document_file(osv.osv):
super(document_file,self).write(cr, uid, ids, {
'index_content': res
})
+ cr.commit()
except:
pass
return result
diff --git a/addons/hr_timesheet/report/user_timesheet.xsl b/addons/hr_timesheet/report/user_timesheet.xsl
index 3479063b91f..d48e890ac4f 100644
--- a/addons/hr_timesheet/report/user_timesheet.xsl
+++ b/addons/hr_timesheet/report/user_timesheet.xsl
@@ -15,15 +15,15 @@
-
+
-
+
-
-
-
+
+
+
@@ -90,7 +90,7 @@
-
+ glande
@@ -102,12 +102,12 @@
esclave
-
+
-
+
@@ -115,6 +115,7 @@
+
@@ -126,8 +127,8 @@
-
+
-
+
\ No newline at end of file
diff --git a/addons/hr_timesheet/report/users_timesheet.xsl b/addons/hr_timesheet/report/users_timesheet.xsl
index 6bc8f756535..4e04195e5e0 100644
--- a/addons/hr_timesheet/report/users_timesheet.xsl
+++ b/addons/hr_timesheet/report/users_timesheet.xsl
@@ -15,15 +15,15 @@
-
+
-
-
-
+
+
+
@@ -102,12 +102,12 @@
esclave
-
+
-
+
@@ -115,10 +115,10 @@
Total
-
+
-
+
-
+
\ No newline at end of file
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 6223c00aaa5..d553a260091 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -410,7 +410,13 @@
-
+ mrp.production.formmrp.production
@@ -424,6 +430,7 @@
+
diff --git a/addons/mrp/wizard/__init__.py b/addons/mrp/wizard/__init__.py
index 5632fa5535e..3562f362525 100644
--- a/addons/mrp/wizard/__init__.py
+++ b/addons/mrp/wizard/__init__.py
@@ -26,6 +26,7 @@ import wizard_schedulers_all
import wizard_price
import wizard_workcenter_load
import wizard_track_prod
+import wizard_change_production_qty
import make_procurement
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mrp/wizard/wizard_change_production_qty.py b/addons/mrp/wizard/wizard_change_production_qty.py
new file mode 100644
index 00000000000..3a031d8f5ce
--- /dev/null
+++ b/addons/mrp/wizard/wizard_change_production_qty.py
@@ -0,0 +1,116 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved
+# $Id$
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import time
+import wizard
+import ir
+import pooler
+from osv.osv import except_osv
+from osv import fields,osv
+import netsvc
+
+
+form1 = '''
+
+
+
'''
+
+form1_fields={
+ 'product_qty': {'string': 'Product Qty', 'type':'float', 'required':True},
+ }
+
+def _get_qty(self,cr,uid, data, state):
+ prod_obj = pooler.get_pool(cr.dbname).get('mrp.production')
+ prod = prod_obj.browse(cr, uid,data['ids'])[0]
+ form1_fields['product_qty']['default']=prod.product_qty
+ return {}
+def _get_states(self, cr, uid, data, context):
+ prod_obj = pooler.get_pool(cr.dbname).get('mrp.production')
+ prod = prod_obj.browse(cr, uid,data['ids'])[0]
+ if prod.state in ('cancel', 'done'):
+ raise wizard.except_wizard('Warning !', 'The production is in "%s" state. You can not change the production quantity anymore' % (prod.state).upper() )
+ return 'end'
+ if prod.state in ('draft'):
+ #raise wizard.except_wizard('Warning !', 'The production is in "%s" state. You can change the production quantity directly...!!!' % (prod.state).upper() )
+ return 'end'
+ else:
+ return 'confirm'
+
+def _change_prod_qty(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ prod_obj = pool.get('mrp.production')
+ prod = prod_obj.browse(cr, uid,data['ids'])[0]
+ prod_obj.write(cr, uid,prod.id, {'product_qty' : data['form']['product_qty']})
+ prod_obj.action_compute(cr, uid, [prod.id])
+
+ move_lines_obj = pool.get('stock.move')
+ for move in prod.move_lines:
+ bom_point = prod.bom_id
+ bom_id = prod.bom_id.id
+ if not bom_point:
+ bom_id = pool.get('mrp.bom')._bom_find(cr, uid, prod.product_id.id, prod.product_uom.id, properties)
+ if not bom_id:
+ raise osv.except_osv('Error', "Couldn't find bill of material for product")
+ self.write(cr, uid, [prod.id], {'bom_id': bom_id})
+ bom_point = pool.get('mrp.bom').browse(cr, uid, [bom_id])[0]
+
+ if not bom_id:
+ raise osv.except_osv('Error', "Couldn't find bill of material for product")
+
+ factor = prod.product_qty * prod.product_uom.factor / bom_point.product_uom.factor
+ res = pool.get('mrp.bom')._bom_explode(cr, uid, bom_point, factor / bom_point.product_qty, [])
+ for r in res[0]:
+ if r['product_id']== move.product_id.id:
+ move_lines_obj.write(cr, uid,move.id, {'product_qty' : r['product_qty']})
+
+ product_lines_obj = pool.get('mrp.production.product.line')
+
+ for m in prod.move_created_ids:
+ move_lines_obj.write(cr, uid,m.id, {'product_qty' : data['form']['product_qty']})
+
+ return {}
+
+class change_production_qty(wizard.interface):
+ states = {
+ 'init' : {
+ 'actions' : [],
+ 'result' : {'type' : 'choice', 'next_state' : _get_states}
+ },
+
+ 'confirm' : {
+ 'actions' : [_get_qty],
+ 'result': {'type': 'form', 'arch':form1, 'fields':form1_fields, 'state':[('end','Cancel'),('validate','Validate')]}
+ },
+
+ 'validate': {
+ 'actions': [],
+ 'result': {'type':'action', 'action':_change_prod_qty, 'state':'end'}
+ },
+
+ 'end' : {
+ 'actions' : [],
+ 'result': {'type': 'state', 'state': 'end'},
+ },
+ }
+
+change_production_qty('change_production_qty')
+
diff --git a/addons/purchase/report/order.rml b/addons/purchase/report/order.rml
index e136e95290a..9ebbe935ebe 100755
--- a/addons/purchase/report/order.rml
+++ b/addons/purchase/report/order.rml
@@ -275,7 +275,7 @@
[[ ', '.join(map(lambda x: x.name, line.taxes_id)) ]]