commit
d4a8a295bd
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-05 12:12+0000\n"
|
||||
|
@ -103,7 +103,7 @@ msgstr "Résultat du lettrage"
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.act_account_acount_move_line_open_unreconciled
|
||||
msgid "Unreconciled entries"
|
||||
msgstr "Ecritures non-lettrées"
|
||||
msgstr "Écritures non réconciliées"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice.tax,base_code_id:0
|
||||
|
@ -151,7 +151,7 @@ msgstr "Coefficient multiplicateur"
|
|||
#: model:ir.actions.wizard,name:account.wizard_unreconcile_select
|
||||
#: model:ir.ui.menu,name:account.menu_unreconcile_select
|
||||
msgid "Unreconcile entries"
|
||||
msgstr "Ecritures non-lettrées"
|
||||
msgstr "Écritures non réconciliées"
|
||||
|
||||
#. module: account
|
||||
#: constraint:account.period:0
|
||||
|
@ -224,7 +224,7 @@ msgid ""
|
|||
"You should set the journal to allow cancelling entries if you want to do "
|
||||
"that."
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas modifier une entrée postée dans ce journal !\n"
|
||||
"Vous ne pouvez pas modifier une écriture postée dans ce journal !\n"
|
||||
"Vous devez modifier le journal pour permettre l'annulation des écritures si "
|
||||
"vous voulez permettre cela."
|
||||
|
||||
|
@ -271,7 +271,7 @@ msgstr "Echéancier"
|
|||
#. module: account
|
||||
#: model:ir.ui.menu,name:account.menu_finance_recurrent_entries
|
||||
msgid "Recurrent Entries"
|
||||
msgstr "Ecritures réccurentes"
|
||||
msgstr "Écritures réccurentes"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.line,amount:0
|
||||
|
@ -774,7 +774,7 @@ msgstr "Remise (%)"
|
|||
#: code:addons/account/account_move_line.py:0
|
||||
#, python-format
|
||||
msgid "You can not add/modify entries in a closed journal."
|
||||
msgstr "Vous ne pouvez pas ajouter/modifier un journal cloturé."
|
||||
msgstr "Vous ne pouvez pas ajouter/modifier les écritures dans un journal cloturé."
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_move_line.py:0
|
||||
|
@ -1154,7 +1154,7 @@ 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 "Ecritures par état"
|
||||
msgstr "Écritures par état"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_analyticinvoice0
|
||||
|
@ -1336,7 +1336,7 @@ msgstr "Prix unitaire"
|
|||
#. module: account
|
||||
#: model:ir.actions.wizard,name:account.action_move_journal_line_form_select
|
||||
msgid "Standard entry"
|
||||
msgstr "Entrée standard"
|
||||
msgstr "Écriture standard"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_wizard_multi_charts_accounts
|
||||
|
@ -1609,7 +1609,7 @@ msgstr "Séquences"
|
|||
#. module: account
|
||||
#: wizard_button:account.subscription.generate,init,generate:0
|
||||
msgid "Compute Entry Dates"
|
||||
msgstr "Calculer les dates d'entrée"
|
||||
msgstr "Calculer les dates d'Écriture"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/invoice.py:0
|
||||
|
@ -1958,7 +1958,7 @@ msgstr "Delta de crédit"
|
|||
#: model:ir.actions.wizard,name:account.wizard_reconcile_unreconcile
|
||||
#: model:ir.actions.wizard,name:account.wizard_unreconcile
|
||||
msgid "Unreconcile Entries"
|
||||
msgstr "Écritures non lettrées"
|
||||
msgstr "Écritures non réconciliées"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,note:account.process_node_supplierdraftinvoices0
|
||||
|
@ -2425,7 +2425,7 @@ msgstr "Montant"
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.act_account_acount_move_line_reconcile_open
|
||||
msgid "Reconciled entries"
|
||||
msgstr "Ecritures lettrées"
|
||||
msgstr "Écritures réconciliées"
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice,address_contact_id:0
|
||||
|
@ -2629,7 +2629,7 @@ msgstr "Type de Taxe"
|
|||
#. module: account
|
||||
#: model:process.transition,name:account.process_transition_statemententries0
|
||||
msgid "Statement Entries"
|
||||
msgstr "Entrées du relevé"
|
||||
msgstr "Écritures du relevé"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
|
||||
|
@ -2673,7 +2673,7 @@ msgstr "Importer une facture"
|
|||
#: code:addons/account/account_move_line.py:0
|
||||
#, python-format
|
||||
msgid "Some entries are already reconciled !"
|
||||
msgstr "Des écritures semblent déjà lettrées !"
|
||||
msgstr "Des écritures semblent déjà réconciliées !"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.analytic.account.quantity_cost_ledger.report,init:0
|
||||
|
@ -2809,7 +2809,7 @@ msgstr "Informations supplémentaires"
|
|||
#: model:process.transition,name:account.process_transition_entriesreconcile0
|
||||
#: model:process.transition,name:account.process_transition_supplierentriesreconcile0
|
||||
msgid "Entries Reconcile"
|
||||
msgstr "Ecritures lettrées"
|
||||
msgstr "Écritures réconciliées"
|
||||
|
||||
#. module: account
|
||||
#: help:account.bank.statement.reconcile,total_second_amount:0
|
||||
|
@ -2944,7 +2944,7 @@ msgstr "Ordre de Paiement"
|
|||
msgid ""
|
||||
"Check this option if you want the user to reconcile entries in this account."
|
||||
msgstr ""
|
||||
"Cochez cette case si vous voulez que l'utilisateur réconcilie les entrées "
|
||||
"Cochez cette case si vous voulez que l'utilisateur réconcilie les Écritures "
|
||||
"dans ce compte."
|
||||
|
||||
#. module: account
|
||||
|
@ -2997,7 +2997,7 @@ msgid ""
|
|||
"accounts."
|
||||
msgstr ""
|
||||
"Ce type est utilisé pour différencier les types qui ont un effet spécial "
|
||||
"dans Open ERP: les \"vues\" ne peuvent pas posséder d'entrées, "
|
||||
"dans Open ERP: les \"vues\" ne peuvent pas posséder d'écriture, "
|
||||
"\"consolidation\" veut dire les comptes qui peuvent avoir des comptes fils "
|
||||
"pour les consolidations des multi-sociétés, payable/recevable sont pour les "
|
||||
"comptes partenaire (pour le calcul des débits/crédits), \"fermé\" pour les "
|
||||
|
@ -3240,7 +3240,7 @@ msgstr "Compte de taxe"
|
|||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_statemententries0
|
||||
msgid "From statement, create entries"
|
||||
msgstr "Depuis le relevé, créer des entrées"
|
||||
msgstr "Depuis le relevé, créer des Écritures"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.account,complete_name:0
|
||||
|
@ -3393,8 +3393,8 @@ msgid ""
|
|||
"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 "
|
||||
"La date d'échéance de l'écriture 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 écritures "
|
||||
"plus les conditions de règlement du partenaire."
|
||||
|
||||
#. module: account
|
||||
|
@ -3421,7 +3421,7 @@ msgstr "Document"
|
|||
#. module: account
|
||||
#: help:account.move.line,move_id:0
|
||||
msgid "The move of this entry line."
|
||||
msgstr "Le mouvement de cette ligne d'entrée."
|
||||
msgstr "Le mouvement de cette ligne d'écriture."
|
||||
|
||||
#. module: account
|
||||
#: field:account.invoice.line,uos_id:0
|
||||
|
@ -3882,7 +3882,7 @@ 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 "
|
||||
"Toutes les écritures 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."
|
||||
|
||||
|
@ -3898,7 +3898,7 @@ msgid ""
|
|||
"The amount expressed in an optional other currency if it is a multi-currency "
|
||||
"entry."
|
||||
msgstr ""
|
||||
"Le montant exprimé dans une autre devise optionnelle si c'est une entrée "
|
||||
"Le montant exprimé dans une autre devise optionnelle si c'est une écriture "
|
||||
"multi devise."
|
||||
|
||||
#. module: account
|
||||
|
@ -4161,7 +4161,7 @@ msgstr ""
|
|||
#: code:addons/account/invoice.py:0
|
||||
#, python-format
|
||||
msgid "Global taxes defined, but are not in invoice lines !"
|
||||
msgstr ""
|
||||
msgstr "Taxes globales définies, mais elles ne sont pas dans les lignes de facture !"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.config.wizard,period:0
|
||||
|
@ -4234,7 +4234,7 @@ msgstr "Date de facture"
|
|||
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
|
||||
#, python-format
|
||||
msgid "The old fiscal year does not have any entry to reconcile!"
|
||||
msgstr "L'ancienne année fiscale n'a pas d'entrées à réconcilier !"
|
||||
msgstr "L'ancienne année fiscale n'a pas d'écriture à réconcilier !"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/wizard/wizard_fiscalyear_close.py:0
|
||||
|
@ -4565,7 +4565,7 @@ 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 "
|
||||
"Vous pouvez cocher cette boîte pour marquer la ligne d'écriture comme un "
|
||||
"litige avec le partenaire associé"
|
||||
|
||||
#. module: account
|
||||
|
@ -4713,7 +4713,7 @@ msgid ""
|
|||
"date for the payment of this entry line."
|
||||
msgstr ""
|
||||
"Ce champ est utilisé pour les écritures à payer et à recevoir. Vous pouvez "
|
||||
"mettre la date limite pour le règlement de cette ligne d'entrée."
|
||||
"mettre la date limite pour le règlement de cette ligne d'écriture."
|
||||
|
||||
#. module: account
|
||||
#: rml:account.tax.code.entries:0
|
||||
|
@ -4942,7 +4942,7 @@ msgstr "Modèle de compte de taxe"
|
|||
#. module: account
|
||||
#: help:account.model,name:0
|
||||
msgid "This is a model for recurring accounting entries"
|
||||
msgstr "Ceci est un modèle pour des entrées comptable récurrentes"
|
||||
msgstr "Ceci est un modèle pour des écritures comptable récurrentes"
|
||||
|
||||
#. module: account
|
||||
#: wizard_view:account.wizard_paid_open,init:0
|
||||
|
@ -4967,7 +4967,7 @@ msgstr "Débit fournisseur"
|
|||
#. module: account
|
||||
#: help:account.model.line,quantity:0
|
||||
msgid "The optional quantity on entries"
|
||||
msgstr "La quantité optionelle des entrées"
|
||||
msgstr "La quantité optionelle des écritures"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.third_party_ledger:0
|
||||
|
@ -5122,13 +5122,13 @@ msgstr "La taxe est comprise dans le prix indiqué"
|
|||
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree2
|
||||
#: model:ir.ui.menu,name:account.account_analytic_journal_entries
|
||||
msgid "Analytic Entries by Journal"
|
||||
msgstr "Entrées analytiques par journal"
|
||||
msgstr "Écritures analytiques par journal"
|
||||
|
||||
#. module: account
|
||||
#: model:process.transition,note:account.process_transition_suppliervalidentries0
|
||||
#: model:process.transition,note:account.process_transition_validentries0
|
||||
msgid "Valid entries from invoice"
|
||||
msgstr "Entrées valides de la Facture"
|
||||
msgstr "Écritures valides de la Facture"
|
||||
|
||||
#. module: account
|
||||
#: field:account.account,company_id:0
|
||||
|
@ -5298,7 +5298,7 @@ msgstr "Adresse de facturation"
|
|||
#. module: account
|
||||
#: rml:account.analytic.account.analytic.check:0
|
||||
msgid "General Credit"
|
||||
msgstr ""
|
||||
msgstr "Crédit Général"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/invoice.py:0
|
||||
|
@ -5317,7 +5317,7 @@ msgid ""
|
|||
"new counterpart but will share the same counterpart. This is used in fiscal "
|
||||
"year closing."
|
||||
msgstr ""
|
||||
"Cochez cette case pour spécifier que chaque entrée de ce journal ne créera "
|
||||
"Cochez cette case pour spécifier que chaque écriture de ce journal ne créera "
|
||||
"pas une nouvelle contrepartie mais partagera la même contrepartie. Cela est "
|
||||
"utilisé dans la clôture des années fiscales."
|
||||
|
||||
|
@ -5546,7 +5546,7 @@ msgstr "Début de la Période"
|
|||
#. module: account
|
||||
#: wizard_field:account.fiscalyear.close,init,report_name:0
|
||||
msgid "Name of new entries"
|
||||
msgstr "Nom des nouvelles entrées"
|
||||
msgstr "Nom des nouvelles écritures"
|
||||
|
||||
#. module: account
|
||||
#: wizard_button:account_use_models,init_form,create:0
|
||||
|
@ -5818,7 +5818,7 @@ msgstr "Cette période est déjà cloturée !"
|
|||
#. module: account
|
||||
#: help:account.move.line,currency_id:0
|
||||
msgid "The optional other currency if it is a multi-currency entry."
|
||||
msgstr "L'autre devise optionelle si c'est une entrée multi devise."
|
||||
msgstr "L'autre devise optionelle si c'est une écriture multi devise."
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice:0
|
||||
|
@ -5858,7 +5858,7 @@ msgstr "Non"
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.act_account_partner_account_move
|
||||
msgid "All account entries"
|
||||
msgstr "Toutes les entrées de compte"
|
||||
msgstr "Toutes les écritures de compte"
|
||||
|
||||
#. module: account
|
||||
#: help:account.invoice.tax,tax_code_id:0
|
||||
|
@ -5927,7 +5927,7 @@ msgstr "PRO-FORMA"
|
|||
#. module: account
|
||||
#: field:account.move.reconcile,line_partial_ids:0
|
||||
msgid "Partial Entry lines"
|
||||
msgstr "Lignes d'Entrée Partielle"
|
||||
msgstr "Lignes d'Écriture Partielle"
|
||||
|
||||
#. module: account
|
||||
#: help:account.move.line,statement_id:0
|
||||
|
@ -5948,7 +5948,7 @@ msgstr "Encodage standard"
|
|||
#. module: account
|
||||
#: wizard_button:account.analytic.line,init,open:0
|
||||
msgid "Open Entries"
|
||||
msgstr "Entrées Ouvertes"
|
||||
msgstr "Écritures Ouvertes"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account_move_line.py:0
|
||||
|
@ -6154,7 +6154,7 @@ msgstr "Définition du Journal Analytique"
|
|||
#. module: account
|
||||
#: field:account.journal,entry_posted:0
|
||||
msgid "Skip 'Draft' State for Created Entries"
|
||||
msgstr "Omettre l'état 'Brouillon' pour les Entrées Créées"
|
||||
msgstr "Omettre l'état 'Brouillon' pour les Écritures Créées"
|
||||
|
||||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_tax_template
|
||||
|
@ -6253,7 +6253,7 @@ msgstr "Vous devez définir un journal analytique sur le journal '%s' !"
|
|||
#. module: account
|
||||
#: wizard_view:account.move.validate,init:0
|
||||
msgid "Validate Account Entries"
|
||||
msgstr "Valider les Entrées du Compte"
|
||||
msgstr "Valider les Écritures du Compte"
|
||||
|
||||
#. module: account
|
||||
#: selection:account.print.journal.report,init,sort_selection:0
|
||||
|
@ -6274,7 +6274,7 @@ msgstr "au"
|
|||
#. module: account
|
||||
#: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form
|
||||
msgid "Entries of Open Analytic Journals"
|
||||
msgstr "Entrées des Journaux Analytiques Ouverts"
|
||||
msgstr "Écritures des Journaux Analytiques Ouverts"
|
||||
|
||||
#. module: account
|
||||
#: view:account.invoice.tax:0
|
||||
|
@ -6459,7 +6459,7 @@ msgstr "account.sequence.fiscalyear"
|
|||
#. module: account
|
||||
#: wizard_field:account.print.journal.report,init,sort_selection:0
|
||||
msgid "Entries Sorted By"
|
||||
msgstr "Entrées triées par"
|
||||
msgstr "Écritures triées par"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.journal.period.print:0
|
||||
|
@ -6531,12 +6531,12 @@ msgstr "Note de Crédit Fournisseur"
|
|||
#: model:process.transition,note:account.process_transition_entriesreconcile0
|
||||
#: model:process.transition,note:account.process_transition_supplierentriesreconcile0
|
||||
msgid "Reconcile Entries."
|
||||
msgstr "Réconcilier les Entrées."
|
||||
msgstr "Réconcilier les Écritures."
|
||||
|
||||
#. module: account
|
||||
#: field:account.subscription.line,move_id:0
|
||||
msgid "Entry"
|
||||
msgstr "Entrée"
|
||||
msgstr "Écriture"
|
||||
|
||||
#. module: account
|
||||
#: model:process.node,note:account.process_node_paidinvoice0
|
||||
|
@ -6591,12 +6591,12 @@ msgstr "Détails de banque"
|
|||
#. module: account
|
||||
#: field:account.chart.template,property_account_expense:0
|
||||
msgid "Expense Account on Product Template"
|
||||
msgstr ""
|
||||
msgstr "Compte de Dépense sur les Modèles de Produits"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.analytic.account.analytic.check:0
|
||||
msgid "General Debit"
|
||||
msgstr ""
|
||||
msgstr "Débit Général"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.account,code:0
|
||||
|
@ -6692,7 +6692,7 @@ msgstr "Oui"
|
|||
msgid ""
|
||||
"Check this if the user is allowed to reconcile entries in this account."
|
||||
msgstr ""
|
||||
"Cochez cette case si l'utilisateur peut réconcilier les entrées dans ce "
|
||||
"Cochez cette case si l'utilisateur peut réconcilier les Écritures dans ce "
|
||||
"compte."
|
||||
|
||||
#. module: account
|
||||
|
|
|
@ -921,7 +921,7 @@ class account_invoice_line(osv.osv):
|
|||
if 'check_total' in context:
|
||||
t = context['check_total']
|
||||
for l in context.get('invoice_line', {}):
|
||||
if len(l) >= 3 and l[2]:
|
||||
if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]:
|
||||
tax_obj = self.pool.get('account.tax')
|
||||
p = l[2].get('price_unit', 0) * (1-l[2].get('discount', 0)/100.0)
|
||||
t = t - (p * l[2].get('quantity'))
|
||||
|
|
|
@ -404,13 +404,13 @@
|
|||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="128.0,402.0" style="Table1">
|
||||
<blockTable colWidths="128.0,402.0" style="Standard_Outline">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_Bold_9">Fiscal Position Remark :</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.fiscal_position and format(o.fiscal_position.note) or removeParentNode('blockTable') ]]</para>
|
||||
<para style="terp_default_9">[[ format(o.fiscal_position and o.fiscal_position.note or removeParentNode('blockTable')) ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
|
|
|
@ -43,20 +43,6 @@ class tax_report(rml_parse.rml_parse):
|
|||
})
|
||||
|
||||
|
||||
def comma_me(self,amount):
|
||||
|
||||
if type(amount) is float :
|
||||
amount = str('%.2f'%amount)
|
||||
else :
|
||||
amount = str(amount)
|
||||
if (amount == '0'):
|
||||
return ' '
|
||||
orig = amount
|
||||
new = re.sub("^(-?\d+)(\d{3})", "\g<1>'\g<2>", amount)
|
||||
if orig == new:
|
||||
return new
|
||||
else:
|
||||
return self.comma_me(new)
|
||||
def _get_lines(self, based_on,period_list,company_id=False, parent=False, level=0):
|
||||
res = self._get_codes(based_on,company_id,parent,level,period_list)
|
||||
|
||||
|
@ -73,7 +59,6 @@ class tax_report(rml_parse.rml_parse):
|
|||
|
||||
i = 0
|
||||
top_result = []
|
||||
|
||||
while i < len(res):
|
||||
|
||||
res_dict = { 'code' : res[i][1].code,
|
||||
|
@ -106,7 +91,6 @@ class tax_report(rml_parse.rml_parse):
|
|||
def _get_general(self, tax_code_id,period_list ,company_id, based_on):
|
||||
res=[]
|
||||
period_sql_list = ','.join(map(str, period_list[0][2]))
|
||||
|
||||
if based_on == 'payments':
|
||||
self.cr.execute('SELECT SUM(line.tax_amount) AS tax_amount, \
|
||||
SUM(line.debit) AS debit, \
|
||||
|
@ -125,6 +109,7 @@ class tax_report(rml_parse.rml_parse):
|
|||
AND line.account_id = account.id \
|
||||
AND account.company_id = %s \
|
||||
AND move.id = line.move_id \
|
||||
AND line.period_id IN ('+ period_sql_list +') \
|
||||
AND ((invoice.state = %s) \
|
||||
OR (invoice.id IS NULL)) \
|
||||
GROUP BY account.id,account.name,account.code', ('draft',tax_code_id,
|
||||
|
@ -144,6 +129,7 @@ class tax_report(rml_parse.rml_parse):
|
|||
AND line.tax_code_id = %s \
|
||||
AND line.account_id = account.id \
|
||||
AND account.company_id = %s \
|
||||
AND line.period_id IN ('+ period_sql_list +') \
|
||||
AND account.active \
|
||||
GROUP BY account.id,account.name,account.code', ('draft',tax_code_id,
|
||||
company_id))
|
||||
|
|
|
@ -41,7 +41,7 @@ class wizard_account_chart(wizard.interface):
|
|||
'target_move': {
|
||||
'string': 'Target Moves',
|
||||
'type': 'selection',
|
||||
'selection': [('all','All Entries'),('posted_only','All Posted Entries')],
|
||||
'selection': [('all','All Entries'),('posted','All Posted Entries')],
|
||||
'required': True,
|
||||
'default': lambda *a:"all",
|
||||
},
|
||||
|
@ -60,7 +60,7 @@ class wizard_account_chart(wizard.interface):
|
|||
result = mod_obj._get_id(cr, uid, 'account', 'action_account_tree')
|
||||
id = mod_obj.read(cr, uid, [result], ['res_id'])[0]['res_id']
|
||||
result = act_obj.read(cr, uid, [id], context=context)[0]
|
||||
result['context'] = str({'fiscalyear': data['form']['fiscalyear'],'target_move':data['form']['target_move']})
|
||||
result['context'] = str({'fiscalyear': data['form']['fiscalyear'],'state':data['form']['target_move']})
|
||||
if data['form']['fiscalyear']:
|
||||
result['name']+=':'+pooler.get_pool(cr.dbname).get('account.fiscalyear').read(cr,uid,[data['form']['fiscalyear']])[0]['code']
|
||||
return result
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 10:58+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 11:00+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 12:32+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 11:29+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 11:10+0000\n"
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:12+0000\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:02+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-06-12 13:24+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-07-06 13:16+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_chart
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:15+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:09+0000\n"
|
||||
|
|
|
@ -1,545 +1,242 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_report
|
||||
# * account_reporting
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:35+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 14:04+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.history,name:0
|
||||
#: selection:account.report.report,type:0
|
||||
#: model:ir.model,name:account_report.model_account_report_history
|
||||
msgid "Indicator"
|
||||
msgstr "Indicateur"
|
||||
#. module: account_reporting
|
||||
#: field:color.rml,code:0
|
||||
msgid "code"
|
||||
msgstr "code"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_field:print.indicators.pdf,init,file:0
|
||||
msgid "Select a PDF File"
|
||||
msgstr "Sélectionnez un fichier PDF"
|
||||
|
||||
#. module: account_report
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
#. module: account_reporting
|
||||
#: 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 !"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Operators:"
|
||||
msgstr "Opérateurs"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Helvetica-Bold"
|
||||
msgstr "Helvetica-Bold"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,parent_id:0
|
||||
msgid "Parent"
|
||||
msgstr "Parent"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Helvetica"
|
||||
msgstr "Helvetica"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,disp_graph:0
|
||||
msgid "Display As Graph"
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,note:0
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,report_type:0
|
||||
msgid "Report Type"
|
||||
msgstr "Type de Rapport"
|
||||
|
||||
#. module: account_reporting
|
||||
#: model:ir.ui.menu,name:account_reporting.action_account_report_bs_form
|
||||
#: model:ir.ui.menu,name:account_reporting.menu_finan_config_BSheet
|
||||
msgid "Balance Sheet Report"
|
||||
msgstr "Rapport de bilan"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Courier"
|
||||
msgstr "Courier"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Courier-BoldOblique"
|
||||
msgstr "Courier-BoldOblique"
|
||||
|
||||
#. module: account_reporting
|
||||
#: wizard_button:account.account.balancesheet.report,init,report:0
|
||||
msgid "Print BalanceSheet"
|
||||
msgstr "Impression du bilan"
|
||||
|
||||
#. module: account_reporting
|
||||
#: help:account.account.balancesheet.report,init,periods:0
|
||||
msgid "All periods if empty"
|
||||
msgstr "Toutes les périodes si vide"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,color_font:0
|
||||
msgid "Font Color"
|
||||
msgstr "Couleur de la police"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,report_type:0
|
||||
msgid "Report Objects With Accounts and child of Accounts"
|
||||
msgstr "Rapport des objets avec les comptes et les comptes fils"
|
||||
|
||||
#. module: account_reporting
|
||||
#: model:ir.module.module,description:account_reporting.module_meta_information
|
||||
msgid ""
|
||||
"Financial and accounting reporting\n"
|
||||
" Balance Sheet Report"
|
||||
msgstr ""
|
||||
"Rapports financiers et comptables \n"
|
||||
" Rapport de bilan"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Account Debit:"
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Courier-Oblique"
|
||||
msgstr "Courier-Oblique"
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,type:0
|
||||
msgid "Others"
|
||||
msgstr "Autres"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "balance(['ACCOUNT_CODE',],fiscalyear)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid "Tabular Summary"
|
||||
msgstr "Résumé tabulaire"
|
||||
|
||||
#. module: account_report
|
||||
#: code:addons/account_report/wizard/wizard_print_indicators.py:0
|
||||
#, python-format
|
||||
msgid "Please select maximum 8 records to fit the page-width."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "= Goodness Indicator Limit:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Very bad"
|
||||
msgstr "Très mauvais"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.history,val:0
|
||||
#: field:account.report.report,amount:0
|
||||
msgid "Value"
|
||||
msgstr "Valeur"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "= Badness Indicator Limit:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Bad"
|
||||
msgstr "Mauvais"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_view:print.indicators.pdf,init:0
|
||||
msgid "Select the PDF file on which Indicators will be printed."
|
||||
msgstr "Sélectionnez le fichier PDF sur lequel les indicateurs seront imprimés."
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "> Goodness Indicator Limit:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,badness_limit:0
|
||||
msgid "Badness Indicator Limit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Very Bad"
|
||||
msgstr "Très mauvais"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.account_report_history_record_structure
|
||||
msgid "Indicator history"
|
||||
msgstr "Historique de l'Indicateur"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "credit(['ACCOUNT_CODE',],fiscalyear)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Report Amount:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.report.xml,name:account_report.fiscal_statements
|
||||
msgid "Fiscal Statements"
|
||||
msgstr "Extraits fiscaux"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_button:print.indicators,init,next:0
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.module.module,shortdesc:account_report.module_meta_information
|
||||
msgid "Reporting for accounting"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_button:print.indicators,next,print:0
|
||||
#: wizard_button:print.indicators.pdf,init,print:0
|
||||
msgid "Print"
|
||||
msgstr "Imprimer"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,type:0
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.report.xml,name:account_report.report_indicator_pdf
|
||||
msgid "Print Indicators in PDF"
|
||||
msgstr "Imprimer les Indicateurs dans le fichier PDF"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Account Tax Code:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Good"
|
||||
msgstr "Bon"
|
||||
|
||||
#. module: account_report
|
||||
#: code:addons/account_report/account.py:0
|
||||
#, python-format
|
||||
msgid "Error !"
|
||||
msgstr "Erreur !"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.history:0
|
||||
msgid "Account Report History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#. module: account_reporting
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valide pour l'architecture de la vue"
|
||||
|
||||
#. module: account_report
|
||||
#: help:account.report.report,badness_limit:0
|
||||
msgid "This Value sets the limit of badness."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_field:print.indicators,init,select_base:0
|
||||
msgid "Choose Criteria"
|
||||
msgstr "Choisissez les critères"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "debit(['ACCOUNT_CODE',],fiscalyear)"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Account Credit:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_view:print.indicators,init:0
|
||||
msgid "Select the criteria based on which Indicators will be printed."
|
||||
msgstr "Sélectionnez les critères sur lesquels seront basés les indicateurs à imprimer."
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "< Badness Indicator Limit:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Very Good"
|
||||
msgstr "Très bien"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,note:0
|
||||
msgid "Note"
|
||||
msgstr "Note"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:accounting.report:0
|
||||
#: rml:print.indicators:0
|
||||
msgid "Currency:"
|
||||
msgstr "Devise"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,status:0
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#. module: account_report
|
||||
#: help:account.report.report,disp_tree:0
|
||||
msgid "When the indicators are printed, if one indicator is set with this field to True, then it will display one more graphs with all its children in tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,status:0
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Example: (balance(['6','45'],-1) - credit(['7'])) / report('RPT1')"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,active:0
|
||||
msgid "Active"
|
||||
msgstr "Actif"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,disp_tree:0
|
||||
msgid "Display Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: selection:print.indicators,init,select_base:0
|
||||
msgid "Based On Fiscal Years"
|
||||
msgstr "Basé sur les Années Fiscales"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.model,name:account_report.model_account_report_report
|
||||
msgid "Account reporting"
|
||||
msgstr "Rapport de compte"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Account Balance:"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid "Expression :"
|
||||
msgstr "Expression :"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "report('REPORT_CODE')"
|
||||
msgstr "Rapport comptable"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,expression:0
|
||||
msgid "Expression"
|
||||
msgstr "Expression"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Accounting reporting"
|
||||
msgstr "Rapport comptable"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_form
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_form
|
||||
msgid "New Reporting Item Formula"
|
||||
msgstr "Nouvelle formule"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,code:0
|
||||
#: rml:accounting.report:0
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.history,tmp:0
|
||||
msgid "temp"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.history,period_id:0
|
||||
msgid "Period"
|
||||
msgstr "Période"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Legend of operators"
|
||||
msgstr "Légende des opérateurs"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_button:print.indicators,init,end:0
|
||||
#: wizard_button:print.indicators,next,end:0
|
||||
#: wizard_button:print.indicators.pdf,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,child_ids:0
|
||||
msgid "Children"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: 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 !"
|
||||
|
||||
#. module: account_report
|
||||
#: help:account.report.report,goodness_limit:0
|
||||
msgid "This Value sets the limit of goodness."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.wizard,name:account_report.wizard_print_indicators
|
||||
#: model:ir.ui.menu,name:account_report.menu_wizard_print_indicators
|
||||
#: wizard_view:print.indicators,init:0
|
||||
#: wizard_view:print.indicators,next:0
|
||||
msgid "Print Indicators"
|
||||
msgstr "Imprimer les Indicateurs"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "+ - * / ( )"
|
||||
msgstr "+ - * / ( )"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:accounting.report:0
|
||||
#: rml:print.indicators:0
|
||||
msgid "Printing date:"
|
||||
msgstr "Date d'impression"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.wizard,name:account_report.wizard_indicators_with_pdf
|
||||
msgid "Indicators in PDF"
|
||||
msgstr "Indicateurs en PDF"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:accounting.report:0
|
||||
#: rml:print.indicators:0
|
||||
msgid "at"
|
||||
msgstr "à"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:accounting.report:0
|
||||
msgid "Accounting Report"
|
||||
msgstr "Rapport comptable"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,goodness_limit:0
|
||||
msgid "Goodness Indicator Limit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_tree_view_other
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_tree_view_other
|
||||
msgid "Other reports"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Note: The second arguement 'fiscalyear' and 'period' are optional arguements.If the value is -1,previous fiscalyear or period is considered."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid ")"
|
||||
msgstr ")"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_tree_view_fiscal
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_tree_view_fiscal
|
||||
msgid "Fiscal Statements reporting"
|
||||
msgstr "Rapport des extraits fiscaux"
|
||||
|
||||
#. module: account_report
|
||||
#: selection:print.indicators,init,select_base:0
|
||||
msgid "Based on Fiscal Periods"
|
||||
msgstr "Basé sur les Périodes Fiscales"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.report.xml,name:account_report.report_print_indicators
|
||||
#: rml:print.indicators:0
|
||||
msgid "Indicators"
|
||||
msgstr "Indicateurs"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_view:print.indicators.pdf,init:0
|
||||
msgid "Print Indicators with PDF"
|
||||
msgstr "Imprimer les Indicateurs dans le fichier PDF"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_tree_view_indicator
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_tree_view_indicator
|
||||
msgid "Indicators reporting"
|
||||
msgstr "Rapport d'indicateurs"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,name:0
|
||||
#: rml:accounting.report:0
|
||||
#: rml:print.indicators:0
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,name:0
|
||||
#: field:color.rml,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: account_report
|
||||
#: wizard_field:print.indicators,next,base_selection:0
|
||||
msgid "Select Criteria"
|
||||
msgstr "Sélectionnez les critères"
|
||||
#. module: account_reporting
|
||||
#: view:account.report.bs:0
|
||||
msgid "Account reporting"
|
||||
msgstr "Rapport de compte"
|
||||
|
||||
#. module: account_report
|
||||
#: code:addons/account_report/account.py:0
|
||||
#, python-format
|
||||
msgid "You cannot delete an indicator history record. You may have to delete the concerned Indicator!"
|
||||
msgstr "Vous ne pouvez pas supprimer un enregistrement de l'historique d'un indicateur. Vous devez supprimer l'Indicateur concerné."
|
||||
#. module: account_reporting
|
||||
#: model:ir.ui.menu,name:account_reporting.bs_report_action_form
|
||||
msgid "Balance Sheet Report Form"
|
||||
msgstr "Formulaire du rapport de bilan"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "tax_code(['ACCOUNT_TAX_CODE',],period)"
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: view:account.report.bs:0
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.history,fiscalyear_id:0
|
||||
msgid "Fiscal Year"
|
||||
msgstr "Année Fiscale"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Times-BoldItalic"
|
||||
msgstr "Times-BoldItalic"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_tree
|
||||
#: model:ir.actions.act_window,name:account_report.action_account_report_tree_view
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_tree_define
|
||||
#: model:ir.ui.menu,name:account_report.menu_action_account_report_tree_view
|
||||
msgid "Custom reporting"
|
||||
msgstr "Personnaliser un rapport"
|
||||
#. module: account_reporting
|
||||
#: model:ir.model,name:account_reporting.model_account_report_bs
|
||||
msgid "Account reporting for Balance Sheet"
|
||||
msgstr "Rapports des comptes pour le bilan"
|
||||
|
||||
#. module: account_report
|
||||
#: code:addons/account_report/wizard/wizard_print_indicators.py:0
|
||||
#, python-format
|
||||
msgid "User Error!"
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Courier-Bold"
|
||||
msgstr "Courier-Bold"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Times-Italic"
|
||||
msgstr "Times-Italic"
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,type:0
|
||||
msgid "View"
|
||||
msgstr "Vue"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,report_type:0
|
||||
msgid "Report Objects Only"
|
||||
msgstr "Rapport sur les objets seulement"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid "Indicators -"
|
||||
msgstr "Indicateurs -"
|
||||
#. module: account_reporting
|
||||
#: model:ir.model,name:account_reporting.model_color_rml
|
||||
msgid "Rml Colors"
|
||||
msgstr "Couleurs RML"
|
||||
|
||||
#. module: account_report
|
||||
#: help:account.report.report,disp_graph:0
|
||||
msgid "If the field is set to True, information will be printed as a Graph, otherwise as an array."
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: model:ir.module.module,shortdesc:account_reporting.module_meta_information
|
||||
msgid "Reporting of Balancesheet for accounting"
|
||||
msgstr "Rapport sur bilan pour la comptabilité"
|
||||
|
||||
#. module: account_report
|
||||
#: view:account.report.report:0
|
||||
msgid "Return value for status"
|
||||
msgstr "Valeur de retour pour status"
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,code:0
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
#. module: account_report
|
||||
#: field:account.report.report,sequence:0
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,parent_id:0
|
||||
msgid "Parent"
|
||||
msgstr "Parent"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Séquence"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:accounting.report:0
|
||||
msgid "Amount"
|
||||
msgstr "Montant"
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Times-Bold"
|
||||
msgstr "Times-Bold"
|
||||
|
||||
#. module: account_report
|
||||
#: rml:print.indicators:0
|
||||
msgid "1cm 27.7cm 20cm 27.7cm"
|
||||
msgstr "1cm 27.7cm 20cm 27.7cm"
|
||||
#. module: account_reporting
|
||||
#: view:account.report.bs:0
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#. module: account_report
|
||||
#: model:ir.module.module,description:account_report.module_meta_information
|
||||
msgid "Financial and accounting reporting\n"
|
||||
" Fiscal statements\n"
|
||||
" Indicators\n"
|
||||
" "
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: wizard_field:account.account.balancesheet.report,init,fiscalyear:0
|
||||
msgid "Fiscal year"
|
||||
msgstr "Année fiscale"
|
||||
|
||||
#. module: account_report
|
||||
#: selection:account.report.report,type:0
|
||||
msgid "Fiscal Statement"
|
||||
msgstr ""
|
||||
#. module: account_reporting
|
||||
#: view:account.report.bs:0
|
||||
#: field:account.report.bs,account_id:0
|
||||
msgid "Accounts"
|
||||
msgstr "Comptes"
|
||||
|
||||
#. module: account_reporting
|
||||
#: wizard_field:account.account.balancesheet.report,init,periods:0
|
||||
msgid "Periods"
|
||||
msgstr "Périodes"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,color_back:0
|
||||
msgid "Back Color"
|
||||
msgstr "Couleur de fond"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,child_id:0
|
||||
msgid "Children"
|
||||
msgstr "Fils"
|
||||
|
||||
#. module: account_reporting
|
||||
#: wizard_button:account.account.balancesheet.report,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Times-Roman"
|
||||
msgstr "Times-Roman"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,font_style:0
|
||||
msgid "Helvetica-Oblique"
|
||||
msgstr "Helvetica-Oblique"
|
||||
|
||||
#. module: account_reporting
|
||||
#: field:account.report.bs,font_style:0
|
||||
msgid "Font"
|
||||
msgstr "Police"
|
||||
|
||||
#. module: account_reporting
|
||||
#: wizard_view:account.account.balancesheet.report,init:0
|
||||
msgid "Customize Report"
|
||||
msgstr "Personnaliser le Rapport"
|
||||
|
||||
#. module: account_reporting
|
||||
#: selection:account.report.bs,report_type:0
|
||||
msgid "Report Objects With Accounts"
|
||||
msgstr "Rapport des objets avec les comptes"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:37+0000\n"
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<field name="model">account.invoice</field>
|
||||
<field name="inherit_id" ref="account.invoice_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field colspan="4" name="invoice_line" nolabel="1" widget="one2many_list" position="before">
|
||||
<field name="payment_term" position="after">
|
||||
<field name="price_type"/>
|
||||
</field>
|
||||
</field>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:38+0000\n"
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:22+0000\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:05+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-06-12 13:40+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-07-06 13:28+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_iban
|
||||
|
@ -46,12 +46,6 @@ msgstr "BIC"
|
|||
msgid "iban"
|
||||
msgstr "IBAN"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:ir.module.module,shortdesc:base_iban.module_meta_information
|
||||
#: field:res.partner.bank,iban:0
|
||||
msgid "IBAN"
|
||||
msgstr "IBAN"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:res.partner.bank.type,name:base_iban.bank_iban
|
||||
msgid "IBAN Account"
|
||||
|
@ -61,3 +55,9 @@ msgstr "No IBAN du compte"
|
|||
#: model:res.partner.bank.type.field,name:base_iban.bank_acc_number_field
|
||||
msgid "acc_number"
|
||||
msgstr "acc_number"
|
||||
|
||||
#. module: base_iban
|
||||
#: model:ir.module.module,shortdesc:base_iban.module_meta_information
|
||||
#: field:res.partner.bank,iban:0
|
||||
msgid "IBAN"
|
||||
msgstr "IBAN"
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 base_module_quality
|
||||
import wizard
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,51 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
'name': 'Base module quality',
|
||||
'version': '1.0',
|
||||
'category': 'Tiny Specific Modules/Base module 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 criteria such as: the respect of OpenERP coding
|
||||
standards, the speed efficiency...
|
||||
|
||||
This module also provides generic framework to define your own quality test.
|
||||
For further info, coders may take a look into base_module_quality\README.txt
|
||||
|
||||
WARNING: This module can not work as a ZIP file, you must unzip it before
|
||||
using it, otherwise it may crash.
|
||||
""",
|
||||
'author': 'Tiny',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': ['base'],
|
||||
'init_xml': [],
|
||||
'update_xml': ['base_module_quality_wizard.xml', 'base_module_quality_view.xml', 'security/ir.model.access.csv'],
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '0175119475677',
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,250 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
import pooler
|
||||
import osv
|
||||
import tools
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
from osv import osv, fields
|
||||
|
||||
class abstract_quality_check(object):
|
||||
'''
|
||||
This Class provides...
|
||||
'''
|
||||
|
||||
def __init__(self):
|
||||
'''
|
||||
this method should initialize the var
|
||||
'''
|
||||
#This float have to store the rating of the module.
|
||||
#Used to compute the final score (average of all scores).
|
||||
#0 <= self.score <= 1
|
||||
self.score = 0.0
|
||||
|
||||
#This char have to store the name of the test.
|
||||
self.name = ""
|
||||
|
||||
#This char have to store the aim of the test and eventually a note.
|
||||
self.note = ""
|
||||
|
||||
#This char have to store the result.
|
||||
#Used to display the result of the test.
|
||||
self.result = ""
|
||||
|
||||
#This char have to store the result with more details.
|
||||
#Used to provide more details if necessary.
|
||||
self.result_details = ""
|
||||
|
||||
# This boolean variable defines that if you do not want to calculate score and just only need detail
|
||||
# or summary report for some test then you will make it False.
|
||||
self.bool_count_score = True
|
||||
|
||||
#This bool defines if the test can be run only if the module
|
||||
#is installed.
|
||||
#True => the module have to be installed.
|
||||
#False => the module can be uninstalled.
|
||||
self.bool_installed_only = True
|
||||
|
||||
#This variable is used to give result of test more weight,
|
||||
#because some tests are more critical than others.
|
||||
self.ponderation = 1.0
|
||||
|
||||
#Specify test got an error on module
|
||||
self.error = False
|
||||
|
||||
#The tests have to subscribe itselfs in this list, that contains
|
||||
#all the test that have to be performed.
|
||||
self.tests = []
|
||||
self.list_folders = os.listdir(config['addons_path'] +
|
||||
'/base_module_quality/')
|
||||
for item in self.list_folders:
|
||||
self.item = item
|
||||
path = config['addons_path']+'/base_module_quality/'+item
|
||||
if os.path.exists(path + '/' + item + '.py') and item not in ['report', 'wizard', 'security']:
|
||||
item2 = 'base_module_quality.' + item +'.' + item
|
||||
x_module = __import__(item2)
|
||||
x_file = getattr(x_module, item)
|
||||
x_obj = getattr(x_file, item)
|
||||
self.tests.append(x_obj)
|
||||
# raise 'Not Implemented'
|
||||
|
||||
def run_test(self, cr, uid, module_path=""):
|
||||
'''
|
||||
this method should do the test and fill the score, result and result_details var
|
||||
'''
|
||||
raise osv.except_osv(_('Programming Error'), _('Test Is Not Implemented'))
|
||||
|
||||
def get_objects(self, cr, uid, module):
|
||||
# This function returns all object of the given module..
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
ids2 = pool.get('ir.model.data').search(cr, uid,
|
||||
[('module', '=', module), ('model', '=', 'ir.model')])
|
||||
model_list = []
|
||||
model_data = pool.get('ir.model.data').browse(cr, uid, ids2)
|
||||
for model in model_data:
|
||||
model_list.append(model.res_id)
|
||||
obj_list = []
|
||||
for mod in pool.get('ir.model').browse(cr, uid, model_list):
|
||||
obj_list.append(str(mod.model))
|
||||
return obj_list
|
||||
|
||||
def get_model_ids(self, cr, uid, models=[]):
|
||||
# This function returns all ids of the given objects..
|
||||
if not models:
|
||||
return []
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
return pool.get('ir.model').search(cr, uid, [('model', 'in', models)])
|
||||
|
||||
def get_ids(self, cr, uid, object_list):
|
||||
#This method return dictionary with ids of records of object for module
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
result_ids = {}
|
||||
for obj in object_list:
|
||||
ids = pool.get(obj).search(cr, uid, [])
|
||||
ids = filter(lambda id: id != None, ids)
|
||||
result_ids[obj] = ids
|
||||
return result_ids
|
||||
|
||||
def format_table(self, header=[], data_list={}): #This function can work forwidget="text_wiki"
|
||||
detail = ""
|
||||
detail += (header[0]) % tuple(header[1])
|
||||
frow = '\n|-'
|
||||
for i in header[1]:
|
||||
frow += '\n| %s'
|
||||
for key, value in data_list.items():
|
||||
detail += (frow) % tuple(value)
|
||||
detail = detail + '\n|}'
|
||||
return detail
|
||||
|
||||
def format_html_table(self, header=[], data_list=[]): #This function can work for widget="html_tag"
|
||||
# function create html table....
|
||||
detail = ""
|
||||
detail += (header[0]) % tuple(header[1])
|
||||
frow = '<tr>'
|
||||
for i in header[1]:
|
||||
frow += '<td>%s</td>'
|
||||
frow += '</tr>'
|
||||
for key, value in data_list.items():
|
||||
detail += (frow) % tuple(value)
|
||||
return detail
|
||||
|
||||
def add_quatation(self, x_no, y_no):
|
||||
return x_no/y_no
|
||||
|
||||
class module_quality_check(osv.osv):
|
||||
_name = 'module.quality.check'
|
||||
_columns = {
|
||||
'name': fields.char('Rated Module', size=64, ),
|
||||
'final_score': fields.char('Final Score (%)', size=10,),
|
||||
'check_detail_ids': fields.one2many('module.quality.detail', 'quality_check_id', 'Tests',)
|
||||
}
|
||||
|
||||
def check_quality(self, cr, uid, module_name, module_state=None):
|
||||
'''
|
||||
This function will calculate score of openerp module
|
||||
It will return data in below format:
|
||||
Format: {'final_score':'80.50', 'name': 'sale',
|
||||
'check_detail_ids':
|
||||
[(0,0,{'name':'workflow_test', 'score':'100', 'ponderation':'0', 'summary': text_wiki format data, 'detail': html format data, 'state':'done', 'note':'XXXX'}),
|
||||
((0,0,{'name':'terp_test', 'score':'60', 'ponderation':'1', 'summary': text_wiki format data, 'detail': html format data, 'state':'done', 'note':'terp desctioption'}),
|
||||
..........]}
|
||||
So here the detail result is in html format and summary will be in text_wiki format.
|
||||
'''
|
||||
#list_folders = os.listdir(config['addons_path']+'/base_module_quality/')
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
obj_module = pool.get('ir.module.module')
|
||||
if not module_state:
|
||||
module_id = obj_module.search(cr, uid, [('name', '=', module_name)])
|
||||
if module_id:
|
||||
module_state = obj_module.browse(cr, uid, module_id[0]).state
|
||||
|
||||
abstract_obj = abstract_quality_check()
|
||||
score_sum = 0.0
|
||||
ponderation_sum = 0.0
|
||||
create_ids = []
|
||||
for test in abstract_obj.tests:
|
||||
ad = tools.config['addons_path']
|
||||
if module_name == 'base':
|
||||
ad = tools.config['root_path']+'/addons'
|
||||
module_path = os.path.join(ad, module_name)
|
||||
val = test.quality_test()
|
||||
if not val.bool_installed_only or module_state == "installed":
|
||||
val.run_test(cr, uid, str(module_path))
|
||||
if not val.error:
|
||||
data = {
|
||||
'name': val.name,
|
||||
'score': val.score * 100,
|
||||
'ponderation': val.ponderation,
|
||||
'summary': val.result,
|
||||
'detail': val.result_details,
|
||||
'state': 'done',
|
||||
'note': val.note,
|
||||
}
|
||||
if val.bool_count_score:
|
||||
score_sum += val.score * val.ponderation
|
||||
ponderation_sum += val.ponderation
|
||||
else:
|
||||
data = {
|
||||
'name': val.name,
|
||||
'score': 0,
|
||||
'summary': val.result,
|
||||
'state': 'skipped',
|
||||
'note': val.note,
|
||||
}
|
||||
else:
|
||||
data = {
|
||||
'name': val.name,
|
||||
'note': val.note,
|
||||
'score': 0,
|
||||
'state': 'skipped',
|
||||
'summary': _("The module has to be installed before running this test.")
|
||||
}
|
||||
create_ids.append((0, 0, data))
|
||||
|
||||
final_score = '%.2f' % (score_sum / ponderation_sum * 100)
|
||||
data = {
|
||||
'name': module_name,
|
||||
'final_score': final_score,
|
||||
'check_detail_ids' : create_ids,
|
||||
}
|
||||
return data
|
||||
|
||||
module_quality_check()
|
||||
|
||||
class module_quality_detail(osv.osv):
|
||||
_name = 'module.quality.detail'
|
||||
_columns = {
|
||||
'quality_check_id': fields.many2one('module.quality.check', 'Quality'),
|
||||
'name': fields.char('Name',size=128,),
|
||||
'score': fields.float('Score (%)'),
|
||||
'ponderation': fields.float('Ponderation', help='Some tests are more critical than others, so they have a bigger weight in the computation of final rating'),
|
||||
'note': fields.text('Note',),
|
||||
'summary': fields.text('Summary'),
|
||||
'detail': fields.text('Details'),
|
||||
'state': fields.selection([('done','Done'),('skipped','Skipped'),], 'State', size=6, help='The test will be completed only if the module is installed or if the test may be processed on uninstalled module.'),
|
||||
}
|
||||
|
||||
module_quality_detail()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_wizard_quality_check_tree" model="ir.ui.view">
|
||||
<field name="name">Results of Quality Checks</field>
|
||||
<field name="model">module.quality.check</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Result">
|
||||
<field name="name"/>
|
||||
<field name="final_score"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_wizard_quality_check_form" model="ir.ui.view">
|
||||
<field name="name">Results of Quality Checks</field>
|
||||
<field name="model">module.quality.check</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Result">
|
||||
<field name="name" readonly="1" search="1"/>
|
||||
<field name="final_score" readonly="1" search="1"/>
|
||||
<separator colspan="4" string="Tests"/>
|
||||
<field name="check_detail_ids" nolabel="1" colspan="4" height="350" width="800" readonly="1">
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_wizard_quality_detail_form" model="ir.ui.view">
|
||||
<field name="name">Results of Quality Checks with detail</field>
|
||||
<field name="model">module.quality.detail</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Result">
|
||||
<notebook>
|
||||
<page string="Summary">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="score" readonly="1"/>
|
||||
<field name="note" readonly="1" colspan="4"/>
|
||||
<field name="summary" widget="text_wiki" nolabel="1" colspan="4" height="350" width="800" readonly="1"/>
|
||||
|
||||
<field name="ponderation" readonly="1"/>
|
||||
<field name="state" readonly="1"/>
|
||||
</page>
|
||||
<page string="Detail">
|
||||
<button name="%(quality_detail_save)d" string="Save Report" type="action"/>
|
||||
<field name="detail" widget="text_html" nolabel="1" colspan="4" readonly="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_wizard_quality_detail_tree" model="ir.ui.view">
|
||||
<field name="name">Results of Quality Checks with detail</field>
|
||||
<field name="model">module.quality.detail</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Result" limit="80" min_rows="9" >
|
||||
<field name="name" required="1"/>
|
||||
<field name="state"/>
|
||||
<field name="score" required="1"/>
|
||||
<field name="ponderation"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<wizard id="quality_detail_save" model="ir.module.module" name="quality_detail_save" string="Report Save" menu="False"/>
|
||||
|
||||
<wizard string="Quality Check"
|
||||
model="ir.module.module"
|
||||
name="create_quality_check_wiz"
|
||||
id="create_quality_check_id"
|
||||
menu="True"/>
|
||||
</data>
|
||||
</openerp>
|
Binary file not shown.
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:00:15+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:00:15+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:18:25+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:18:25+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: base_module_quality
|
||||
#: field:quality.check.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:quality.check.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:quality.check.detail,detail:0
|
||||
#: view:quality.check.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:wizard.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "quality.check.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:wizard.quality.check:0
|
||||
#: view:quality.check.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "wizard.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:wizard.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:quality.check.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:00:56+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:00:56+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Невалиден XML за преглед на архитектурата"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Името на обекта трябва да започва с \"x_\" и да не съдържа никакви специални символи!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:17:41+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:17:41+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Neodgovarajući XML za arhitekturu prikaza!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:01:35+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:01:35+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML invàlid per a la definició de la vista!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "El nom de l'objecte ha de començar amb x_ i no contenir cap caràcter especial!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:04:15+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:04:15+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:06:58+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:06:58+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:13:59+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:13:59+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:14:45+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:14:45+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "¡XML inválido para la definición de la vista!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter especial!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:05:36+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:05:36+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Vigane vaate arhitektuuri XML!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Objekti nimi peab algama x_'ga ja ei tohi sisaldada ühtegi erisümbolit !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:06:17+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:06:17+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valide pour l'architecture de la vue"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: 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 !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:03:35+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:03:35+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:07:39+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:07:39+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:08:21+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:08:21+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valido per Visualizzazione Architettura!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Il nome oggetto deve iniziare con x_ e non può contenere caratteri speciali !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:09:02+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:09:02+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:04:56+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:04:56+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Ongeldige XML voor weergave opbouw"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:09:43+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:09:43+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML niewłaściwy dla tej architektury wyświetlania!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków specjalnych !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:10:25+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:10:25+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Invalido XML para Arquitetura da View"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "O nome do objeto precisa iniciar com x_ e não conter nenhum caracter especial!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:11:07+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:11:07+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML inválido para a arquitectura de vista"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "O nome do objecto deve começar com x_ e não pode conter um caracter especial!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:11:49+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:11:49+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:12:32+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:12:32+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Неправильный XML для просмотра архитектуры!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Название объекта должно начинаться с x_ и не должно содержать специальных символов !"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:13:15+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:13:15+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Neveljaven XML za arhitekturo pogleda."
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Naziv objekta se mora začeti z 'x_' in ne sme vsebovati posebnih znakov."
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:15:28+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:15:28+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:16:12+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:16:12+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Görüntüleme mimarisi için Geçersiz XML"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:16:57+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:16:57+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "Неправильний XML для Архітектури Вигляду!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr "Назва об'єкту має починатися з x_ і не містити ніяких спеціальних символів!"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:02:15+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:02:15+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file containt the translation of the following modules:
|
||||
# * base_module_quality
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-01-03 02:02:55+0000\n"
|
||||
"PO-Revision-Date: 2009-01-03 02:02:55+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: base_module_quality
|
||||
#: field:module.quality.detail,general_info:0
|
||||
msgid "General Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,detail:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,verbose_detail:0
|
||||
msgid "Verbose Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_quality_check_detail
|
||||
msgid "module.quality.detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_wizard_quality_check
|
||||
msgid "module.quality.check"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.check:0
|
||||
msgid "Verbose detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,85 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from tools.translate import _
|
||||
|
||||
from base_module_quality import base_module_quality
|
||||
import pooler
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Method Test")
|
||||
self.note = _("""
|
||||
This test checks if the module classes are raising exception when calling basic methods or not.
|
||||
""")
|
||||
self.bool_installed_only = True
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
module_name = module_path.split('/')[-1]
|
||||
obj_list = self.get_objects(cr, uid, module_name)
|
||||
result_dict = {}
|
||||
if not obj_list:
|
||||
self.error = True
|
||||
self.result = _("Module has no objects")
|
||||
return None
|
||||
ok_count = 0
|
||||
ex_count = 0
|
||||
for obj in obj_list:
|
||||
temp = [obj]
|
||||
try:
|
||||
pool.get(obj).search(cr, uid, [])
|
||||
temp.append(_('Ok'))
|
||||
ok_count += 1
|
||||
except:
|
||||
temp.append(_('Exception'))
|
||||
ex_count += 1
|
||||
try:
|
||||
pool.get(obj).fields_view_get(cr, uid,)
|
||||
temp.append(_('Ok'))
|
||||
ok_count += 1
|
||||
except:
|
||||
temp.append(_('Exception'))
|
||||
ex_count += 1
|
||||
try:
|
||||
pool.get(obj).read(cr, uid, [])
|
||||
temp.append(_('Ok'))
|
||||
ok_count += 1
|
||||
except:
|
||||
temp.append(_('Exception'))
|
||||
ex_count += 1
|
||||
result_dict[obj] = temp
|
||||
self.score = (ok_count + ex_count) and float(ok_count)/float(ok_count + ex_count) or 0.0
|
||||
self.result = self.get_result(result_dict)
|
||||
return None
|
||||
|
||||
def get_result(self, dict_method):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-16s \n! %-20s \n! %-16s ', [_('Object Name'), 'search()', 'fields_view_get()', 'read()'])
|
||||
detail = ""
|
||||
if not self.error:
|
||||
detail += self.format_table(header, dict_method)
|
||||
return detail
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,209 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
import re
|
||||
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
import pooler
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Object Test")
|
||||
self.note = _("""
|
||||
Test checks for fields, views, security rules, dependancy level
|
||||
""")
|
||||
self.bool_installed_only = True
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
module_name = module_path.split('/')[-1]
|
||||
obj_list = self.get_objects(cr, uid, module_name)
|
||||
ids_model = self.get_model_ids(cr, uid, obj_list)
|
||||
result_security = {}
|
||||
|
||||
if obj_list: # if module has no new created classes skipp fields, views, security tests
|
||||
field_obj = pool.get('ir.model.fields')
|
||||
view_obj = pool.get('ir.ui.view')
|
||||
access_obj = pool.get('ir.model.access')
|
||||
|
||||
field_ids = field_obj.search(cr, uid, [('model', 'in', obj_list)])
|
||||
view_ids = view_obj.search(cr, uid, [('model', 'in', obj_list), ('type', 'in', ['tree', 'form'])])
|
||||
access_ids = access_obj.search(cr, uid, [('model_id', 'in', ids_model)])
|
||||
|
||||
field_data = field_obj.browse(cr, uid, field_ids)
|
||||
view_data = view_obj.browse(cr, uid, view_ids)
|
||||
access_data = access_obj.browse(cr, uid, access_ids)
|
||||
|
||||
result_dict = {}
|
||||
result_view = {}
|
||||
good_field = 0
|
||||
total_field = 0
|
||||
|
||||
# field test .....
|
||||
for field in field_data:
|
||||
result_dict[field.model] = []
|
||||
for field in field_data:
|
||||
ttype = field.ttype
|
||||
name = field.name
|
||||
total_field += 1
|
||||
check_str = re.compile('[a-z]+[\w_]*$') #re.compile('[a-z]+[_]?[a-z]+$')
|
||||
if ttype == 'many2one':
|
||||
if name.split('_')[-1] == 'id':
|
||||
good_field += 1
|
||||
else:
|
||||
data = 'many2one field should end with _id'
|
||||
result_dict[field.model].append([field.model, name, data])
|
||||
elif ttype in ['many2many', 'one2many']:
|
||||
if name.split('_')[-1] == 'ids':
|
||||
good_field += 1
|
||||
else:
|
||||
data = '%s field should end with _ids'% (ttype)
|
||||
result_dict[field.model].append([field.model, name, data])
|
||||
elif check_str.match(name):
|
||||
good_field += 1
|
||||
else:
|
||||
data = 'Field name should be in lower case or it should follow python standard'
|
||||
result_dict[field.model].append([field.model, name, data])
|
||||
|
||||
#views tests
|
||||
for res in result_dict.keys():
|
||||
if not result_dict[res]:
|
||||
del result_dict[res]
|
||||
view_dict = {}
|
||||
total_views = len(obj_list) * 2
|
||||
model_views = 0
|
||||
for view in view_data:
|
||||
view_dict[view.model] = []
|
||||
model_views += 1
|
||||
for view in view_data:
|
||||
ttype = view.type
|
||||
view_dict[view.model].append(ttype)
|
||||
for view in view_dict:
|
||||
if len(view_dict[view]) < 2:
|
||||
model_views -= 1
|
||||
result_view[view] = [view, 'You should have atleast form/tree view of an object']
|
||||
if model_views > total_views:
|
||||
model_views = total_views
|
||||
|
||||
#security rules test...
|
||||
list_files = os.listdir(module_path)
|
||||
security_folder = False
|
||||
for file_sec in list_files:
|
||||
if file_sec == 'security':
|
||||
path = os.path.join(module_path, file_sec)
|
||||
if os.path.isdir(path):
|
||||
security_folder = True
|
||||
if not security_folder:
|
||||
result_security[module_name] = [module_name, 'Security folder is not available (All security rules and groups should define in security folder)']
|
||||
access_list = []
|
||||
good_sec = len(obj_list)
|
||||
bad_sec = 0
|
||||
for access in access_data:
|
||||
access_list.append(access.model_id.model)
|
||||
if not access.group_id:
|
||||
result_security[access.model_id.model] = [access.model_id.model, 'Specified object has no related group define on access rules']
|
||||
bad_sec += 1 # to be check
|
||||
not_avail_access = filter(lambda x: not x in access_list, obj_list)
|
||||
for obj in not_avail_access:
|
||||
bad_sec += 1
|
||||
result_security[obj] = [obj, 'Object should have at least one security rule defined on it']
|
||||
|
||||
# Dependacy test of module
|
||||
module_obj = pool.get('ir.module.module')
|
||||
module_ids = module_obj.search(cr, uid, [('name', '=', module_name)])
|
||||
module_data = module_obj.browse(cr, uid, module_ids)
|
||||
depend_list = []
|
||||
depend_check = []
|
||||
remove_list = []
|
||||
for depend in module_data[0].dependencies_id:
|
||||
depend_list.append(depend.name)
|
||||
module_ids = module_obj.search(cr, uid, [('name', 'in', depend_list)])
|
||||
module_data = module_obj.browse(cr, uid, module_ids)
|
||||
for data in module_data:
|
||||
for check in data.dependencies_id:
|
||||
depend_check.append(check.name)
|
||||
for dep in depend_list:
|
||||
if dep in depend_check and not dep in remove_list:
|
||||
remove_list.append(str(dep))
|
||||
if remove_list:
|
||||
result_security[module_name] = [remove_list, 'Unnecessary dependacy should be removed please Provide only highest requirement level']
|
||||
bad_depend = len(remove_list)
|
||||
|
||||
if not obj_list:
|
||||
score_depend = (100 - (bad_depend * 5)) / 100.0 # note : score is calculated based on if you have for e.g. two module extra in dependancy it will score -10 out of 100
|
||||
self.score = score_depend
|
||||
self.result = self.get_result({ module_name: ['No object found', 'No object found', 'No object found', int(score_depend * 100)]})
|
||||
self.result_details += self.get_result_general(result_security, name="General")
|
||||
return None
|
||||
|
||||
score_view = total_views and float(model_views) / float(total_views)
|
||||
score_field = total_field and float(good_field) / float(total_field)
|
||||
score_depend = (100 - (bad_depend * 5)) / 100.0 # note : score is calculated based on if you have for e.g. two module extra in dependancy it will score -10 out of 100
|
||||
score_security = good_sec and float(good_sec - bad_sec) / float(good_sec)
|
||||
self.score = (score_view + score_field + score_security + score_depend) / 4
|
||||
self.result = self.get_result({ module_name: [int(score_field * 100), int(score_view * 100), int(score_security * 100), int(score_depend * 100)]})
|
||||
self.result_details += self.get_result_details(result_dict)
|
||||
self.result_details += self.get_result_general(result_view, name="View")
|
||||
self.result_details += self.get_result_general(result_security, name="General")
|
||||
return None
|
||||
|
||||
def get_result(self, dict_obj):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-40s \n! %-40s \n! %-10s \n', [_('Result of fields in %'), _('Result of views in %'), _('Result of Security in %'), _('Result of dependancy in %')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_obj)
|
||||
return ""
|
||||
|
||||
def get_result_details(self, dict_obj):
|
||||
res = ""
|
||||
if dict_obj != {}:
|
||||
str_html = '''<html><strong> Fields Result</strong><head></head><body>'''
|
||||
res += str_html
|
||||
header = ('<tr><th width="200">%s</th><th width="200">%s</th><th width="300">%s</th></tr>', [_('Object Name'), _('Field name'), _('Suggestion')])
|
||||
if not self.error:
|
||||
for key in dict_obj.keys():
|
||||
data_list = []
|
||||
final_dict = {}
|
||||
data_list = dict_obj[key]
|
||||
count = 0
|
||||
for i in data_list:
|
||||
count = count + 1
|
||||
final_dict[key + str(count)] = i
|
||||
res += '<table>' + self.format_html_table(header, data_list=final_dict) + '</table><br>'
|
||||
return res + '</body></html>'
|
||||
return ""
|
||||
|
||||
def get_result_general(self, dict_obj, name=''):
|
||||
str_html = '''<html><strong> %s Result</strong><head></head><body><table>'''% (name)
|
||||
header = ('<tr><th>%s</th><th>%s</th></tr>', [_('Object Name'), _('Suggestion')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_obj) + '</table></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,278 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("PEP-8 Test")
|
||||
self.note = _("""
|
||||
PEP-8 Test , copyright of py files check, method can not call from loops
|
||||
""")
|
||||
self.bool_installed_only = False
|
||||
self.bad_standard = 0
|
||||
self.good_standard = 0
|
||||
self.result_py = {}
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
list_files = os.listdir(module_path)
|
||||
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))
|
||||
py_list = []
|
||||
for file_py in list_files:
|
||||
if file_py.split('.')[-1] == 'py' and not file_py.endswith('__init__.py') and not file_py.endswith('__terp__.py'):
|
||||
file_path = os.path.join(module_path, file_py)
|
||||
py_list.append(file_path)
|
||||
|
||||
open_files = map(lambda x: open(x, 'r'), py_list)
|
||||
if not py_list:
|
||||
self.error = True
|
||||
self.result = _("No python file found")
|
||||
return None
|
||||
|
||||
#below functions check:
|
||||
|
||||
#1. Imports should usually be on separate lines
|
||||
#2. Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants
|
||||
self.check_import(open_files)
|
||||
|
||||
#1. there should be a one space after , : ;
|
||||
self.check_space(open_files)
|
||||
|
||||
#1. Have all the .py files a copyright?
|
||||
self.check_licence(open_files)
|
||||
|
||||
#1. Does the module avoid unecessary queries like when we put a browse into a loop?
|
||||
self.check_loop(open_files)
|
||||
|
||||
#1.More than one space around an assignment (or other) operator to align it with another.
|
||||
# self.check_space_operator(open_files)
|
||||
|
||||
#1. For sequences, (strings, lists, tuples), use the fact that empty sequences are false
|
||||
#for e.g : if seq: => good & if len(seq): => not good
|
||||
self.check_len(open_files)
|
||||
|
||||
# below function checks
|
||||
# 1. Don't compare boolean values to True or False using == and !=
|
||||
self.check_boolean(open_files)
|
||||
|
||||
self.score = self.good_standard and float(self.good_standard) / float(self.good_standard + self.bad_standard)
|
||||
self.result = self.get_result({ module_path: [int(self.score * 100)]})
|
||||
self.result_details += self.get_result_general(self.result_py)
|
||||
return None
|
||||
|
||||
def check_import(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
class_or_def = False
|
||||
line_counter = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
while True:
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
if ((line.find('class') > -1) or (line.find('def') > -1)):
|
||||
class_or_def = True
|
||||
import_found = line.find('import')
|
||||
comment_found = line.find('#')
|
||||
if comment_found == -1 and import_found != -1:
|
||||
self.good_standard += 1
|
||||
if (class_or_def):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, 'Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants']
|
||||
if (line.find('from') < 0 and line.find(',') != -1):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, 'Imports should usually be on separate lines']
|
||||
|
||||
def check_licence(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
bad_position = False
|
||||
copyright_found = False
|
||||
gnu_found = False
|
||||
license_found = False
|
||||
gnu_website_found = False
|
||||
line_counter = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
while True:
|
||||
declaration = False
|
||||
flag = False
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
if ((line.find('class') > -1) or (line.find('def') > -1) or (line.find('import') > -1)):
|
||||
bad_position = True
|
||||
comment_found = line.find('#')
|
||||
copyright_found = line.find('Copyright')
|
||||
gnu_found = line.find('GNU')
|
||||
license_found = line.find('License')
|
||||
gnu_website_found = line.find('www.gnu.org/licenses')
|
||||
if ((copyright_found > -1) or (gnu_found > -1) or (license_found > -1) or (gnu_website_found > -1)):
|
||||
self.good_standard += 1
|
||||
declaration = True
|
||||
flag = True
|
||||
break
|
||||
if (comment_found > -1) and bad_position and declaration:
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, 'Declaration of copyright must be at the top of file']
|
||||
break
|
||||
if bad_position and (not flag):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name] = [file_name, '--', 'File is not copyright']
|
||||
|
||||
def check_loop(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
methods = ['browse', 'search', 'read', 'copy', 'unlink']
|
||||
place_for = 1000
|
||||
file_name = py.name.split('/')[-1]
|
||||
line_counter = 0
|
||||
counter = 0
|
||||
while True:
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
place_method = 0
|
||||
for i in line :
|
||||
if (i == ' '):
|
||||
place_method += 1
|
||||
elif (i != ' '):
|
||||
break
|
||||
elif (place_method > 100):
|
||||
break
|
||||
if (line.find('for') > -1):
|
||||
place_for = place_method
|
||||
if (place_for < place_method):
|
||||
counter += 1
|
||||
for method in methods:
|
||||
got = line.find(method)
|
||||
if(got > -1):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, 'puting method inside loop is not good']
|
||||
self.good_standard += counter
|
||||
|
||||
def check_space(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
counter_line = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
counter = 0
|
||||
while True:
|
||||
counter_line += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
pos_comma = line.find(',')
|
||||
pos_semicolon = line.find(';')
|
||||
pos_colon = line.find(':')
|
||||
space_find = -1
|
||||
if (pos_comma != -1 or pos_semicolon != -1 or pos_colon != -1):
|
||||
counter += 1
|
||||
for i in line:
|
||||
space_find += 1
|
||||
if (i == ' '):
|
||||
if ((space_find + 1) == pos_comma) or ((space_find + 1) == pos_semicolon) or ((space_find + 1) == pos_colon):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(counter_line)] = [file_name, counter_line, 'You should not have space before (: ; ,)']
|
||||
self.good_standard += counter # to be check
|
||||
|
||||
|
||||
def check_space_operator(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
space_counter = 0
|
||||
eq_found = False
|
||||
operator_found = False
|
||||
line_counter = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
while True:
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
for counter in line:
|
||||
if (counter == ' '):
|
||||
space_counter += 1
|
||||
else:
|
||||
if (space_counter > 1):
|
||||
if counter in ['=', '<', '>', '!', '+', '-', '*', '/', '^', '%'] or operator_found:
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, 'More than one space around an assignment (or other) operator to align it with another']
|
||||
operator_found = False
|
||||
space_counter = 0
|
||||
if counter in ['=', '<', '>', '!', '+', '-', '*', '/', '^', '%']:
|
||||
self.good_standard += 1
|
||||
operator_found = True
|
||||
|
||||
def check_len(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
line_counter = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
while True:
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
if (line.find('if') > -1) and (line.find('len(') > -1) and (line.find(')') > -1):
|
||||
self.good_standard += 1
|
||||
if (line.find(':') > -1) and not line.find('<') > -1 and not line.find('>') > -1 and not line.find('=') > -1 and not line.find('!') > -1 :
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, ' For sequences, (strings, lists, tuples), use the fact that empty sequences are false']
|
||||
|
||||
|
||||
def check_boolean(self, open_files):
|
||||
for py in open_files:
|
||||
py.seek(0)
|
||||
line_counter = 0
|
||||
file_name = py.name.split('/')[-1]
|
||||
while True:
|
||||
line_counter += 1
|
||||
line = py.readline()
|
||||
if not line: break
|
||||
if (line.find('if') > -1):
|
||||
self.good_standard += 1
|
||||
if ((line.find('==') > -1) or (line.find('!=') > -1)) and ((line.find('True') > -1) or (line.find('False') > -1)):
|
||||
self.bad_standard += 1
|
||||
self.result_py[file_name + str(line_counter)] = [file_name, line_counter, "Don't compare boolean values to True or False using == or !="]
|
||||
|
||||
def get_result(self, dict_obj):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n', [_('Result of pep8_test in %')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_obj)
|
||||
return ""
|
||||
|
||||
def get_result_general(self, dict_obj):
|
||||
str_html = '''<html><strong>Result</strong><head></head><body><table>'''
|
||||
header = ('<tr><th>%s</th><th>%s</th><th>%s</th></tr>', [_('Object Name'), _('Line number'), _('Suggestion')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_obj) + '</table></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,129 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Pyflakes Test")
|
||||
self.note = _("""This test uses Pyflakes to analyze Python programs and detect various errors. It works by parsing the source file, not importing it. See http://www.divmod.org/trac/wiki/DivmodPyflakes for further info.\n (This test score does not effect final score) """)
|
||||
self.bool_installed_only = False
|
||||
self.bool_count_score = False #This test display on report (summary/detail) does not count score
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
list_files = os.listdir(module_path)
|
||||
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_py = {}
|
||||
flag = False
|
||||
self.result_details += '''<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="/tg_widgets/openerp/css/wiki.css" media="all">
|
||||
</head>
|
||||
<body><table><tr><b>Report</b>'''
|
||||
for file_py in list_files:
|
||||
if file_py.split('.')[-1] == 'py' and not file_py.endswith('__init__.py') and not file_py.endswith('__terp__.py'):
|
||||
if not flag:
|
||||
flag = True
|
||||
file_path = os.path.join(module_path, file_py)
|
||||
try:
|
||||
try:
|
||||
import pyflakes
|
||||
res = os.popen('pyflakes' + ' ' + file_path).read()
|
||||
except:
|
||||
self.error = True
|
||||
import netsvc
|
||||
netsvc.Logger().notifyChannel('Pyflakes', netsvc.LOG_WARNING, "Is pyflakes correctly installed? (http://pypi.python.org/pypi/pyflakes/0.3.0)")
|
||||
self.result += _("Error! Is pyflakes correctly installed? (http://pypi.python.org/pypi/pyflakes/0.3.0)")+"\n"
|
||||
return None
|
||||
if not res:
|
||||
continue
|
||||
self.result_details += '''<table border="2" bordercolor="black" width="100%" align="center"><tr><td width="30%"> ''' + file_py + '</td><td width="70%"><table border=2 bordercolor=black >'
|
||||
list_res = res.split('\n')
|
||||
temp_dict = {}
|
||||
keys = ['imported but unused statements', 'unable to detect undefined names', \
|
||||
'undefined name', 'redefinition of unused from line', \
|
||||
'import shadowed by loop variable', 'local variables referenced before assignment', \
|
||||
'duplicate argument in function definition', 'redefinition of function from line', \
|
||||
'future import after other statements']
|
||||
map(lambda key:temp_dict.setdefault(key, 0), keys)
|
||||
detail_str = ''
|
||||
for line in list_res:
|
||||
self.result_details += '''<tr><td width="100%"> ''' + line + '</td></tr>'
|
||||
detail_str += line + '\n'
|
||||
if line.find("imported but unused") != -1:
|
||||
temp_dict['imported but unused statements'] += 1
|
||||
elif line.find("*' used; unable to detect undefined names") != -1:
|
||||
temp_dict['unable to detect undefined names'] += 1
|
||||
elif line.find("undefined name") != -1:
|
||||
temp_dict['undefined name'] += 1
|
||||
elif line.find("redefinition of unused") != -1:
|
||||
temp_dict['redefinition of unused from line'] += 1
|
||||
elif line.find("shadowed by loop variable") != -1:
|
||||
temp_dict['import shadowed by loop variable'] += 1
|
||||
elif line.find("referenced before assignment") != -1:
|
||||
temp_dict['local variables referenced before assignment'] += 1
|
||||
elif line.find("in function definition") != -1:
|
||||
temp_dict['duplicate argument in function definition'] += 1
|
||||
elif line.find("redefinition of function") != -1:
|
||||
temp_dict['redefinition of function from line'] += 1
|
||||
elif line.find("after other statements") != -1:
|
||||
temp_dict['future import after other statements'] += 1
|
||||
final_str = '\n'
|
||||
for t in temp_dict:
|
||||
if str(temp_dict[t]) != '0':
|
||||
final_str += '\n' + str(t) + ' : ' + str(temp_dict[t]) + '\n'
|
||||
except:
|
||||
self.error = True
|
||||
self.result += _("Error in running pyflakes") + "\n"
|
||||
return None
|
||||
try:
|
||||
dict_py[file_py] = [file_py, final_str]
|
||||
except:
|
||||
dict_py[file_py] = [file_py, _("Unable to parse the result. Check the details.")]
|
||||
self.result_details += '</table></td>'
|
||||
if not flag:
|
||||
self.error = True
|
||||
self.result = _("No python file found")
|
||||
return None
|
||||
self.result_details += '</tr></table></body></html>'
|
||||
self.score = 0
|
||||
self.result = self.get_result(dict_py)
|
||||
return None
|
||||
|
||||
def get_result(self, dict_py):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n', [_('File Name'), _('Result')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_py)
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,26 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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:
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Pylint Test")
|
||||
self.note = _("""This test uses Pylint and checks if the module satisfies the coding standard of Python. See http://www.logilab.org/project/name/pylint for further info.\n """)
|
||||
self.bool_installed_only = False
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
config_file_path = config['addons_path']+'/base_module_quality/pylint_test/pylint_test_config.txt'
|
||||
list_files = os.listdir(module_path)
|
||||
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))
|
||||
|
||||
count = 0
|
||||
score = 0.0
|
||||
dict_py = {}
|
||||
flag = False
|
||||
self.result_details += '''<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" href="/tg_widgets/openerp/css/wiki.css" media="all">
|
||||
</head>
|
||||
<body>'''
|
||||
for file_py in list_files:
|
||||
if file_py.split('.')[-1] == 'py' and not file_py.endswith('__init__.py') and not file_py.endswith('__terp__.py'):
|
||||
if not flag:
|
||||
flag = True
|
||||
file_path = os.path.join(module_path, file_py)
|
||||
try:
|
||||
import pylint
|
||||
res = os.popen('pylint --rcfile=' + config_file_path + ' ' + file_path).read()
|
||||
except:
|
||||
self.error = True
|
||||
import netsvc
|
||||
netsvc.Logger().notifyChannel('Pylint:', netsvc.LOG_WARNING, "Is pylint correctly installed? (http://pypi.python.org/pypi/pylint)")
|
||||
self.result += _("Error. Is pylint correctly installed? (http://pypi.python.org/pypi/pylint)")+"\n"
|
||||
return None
|
||||
count += 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
|
||||
try:
|
||||
# score += float(res[leftchar+1:rightchar])
|
||||
scr = res.split("Your code has been rated at")[1].split("</div>")[0].split("/")[0]
|
||||
score += float(scr)
|
||||
#self.result += file + ": " + res[leftchar+1:rightchar] + "/10\n"
|
||||
dict_py[file_py] = [file_py, scr]
|
||||
except:
|
||||
score += 0
|
||||
#self.result += file + ": "+_("Unable to parse the result. Check the details.")+"\n"
|
||||
dict_py[file_py] = [file_py, _("Unable to parse the result. Check the details.")]
|
||||
self.result_details += res.replace('''<div''', '''<div class="wikiwidget readonlyfield"''')
|
||||
|
||||
if not flag:
|
||||
self.error = True
|
||||
self.result = _("No python file found")
|
||||
return None
|
||||
self.result_details += '</body></html>'
|
||||
average_score = count and score / count or score
|
||||
self.score = (max(average_score, 0)) / 10
|
||||
self.result = self.get_result(dict_py)
|
||||
return None
|
||||
|
||||
def get_result(self, dict_py):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n', [_('File Name'), _('Result (/10)')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_py)
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,308 @@
|
|||
# lint Python modules using external checkers.
|
||||
#
|
||||
# This is the main checker controlling 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=C0103,F0401,E0611,R0903,W0232,W0102,E1002,R0913,R0904
|
||||
|
||||
[REPORTS]
|
||||
|
||||
# set the output format. Available formats are text, parseable, colorized and
|
||||
# html
|
||||
output-format=html
|
||||
|
||||
# Include message's id in output
|
||||
include-ids=yes
|
||||
|
||||
# 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=' '
|
||||
#indent-string="\t"
|
||||
|
||||
|
||||
# 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
|
|
@ -0,0 +1,3 @@
|
|||
"id","name","model_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_module_quality_check","module.quality.check","model_module_quality_check",1,1,1,1
|
||||
"access_module_quality_detail","module.quality.detail","model_module_quality_detail",1,1,1,1
|
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,125 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
import pooler
|
||||
|
||||
from base_module_quality import base_module_quality
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.bool_installed_only = True
|
||||
self.name = _("Speed Test")
|
||||
self.note = _("""
|
||||
This test checks the speed of the module. Note that at least 5 demo data is needed in order to run it.
|
||||
|
||||
""")
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
module_name = module_path.split('/')[-1]
|
||||
obj_list = self.get_objects(cr, uid, module_name)
|
||||
|
||||
# remove osv_memory class becaz it does not have demo data
|
||||
if obj_list:
|
||||
cr.execute("select w.res_model from ir_actions_todo as t left join ir_act_window as w on t.action_id=w.id where w.res_model in ('%s')"% ("','".join(obj_list)))
|
||||
res = cr.fetchall()
|
||||
for remove_obj in res:
|
||||
if remove_obj and (remove_obj[0] in obj_list):
|
||||
obj_list.remove(remove_obj[0])
|
||||
|
||||
result_dict2 = {}
|
||||
if not obj_list:
|
||||
self.error = True
|
||||
self.result += _("Given module has no objects.Speed test can work only when new objects are created in the module along with demo data")
|
||||
return None
|
||||
obj_counter = 0
|
||||
score = 0.0
|
||||
obj_ids = self.get_ids(cr, uid, obj_list)
|
||||
result_dict = {}
|
||||
result_dict2 = {}
|
||||
self.result_details += _("<html>O(1) means that the number of SQL requests to read the object does not depand on the number of objects we are reading. This feature is hardly wished.\n</html>")
|
||||
for obj, ids in obj_ids.items():
|
||||
obj_counter += 1
|
||||
ids = ids[:100]
|
||||
size = len(ids)
|
||||
list2 = []
|
||||
if size:
|
||||
speed_list = []
|
||||
#we perform the operation twice, and count the number of queries in the second run. This allows to avoid the cache effect. (like translated terms that asks for more queries)
|
||||
pool.get(obj).read(cr, uid, [ids[0]])
|
||||
cnt = cr.count
|
||||
pool.get(obj).read(cr, uid, [ids[0]])
|
||||
code_base_complexity = cr.count - cnt
|
||||
|
||||
pool.get(obj).read(cr, uid, ids[:size/2])
|
||||
cnt = cr.count
|
||||
pool.get(obj).read(cr, uid, ids[:size/2])
|
||||
code_half_complexity = cr.count - cnt
|
||||
|
||||
pool.get(obj).read(cr, uid, ids)
|
||||
cnt = cr.count
|
||||
pool.get(obj).read(cr, uid, ids)
|
||||
code_size_complexity = cr.count - cnt
|
||||
|
||||
if size < 5:
|
||||
speed_list = [obj, size, code_base_complexity, code_half_complexity, code_size_complexity, _("Warning! Not enough demo data")]
|
||||
list2 = [obj, _("No enough data")]
|
||||
else:
|
||||
if code_size_complexity <= (code_base_complexity + size):
|
||||
complexity = _("O(1)")
|
||||
score += 1
|
||||
list2 = [obj, _("Efficient")]
|
||||
else:
|
||||
complexity = _("O(n) or worst")
|
||||
list2 = [obj, _("Not Efficient")]
|
||||
|
||||
speed_list = [obj, size, code_base_complexity, code_half_complexity, code_size_complexity, complexity]
|
||||
else:
|
||||
speed_list = [obj, size, "", "", "", _("Warning! Object has no demo data")]
|
||||
list2 = [obj, _("No data")]
|
||||
result_dict[obj] = speed_list
|
||||
result_dict2[obj] = list2
|
||||
self.score = obj_counter and score / obj_counter or 0.0
|
||||
self.result_details += self.get_result_details(result_dict)
|
||||
self.result += self.get_result(result_dict2)
|
||||
return None
|
||||
|
||||
def get_result(self, dict_speed):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s', [_('Object Name'), _('Result')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_speed)
|
||||
return ""
|
||||
|
||||
def get_result_details(self, dict_speed):
|
||||
str_html = '''<html><head></head><body><table border="1">'''
|
||||
header = ('<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>', [_('Object Name'), _('N (Number of Records)'), _('1'), _('N/2'), _('N'), _('Reading Complexity')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_speed) + '</table></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,176 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Structure Test")
|
||||
self.note = _("""
|
||||
This test checks if the module satisfy tiny structure
|
||||
""")
|
||||
self.bool_installed_only = False
|
||||
self.result_dict = {}
|
||||
self.module_score = 0.0
|
||||
self.count = 0
|
||||
self.recur = True
|
||||
return None
|
||||
|
||||
def run_test_struct(self, cr, uid, module_path):
|
||||
len_module = len(module_path.split('/'))
|
||||
module_name = module_path.split('/')
|
||||
module_name = module_name[len_module-1]
|
||||
list_files = os.listdir(module_path)
|
||||
self.result_dict = {}
|
||||
f_list = []
|
||||
module_dict = {}
|
||||
module_dict['module'] = []
|
||||
# count = 0
|
||||
final_score = 0.0
|
||||
|
||||
if not module_name.islower():
|
||||
self.result_dict[module_name] = [module_name, 'Module name should have in lowercase']
|
||||
for file_struct in list_files:
|
||||
if file_struct.split('.')[-1] != 'pyc':
|
||||
path = os.path.join(module_path, file_struct)
|
||||
if file_struct == 'wizard' and os.path.isdir(path):
|
||||
module_dict[file_struct] = []
|
||||
elif file_struct == 'report' and os.path.isdir(path):
|
||||
module_dict[file_struct] = []
|
||||
elif file_struct == 'security' and os.path.isdir(path):
|
||||
module_dict[file_struct] = []
|
||||
elif file_struct == 'process' and os.path.isdir(path):
|
||||
module_dict[file_struct] = []
|
||||
elif file_struct != 'i18n' and os.path.isdir(path):
|
||||
# self.counter += 1
|
||||
self.run_test(cr, uid, path)
|
||||
module_dict['module'].append(file_struct)
|
||||
f_list.append(file_struct)
|
||||
for i in f_list:
|
||||
path = os.path.join(module_path, i)
|
||||
if os.path.isdir(path) and not i == 'i18n':
|
||||
for j in os.listdir(path):
|
||||
if i in ['report', 'wizard', 'security', 'module', 'process'] and j.split('.')[-1] != 'pyc':
|
||||
module_dict[i].append(j)
|
||||
f_list.append(os.path.join(i, j))
|
||||
|
||||
# module files calculation (module.py,module_view.xml,etc..)
|
||||
com_list = ['_unit_test.xml', '.py', '_view.xml', '_workflow.xml' , '_wizard.xml', '_report.xml', '_data.xml', '_demo.xml', '_security.xml', '_sequence.xml', '_graph.xml']
|
||||
com_list = map(lambda x: module_name + x, com_list)
|
||||
main_file = ['__init__.py', '__terp__.py']
|
||||
com_list.extend(main_file)
|
||||
module_dict['module'] = filter(lambda x: len(x.split(".")) > 1, module_dict['module'])
|
||||
score = self.get_score(module_dict['module'], com_list)
|
||||
self.count = self.count + 1
|
||||
final_score += score
|
||||
|
||||
# report folder checking...
|
||||
if module_dict.has_key('report'):
|
||||
report_pys = filter(lambda x: (len(x.split('.'))>1 and x.split('.')[1] == 'py') and x != '__init__.py', module_dict['report'])
|
||||
report_pys = map(lambda x:x.split('.')[0], report_pys)
|
||||
reports = ['.sxw', '.rml', '.xsl', '.py', '.xml']
|
||||
org_list_rep = []
|
||||
for pys in report_pys:
|
||||
for report in reports:
|
||||
org_list_rep.append(pys + report)
|
||||
org_list_rep.append('__init__.py')
|
||||
score_report = self.get_score(module_dict['report'], org_list_rep, 'report/')
|
||||
self.count = self.count + 1
|
||||
final_score += score_report
|
||||
|
||||
# wizard folder checking...
|
||||
if module_dict.has_key('wizard'):
|
||||
wizard_pys = filter(lambda x: (len(x.split('.'))>1 and x.split('.')[1] == 'py') and x != '__init__.py', module_dict['wizard'])
|
||||
wizard_pys = map(lambda x:x.split('.')[0], wizard_pys)
|
||||
wizards = ['_view.xml', '_workflow.xml', '.py']
|
||||
org_list_wiz = []
|
||||
for pys in wizard_pys:
|
||||
for report in wizards:
|
||||
org_list_wiz.append(pys + report)
|
||||
org_list_wiz.append('__init__.py')
|
||||
score_wizard = self.get_score(module_dict['wizard'], org_list_wiz, 'wizard/')
|
||||
self.count = self.count + 1
|
||||
final_score += score_wizard
|
||||
|
||||
# security folder checking...
|
||||
if module_dict.has_key('security'):
|
||||
security = [module_name + '_security.xml']
|
||||
security.extend(['ir.model.access.csv'])
|
||||
score_security = self.get_score(module_dict['security'], security, 'security/')
|
||||
self.count = self.count + 1
|
||||
final_score += score_security
|
||||
|
||||
# process folder checking...
|
||||
if module_dict.has_key('process'):
|
||||
process = [module_name + '_process.xml']
|
||||
score_process = self.get_score(module_dict['process'], process, 'process/')
|
||||
self.count = self.count + 1
|
||||
final_score += score_process
|
||||
|
||||
# final score
|
||||
self.module_score += final_score
|
||||
self.score = self.module_score / (self.count)
|
||||
self.result = self.get_result({ module_name: [module_name, int(self.score*100)]})
|
||||
# self.result_details += self.get_result_details(self.result_dict)
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
self.run_test_struct(cr, uid, module_path)
|
||||
if self.score != 1:
|
||||
self.result_details = self.get_result_details(self.result_dict)
|
||||
return None
|
||||
|
||||
|
||||
def get_result(self, dict_struct):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n', [_('Module Name'), _('Result in %')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_struct)
|
||||
return ""
|
||||
|
||||
def get_score(self, module_list, original_files, mod_folder=''):
|
||||
score = 0
|
||||
module_length = len(module_list)
|
||||
for i in module_list:
|
||||
if i in original_files:
|
||||
score += 1
|
||||
else:
|
||||
if mod_folder != 'wizard/':
|
||||
self.result_dict[i] = [mod_folder + i, 'File name does not follow naming standards.']
|
||||
score -= 1
|
||||
module_length -= 1
|
||||
score = module_length and float(score) / float(module_length)
|
||||
return score
|
||||
|
||||
def get_result_details(self, dict_struct):
|
||||
str_html = '''<html><head></head><body><table>'''
|
||||
header = ('<tr><th>%s</th><th>%s</th></tr>', [_('File Name'), _('Feedback about structure of module')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_struct) + '</table></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,145 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
import re
|
||||
|
||||
import tools
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
import pooler
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Terp Test")
|
||||
self.note = _("This test checks if the module satisfies the current coding standard used by OpenERP.")
|
||||
self.bool_installed_only = False
|
||||
self.no_terp = False
|
||||
self.ponderation = 2
|
||||
return None
|
||||
|
||||
def run_test_terp(self, cr, uid, module_path):
|
||||
list_files = os.listdir(module_path)
|
||||
current_module = module_path.split('/')[-1]
|
||||
|
||||
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))
|
||||
score = 1.0
|
||||
feel_good_factor = 0
|
||||
feel_bad_factor = 0
|
||||
if '__terp__.py' not in list_files:
|
||||
self.no_terp = True
|
||||
self.result += _("The module does not contain the __terp__.py file")
|
||||
return None
|
||||
result_dict = {}
|
||||
result_dict1 = {}
|
||||
terp_file = os.path.join(module_path,'__terp__.py')
|
||||
res = eval(tools.file_open(terp_file).read())
|
||||
terp_keys = ['category', 'name', 'description', 'author', 'website', 'update_xml', 'init_xml', 'depends', 'version', 'active', 'installable', 'demo_xml', 'certificate']
|
||||
for key in terp_keys:
|
||||
if key in res:
|
||||
feel_good_factor += 1 # each tag should appear
|
||||
if isinstance(res[key], (str, unicode, list)):
|
||||
if not res[key]:
|
||||
if key in ['description', 'author', 'website', 'category', 'version']:
|
||||
data = "Module's terp file has no information about " + key + " tag"
|
||||
result_dict1[key] = [key, data]
|
||||
elif key in ['name', 'depends']:
|
||||
data = "Module's terp file has no information about " + key + " tag"
|
||||
result_dict1[key] = [key, data]
|
||||
elif key == 'update_xml':
|
||||
data = " Module update_xml tag is empty it shows that you do not have any views,wizard,workflow"
|
||||
result_dict1[key] = [key, data]
|
||||
elif key == 'demo_xml':
|
||||
data = 'Module demo_xml tag is empty it shows that you do not have any demo data '
|
||||
result_dict1[key] = [key, data]
|
||||
feel_bad_factor += 1
|
||||
else:
|
||||
flag = False
|
||||
if key == 'description' and len(str(res[key])) >= 150: # no. of chars should be >=150
|
||||
feel_good_factor += 1
|
||||
flag = True
|
||||
if res['description'].count('\n') >= 4:# description contains minimum 5 lines
|
||||
feel_good_factor += 1
|
||||
flag = True
|
||||
if not flag and key == 'description':
|
||||
result_dict[key] = [key, 'Description of the module in terp is not enough, you must describe your module enough because good description is the beginning of a good documentation. And a good documentation limits the support requests.']
|
||||
if key == 'website':
|
||||
ptrn = re.compile('[https?://]?[\w\.:]+[\w /:]+$') # reg ex matching on temporary basis.Website is correctly formatted
|
||||
result = ptrn.search(str(res[key]))
|
||||
if result:
|
||||
feel_good_factor += 1
|
||||
else:
|
||||
result_dict[key] = [key, 'Website tag of terp file should be in valid format or it should be lead to valid page']
|
||||
feel_bad_factor += 1
|
||||
|
||||
if isinstance(res[key], bool):
|
||||
if key == 'active':
|
||||
if current_module != 'base':
|
||||
if res[key]:
|
||||
feel_bad_factor += 1
|
||||
result_dict[key] = [key, 'Active tag of terp file should not be set to True!']
|
||||
else:
|
||||
if not res[key]:
|
||||
result_dict[key] = [key, 'Active tag of terp file of base module should be set to True!']
|
||||
feel_bad_factor += 1
|
||||
if key == 'installable' and not res[key]: # installable tag is provided and False
|
||||
result_dict[key] = [key, 'Installable tag of terp file of module should be set to True so that it can install on client!']
|
||||
feel_bad_factor += 1
|
||||
else:
|
||||
feel_bad_factor += 1
|
||||
result_dict1[key] = [key, "Tag is missing!"]
|
||||
|
||||
if result_dict1 or result_dict1:
|
||||
score = round((feel_good_factor) / float(feel_good_factor + feel_bad_factor), 2)
|
||||
self.result_details += self.get_result_details(result_dict)
|
||||
self.result_details += self.get_result_details(result_dict1)
|
||||
return [_('__terp__.py file'), score]
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
terp_score = self.run_test_terp(cr, uid, module_path)
|
||||
self.score = terp_score and terp_score[1] or 0.0
|
||||
if terp_score:
|
||||
self.result = self.get_result({'__terp__.py': terp_score})
|
||||
return None
|
||||
|
||||
def get_result(self, dict_terp):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n', [_('Object Name'), _('Result (/1)')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_terp)
|
||||
return ""
|
||||
|
||||
def get_result_details(self, dict_terp):
|
||||
if dict_terp:
|
||||
str_html = '''<html><head></head><body><table border="1">'''
|
||||
header = ('<tr><th>%s</th><th>%s</th></tr>', [_('Tag Name'), _('Feed back About terp file of Module')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_terp) + '</table><newline/></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,28 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 module_quality_check
|
||||
import quality_save_report
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 os
|
||||
|
||||
import wizard
|
||||
import pooler
|
||||
from osv import osv, fields
|
||||
|
||||
#TODO: add cheks: do the class quality_check inherits the class abstract_quality_check?
|
||||
|
||||
class quality_check(wizard.interface):
|
||||
|
||||
def _create_quality_check(self, cr, uid, data, context={}):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
obj_quality = pool.get('module.quality.check')
|
||||
objs = []
|
||||
for id in data['ids']:
|
||||
module_data = pool.get('ir.module.module').browse(cr, uid, id)
|
||||
data = obj_quality.check_quality(cr, uid, module_data.name, module_data.state)
|
||||
obj = obj_quality.create(cr, uid, data, context)
|
||||
objs.append(obj)
|
||||
return objs
|
||||
|
||||
def _open_quality_check(self, cr, uid, data, context):
|
||||
obj_ids = self._create_quality_check(cr, uid, data, context)
|
||||
return {
|
||||
'domain': "[('id','in', ["+','.join(map(str,obj_ids))+"])]",
|
||||
'name': _('Quality Check'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'module.quality.check',
|
||||
'type': 'ir.actions.act_window'
|
||||
}
|
||||
|
||||
states = {
|
||||
'init' : {
|
||||
'actions' : [],
|
||||
'result': {'type':'action', 'action':_open_quality_check, 'state':'end'}
|
||||
}
|
||||
}
|
||||
|
||||
quality_check("create_quality_check_wiz")
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,61 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 base64
|
||||
import cStringIO
|
||||
|
||||
import wizard
|
||||
from osv import osv
|
||||
import pooler
|
||||
|
||||
form_rep = '''<?xml version="1.0"?>
|
||||
<form string="Standard entries">
|
||||
<field name="name"/>
|
||||
<newline/>
|
||||
<field name="module_file"/>
|
||||
</form>'''
|
||||
|
||||
|
||||
fields_rep = {
|
||||
'name': {'string': 'File name', 'type': 'char', 'required': True, 'help': 'Save report as .html format'},
|
||||
'module_file': {'string': 'Save report', 'type': 'binary', 'required': True},
|
||||
}
|
||||
|
||||
def get_detail(self, cr, uid, datas, context={}):
|
||||
data = pooler.get_pool(cr.dbname).get('module.quality.detail').browse(cr, uid, datas['id'])
|
||||
if not data.detail:
|
||||
raise wizard.except_wizard(_('Warning'), _('No report to save!'))
|
||||
buf = cStringIO.StringIO(data.detail)
|
||||
out = base64.encodestring(buf.getvalue())
|
||||
buf.close()
|
||||
return {'module_file': out, 'name': data.name + '.html'}
|
||||
|
||||
class save_report(wizard.interface):
|
||||
states = {
|
||||
'init': {
|
||||
'actions': [get_detail],
|
||||
'result': {'type': 'form', 'arch': form_rep, 'fields':fields_rep, 'state': [('end','Cancel')]}
|
||||
},
|
||||
}
|
||||
save_report('quality_detail_save')
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,24 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,150 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 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 xml.dom.minidom
|
||||
|
||||
import tools
|
||||
from tools.translate import _
|
||||
from base_module_quality import base_module_quality
|
||||
import pooler
|
||||
|
||||
class quality_test(base_module_quality.abstract_quality_check):
|
||||
|
||||
def __init__(self):
|
||||
super(quality_test, self).__init__()
|
||||
self.name = _("Workflow Test")
|
||||
self.note = _("This test checks where object has workflow or not on it if there is a state field and several buttons on it and also checks validity of workflow xml file")
|
||||
self.bool_installed_only = True
|
||||
return None
|
||||
|
||||
def run_test(self, cr, uid, module_path):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
module_name = module_path.split('/')[-1]
|
||||
obj_list = self.get_objects(cr, uid, module_name)
|
||||
view_obj = pool.get('ir.ui.view')
|
||||
view_ids = view_obj.search(cr, uid, [('model', 'in', obj_list), ('type', 'in', ['form'])])
|
||||
view_data = view_obj.browse(cr, uid, view_ids)
|
||||
field_obj = pool.get('ir.model.fields')
|
||||
field_ids = field_obj.search(cr, uid, [('model', 'in', obj_list)])
|
||||
field_data = field_obj.browse(cr, uid, field_ids)
|
||||
wkf_obj = pool.get('workflow')
|
||||
wkf_activity_obj = pool.get('workflow.activity')
|
||||
|
||||
state_check = []
|
||||
wkf_avail = []
|
||||
result_dict = {}
|
||||
activity_chk = {}
|
||||
bad_view = 0
|
||||
good_view = 0
|
||||
act_ok = 0
|
||||
not_ok = 0
|
||||
wkfs = []
|
||||
|
||||
if obj_list:
|
||||
wkf_ids = wkf_obj.search(cr, uid, [('osv', 'in', obj_list)])
|
||||
wkfs = wkf_obj.read(cr, uid, wkf_ids, ['osv'])
|
||||
for i in wkfs:
|
||||
activity_chk[i['osv']] = {'start': 'not_ok', 'stop': 'not_ok'}
|
||||
wkf_avail.append(i['osv'])
|
||||
model_ids = self.get_ids(cr, uid, [i['osv']])
|
||||
if len(model_ids[i['osv']]) < 2: # to be modified..
|
||||
bad_view += 1
|
||||
result_dict[i['osv']] = [i['osv'], 'You should have enough demo data which allows testing of integrity of module and ensures the proper functioning of workflows']
|
||||
else:
|
||||
good_view += 1
|
||||
wkf_ids = map(lambda x:x['id'], wkfs)
|
||||
if not wkf_ids:
|
||||
result_dict[module_name] = [module_name, 'No workflow defined on module']
|
||||
#Activity of workflow checking...
|
||||
activity_ids = wkf_activity_obj.search(cr, uid, [('wkf_id', 'in', wkf_ids)])
|
||||
activities = wkf_activity_obj.browse(cr, uid, activity_ids)
|
||||
for activity in activities:
|
||||
if activity.flow_start:
|
||||
activity_chk[activity.wkf_id.osv]['start'] = 'ok'
|
||||
if activity.flow_stop:
|
||||
activity_chk[activity.wkf_id.osv]['stop'] = 'ok'
|
||||
activity_chk[activity.wkf_id.osv]['model'] = activity.wkf_id.osv
|
||||
if activity.in_transitions and activity.out_transitions:
|
||||
act_ok += 1
|
||||
if not activity.in_transitions and not activity.out_transitions:
|
||||
not_ok += 1
|
||||
result_dict[activity.id] = [activity.name, 'Use less activity (improves readability and protects server resources)']
|
||||
for act in activity_chk:
|
||||
if activity_chk[act]['start'] == 'ok':
|
||||
act_ok += 1
|
||||
else:
|
||||
not_ok += 1
|
||||
result_dict[activity_chk[act]['model']] = [activity_chk[act]['model'], 'Workflow activities should have atleast one starting node']
|
||||
if activity_chk[act]['stop'] == 'ok':
|
||||
act_ok += 1
|
||||
else:
|
||||
not_ok += 1
|
||||
result_dict[activity_chk[act]['model']] = [activity_chk[act]['model'], 'Workflow activities should have atleast one ending node']
|
||||
|
||||
score_general = act_ok and float(act_ok) / float(act_ok + not_ok)
|
||||
# workflow defined on object or not checking..
|
||||
for field in field_data:
|
||||
if field.name == 'state':
|
||||
state_check.append(field.model)
|
||||
for view in view_data:
|
||||
if view.model in state_check:
|
||||
dom = xml.dom.minidom.parseString(view.arch)
|
||||
node = dom.childNodes
|
||||
count = self.count_button(node[0], count=0)
|
||||
if count > 3 and not view.model in wkf_avail:
|
||||
bad_view += 1
|
||||
result_dict[view.model] = [view.model, 'The presence of a field state in object often indicative of a need for workflow behind. And connect them to ensure consistency in this field.']
|
||||
elif count > 0 and view.model in wkf_avail:
|
||||
good_view += 1
|
||||
score_avail = good_view and float(good_view) / float(bad_view + good_view)
|
||||
self.score = (score_general + score_avail) / 2
|
||||
|
||||
if not wkf_ids and not bad_view:
|
||||
self.error = True
|
||||
self.result = _("No Workflow define")
|
||||
return None
|
||||
self.result = self.get_result({module_name: [module_name, int(self.score * 100)]})
|
||||
self.result_details += self.get_result_details(result_dict)
|
||||
return None
|
||||
|
||||
def get_result(self, dict_wf):
|
||||
header = ('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n', [_('Module Name'), _('Result of views in %')])
|
||||
if not self.error:
|
||||
return self.format_table(header, data_list=dict_wf)
|
||||
return ""
|
||||
|
||||
def get_result_details(self, dict_wf):
|
||||
str_html = '''<html><head></head><body><table border="1">'''
|
||||
header = ('<tr><th>%s</th><th>%s</th></tr>', [_('Object Name'), _('Feed back About Workflow of Module')])
|
||||
if not self.error:
|
||||
res = str_html + self.format_html_table(header, data_list=dict_wf) + '</table><newline/></body></html>'
|
||||
return res
|
||||
return ""
|
||||
|
||||
def count_button(self, node, count):
|
||||
for node in node.childNodes:
|
||||
if node.localName == 'button':
|
||||
count += 1
|
||||
if node.childNodes:
|
||||
count = self.count_button(node, count)
|
||||
return count
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:40+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:23+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 14:32+0000\n"
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 13:41+0000\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:05+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-06-12 14:08+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-07-06 13:24+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: board_association
|
||||
|
@ -21,11 +21,6 @@ msgstr ""
|
|||
msgid "Associations"
|
||||
msgstr "Associations"
|
||||
|
||||
#. module: board_association
|
||||
#: model:ir.module.module,shortdesc:board_association.module_meta_information
|
||||
msgid "Dashboard for Associations"
|
||||
msgstr "Tableau de Bord pour les Associations"
|
||||
|
||||
#. module: board_association
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
|
@ -52,11 +47,6 @@ msgstr "Nouveaux Membres"
|
|||
msgid "Unpaid Invoices"
|
||||
msgstr "Factures impayées"
|
||||
|
||||
#. module: board_association
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "Nom du modèle non valide pour la définition de l'action."
|
||||
|
||||
#. module: board_association
|
||||
#: view:board.board:0
|
||||
msgid "Next Events"
|
||||
|
@ -66,3 +56,8 @@ msgstr "Prochains événements"
|
|||
#: view:board.board:0
|
||||
msgid "Registrations by Events"
|
||||
msgstr "Inscriptions par événement"
|
||||
|
||||
#. module: board_association
|
||||
#: model:ir.module.module,shortdesc:board_association.module_meta_information
|
||||
msgid "Dashboard for Associations"
|
||||
msgstr "Tableau de Bord pour les Associations"
|
||||
|
|
|
@ -6,14 +6,15 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:12+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 13:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: view:board.board:0
|
||||
|
@ -30,11 +31,6 @@ msgstr "Ordre de fabrication suivant"
|
|||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valide pour l'architecture de la vue"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: view:board.board:0
|
||||
msgid "Deliveries (Out packing)"
|
||||
msgstr ""
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: view:board.board:0
|
||||
msgid "Manufacturing board"
|
||||
|
@ -46,9 +42,9 @@ msgid "Production"
|
|||
msgstr "Gestion de la production"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
#: view:board.board:0
|
||||
msgid "Deliveries (Out packing)"
|
||||
msgstr "Livraisons"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: model:ir.actions.act_window,name:board_manufacturing.open_board_manufacturing
|
||||
|
@ -56,11 +52,6 @@ msgstr ""
|
|||
msgid "Production Dashboard"
|
||||
msgstr "Tableau de bord de production"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: model:ir.module.module,shortdesc:board_manufacturing.module_meta_information
|
||||
msgid "Board for manufacturing"
|
||||
msgstr ""
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: view:board.board:0
|
||||
msgid "Stock value variation"
|
||||
|
@ -71,3 +62,7 @@ msgstr "Variation de la valeur du stock"
|
|||
msgid "Workcenter futur load"
|
||||
msgstr "Charge future du poste de charge"
|
||||
|
||||
#. module: board_manufacturing
|
||||
#: model:ir.module.module,shortdesc:board_manufacturing.module_meta_information
|
||||
msgid "Board for manufacturing"
|
||||
msgstr "Tableau de Bord de la Production"
|
||||
|
|
|
@ -6,19 +6,15 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:08+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: board_sale
|
||||
#: model:ir.module.module,shortdesc:board_sale.module_meta_information
|
||||
msgid "Dashboard for sales"
|
||||
msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-07-06 13:36+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: board_sale
|
||||
#: model:ir.actions.act_window,name:board_sale.open_board_sales_manager
|
||||
|
@ -39,7 +35,7 @@ msgstr "Tableau de Bord du Gestionnaire des Ventes"
|
|||
#. module: board_sale
|
||||
#: view:board.board:0
|
||||
msgid "Cases of the month"
|
||||
msgstr ""
|
||||
msgstr "Cas du Mois"
|
||||
|
||||
#. module: board_sale
|
||||
#: constraint:ir.ui.view:0
|
||||
|
@ -51,11 +47,6 @@ msgstr "XML non valide pour l'architecture de la vue"
|
|||
msgid "My open quotations"
|
||||
msgstr "Mes Devis Ouverts"
|
||||
|
||||
#. module: board_sale
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
|
||||
#. module: board_sale
|
||||
#: model:ir.ui.menu,name:board_sale.next_id_88
|
||||
msgid "Sales"
|
||||
|
@ -71,3 +62,7 @@ msgstr "Statistiques des Cas"
|
|||
msgid "Top ten sales of the month"
|
||||
msgstr "10 meilleures Ventes du Mois"
|
||||
|
||||
#. module: board_sale
|
||||
#: model:ir.module.module,shortdesc:board_sale.module_meta_information
|
||||
msgid "Dashboard for sales"
|
||||
msgstr "Tableau de Bord des Ventes"
|
||||
|
|
|
@ -6,23 +6,23 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:00+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 13:04+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: crm_vertical
|
||||
#: code:addons/crm_vertical/crm_vertical.py:0
|
||||
#, python-format
|
||||
msgid "Error !"
|
||||
msgstr ""
|
||||
msgstr "Erreur !"
|
||||
|
||||
#. module: crm_vertical
|
||||
#: model:ir.module.module,description:crm_vertical.module_meta_information
|
||||
msgid "Simplification of the interface for CRM."
|
||||
msgstr ""
|
||||
|
||||
msgstr "Simplification de l'interface de la CRM"
|
||||
|
|
|
@ -38,7 +38,7 @@ msgstr "Destination"
|
|||
#. module: delivery
|
||||
#: model:product.template,name:delivery.delivery_product_product_template
|
||||
msgid "Delivery by Poste"
|
||||
msgstr ""
|
||||
msgstr "Livraison par Poste"
|
||||
|
||||
#. module: delivery
|
||||
#: constraint:ir.ui.view:0
|
||||
|
@ -48,7 +48,7 @@ msgstr "XML non valide pour l'architecture de la vue"
|
|||
#. module: delivery
|
||||
#: constraint:res.partner:0
|
||||
msgid "Error ! You can not create recursive associated members."
|
||||
msgstr ""
|
||||
msgstr "Erreur ! Vous ne pouvez pas créer de membres associés de manière récursive."
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,state_ids:0
|
||||
|
@ -63,7 +63,7 @@ msgstr ""
|
|||
#. module: delivery
|
||||
#: help:res.partner,property_delivery_carrier:0
|
||||
msgid "This delivery method will be used when invoicing from packing."
|
||||
msgstr ""
|
||||
msgstr "Cette méthode de livraison sera utilisée lors de facturations à partir du Colisage."
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid
|
||||
|
@ -84,7 +84,7 @@ msgstr "Fixe"
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:0
|
||||
#, python-format
|
||||
msgid "The order state have to be draft to add delivery lines."
|
||||
msgstr ""
|
||||
msgstr "La Commande doit être à l'état Brouillon pour ajouter des lignes de livraison."
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,line_ids:0
|
||||
|
@ -113,7 +113,7 @@ msgstr "Variable"
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:0
|
||||
#, python-format
|
||||
msgid "No grid matching for this carrier !"
|
||||
msgstr ""
|
||||
msgstr "Aucune grille trouvée pour ce transporteur !"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.model,name:delivery.model_delivery_grid_line
|
||||
|
@ -138,7 +138,7 @@ msgstr "Grille"
|
|||
#. module: delivery
|
||||
#: view:res.partner:0
|
||||
msgid "Deliveries Properties"
|
||||
msgstr ""
|
||||
msgstr "Propriétés des Livraisons"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,active:0
|
||||
|
@ -165,7 +165,7 @@ msgstr "="
|
|||
#. module: delivery
|
||||
#: field:delivery.carrier,product_id:0
|
||||
msgid "Delivery Product"
|
||||
msgstr ""
|
||||
msgstr "Produit de Livraison"
|
||||
|
||||
#. module: delivery
|
||||
#: view:delivery.grid.line:0
|
||||
|
@ -216,7 +216,7 @@ msgstr "facteur variable"
|
|||
#: code:addons/delivery/wizard/delivery_sale_order.py:0
|
||||
#, python-format
|
||||
msgid "No grid avaible !"
|
||||
msgstr ""
|
||||
msgstr "Aucune grille disponible !"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,name:0
|
||||
|
@ -246,7 +246,7 @@ msgstr "Valeur maximum"
|
|||
#. module: delivery
|
||||
#: wizard_button:delivery.sale.order,init,delivery:0
|
||||
msgid "Add Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "Ajouter des Coûts de Livraison"
|
||||
|
||||
#. module: delivery
|
||||
#: wizard_field:delivery.sale.order,init,carrier_id:0
|
||||
|
@ -259,7 +259,7 @@ msgstr "Méthode de livraison"
|
|||
#. module: delivery
|
||||
#: field:sale.order,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
msgstr "ID"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,operator:0
|
||||
|
@ -269,13 +269,13 @@ msgstr "Opérateur"
|
|||
#. module: delivery
|
||||
#: model:ir.module.module,shortdesc:delivery.module_meta_information
|
||||
msgid "Carriers and deliveries"
|
||||
msgstr ""
|
||||
msgstr "Transporteurs et Livraisons"
|
||||
|
||||
#. module: delivery
|
||||
#: code:addons/delivery/wizard/delivery_sale_order.py:0
|
||||
#, python-format
|
||||
msgid "Order not in draft state !"
|
||||
msgstr ""
|
||||
msgstr "Commande pas dans l'état Brouillon !"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.carrier,grids_id:0
|
||||
|
@ -303,6 +303,9 @@ msgstr "Partenaire pour la Livraison"
|
|||
#: model:ir.module.module,description:delivery.module_meta_information
|
||||
msgid "Allows you to add delivery methods in sales orders and packing. You can define your own carrier and delivery grids for prices. When creating invoices from picking, Open ERP is able to add and compute the shipping line."
|
||||
msgstr ""
|
||||
"Permet d'ajouter des méthodes de livraison ax commandes de ventes et colisages. "
|
||||
"Vous pouvez définir vos propres transporteurs et grilles de livraisons. "
|
||||
"À la création de factures à partir des colisages, Open ERP est capable d'ajouter et de calculer les lignes de livraison."
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid,zip_to:0
|
||||
|
@ -313,29 +316,29 @@ msgstr "Code postal destination"
|
|||
#: code:addons/delivery/delivery.py:0
|
||||
#, python-format
|
||||
msgid "No line matched this order in the choosed delivery grids !"
|
||||
msgstr ""
|
||||
msgstr "Aucune ligne ne correspond à cette commande dans les grilles de livraison choisies !"
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.act_window,name:delivery.action_picking_tree4
|
||||
#: model:ir.ui.menu,name:delivery.menu_action_picking_tree3
|
||||
msgid "Packing to be invoiced"
|
||||
msgstr ""
|
||||
msgstr "Colisage à facturer"
|
||||
|
||||
#. module: delivery
|
||||
#: code:addons/delivery/delivery.py:0
|
||||
#, python-format
|
||||
msgid "No price available !"
|
||||
msgstr ""
|
||||
msgstr "Aucun prix disponible !"
|
||||
|
||||
#. module: delivery
|
||||
#: help:sale.order,carrier_id:0
|
||||
msgid "Complete this field if you plan to invoice the shipping based on packing."
|
||||
msgstr ""
|
||||
msgstr "Complétez ce champ si vous avez l'intention de livrer en vous basant sur le colisage."
|
||||
|
||||
#. module: delivery
|
||||
#: model:ir.actions.wizard,name:delivery.wizard_deliver_line_add
|
||||
msgid "Delivery Costs"
|
||||
msgstr ""
|
||||
msgstr "Coûts de Livraison"
|
||||
|
||||
#. module: delivery
|
||||
#: field:delivery.grid.line,list_price:0
|
||||
|
@ -356,7 +359,7 @@ msgstr "Grilles de transport"
|
|||
#: code:addons/delivery/stock.py:0
|
||||
#, python-format
|
||||
msgid "The carrier %s (id: %d) has no delivery grid!"
|
||||
msgstr ""
|
||||
msgstr "Le Transporteur %s (id: %d) n'a pas de grille de livraison !"
|
||||
|
||||
#. module: delivery
|
||||
#: wizard_button:delivery.sale.order,init,end:0
|
||||
|
@ -367,7 +370,7 @@ msgstr "Annuler"
|
|||
#: code:addons/delivery/stock.py:0
|
||||
#, python-format
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
msgstr "Avertissement"
|
||||
|
||||
#. module: delivery
|
||||
#: field:sale.order,carrier_id:0
|
||||
|
|
|
@ -103,23 +103,38 @@ class node_class(object):
|
|||
test_nodename=test_nodename.replace('/', '_')
|
||||
path = self.path+'/'+test_nodename
|
||||
if not nodename:
|
||||
n = node_class(self.cr, self.uid,path, self.object2, False, content=content, type='content', root=False)
|
||||
n = node_class(self.cr, self.uid,path, self.object2, False, context=self.context, 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)
|
||||
n = node_class(self.cr, self.uid, path, self.object2, False, context=self.context, content=content, type='content', root=False)
|
||||
res2.append(n)
|
||||
|
||||
ids = fobj.search(self.cr, self.uid, where+[ ('parent_id','=',self.object and self.object.id or False) ], context=self.context)
|
||||
ids = fobj.search(self.cr, self.uid, where+[ ('parent_id','=',self.object and self.object.id or False) ])
|
||||
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)
|
||||
ids += fobj.search(self.cr, self.uid, where+[ ('parent_id','=',False) ])
|
||||
res = fobj.browse(self.cr, self.uid, ids, context=self.context)
|
||||
return map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, False, type='file', root=False), res) + res2
|
||||
|
||||
return map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, False, context=self.context, type='file', root=False), res) + res2
|
||||
|
||||
def get_translation(self,value,lang):
|
||||
result = value
|
||||
pool = pooler.get_pool(self.cr.dbname)
|
||||
translation_ids = pool.get('ir.translation').search(self.cr, self.uid, [('value','=',value),('lang','=',lang),('type','=','model')])
|
||||
if len(translation_ids):
|
||||
tran_id = translation_ids[0]
|
||||
translation = pool.get('ir.translation').read(self.cr, self.uid, tran_id, ['res_id','name'])
|
||||
res_model,field_name = tuple(translation['name'].split(','))
|
||||
res_id = translation['res_id']
|
||||
res = pool.get(res_model).read(self.cr, self.uid, res_id, [field_name])
|
||||
if res:
|
||||
result = res[field_name]
|
||||
return result
|
||||
|
||||
def directory_list_for_child(self,nodename,parent=False):
|
||||
pool = pooler.get_pool(self.cr.dbname)
|
||||
where = []
|
||||
if nodename:
|
||||
if nodename:
|
||||
nodename = self.get_translation(nodename, self.context['lang'])
|
||||
where.append(('name','like',nodename))
|
||||
if (self.object and self.object.type=='directory') or not self.object2:
|
||||
where.append(('parent_id','=',self.object and self.object.id or False))
|
||||
|
@ -130,17 +145,17 @@ class node_class(object):
|
|||
else:
|
||||
where.append(('ressource_parent_type_id','=',False))
|
||||
|
||||
ids = pool.get('document.directory').search(self.cr, self.uid, where+[('ressource_id','=',0)], self.context)
|
||||
ids = pool.get('document.directory').search(self.cr, self.uid, where+[('ressource_id','=',0)])
|
||||
if self.object2:
|
||||
ids += pool.get('document.directory').search(self.cr, self.uid, where+[('ressource_id','=',self.object2.id)], self.context)
|
||||
res = pool.get('document.directory').browse(self.cr, self.uid, ids,self.context)
|
||||
ids += pool.get('document.directory').search(self.cr, self.uid, where+[('ressource_id','=',self.object2.id)])
|
||||
res = pool.get('document.directory').browse(self.cr, self.uid, ids, self.context)
|
||||
return res
|
||||
|
||||
def _child_get(self, nodename=False):
|
||||
if self.type not in ('collection','database'):
|
||||
return []
|
||||
res = self.directory_list_for_child(nodename)
|
||||
result= map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, x.type=='directory' and self.object2 or False, root=self.root), res)
|
||||
result= map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, x.type=='directory' and self.object2 or False, context=self.context, root=self.root), res)
|
||||
if self.type=='database':
|
||||
pool = pooler.get_pool(self.cr.dbname)
|
||||
fobj = pool.get('ir.attachment')
|
||||
|
@ -150,7 +165,7 @@ class node_class(object):
|
|||
file_ids=fobj.search(self.cr,self.uid,vargs)
|
||||
|
||||
res = fobj.browse(self.cr, self.uid, file_ids, context=self.context)
|
||||
result +=map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, False, type='file', root=self.root), res)
|
||||
result +=map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name, x, False, context=self.context, type='file', root=self.root), res)
|
||||
if self.type=='collection' and self.object.type=="ressource":
|
||||
where = self.object.domain and eval(self.object.domain, {'active_id':self.root}) or []
|
||||
pool = pooler.get_pool(self.cr.dbname)
|
||||
|
@ -169,12 +184,17 @@ class node_class(object):
|
|||
nodename=nodename.replace('__','/')
|
||||
for invalid in INVALID_CHARS:
|
||||
if nodename.find(INVALID_CHARS[invalid]) :
|
||||
nodename=nodename.replace(INVALID_CHARS[invalid],invalid)
|
||||
nodename=nodename.replace(INVALID_CHARS[invalid],invalid)
|
||||
nodename = self.get_translation(nodename, self.context['lang'])
|
||||
where.append((_dirname_field,'like',nodename))
|
||||
|
||||
|
||||
if self.object.ressource_tree:
|
||||
if obj._parent_name in obj.fields_get(self.cr,self.uid):
|
||||
where.append((obj._parent_name,'=',self.object2 and self.object2.id or False))
|
||||
where.append((obj._parent_name,'=',self.object2 and self.object2.id or False))
|
||||
ids = obj.search(self.cr, self.uid, where)
|
||||
res = obj.browse(self.cr, self.uid, ids,self.context)
|
||||
result+= map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, context=self.context, root=x.id), res)
|
||||
return result
|
||||
else :
|
||||
if self.object2:
|
||||
return result
|
||||
|
@ -183,31 +203,22 @@ class node_class(object):
|
|||
return result
|
||||
|
||||
|
||||
ids = obj.search(self.cr, self.uid, where, self.context)
|
||||
res = obj.browse(self.cr, self.uid, ids,self.context)
|
||||
if _dirname_field == 'dirname':
|
||||
for r in res:
|
||||
if not r.dirname:
|
||||
r.dirname = name_for+'%d'%r.id
|
||||
for invalid in INVALID_CHARS:
|
||||
if r.dirname.find(invalid) :
|
||||
r.dirname=r.dirname.replace(invalid,INVALID_CHARS[invalid])
|
||||
result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.dirname.replace('/','__'), self.object, x, root=x.id), res)
|
||||
|
||||
else:
|
||||
for r in res:
|
||||
if not r.name:
|
||||
r.name = name_for+'%d'%r.id
|
||||
for invalid in INVALID_CHARS:
|
||||
if r.name.find(invalid) :
|
||||
r.name=r.name.replace(invalid,INVALID_CHARS[invalid])
|
||||
result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, root=x.id), res)
|
||||
|
||||
ids = obj.search(self.cr, self.uid, where)
|
||||
res = obj.browse(self.cr, self.uid, ids,self.context)
|
||||
for r in res:
|
||||
if len(obj.fields_get(self.cr, self.uid, [_dirname_field])):
|
||||
r.name = eval('r.'+_dirname_field)
|
||||
else:
|
||||
r.name = name_for+'%d'%r.id
|
||||
for invalid in INVALID_CHARS:
|
||||
if r.name.find(invalid) :
|
||||
r.name=r.name.replace(invalid,INVALID_CHARS[invalid])
|
||||
result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, context=self.context, root=x.id), res)
|
||||
if result2:
|
||||
if self.object.ressource_tree:
|
||||
result += result2
|
||||
else:
|
||||
result = result2
|
||||
result = result2
|
||||
return result
|
||||
|
||||
def children(self):
|
||||
|
@ -232,7 +243,7 @@ class document_directory(osv.osv):
|
|||
_name = 'document.directory'
|
||||
_description = 'Document directory'
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64, required=True, select=1),
|
||||
'name': fields.char('Name', size=64, required=True, select=1, translate=True),
|
||||
'write_date': fields.datetime('Date Modified', readonly=True),
|
||||
'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True),
|
||||
'create_date': fields.datetime('Date Created', readonly=True),
|
||||
|
@ -304,7 +315,6 @@ class document_directory(osv.osv):
|
|||
def __init__(self, *args, **kwargs):
|
||||
res = super(document_directory, self).__init__(*args, **kwargs)
|
||||
self._cache = {}
|
||||
return res
|
||||
|
||||
def onchange_content_id(self, cr, uid, ids, ressource_type_id):
|
||||
return {}
|
||||
|
@ -312,6 +322,7 @@ class document_directory(osv.osv):
|
|||
def _get_childs(self, cr, uid, node, nodename=False, context={}):
|
||||
where = []
|
||||
if nodename:
|
||||
nodename = self.get_translation(nodename, self.context['lang'])
|
||||
where.append(('name','like',nodename))
|
||||
if object:
|
||||
where.append(('parent_id','=',object.id))
|
||||
|
@ -326,12 +337,17 @@ class document_directory(osv.osv):
|
|||
object: the object.directory or object.directory.content
|
||||
object2: the other object linked (if object.directory.content)
|
||||
"""
|
||||
def get_object(self, cr, uid, uri, context={}):
|
||||
def get_object(self, cr, uid, uri, context={}):
|
||||
lang = context.get('lang',False)
|
||||
if not lang:
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid)
|
||||
lang = user.context_lang
|
||||
context['lang'] = lang
|
||||
if not uri:
|
||||
return node_class(cr, uid, '', False, type='database')
|
||||
return node_class(cr, uid, '', False, context=context, type='database')
|
||||
turi = tuple(uri)
|
||||
if False and (turi in self._cache):
|
||||
(path, oo, oo2, content,type,root) = self._cache[turi]
|
||||
if False and (turi in self._cache):
|
||||
(path, oo, oo2, context, content,type,root) = self._cache[turi]
|
||||
if oo:
|
||||
object = self.pool.get(oo[0]).browse(cr, uid, oo[1], context)
|
||||
else:
|
||||
|
@ -340,10 +356,10 @@ class document_directory(osv.osv):
|
|||
object2 = self.pool.get(oo2[0]).browse(cr, uid, oo2[1], context)
|
||||
else:
|
||||
object2 = False
|
||||
node = node_class(cr, uid, path, object,object2, context, content, type, root)
|
||||
node = node_class(cr, uid, '/', False, context=context, type='database')
|
||||
return node
|
||||
|
||||
node = node_class(cr, uid, '/', False, type='database')
|
||||
node = node_class(cr, uid, '/', False, context=context, type='database')
|
||||
for path in uri[:]:
|
||||
if path:
|
||||
node = node.child(path)
|
||||
|
@ -351,7 +367,7 @@ class document_directory(osv.osv):
|
|||
return False
|
||||
oo = node.object and (node.object._name, node.object.id) or False
|
||||
oo2 = node.object2 and (node.object2._name, node.object2.id) or False
|
||||
self._cache[turi] = (node.path, oo, oo2, node.content,node.type,node.root)
|
||||
self._cache[turi] = (node.path, oo, oo2, node.context, node.content,node.type,node.root)
|
||||
return node
|
||||
|
||||
def get_childs(self, cr, uid, uri, context={}):
|
||||
|
@ -378,7 +394,7 @@ class document_directory(osv.osv):
|
|||
ressource_parent_type_id=vals.get('ressource_parent_type_id',False)
|
||||
ressource_id=vals.get('ressource_id',0)
|
||||
if op=='write':
|
||||
for directory in self.browse(cr,uid,ids):
|
||||
for directory in self.browse(cr,uid,ids):
|
||||
if not name:
|
||||
name=directory.name
|
||||
if not parent_id:
|
||||
|
@ -591,7 +607,7 @@ class document_file(osv.osv):
|
|||
res_model=vals.get('res_model',False)
|
||||
res_id=vals.get('res_id',0)
|
||||
if op=='write':
|
||||
for file in self.browse(cr,uid,ids):
|
||||
for file in self.browse(cr,uid,ids):
|
||||
if not name:
|
||||
name=file.name
|
||||
if not parent_id:
|
||||
|
@ -603,7 +619,6 @@ class document_file(osv.osv):
|
|||
res=self.search(cr,uid,[('id','<>',file.id),('name','=',name),('parent_id','=',parent_id),('res_model','=',res_model),('res_id','=',res_id)])
|
||||
if len(res):
|
||||
return False
|
||||
|
||||
if op=='create':
|
||||
res=self.search(cr,uid,[('name','=',name),('parent_id','=',parent_id),('res_id','=',res_id),('res_model','=',res_model)])
|
||||
if len(res):
|
||||
|
@ -648,7 +663,7 @@ class document_file(osv.osv):
|
|||
result = obj_model.read(cr, uid, [vals['res_id']], context=context)
|
||||
if len(result):
|
||||
obj=result[0]
|
||||
vals['title'] = (obj['name'] or '')[:60]
|
||||
vals['title'] = (obj.get('name',''))[:60]
|
||||
if obj_model._name=='res.partner':
|
||||
vals['partner_id']=obj['id']
|
||||
elif obj.get('address_id',False):
|
||||
|
@ -790,6 +805,6 @@ class document_configuration_wizard(osv.osv_memory):
|
|||
"view_mode": 'form',
|
||||
'res_model': 'ir.actions.configuration.wizard',
|
||||
'type': 'ir.actions.act_window',
|
||||
'target':'new',
|
||||
'target': 'new',
|
||||
}
|
||||
document_configuration_wizard()
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-04-10 12:38+0000\n"
|
||||
"PO-Revision-Date: 2009-04-20 06:41+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-11 13:40+0000\n"
|
||||
|
|
|
@ -503,8 +503,8 @@ class hr_attendance(osv.osv):
|
|||
LEFT JOIN (hr_attendance a \
|
||||
LEFT JOIN hr_employee e \
|
||||
ON (a.employee_id = e.id)) \
|
||||
ON (s.date_to >= a.name \
|
||||
AND s.date_from <= a.name \
|
||||
ON (s.date_to >= a.name::date \
|
||||
AND s.date_from <= a.name::date \
|
||||
AND s.user_id = e.user_id) ' + \
|
||||
qu1, qu2)
|
||||
res = cursor.fetchall()
|
||||
|
@ -623,8 +623,8 @@ class hr_timesheet_sheet_sheet_day(osv.osv):
|
|||
LEFT JOIN hr_employee e
|
||||
ON (s.user_id = e.user_id))
|
||||
ON (a.employee_id = e.id
|
||||
AND s.date_to >= a.name
|
||||
AND s.date_from <= a.name)
|
||||
AND s.date_to >= a.name::date
|
||||
AND s.date_from <= a.name::date)
|
||||
WHERE action in ('sign_in', 'sign_out')
|
||||
group by a.name::date, s.id
|
||||
)) AS foo
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-11 09:26+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-05 13:59+0000\n"
|
||||
|
@ -57,7 +57,7 @@ msgstr "Révision"
|
|||
#: model:ir.actions.wizard,name:mrp.wiz_mrp_proc2
|
||||
#: model:ir.ui.menu,name:mrp.menu_wiz_mrp_proc2
|
||||
msgid "Compute Stock Minimum Rules Only"
|
||||
msgstr ""
|
||||
msgstr "Calculer Uniquement les Règles de Stock Minimum"
|
||||
|
||||
#. module: mrp
|
||||
#: model:ir.actions.act_window,name:mrp.mrp_procurement_action5
|
||||
|
@ -94,7 +94,7 @@ msgstr "Liste des Colisages"
|
|||
#. module: mrp
|
||||
#: model:process.node,name:mrp.process_node_stock0
|
||||
msgid "Stockable Stock"
|
||||
msgstr ""
|
||||
msgstr "Stock Stoquable"
|
||||
|
||||
#. module: mrp
|
||||
#: code:addons/mrp/wizard/wizard_change_production_qty.py:0
|
||||
|
@ -178,7 +178,7 @@ msgstr "Produit & Localisation"
|
|||
#. module: mrp
|
||||
#: view:res.company:0
|
||||
msgid "MRP & Logistic Scheduler"
|
||||
msgstr ""
|
||||
msgstr "Plannificateur MRP & Logistique"
|
||||
|
||||
#. module: mrp
|
||||
#: help:mrp.workcenter,capacity_per_cycle:0
|
||||
|
@ -216,7 +216,7 @@ msgstr "Produits consommés"
|
|||
#. module: mrp
|
||||
#: field:mrp.workcenter,costs_cycle_account_id:0
|
||||
msgid "Cycle Account"
|
||||
msgstr ""
|
||||
msgstr "Compte Cyclique"
|
||||
|
||||
#. module: mrp
|
||||
#: view:mrp.workcenter:0
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-11 08:50+0000\n"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-12 06:17+0000\n"
|
||||
|
|
|
@ -206,6 +206,7 @@ class pos_order(osv.osv):
|
|||
|
||||
_defaults = {
|
||||
'user_id': lambda self, cr, uid, context: uid,
|
||||
'salesman_id': lambda self, cr, uid, context: uid,
|
||||
'state': lambda *a: 'draft',
|
||||
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence')\
|
||||
.get(cr, uid, 'pos.order'),
|
||||
|
@ -321,7 +322,10 @@ class pos_order(osv.osv):
|
|||
self.write(cr, uid, [order.id], {'last_out_picking': picking_id})
|
||||
else:
|
||||
picking_id = order.last_out_picking.id
|
||||
picking_obj.write(cr, uid, [picking_id], {'auto_picking': True})
|
||||
picking_obj.write(cr, uid, [picking_id], {
|
||||
'auto_picking': True,
|
||||
'invoice_state': '2binvoiced',
|
||||
})
|
||||
picking = picking_obj.browse(cr, uid, [picking_id], context)[0]
|
||||
new = False
|
||||
|
||||
|
@ -477,11 +481,14 @@ class pos_order(osv.osv):
|
|||
'payments': False,
|
||||
})
|
||||
clone_list.append(clone_id)
|
||||
self.write(cr, uid, clone_id, {
|
||||
'partner_id': order.partner_id.id,
|
||||
})
|
||||
|
||||
for clone in self.browse(cr, uid, clone_list):
|
||||
for order_line in clone.lines:
|
||||
line_obj.write(cr, uid, [order_line.id], {
|
||||
'qty': -order_line.qty
|
||||
'qty': -order_line.qty,
|
||||
})
|
||||
return clone_list
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_pos_config_journal","pos.config.journal","model_pos_config_journal","point_of_sale.group_pos_user",1,0,0,0
|
||||
"access_pos_config_journal_manager","pos.config.journal","model_pos_config_journal","point_of_sale.group_pos_manager",1, 1, 1, 1
|
||||
"access_pos_order","pos.order","model_pos_order","point_of_sale.group_pos_user",1,1,1,1
|
||||
"access_pos_order_line","pos.order.line","model_pos_order_line","point_of_sale.group_pos_user",1,1,1,1
|
||||
"access_pos_payment","pos.payment","model_pos_payment","point_of_sale.group_pos_user",1,1,1,1
|
||||
|
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="group_pos_manager" model="res.groups">
|
||||
<field name="name">Point of Sale / Manager</field>
|
||||
|
@ -8,6 +8,13 @@
|
|||
<record id="group_pos_user" model="res.groups">
|
||||
<field name="name">Point of Sale / User</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
</data>
|
||||
<data>
|
||||
|
||||
<record id="menu_point_config" model="ir.ui.menu">
|
||||
<field eval="[(6,0,[ref('group_pos_manager')])]" name="groups_id"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-05 14:20+0000\n"
|
||||
|
@ -1674,17 +1674,24 @@ msgid ""
|
|||
"The coefficient for the formula:\n"
|
||||
"1 (base unit) = coeff (this unit). Rate = 1 / Factor."
|
||||
msgstr ""
|
||||
"Coefficient pour la formule:\n"
|
||||
"1 (unité de base) = coeff (cette unité). Taux = 1 / Facteur."
|
||||
|
||||
#. module: product
|
||||
#: help:product.template,weight_net:0
|
||||
msgid "The net weight in Kg."
|
||||
msgstr ""
|
||||
msgstr "La masse nette en Kg."
|
||||
|
||||
#. module: product
|
||||
#: model:product.template,name:product.product_product_tow1_product_template
|
||||
msgid "ATX Mid-size Tower"
|
||||
msgstr "Tour ATX Moyenne"
|
||||
|
||||
#. module: product
|
||||
#: model:ir.actions.act_window,name:product.product_pricelist_action
|
||||
#: model:ir.ui.menu,name:product.menu_product_pricelist_action
|
||||
#: field:product.pricelist,version_id:0
|
||||
|
||||
#. module: product
|
||||
#: field:product.supplierinfo,delay:0
|
||||
msgid "Delivery Delay"
|
||||
|
@ -1788,17 +1795,17 @@ msgstr "Étiquettes de produits"
|
|||
#. module: product
|
||||
#: help:product.template,volume:0
|
||||
msgid "The volume in m3."
|
||||
msgstr ""
|
||||
msgstr "Le volume en m3"
|
||||
|
||||
#. module: product
|
||||
#: model:product.ul,name:product.product_ul_big_box
|
||||
msgid "Box 30x40x60"
|
||||
msgstr ""
|
||||
msgstr "Caisse 30x40x60"
|
||||
|
||||
#. module: product
|
||||
#: model:product.uom,name:product.product_uom_kgm
|
||||
msgid "KGM"
|
||||
msgstr ""
|
||||
msgstr "KGM"
|
||||
|
||||
#. module: product
|
||||
#: field:product.pricelist.item,price_discount:0
|
||||
|
|
|
@ -404,7 +404,7 @@ class product_product(osv.osv):
|
|||
for p in self.browse(cr, uid, ids, context):
|
||||
data = self._get_partner_code_name(cr, uid, [], p.id, context.get('partner_id', None), context)
|
||||
if not data['code']:
|
||||
data['name'] = p.code
|
||||
data['code'] = p.code
|
||||
if not data['name']:
|
||||
data['name'] = p.name
|
||||
res[p.id] = (data['code'] and ('['+data['code']+'] ') or '') + \
|
||||
|
|
|
@ -6,17 +6,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:01+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 13:08+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: profile_crm
|
||||
#: model:ir.module.module,description:profile_crm.module_meta_information
|
||||
msgid "Profile for CRM"
|
||||
msgstr ""
|
||||
|
||||
msgstr "Profile pour la CRM"
|
||||
|
|
|
@ -6,14 +6,15 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 13:04+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 13:20+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: project
|
||||
#: model:ir.actions.act_window,name:project.act_res_users_2_project_task_opened
|
||||
|
@ -33,8 +34,12 @@ msgstr "Nouveau titre de la tâche délégué à l'utilisateur."
|
|||
#. module: project
|
||||
#: code:addons/project/wizard/close_task.py:0
|
||||
#, python-format
|
||||
msgid "Couldn't send mail because the contact for this task (%s) has no email address!"
|
||||
msgstr "Impossible d'envoyer un mail parce que le contact pour cette tâche (%s) n'a pas d'adresse mail!"
|
||||
msgid ""
|
||||
"Couldn't send mail because the contact for this task (%s) has no email "
|
||||
"address!"
|
||||
msgstr ""
|
||||
"Impossible d'envoyer un mail parce que le contact pour cette tâche (%s) n'a "
|
||||
"pas d'adresse mail!"
|
||||
|
||||
#. module: project
|
||||
#: view:config.compute.remaining:0
|
||||
|
@ -58,15 +63,9 @@ msgid "Operation Not Permitted !"
|
|||
msgstr "Opération non permises !"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/wizard/task_delegate.py:0
|
||||
#, python-format
|
||||
msgid "CHECK: "
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
#: view:project.task:0
|
||||
msgid "Delegations"
|
||||
msgstr "Délégations"
|
||||
|
||||
#. module: project
|
||||
#: wizard_field:project.task.delegate,init,planned_hours_me:0
|
||||
|
@ -81,8 +80,12 @@ msgstr "Achevé"
|
|||
#. module: project
|
||||
#: help:config.compute.remaining,remaining_hours:0
|
||||
#: help:project.task,remaining_hours:0
|
||||
msgid "Total remaining time, can be re-estimated periodically by the assignee of the task."
|
||||
msgstr "Total des heures restantes, peut être re-estimée périodiquement par l'assignation des tâches."
|
||||
msgid ""
|
||||
"Total remaining time, can be re-estimated periodically by the assignee of "
|
||||
"the task."
|
||||
msgstr ""
|
||||
"Total des heures restantes, peut être re-estimée périodiquement par "
|
||||
"l'assignation des tâches."
|
||||
|
||||
#. module: project
|
||||
#: field:project.project,child_id:0
|
||||
|
@ -112,8 +115,12 @@ msgstr "Tâches déléguées"
|
|||
|
||||
#. module: project
|
||||
#: help:project.project,warn_header:0
|
||||
msgid "Header added at the beginning of the email for the warning message sent to the customer when a task is closed."
|
||||
msgstr "L'entête est ajouté au début de l'email pour que le message d'avertissement soit envoyer au client lorsque la tâche est fermé."
|
||||
msgid ""
|
||||
"Header added at the beginning of the email for the warning message sent to "
|
||||
"the customer when a task is closed."
|
||||
msgstr ""
|
||||
"L'entête est ajouté au début de l'email pour que le message d'avertissement "
|
||||
"soit envoyer au client lorsque la tâche est fermé."
|
||||
|
||||
#. module: project
|
||||
#: field:project.task,priority:0
|
||||
|
@ -131,9 +138,12 @@ msgid "User you want to delegate this task to."
|
|||
msgstr "Utilisateur à qui vous voulez déléguer votre tâche."
|
||||
|
||||
#. module: project
|
||||
#: model:ir.actions.wizard,name:project.wizard_attachment_task
|
||||
msgid "All Attachments"
|
||||
#: help:project.project,members:0
|
||||
msgid ""
|
||||
"Project's member. Not used in any computation, just for information purpose."
|
||||
msgstr ""
|
||||
"Membre du projet. Non utilisé dans aucun calcul, juste proposer à titre "
|
||||
"d'information"
|
||||
|
||||
#. module: project
|
||||
#: model:process.transition.action,name:project.process_transition_action_openpendingtask0
|
||||
|
@ -177,13 +187,6 @@ msgstr "Très urgent"
|
|||
msgid "Validate"
|
||||
msgstr "Valider"
|
||||
|
||||
#. module: project
|
||||
#: model:ir.module.module,description:project.module_meta_information
|
||||
msgid "Project management module that track multi-level projects, tasks,\n"
|
||||
"works done on tasks, eso. It is able to render planning, order tasks, eso.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: model:ir.actions.act_window,name:project.action_view_task5_prog_prog
|
||||
#: model:ir.ui.menu,name:project.menu_tasks_yours_prog_prog
|
||||
|
@ -208,8 +211,12 @@ msgstr "Tâche"
|
|||
|
||||
#. module: project
|
||||
#: help:project.task.delegate,init,planned_hours_me:0
|
||||
msgid "Estimated time for you to validate the work done by the user to whom you delegate this task."
|
||||
msgstr "Temps estimé par vous pour valider le travail terminé de l'utilisateur auquel vous avez délégué la tâche."
|
||||
msgid ""
|
||||
"Estimated time for you to validate the work done by the user to whom you "
|
||||
"delegate this task."
|
||||
msgstr ""
|
||||
"Temps estimé par vous pour valider le travail terminé de l'utilisateur "
|
||||
"auquel vous avez délégué la tâche."
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
|
@ -250,8 +257,11 @@ msgstr "Mes tâches en brouillon"
|
|||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
msgid "Automatic variables for headers and footer. Use exactly the same notation."
|
||||
msgstr "Variables automatiques pour les entêtes et pieds. Avec exactement la même notation."
|
||||
msgid ""
|
||||
"Automatic variables for headers and footer. Use exactly the same notation."
|
||||
msgstr ""
|
||||
"Variables automatiques pour les entêtes et pieds. Avec exactement la même "
|
||||
"notation."
|
||||
|
||||
#. module: project
|
||||
#: selection:project.project,state:0
|
||||
|
@ -283,8 +293,12 @@ msgstr "Tâches délégués à d'autres utilisateurs"
|
|||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "A new project has been created !\nWe suggest you to close this one and work on this new project."
|
||||
msgid ""
|
||||
"A new project has been created !\n"
|
||||
"We suggest you to close this one and work on this new project."
|
||||
msgstr ""
|
||||
"Un nouveau projet a été crée !\n"
|
||||
"Nous vous suggerons de fermer celui-ci et de travailler sur le nouveau."
|
||||
|
||||
#. module: project
|
||||
#: help:project.task,effective_hours:0
|
||||
|
@ -293,13 +307,12 @@ msgstr "Le calcul utilise la somme de toutes les tâches terminés"
|
|||
|
||||
#. module: project
|
||||
#: help:project.project,warn_customer:0
|
||||
msgid "If you check this, the user will have a popup when closing a task that propose a message to send by email to the customer."
|
||||
msgstr "Si vous cochez la case, l'utilisateur verra un menu surgissant quand une tâche sera fermé proposant un message pour envoyer un mail au client."
|
||||
|
||||
#. module: project
|
||||
#: help:project.task.delegate,init,new_task_description:0
|
||||
msgid "Reinclude the description of the task in the task of the user."
|
||||
msgid ""
|
||||
"If you check this, the user will have a popup when closing a task that "
|
||||
"propose a message to send by email to the customer."
|
||||
msgstr ""
|
||||
"Si vous cochez la case, l'utilisateur verra un menu surgissant quand une "
|
||||
"tâche sera fermé proposant un message pour envoyer un mail au client."
|
||||
|
||||
#. module: project
|
||||
#: field:project.project,category_id:0
|
||||
|
@ -351,14 +364,14 @@ msgid "Reset as Project"
|
|||
msgstr "Réinitialiser en projet"
|
||||
|
||||
#. module: project
|
||||
#: view:project.task:0
|
||||
msgid "Delegations"
|
||||
msgstr "Délégations"
|
||||
#: selection:project.project,state:0
|
||||
msgid "Template"
|
||||
msgstr "Modèle"
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,members:0
|
||||
msgid "Project's member. Not used in any computation, just for information purpose."
|
||||
msgstr "Membre du projet. Non utilisé dans aucun calcul, juste proposer à titre d'information"
|
||||
#: wizard_button:project.task.close,mail_ask,mail_send:0
|
||||
msgid "Send Message"
|
||||
msgstr "Envoyer un message"
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
|
@ -384,12 +397,8 @@ msgstr "Tache délégué"
|
|||
#. module: project
|
||||
#: help:project.project,progress_rate:0
|
||||
msgid "Percent of tasks closed according to the total of tasks todo."
|
||||
msgstr "Pourcentage des tâches fermés en accord avec le total des tâches à faire."
|
||||
|
||||
#. module: project
|
||||
#: wizard_field:project.task.delegate,init,new_task_description:0
|
||||
msgid "New Task Description"
|
||||
msgstr ""
|
||||
"Pourcentage des tâches fermés en accord avec le total des tâches à faire."
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,notes:0
|
||||
|
@ -498,11 +507,6 @@ msgstr "Mes projets"
|
|||
msgid "Estimated time to close this task by the delegated user."
|
||||
msgstr "Temps estimés pour fermer cette tâche par l'utilisateur délégué"
|
||||
|
||||
#. module: project
|
||||
#: selection:project.project,state:0
|
||||
msgid "Template"
|
||||
msgstr "Modèle"
|
||||
|
||||
#. module: project
|
||||
#: model:ir.ui.menu,name:project.menu_definitions
|
||||
#: view:res.company:0
|
||||
|
@ -600,13 +604,9 @@ msgstr "Nouvelle tâche"
|
|||
#. module: project
|
||||
#: help:project.project,timesheet_id:0
|
||||
msgid "Timetable working hours to adjust the gantt diagram report"
|
||||
msgstr "Emploi du temps des heures travaillés pour ajuster le rapport du diagramme de Gantt"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' set in progress"
|
||||
msgstr ""
|
||||
"Emploi du temps des heures travaillés pour ajuster le rapport du diagramme "
|
||||
"de Gantt"
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
|
@ -634,12 +634,6 @@ msgstr "Mes tâches"
|
|||
msgid "Status: %(state)s"
|
||||
msgstr "Statut: %(state)s"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: view:project.task:0
|
||||
msgid "Planned"
|
||||
|
@ -713,8 +707,12 @@ msgstr "État"
|
|||
|
||||
#. module: project
|
||||
#: help:project.task.delegate,init,state:0
|
||||
msgid "New state of your own task. Pending will be reopened automatically when the delegated task is closed."
|
||||
msgstr "Nouvel état de votre propre tâche. En attente sera ré-ouverte automatiquement lorsque la tâche délégué sera fermé."
|
||||
msgid ""
|
||||
"New state of your own task. Pending will be reopened automatically when the "
|
||||
"delegated task is closed."
|
||||
msgstr ""
|
||||
"Nouvel état de votre propre tâche. En attente sera ré-ouverte "
|
||||
"automatiquement lorsque la tâche délégué sera fermé."
|
||||
|
||||
#. module: project
|
||||
#: field:res.company,project_time_mode:0
|
||||
|
@ -725,12 +723,7 @@ msgstr "Unité de temps du projet"
|
|||
#: field:project.project,complete_name:0
|
||||
#: field:project.project,name:0
|
||||
msgid "Project Name"
|
||||
msgstr "Nom du groupe"
|
||||
|
||||
#. module: project
|
||||
#: wizard_button:project.task.close,mail_ask,mail_send:0
|
||||
msgid "Send Message"
|
||||
msgstr "Envoyer un message"
|
||||
msgstr "Nom du projet"
|
||||
|
||||
#. module: project
|
||||
#: field:project.project,total_hours:0
|
||||
|
@ -760,8 +753,13 @@ msgstr "Édition de tâche"
|
|||
|
||||
#. module: project
|
||||
#: help:project.task,delay_hours:0
|
||||
msgid "Computed as: Total Time - Estimated Time. It gives the difference of the time estimated by the project manager and the real time to close the task."
|
||||
msgstr "Calculer comme: Temps total - Temps estimé. Cela donne la différence de temps estimé par le responsable projet et le temps réel pour fermer cette tâche."
|
||||
msgid ""
|
||||
"Computed as: Total Time - Estimated Time. It gives the difference of the "
|
||||
"time estimated by the project manager and the real time to close the task."
|
||||
msgstr ""
|
||||
"Calculer comme: Temps total - Temps estimé. Cela donne la différence de "
|
||||
"temps estimé par le responsable projet et le temps réel pour fermer cette "
|
||||
"tâche."
|
||||
|
||||
#. module: project
|
||||
#: model:process.node,name:project.process_node_opentask0
|
||||
|
@ -790,10 +788,15 @@ msgstr "Date"
|
|||
|
||||
#. module: project
|
||||
#: help:res.company,project_time_mode:0
|
||||
msgid "This will set the unit of measure used in projects and tasks.\n"
|
||||
"If you use the timesheet linked to projects (project_timesheet module), don't forget to setup the right unit of measure in your employees."
|
||||
msgstr "Ceci fixe l'unité de mesure utilisée dans les projets et tâches.\n"
|
||||
"Si vous utilisez les feuilles de temps couplés aux projets (project_timesheet module), n'oubliez pas de fixer la bonne unité de mesure de vos employés."
|
||||
msgid ""
|
||||
"This will set the unit of measure used in projects and tasks.\n"
|
||||
"If you use the timesheet linked to projects (project_timesheet module), "
|
||||
"don't forget to setup the right unit of measure in your employees."
|
||||
msgstr ""
|
||||
"Ceci fixe l'unité de mesure utilisée dans les projets et tâches.\n"
|
||||
"Si vous utilisez les feuilles de temps couplés aux projets "
|
||||
"(project_timesheet module), n'oubliez pas de fixer la bonne unité de mesure "
|
||||
"de vos employés."
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/wizard/close_task.py:0
|
||||
|
@ -820,18 +823,15 @@ msgstr "Urgent"
|
|||
#: code:addons/project/wizard/close_task.py:0
|
||||
#, python-format
|
||||
msgid "Couldn't send mail because your email address is not configured!"
|
||||
msgstr "Impossible d'envoyer un mail parce que votre adresse mail n'est pas configuré!"
|
||||
msgstr ""
|
||||
"Impossible d'envoyer un mail parce que votre adresse mail n'est pas "
|
||||
"configuré!"
|
||||
|
||||
#. module: project
|
||||
#: wizard_view:project.task.delegate,init:0
|
||||
msgid "Delegate this task to a user"
|
||||
msgstr "Délégué cette tâche à un utilisateur"
|
||||
|
||||
#. module: project
|
||||
#: field:project.task,delegated_user_id:0
|
||||
msgid "Delegated To"
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: field:project.task,date_close:0
|
||||
msgid "Date Closed"
|
||||
|
@ -844,19 +844,18 @@ msgstr "Assigné à"
|
|||
|
||||
#. module: project
|
||||
#: help:project.task,planned_hours:0
|
||||
msgid "Estimated time to do the task, usually set by the project manager when the task is in draft state."
|
||||
msgstr "Temps estimé pour réaliser la tâche, habituellement fixé par le responsable du projet quand la tâche est à l'état brouillon"
|
||||
msgid ""
|
||||
"Estimated time to do the task, usually set by the project manager when the "
|
||||
"task is in draft state."
|
||||
msgstr ""
|
||||
"Temps estimé pour réaliser la tâche, habituellement fixé par le responsable "
|
||||
"du projet quand la tâche est à l'état brouillon"
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,effective_hours:0
|
||||
msgid "Sum of spent hours of all tasks related to this project."
|
||||
msgstr "Somme des heures passés de toutes les tâches reliés à ce projet"
|
||||
|
||||
#. module: project
|
||||
#: help:project.task,project_id:0
|
||||
msgid "If you have [?] in the project name, it means there are no analytic account linked to this project."
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,planned_hours:0
|
||||
msgid "Sum of planned hours of all tasks related to this project."
|
||||
|
@ -893,11 +892,6 @@ msgstr "Résumé de la tâche"
|
|||
msgid "Date Start: %(date_start)s"
|
||||
msgstr "Date de début: %(date_start)s"
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,category_id:0
|
||||
msgid "Link this project to an analytic account if you need financial management on projects. It enables you to connect projects with budgets, planning, cost and revenue analysis, timesheets on projects, etc."
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
#: selection:project.project,state:0
|
||||
|
@ -931,8 +925,11 @@ msgstr "Ouvert"
|
|||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "You can not delete a project with tasks. I suggest you to deactivate it."
|
||||
msgstr "Vous ne pouvez pas supprimer un projet avec des tâches. Je suggère de le désactivé."
|
||||
msgid ""
|
||||
"You can not delete a project with tasks. I suggest you to deactivate it."
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas supprimer un projet avec des tâches. Je suggère de le "
|
||||
"désactivé."
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
|
@ -946,8 +943,11 @@ msgstr "En cours"
|
|||
|
||||
#. module: project
|
||||
#: 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: project
|
||||
#: view:project.task:0
|
||||
|
@ -1032,11 +1032,6 @@ msgstr "Travail effectué"
|
|||
msgid "Running"
|
||||
msgstr "En cours"
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,parent_id:0
|
||||
msgid "If you have [?] in the name, it means there are no analytic account linked to project."
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: model:ir.actions.wizard,name:project.wizard_delegate_task
|
||||
msgid "Delegate Task"
|
||||
|
@ -1049,20 +1044,18 @@ msgstr "Tâches du projet"
|
|||
|
||||
#. module: project
|
||||
#: help:project.project,warn_manager:0
|
||||
msgid "If you check this field, the project manager will receive a request each time a task is completed by his team."
|
||||
msgstr "Si vous cochez ce champs, le responsable du projet recevra une requête chaque fois qu'une tâche est completé par son équipe."
|
||||
msgid ""
|
||||
"If you check this field, the project manager will receive a request each "
|
||||
"time a task is completed by his team."
|
||||
msgstr ""
|
||||
"Si vous cochez ce champs, le responsable du projet recevra une requête "
|
||||
"chaque fois qu'une tâche est completé par son équipe."
|
||||
|
||||
#. module: project
|
||||
#: model:project.task.type,name:project.project_tt_feature
|
||||
msgid "New Feature"
|
||||
msgstr "Nouvelle fonctionnalité"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project
|
||||
#: model:process.node,note:project.process_node_opentask0
|
||||
msgid "Encode your working hours."
|
||||
|
@ -1107,8 +1100,12 @@ msgstr "Séquence"
|
|||
|
||||
#. module: project
|
||||
#: help:project.project,warn_footer:0
|
||||
msgid "Footer added at the beginning of the email for the warning message sent to the customer when a task is closed."
|
||||
msgstr "Le pied de page est ajouté à la fin de l'email pour le message d'avertissement envoyé au client lorsque la tâche est fermée"
|
||||
msgid ""
|
||||
"Footer added at the beginning of the email for the warning message sent to "
|
||||
"the customer when a task is closed."
|
||||
msgstr ""
|
||||
"Le pied de page est ajouté à la fin de l'email pour le message "
|
||||
"d'avertissement envoyé au client lorsque la tâche est fermée"
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
|
@ -1172,3 +1169,82 @@ msgstr "pied du mail"
|
|||
msgid "Running projects"
|
||||
msgstr "Projets en cours"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/wizard/task_delegate.py:0
|
||||
#, python-format
|
||||
msgid "CHECK: "
|
||||
msgstr "CONTROLE: "
|
||||
|
||||
#. module: project
|
||||
#: model:ir.module.module,description:project.module_meta_information
|
||||
msgid ""
|
||||
"Project management module that track multi-level projects, tasks,\n"
|
||||
"works done on tasks, eso. It is able to render planning, order tasks, eso.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Module de gestion de projets pour gérer des projets et tâches à multiples "
|
||||
"niveaux\n"
|
||||
" "
|
||||
|
||||
#. module: project
|
||||
#: help:project.task.delegate,init,new_task_description:0
|
||||
msgid "Reinclude the description of the task in the task of the user."
|
||||
msgstr "Réinclure la description de la tâche dans la tâche de l'utilisateur"
|
||||
|
||||
#. module: project
|
||||
#: wizard_field:project.task.delegate,init,new_task_description:0
|
||||
msgid "New Task Description"
|
||||
msgstr "Description de la nouvelle tâche"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' set in progress"
|
||||
msgstr "Tâche '%s' mise en cours"
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' cancelled"
|
||||
msgstr "Tâche '%s' annullée"
|
||||
|
||||
#. module: project
|
||||
#: field:project.task,delegated_user_id:0
|
||||
msgid "Delegated To"
|
||||
msgstr "Déléguer à"
|
||||
|
||||
#. module: project
|
||||
#: help:project.task,project_id:0
|
||||
msgid ""
|
||||
"If you have [?] in the project name, it means there are no analytic account "
|
||||
"linked to this project."
|
||||
msgstr ""
|
||||
"So vous avez [?] dans le nom du projet, cela signifie qu'il n'y a pas de "
|
||||
"compte analytique lié au projet."
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,category_id:0
|
||||
msgid ""
|
||||
"Link this project to an analytic account if you need financial management on "
|
||||
"projects. It enables you to connect projects with budgets, planning, cost "
|
||||
"and revenue analysis, timesheets on projects, etc."
|
||||
msgstr ""
|
||||
"Associe ce projet à un compte analytique si vous avez besoin de la gestion "
|
||||
"financière des projets. Il vous permet de relier des projets aux budgets, la "
|
||||
"planification, l'analyse des coûts et des revenus, des feuilles de temps sur "
|
||||
"des projets, etc."
|
||||
|
||||
#. module: project
|
||||
#: help:project.project,parent_id:0
|
||||
msgid ""
|
||||
"If you have [?] in the name, it means there are no analytic account linked "
|
||||
"to project."
|
||||
msgstr ""
|
||||
"So vous avez [?] dans le nom, cela signifie qu'il n'y a pas de compte "
|
||||
"analytique lié au projet."
|
||||
|
||||
#. module: project
|
||||
#: code:addons/project/project.py:0
|
||||
#, python-format
|
||||
msgid "Task '%s' closed"
|
||||
msgstr "Tâche '%s' clôturée"
|
||||
|
|
|
@ -140,8 +140,8 @@
|
|||
<field name="name">New Project</field>
|
||||
<field name="res_model">project.project</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form,tree,calendar</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="view_mode">form,tree</field>
|
||||
<field name="view_id" eval="edit_project"/>
|
||||
</record>
|
||||
<menuitem action="open_view_project" id="menu_open_view_project" parent="menu_all_project" sequence="50"/>
|
||||
|
||||
|
|
|
@ -6,17 +6,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-05-19 14:22:20+0000\n"
|
||||
"PO-Revision-Date: 2009-05-20 10:22:20+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2009-04-09 17:23+0000\n"
|
||||
"PO-Revision-Date: 2009-07-06 12:58+0000\n"
|
||||
"Last-Translator: Olivier (OpenERP) <Unknown>\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: 2009-07-06 13:00+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: project_retro_planning
|
||||
#: model:ir.module.module,shortdesc:project_retro_planning.module_meta_information
|
||||
msgid "Project Retro planning"
|
||||
msgstr ""
|
||||
|
||||
msgstr "Rétro planification de projets"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue