[MERGE] merge with trunk addons

bzr revid: mra@mra-laptop-20100706121435-65d85ikqs1z0iaez
bzr revid: mra@mra-laptop-20100706132313-n733lghx6w75knjj
bzr revid: mra@mra-laptop-20100706135232-ibsx20ve27kkv6q1
bzr revid: mra@mra-laptop-20100707040126-qosc5js2z00wkkmm
This commit is contained in:
Mustufa Rangwala 2010-07-07 09:31:26 +05:30
commit 2c604372f7
18 changed files with 75 additions and 85 deletions

View File

@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-06 03:37+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-07-06 03:17+0000\n"
"PO-Revision-Date: 2010-07-06 10:39+0000\n"
"Last-Translator: Black Jack <onetimespeed@hotmail.com>\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: 2010-07-06 03:37+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@ -45,7 +45,7 @@ msgstr "设置过期支付的催款信息"
#. module: account
#: model:process.transition,name:account.process_transition_confirmstatementfromdraft0
msgid "Confirm statement from draft"
msgstr "从草稿确认"
msgstr "从草稿确认对帐单"
#. module: account
#: model:account.account.type,name:account.account_type_asset
@ -60,7 +60,7 @@ msgstr "在动作定义使用了无效的模块名。"
#. module: account
#: help:account.journal,currency:0
msgid "The currency used to enter statement"
msgstr "报表使用的货币"
msgstr "使用的货币"
#. module: account
#: wizard_view:account_use_models,init_form:0
@ -454,7 +454,7 @@ msgstr "特殊计算"
#. module: account
#: model:process.transition,note:account.process_transition_confirmstatementfromdraft0
msgid "Confirm statement with/without reconciliation from draft statement"
msgstr "从草稿确认将不对账"
msgstr "从草稿确认与对/不对帐"
#. module: account
#: wizard_view:account.move.bank.reconcile,init:0
@ -487,7 +487,7 @@ msgstr "税用在"
msgid ""
"Set if the amount of tax must be included in the base amount before "
"computing the next taxes."
msgstr "如果这税额必须包含在计算下一个税的基础金额里, 请设置"
msgstr "如果这税额必须在计算下一个税的基础金额里, 请设置"
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_periodical_processing
@ -954,7 +954,7 @@ msgstr "默认借方科目"
#: model:ir.actions.act_window,name:account.action_bank_statement_tree
#: model:ir.ui.menu,name:account.menu_bank_statement_tree
msgid "Entries by Statements"
msgstr "银行对帐单"
msgstr "对帐单"
#. module: account
#: model:process.transition,name:account.process_transition_analyticinvoice0
@ -1092,7 +1092,7 @@ msgstr "含税价计算代码"
#: model:ir.actions.act_window,name:account.action_tax_code_list
#: model:ir.ui.menu,name:account.menu_action_tax_code_list
msgid "Tax codes"
msgstr "税代码"
msgstr "税事务"
#. module: account
#: field:account.fiscal.position.template,chart_template_id:0
@ -1739,7 +1739,7 @@ msgstr "成本分类账的会计期间"
#: model:ir.actions.act_window,name:account.action_bank_statement_tree2
#: model:ir.ui.menu,name:account.menu_bank_statement_tree2
msgid "New Statement"
msgstr "新银行对帐单"
msgstr "新对帐单"
#. module: account
#: wizard_field:account.analytic.account.chart,init,from_date:0
@ -2581,7 +2581,7 @@ msgstr "应付账"
#. module: account
#: wizard_view:populate_statement_from_inv,init:0
msgid "Import Invoices in Statement"
msgstr "在银行对帐单里导入发票"
msgstr "在对帐单里导入发票"
#. module: account
#: view:account.invoice:0
@ -2873,12 +2873,12 @@ msgstr "跳过'草稿'状态创建分录"
#: field:account.invoice.tax,account_id:0
#: field:account.move.line,tax_code_id:0
msgid "Tax Account"
msgstr "税科目"
msgstr "税事务"
#. module: account
#: model:process.transition,note:account.process_transition_statemententries0
msgid "From statement, create entries"
msgstr "从对单创建分录"
msgstr "从对单创建分录"
#. module: account
#: field:account.analytic.account,complete_name:0
@ -2913,7 +2913,7 @@ msgstr "会计报表"
#. module: account
#: rml:account.overdue:0
msgid "Document: Customer account statement"
msgstr "文档:客户报表"
msgstr "文档:客户科目"
#. module: account
#: view:product.product:0
@ -3003,7 +3003,7 @@ msgid ""
"The maturity date of the generated entries for this model. You can chosse "
"between the date of the creation action or the the date of the creation of "
"the entries plus the partner payment terms."
msgstr "这模型在到期日产生分录. 你能从创建日期到到付款期限间选择."
msgstr "这模型在付款到期日产生分录. 你能从创建日期到到付款期限间选择."
#. module: account
#: selection:account.analytic.journal,type:0
@ -3212,7 +3212,7 @@ msgstr "平均汇率"
#: model:process.node,note:account.process_node_bankstatement0
#: model:process.node,note:account.process_node_supplierbankstatement0
msgid "Statement encoding produces payment entries"
msgstr "产品付款分录单"
msgstr "产品付款分录对帐单"
#. module: account
#: field:account.account,code:0
@ -3694,7 +3694,7 @@ msgstr "周期性分录科目"
#: field:account.move.line,date_maturity:0
#: rml:account.overdue:0
msgid "Maturity date"
msgstr "到期日"
msgstr "付款到期日"
#. module: account
#: view:account.subscription:0
@ -3798,7 +3798,7 @@ msgstr "付款分录"
#. module: account
#: help:account.move.line,tax_code_id:0
msgid "The Account can either be a base tax code or tax code account."
msgstr "这科目可以选基础税的代码或税代码科目"
msgstr "可以选基于的税务代码或税务代码"
#. module: account
#: help:account.automatic.reconcile,init,account_ids:0
@ -4011,7 +4011,7 @@ msgstr "凭证"
#: view:account.bank.statement:0
#: field:account.bank.statement,line_ids:0
msgid "Statement lines"
msgstr "银行对帐单明细"
msgstr "对帐单明细"
#. module: account
#: field:account.move.line,amount_taxed:0
@ -4182,7 +4182,7 @@ msgstr "报表上显示的会计年度名称"
msgid ""
"This field is used for payable and receivable entries. You can put the limit "
"date for the payment of this entry line."
msgstr "这字段用于应付和应收分录. 你可以在付款分录明细放入的限制日期"
msgstr "这字段用于应付和应收分录. 你可以放入该分录明细的付款限定日期"
#. module: account
#: rml:account.tax.code.entries:0
@ -4552,7 +4552,7 @@ msgstr "将根据选择的模板自动设置你的科目一览表、银行帐号
#: field:account.bank.statement.line,statement_id:0
#: field:account.move.line,statement_id:0
msgid "Statement"
msgstr "银行对帐单"
msgstr "对帐单"
#. module: account
#: model:ir.actions.act_window,name:account.action_move_line_form_encode_by_move
@ -4622,12 +4622,12 @@ msgstr "运行中"
msgid ""
"Indicate if the amount of tax must be included in the base amount for the "
"computation of the next taxes"
msgstr "表明如果税额必须包含在计算下一个税的基础金额里"
msgstr "指出如果税额必须在计算下一个税的基础金额里"
#. module: account
#: model:process.node,name:account.process_node_draftstatement0
msgid "Draft statement"
msgstr "银行对帐单草稿"
msgstr "对帐单草稿"
#. module: account
#: field:account.analytic.journal,name:0
@ -4637,7 +4637,7 @@ msgstr "分录集合名称"
#. module: account
#: model:process.transition,note:account.process_transition_invoiceimport0
msgid "Import invoice from statement"
msgstr "从银行对帐单导入发票"
msgstr "从对帐单导入发票"
#. module: account
#: selection:account.automatic.reconcile,init,power:0
@ -4730,7 +4730,7 @@ msgstr "已取消"
#: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree
#: model:ir.ui.menu,name:account.menu_bank_statement_draft_tree
msgid "Draft statements"
msgstr "银行对帐单草稿"
msgstr "对帐单草稿"
#. module: account
#: wizard_field:populate_statement_from_inv,init,date:0
@ -5887,7 +5887,7 @@ msgstr "财务结构"
#. module: account
#: model:process.process,name:account.process_process_statementprocess0
msgid "Statement Process"
msgstr "银行对帐单处理"
msgstr "对帐单处理"
#. module: account
#: model:ir.model,name:account.model_account_bank_statement_reconcile

View File

@ -58,14 +58,19 @@ class account_statement_from_invoice_lines(osv.osv_memory):
# else:
ctx['date'] = line_date
amount = 0.0
if line.debit > 0:
amount = line.debit
elif line.credit > 0:
amount = -line.credit
if line.amount_currency:
amount = currency_obj.compute(cr, uid, line.currency_id.id,
amount = currency_obj.compute(cursor, user, line.currency_id.id,
statement.currency.id, line.amount_currency, context=ctx)
else:
if line.debit > 0:
amount=line.debit
elif line.credit > 0:
amount=-line.credit
elif (line.invoice and line.invoice.currency_id.id <> statement.currency.id):
amount = currency_obj.compute(cursor, user, line.invoice.currency_id.id,
statement.currency.id, amount, context=ctx)
reconcile_id = statement_reconcile_obj.create(cr, uid, {
'line_ids': [(6, 0, [line.id])]
}, context=context)

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-04 03:45+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_analytic_analysis

View File

@ -71,8 +71,8 @@ class account_invoice_line(osv.osv):
_inherit = 'account.invoice.line'
_description = 'Invoice Line'
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None):
res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition, price_unit, address_invoice_id, currency_id=currency_id, context=context)
def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fiscal_position=False, price_unit=False, address_invoice_id=False, currency_id=False, context=None):
res_prod = super(account_invoice_line,self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fiscal_position, price_unit, address_invoice_id, currency_id=currency_id, context=context)
rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context)
if rec:
res_prod['value'].update({'account_analytic_id':rec.analytic_id.id})

View File

@ -21,8 +21,6 @@
from datetime import datetime
from osv import fields, osv, orm
from osv.orm import except_orm
from osv.osv import osv_pool
from tools.translate import _
import mx.DateTime
import pooler
@ -42,17 +40,14 @@ class base_action_rule(osv.osv):
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param context: A standard dictionary for contextual values """
return self.state_get(cr, uid, context=context)
def state_get(self, cr, uid, context={}):
""" Get State
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param context: A standard dictionary for contextual values """
return [('', '')]
def priority_get(self, cr, uid, context={}):
@ -61,14 +56,13 @@ class base_action_rule(osv.osv):
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param context: A standard dictionary for contextual values """
return [('', '')]
_columns = {
'name': fields.many2one('ir.model', 'Object', required=True),
'max_level': fields.integer('Max Level', help='Specifies maximum level.'),
'create_date': fields.datetime('Create Date', readonly=1),
'active': fields.boolean('Active', help="If the active field is set to true,\
'active': fields.boolean('Active', help="If the active field is set to False,\
it will allow you to hide the rule without removing it."),
'sequence': fields.integer('Sequence', help="Gives the sequence order \
when displaying a list of rules."),
@ -85,10 +79,7 @@ specifies you can put a negative number. If you need a delay before the \
trigger date, like sending a reminder 15 minutes before a meeting."),
'trg_date_range_type': fields.selection([('minutes', 'Minutes'), ('hour', 'Hours'), \
('day', 'Days'), ('month', 'Months')], 'Delay type'),
'trg_user_id': fields.many2one('res.users', 'Responsible'),
'trg_partner_id': fields.many2one('res.partner', 'Partner'),
'trg_partner_categ_id': fields.many2one('res.partner.category', 'Partner Category'),
'trg_state_from': fields.selection(_state_get, 'State', size=16),
@ -136,7 +127,9 @@ the rule to mark CC(mail to any other person defined in actions)."),
def pre_action(self, cr, uid, ids, model, context=None):
# Searching for action rules
cr.execute("SELECT model.model, rule.id FROM base_action_rule rule LEFT JOIN ir_model model on (model.id = rule.name)")
cr.execute("SELECT model.model, rule.id FROM base_action_rule rule \
LEFT JOIN ir_model model on (model.id = rule.name) \
where active")
res = cr.fetchall()
# Check if any rule matching with current object
for obj_name, rule_id in res:
@ -171,10 +164,9 @@ the rule to mark CC(mail to any other person defined in actions)."),
def _register_hook(self, cr, uid, ids, context=None):
if not context:
context = {}
model_pool = self.pool.get('ir.model')
for action_rule in self.browse(cr, uid, ids, context=context):
model = action_rule.name.model
obj_pool = self.pool.get(model)
obj_pool = self.pool.get(model)
obj_pool.__setattr__('create', self._create(obj_pool.create, model, context=context))
obj_pool.__setattr__('write', self._write(obj_pool.write, model, context=context))
return True
@ -194,7 +186,7 @@ the rule to mark CC(mail to any other person defined in actions)."),
"""
This Function is call by scheduler.
"""
rule_pool= self.pool.get('base.action.rule')
rule_pool = self.pool.get('base.action.rule')
rule_ids = rule_pool.search(cr, uid, [], context=context)
return self._register_hook(cr, uid, rule_ids, context=context)
@ -202,7 +194,6 @@ the rule to mark CC(mail to any other person defined in actions)."),
def format_body(self, body):
""" Foramat Action rule's body
@param self: The object pointer """
return body and tools.ustr(body) or ''
def format_mail(self, obj, body):
@ -392,7 +383,7 @@ the rule to mark CC(mail to any other person defined in actions)."),
obj.date_action_next = dt
model_obj.write(cr, uid, [obj.id], {'date_action_next': dt}, context)
else:
ok = action.trg_date_type=='none'
ok = action.trg_date_type == 'none'
if ok:
self.do_action(cr, uid, action, model_obj, obj, context)
@ -431,7 +422,7 @@ class ir_cron(osv.osv):
def _poolJobs(self, db_name, check=False):
try:
db, pool = pooler.get_db_and_pool(db_name)
db = pooler.get_db(db_name)
except:
return False
cr = db.cursor()
@ -439,12 +430,12 @@ class ir_cron(osv.osv):
next = datetime.now().strftime('%Y-%m-%d %H:00:00')
# Putting nextcall always less than current time in order to call it every time
cr.execute('UPDATE ir_cron set nextcall = \'%s\' where numbercall<>0 and active and model=\'base.action.rule\' ' % (next))
cr.commit()
res = super(ir_cron, self)._poolJobs(db_name, check=check)
finally:
cr.commit()
cr.close()
super(ir_cron, self)._poolJobs(db_name, check=check)
ir_cron()

View File

@ -57,22 +57,18 @@
<field name="server_action_id"/>
</page>
<page string="Email Actions">
<!-- <group col="4" colspan="2">-->
<separator colspan="4" string="Email Reminders"/>
<field name="act_remind_partner"/>
<field name="act_remind_attach"/>
<field name="act_remind_user"/>
<group col="2" colspan="2" attrs="{'invisible': [('act_remind_user','=',False)]}">
<field name="act_reply_to" attrs="{'required':[('act_remind_user','=',True)]}"/>
</group>
<separator colspan="4" string="Email Information"/>
<field name="act_mail_to_watchers"/>
<field name="act_mail_to_user"/>
<field colspan="4" name="act_mail_to_email"/>
<!-- </group>-->
<!-- <group col="4" colspan="2">-->
<separator colspan="4" string="Email Reminders"/>
<field name="act_remind_partner"/>
<field name="act_remind_attach"/>
<field name="act_remind_user"/>
<group col="2" colspan="2" attrs="{'invisible': [('act_remind_user','=',False)]}">
<field name="act_reply_to" attrs="{'required':[('act_remind_user','=',True)]}"/>
</group>
<field name="act_mail_to_watchers"/>
<field colspan="4" name="act_email_cc"/>
<!-- </group>-->
<separator colspan="4" string="Email Body"/>
<field colspan="4" name="act_mail_body" height="250"
nolabel="1" attrs="{'required':[('act_remind_user','=',True)]}" />

View File

@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_base_action_rule","base.action.rule","model_base_action_rule",,1,0,0,0
"access_base_action_rule_config","base.action.rule config","model_base_action_rule",base.group_system,1,0,0,0
"access_base_action_rule_config","base.action.rule config","model_base_action_rule",base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_base_action_rule base.action.rule model_base_action_rule 1 0 0 0
3 access_base_action_rule_config base.action.rule config model_base_action_rule base.group_system 1 0 1 0 1 0 1

View File

@ -22,7 +22,7 @@
import time
from datetime import datetime
from datetime import timedelta
import base64
import tools
from osv import fields
from osv import osv
@ -342,7 +342,6 @@ class crm_case(object):
destination=False)
def remind_user(self, cr, uid, ids, context={}, attach=False,destination=True):
"""
@param self: The object pointer
@param cr: the current row, from the database cursor,
@ -359,8 +358,9 @@ class crm_case(object):
if case.section_id.reply_to and case.email_from:
src = case.email_from
dest = case.section_id.reply_to
body = ""
body = case.email_last or case.description
body = case.description or ""
if case.message_ids:
body = case.message_ids[0].description or ""
if not destination:
src, dest = dest, src
if body and case.user_id.signature:
@ -371,7 +371,7 @@ class crm_case(object):
attach_to_send = None
if attach:
attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', 'mailgate.thread'), ('res_id', '=', case.id)])
attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)])
attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname','datas'])
attach_to_send = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send)

View File

@ -115,26 +115,22 @@ this if you want the rule to send an email to the partner."),
def state_get(self, cr, uid, context={}):
"""@param self: The object pointer
"""Gets available states for crm
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param context: A standard dictionary for contextual values """
res = super(base_action_rule, self).state_get(cr, uid, context=context)
return res + crm.AVAILABLE_STATES
def priority_get(self, cr, uid, context={}):
"""@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param context: A standard dictionary for contextual values """
res = super(base_action_rule, self).priority_get(cr, uid, context=context)
return res + crm.AVAILABLE_PRIORITIES
base_action_rule()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -53,7 +53,7 @@
<field name="inherit_id" ref="base_action_rule.view_base_action_rule_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="act_mail_to_watchers" position="before">
<field name="act_mail_to_user" position="after">
<field name="act_mail_to_partner"/>
</field>
</field>

View File

@ -57,6 +57,8 @@ class crm_meeting(osv.osv, crm_case):
'id': fields.integer('ID'),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Write Date' , readonly=True),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
# Meeting fields
'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \
domain="[('object_id.model', '=', 'crm.meeting')]", \

View File

@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-06 03:37+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: multi_company

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product_visible_discount

View File

@ -64,7 +64,7 @@ class sale_advance_payment_inv(osv.osv_memory):
_("You cannot make an advance on a sale order \
that is defined as 'Automatic Invoice after delivery'."))
val = obj_lines.product_id_change(cr, uid, [], sale_adv_obj.product_id.id,
uom = False, partner_id = sale.partner_id.id, fposition_id=sale.fiscal_position.id)
uom = False, partner_id = sale.partner_id.id, fiscal_position = sale.fiscal_position.id)
line_id =obj_lines.create(cr, uid, {
'name': val['value']['name'],
'account_id': val['value']['account_id'],

View File

@ -39,7 +39,7 @@
<field name="res_model">account.invoice.report</field>
<field name="view_type">form</field>
<field name="view_mode">graph,tree</field>
<field name="view_id" ref="view_turnover_by_month_tree"/>
<field name="view_id" ref="view_turnover_by_month_graph"/>
<field name="domain">[('year','ilike',time.strftime('%Y')),('user_id','=',uid)]</field>
<field name="context">{'group_by_no_leaf':1,'group_by':['month']}</field>
<field name="search_view_id" ref="account.view_account_invoice_report_search"/>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-03 03:48+0000\n"
"X-Launchpad-Export-Date: 2010-07-07 03:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale_margin