From 8bc8d7e1ebf134188f249588074e909ff7ac299e Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Wed, 17 Dec 2008 10:18:58 +0100 Subject: [PATCH 01/22] Fixed: zero divison error bzr revid: olt@tinyerp.com-20081217091858-u3mpm5lj6qrlpgtt --- addons/crm/report/report_businessopp.py | 34 +++++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/addons/crm/report/report_businessopp.py b/addons/crm/report/report_businessopp.py index bb2663a09a0..a351379bd6b 100644 --- a/addons/crm/report/report_businessopp.py +++ b/addons/crm/report/report_businessopp.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved # $Id$ # @@ -30,7 +30,7 @@ import StringIO import tools import pooler -from report.render import render +from report.render import render from report.interface import report_int from pychart import * @@ -43,7 +43,7 @@ class external_pdf(render): render.__init__(self) self.pdf = pdf self.output_type='pdf' - + def _render(self): return self.pdf @@ -64,13 +64,13 @@ class report_custom(report_int): cost = row['planned_cost'] or 0 revenue = row['planned_revenue'] or 0 userid = row['user_id'] or 0 - + benefit = revenue - cost if benefit > maxbenef: maxbenef = benefit if benefit < minbenef: minbenef = benefit - + tuple = (proba * 100, benefit) responsible_data.setdefault(userid, []) responsible_data[userid].append(tuple) @@ -82,19 +82,19 @@ class report_custom(report_int): minbenef -= maxbenef * 0.05 maxbenef *= 1.2 - + ratio = 0.5 minmaxdiff2 = (maxbenef - minbenef)/2 - + for l in responsible_data.itervalues(): for i in range(len(l)): percent, benef = l[i] proba = percent/100 current_ratio = 1 + (ratio-1) * proba - + newbenef = minmaxdiff2 + ((benef - minbenef - minmaxdiff2) * current_ratio) - + l[i] = (percent, newbenef) #TODO: @@ -103,23 +103,29 @@ class report_custom(report_int): pdf_string = StringIO.StringIO() can = canvas.init(fname=pdf_string, format='pdf') - + chart_object.set_defaults(line_plot.T, line_style=None) - + xaxis = axis.X(label=None, format="%d%%", tic_interval=20) yaxis = axis.Y() + x_range_a, x_range_b = (0,100) + y_range_a, y_range_b = (minbenef, maxbenef) + if y_range_a == 0.0: + y_range_a += 0.0001 + ar = area.T( size = (300,200), y_grid_interval = 10000, y_grid_style=None, - x_range = (0,100), - y_range = (minbenef, maxbenef), + x_range = (x_range_a, x_range_b), + y_range = (y_range_a, y_range_b), x_axis = xaxis, y_axis = None, legend = legend.T() ) + #import pydb; pydb.debugger() for k, d in responsible_data.iteritems(): fill = fill_style.Plain(bgcolor=color.T(r=random.random(), g=random.random(), b=random.random())) tick = tick_mark.Square(size=6, fill_style=fill) @@ -131,7 +137,7 @@ class report_custom(report_int): ar = area.T(legend = legend.T(), size = (200,100), loc=(100,250), - x_grid_interval = lambda min, max: [40,60,80,100], + x_grid_interval = lambda min, max: [40,60,80,100], x_grid_style=line_style.gray70_dash1, x_range = (33, 100), x_axis = axis.X(label=None, minor_tic_interval=lambda min,max: [50, 70, 90], format=lambda x: ""), From 24a02a61dc2bd8a9aa68ccff6c9f7a30cc9ae1f7 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 17 Dec 2008 10:25:54 +0100 Subject: [PATCH 02/22] [FIX] fix crash when updating crm_configuration module bzr revid: christophe@cobalt-20081217092554-71f72u61bp5rbpil --- addons/crm_configuration/report/crm_report.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/crm_configuration/report/crm_report.py b/addons/crm_configuration/report/crm_report.py index 775eb7ec5cc..156f7c21a44 100644 --- a/addons/crm_configuration/report/crm_report.py +++ b/addons/crm_configuration/report/crm_report.py @@ -28,6 +28,13 @@ AVAILABLE_STATES = [ ('done', 'Closed'), ('pending','Pending') ] + +def drop_view_if_exists(cr, viewname): + cr.execute("select count(1) from pg_class where relkind=%s and relname=%s", ('v', viewname,)) + if cr.fetchone(): + cr.execute("DROP view %s" % (viewname,)) + cr.commit() + class report_crm_case_section_categ2(osv.osv): _name = "report.crm.case.section.categ2" _description = "Cases by section and category2" @@ -46,8 +53,9 @@ class report_crm_case_section_categ2(osv.osv): _order = 'category2_id, section_id' def init(self, cr): + drop_view_if_exists(cr, "report_crm_case_section_categ2") cr.execute(""" - create or replace view report_crm_case_section_categ2 as ( + create view report_crm_case_section_categ2 as ( select min(c.id) as id, to_char(c.create_date,'YYYY-MM')||'-01' as name, @@ -84,8 +92,9 @@ class report_crm_case_section_stage(osv.osv): _order = 'stage_id, section_id' def init(self, cr): + drop_view_if_exists(cr, "report_crm_case_section_stage") cr.execute(""" - create or replace view report_crm_case_section_stage as ( + create view report_crm_case_section_stage as ( select min(c.id) as id, to_char(c.create_date,'YYYY-MM')||'-01' as name, @@ -120,8 +129,9 @@ class report_crm_case_section_categ_stage(osv.osv): _order = 'stage_id, section_id, categ_id' def init(self, cr): + drop_view_if_exists(cr, "report_crm_case_section_categ_stage") cr.execute(""" - create or replace view report_crm_case_section_categ_stage as ( + create view report_crm_case_section_categ_stage as ( select min(c.id) as id, to_char(c.create_date,'YYYY-MM')||'-01' as name, @@ -157,8 +167,9 @@ class report_crm_case_section_categ_categ2(osv.osv): _order = 'section_id, categ_id, category2_id' def init(self, cr): + drop_view_if_exists(cr, "report_crm_case_section_categ_categ2") cr.execute(""" - create or replace view report_crm_case_section_categ_categ2 as ( + create view report_crm_case_section_categ_categ2 as ( select min(c.id) as id, to_char(c.create_date, 'YYYY-MM')||'-01' as name, From ddfaa6678f2c5e79256a995a829b546a8b6f18a3 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Wed, 17 Dec 2008 10:37:31 +0100 Subject: [PATCH 03/22] 'order.partner_id.property_account_tax' does not exists anymore -> now using 'fiscal position' bzr revid: olt@tinyerp.com-20081217093731-f0gcwsi8356pzbv3 --- addons/point_of_sale/pos.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/point_of_sale/pos.py b/addons/point_of_sale/pos.py index f7d88253590..6d77cb35e78 100644 --- a/addons/point_of_sale/pos.py +++ b/addons/point_of_sale/pos.py @@ -60,7 +60,9 @@ class pos_order(osv.osv): res = dict(cr.fetchall()) for rec in self.browse(cr, uid, ids, context): - if rec.partner_id and rec.partner_id.property_account_tax: + if rec.partner_id \ + and rec.partner_id.property_account_position \ + and rec.partner_id.property_account_position.tax_ids: res[rec.id] = res[rec.id] - rec.amount_tax return res From 269e7a6ec154fe2c88830446ad7321ae5d39fd65 Mon Sep 17 00:00:00 2001 From: hmo-tinyerp <> Date: Wed, 17 Dec 2008 15:13:42 +0530 Subject: [PATCH 04/22] fixed bug:308803 bzr revid: hmo-tinyerp-20081217094342-qlzormyrn7kjupnv --- addons/sale/stock.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/stock.py b/addons/sale/stock.py index 79cd9a22e51..0c6ec645150 100644 --- a/addons/sale/stock.py +++ b/addons/sale/stock.py @@ -99,7 +99,7 @@ class stock_picking(osv.osv): sale_line_obj = self.pool.get('sale.order.line') if move_line.sale_line_id: sale_line_obj.write(cursor, user, [move_line.sale_line_id.id], {'invoiced':True, - 'invoice_lines': [(6, 0, [invoice_line_id])], + 'invoice_lines': [(4, invoice_line_id)], }) return super(stock_picking, self)._invoice_line_hook(cursor, user, move_line, invoice_line_id) From b035f7169269cffded32c889cb8b3630ae2ca35c Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Wed, 17 Dec 2008 18:18:00 +0530 Subject: [PATCH 05/22] bug fix on membership bzr revid: mra@tinyerp.com-20081217124800-6nrloa8zxdo8s0zo --- addons/membership/membership.py | 81 +++++++++++-------- .../membership/wizard/invoice_membership.py | 17 ++-- 2 files changed, 58 insertions(+), 40 deletions(-) diff --git a/addons/membership/membership.py b/addons/membership/membership.py index a1480201dc8..ed034f7a59d 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved # $Id$ # @@ -225,11 +225,11 @@ membership_line() class Partner(osv.osv): '''Partner''' - def _membership_state_search_inv(self, cr, uid, ids, context=None): - data_inv = self.pool.get('account.invoice').browse(cr, uid, ids, context) + def _get_partner_id(self, cr, uid, ids, context=None): + data_inv = self.pool.get('membership.membership_line').browse(cr, uid, ids, context) list_partner = [] for data in data_inv: - list_partner.append(data.partner_id.id) + list_partner.append(data.partner.id) return list_partner def _membership_state(self, cr, uid, ids, name, args, context=None): @@ -237,7 +237,6 @@ class Partner(osv.osv): for id in ids: res[id] = 'none' today = time.strftime('%Y-%m-%d') - for id in ids: partner_data = self.browse(cr,uid,id) if partner_data.membership_cancel and today > partner_data.membership_cancel: @@ -437,7 +436,8 @@ class Partner(osv.osv): # 'membership_state': fields.function(_membership_state, method=True, string='Current membership state', # type='selection', selection=STATE, fnct_search=_membership_state_search), 'membership_state': fields.function(_membership_state, method=True, string='Current membership state', - type='selection',selection=STATE,store={'account.invoice':(_membership_state_search_inv,['state'], 10)}), + type='selection',selection=STATE,store={'membership.membership_line':(_get_partner_id,['state'], 10), + 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), # 'associate_member': fields.many2one('res.partner', 'Associate member'), 'free_member': fields.boolean('Free member'), 'membership_start': fields.function(_membership_start, method=True, @@ -501,36 +501,53 @@ class Invoice(osv.osv): _inherit = 'account.invoice' - - def action_move_create(self, cr, uid, ids, context=None): - '''Create membership.membership_line if the product is for membership''' - if context is None: - context = {} + def create(self, cr, uid, vals, context={}): + result = super(Invoice, self).create(cr, uid, vals, context) + a = self.browse(cr, uid, result) member_line_obj = self.pool.get('membership.membership_line') - partner_obj = self.pool.get('res.partner') - for invoice in self.browse(cr, uid, ids): - - # fetch already existing member lines - former_mlines = member_line_obj.search(cr,uid, - [('account_invoice_line','in', - [ l.id for l in invoice.invoice_line])], context) - # empty them : - if former_mlines: - member_line_obj.write(cr,uid,former_mlines, {'account_invoice_line':False}, context) - - for line in invoice.invoice_line: - if line.product_id and line.product_id.membership: - date_from = line.product_id.membership_date_from - date_to = line.product_id.membership_date_to - if invoice.date_invoice > date_from and invoice.date_invoice < date_to: - date_from = invoice.date_invoice - member_line_obj.create(cr, uid, { - 'partner': invoice.partner_id.id, + for i in a.invoice_line: + if i.product_id and i.product_id.membership: + date_from = i.product_id.membership_date_from + date_to = i.product_id.membership_date_to + if a.date_invoice > date_from and a.date_invoice < date_to: + date_from = a.date_invoice + line_id = member_line_obj.create(cr, uid, { + 'partner': a.partner_id.id, 'date_from': date_from, 'date_to': date_to, - 'account_invoice_line': line.id, + 'account_invoice_line': i.id, }) - return super(Invoice, self).action_move_create(cr, uid, ids, context) + return result + +# def action_move_create(self, cr, uid, ids, context=None): +# '''Create membership.membership_line if the product is for membership''' +# if context is None: +# context = {} +# member_line_obj = self.pool.get('membership.membership_line') +# partner_obj = self.pool.get('res.partner') +# for invoice in self.browse(cr, uid, ids): +# +# # fetch already existing member lines +# former_mlines = member_line_obj.search(cr,uid, +# [('account_invoice_line','in', +# [ l.id for l in invoice.invoice_line])], context) +# # empty them : +# if former_mlines: +# member_line_obj.write(cr,uid,former_mlines, {'account_invoice_line':False}, context) +# +# for line in invoice.invoice_line: +# if line.product_id and line.product_id.membership: +# date_from = line.product_id.membership_date_from +# date_to = line.product_id.membership_date_to +# if invoice.date_invoice > date_from and invoice.date_invoice < date_to: +# date_from = invoice.date_invoice +# line_id = member_line_obj.create(cr, uid, { +# 'partner': invoice.partner_id.id, +# 'date_from': date_from, +# 'date_to': date_to, +# 'account_invoice_line': line.id, +# }) +# return super(Invoice, self).action_move_create(cr, uid, ids, context) def action_cancel(self, cr, uid, ids, context=None): '''Create a 'date_cancel' on the membership_line object''' diff --git a/addons/membership/wizard/invoice_membership.py b/addons/membership/wizard/invoice_membership.py index abf8ca40f4a..b3e326930e6 100644 --- a/addons/membership/wizard/invoice_membership.py +++ b/addons/membership/wizard/invoice_membership.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution +# OpenERP, Open Source Management Solution # Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved # $Id$ # @@ -60,15 +60,8 @@ def _invoice_membership(self, cr, uid, data, context): for partner_id in partner_ids: account_id = partner_obj.read(cr, uid, partner_id, ['property_account_receivable'])['property_account_receivable'][0] - invoice_id = invoice_obj.create(cr, uid, { - 'partner_id' : partner_id, - 'address_invoice_id': partner_address_ids[partner_id]['id'], - 'account_id': account_id, - } - ) line_value = { - 'invoice_id' : invoice_id, 'product_id' : product_id, } @@ -81,12 +74,20 @@ def _invoice_membership(self, cr, uid, data, context): tax_tab = [(6, 0, line_value['invoice_line_tax_id'])] line_value['invoice_line_tax_id'] = tax_tab invoice_line_id = invoice_line_obj.create(cr, uid, line_value) + invoice_id = invoice_obj.create(cr, uid, { + 'partner_id' : partner_id, + 'address_invoice_id': partner_address_ids[partner_id]['id'], + 'account_id': account_id, + 'invoice_line':[(6,0,[invoice_line_id])] + } + ) invoice_list.append(invoice_id) if line_value['invoice_line_tax_id']: invoice_obj.write(cr, uid, [invoice_id], {'tax_line':tax_tab}) tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values()[0] invoice_tax_obj.create(cr, uid, tax_value) + value = { 'domain': [ ('id', 'in', invoice_list), From e421e22896d51fcde62567cabd6ee2f38d7306d7 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Wed, 17 Dec 2008 14:05:14 +0100 Subject: [PATCH 06/22] Merged the Launchpad translations with the Bazaar po files bzr revid: olt@tinyerp.com-20081217130514-le0f8okf9q0hzrzn --- addons/account/i18n/fr_FR.po | 221 +++++++++++++++++++---------------- 1 file changed, 122 insertions(+), 99 deletions(-) diff --git a/addons/account/i18n/fr_FR.po b/addons/account/i18n/fr_FR.po index 8f2141f970b..e9eaac4adc8 100644 --- a/addons/account/i18n/fr_FR.po +++ b/addons/account/i18n/fr_FR.po @@ -8,7 +8,9 @@ msgstr "" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2008-11-28 16:57:27+0000\n" "PO-Revision-Date: 2008-11-28 16:57:27+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2008-11-28 17:09+0000\n" +"PO-Revision-Date: 2008-12-04 14:33+0000\n" +"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,10 +19,10 @@ msgstr "" "X-Generator: Launchpad (build Unknown)\n" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "Integrity Error !" -msgstr "" +msgstr "Erreur d'Intégrité !" #. module: account #: view:account.move:0 @@ -64,10 +66,14 @@ msgid "Asset" msgstr "Actif (avoirs)" #. module: account -#, python-format #: code:addons/account/wizard/wizard_validate_account_move.py:0 -msgid "Specified Journal does not have any account move entries in draft state for this period" +#, python-format +msgid "" +"Specified Journal does not have any account move entries in draft state for " +"this period" msgstr "" +"Le Journal Spécifié ne possède aucune écriture de compte à l'état brouillon pour " +"cette période" #. module: account #: selection:account.tax,tax_group:0 @@ -100,12 +106,12 @@ msgstr "Nouvelle facture client" #. module: account #: view:account.account:0 msgid "Account Statistics" -msgstr "" +msgstr "Statistiques du Compte" #. module: account #: wizard_field:account.general.ledger.report,checktype,date_from:0 msgid " Start date" -msgstr "" +msgstr " Date de début" #. module: account #: field:account.account,parent_id:0 @@ -116,12 +122,12 @@ msgstr "Parent" #. module: account #: selection:account.move,type:0 msgid "Journal Voucher" -msgstr "" +msgstr "Pièce Justificative" #. module: account #: field:account.invoice,residual:0 msgid "Residual" -msgstr "" +msgstr "Résiduel" #. module: account #: field:account.subscription,date_start:0 @@ -129,15 +135,15 @@ msgid "Starting date" msgstr "Début de la période" #. module: account -#, python-format #: code:addons/account/wizard/wizard_refund.py:0 +#, python-format msgid "Can not %s draft invoice." -msgstr "" +msgstr "Impossible de %s une facture brouillon." #. module: account #: wizard_field:account.general.ledger.report,checktype,sortbydate:0 msgid "Sort by:" -msgstr "" +msgstr "Trier sur:" #. module: account #: model:ir.actions.wizard,name:account.wizard_unreconcile_select @@ -181,7 +187,7 @@ msgstr "Quantité" #. module: account #: view:account.move:0 msgid "Total Credit" -msgstr "" +msgstr "Crédit Total" #. module: account #: field:account.analytic.line,product_uom_id:0 @@ -192,13 +198,13 @@ msgstr "UdM" #. module: account #: rml:account.account.balance:0 msgid "Account Balance -" -msgstr "" +msgstr "Balance du Compte -" #. module: account #: model:ir.actions.wizard,name:account.wizard_general_journal #: model:ir.ui.menu,name:account.menu_general_journal msgid "Print General journal" -msgstr "" +msgstr "Imprimer le Journal Général" #. module: account #: rml:account.third_party_ledger:0 @@ -224,8 +230,8 @@ msgid "Compute Code (if type=code)" msgstr "Code de Calcul (si type=code)" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "You have to provide an account for the write off entry !" msgstr "" @@ -243,7 +249,7 @@ msgstr "Echéancier" #. module: account #: model:ir.ui.menu,name:account.menu_finance_recurrent_entries msgid "Recurrent Entries" -msgstr "" +msgstr "Écritures récurrentes" #. module: account #: rml:account.invoice:0 @@ -273,17 +279,17 @@ msgstr "Taxes fournisseurs" #. module: account #: view:account.move:0 msgid "Total Debit" -msgstr "" +msgstr "Débit Total" #. module: account #: rml:account.tax.code.entries:0 msgid "Accounting Entries-" -msgstr "" +msgstr "Écritures Comptable" #. module: account #: selection:account.move,type:0 msgid "Bank Receipt" -msgstr "" +msgstr "Reçu Bancaire" #. module: account #: rml:account.vat.declaration:0 @@ -297,16 +303,16 @@ msgid "Fixed" msgstr "Fixe" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "Warning !" -msgstr "" +msgstr "Avertissement !" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "You can not delete posted movement: \"%s\"!" -msgstr "" +msgstr "Vous ne pouvez pas effacer de mouvement posté: \"%s\" !" #. module: account #: wizard_view:account.analytic.account.analytic.check.report,init:0 @@ -365,15 +371,15 @@ msgid "Tax" msgstr "Impôts et taxes" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "No analytic journal !" -msgstr "" +msgstr "Pas de journal analytique !" #. module: account #: rml:account.general.journal:0 msgid "Debit Trans." -msgstr "" +msgstr "Débit Trans." #. module: account #: field:account.analytic.line,account_id:0 @@ -408,7 +414,7 @@ msgstr "Partenaire" #. module: account #: field:account.fiscal.position.account,account_src_id:0 msgid "Account Source" -msgstr "" +msgstr "Source Comptable" #. module: account #: field:account.journal,update_posted:0 @@ -419,13 +425,13 @@ msgstr "Autoriser l'annulation des entrées" #: model:process.transition,name:account.process_transition_paymentorderbank0 #: model:process.transition,name:account.process_transition_paymentorderreconcilation0 msgid "Payment Reconcilation" -msgstr "" +msgstr "Réconciliation du Paiement" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Wrong Accounting Entry!" -msgstr "" +msgstr "Écriture Comptable Incorrecte !" #. module: account #: model:ir.actions.act_window,name:account.act_acc_analytic_acc_5_report_hr_timesheet_invoice_journal @@ -479,15 +485,15 @@ msgid "State" msgstr "État" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Entry is already reconciled" -msgstr "" +msgstr "L'Écriture est déjà réconciliée" #. module: account #: view:account.bank.statement:0 msgid "Import Invoice" -msgstr "" +msgstr "Importer la Facture" #. module: account #: help:account.tax,base_code_id:0 @@ -510,7 +516,7 @@ msgstr "Calcul particulier" #. module: account #: model:process.transition,note:account.process_transition_confirmstatementfromdraft0 msgid "Confirm statement with/without reconciliation from draft statement" -msgstr "" +msgstr "Veuillez confirmer le relevé avec/sans réconciliation du relevé brouillon" #. module: account #: wizard_view:account.move.bank.reconcile,init:0 @@ -628,8 +634,8 @@ msgid "Mvt" msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "You can not use this general account in this journal !" msgstr "" @@ -671,8 +677,8 @@ msgid "Contact" msgstr "Contact" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "You can not validate a non balanced entry !" msgstr "" @@ -710,12 +716,13 @@ msgid "Start of period" msgstr "Début de la période" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "You can not add/modify entries in a closed journal." msgstr "" #. module: account +#: code:addons/account/account_move_line.py:0 #, python-format msgid "" "You can not do this modification on a reconciled entry ! Please note that " @@ -764,8 +771,8 @@ msgid "_Customer invoices" msgstr "" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "You must first select a partner !" msgstr "" @@ -788,8 +795,8 @@ msgid "Tax Code Sign" msgstr "Facteur multiplicateur" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "Account move line \"%s\" is not valid" msgstr "" @@ -995,8 +1002,8 @@ msgid "Fiscal Positions" msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Both Credit and Debit cannot be zero!" msgstr "" @@ -1160,7 +1167,7 @@ msgstr "Montant payé" #. module: account #: selection:account.account.type,sign:0 msgid "Positive" -msgstr "" +msgstr "Positif" #. module: account #: wizard_view:account.open_closed_fiscalyear,init:0 @@ -1325,9 +1332,10 @@ msgid "Reconcile With Write-Off" msgstr "" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 -msgid "The expected balance (%.2f) is different than the computed one. (%.2f)" +#, python-format +msgid "" +"The expected balance (%.2f) is different than the computed one. (%.2f)" msgstr "" #. module: account @@ -1426,9 +1434,11 @@ msgid "Analytic lines" msgstr "Lignes analytiques" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 -msgid "You can not do this modification on a confirmed entry ! Please note that you can just change some non important fields !" +#, python-format +msgid "" +"You can not do this modification on a confirmed entry ! Please note that you " +"can just change some non important fields !" msgstr "" #. module: account @@ -1498,7 +1508,7 @@ msgstr "" #. module: account #: field:account.chart.template,property_account_receivable:0 msgid "Receivable Account" -msgstr "" +msgstr "Compte Recevable" #. module: account #: wizard_view:account.move.line.reconcile,init_partial:0 @@ -1557,7 +1567,7 @@ msgstr "Creer periodes par trimestre" #. module: account #: wizard_view:account.general.journal.report,init:0 msgid "Print General Journal" -msgstr "" +msgstr "Imprimer le Journal Général" #. module: account #: model:ir.actions.act_window,name:account.action_account_chart_template_form @@ -1575,11 +1585,11 @@ msgstr "Transactions" #: model:ir.ui.menu,name:account.menu_wizard #: view:wizard.multi.charts.accounts:0 msgid "Generate Chart of Accounts from a Chart Template" -msgstr "" +msgstr "Générer le Plan de Comptes à partir d'un Modèle de Plan" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "The statement balance is incorrect !\n" msgstr "" @@ -1702,8 +1712,8 @@ msgid "Starting Balance" msgstr "Solde de début" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "No Partner Defined !" msgstr "" @@ -1721,13 +1731,13 @@ msgid "Unreconciliation" msgstr "Déréconciliation" #. module: account -#, python-format #: code:addons/account/invoice.py:0 #: code:addons/account/account_move_line.py:0 #: code:addons/account/account.py:0 #: code:addons/account/wizard/wizard_open_closed_fiscalyear.py:0 #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 #: code:addons/account/wizard/wizard_journal.py:0 +#, python-format msgid "UserError" msgstr "" @@ -1785,7 +1795,9 @@ msgstr "Ré-Ouvrir" #. module: account #: help:account.invoice,number:0 -msgid "Uniq number of the invoice, computed automatically when the invoice is created." +msgid "" +"Uniq number of the invoice, computed automatically when the invoice is " +"created." msgstr "" #. module: account @@ -1850,8 +1862,8 @@ msgid "Account code" msgstr "Code du compte" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "You can not use an inactive account!" msgstr "" @@ -1880,7 +1892,9 @@ msgstr "Journal des ajustements" #. module: account #: help:res.partner,property_account_position:0 -msgid "The fiscal position will determine taxes and the accounts used for the the partner." +msgid "" +"The fiscal position will determine taxes and the accounts used for the the " +"partner." msgstr "" #. module: account @@ -1889,8 +1903,8 @@ msgid "Account Manager" msgstr "Comptable" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Entries are not of the same account or already reconciled ! " msgstr "" @@ -2022,8 +2036,8 @@ msgid "Total amount this customer owns you." msgstr "" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "Invalid action !" msgstr "" @@ -2093,8 +2107,8 @@ msgid "Journal-Period Name" msgstr "Nom de la période du journal" #. module: account -#, python-format #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 +#, python-format msgid "There are no periods defined on New Fiscal Year." msgstr "" @@ -2267,8 +2281,8 @@ msgid "Root Account" msgstr "Compte Racine" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "Configration Error !" msgstr "" @@ -2315,8 +2329,8 @@ msgid "x Checks Journal" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_pay_invoice.py:0 +#, python-format msgid "Your journal must have a default credit and debit account." msgstr "" @@ -2369,9 +2383,11 @@ msgid "Date" msgstr "Date" #. module: account -#, python-format #: code:addons/account/account.py:0 -msgid "No period defined for this date !\nPlease create a fiscal year." +#, python-format +msgid "" +"No period defined for this date !\n" +"Please create a fiscal year." msgstr "" #. module: account @@ -2397,8 +2413,8 @@ msgid "Statement Entries" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 +#, python-format msgid "The journal must have default credit and debit account" msgstr "" @@ -2433,12 +2449,14 @@ msgstr "Réconciliation automatique" #. module: account #: constraint:account.period:0 -msgid "Error ! The date duration of the Period(s) should be within the limit of the Fiscal year. " +msgid "" +"Error ! The date duration of the Period(s) should be within the limit of the " +"Fiscal year. " msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Some entries are already reconciled !" msgstr "" @@ -2510,8 +2528,8 @@ msgid "Print Central journal" msgstr "" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "No Analytic Journal !" msgstr "" @@ -2636,7 +2654,9 @@ msgstr "Annuler" #. module: account #: help:account.account.type,sign:0 -msgid "Allows to change the displayed amount of the balance in the reports, in order to see positive results instead of negative ones in expenses accounts." +msgid "" +"Allows to change the displayed amount of the balance in the reports, in " +"order to see positive results instead of negative ones in expenses accounts." msgstr "" #. module: account @@ -2700,8 +2720,8 @@ msgstr "" "est important." #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Already Reconciled" msgstr "" @@ -2734,9 +2754,11 @@ msgid "In dispute" msgstr "En litige" #. module: account -#, python-format #: code:addons/account/account.py:0 -msgid "No fiscal year defined for this date !\nPlease create one." +#, python-format +msgid "" +"No fiscal year defined for this date !\n" +"Please create one." msgstr "" #. module: account @@ -2755,8 +2777,8 @@ msgid "Power" msgstr "Puissance" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "The account entries lines are not in valid state." msgstr "" @@ -2802,8 +2824,8 @@ msgid "O_k" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 +#, python-format msgid "Closing of fiscal year canceled, please check the box !" msgstr "" @@ -2966,8 +2988,8 @@ msgid "Supplier Refund" msgstr "Note de Crédit Fournisseur" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "Unable to reconcile entry \"%s\": %.2f" msgstr "" @@ -2977,8 +2999,8 @@ msgid "Ending Balance" msgstr "Solde final" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Please set an analytic journal on this financial journal !" msgstr "" @@ -3028,8 +3050,8 @@ msgid "Analytic Journal -" msgstr "" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "EXJ" msgstr "" @@ -3050,10 +3072,10 @@ msgid "Draft Customer Refunds" msgstr "Note de Crédit Client Brouillon" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "Sales Journal" -msgstr "" +msgstr "Journal des ventes" #. module: account #: field:account.journal.column,readonly:0 @@ -3156,8 +3178,8 @@ msgid "(" msgstr "(" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "You can not modify/delete a journal with entries for this period !" msgstr "" @@ -3284,8 +3306,8 @@ msgid "Taxes" msgstr "Taxes" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "BNK" msgstr "" @@ -3311,15 +3333,15 @@ msgid "Templates for Accounts" msgstr "Modèles pour les Comptes" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 #: code:addons/account/account_analytic_line.py:0 +#, python-format msgid "Entries: " msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "The account is not defined to be reconcile !" msgstr "" @@ -3361,8 +3383,8 @@ msgid "30 Days End of Month" msgstr "" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "Couldn't create move between different companies" msgstr "" @@ -3406,8 +3428,8 @@ msgid "Bank Information" msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Entry \"%s\" is not valid !" msgstr "" @@ -3562,13 +3584,13 @@ msgid "Central Journal" msgstr "Journal centralisé" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 #: code:addons/account/account_analytic_line.py:0 #: code:addons/account/account_bank_statement.py:0 #: code:addons/account/account.py:0 #: code:addons/account/wizard/wizard_pay_invoice.py:0 #: code:addons/account/wizard/wizard_refund.py:0 +#, python-format msgid "Error !" msgstr "" @@ -3635,8 +3657,8 @@ msgid "Project line" msgstr "Ligne de projet" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "SAJ" msgstr "" @@ -3758,9 +3780,9 @@ msgid "Invoice Date" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_open_closed_fiscalyear.py:0 #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 +#, python-format msgid "The journal must have centralised counterpart" msgstr "" @@ -3783,8 +3805,8 @@ msgid "Open for unreconciliation" msgstr "Ouvrir pour déréconciliation" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "Bad total !" msgstr "" @@ -3896,8 +3918,8 @@ msgid "Active" msgstr "Actif" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "Purchase Journal" msgstr "" @@ -4073,8 +4095,8 @@ msgid "Payable Limit" msgstr "Limite de paiement" #. module: account -#, python-format #: code:addons/account/invoice.py:0 +#, python-format msgid "Global taxes defined, but not in invoice lines !" msgstr "" @@ -4149,7 +4171,7 @@ msgstr "Facture" #: selection:account.analytic.account,state:0 #: selection:account.invoice,state:0 msgid "Open" -msgstr "Ouvrir" +msgstr "Ouverte" #. module: account #: model:ir.ui.menu,name:account.next_id_29 @@ -4410,9 +4432,10 @@ msgid "JNRL" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_fiscalyear_close.py:0 -msgid "The new fiscal year should have a journal for new entries define on it" +#, python-format +msgid "" +"The new fiscal year should have a journal for new entries define on it" msgstr "" #. module: account @@ -4435,7 +4458,7 @@ msgstr "Recevables & payables" #. module: account #: rml:account.general.ledger:0 msgid "General Ledger -" -msgstr "" +msgstr "Grand livre -" #. module: account #: field:account.analytic.account,date_start:0 @@ -4529,8 +4552,8 @@ msgid "Entries Encoding by Move" msgstr "" #. module: account -#, python-format #: code:addons/account/account.py:0 +#, python-format msgid "You can not deactivate an account that contains account moves." msgstr "" @@ -4754,9 +4777,9 @@ msgid "The optionnal other currency if it is a multi-currency entry." msgstr "L'autre devise optionnelle si c'est une entrée multi-devise." #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 #: code:addons/account/wizard/wizard_validate_account_move.py:0 +#, python-format msgid "Warning" msgstr "" @@ -4766,8 +4789,8 @@ msgid "Skip" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_open_closed_fiscalyear.py:0 +#, python-format msgid "No journal for ending writings have been defined for the fiscal year" msgstr "" @@ -4836,8 +4859,8 @@ msgid "Supplier Invoice" msgstr "Facture fournisseur" #. module: account -#, python-format #: code:addons/account/account_bank_statement.py:0 +#, python-format msgid "Please verify that an account is defined in the journal." msgstr "" @@ -5171,8 +5194,8 @@ msgid "Sign on Reports" msgstr "" #. module: account -#, python-format #: code:addons/account/wizard/wizard_journal.py:0 +#, python-format msgid "This period is already closed !" msgstr "" @@ -5271,8 +5294,8 @@ msgid "Open Entries" msgstr "" #. module: account -#, python-format #: code:addons/account/account_move_line.py:0 +#, python-format msgid "Bad account!" msgstr "" From c421435ffc2171c6320910626443af8ea5ffdcd8 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Wed, 17 Dec 2008 14:13:39 +0100 Subject: [PATCH 07/22] Merged the Launchpad translations with the Bazaar po files bzr revid: olt@tinyerp.com-20081217131339-utr5287sx9iakiu0 --- addons/sale/i18n/fr_FR.po | 156 +++++++++++++++++++++++++++----------- 1 file changed, 112 insertions(+), 44 deletions(-) diff --git a/addons/sale/i18n/fr_FR.po b/addons/sale/i18n/fr_FR.po index 502646bb939..75e1619af82 100644 --- a/addons/sale/i18n/fr_FR.po +++ b/addons/sale/i18n/fr_FR.po @@ -8,12 +8,15 @@ msgstr "" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2008-11-28 16:57:27+0000\n" "PO-Revision-Date: 2008-11-28 16:57:27+0000\n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2008-11-28 17:09+0000\n" +"PO-Revision-Date: 2008-10-13 16:22+0000\n" +"Last-Translator: Olivier Laurent \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2008-12-16 11:00+0000\n" +"X-Generator: Launchpad (build Unknown)\n" #. module: sale #: rml:sale.shipping:0 @@ -95,8 +98,10 @@ msgstr "Exception de facture" #. module: sale #: help:sale.order,picking_ids:0 -msgid "This is the list of picking list that have been generated for this invoice" -msgstr "C'est le liste de liste de picking qui ont été généré pour cette facture" +msgid "" +"This is the list of picking list that have been generated for this invoice" +msgstr "" +"C'est la liste de liste de picking qui a été générée pour cette facture" #. module: sale #: view:sale.order:0 @@ -130,7 +135,9 @@ msgstr "Montant" #. module: sale #: model:process.transition,note:sale.process_transition_confirmquotation0 -msgid "Whenever confirm button is clicked, the draft state is moved to manual. that is, quotation is moved to sale order." +msgid "" +"Whenever confirm button is clicked, the draft state is moved to manual. that " +"is, quotation is moved to sale order." msgstr "" #. module: sale @@ -177,8 +184,8 @@ msgid "Sale Order" msgstr "Commande client" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "You must first cancel all packings attached to this sale order." msgstr "" @@ -189,8 +196,8 @@ msgid "Taxes" msgstr "Taxes" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "Invalid action !" msgstr "" @@ -234,7 +241,9 @@ msgstr "Creer les factures" #. module: sale #: model:process.transition,note:sale.process_transition_deliver0 -msgid "Confirming the packing list moves them to delivery order. This can be done by clicking on 'Validate' button." +msgid "" +"Confirming the packing list moves them to delivery order. This can be done " +"by clicking on 'Validate' button." msgstr "" #. module: sale @@ -275,8 +284,19 @@ msgstr "Méthode d'appro." #. module: sale #: help:sale.order,state:0 -msgid "Gives the state of the quotation or sale order. The exception state is automatically set when a cancel operation occurs in the invoice validation (Invoice Exception) or in the packing list process (Shipping Exception). The 'Waiting Schedule' state is set when the invoice is confirmed but waiting for the scheduler to be on the date 'Date Ordered'." -msgstr "Donne l'état du devis ou de la commande. L'état d'exception est automatiquement défini quand une opération d'annulation arrive dans la validation de facture (Exception de facture) ou dans le processus de colisage (Exception d'expédition). L'état 'En attente de planninfication' est défini lorsque la facture est confirmée mais en attente que le plannificateur soit à la date 'Date commandée'." +msgid "" +"Gives the state of the quotation or sale order. The exception state is " +"automatically set when a cancel operation occurs in the invoice validation " +"(Invoice Exception) or in the packing list process (Shipping Exception). The " +"'Waiting Schedule' state is set when the invoice is confirmed but waiting " +"for the scheduler to be on the date 'Date Ordered'." +msgstr "" +"Donne l'état du devis ou de la commande. L'état d'exception est " +"automatiquement défini quand une opération d'annulation arrive dans la " +"validation de facture (Exception de facture) ou dans le processus de " +"colisage (Exception d'expédition). L'état 'En attente de planninfication' " +"est défini lorsque la facture est confirmée mais en attente que le " +"plannificateur soit à la date 'Date commandée'." #. module: sale #: rml:sale.order:0 @@ -295,9 +315,11 @@ msgid "Order Line" msgstr "Commande client" #. module: sale -#, python-format #: code:addons/sale/wizard/make_invoice_advance.py:0 -msgid "You cannot make an advance on a sale order that is defined as 'Automatic Invoice after delivery'." +#, python-format +msgid "" +"You cannot make an advance on a sale order that is defined as 'Automatic " +"Invoice after delivery'." msgstr "" #. module: sale @@ -376,7 +398,9 @@ msgstr "Montant non-taxé" #. module: sale #: model:process.transition,note:sale.process_transition_packing0 -msgid "Packing list is created when 'Assign' is being clicked after confirming the sale order. This transaction moves the sale order to packing list." +msgid "" +"Packing list is created when 'Assign' is being clicked after confirming the " +"sale order. This transaction moves the sale order to packing list." msgstr "" #. module: sale @@ -392,12 +416,14 @@ msgstr "Adresse de livraison :" #. module: sale #: model:process.transition,note:sale.process_transition_invoiceafterdelivery0 -msgid "When you select Shipping Ploicy = 'Automatic Invoice after delivery' , it will automatic create after delivery." +msgid "" +"When you select Shipping Ploicy = 'Automatic Invoice after delivery' , it " +"will automatic create after delivery." msgstr "" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "Error !" msgstr "" @@ -424,8 +450,8 @@ msgid "Sales Order Lines" msgstr "Lignes de ventes" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "You must first cancel all invoices attached to this sale order." msgstr "" @@ -481,7 +507,7 @@ msgstr "Configuration" #. module: sale #: constraint:ir.ui.view:0 msgid "Invalid XML for View Architecture!" -msgstr "XML non valide pour l'architecture de la vue" +msgstr "XML non valide pour l'architecture de la vue!" #. module: sale #: field:sale.order,invoice_ids:0 @@ -522,16 +548,29 @@ msgstr "Manuel en cours" #. module: sale #: help:sale.order,order_policy:0 -msgid "The Shipping Policy is used to synchronise invoice and delivery operations.\n" -" - The 'Pay before delivery' choice will first generate the invoice and then generate the packing order after the payment of this invoice.\n" -" - The 'Shipping & Manual Invoice' will create the packing order directly and wait for the user to manually click on the 'Invoice' button to generate the draft invoice.\n" -" - The 'Invoice after delivery' choice will generate the draft invoice after the packing list have been finished.\n" -" - The 'Invoice from the packings' choice is used to create an invoice during the packing process." -msgstr "La Politique de Livraison est utilisée pour synchroniser les factures et les opérations de livraison.\n" -" - le choix \"Payer avant livraison\" générera d'abord les factures puis générera la commande de colisage après le paiement de cette facture.\n" -" - \"Livraison & Factures manuelles\" créera la commande de colisage directement et attendra que l'utilisateur clique manuellement sur le bouton 'Facture' pour générer la facture brouillon.\n" -" - \"Facture après Livraison\" générera la facture brouillon après que la liste des colisage soit terminée. \n" -" - \"Facture d'après Colisage\" est utilisé pour créer la facture pendant le processus de colisage." +msgid "" +"The Shipping Policy is used to synchronise invoice and delivery operations.\n" +" - The 'Pay before delivery' choice will first generate the invoice and " +"then generate the packing order after the payment of this invoice.\n" +" - The 'Shipping & Manual Invoice' will create the packing order directly " +"and wait for the user to manually click on the 'Invoice' button to generate " +"the draft invoice.\n" +" - The 'Invoice after delivery' choice will generate the draft invoice " +"after the packing list have been finished.\n" +" - The 'Invoice from the packings' choice is used to create an invoice " +"during the packing process." +msgstr "" +"La Politique de Livraison est utilisée pour synchroniser les factures et les " +"opérations de livraison.\n" +" - le choix \"Payer avant livraison\" générera d'abord les factures puis " +"générera la commande de colisage après le paiement de cette facture.\n" +" - \"Livraison & Factures manuelles\" créera la commande de colisage " +"directement et attendra que l'utilisateur clique manuellement sur le bouton " +"'Facture' pour générer la facture brouillon.\n" +" - \"Facture après Livraison\" générera la facture brouillon après que la " +"liste des colisage soit terminée. \n" +" - \"Facture d'après Colisage\" est utilisé pour créer la facture pendant " +"le processus de colisage." #. module: sale #: field:sale.shop,payment_account_id:0 @@ -583,8 +622,8 @@ msgid "Net Price" msgstr "Prix net" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "invalid mode for test_state" msgstr "" @@ -615,8 +654,8 @@ msgid "Shipping Default Policy" msgstr "" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "Could not cancel sale order !" msgstr "" @@ -647,8 +686,14 @@ msgstr "Vendeur" #. module: sale #: help:sale.order,invoice_ids:0 -msgid "This is the list of invoices that have been generated for this sale order. The same sale order may have been invoiced in several times (by line for example)." -msgstr "C'est la liste des factures qui ont étées générées pour cette commande. Le même commande peut avoir été facturé en plusieurs fois (par lignes par example)." +msgid "" +"This is the list of invoices that have been generated for this sale order. " +"The same sale order may have been invoiced in several times (by line for " +"example)." +msgstr "" +"C'est la liste des factures qui ont étées générées pour cette commande. Le " +"même commande peut avoir été facturé en plusieurs fois (par lignes par " +"example)." #. module: sale #: rml:sale.order:0 @@ -708,8 +753,17 @@ msgstr "Brouillon" #. module: sale #: help:sale.order,invoice_quantity:0 -msgid "The sale order will automatically create the invoice proposition (draft invoice). Ordered and delivered quantities may not be the same. You have to choose if you invoice based on ordered or shipped quantities. If the product is a service, shipped quantities means hours spent on the associated tasks." -msgstr "La commande créera une proposition de facturation (facture brouillon). Les quantités commandées et facturées peuvent ne pas être les mêmes. Vous devez choisir si vous facturez sur base des quantités commandées ou expédiées. Si le produit est un service, les quantitées expédiées signifies les heures dépensées aux tâches associées." +msgid "" +"The sale order will automatically create the invoice proposition (draft " +"invoice). Ordered and delivered quantities may not be the same. You have to " +"choose if you invoice based on ordered or shipped quantities. If the product " +"is a service, shipped quantities means hours spent on the associated tasks." +msgstr "" +"La commande créera une proposition de facturation (facture brouillon). Les " +"quantités commandées et facturées peuvent ne pas être les mêmes. Vous devez " +"choisir si vous facturez sur base des quantités commandées ou expédiées. Si " +"le produit est un service, les quantitées expédiées signifies les heures " +"dépensées aux tâches associées." #. module: sale #: rml:sale.shipping:0 @@ -779,12 +833,14 @@ msgstr "Commandes de Ventes" #. module: sale #: help:sale.order,picking_policy:0 -msgid "If you don't have enough stock available to deliver all at once, do you accept partial shippings or not." +msgid "" +"If you don't have enough stock available to deliver all at once, do you " +"accept partial shippings or not." msgstr "" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "Cannot delete Sale Order(s) which are already confirmed !" msgstr "" @@ -864,8 +920,8 @@ msgid "Payment before delivery" msgstr "Paiement avant livraison" #. module: sale -#, python-format #: code:addons/sale/wizard/make_invoice_advance.py:0 +#, python-format msgid "Error" msgstr "" @@ -1014,8 +1070,11 @@ msgstr "" #. module: sale #: 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: sale #: model:process.transition,note:sale.process_transition_saleinvoice0 @@ -1034,7 +1093,9 @@ msgstr "Désignation manuelle" #. module: sale #: model:process.transition,note:sale.process_transition_invoice0 -msgid "Invoice is created when 'Create Invoice' is being clicked after confirming the sale order. This transaction moves the sale order to invoices." +msgid "" +"Invoice is created when 'Create Invoice' is being clicked after confirming " +"the sale order. This transaction moves the sale order to invoices." msgstr "" #. module: sale @@ -1138,8 +1199,8 @@ msgid "Error: Invalid ean code" msgstr "Erreur: code EAN invalide" #. module: sale -#, python-format #: code:addons/sale/sale.py:0 +#, python-format msgid "Could not cancel this sale order !" msgstr "" @@ -1173,7 +1234,8 @@ msgstr "Notes" #. module: sale #: help:sale.order,partner_order_id:0 -msgid "The name and address of the contact that requested the order or quotation." +msgid "" +"The name and address of the contact that requested the order or quotation." msgstr "Le nom et l'adresse du contacte ayant demandé le devis." #. module: sale @@ -1236,7 +1298,11 @@ msgstr "" #. module: sale #: help:sale.config.picking_policy,step:0 -msgid "By default, Open ERP is able to manage complex routing and paths of products in your warehouse and partner locations. This will configure the most common and simple methods to deliver products to the customer in one or two operations by the worker." +msgid "" +"By default, Open ERP is able to manage complex routing and paths of products " +"in your warehouse and partner locations. This will configure the most common " +"and simple methods to deliver products to the customer in one or two " +"operations by the worker." msgstr "" #. module: sale @@ -1271,7 +1337,9 @@ msgstr "Condition de paiement" #. module: sale #: model:process.transition,note:sale.process_transition_saleorderprocurement0 -msgid "In sale order , procuerement for each line and it comes into the procurement order" +msgid "" +"In sale order , procuerement for each line and it comes into the procurement " +"order" msgstr "" #. module: sale From 75f4b7356811715865428dac78a616b314e52f22 Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Wed, 17 Dec 2008 18:58:36 +0530 Subject: [PATCH 08/22] bug fix on membership bzr revid: mra@tinyerp.com-20081217132836-xntal19ugo9kne82 --- addons/membership/membership.py | 131 +++++++++++++++++--------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/addons/membership/membership.py b/addons/membership/membership.py index ed034f7a59d..69fedf4f12a 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -333,24 +333,24 @@ class Partner(osv.osv): res[partner.id] = False return res - def _membership_start_search(self, cr, uid, obj, name, args): - '''Search on membership start date''' - if not len(args): - return [] - where = ' AND '.join(['date_from '+x[1]+' \''+str(x[2])+'\'' - for x in args]) - cr.execute('SELECT partner, MIN(date_from) \ - FROM ( \ - SELECT partner, MIN(date_from) AS date_from \ - FROM membership_membership_line \ - GROUP BY partner \ - ) AS foo \ - WHERE '+where+' \ - GROUP BY partner') - res = cr.fetchall() - if not res: - return [('id', '=', '0')] - return [('id', 'in', [x[0] for x in res])] +# def _membership_start_search(self, cr, uid, obj, name, args): +# '''Search on membership start date''' +# if not len(args): +# return [] +# where = ' AND '.join(['date_from '+x[1]+' \''+str(x[2])+'\'' +# for x in args]) +# cr.execute('SELECT partner, MIN(date_from) \ +# FROM ( \ +# SELECT partner, MIN(date_from) AS date_from \ +# FROM membership_membership_line \ +# GROUP BY partner \ +# ) AS foo \ +# WHERE '+where+' \ +# GROUP BY partner') +# res = cr.fetchall() +# if not res: +# return [('id', '=', '0')] +# return [('id', 'in', [x[0] for x in res])] def _membership_stop(self, cr, uid, ids, name, args, context=None): '''Return the stop date of membership''' @@ -372,25 +372,25 @@ class Partner(osv.osv): else: res[partner.id] = False return res - - def _membership_stop_search(self, cr, uid, obj, name, args): - '''Search on membership stop date''' - if not len(args): - return [] - where = ' AND '.join(['date_to '+x[1]+' \''+str(x[2])+'\'' - for x in args]) - cr.execute('SELECT partner, MAX(date_to) \ - FROM ( \ - SELECT partner, MAX(date_to) AS date_to \ - FROM membership_membership_line \ - GROUP BY partner \ - ) AS foo \ - WHERE '+where+' \ - GROUP BY partner') - res = cr.fetchall() - if not res: - return [('id', '=', '0')] - return [('id', 'in', [x[0] for x in res])] +# +# def _membership_stop_search(self, cr, uid, obj, name, args): +# '''Search on membership stop date''' +# if not len(args): +# return [] +# where = ' AND '.join(['date_to '+x[1]+' \''+str(x[2])+'\'' +# for x in args]) +# cr.execute('SELECT partner, MAX(date_to) \ +# FROM ( \ +# SELECT partner, MAX(date_to) AS date_to \ +# FROM membership_membership_line \ +# GROUP BY partner \ +# ) AS foo \ +# WHERE '+where+' \ +# GROUP BY partner') +# res = cr.fetchall() +# if not res: +# return [('id', '=', '0')] +# return [('id', 'in', [x[0] for x in res])] def _membership_cancel(self, cr, uid, ids, name, args, context=None): '''Return the cancel date of membership''' @@ -406,24 +406,24 @@ class Partner(osv.osv): res[partner_id] = False return res - def _membership_cancel_search(self, cr, uid, obj, name, args): - '''Search on membership cancel date''' - if not len(args): - return [] - where = ' AND '.join(['date_cancel '+x[1]+' \''+str(x[2])+'\'' - for x in args]) - cr.execute('SELECT partner, MIN(date_cancel) \ - FROM ( \ - SELECT partner, MIN(date_cancel) AS date_cancel \ - FROM membership_membership_line \ - GROUP BY partner \ - ) AS foo \ - WHERE '+where+' \ - GROUP BY partner') - res = cr.fetchall() - if not res: - return [('id', '=', '0')] - return [('id', 'in', [x[0] for x in res])] +# def _membership_cancel_search(self, cr, uid, obj, name, args): +# '''Search on membership cancel date''' +# if not len(args): +# return [] +# where = ' AND '.join(['date_cancel '+x[1]+' \''+str(x[2])+'\'' +# for x in args]) +# cr.execute('SELECT partner, MIN(date_cancel) \ +# FROM ( \ +# SELECT partner, MIN(date_cancel) AS date_cancel \ +# FROM membership_membership_line \ +# GROUP BY partner \ +# ) AS foo \ +# WHERE '+where+' \ +# GROUP BY partner') +# res = cr.fetchall() +# if not res: +# return [('id', '=', '0')] +# return [('id', 'in', [x[0] for x in res])] @@ -440,15 +440,24 @@ class Partner(osv.osv): 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), # 'associate_member': fields.many2one('res.partner', 'Associate member'), 'free_member': fields.boolean('Free member'), +# 'membership_start': fields.function(_membership_start, method=True, +# string='Start membership date', type='date', +# fnct_search=_membership_start_search), 'membership_start': fields.function(_membership_start, method=True, - string='Start membership date', type='date', - fnct_search=_membership_start_search), + string='Start membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), +# 'membership_stop': fields.function(_membership_stop, method=True, +# string='Stop membership date', type='date', +# fnct_search=_membership_stop_search), 'membership_stop': fields.function(_membership_stop, method=True, - string='Stop membership date', type='date', - fnct_search=_membership_stop_search), + string='Stop membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), +# 'membership_cancel': fields.function(_membership_cancel, method=True, +# string='Cancel membership date', type='date', +# fnct_search=_membership_cancel_search), 'membership_cancel': fields.function(_membership_cancel, method=True, - string='Cancel membership date', type='date', - fnct_search=_membership_cancel_search), + string='Cancel membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), } _defaults = { 'free_member': lambda *a: False, From 34eff0dd3c3de835c7a67a95c6d8464493fd9076 Mon Sep 17 00:00:00 2001 From: Sofia Date: Wed, 17 Dec 2008 19:14:41 +0530 Subject: [PATCH 09/22] changed the date_start of tasks if the project's deadline is changed bzr revid: sahibsofia@gmail.com-20081217134441-q9cx9zhaua2i4mn8 --- addons/project_retro_planning/project_retro_planning.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/project_retro_planning/project_retro_planning.py b/addons/project_retro_planning/project_retro_planning.py index c3bbac6c0cf..e9e0f8483f6 100644 --- a/addons/project_retro_planning/project_retro_planning.py +++ b/addons/project_retro_planning/project_retro_planning.py @@ -37,9 +37,12 @@ class project_project(osv.osv): if prj.date_end: d= date(*time.strptime(prj.date_end,'%Y-%m-%d')[:3]) for task in prj.tasks: + start_dt = (datetime(*time.strptime(task.date_start,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S') if task.date_deadline: - f = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S') - self.pool.get('project.task').write(cr,uid,task.id,{'date_deadline':f}) + deadline_dt = (datetime(*time.strptime(task.date_deadline,'%Y-%m-%d %H:%M:%S')[:6])+(c-d)).strftime('%Y-%m-%d %H:%M:%S') + self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt, 'date_deadline':deadline_dt}) + else: + self.pool.get('project.task').write(cr,uid,task.id,{'date_start':start_dt}) return super(project_project,self).write(cr, uid, ids,vals, *args, **kwargs) project_project() From 5b090582b62739c6929b3292d83e772017126d68 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Wed, 17 Dec 2008 14:52:42 +0100 Subject: [PATCH 10/22] [FIX] drop_view_if_exists bzr revid: stephane@tinyerp.com-20081217135242-c9cf4w9ouamepjwu --- addons/crm_configuration/report/crm_report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/crm_configuration/report/crm_report.py b/addons/crm_configuration/report/crm_report.py index 156f7c21a44..8a76d2de4f7 100644 --- a/addons/crm_configuration/report/crm_report.py +++ b/addons/crm_configuration/report/crm_report.py @@ -31,7 +31,7 @@ AVAILABLE_STATES = [ def drop_view_if_exists(cr, viewname): cr.execute("select count(1) from pg_class where relkind=%s and relname=%s", ('v', viewname,)) - if cr.fetchone(): + if cr.fetchone()[0]: cr.execute("DROP view %s" % (viewname,)) cr.commit() From 3484fb13396bc1c93f609938b5486b590ae90ac7 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Wed, 17 Dec 2008 14:53:56 +0100 Subject: [PATCH 11/22] [FIX] Remove the executable flag bzr revid: stephane@tinyerp.com-20081217135356-rhpews5tf9mjdcd4 --- addons/account/report/account_balance.py | 0 addons/account/report/account_balance.rml | 0 addons/account/report/aged_trial_balance.py | 0 addons/account/report/aged_trial_balance.rml | 0 addons/account/report/general_ledger.py | 0 addons/account/report/general_ledger.rml | 0 addons/account/report/general_ledger_landscape.py | 0 addons/account/report/tax_report.py | 0 addons/account/report/tax_report.rml | 0 addons/account/report/third_party_ledger.py | 0 addons/account/report/third_party_ledger.rml | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 addons/account/report/account_balance.py mode change 100755 => 100644 addons/account/report/account_balance.rml mode change 100755 => 100644 addons/account/report/aged_trial_balance.py mode change 100755 => 100644 addons/account/report/aged_trial_balance.rml mode change 100755 => 100644 addons/account/report/general_ledger.py mode change 100755 => 100644 addons/account/report/general_ledger.rml mode change 100755 => 100644 addons/account/report/general_ledger_landscape.py mode change 100755 => 100644 addons/account/report/tax_report.py mode change 100755 => 100644 addons/account/report/tax_report.rml mode change 100755 => 100644 addons/account/report/third_party_ledger.py mode change 100755 => 100644 addons/account/report/third_party_ledger.rml diff --git a/addons/account/report/account_balance.py b/addons/account/report/account_balance.py old mode 100755 new mode 100644 diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml old mode 100755 new mode 100644 diff --git a/addons/account/report/aged_trial_balance.py b/addons/account/report/aged_trial_balance.py old mode 100755 new mode 100644 diff --git a/addons/account/report/aged_trial_balance.rml b/addons/account/report/aged_trial_balance.rml old mode 100755 new mode 100644 diff --git a/addons/account/report/general_ledger.py b/addons/account/report/general_ledger.py old mode 100755 new mode 100644 diff --git a/addons/account/report/general_ledger.rml b/addons/account/report/general_ledger.rml old mode 100755 new mode 100644 diff --git a/addons/account/report/general_ledger_landscape.py b/addons/account/report/general_ledger_landscape.py old mode 100755 new mode 100644 diff --git a/addons/account/report/tax_report.py b/addons/account/report/tax_report.py old mode 100755 new mode 100644 diff --git a/addons/account/report/tax_report.rml b/addons/account/report/tax_report.rml old mode 100755 new mode 100644 diff --git a/addons/account/report/third_party_ledger.py b/addons/account/report/third_party_ledger.py old mode 100755 new mode 100644 diff --git a/addons/account/report/third_party_ledger.rml b/addons/account/report/third_party_ledger.rml old mode 100755 new mode 100644 From 6232b371fe17164ae90b3db7aa88adbb5fe29703 Mon Sep 17 00:00:00 2001 From: qdp Date: Wed, 17 Dec 2008 18:10:57 +0100 Subject: [PATCH 12/22] *reindented bzr revid: qdp@tinyerp.com-20081217171057-jzag2xjt3eg4n0xr --- addons/l10n_be/wizard/partner_vat_listing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/l10n_be/wizard/partner_vat_listing.py b/addons/l10n_be/wizard/partner_vat_listing.py index 9e76d79efb5..85b562f2777 100644 --- a/addons/l10n_be/wizard/partner_vat_listing.py +++ b/addons/l10n_be/wizard/partner_vat_listing.py @@ -46,9 +46,9 @@ fields = { } msg_form = """
- - - + + + """ msg_fields = { From 503a081c9d83c479d9832979418fadfe8b81813d Mon Sep 17 00:00:00 2001 From: qdp Date: Wed, 17 Dec 2008 18:12:44 +0100 Subject: [PATCH 13/22] *base_module_quality: * added a configuration file * added possiblity to define tests on installed module only or no * cleaned * improved bzr revid: qdp@tinyerp.com-20081217171244-x8rnbx32yd2bj3v3 --- .../base_module_quality.py | 31 +++++++++--- .../pylint_test/pylint_test.py | 36 +++++++------ .../pylint_test/pylint_test_config.txt | 5 +- .../speed_test/speed_test.py | 7 ++- .../wizard/module_quality_check.py | 50 +++++++++++-------- 5 files changed, 80 insertions(+), 49 deletions(-) diff --git a/addons/base_module_quality/base_module_quality.py b/addons/base_module_quality/base_module_quality.py index 13b9de20ce4..2965ad41f16 100644 --- a/addons/base_module_quality/base_module_quality.py +++ b/addons/base_module_quality/base_module_quality.py @@ -20,21 +20,38 @@ # ############################################################################## -import netsvc -from osv import fields, osv class abstract_quality_check(object): ''' This Class provide... ''' - _score = 0.0 - _result = "" - _result_details = "" + #This float have to store the rating of the module. + #Used to compute the final score (average of all scores). + score = 0.0 - def __init__(self, module_path=""): + #This char have to store the result. + #Used to display the result of the test. + result = "" + + #This char have to store the result with more details. + #Used to provide more details if necessary. + result_details = "" + + #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. + bool_installed_only = True + + def __init__(self): ''' - this method should do the test and fill the _score, _result and _result_details var + this method should initialize the var + ''' + raise 'Not Implemented' + + def run_test(self, module_path=""): + ''' + this method should do the test and fill the score, result and result_details var ''' raise 'Not Implemented' diff --git a/addons/base_module_quality/pylint_test/pylint_test.py b/addons/base_module_quality/pylint_test/pylint_test.py index 1d46830f646..bb31eef5e3a 100644 --- a/addons/base_module_quality/pylint_test/pylint_test.py +++ b/addons/base_module_quality/pylint_test/pylint_test.py @@ -20,8 +20,7 @@ # ############################################################################## -import netsvc -from osv import fields, osv + import os from tools import config @@ -30,8 +29,8 @@ from base_module_quality import base_module_quality class quality_test(base_module_quality.abstract_quality_check): - def __init__(self, module_path): - self._result = """ + def __init__(self): + self.result = """ Pylint Test: ------------ @@ -39,36 +38,41 @@ Pylint Test: """ + self.bool_installed_only = False + return None + + def run_test(self, module_path): config_file_path = config['addons_path']+'/base_module_quality/pylint_test/pylint_test_config.txt' list_files = os.listdir(module_path) - new_list = [] - subfolder = {} for i in list_files: path = os.path.join(module_path, i) if os.path.isdir(path): for j in os.listdir(path): list_files.append(os.path.join(i, j)) - dict_files = {} - n =0 + n = 0 score = 0.0 - print list_files for file in list_files: if file.split('.')[-1] == 'py' and not file.endswith('__init__.py') and not file.endswith('__terp__.py'): file_path = os.path.join(module_path, file) - res = os.popen('pylint --rcfile='+config_file_path+' '+file_path).read() + res = os.popen('pylint --rcfile=' + config_file_path + ' ' + file_path).read() n += 1 leftchar = -1 while res[leftchar:leftchar+1] != ' ' and leftchar-1 <= 0: - leftchar -=1 + leftchar -= 1 rightchar = -10 while res[rightchar:rightchar+1] != '/' and rightchar+1 <= 0: - rightchar +=1 + rightchar += 1 - score += float(res[leftchar+1:rightchar]) - self._result_details += res - self._result += file+": "+ res[leftchar+1:rightchar]+"/10\n" - self._score = score / n + try: + score += float(res[leftchar+1:rightchar]) + self.result += file + ": " + res[leftchar+1:rightchar] + "/10\n" + except: + score += 0 + self.result += file + ": Unable to parse the result. Check the details.\n" + + self.result_details += res + self.score = n and score / n or score return None diff --git a/addons/base_module_quality/pylint_test/pylint_test_config.txt b/addons/base_module_quality/pylint_test/pylint_test_config.txt index db975430f08..1997cce14ad 100644 --- a/addons/base_module_quality/pylint_test/pylint_test_config.txt +++ b/addons/base_module_quality/pylint_test/pylint_test_config.txt @@ -56,8 +56,7 @@ load-plugins= #enable-msg= # Disable the message(s) with the given id(s). -#disable-msg= - +disable-msg=C0103,F0401,E0611,R0903,W0232,W0102,E1002,R0913,R0904 [REPORTS] @@ -66,7 +65,7 @@ load-plugins= output-format=text # Include message's id in output -include-ids=no +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 diff --git a/addons/base_module_quality/speed_test/speed_test.py b/addons/base_module_quality/speed_test/speed_test.py index ca9a93b09f7..89479ddf18b 100644 --- a/addons/base_module_quality/speed_test/speed_test.py +++ b/addons/base_module_quality/speed_test/speed_test.py @@ -30,8 +30,8 @@ from base_module_quality import base_module_quality class quality_test(base_module_quality.abstract_quality_check): - def __init__(self, module_path): - self._result = """ + def __init__(self): + self.result = """ Speed Test: ------------ @@ -41,8 +41,11 @@ Speed Test: to be continued... """ + self.bool_installed_only = True return None + def run_test(self, module_path): + return None # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_quality/wizard/module_quality_check.py b/addons/base_module_quality/wizard/module_quality_check.py index 61cc031261a..9a5ec9391dd 100644 --- a/addons/base_module_quality/wizard/module_quality_check.py +++ b/addons/base_module_quality/wizard/module_quality_check.py @@ -21,14 +21,20 @@ ############################################################################## import wizard import pooler -import osv -import netsvc -import sys import tools import os +#TODO: (utiliser les nouveaux wizards pour heriter la vue et rajouter un onglet par test?) +#TODO: configure pylint +#TODO: implement the speed test +#TODO: implement the simple test +#TODO: add cheks: do the class quality_check inherits the class abstract_quality_check? +#TODO: improve translability + + +#To keep or not? to be discussed... #~ form_check = ''' #~
#~ @@ -50,47 +56,49 @@ view_form = """ """ -#TODO: utiliser les nouveaux wizards pour heriter la vue et rajouter un onglet par test? -#TODO: remove the first screen which is unused + view_field = { "general_info": {'type': 'text', 'string': 'General Info', 'readonly':True}, } - - class wiz_quality_check(wizard.interface): - def _check(self, cr, uid, data, context): + def _check(self, cr, uid, data, context={}): string_ret = "" from tools import config - list_folders=os.listdir(config['addons_path']+'/base_module_quality/') + pool = pooler.get_pool(cr.dbname) + module_data = pool.get('ir.module.module').browse(cr, uid, data['ids']) + + list_folders = os.listdir(config['addons_path']+'/base_module_quality/') for item in list_folders: path = config['addons_path']+'/base_module_quality/'+item - if os.path.exists(path+'/'+item+'.py') and item not in ['report','wizard', 'security']: - pool=pooler.get_pool(cr.dbname) - module_data = pool.get('ir.module.module').browse(cr, uid, data['ids']) - + if os.path.exists(path+'/'+item+'.py') and item not in ['report', 'wizard', 'security']: ad = tools.config['addons_path'] module_path = os.path.join(ad, module_data[0].name) - - from base_module_quality import base_module_quality - - item2='base_module_quality.'+item+'.'+item + item2 = 'base_module_quality.'+item+'.'+item x = __import__(item2) - x2 = getattr(x,item) - x3 = getattr(x2,item) - val = x3.quality_test(str(module_path)) + x2 = getattr(x, item) + x3 = getattr(x2, item) + val = x3.quality_test() + if not val.bool_installed_only or module_data[0].state == "installed": + val.run_test(str(module_path)) + else: + val.result += "The module has to be installed before running this test." - string_ret += val._result + string_ret += val.result + print val.result_details return {'general_info':string_ret} states = { + +#To keep or not? to be discussed... + #~ 'init': { #~ 'actions': [], #~ 'result': {'type':'form', 'arch':form_check, 'fields':fields_check, 'state':[('end','Cancel'),('do','Do Test')]} From eb158f7b856b1c45e0e6538f80fe227a5d167ce1 Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Thu, 18 Dec 2008 11:24:34 +0530 Subject: [PATCH 14/22] membership bzr revid: mra@tinyerp.com-20081218055434-vkdzytreej82eecn --- addons/membership/membership.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/membership/membership.py b/addons/membership/membership.py index 69fedf4f12a..c192d77534a 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -512,19 +512,19 @@ class Invoice(osv.osv): def create(self, cr, uid, vals, context={}): result = super(Invoice, self).create(cr, uid, vals, context) - a = self.browse(cr, uid, result) + invoice = self.browse(cr, uid, result) member_line_obj = self.pool.get('membership.membership_line') - for i in a.invoice_line: - if i.product_id and i.product_id.membership: - date_from = i.product_id.membership_date_from - date_to = i.product_id.membership_date_to - if a.date_invoice > date_from and a.date_invoice < date_to: - date_from = a.date_invoice + for line in invoice.invoice_line: + if line.product_id and line.product_id.membership: + date_from = line.product_id.membership_date_from + date_to = line.product_id.membership_date_to + if invoice.date_invoice > date_from and invoice.date_invoice < date_to: + date_from = invoice.date_invoice line_id = member_line_obj.create(cr, uid, { - 'partner': a.partner_id.id, + 'partner': invoice.partner_id.id, 'date_from': date_from, 'date_to': date_to, - 'account_invoice_line': i.id, + 'account_invoice_line': line.id, }) return result From 07d43fcd2c9d2ea115f75623e1eae184b12f2a6d Mon Sep 17 00:00:00 2001 From: Mustufa Rangwala Date: Thu, 18 Dec 2008 12:25:42 +0530 Subject: [PATCH 15/22] bug fix on membership bzr revid: mra@tinyerp.com-20081218065542-kt19wqabq9mpnvoz --- addons/membership/membership.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/addons/membership/membership.py b/addons/membership/membership.py index c192d77534a..167e0bcfb87 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -232,6 +232,13 @@ class Partner(osv.osv): list_partner.append(data.partner.id) return list_partner + def _get_invoice_partner(self, cr, uid, ids, context=None): + data_inv = self.pool.get('account.invoice').browse(cr, uid, ids, context) + list_partner = [] + for data in data_inv: + list_partner.append(data.partner_id.id) + return list_partner + def _membership_state(self, cr, uid, ids, name, args, context=None): res = {} for id in ids: @@ -436,7 +443,8 @@ class Partner(osv.osv): # 'membership_state': fields.function(_membership_state, method=True, string='Current membership state', # type='selection', selection=STATE, fnct_search=_membership_state_search), 'membership_state': fields.function(_membership_state, method=True, string='Current membership state', - type='selection',selection=STATE,store={'membership.membership_line':(_get_partner_id,['state'], 10), + type='selection',selection=STATE,store={'account.invoice':(_get_invoice_partner,['state'], 10), + 'membership.membership_line':(_get_partner_id,['state'], 10), 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), # 'associate_member': fields.many2one('res.partner', 'Associate member'), 'free_member': fields.boolean('Free member'), @@ -444,19 +452,22 @@ class Partner(osv.osv): # string='Start membership date', type='date', # fnct_search=_membership_start_search), 'membership_start': fields.function(_membership_start, method=True, - string='Start membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + string='Start membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10), + 'membership.membership_line':(_get_partner_id,['state'], 10), 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), # 'membership_stop': fields.function(_membership_stop, method=True, # string='Stop membership date', type='date', # fnct_search=_membership_stop_search), 'membership_stop': fields.function(_membership_stop, method=True, - string='Stop membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + string='Stop membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10), + 'membership.membership_line':(_get_partner_id,['state'], 10), 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), # 'membership_cancel': fields.function(_membership_cancel, method=True, # string='Cancel membership date', type='date', # fnct_search=_membership_cancel_search), 'membership_cancel': fields.function(_membership_cancel, method=True, - string='Cancel membership date', type='date',store={'membership.membership_line':(_get_partner_id,['state'], 10), + string='Cancel membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10), + 'membership.membership_line':(_get_partner_id,['state'], 10), 'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}), } _defaults = { From 8c916ea21182f96a08497c51e7f624c6eff763c7 Mon Sep 17 00:00:00 2001 From: hmo-tinyerp <> Date: Thu, 18 Dec 2008 14:25:57 +0530 Subject: [PATCH 16/22] fixed bug #301684 : soved unicode problem in DMS bzr revid: hmo-tinyerp-20081218085557-hfch2bn7i33ub7rf --- addons/document/document.py | 10 +++++----- addons/document/ftpserver/__init__.py | 2 +- addons/document/ftpserver/abstracted_fs.py | 4 ++-- addons/document/ftpserver/ftpserver.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/document/document.py b/addons/document/document.py index 92b49a1b520..b8b053eb8b4 100644 --- a/addons/document/document.py +++ b/addons/document/document.py @@ -107,7 +107,7 @@ class node_class(object): where.append( ('parent_id','=',self.object.id) ) where.append( ('res_id','=',False) ) if nodename: - where.append( (fobj._rec_name,'=',nodename) ) + where.append( (fobj._rec_name,'=like',nodename) ) ids = fobj.search(self.cr, self.uid, where+[ ('parent_id','=',self.object and self.object.id or False) ], context=self.context) if self.object and self.root and (self.object.type=='ressource'): ids += fobj.search(self.cr, self.uid, where+[ ('parent_id','=',False) ], context=self.context) @@ -118,7 +118,7 @@ class node_class(object): pool = pooler.get_pool(self.cr.dbname) where = [] if nodename: - where.append(('name','=',nodename)) + 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)) else: @@ -144,7 +144,7 @@ class node_class(object): fobj = pool.get('ir.attachment') vargs = [('parent_id','=',False),('res_id','=',False)] if nodename: - vargs.append(('name','=',nodename)) + vargs.append(('name','=like',nodename)) file_ids=fobj.search(self.cr,self.uid,vargs) res = fobj.browse(self.cr, self.uid, file_ids, context=self.context) @@ -174,7 +174,7 @@ class node_class(object): for invalid in INVALID_CHARS: if nodename.find(INVALID_CHARS[invalid]) : nodename=nodename.replace(INVALID_CHARS[invalid],invalid) - where.append(('name','=',nodename)) + where.append(('name','=like',nodename)) ids = obj.search(self.cr, self.uid, where, self.context) res = obj.browse(self.cr, self.uid, ids,self.context) for r in res: @@ -290,7 +290,7 @@ class document_directory(osv.osv): def _get_childs(self, cr, uid, node, nodename=False, context={}): where = [] if nodename: - where.append(('name','=',nodename)) + where.append(('name','=like',nodename)) if object: where.append(('parent_id','=',object.id)) ids = self.search(cr, uid, where, context) diff --git a/addons/document/ftpserver/__init__.py b/addons/document/ftpserver/__init__.py index 3856c5d47e1..dcac53d6061 100644 --- a/addons/document/ftpserver/__init__.py +++ b/addons/document/ftpserver/__init__.py @@ -9,7 +9,7 @@ PORT = config.get('ftp_server_port', 8021) HOST = '' class ftp_server(threading.Thread): - def log(self, level, message): + def log(self, level, message): logger = netsvc.Logger() logger.notifyChannel('FTP', level, message) diff --git a/addons/document/ftpserver/abstracted_fs.py b/addons/document/ftpserver/abstracted_fs.py index 69aecb284c4..fe64ab44063 100644 --- a/addons/document/ftpserver/abstracted_fs.py +++ b/addons/document/ftpserver/abstracted_fs.py @@ -150,7 +150,7 @@ class abstracted_fs: # Ok def fs2ftp(self, node): - res = node and ('/' + node.cr.dbname + '/' + node.path) or '/' + res = node and ('/' + node.cr.dbname + '/' + node.path.encode('ascii','replace').replace('?','_')) or '/' return res # Ok @@ -688,7 +688,7 @@ class abstracted_fs: # formatting is matched with proftpd ls output yield "%s %3s %-8s %-8s %8s %s %s\r\n" %(perms, nlinks, uname, gname, - size, mtime, file.path.encode('ascii','replace').split('/')[-1]) + size, mtime, file.path.encode('ascii','replace').replace('?','_').split('/')[-1]) # Ok def format_mlsx(self, basedir, listing, perms, facts, ignore_err=True): diff --git a/addons/document/ftpserver/ftpserver.py b/addons/document/ftpserver/ftpserver.py index f8af54fbb1a..07f60344b74 100644 --- a/addons/document/ftpserver/ftpserver.py +++ b/addons/document/ftpserver/ftpserver.py @@ -1768,7 +1768,7 @@ class FTPHandler(asynchat.async_chat): self.__out_dtp_queue = (data, isproducer, file) def log(self, msg): - """Log a message, including additional identifying session data.""" + """Log a message, including additional identifying session data.""" log("[%s]@%s:%s %s" %(self.username, self.remote_ip, self.remote_port, msg)) From 90b8def6d956427e60b600f1d6701c3703bfe9cf Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 18 Dec 2008 11:54:15 +0100 Subject: [PATCH 17/22] [FIX] Burndown Chart bzr revid: stephane@tinyerp.com-20081218105415-xmlha3ggtp5ahdhl --- addons/scrum/report/task_burndown.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/scrum/report/task_burndown.py b/addons/scrum/report/task_burndown.py index 0730352f9bf..4a09428ba5f 100644 --- a/addons/scrum/report/task_burndown.py +++ b/addons/scrum/report/task_burndown.py @@ -99,19 +99,24 @@ class report_tasks(report_int): int_to_date = lambda x: '/a60{}'+DateTime.localtime(x).strftime('%d %m %Y') def _interval_get(*args): - result = [] + result = set() for i in range(20): d = DateTime.localtime(datas[0][0] + (((datas[-1][0]-datas[0][0])/20)*(i+1))) res = DateTime.DateTime(d.year, d.month, d.day).ticks() - if (not result) or result[-1]<>res: - result.append(res) - return result + result.add(res) + + return list(result) + + if datas[-1][0] == datas[0][0]: + x_range = (datas[0][0],datas[-1][0]+1) + else: + x_range = (datas[0][0],datas[-1][0]) ar = area.T(x_grid_style=line_style.gray50_dash1, x_axis=axis.X(label="Date", format=int_to_date), y_axis=axis.Y(label="Burndown Chart - Planned Hours"), x_grid_interval=_interval_get, - x_range = (datas[0][0],datas[-1][0]), + x_range = x_range, y_range = (0,max_hour), legend = None, size = (680,450)) From 1c4534fa75d06c1fa8734afce39b0783936c0ed1 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 18 Dec 2008 15:02:48 +0100 Subject: [PATCH 18/22] [FIX] Drop the view if exists lp bug: https://launchpad.net/bugs/309331 fixed bzr revid: stephane@tinyerp.com-20081218140248-v63zqpaofph4ool4 --- .../account_analytic_analysis.py | 3 ++- addons/crm_configuration/report/crm_report.py | 8 +------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index d08aba68947..60b3d9c2920 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -617,8 +617,9 @@ class account_analytic_account_summary_month(osv.osv): string='Total Time'), 'month': fields.char('Month', size=25, readonly=True), } + def init(self, cr): - cr.execute('DROP VIEW IF EXISTS account_analytic_analysis_summary_month') + cr.drop_view_if_exists('account_analytic_analysis_summary_month') cr.execute('CREATE VIEW account_analytic_analysis_summary_month AS (' \ 'SELECT ' \ '(TO_NUMBER(TO_CHAR(d.month, \'YYYYMM\'), \'999999\') + (d.account_id * 1000000))::integer AS id, ' \ diff --git a/addons/crm_configuration/report/crm_report.py b/addons/crm_configuration/report/crm_report.py index 8a76d2de4f7..6b602e8e59a 100644 --- a/addons/crm_configuration/report/crm_report.py +++ b/addons/crm_configuration/report/crm_report.py @@ -29,12 +29,6 @@ AVAILABLE_STATES = [ ('pending','Pending') ] -def drop_view_if_exists(cr, viewname): - cr.execute("select count(1) from pg_class where relkind=%s and relname=%s", ('v', viewname,)) - if cr.fetchone()[0]: - cr.execute("DROP view %s" % (viewname,)) - cr.commit() - class report_crm_case_section_categ2(osv.osv): _name = "report.crm.case.section.categ2" _description = "Cases by section and category2" @@ -53,7 +47,7 @@ class report_crm_case_section_categ2(osv.osv): _order = 'category2_id, section_id' def init(self, cr): - drop_view_if_exists(cr, "report_crm_case_section_categ2") + cr.drop_view_if_exists("report_crm_case_section_categ2") cr.execute(""" create view report_crm_case_section_categ2 as ( select From 6875763f601a0ddc092362e6ef9587a45020471c Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 18 Dec 2008 15:35:37 +0100 Subject: [PATCH 19/22] [FIX] An analytic journal is not mandatory on a financial journal lp bug: https://launchpad.net/bugs/309344 fixed bzr revid: stephane@tinyerp.com-20081218143537-u4bl6w0p291q4t85 --- addons/account/account_move_line.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index a805f83f64b..233eaf84de4 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -857,8 +857,8 @@ class account_move_line(osv.osv): 'journal_id': journal.analytic_journal_id.id, 'ref': vals['ref'], })] - else: - raise osv.except_osv(_('No analytic journal !'), _('Please set an analytic journal on this financial journal !')) + #else: + # raise osv.except_osv(_('No analytic journal !'), _('Please set an analytic journal on this financial journal !')) #if not 'currency_id' in vals: # vals['currency_id'] = account.company_id.currency_id.id From 4043a46f65de2e3c8d56116c02a4df82b4c8403f Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 18 Dec 2008 15:39:05 +0100 Subject: [PATCH 20/22] [FIX] Check if account_id if present lp bug: https://launchpad.net/bugs/309337 fixed bzr revid: stephane@tinyerp.com-20081218143905-uwv9umr7mss0dlb9 --- addons/account/account_move_line.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 233eaf84de4..f32d150906d 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -466,7 +466,7 @@ class account_move_line(osv.osv): val['account_id'] = id2 elif jt=='purchase': val['account_id'] = id1 - if val['account_id']: + if val.get('account_id', False): d = self.onchange_account_id(cr, uid, ids, val['account_id']) val.update(d['value']) return {'value':val} From ef3beeae56603bcbd064f7091a2bd87834c0355f Mon Sep 17 00:00:00 2001 From: qdp Date: Thu, 18 Dec 2008 15:50:50 +0100 Subject: [PATCH 21/22] *bugfix bzr revid: qdp@tinyerp.com-20081218145050-fgwnkm5qhdnc7kpe --- addons/account_budget/crossovered_budget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_budget/crossovered_budget.py b/addons/account_budget/crossovered_budget.py index 752e8c82694..6a78b317ea8 100644 --- a/addons/account_budget/crossovered_budget.py +++ b/addons/account_budget/crossovered_budget.py @@ -168,7 +168,7 @@ class crossovered_budget_lines(osv.osv): date_from = context['wizard_date_from'] if context.has_key('wizard_date_to'): date_to = context['wizard_date_to'] - cr.execute('select sum(amount) from account_analytic_line where account_id=%s and (date between to_date(%s,'yyyy-mm-dd') and to_date(%s,'yyyy-mm-dd')) and general_account_id in (%s)', (line.analytic_account_id.id,date_from,date_to,acc_ids)) + cr.execute("select sum(amount) from account_analytic_line where account_id=%s and (date between to_date(%s,'yyyy-mm-dd') and to_date(%s,'yyyy-mm-dd')) and general_account_id in (%s)", (line.analytic_account_id.id,date_from,date_to,acc_ids)) result=cr.fetchone()[0] if result==None: result=0.00 From 643d5f87bd28e1d67c9fa1643cb5c45aa9d04195 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Thu, 18 Dec 2008 17:07:09 +0100 Subject: [PATCH 22/22] [FIX] Use the cursor.drop_view_if_exists lp bug: https://launchpad.net/bugs/309331 fixed bzr revid: stephane@tinyerp.com-20081218160709-bg3wqmp54df2chhv --- addons/crm_configuration/report/crm_report.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/crm_configuration/report/crm_report.py b/addons/crm_configuration/report/crm_report.py index 6b602e8e59a..772a5c3c7a8 100644 --- a/addons/crm_configuration/report/crm_report.py +++ b/addons/crm_configuration/report/crm_report.py @@ -86,7 +86,7 @@ class report_crm_case_section_stage(osv.osv): _order = 'stage_id, section_id' def init(self, cr): - drop_view_if_exists(cr, "report_crm_case_section_stage") + cr.drop_view_if_exists("report_crm_case_section_stage") cr.execute(""" create view report_crm_case_section_stage as ( select @@ -123,7 +123,7 @@ class report_crm_case_section_categ_stage(osv.osv): _order = 'stage_id, section_id, categ_id' def init(self, cr): - drop_view_if_exists(cr, "report_crm_case_section_categ_stage") + cr.drop_view_if_exists("report_crm_case_section_categ_stage") cr.execute(""" create view report_crm_case_section_categ_stage as ( select @@ -161,7 +161,7 @@ class report_crm_case_section_categ_categ2(osv.osv): _order = 'section_id, categ_id, category2_id' def init(self, cr): - drop_view_if_exists(cr, "report_crm_case_section_categ_categ2") + cr.drop_view_if_exists("report_crm_case_section_categ_categ2") cr.execute(""" create view report_crm_case_section_categ_categ2 as ( select