improved_name_get_statement

bzr revid: fp@tinyerp.com-20081216190956-j7kudvx3iig271qx
This commit is contained in:
Fabien Pinckaers 2008-12-16 20:09:56 +01:00
commit be5da00060
24 changed files with 887 additions and 215 deletions

View File

@ -431,10 +431,7 @@ class account_bank_statement_reconcile(osv.osv):
def name_get(self, cursor, user, ids, context=None):
res= []
for o in self.browse(cursor, user, ids, context=context):
td = ''
if o.total_amount:
td = 'P '
res.append((o.id, '%s[%.2f]' % (td, o.total_amount)))
res.append((o.id, '[%.2f]' % (o.total_entry - o.total_new,)))
return res
_columns = {

View File

@ -713,7 +713,7 @@ msgstr ""
#. module: account
#: field:account.analytic.account,child_ids:0
msgid "Childs Accounts"
msgstr "Cuentas \\"hijas\\""
msgstr "Cuentas \"hijas\""
#. module: account
#: model:ir.ui.menu,name:account.menu_analytic_accounting
@ -837,7 +837,7 @@ msgstr ""
#. module: account
#: field:account.tax,child_ids:0
msgid "Childs Tax Account"
msgstr "Cuentas \\"hijas\\""
msgstr "Cuentas \"hijas\""
#. module: account
#: rml:account.analytic.account.cost_ledger:0
@ -1651,7 +1651,7 @@ msgstr ""
#: field:account.tax,child_depend:0
#: field:account.tax.template,child_depend:0
msgid "Tax on Childs"
msgstr "Impuesto depende de Cuentas \\"hijas\\""
msgstr "Impuesto depende de Cuentas \"hijas\""
#. module: account
#: wizard_view:account.reconcile.unreconcile,init:0
@ -2126,7 +2126,7 @@ msgstr "Cálculo"
#. module: account
#: field:account.analytic.account,parent_id:0
msgid "Parent analytic account"
msgstr "Cuenta de Costos \\"padre\\""
msgstr "Cuenta de Costos \"padre\""
#. module: account
#: view:account.analytic.line:0
@ -3401,7 +3401,7 @@ msgstr ""
#: field:account.tax,parent_id:0
#: field:account.tax.template,parent_id:0
msgid "Parent Tax Account"
msgstr "Cuenta \\"padre\\""
msgstr "Cuenta \"padre\""
#. module: account
#: model:ir.model,name:account.model_account_account_type

View File

@ -12,8 +12,9 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2008-12-16 10:59+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
#, python-format
@ -39,8 +40,13 @@ msgstr "Code du compte taxe"
#. module: account
#: help:account.tax,domain:0
msgid "This field is only used if you develop your own module allowing developpers to create specific taxes in a custom domain."
msgstr "Ce champ est uniquement utilisé si vous développez votre module afin de permettre aux développeur de créer des taxes spécifiques dans un domaine personnalisé."
msgid ""
"This field is only used if you develop your own module allowing developpers "
"to create specific taxes in a custom domain."
msgstr ""
"Ce champ est uniquement utilisé si vous développez votre module afin de "
"permettre aux développeur de créer des taxes spécifiques dans un domaine "
"personnalisé."
#. module: account
#: selection:account.subscription,period_type:0
@ -439,7 +445,7 @@ msgstr "Rem. (%)"
#. module: account
#: selection:account.account.type,sign:0
msgid "Negative"
msgstr ""
msgstr "Négatif"
#. module: account
#: field:account.analytic.line,move_id:0
@ -448,8 +454,14 @@ msgstr "Ligne de mouvement"
#. module: account
#: rml:account.overdue:0
msgid "Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting departement at +32 81 81 37 00."
msgstr "Dans le cas où votre paiement aurait été effectués après l'envoi de ce mail, veuillez considérer la présente comme nulle et non avenue. N'hésitez pas à contacter notre département comptabilité au +32 81 81 37 00."
msgid ""
"Would your payment have been carried out after this mail was sent, please "
"consider the present one as void. Do not hesitate to contact our accounting "
"departement at +32 81 81 37 00."
msgstr ""
"Dans le cas où votre paiement aurait été effectués après l'envoi de ce mail, "
"veuillez considérer la présente comme nulle et non avenue. N'hésitez pas à "
"contacter notre département comptabilité au +32 81 81 37 00."
#. module: account
#: selection:account.move,type:0
@ -570,8 +582,12 @@ msgstr "Méthode de report à nouveau"
#. module: account
#: help:res.partner,property_payment_term:0
msgid "This payment term will be used, instead of the default one, for the current partner"
msgstr "Cette condition de paiement sera utilisée, au lieu de celle par défaut, pour le partenaire courant"
msgid ""
"This payment term will be used, instead of the default one, for the current "
"partner"
msgstr ""
"Cette condition de paiement sera utilisée, au lieu de celle par défaut, pour "
"le partenaire courant"
#. module: account
#: field:account.tax,ref_base_code_id:0
@ -586,8 +602,14 @@ msgstr "Ligne"
#. module: account
#: help:account.analytic.journal,type:0
msgid "Gives the type of the analytic journal. When a document (eg: an invoice) needs to create analytic entries, Tiny ERP will look for a matching journal of the same type."
msgstr "Donne the type de journal analytique. Quand un document (ex. une facture) a besoin de créer une entrée analytique, Tiny ERP regardera aprés un journal du même type."
msgid ""
"Gives the type of the analytic journal. When a document (eg: an invoice) "
"needs to create analytic entries, Tiny ERP will look for a matching journal "
"of the same type."
msgstr ""
"Donne the type de journal analytique. Quand un document (ex. une facture) a "
"besoin de créer une entrée analytique, Tiny ERP regardera aprés un journal "
"du même type."
#. module: account
#: selection:account.tax,applicable_type:0
@ -695,8 +717,9 @@ msgstr ""
#. 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 !"
msgid ""
"You can not do this modification on a reconciled entry ! Please note that "
"you can just change some non important fields !"
msgstr ""
#. module: account
@ -728,8 +751,12 @@ msgstr "Enfant"
#. module: account
#: help:product.category,property_account_expense_categ:0
msgid "This account will be used, instead of the default one, to value outgoing stock for the current product category"
msgstr "Ce compte sera utilisé, au lieu de celui par defaut, pour valoriser les sorties de marchandises pour la catégorie de produit courante"
msgid ""
"This account will be used, instead of the default one, to value outgoing "
"stock for the current product category"
msgstr ""
"Ce compte sera utilisé, au lieu de celui par defaut, pour valoriser les "
"sorties de marchandises pour la catégorie de produit courante"
#. module: account
#: wizard_button:populate_statement_from_inv,init,customer:0
@ -799,13 +826,21 @@ msgstr "Journal des Traitements de fin d'année"
#. module: account
#: help:res.partner,property_account_payable:0
msgid "This account will be used, instead of the default one, as the payable account for the current partner"
msgstr "Ce compte sera utilisé, au lieu de celui par defaut, comme le compte de paiement pour le partenaire courant"
msgid ""
"This account will be used, instead of the default one, as the payable "
"account for the current partner"
msgstr ""
"Ce compte sera utilisé, au lieu de celui par defaut, comme le compte de "
"paiement pour le partenaire courant"
#. module: account
#: help:account.move.line,amount_currency:0
msgid "The amount expressed in an optionnal other currency if it is a multi-currency entry."
msgstr "Le montant exprimé dans une autre devise optionnelle si c'est une entrée multi-devise."
msgid ""
"The amount expressed in an optionnal other currency if it is a multi-"
"currency entry."
msgstr ""
"Le montant exprimé dans une autre devise optionnelle si c'est une entrée "
"multi-devise."
#. module: account
#: model:ir.actions.act_window,name:account.action_tax_code_list
@ -859,7 +894,7 @@ msgstr "Générer les entrée avant:"
#: model:ir.actions.report.xml,name:account.account_analytic_account_cost_ledger
#: model:ir.actions.wizard,name:account.account_analytic_account_cost_ledger_report
msgid "Cost Ledger"
msgstr "Livre de coûts"
msgstr "Grand livre analytique"
#. module: account
#: wizard_view:account.account.balance.report,checktype:0
@ -924,7 +959,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 "Journal détaillé par écriture"
#. module: account
#: model:ir.model,name:account.model_account_bank_accounts_wizard
@ -1062,8 +1097,16 @@ msgstr ""
#. module: account
#: help:account.journal,view_id:0
msgid "Gives the view used when writing or browsing entries in this journal. The view tell Tiny ERP which fields should be visible, required or readonly and in which order. You can create your own view for a faster encoding in each journal."
msgstr "Donne la vue utilisée lors de l'écriture ou la navigation dans ce journal. La vue dit à Tiny ERP quels champs devront être visible, requis ou en lecture seul et dans quel ordre. Vous pouvez créer votre propre vue pour un encodage plus rapide dans chaque journal."
msgid ""
"Gives the view used when writing or browsing entries in this journal. The "
"view tell Tiny ERP which fields should be visible, required or readonly and "
"in which order. You can create your own view for a faster encoding in each "
"journal."
msgstr ""
"Donne la vue utilisée lors de l'écriture ou la navigation dans ce journal. "
"La vue dit à Tiny ERP quels champs devront être visible, requis ou en "
"lecture seul et dans quel ordre. Vous pouvez créer votre propre vue pour un "
"encodage plus rapide dans chaque journal."
#. module: account
#: model:ir.model,name:account.model_account_fiscal_position
@ -1153,13 +1196,17 @@ msgstr ""
#. module: account
#: help:account.payment.term.line,sequence:0
msgid "The sequence field is used to order the payment term lines from the lowest sequences to the higher ones"
msgstr "Le champ sequence est utilisé pour classer les lignes de termes de paiement des plus basses séquences vers les plus hautes."
msgid ""
"The sequence field is used to order the payment term lines from the lowest "
"sequences to the higher ones"
msgstr ""
"Le champ sequence est utilisé pour classer les lignes de termes de paiement "
"des plus basses séquences vers les plus hautes."
#. module: account
#: field:account.chart.template,property_account_income_categ:0
msgid "Income Category Account"
msgstr ""
msgstr "Catégorie de Compte de Revenu"
#. module: account
#: model:ir.actions.act_window,name:account.analytic_account_form
@ -1245,12 +1292,21 @@ 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."
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."
#. 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)."
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 ""
#. module: account
@ -1378,8 +1434,12 @@ msgstr ""
#. module: account
#: wizard_view:account.reconcile.unreconcile,init:0
#: wizard_view:account.move.line.unreconcile,init:0
msgid "If you unreconciliate transactions, you must also verify all the actions that are linked to those transactions because they will not be disable"
msgstr "Si vous déreconciliez des transactions, vous devez aussi vérifier toutes les actions qui sont liées à ces transactions car elles ne seront pas déactivées"
msgid ""
"If you unreconciliate transactions, you must also verify all the actions "
"that are linked to those transactions because they will not be disable"
msgstr ""
"Si vous déreconciliez des transactions, vous devez aussi vérifier toutes les "
"actions qui sont liées à ces transactions car elles ne seront pas déactivées"
#. module: account
#: field:wizard.multi.charts.accounts,bank_accounts_id:0
@ -1771,7 +1831,7 @@ msgstr "Grand Livre par période"
#. module: account
#: wizard_field:account.analytic.line,init,from_date:0
msgid "From"
msgstr ""
msgstr "Période du"
#. module: account
#: model:process.node,note:account.process_node_reconciliation0
@ -1782,7 +1842,7 @@ msgstr ""
#. module: account
#: wizard_view:account.central.journal.report,init:0
msgid "Print Central Journal"
msgstr ""
msgstr "Journal regroupé par compte"
#. module: account
#: field:account.analytic.account,code:0
@ -2015,8 +2075,12 @@ msgstr "Notes de Crédit Client"
#. module: account
#: help:product.category,property_account_income_categ:0
msgid "This account will be used, instead of the default one, to value incoming stock for the current product category"
msgstr "Ce compte sera utilisé, au lieu de celui par défaut, pour valoriser le stock sortant pour la catégorie de produit courante"
msgid ""
"This account will be used, instead of the default one, to value incoming "
"stock for the current product category"
msgstr ""
"Ce compte sera utilisé, au lieu de celui par défaut, pour valoriser le stock "
"sortant pour la catégorie de produit courante"
#. module: account
#: rml:account.analytic.account.quantity_cost_ledger:0
@ -2079,8 +2143,14 @@ msgstr "Jours"
#. module: account
#: help:account.tax.template,sequence:0
msgid "The sequence field is used to order the taxes lines from the lowest sequences to the higher ones. The order is important if you have a tax that have several tax children. In this case, the evaluation order is important."
msgstr "Le Champ 'Séquence' est utilisé pour trier les lignes de taxes du plus petit numéro de séquence au plus grand. L'ordre est important si vous avez plusieurs taxes enfant. Dans ce cas, l'ordre d'évaluation est important."
msgid ""
"The sequence field is used to order the taxes lines from the lowest "
"sequences to the higher ones. The order is important if you have a tax that "
"have several tax children. In this case, the evaluation order is important."
msgstr ""
"Le Champ 'Séquence' est utilisé pour trier les lignes de taxes du plus petit "
"numéro de séquence au plus grand. L'ordre est important si vous avez "
"plusieurs taxes enfant. Dans ce cas, l'ordre d'évaluation est important."
#. module: account
#: rml:account.general.ledger:0
@ -2204,8 +2274,14 @@ msgstr ""
#. module: account
#: rml:account.overdue:0
msgid "Exception made of a mistake of our side, it seems that the following bills stay unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days."
msgstr "Sauf erreur de notre part, il semble que les factures suivantes demeurent impayées. Nous vous prions de prendre les mesures nécessaires afin de procéder au payement dans les 8 jours."
msgid ""
"Exception made of a mistake of our side, it seems that the following bills "
"stay unpaid. Please, take appropriate measures in order to carry out this "
"payment in the next 8 days."
msgstr ""
"Sauf erreur de notre part, il semble que les factures suivantes demeurent "
"impayées. Nous vous prions de prendre les mesures nécessaires afin de "
"procéder au payement dans les 8 jours."
#. module: account
#: rml:account.invoice:0
@ -2263,7 +2339,7 @@ msgstr ""
#: selection:account.account.template,type:0
#: selection:account.account,type:0
msgid "Consolidation"
msgstr ""
msgstr "Consolidation"
#. module: account
#: field:account.invoice,date_invoice:0
@ -2491,7 +2567,7 @@ msgstr "Informations supplémentaires"
#. module: account
#: field:account.config.wizard,date2:0
msgid "Ending Date"
msgstr ""
msgstr "Date de Clôture"
#. module: account
#: wizard_field:account.account.balance.report,checktype,fiscalyear:0
@ -2572,7 +2648,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
@ -2613,8 +2689,15 @@ msgstr "L'utilisateur résponsable de ce journal"
#. module: account
#: help:account.tax,sequence:0
msgid "The sequence field is used to order the taxes lines from the lowest sequences to the higher ones. The order is important if you have a tax that have several tax childs. In this case, the evaluation order is important."
msgstr "Le champ sequence est utilisé pour classer les lignes de taxes des plus basses séquences vers les plus hautes. l'ordre est important si vous avez une taxe qui a plusieurs taxes enfants. Dans ce cas, l'ordre d'évaluation est important."
msgid ""
"The sequence field is used to order the taxes lines from the lowest "
"sequences to the higher ones. The order is important if you have a tax that "
"have several tax childs. In this case, the evaluation order is important."
msgstr ""
"Le champ sequence est utilisé pour classer les lignes de taxes des plus "
"basses séquences vers les plus hautes. l'ordre est important si vous avez "
"une taxe qui a plusieurs taxes enfants. Dans ce cas, l'ordre d'évaluation "
"est important."
#. module: account
#, python-format
@ -2802,7 +2885,9 @@ msgstr "Total crédit"
#. module: account
#: rml:account.overdue:0
msgid "Best regards."
msgstr "Nous vous prions d'agréer, Madame, Monsieur, l'expression de nos sentiments distingués."
msgstr ""
"Nous vous prions d'agréer, Madame, Monsieur, l'expression de nos sentiments "
"distingués."
#. module: account
#: wizard_button:account.subscription.generate,init,generate:0
@ -2831,7 +2916,12 @@ msgstr "Contrôle des ecritures"
#. module: account
#: help:account.account,currency_mode:0
msgid "This will select how is computed the current currency rate for outgoing transactions. In most countries the legal method is \"average\" but only a few softwares are able to manage this. So if you import from another software, you may have to use the rate at date. Incoming transactions, always use the rate at date."
msgid ""
"This will select how is computed the current currency rate for outgoing "
"transactions. In most countries the legal method is \"average\" but only a "
"few softwares are able to manage this. So if you import from another "
"software, you may have to use the rate at date. Incoming transactions, "
"always use the rate at date."
msgstr ""
#. module: account
@ -2972,8 +3062,14 @@ msgstr "Lecture seule"
#. module: account
#: help:account.model.line,date_maturity:0
msgid "The maturity date of the generated entries for this model. You can chosse between the date of the creation action or the the date of the creation of the entries plus the partner payment terms."
msgstr "La date d'échéance de l'entrée générée pour ce modèle. Vous pouvez choisir entre la date de création de l'action ou la date de création des entrées plus les conditions de payement du partenaire."
msgid ""
"The maturity date of the generated entries for this model. You can chosse "
"between the date of the creation action or the the date of the creation of "
"the entries plus the partner payment terms."
msgstr ""
"La date d'échéance de l'entrée générée pour ce modèle. Vous pouvez choisir "
"entre la date de création de l'action ou la date de création des entrées "
"plus les conditions de payement du partenaire."
#. module: account
#: constraint:account.fiscalyear:0
@ -2982,8 +3078,12 @@ msgstr ""
#. module: account
#: help:product.template,property_account_income:0
msgid "This account will be used, instead of the default one, to value incoming stock for the current product"
msgstr "Ce compte sera utilisé , au lieu de celui par défaut, pour valoriser le stock d'entrée pour le produit courant"
msgid ""
"This account will be used, instead of the default one, to value incoming "
"stock for the current product"
msgstr ""
"Ce compte sera utilisé , au lieu de celui par défaut, pour valoriser le "
"stock d'entrée pour le produit courant"
#. module: account
#: rml:account.invoice:0
@ -3078,7 +3178,7 @@ msgstr ""
#: selection:account.account.template,type:0
#: selection:account.account,type:0
msgid "Payable"
msgstr ""
msgstr "Payable"
#. module: account
#: model:ir.actions.report.xml,name:account.account_vat_declaration
@ -3087,7 +3187,9 @@ msgstr ""
#. module: account
#: help:account.account,merge_invoice:0
msgid "Check this box if you want that all lines of a customer or supplier invoice using this account are created in one line only"
msgid ""
"Check this box if you want that all lines of a customer or supplier invoice "
"using this account are created in one line only"
msgstr ""
#. module: account
@ -3104,7 +3206,7 @@ msgstr ""
#. module: account
#: field:account.chart.template,property_account_expense_categ:0
msgid "Expense Category Account"
msgstr ""
msgstr "Catégorie de Compte de Dépenses"
#. module: account
#: wizard_button:account.move.validate,init,validate:0
@ -3291,9 +3393,11 @@ msgid "Total debit"
msgstr "Total débit"
#. module: account
#, python-format
#: code:addons/account/wizard/wizard_bank_reconcile.py:0
msgid "You have to define the bank account\nin the journal definition for reconciliation."
#, python-format
msgid ""
"You have to define the bank account\n"
"in the journal definition for reconciliation."
msgstr ""
#. module: account
@ -3340,13 +3444,21 @@ msgstr "Comptes partenaires"
#. module: account
#: help:account.tax,tax_group:0
#: help:account.tax.template,tax_group:0
msgid "If a default tax if given in the partner it only override taxes from account (or product) of the same group."
msgstr "Si une taxe par défaut est précisée pour le partenaire cela ne surcharge seulement que les taxes pour le compte (ou le produit) du même groupe."
msgid ""
"If a default tax if given in the partner it only override taxes from account "
"(or product) of the same group."
msgstr ""
"Si une taxe par défaut est précisée pour le partenaire cela ne surcharge "
"seulement que les taxes pour le compte (ou le produit) du même groupe."
#. module: account
#: help:account.model.line,sequence:0
msgid "The sequence field is used to order the resources from the lowest sequences to the higher ones"
msgstr "Le champ séquence est utilisé pour ordonner les documents de la plus petit vers la plus grand"
msgid ""
"The sequence field is used to order the resources from the lowest sequences "
"to the higher ones"
msgstr ""
"Le champ séquence est utilisé pour ordonner les documents de la plus petit "
"vers la plus grand"
#. module: account
#: view:account.bank.statement:0
@ -3383,8 +3495,13 @@ msgstr "Raccourci"
#. module: account
#: wizard_view:account.move.validate,init:0
msgid "All draft account entries in this journal and period will be validated. It means you won't be able to modify their accouting fields."
msgstr "Toutes les entrées de comptes brouillon dans ce journal et cette période seront validées. Cela veut dire que vous ne pourrez plus modifier leurs champs de compte."
msgid ""
"All draft account entries in this journal and period will be validated. It "
"means you won't be able to modify their accouting fields."
msgstr ""
"Toutes les entrées de comptes brouillon dans ce journal et cette période "
"seront validées. Cela veut dire que vous ne pourrez plus modifier leurs "
"champs de compte."
#. module: account
#: selection:account.model.line,date:0
@ -3394,8 +3511,13 @@ msgstr "Date du jour"
#. module: account
#: help:account.journal,centralisation:0
msgid "Check this box if you want that each entry doesn't create a counterpart but share the same counterpart for each entry of this journal."
msgstr "Cochez cette boîte si vous voulez que chaque entrée ne crée pas de contrepartie mais partage la même contrepartie pour chaque entré de ce journal."
msgid ""
"Check this box if you want that each entry doesn't create a counterpart but "
"share the same counterpart for each entry of this journal."
msgstr ""
"Cochez cette boîte si vous voulez que chaque entrée ne crée pas de "
"contrepartie mais partage la même contrepartie pour chaque entré de ce "
"journal."
#. module: account
#: field:account.tax,parent_id:0
@ -3437,7 +3559,7 @@ msgstr "Payer et réconcilier"
#. module: account
#: model:ir.actions.report.xml,name:account.account_central_journal
msgid "Central Journal"
msgstr ""
msgstr "Journal centralisé"
#. module: account
#, python-format
@ -3505,7 +3627,7 @@ msgstr "Journal"
#: selection:account.account.template,type:0
#: selection:account.account,type:0
msgid "Closed"
msgstr ""
msgstr "Fermé"
#. module: account
#: view:account.analytic.line:0
@ -3571,7 +3693,9 @@ msgstr "Entrées standard"
#. module: account
#: help:account.account,check_history:0
msgid "Check this box if you want to print all entries when printing the General Ledger, otherwise it will only print its balance."
msgid ""
"Check this box if you want to print all entries when printing the General "
"Ledger, otherwise it will only print its balance."
msgstr ""
#. module: account
@ -3641,9 +3765,11 @@ msgid "The journal must have centralised counterpart"
msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
msgid "You can not modify a posted entry of this journal !\nYou should mark the journal to allow canceling entries."
#, python-format
msgid ""
"You can not modify a posted entry of this journal !\n"
"You should mark the journal to allow canceling entries."
msgstr ""
#. module: account
@ -3830,7 +3956,7 @@ msgstr ""
#. module: account
#: field:account.chart.template,property_account_payable:0
msgid "Payable Account"
msgstr ""
msgstr "Compte Payable"
#. module: account
#: field:account.account,currency_id:0
@ -3858,8 +3984,12 @@ msgstr "Crédit"
#. module: account
#: help:account.tax,child_depend:0
#: help:account.tax.template,child_depend:0
msgid "Indicate if the tax computation is based on the value computed for the computation of child taxes or based on the total amount."
msgstr "Indique si le calcul de taxe est basé sur la valeur calculée pour la calculation des taxes de l'enfant ou basée sur le montatn total"
msgid ""
"Indicate if the tax computation is based on the value computed for the "
"computation of child taxes or based on the total amount."
msgstr ""
"Indique si le calcul de taxe est basé sur la valeur calculée pour la "
"calculation des taxes de l'enfant ou basée sur le montatn total"
#. module: account
#: field:account.tax,account_paid_id:0
@ -3891,7 +4021,9 @@ msgstr "Montant Taxé"
#. module: account
#: help:account.invoice,reconciled:0
msgid "The account moves of the invoice have been reconciled with account moves of the payment(s)."
msgid ""
"The account moves of the invoice have been reconciled with account moves of "
"the payment(s)."
msgstr ""
#. module: account
@ -3911,7 +4043,9 @@ msgstr "Compte général"
#. module: account
#: help:account.move.line,quantity:0
msgid "The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very usefull for some reports."
msgid ""
"The optional quantity expressed by this line, eg: number of product sold. "
"The quantity is not a legal requirement but is very usefull for some reports."
msgstr ""
#. module: account
@ -3921,8 +4055,12 @@ msgstr ""
#. module: account
#: help:account.move.line,blocked:0
msgid "You can check this box to mark the entry line as a litigation with the associated partner"
msgstr "Vous pouvez cocher cette boîte pour marquer la ligne d'entrée comme un litige avec le partenaire associé"
msgid ""
"You can check this box to mark the entry line as a litigation with the "
"associated partner"
msgstr ""
"Vous pouvez cocher cette boîte pour marquer la ligne d'entrée comme un "
"litige avec le partenaire associé"
#. module: account
#: wizard_field:account.automatic.reconcile,init,account_ids:0
@ -4031,8 +4169,11 @@ msgstr "Taxes par défaut"
#. module: account
#: constraint:ir.model:0
msgid "The Object name must start with x_ and not contain any special character !"
msgstr "Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères spéciaux !"
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères "
"spéciaux !"
#. module: account
#: help:account.config.wizard,code:0
@ -4041,8 +4182,12 @@ msgstr ""
#. module: account
#: help:account.move.line,date_maturity:0
msgid "This field is used for payable and receivable entries. You can put the limit date for the payment of this entry line."
msgstr "Ce champ est utilisé pour les entrée à payer et à recevoir. Vous pouvez mettre la date limite pour le payement de cette ligne d'entrée."
msgid ""
"This field is used for payable and receivable entries. You can put the limit "
"date for the payment of this entry line."
msgstr ""
"Ce champ est utilisé pour les entrée à payer et à recevoir. Vous pouvez "
"mettre la date limite pour le payement de cette ligne d'entrée."
#. module: account
#: field:account.account,parent_left:0
@ -4280,7 +4425,7 @@ msgstr "États"
#: model:process.node,name:account.process_node_accountingentries0
#: model:process.node,name:account.process_node_supplieraccountingentries0
msgid "Accounting Entries"
msgstr ""
msgstr "Écritures comptables"
#. module: account
#: model:ir.actions.act_window,name:account.act_account_partner_account_move_unreconciled
@ -4365,7 +4510,9 @@ msgstr "Facture client Pro-Forma"
#. module: account
#: view:wizard.multi.charts.accounts:0
msgid "This will automatically configure your chart of accounts, bank accounts, taxes and journals according to the selected template"
msgid ""
"This will automatically configure your chart of accounts, bank accounts, "
"taxes and journals according to the selected template"
msgstr ""
#. module: account
@ -4444,8 +4591,12 @@ msgstr "Case de la déclaration fiscale"
#. module: account
#: help:account.tax,include_base_amount:0
msgid "Indicate if the amount of tax must be included in the base amount for the computation of the next taxes"
msgstr "Indique si le montant de la taxe doit être inclue dans le montant de base pour le calcul des taxes suivantes"
msgid ""
"Indicate if the amount of tax must be included in the base amount for the "
"computation of the next taxes"
msgstr ""
"Indique si le montant de la taxe doit être inclue dans le montant de base "
"pour le calcul des taxes suivantes"
#. module: account
#: model:process.node,name:account.process_node_draftstatement0
@ -4519,9 +4670,11 @@ msgid "General Credit"
msgstr ""
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
msgid "Tax base different !\nClick on compute to update tax base"
#, python-format
msgid ""
"Tax base different !\n"
"Click on compute to update tax base"
msgstr ""
#. module: account
@ -4587,7 +4740,7 @@ msgstr ""
#: model:ir.actions.wizard,name:account.wizard_balance_report
#: model:ir.ui.menu,name:account.menu_account_balance_report
msgid "Account Balance"
msgstr ""
msgstr "Solde du compte"
#. module: account
#: model:ir.actions.report.xml,name:account.account_analytic_account_analytic_check
@ -4630,7 +4783,9 @@ msgstr "Taxes à la Vente"
#. module: account
#: help:account.tax.template,include_base_amount:0
msgid "Indicate if the amount of tax must be included in the base amount for the computation of the next taxes."
msgid ""
"Indicate if the amount of tax must be included in the base amount for the "
"computation of the next taxes."
msgstr ""
#. module: account
@ -4655,8 +4810,13 @@ msgstr ""
#. module: account
#: help:account.tax.template,domain:0
msgid "This field is only used if you develop your own module allowing developers to create specific taxes in a custom domain."
msgstr "Ce champ est uniquement utilisé si vous développez votre propre module, permettant ainsi aux développeurs de créer des taxes spécifiques dans un domaine spécifique."
msgid ""
"This field is only used if you develop your own module allowing developers "
"to create specific taxes in a custom domain."
msgstr ""
"Ce champ est uniquement utilisé si vous développez votre propre module, "
"permettant ainsi aux développeurs de créer des taxes spécifiques dans un "
"domaine spécifique."
#. module: account
#: field:account.bank.statement.reconcile,total_amount:0
@ -4776,7 +4936,7 @@ msgstr ""
#: rml:account.analytic.account.cost_ledger:0
#: rml:account.analytic.account.quantity_cost_ledger:0
msgid "/"
msgstr ""
msgstr "/"
#. module: account
#: model:process.node,note:account.process_node_invoiceinvoice0
@ -4795,9 +4955,11 @@ msgid "Move line select"
msgstr "Déplacer la ligne sélectionnée"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
msgid "Please verify the price of the invoice !\nThe real total does not match the computed total."
#, python-format
msgid ""
"Please verify the price of the invoice !\n"
"The real total does not match the computed total."
msgstr ""
#. module: account
@ -4819,7 +4981,7 @@ msgstr "Clôturer l'année fiscale"
#. module: account
#: field:account.config.wizard,date1:0
msgid "Starting Date"
msgstr ""
msgstr "Date de début"
#. module: account
#: view:account.journal:0
@ -4961,8 +5123,12 @@ msgstr "Annulées"
#. module: account
#: help:account.account,reconcile:0
msgid "Check this account if the user can make a reconciliation of the entries in this account."
msgstr "Cochez ce compte si l'utilisateur peut faire une réconciliation des entrées dans ce compte."
msgid ""
"Check this account if the user can make a reconciliation of the entries in "
"this account."
msgstr ""
"Cochez ce compte si l'utilisateur peut faire une réconciliation des entrées "
"dans ce compte."
#. module: account
#: view:res.partner:0
@ -5031,9 +5197,10 @@ msgid "Financial Management"
msgstr "Finance/Comptabilité"
#. module: account
#, python-format
#: code:addons/account/wizard/wizard_validate_account_move.py:0
msgid "Selected Move lines does not have any account move enties in draft state"
#, python-format
msgid ""
"Selected Move lines does not have any account move enties in draft state"
msgstr ""
#. module: account
@ -5164,8 +5331,12 @@ msgstr ""
#. module: account
#: help:account.account.template,reconcile:0
msgid "Check this option if the user can make a reconciliation of the entries in this account."
msgstr "Cochez cette option si l'utilisateur a le droit de réconcilier les entrées de ce compte."
msgid ""
"Check this option if the user can make a reconciliation of the entries in "
"this account."
msgstr ""
"Cochez cette option si l'utilisateur a le droit de réconcilier les entrées "
"de ce compte."
#. module: account
#: view:account.invoice:0
@ -5197,16 +5368,16 @@ msgid "Analytic account costs and revenues"
msgstr "Compte analytique coûts et revenus"
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
#, python-format
msgid "Bad account !"
msgstr ""
#. module: account
#, python-format
#: code:addons/account/account_move_line.py:0
#: code:addons/account/account.py:0
#: code:addons/account/wizard/wizard_open_closed_fiscalyear.py:0
#, python-format
msgid "Error"
msgstr ""
@ -5230,7 +5401,7 @@ msgstr "Détails de banque"
#. module: account
#: model:ir.actions.report.xml,name:account.account_general_journal
msgid "General Journal"
msgstr ""
msgstr "Journal Général"
#. module: account
#: wizard_button:account.account.balance.report,account_selection,checktype:0
@ -5239,8 +5410,8 @@ msgid "Next"
msgstr ""
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
#, python-format
msgid "Taxes missing !"
msgstr ""
@ -5260,9 +5431,9 @@ msgid "Invoice Tax"
msgstr "Taxe"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
#: code:addons/account/account_move_line.py:0
#, python-format
msgid "No piece number !"
msgstr ""
@ -5305,8 +5476,8 @@ msgid "Total amount you have to pay to this supplier."
msgstr ""
#. module: account
#, python-format
#: code:addons/account/account.py:0
#, python-format
msgid "No sequence defined in the journal !"
msgstr ""
@ -5398,8 +5569,12 @@ msgstr "Année fiscale à clôturer"
#. module: account
#: help:product.template,property_account_expense:0
msgid "This account will be used, instead of the default one, to value outgoing stock for the current product"
msgstr "Ce compte sera utilisé, au lieu de celui par defaut, pour valoriser le stock sortant pour le produit courant"
msgid ""
"This account will be used, instead of the default one, to value outgoing "
"stock for the current product"
msgstr ""
"Ce compte sera utilisé, au lieu de celui par defaut, pour valoriser le stock "
"sortant pour le produit courant"
#. module: account
#: field:account.model,name:0
@ -5407,21 +5582,25 @@ msgid "Model Name"
msgstr "Nom du modèle"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
#, python-format
msgid "Cannot delete invoice(s) which are already opened or paid !"
msgstr ""
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
#, python-format
msgid "Can not create invoice move on centralized journal"
msgstr ""
#. module: account
#: help:res.partner,property_account_receivable:0
msgid "This account will be used, instead of the default one, as the receivable account for the current partner"
msgstr "Ce compte sera utilisé, au lieu de celui par defaut, en tant que compte de créance pour le partenaire courant"
msgid ""
"This account will be used, instead of the default one, as the receivable "
"account for the current partner"
msgstr ""
"Ce compte sera utilisé, au lieu de celui par defaut, en tant que compte de "
"créance pour le partenaire courant"
#. module: account
#: model:ir.ui.menu,name:account.account_template_folder
@ -5526,10 +5705,14 @@ msgid "Ref."
msgstr "Référence"
#. module: account
#, python-format
#: code:addons/account/invoice.py:0
#: code:addons/account/account_move_line.py:0
msgid "Can not create an automatic sequence for this piece !\n\nPut a sequence in the journal definition for automatic numbering or create a sequence manually for this piece."
#, python-format
msgid ""
"Can not create an automatic sequence for this piece !\n"
"\n"
"Put a sequence in the journal definition for automatic numbering or create a "
"sequence manually for this piece."
msgstr ""
#. module: account
@ -5554,8 +5737,8 @@ msgid "Customer"
msgstr "Client"
#. module: account
#, python-format
#: code:addons/account/wizard/wizard_pay_invoice.py:0
#, python-format
msgid "Can not pay draft invoice."
msgstr ""
@ -5588,7 +5771,8 @@ msgstr ""
#: help:account.account,currency_id:0
#: help:account.account.template,currency_id:0
msgid "Force all moves for this account to have this secondary currency."
msgstr "Force tout les mouvements pour ce compte à avoir cette devise secondaire."
msgstr ""
"Force tout les mouvements pour ce compte à avoir cette devise secondaire."
#. module: account
#: wizard_view:account.general.ledger.report,checktype:0

View File

@ -42,7 +42,7 @@ def _zippy(archive, fromurl, path, src=True):
else:
exclude = ['py','pyo','pyc']
if (path.split('.')[-1] not in exclude) or (os.path.basename(path)=='__terp__.py'):
archive.write(os.path.join(fromurl, path), path)
archive.write(os.path.join(fromurl, path).encode(), path.encode())
return True
def createzip(cr, uid, moduleid, context, b64enc=True, src=True):
@ -60,7 +60,7 @@ def createzip(cr, uid, moduleid, context, b64enc=True, src=True):
if os.path.isdir(os.path.join(ad, name)):
archname = StringIO.StringIO('wb')
archive = PyZipFile(archname, "w", ZIP_DEFLATED)
archive.writepy(os.path.join(ad, name))
archive.writepy(os.path.join(ad, name).encode())
_zippy(archive, ad, name, src=src)
archive.close()
val =archname.getvalue()

View File

@ -0,0 +1,11 @@
This module provide a generic framework to define your own quality test.
All you have to do is to:
* create a folder with your test in 'base_module_quality' (e.g: mkdir base_module_quality\mytest)
* create a .py file in it with same name as the folder you just created (e.g: touch base_module_quality\mytest\mytest.py)
* edit your file and define a class 'quality_check' that
* inherits the class 'abstract_quality_test' (defined in base_module_quality.py)
* implements the __init__() method accordingly to what you want to test.

View File

@ -24,7 +24,15 @@
"author" : "Tiny",
"version" : "1.0",
"depends" : ["base",],
"description": "Sample module to check the quality",
"description": """"
This module's aim is to check the quality of other modules.
It defines a wizard on the list of modules in OpenERP, which allow you to evaluate them on different critera such as: the respect of OpenERP coding standards, the speed efficency...
This module also provide generic framework to define your own quality test. For further info, coders may take a look into base_module_quality\README.txt
""",
"init_xml" : [],
"update_xml" : ["base_module_quality_wizard.xml"],
"category" : "Tiny Specific Modules/Base module quality",

View File

@ -23,5 +23,22 @@
import netsvc
from osv import fields, osv
class abstract_quality_check(object):
'''
This Class provide...
'''
_score = 0.0
_result = ""
_result_details = ""
def __init__(self, module_path=""):
'''
this method should do the test and fill the _score, _result and _result_details var
'''
raise 'Not Implemented'
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,26 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
#import pylint_test
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,76 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
import netsvc
from osv import fields, osv
import os
from tools import config
from base_module_quality import base_module_quality
class quality_test(base_module_quality.abstract_quality_check):
def __init__(self, module_path):
self._result = """
Pylint Test:
------------
This test checks if the module satisfy the current coding standard used by OpenERP.
"""
config_file_path = config['addons_path']+'/base_module_quality/pylint_test/pylint_test_config.txt'
list_files = os.listdir(module_path)
new_list = []
subfolder = {}
for i in list_files:
path = os.path.join(module_path, i)
if os.path.isdir(path):
for j in os.listdir(path):
list_files.append(os.path.join(i, j))
dict_files = {}
n =0
score = 0.0
print list_files
for file in list_files:
if file.split('.')[-1] == 'py' and not file.endswith('__init__.py') and not file.endswith('__terp__.py'):
file_path = os.path.join(module_path, file)
res = os.popen('pylint --rcfile='+config_file_path+' '+file_path).read()
n += 1
leftchar = -1
while res[leftchar:leftchar+1] != ' ' and leftchar-1 <= 0:
leftchar -=1
rightchar = -10
while res[rightchar:rightchar+1] != '/' and rightchar+1 <= 0:
rightchar +=1
score += float(res[leftchar+1:rightchar])
self._result_details += res
self._result += file+": "+ res[leftchar+1:rightchar]+"/10\n"
self._score = score / n
return None
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,308 @@
# lint Python modules using external checkers.
#
# This is the main checker controling the other ones and the reports
# generation. It is itself both a raw checker and an astng checker in order
# to:
# * handle message activation / deactivation at the module level
# * handle some basic but necessary stats'data (number of classes, methods...)
#
[MASTER]
# Specify a configuration file.
#rcfile=
# Profiled execution.
profile=no
# Add <file or directory> to the black list. It should be a base name, not a
# path. You may set this option multiple times.
ignore=CVS
# Pickle collected data for later comparisons.
persistent=no
# Set the cache size for astng objects.
cache-size=500
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
[COMMANDS]
# Display a help message for the given message id and exit. The value may be a
# comma separated list of message ids.
#help-msg=
[MESSAGES CONTROL]
# Enable only checker(s) with the given id(s). This option conflict with the
# disable-checker option
#enable-checker=
# Enable all checker(s) except those with the given id(s). This option conflict
# with the disable-checker option
#disable-checker=
# Enable all messages in the listed categories.
#enable-msg-cat=
# Disable all messages in the listed categories.
#disable-msg-cat=
# Enable the message(s) with the given id(s).
#enable-msg=
# Disable the message(s) with the given id(s).
#disable-msg=
[REPORTS]
# set the output format. Available formats are text, parseable, colorized and
# html
output-format=text
# Include message's id in output
include-ids=no
# Put messages in a separate file for each module / package specified on the
# command line instead of printing them on stdout. Reports (if any) will be
# written in a file name "pylint_global.[txt|html]".
files-output=no
# Tells wether to display a full report or only the messages
reports=yes
# Python expression which should return a note less than 10 (10 is the highest
# note).You have access to the variables errors warning, statement which
# respectivly contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (R0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Add a comment according to your evaluation note. This is used by the global
# evaluation report (R0004).
comment=no
# Enable the report(s) with the given id(s).
#enable-report=
# Disable the report(s) with the given id(s).
#disable-report=
# checks for
# * unused variables / imports
# * undefined variables
# * redefinition of variable from builtins or from an outer scope
# * use of variable before assigment
#
[VARIABLES]
# Tells wether we should check for unused import in __init__ files.
init-import=no
# A regular expression matching names used for dummy variables (i.e. not used).
dummy-variables-rgx=_|dummy
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
additional-builtins=
# try to find bugs in the code using type inference
#
[TYPECHECK]
# Tells wether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# When zope mode is activated, consider the acquired-members option to ignore
# access to some undefined attributes.
zope=no
# List of members which are usually get through zope's acquisition mecanism and
# so shouldn't trigger E0201 when accessed (need zope=yes to be considered).
acquired-members=REQUEST,acl_users,aq_parent
# checks for :
# * doc strings
# * modules / classes / functions / methods / arguments / variables name
# * number of arguments, local variables, branchs, returns and statements in
# functions, methods
# * required module attributes
# * dangerous default values as arguments
# * redefinition of function / method / class
# * uses of the global statement
#
[BASIC]
# Required attributes for module, separated by a comma
required-attributes=
# Regular expression which should only match functions or classes name which do
# not require a docstring
no-docstring-rgx=__.*__
# Regular expression which should only match correct module names
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Regular expression which should only match correct module level names
const-rgx=(([A-Z_][A-Z1-9_]*)|(__.*__))$
# Regular expression which should only match correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
# Regular expression which should only match correct function names
function-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct method names
method-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct instance attribute names
attr-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct argument names
argument-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct variable names
variable-rgx=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match correct list comprehension /
# generator expression variable names
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
# List of builtins function names that should not be used, separated by a comma
bad-functions=map,filter,apply,input
# checks for
# * external modules dependencies
# * relative / wildcard imports
# * cyclic imports
# * uses of deprecated modules
#
[IMPORTS]
# Deprecated modules which should not be used, separated by a comma
deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report R0402 must not be disabled)
import-graph=
# Create a graph of external dependencies in the given file (report R0402 must
# not be disabled)
ext-import-graph=
# Create a graph of internal dependencies in the given file (report R0402 must
# not be disabled)
int-import-graph=
# checks for :
# * methods without self as first argument
# * overridden methods signature
# * access only to existant members via self
# * attributes not defined in the __init__ method
# * supported interfaces implementation
# * unreachable code
#
[CLASSES]
# List of interface methods to ignore, separated by a comma. This is used for
# instance to not check methods defines in Zope's Interface base class.
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,__new__,setUp
# checks for sign of poor/misdesign:
# * number of methods, attributes, local variables...
# * size, complexity of functions, methods
#
[DESIGN]
# Maximum number of arguments for function / method
max-args=5
# Maximum number of locals for function / method body
max-locals=15
# Maximum number of return / yield for function / method body
max-returns=6
# Maximum number of branch for function / method body
max-branchs=12
# Maximum number of statements in function / method body
max-statements=50
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# checks for :
# * unauthorized constructions
# * strict indentation
# * line length
# * use of <> instead of !=
#
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=80
# Maximum number of lines in a module
max-module-lines=1000
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# checks for similarities and duplicated code. This computation may be
# memory / CPU intensive, so you should disable it if you experiments some
# problems.
#
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=4
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# checks for:
# * warning notes in the code like FIXME, XXX
# * PEP 263: source code with non ascii character but no encoding declaration
#
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO

View File

@ -20,6 +20,5 @@
#
##############################################################################
import pylint_test
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -23,29 +23,26 @@
import netsvc
from osv import fields, osv
import os
from tools import config
from base_module_quality import base_module_quality
class quality_test(base_module_quality.abstract_quality_check):
def __init__(self, module_path):
self._result = """
Speed Test:
------------
This test checks the speed of the module
to be continued...
"""
return None
def _test_pylint(self, url, add_folder=None):
list_files = os.listdir(url)
new_list = []
subfolder = {}
for i in list_files:
if os.path.isdir(i):
path = os.path.join(url, i)
new_list.append(os.listdir(path))
res = _test_pylint(self, path, add_folder=i)
subfolder.update(res)
dict_files = {}
for file in list_files:
if file.split('.')[-1] == 'py' and not file.startswith('__init__'):
file_path = os.path.join(url, file)
res = os.popen('pylint '+file_path+' | tail -4').read()
if res.startswith('Global'):
if add_folder:
dict_files[add_folder + '/' + file] = res
else:
dict_files[file] = res
dict_files.update(subfolder)
return dict_files
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -27,50 +27,75 @@ import netsvc
import sys
import tools
import os
import pylint
form_check = '''<?xml version="1.0"?>
<form string="Quality check">
<field name="test" />
</form>'''
fields_check = {
'test': {
'string':'Tests', 'type':'selection', 'required':True,
'selection': [('pylint', 'Pylint'), ('othertest','other')],
'default': lambda *args: 'pylint'
},
}
#~ form_check = '''<?xml version="1.0"?>
#~ <form string="Quality check">
#~ <field name="test" />
#~ </form>'''
#~ fields_check = {
#~ 'test': {
#~ 'string':'Tests', 'type':'selection', 'required':True,
#~ 'selection': [('pylint', 'Pylint'), ('othertest','other')],
#~ 'default': lambda *args: 'pylint'
#~ },
#~ }
view_form = """<?xml version="1.0"?>
<form string="Check quality">
<field name="module_info" nolabel="1" colspan="4" height="150" width="400"/>
<notebook>
<page string="Summary">
<field name="general_info" nolabel="1" colspan="4" height="350" width="400"/>
</page>
</notebook>
</form>"""
#TODO: utiliser les nouveaux wizards pour heriter la vue et rajouter un onglet par test?
#TODO: remove the first screen which is unused
view_field = {
"module_info": {'type': 'text', 'string': 'check quality', 'readonly':True},
"general_info": {'type': 'text', 'string': 'General Info', 'readonly':True},
}
class wiz_quality_check(wizard.interface):
def _check(self, cr, uid, data, context):
if data['form']['test'] == 'pylint':
pool=pooler.get_pool(cr.dbname)
module_data = pool.get('ir.module.module').browse(cr, uid, data['ids'])
from pylint_test import pylint_test
ad = tools.config['addons_path']
url = os.path.join(ad, module_data[0].name)
result = pylint_test._test_pylint(self, url)
string_ret = ''
for i in result:
string_ret = string_ret + i + ':\n' + result[i]
return {'module_info':string_ret}
def _check(self, cr, uid, data, context):
string_ret = ""
from tools import config
list_folders=os.listdir(config['addons_path']+'/base_module_quality/')
for item in list_folders:
path = config['addons_path']+'/base_module_quality/'+item
if os.path.exists(path+'/'+item+'.py') and item not in ['report','wizard', 'security']:
pool=pooler.get_pool(cr.dbname)
module_data = pool.get('ir.module.module').browse(cr, uid, data['ids'])
ad = tools.config['addons_path']
module_path = os.path.join(ad, module_data[0].name)
from base_module_quality import base_module_quality
item2='base_module_quality.'+item+'.'+item
x = __import__(item2)
x2 = getattr(x,item)
x3 = getattr(x2,item)
val = x3.quality_test(str(module_path))
string_ret += val._result
return {'general_info':string_ret}
states = {
#~ 'init': {
#~ 'actions': [],
#~ 'result': {'type':'form', 'arch':form_check, 'fields':fields_check, 'state':[('end','Cancel'),('do','Do Test')]}
#~ },
'init': {
'actions': [],
'result': {'type':'form', 'arch':form_check, 'fields':fields_check, 'state':[('end','Cancel'),('do','Do Test')]}
},
'do': {
'actions': [_check],
'result': {'type':'form', 'arch':view_form, 'fields':view_field, 'state':[('end','Ok')]},
},

View File

@ -10,10 +10,12 @@ msgstr ""
"PO-Revision-Date: 2008-11-28 16:57:27+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"Last-Translator: Olivier Laurent <Unknown>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2008-12-16 11:02+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: board
#: constraint:ir.model:0
@ -95,7 +97,7 @@ msgstr "Créer un Menu pour le Tableau de Bord"
#. module: board
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valide pour l'architecture de la vue"
msgstr "XML non valide pour l'architecture de la vue!"
#. module: board
#: wizard_field:board.board.menu.create,init,menu_parent_id:0
@ -204,4 +206,3 @@ msgstr "Créer le menu"
#: field:board.note,name:0
msgid "Subject"
msgstr "Sujet"

View File

@ -16,10 +16,10 @@
<field name="section_id"/>
<field name="category2_id"/>
<field name="stage_id"/>
<field name="amount_revenue"/>
<field name="nbr"/>
<field name="delay_close"/>
<field name="state"/>
</tree>
</field>
</record>
@ -34,6 +34,7 @@
<field name="section_id" select="1"/>
<field name="category2_id" select="1"/>
<field name="stage_id"/>
<field name="amount_revenue"/>
<field name="nbr" select="1"/>
<field name="state" select="1"/>
<field name="delay_close"/>
@ -47,7 +48,7 @@
<field name="arch" type="xml">
<graph string="Cases by Section and Category2" type="bar" orientation="horizontal">
<field name="category2_id"/>
<field name="nbr" operator="+"/>
<field name="amount_revenue" operator="+"/>
<field name="section_id" group="True"/>
</graph>
</field>
@ -82,6 +83,7 @@
<field name="user_id"/>
<field name="section_id"/>
<field name="stage_id"/>
<field name="amount_revenue"/>
<field name="nbr"/>
<field name="delay_close"/>
<field name="state"/>
@ -98,6 +100,7 @@
<field name="user_id"/>
<field name="section_id" select="1"/>
<field name="stage_id"/>
<field name="amount_revenue"/>
<field name="nbr" select="1"/>
<field name="state" select="1"/>
<field name="delay_close"/>
@ -111,7 +114,7 @@
<field name="arch" type="xml">
<graph string="Cases by Section and Stage" type="bar" orientation="horizontal">
<field name="stage_id"/>
<field name="nbr" operator="+"/>
<field name="amount_revenue" operator="+"/>
<field name="section_id" group="True"/>
</graph>
</field>

View File

@ -38,6 +38,7 @@ class report_crm_case_section_categ2(osv.osv):
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'category2_id':fields.many2one('crm.case.category2', 'Type', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'amount_revenue': fields.float('Est.Revenue', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
@ -56,6 +57,7 @@ class report_crm_case_section_categ2(osv.osv):
c.stage_id,
c.section_id,
count(*) as nbr,
sum(planned_revenue) as amount_revenue,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_case c
@ -74,6 +76,7 @@ class report_crm_case_section_stage(osv.osv):
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'categ_id':fields.many2one('crm.case.categ', 'Category', readonly=True),
'stage_id':fields.many2one('crm.case.stage', 'Stage', readonly=True),
'amount_revenue': fields.float('Est.Revenue', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'delay_close': fields.char('Delay Close', size=20, readonly=True),
@ -91,6 +94,7 @@ class report_crm_case_section_stage(osv.osv):
c.stage_id,
c.section_id,
count(*) as nbr,
sum(planned_revenue) as amount_revenue,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_case c

View File

@ -37,6 +37,7 @@ import random
import string
from psycopg2 import Binary
from tools import config
import tools
def random_name():
random.seed()
@ -363,7 +364,7 @@ class document_directory(osv.osv):
if not ressource_parent_type_id:
ressource_parent_type_id=directory.ressource_parent_type_id and directory.ressource_parent_type_id.id or False
if not ressource_id:
ressource_id=directory.ressource_id and directory.ressource_id.id or 0
ressource_id=directory.ressource_id and directory.ressource_id or 0
res=self.search(cr,uid,[('id','<>',directory.id),('name','=',name),('parent_id','=',parent_id),('ressource_parent_type_id','=',ressource_parent_type_id),('ressource_id','=',ressource_id)])
if len(res):
return False
@ -497,6 +498,9 @@ class document_file(osv.osv):
result[id]=''
else:
result[id] = ''
if context.get('bin_size', False):
result[id] = tools.human_size(len(result[id]))
return result
#

View File

@ -5,12 +5,15 @@
<record model="document.directory" id="dir_root">
<field name="name">Documents</field>
<field name="user_id" ref="base.user_admin"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_my_folder">
<field name="name">My Folder</field>
<field name="parent_id" ref="dir_root"/>
<field name="user_id" ref="base.user_admin"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_partner_category">
@ -18,6 +21,8 @@
<field name="parent_id" ref="dir_root"/>
<field name="type">ressource</field>
<field name="ressource_tree">1</field>
<field name="ressource_id">0</field>
<field name="ressource_type_id" search="[('model','=','res.partner.category')]" />
<field name="user_id" ref="base.user_admin"/>
</record>
@ -29,6 +34,8 @@
<field name="ressource_type_id" search="[('model','=','res.partner')]" />
<field name="ressource_parent_type_id" search="[('model','=','res.partner.category')]" />
<field name="user_id" ref="base.user_admin"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_personnal_folder">
@ -36,36 +43,48 @@
<field name="parent_id" ref="dir_root"/>
<field name="type">ressource</field>
<field name="ressource_type_id" ref="base.model_res_users" />
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_product">
<field name="name">Products</field>
<field name="user_id" ref="base.user_admin"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_sale_order">
<field name="name">Sales Order</field>
<field name="user_id" ref="base.user_admin"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_sale_order_all">
<field name="name">All Sales Order</field>
<field name="user_id" ref="base.user_admin"/>
<field name="parent_id" ref="dir_sale_order"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_sale_order_quote">
<field name="name">Quotations</field>
<field name="user_id" ref="base.user_admin"/>
<field name="parent_id" ref="dir_sale_order"/>
<field name="ressource_id">0</field>
</record>
<record model="document.directory" id="dir_project">
<field name="name">Projects</field>
<field name="user_id" ref="base.user_admin"/>
<field name="parent_id" ref="dir_root"/>
<field name="ressource_id">0</field>
</record>
</data>

View File

@ -74,7 +74,7 @@ class abstracted_fs:
# Ok
def db_list(self):
return pooler.pool_dic.keys()
#return pooler.pool_dic.keys()
s = netsvc.LocalService('db')
result = s.list()
self.db_name_list = []
@ -95,8 +95,7 @@ class abstracted_fs:
if cr is not None:
cr.close()
#if db is not None:
# pooler.close_db(db_name)
print 'Return', self.db_name_list
# pooler.close_db(db_name)
return self.db_name_list
# Ok
@ -689,7 +688,7 @@ class abstracted_fs:
# formatting is matched with proftpd ls output
yield "%s %3s %-8s %-8s %8s %s %s\r\n" %(perms, nlinks, uname, gname,
size, mtime, file.path.split('/')[-1])
size, mtime, file.path.encode('ascii','replace').split('/')[-1])
# Ok
def format_mlsx(self, basedir, listing, perms, facts, ignore_err=True):

View File

@ -4,18 +4,16 @@
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 4.3.0Report-Msgid-Bugs-To: "
"support@tinyerp.comPOT-Creation-Date: 2008-09-04 08:35:53+0000PO-Revision-"
"Date: 2008-09-04 08:35:53+0000Last-Translator: <>Language-Team: MIME-"
"Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-"
"Encoding: Plural-Forms:\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-09-05 16:31+0000\n"
"PO-Revision-Date: 2008-10-14 13:30+0000\n"
"Last-Translator: Olivier Laurent <Unknown>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Project-Id-Version: OpenERP Server 5.0.0-rc1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2008-11-28 16:57:27+0000\n"
"PO-Revision-Date: 2008-11-28 16:57:27+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"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2008-11-21 14:06+0000\n"
"X-Generator: Launchpad (build Unknown)\n"

View File

@ -4,16 +4,12 @@
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 4.3.0Report-Msgid-Bugs-To: "
"support@tinyerp.comPOT-Creation-Date: 2008-09-04 08:35:53+0000PO-Revision-"
"Date: 2008-09-04 08:35:53+0000Last-Translator: <>Language-Team: MIME-"
"Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-"
"Encoding: Plural-Forms:\n"
"Report-Msgid-Bugs-To: \n"
"Project-Id-Version: OpenERP Server 5.0.0-rc1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2008-09-05 13:45+0000\n"
"PO-Revision-Date: 2008-10-14 13:30+0000\n"
"Last-Translator: Olivier Laurent <Unknown>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -39,7 +39,7 @@ class pos_invoice(report_sxw.rml_parse):
nids = []
for order in objects:
order.write(self.cr, self.uid, [order.id], {'nb_print': order.nb_print + 1})
order.write({'nb_print': order.nb_print + 1})
if order.invoice_id and order.invoice_id not in iids:
if not order.invoice_id:

View File

@ -410,17 +410,17 @@ class project_work(osv.osv):
_order = "date desc"
def create(self, cr, uid, vals, *args, **kwargs):
if 'task_id' in vals:
cr.execute('update project_task set remaining_hours=remaining_hours+%.2f where id=%s', (-vals.get('hours',0.0), vals['task_id']))
cr.execute('update project_task set remaining_hours=remaining_hours - %s where id=%s', (vals.get('hours',0.0), vals['task_id']))
return super(project_work,self).create(cr, uid, vals, *args, **kwargs)
def write(self, cr, uid, ids,vals,context={}):
for work in self.browse(cr, uid, ids, context):
cr.execute('update project_task set remaining_hours=remaining_hours+%.2f+(%.2f) where id=%s', (-vals.get('hours',0.0), work.hours, work.task_id.id))
cr.execute('update project_task set remaining_hours=remaining_hours - %s + (%s) where id=%s', (vals.get('hours',0.0), work.hours, work.task_id.id))
return super(project_work,self).write(cr, uid, ids, vals, context)
def unlink(self, cr, uid, ids, *args, **kwargs):
for work in self.browse(cr, uid, ids):
cr.execute('update project_task set remaining_hours=remaining_hours+%.2f where id=%s', (work.hours, work.task_id.id))
cr.execute('update project_task set remaining_hours=remaining_hours + %s where id=%s', (work.hours, work.task_id.id))
return super(project_work,self).unlink(cr, uid, ids,*args, **kwargs)
project_work()

View File

@ -854,7 +854,7 @@ msgstr ""
#. module: stock
#: field:stock.location,location_id:0
msgid "Parent Location"
msgstr "Ubicación \\"padre\\""
msgstr "Ubicación \"padre\""
#. module: stock
#: field:stock.inventory,date:0