[MRG] merge with lp:openobjec-addons.
bzr revid: tpa@tinyerp.com-20120907063657-l0eve7vwo9w3jij1
This commit is contained in:
commit
ac75763855
|
@ -111,7 +111,7 @@ class account_payment_term_line(osv.osv):
|
||||||
'days': fields.integer('Number of Days', required=True, help="Number of days to add before computation of the day of month." \
|
'days': fields.integer('Number of Days', required=True, help="Number of days to add before computation of the day of month." \
|
||||||
"If Date=15/01, Number of Days=22, Day of Month=-1, then the due date is 28/02."),
|
"If Date=15/01, Number of Days=22, Day of Month=-1, then the due date is 28/02."),
|
||||||
'days2': fields.integer('Day of the Month', required=True, help="Day of the month, set -1 for the last day of the current month. If it's positive, it gives the day of the next month. Set 0 for net days (otherwise it's based on the beginning of the month)."),
|
'days2': fields.integer('Day of the Month', required=True, help="Day of the month, set -1 for the last day of the current month. If it's positive, it gives the day of the next month. Set 0 for net days (otherwise it's based on the beginning of the month)."),
|
||||||
'payment_id': fields.many2one('account.payment.term', 'Payment Term', required=True, select=True),
|
'payment_id': fields.many2one('account.payment.term', 'Payment Term', required=True, select=True, ondelete='cascade'),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'value': 'balance',
|
'value': 'balance',
|
||||||
|
@ -1377,7 +1377,7 @@ class account_move(osv.osv):
|
||||||
balance = 0.0
|
balance = 0.0
|
||||||
for line in line_ids:
|
for line in line_ids:
|
||||||
if line[2]:
|
if line[2]:
|
||||||
balance += (line[2]['debit'] or 0.00)- (line[2]['credit'] or 0.00)
|
balance += (line[2].get('debit',0.00)- (line[2].get('credit',0.00)))
|
||||||
return {'value': {'balance': balance}}
|
return {'value': {'balance': balance}}
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
|
|
|
@ -430,7 +430,7 @@ class account_bank_statement(osv.osv):
|
||||||
'name': st_number,
|
'name': st_number,
|
||||||
'balance_end_real': st.balance_end
|
'balance_end_real': st.balance_end
|
||||||
}, context=context)
|
}, context=context)
|
||||||
self.message_append_note(cr, uid, [st.id], body=_('Statement %s is confirmed, journal items are created.') % (st_number,), context=context)
|
self.message_post(cr, uid, [st.id], body=_('Statement %s confirmed, journal items were created.') % (st_number,), context=context)
|
||||||
return self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
return self.write(cr, uid, ids, {'state':'confirm'}, context=context)
|
||||||
|
|
||||||
def button_cancel(self, cr, uid, ids, context=None):
|
def button_cancel(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -1045,7 +1045,7 @@ class account_invoice(osv.osv):
|
||||||
if obj_inv.type in ('out_invoice', 'out_refund'):
|
if obj_inv.type in ('out_invoice', 'out_refund'):
|
||||||
ctx = self.get_log_context(cr, uid, context=ctx)
|
ctx = self.get_log_context(cr, uid, context=ctx)
|
||||||
message = _("Invoice '%s' is validated.") % name
|
message = _("Invoice '%s' is validated.") % name
|
||||||
self.message_append_note(cr, uid, [inv_id], body=message, context=context)
|
self.message_post(cr, uid, [inv_id], body=message, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def action_cancel(self, cr, uid, ids, *args):
|
def action_cancel(self, cr, uid, ids, *args):
|
||||||
|
@ -1275,7 +1275,7 @@ class account_invoice(osv.osv):
|
||||||
# TODO: use currency's formatting function
|
# TODO: use currency's formatting function
|
||||||
msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining).") % \
|
msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining).") % \
|
||||||
(name, pay_amount, code, invoice.amount_total, code, total, code)
|
(name, pay_amount, code, invoice.amount_total, code, total, code)
|
||||||
self.message_append_note(cr, uid, [inv_id], body=msg, context=context)
|
self.message_post(cr, uid, [inv_id], body=msg, context=context)
|
||||||
self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context)
|
self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context)
|
||||||
|
|
||||||
# Update the stored value (fields.function), so we write to trigger recompute
|
# Update the stored value (fields.function), so we write to trigger recompute
|
||||||
|
@ -1288,24 +1288,25 @@ class account_invoice(osv.osv):
|
||||||
|
|
||||||
def _get_document_type(self, type):
|
def _get_document_type(self, type):
|
||||||
type_dict = {
|
type_dict = {
|
||||||
'out_invoice': 'Customer invoice',
|
# Translation markers will have no effect at runtime, only used to properly flag export
|
||||||
'in_invoice': 'Supplier invoice',
|
'out_invoice': _('Customer invoice'),
|
||||||
'out_refund': 'Customer Refund',
|
'in_invoice': _('Supplier invoice'),
|
||||||
'in_refund': 'Supplier Refund',
|
'out_refund': _('Customer Refund'),
|
||||||
|
'in_refund': _('Supplier Refund'),
|
||||||
}
|
}
|
||||||
return type_dict.get(type, 'Invoice')
|
return type_dict.get(type, 'Invoice')
|
||||||
|
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
self.message_append_note(cr, uid, [obj.id],body=_("%s <b>created</b>.") % (self._get_document_type(obj.type)), context=context)
|
self.message_post(cr, uid, [obj.id], body=_("%s <b>created</b>.") % (_(self._get_document_type(obj.type))), context=context)
|
||||||
|
|
||||||
def confirm_paid_send_note(self, cr, uid, ids, context=None):
|
def confirm_paid_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
self.message_append_note(cr, uid, [obj.id], body=_("%s <b>paid</b>.") % (self._get_document_type(obj.type)), context=context)
|
self.message_post(cr, uid, [obj.id], body=_("%s <b>paid</b>.") % (_(self._get_document_type(obj.type))), context=context)
|
||||||
|
|
||||||
def invoice_cancel_send_note(self, cr, uid, ids, context=None):
|
def invoice_cancel_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
self.message_append_note(cr, uid, [obj.id], body=_("%s <b>cancelled</b>.") % (self._get_document_type(obj.type)), context=context)
|
self.message_post(cr, uid, [obj.id], body=_("%s <b>cancelled</b>.") % (_(self._get_document_type(obj.type))), context=context)
|
||||||
|
|
||||||
account_invoice()
|
account_invoice()
|
||||||
|
|
||||||
|
@ -1361,10 +1362,16 @@ class account_invoice_line(osv.osv):
|
||||||
'company_id': fields.related('invoice_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
'company_id': fields.related('invoice_id','company_id',type='many2one',relation='res.company',string='Company', store=True, readonly=True),
|
||||||
'partner_id': fields.related('invoice_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True)
|
'partner_id': fields.related('invoice_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _default_account_id(self, cr, uid, ids, context=None):
|
||||||
|
prop = self.pool.get('ir.property').get(cr, uid, 'property_account_income_categ', 'product.category', context=context)
|
||||||
|
return prop and prop.id or False
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'quantity': 1,
|
'quantity': 1,
|
||||||
'discount': 0.0,
|
'discount': 0.0,
|
||||||
'price_unit': _price_unit_default,
|
'price_unit': _price_unit_default,
|
||||||
|
'account_id': _default_account_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
|
||||||
|
@ -1473,10 +1480,11 @@ class account_invoice_line(osv.osv):
|
||||||
prod = self.pool.get('product.product').browse(cr, uid, product, context=context)
|
prod = self.pool.get('product.product').browse(cr, uid, product, context=context)
|
||||||
prod_uom = self.pool.get('product.uom').browse(cr, uid, uom, context=context)
|
prod_uom = self.pool.get('product.uom').browse(cr, uid, uom, context=context)
|
||||||
if prod.uom_id.category_id.id != prod_uom.category_id.id:
|
if prod.uom_id.category_id.id != prod_uom.category_id.id:
|
||||||
warning = {
|
warning = {
|
||||||
'title': _('Warning!'),
|
'title': _('Warning!'),
|
||||||
'message': _('The selected unit of measure is not compatible with the unit of measure of the product.')
|
'message': _('The selected unit of measure is not compatible with the unit of measure of the product.')
|
||||||
}
|
}
|
||||||
|
res['value'].update({'uos_id': prod.uom_id.id})
|
||||||
return {'value': res['value'], 'warning': warning}
|
return {'value': res['value'], 'warning': warning}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -191,17 +191,23 @@
|
||||||
<page string="Invoice">
|
<page string="Invoice">
|
||||||
<field context="{'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False, 'type': type}" name="invoice_line">
|
<field context="{'partner_id': partner_id, 'price_type': 'price_type' in dir() and price_type or False, 'type': type}" name="invoice_line">
|
||||||
<tree string="Invoice lines" editable="bottom">
|
<tree string="Invoice lines" editable="bottom">
|
||||||
<field name="product_id" on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
<field name="product_id"
|
||||||
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id,parent.partner_id,parent.type,parent.fiscal_position,account_id)" groups="base.group_account_user"/>
|
on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||||
<field name="invoice_line_tax_id" view_mode="2" context="{'type':parent.type}" domain="[('parent_id','=',False)]"/>
|
<field name="name"/>
|
||||||
<field domain="[('type','<>','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
|
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||||
|
<field name="account_id" groups="account.group_account_user"
|
||||||
|
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
|
||||||
|
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
|
||||||
|
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||||
|
domain="[('type','!=','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]"/>
|
||||||
<field name="quantity"/>
|
<field name="quantity"/>
|
||||||
|
<field name="uos_id" groups="product.group_uom"
|
||||||
|
on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||||
<field name="price_unit"/>
|
<field name="price_unit"/>
|
||||||
|
<field name="discount" groups="sale.group_discount_per_so_line"/>
|
||||||
|
<field name="invoice_line_tax_id" widget="many2many_tags" context="{'type':parent.type}"
|
||||||
|
domain="[('parent_id','=',False),('company_id', '=', parent.company_id)]"/>
|
||||||
<field name="price_subtotal"/>
|
<field name="price_subtotal"/>
|
||||||
<field domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id" on_change="onchange_account_id(product_id,parent.partner_id,parent.type,parent.fiscal_position,account_id)" invisible="1"/>
|
|
||||||
<!-- Removed if subtotal is set -->
|
|
||||||
<field name="name" invisible="1"/>
|
|
||||||
<field name="uos_id" invisible="1"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
<group class="oe_subtotal_footer oe_right">
|
<group class="oe_subtotal_footer oe_right">
|
||||||
|
@ -342,17 +348,22 @@
|
||||||
<page string="Invoice Lines">
|
<page string="Invoice Lines">
|
||||||
<field name="invoice_line" nolabel="1" widget="one2many_list" context="{'type': type}">
|
<field name="invoice_line" nolabel="1" widget="one2many_list" context="{'type': type}">
|
||||||
<tree string="Invoice Lines" editable="bottom">
|
<tree string="Invoice Lines" editable="bottom">
|
||||||
<field name="invoice_line_tax_id" invisible="1"/>
|
<field name="product_id"
|
||||||
<field name="product_id" />
|
on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
|
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
|
||||||
<field name="account_id" groups="account.group_account_user"
|
<field name="account_id" groups="account.group_account_user"
|
||||||
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]"
|
domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '!=', 'view')]"
|
||||||
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
|
on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
|
||||||
|
<field name="account_analytic_id" groups="analytic.group_analytic_accounting"
|
||||||
|
domain="[('type','!=','view'), ('company_id', '=', parent.company_id), ('parent_id', '!=', False)]"/>
|
||||||
<field name="quantity"/>
|
<field name="quantity"/>
|
||||||
<field name="uos_id" groups="product.group_uom"
|
<field name="uos_id" groups="product.group_uom"
|
||||||
on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
|
||||||
<field name="price_unit"/>
|
<field name="price_unit"/>
|
||||||
<field name="discount" groups="sale.group_discount_per_so_line"/>
|
<field name="discount" groups="sale.group_discount_per_so_line"/>
|
||||||
|
<field name="invoice_line_tax_id" widget="many2many_tags" context="{'type':parent.type}"
|
||||||
|
domain="[('parent_id','=',False),('company_id', '=', parent.company_id)]"/>
|
||||||
<field name="price_subtotal"/>
|
<field name="price_subtotal"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
<form string="Account Board" version="7.0">
|
<form string="Account Board" version="7.0">
|
||||||
<board style="2-1">
|
<board style="2-1">
|
||||||
<column>
|
<column>
|
||||||
<action name="%(account.action_invoice_tree1)d" creatable="true" string="Draft Customer Invoices" domain="[('state','in',('draft','proforma2')), ('type','=','out_invoice')]"/>
|
|
||||||
<action name="%(action_company_analysis_tree)d" string="Company Analysis"/>
|
<action name="%(action_company_analysis_tree)d" string="Company Analysis"/>
|
||||||
</column>
|
</column>
|
||||||
<column>
|
<column>
|
||||||
|
|
|
@ -383,7 +383,7 @@
|
||||||
<field name="type">cash</field>
|
<field name="type">cash</field>
|
||||||
<field name="profit_account_id" model="account.account" ref="rsa" />
|
<field name="profit_account_id" model="account.account" ref="rsa" />
|
||||||
<field name="loss_account_id" model="account.account" ref="rsa" />
|
<field name="loss_account_id" model="account.account" ref="rsa" />
|
||||||
<field name="internal_account_id" model="account.account" ref="chart0" />
|
<field name="internal_account_id" model="account.account" ref="rsa" />
|
||||||
<field name="with_last_closing_balance" eval="True" />
|
<field name="with_last_closing_balance" eval="True" />
|
||||||
<field name="cash_control" eval="True" />
|
<field name="cash_control" eval="True" />
|
||||||
<field name="view_id" ref="account_journal_bank_view"/>
|
<field name="view_id" ref="account_journal_bank_view"/>
|
||||||
|
|
|
@ -123,64 +123,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
]]></field>
|
]]></field>
|
||||||
<field name="body_text"><![CDATA[
|
|
||||||
Hello${object.partner_id.name and ' ' or ''}${object.partner_id.name or ''},
|
|
||||||
|
|
||||||
A new invoice is available for ${object.partner_id.name}:
|
|
||||||
| Invoice number: *${object.number}*
|
|
||||||
| Invoice total: *${object.amount_total} ${object.currency_id.name}*
|
|
||||||
| Invoice date: ${object.date_invoice}
|
|
||||||
% if object.origin:
|
|
||||||
| Order reference: ${object.origin}
|
|
||||||
% endif
|
|
||||||
| Your contact: ${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
|
|
||||||
|
|
||||||
You can view the invoice document, download it and pay online using the following link:
|
|
||||||
${ctx.get('edi_web_url_view') or 'n/a'}
|
|
||||||
|
|
||||||
% if object.company_id.paypal_account and object.type in ('out_invoice', 'in_refund'):
|
|
||||||
<%
|
|
||||||
comp_name = quote(object.company_id.name)
|
|
||||||
inv_number = quote(object.number)
|
|
||||||
paypal_account = quote(object.company_id.paypal_account)
|
|
||||||
inv_amount = quote(str(object.amount_total))
|
|
||||||
cur_name = quote(object.currency_id.name)
|
|
||||||
paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=%s&item_name=%s%%20Invoice%%20%s"\
|
|
||||||
"&invoice=%s&amount=%s¤cy_code=%s&button_subtype=services&no_note=1&bn=OpenERP_Invoice_PayNow_%s" % \
|
|
||||||
(paypal_account,comp_name,inv_number,inv_number,inv_amount,cur_name,cur_name)
|
|
||||||
%>
|
|
||||||
It is also possible to directly pay with Paypal:
|
|
||||||
${paypal_url}
|
|
||||||
% endif
|
|
||||||
|
|
||||||
If you have any question, do not hesitate to contact us.
|
|
||||||
|
|
||||||
|
|
||||||
Thank you for choosing ${object.company_id.name}!
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
${object.user_id.name} ${object.user_id.email and '<%s>'%(object.user_id.email) or ''}
|
|
||||||
${object.company_id.name}
|
|
||||||
% if object.company_id.street:
|
|
||||||
${object.company_id.street or ''}
|
|
||||||
% endif
|
|
||||||
% if object.company_id.street2:
|
|
||||||
${object.company_id.street2}
|
|
||||||
% endif
|
|
||||||
% if object.company_id.city or object.company_id.zip:
|
|
||||||
${object.company_id.zip or ''} ${object.company_id.city or ''}
|
|
||||||
% endif
|
|
||||||
% if object.company_id.country_id:
|
|
||||||
${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}
|
|
||||||
% endif
|
|
||||||
% if object.company_id.phone:
|
|
||||||
Phone: ${object.company_id.phone}
|
|
||||||
% endif
|
|
||||||
% if object.company_id.website:
|
|
||||||
${object.company_id.website or ''}
|
|
||||||
% endif
|
|
||||||
]]></field>
|
|
||||||
</record>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -9538,7 +9538,7 @@ msgid "Refund"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account
|
#. module: account
|
||||||
#: model:email.template,body_text:account.email_template_edi_invoice
|
#: model:email.template,body:account.email_template_edi_invoice
|
||||||
msgid "\n"
|
msgid "\n"
|
||||||
"Hello${object.address_invoice_id.name and ' ' or ''}${object.address_invoice_id.name or ''},\n"
|
"Hello${object.address_invoice_id.name and ' ' or ''}${object.address_invoice_id.name or ''},\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
@ -30,9 +30,11 @@ class account_common_report(osv.osv_memory):
|
||||||
_description = "Account Common Report"
|
_description = "Account Common Report"
|
||||||
|
|
||||||
def onchange_chart_id(self, cr, uid, ids, chart_account_id=False, context=None):
|
def onchange_chart_id(self, cr, uid, ids, chart_account_id=False, context=None):
|
||||||
|
res = {}
|
||||||
if chart_account_id:
|
if chart_account_id:
|
||||||
company_id = self.pool.get('account.account').browse(cr, uid, chart_account_id, context=context).company_id.id
|
company_id = self.pool.get('account.account').browse(cr, uid, chart_account_id, context=context).company_id.id
|
||||||
return {'value': {'company_id': company_id}}
|
res['value'] = {'company_id': company_id}
|
||||||
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'chart_account_id': fields.many2one('account.account', 'Chart of Account', help='Select Charts of Accounts', required=True, domain = [('parent_id','=',False)]),
|
'chart_account_id': fields.many2one('account.account', 'Chart of Account', help='Select Charts of Accounts', required=True, domain = [('parent_id','=',False)]),
|
||||||
|
|
|
@ -40,6 +40,10 @@ class CashBox(osv.osv_memory):
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
def _create_bank_statement_line(self, cr, uid, box, record, context=None):
|
||||||
|
values = self._compute_values_for_statement_line(cr, uid, box, record, context=context)
|
||||||
|
return self.pool.get('account.bank.statement.line').create(cr, uid, values, context=context)
|
||||||
|
|
||||||
|
|
||||||
class CashBoxIn(CashBox):
|
class CashBoxIn(CashBox):
|
||||||
_name = 'cash.box.in'
|
_name = 'cash.box.in'
|
||||||
|
@ -49,30 +53,24 @@ class CashBoxIn(CashBox):
|
||||||
'ref' : fields.char('Reference', size=32),
|
'ref' : fields.char('Reference', size=32),
|
||||||
})
|
})
|
||||||
|
|
||||||
def _create_bank_statement_line(self, cr, uid, box, record, context=None):
|
def _compute_values_for_statement_line(self, cr, uid, box, record, context=None):
|
||||||
absl_proxy = self.pool.get('account.bank.statement.line')
|
return {
|
||||||
|
|
||||||
values = {
|
|
||||||
'statement_id' : record.id,
|
'statement_id' : record.id,
|
||||||
'journal_id' : record.journal_id.id,
|
'journal_id' : record.journal_id.id,
|
||||||
'account_id' : record.journal_id.internal_account_id.id,
|
'account_id' : record.journal_id.internal_account_id.id,
|
||||||
'amount' : box.amount or 0.0,
|
'amount' : box.amount or 0.0,
|
||||||
'ref' : "%s" % (box.ref or ''),
|
'ref' : '%s' % (box.ref or ''),
|
||||||
'name' : box.name,
|
'name' : box.name,
|
||||||
}
|
}
|
||||||
|
|
||||||
return absl_proxy.create(cr, uid, values, context=context)
|
|
||||||
|
|
||||||
CashBoxIn()
|
CashBoxIn()
|
||||||
|
|
||||||
class CashBoxOut(CashBox):
|
class CashBoxOut(CashBox):
|
||||||
_name = 'cash.box.out'
|
_name = 'cash.box.out'
|
||||||
|
|
||||||
def _create_bank_statement_line(self, cr, uid, box, record, context=None):
|
def _compute_values_for_statement_line(self, cr, uid, box, record, context=None):
|
||||||
absl_proxy = self.pool.get('account.bank.statement.line')
|
|
||||||
|
|
||||||
amount = box.amount or 0.0
|
amount = box.amount or 0.0
|
||||||
values = {
|
return {
|
||||||
'statement_id' : record.id,
|
'statement_id' : record.id,
|
||||||
'journal_id' : record.journal_id.id,
|
'journal_id' : record.journal_id.id,
|
||||||
'account_id' : record.journal_id.internal_account_id.id,
|
'account_id' : record.journal_id.internal_account_id.id,
|
||||||
|
@ -80,6 +78,4 @@ class CashBoxOut(CashBox):
|
||||||
'name' : box.name,
|
'name' : box.name,
|
||||||
}
|
}
|
||||||
|
|
||||||
return absl_proxy.create(cr, uid, values, context=context)
|
|
||||||
|
|
||||||
CashBoxOut()
|
CashBoxOut()
|
||||||
|
|
|
@ -21,13 +21,14 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Notify all employees of module installation -->
|
<!-- Notify all employees of module installation -->
|
||||||
<function model="mail.group" name="message_append_note">
|
<record model="mail.message" id="module_install_notification">
|
||||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
<field name="model">mail.group</field>
|
||||||
<value eval="[ref('mail.group_all_employees')]"/>
|
<field name="res_id" ref="mail.group_all_employees"/>
|
||||||
<value>Module Accounting and Finance has been installed.</value>
|
<field name="type">notification</field>
|
||||||
<value>With OpenERP's accounting, you can get an instant access to all your financial data, setup your analytic accounting, forecast your taxes, control your budgets, easily create and send invoices, record bank statements, etc.
|
<field name="subject">Accounting and Finance application installed!</field>
|
||||||
|
<field name="body">With OpenERP's accounting, you get instant access to your financial data, and can setup analytic accounting, forecast taxes, control budgets, easily create and send invoices, record bank statements, etc.
|
||||||
|
|
||||||
The accounting features are fully integrated with others OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</value>
|
The accounting features are fully integrated with other OpenERP applications to automate all your processes: creation of customer invoices, control of supplier invoices, point-of-sale integration, automated follow-ups, etc.</field>
|
||||||
</function>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -213,8 +213,6 @@ class account_followup_print_all(osv.osv_memory):
|
||||||
mod_obj = self.pool.get('ir.model.data')
|
mod_obj = self.pool.get('ir.model.data')
|
||||||
move_obj = self.pool.get('account.move.line')
|
move_obj = self.pool.get('account.move.line')
|
||||||
user_obj = self.pool.get('res.users')
|
user_obj = self.pool.get('res.users')
|
||||||
line_obj = self.pool.get('account_followup.stat')
|
|
||||||
mail_message = self.pool.get('mail.message')
|
|
||||||
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
|
@ -235,13 +233,7 @@ class account_followup_print_all(osv.osv_memory):
|
||||||
total_amt += line.debit - line.credit
|
total_amt += line.debit - line.credit
|
||||||
dest = False
|
dest = False
|
||||||
if partner:
|
if partner:
|
||||||
if partner.type=='contact':
|
dest = [partner.email]
|
||||||
if adr.email:
|
|
||||||
dest = [partner.email]
|
|
||||||
if (not dest) and partner.type=='default':
|
|
||||||
if partner.email:
|
|
||||||
dest = [partner.email]
|
|
||||||
src = tools.config.options['email_from']
|
|
||||||
if not data.partner_lang:
|
if not data.partner_lang:
|
||||||
body = data.email_body
|
body = data.email_body
|
||||||
else:
|
else:
|
||||||
|
@ -281,7 +273,12 @@ class account_followup_print_all(osv.osv_memory):
|
||||||
msg = ''
|
msg = ''
|
||||||
if dest:
|
if dest:
|
||||||
try:
|
try:
|
||||||
mail_message.schedule_with_attach(cr, uid, src, dest, sub, body, context=context)
|
vals = {'state': 'outgoing',
|
||||||
|
'subject': sub,
|
||||||
|
'body_html': '<pre>%s</pre>' % body,
|
||||||
|
'email_to': dest,
|
||||||
|
'email_from': data_user.email or tools.config.options['email_from']}
|
||||||
|
self.pool.get('mail.mail').create(cr, uid, vals, context=context)
|
||||||
msg_sent += partner.name + '\n'
|
msg_sent += partner.name + '\n'
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
raise osv.except_osv('Error !', e )
|
raise osv.except_osv('Error !', e )
|
||||||
|
|
|
@ -1293,17 +1293,17 @@ class account_voucher(osv.osv):
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
message = "%s <b>created</b>." % self._document_type[obj.type or False]
|
message = "%s <b>created</b>." % self._document_type[obj.type or False]
|
||||||
self.message_append_note(cr, uid, [obj.id], body=message, context=context)
|
self.message_post(cr, uid, [obj.id], body=message, context=context)
|
||||||
|
|
||||||
def post_send_note(self, cr, uid, ids, context=None):
|
def post_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
message = "%s '%s' is <b>posted</b>." % (self._document_type[obj.type or False], obj.move_id.name)
|
message = "%s '%s' is <b>posted</b>." % (self._document_type[obj.type or False], obj.move_id.name)
|
||||||
self.message_append_note(cr, uid, [obj.id], body=message, context=context)
|
self.message_post(cr, uid, [obj.id], body=message, context=context)
|
||||||
|
|
||||||
def reconcile_send_note(self, cr, uid, ids, context=None):
|
def reconcile_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
message = "%s <b>reconciled</b>." % self._document_type[obj.type or False]
|
message = "%s <b>reconciled</b>." % self._document_type[obj.type or False]
|
||||||
self.message_append_note(cr, uid, [obj.id], body=message, context=context)
|
self.message_post(cr, uid, [obj.id], body=message, context=context)
|
||||||
|
|
||||||
account_voucher()
|
account_voucher()
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
<openerp>
|
<openerp>
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
<!-- notify all employees of module installation -->
|
<!-- notify all employees of module installation -->
|
||||||
<function model="mail.group" name="message_append_note">
|
<record model="mail.message" id="module_install_notification">
|
||||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
<field name="model">mail.group</field>
|
||||||
<value eval="[ref('mail.group_all_employees')]"/>
|
<field name="res_id" ref="mail.group_all_employees"/>
|
||||||
<value>Module eInvoicing & Payments has been installed.</value>
|
<field name="type">notification</field>
|
||||||
<value>OpenERP's electronic invoicing allows to ease and fasten the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
|
<field name="subject">eInvoicing & Payments application installed!</field>
|
||||||
|
<field name="body">OpenERP's electronic invoicing accelerates the creation of invoices and collection of customer payments. Invoices are created in a few clicks and your customers receive them by email. They can pay online and/or import them in their own system.
|
||||||
|
|
||||||
You can track customer payments easily and automate the reminders. You get an overview of the discussion with your customers on each invoice to ensure a full traceability.
|
You can track customer payments easily and automate follow-ups. You get an overview of the discussion with your customers on each invoice for easier traceability.
|
||||||
|
|
||||||
If you want to use advanced accounting features, you should install the "Accounting and Finance" module.</value>
|
For advanced accounting features, you should install the "Accounting and Finance" module.</field>
|
||||||
</function>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -297,7 +297,7 @@ class account_analytic_account(osv.osv):
|
||||||
|
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
self.message_append_note(cr, uid, [obj.id], body=_("Contract for <em>%s</em> has been <b>created</b>.") % (obj.partner_id.name), context=context)
|
self.message_post(cr, uid, [obj.id], body=_("Contract for <em>%s</em> has been <b>created</b>.") % (obj.partner_id.name), context=context)
|
||||||
|
|
||||||
account_analytic_account()
|
account_analytic_account()
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<t t-extend="Login">
|
<t t-extend="Login">
|
||||||
<t t-jquery=".oe_login .oe_login_logo" t-operation="after">
|
<t t-jquery=".oe_login .oe_login_logo" t-operation="after">
|
||||||
<ul class="openid_providers">
|
<ul class="openid_providers oe_semantic_html_override">
|
||||||
<li><a href="#login,password" title="Password" data-url="" id="btn_password">Password</a></li>
|
<li><a href="#login,password" title="Password" data-url="" id="btn_password">Password</a></li>
|
||||||
<li><a href="#google" title="Google" data-url="https://www.google.com/accounts/o8/id">Google</a></li>
|
<li><a href="#google" title="Google" data-url="https://www.google.com/accounts/o8/id">Google</a></li>
|
||||||
<li><a href="#googleapps" title="Google Apps" data-url="https://www.google.com/accounts/o8/site-xrds?hd={id}">Google</a></li>
|
<li><a href="#googleapps" title="Google Apps" data-url="https://www.google.com/accounts/o8/site-xrds?hd={id}">Google</a></li>
|
||||||
|
|
|
@ -9,16 +9,13 @@
|
||||||
<field name="email_from"><![CDATA[${object.company_id.name} <${object.company_id.email}>]]></field>
|
<field name="email_from"><![CDATA[${object.company_id.name} <${object.company_id.email}>]]></field>
|
||||||
<field name="email_to" eval="False"><!--(set by reset_password module)--></field>
|
<field name="email_to" eval="False"><!--(set by reset_password module)--></field>
|
||||||
<field name="subject">Password reset</field>
|
<field name="subject">Password reset</field>
|
||||||
<field name="body_text"><![CDATA[
|
<field name="body_html"><![CDATA[
|
||||||
A password reset was requested the OpenERP account linked to this email on ${object._auth_reset_password_host()}
|
<p>A password reset was requested the OpenERP account linked to this email on ${object._auth_reset_password_host()}</p>
|
||||||
|
|
||||||
You may change your password following this link:
|
<p>You may change your password following this <a href="${object._auth_reset_password_link()}">link</a>,
|
||||||
|
or by copy-pasting the following URL in your browser: ${object._auth_reset_password_link()}</p>
|
||||||
|
|
||||||
${object._auth_reset_password_link()}
|
<p>Note: If you did not ask for a password reset, you can safely ignore this email.</p>]]></field>
|
||||||
|
|
||||||
If you don't have asked for password reset, you can safely ignore this email.
|
|
||||||
|
|
||||||
]]></field>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- TODO get own css -->
|
<!-- TODO get own css -->
|
||||||
|
|
|
@ -302,33 +302,27 @@ the rule to mark CC(mail to any other person defined in actions)."),
|
||||||
return self.format_body(body % data)
|
return self.format_body(body % data)
|
||||||
|
|
||||||
def email_send(self, cr, uid, obj, emails, body, emailfrom=None, context=None):
|
def email_send(self, cr, uid, obj, emails, body, emailfrom=None, context=None):
|
||||||
""" send email
|
|
||||||
@param self: The object pointer
|
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param email: pass the emails
|
|
||||||
@param emailfrom: Pass name the email From else False
|
|
||||||
@param context: A standard dictionary for contextual values """
|
|
||||||
|
|
||||||
if not emailfrom:
|
if not emailfrom:
|
||||||
emailfrom = tools.config.get('email_from', False)
|
emailfrom = tools.config.get('email_from')
|
||||||
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
|
|
||||||
mail_message = self.pool.get('mail.message')
|
|
||||||
body = self.format_mail(obj, body)
|
body = self.format_mail(obj, body)
|
||||||
if not emailfrom:
|
if not emailfrom and hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
|
||||||
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
|
emailfrom = obj.user_id.email
|
||||||
emailfrom = obj.user_id.email
|
|
||||||
|
|
||||||
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
|
||||||
emailfrom = tools.ustr(emailfrom)
|
emailfrom = tools.ustr(emailfrom)
|
||||||
reply_to = emailfrom
|
reply_to = emailfrom
|
||||||
if not emailfrom:
|
if not emailfrom:
|
||||||
raise osv.except_osv(_('Error!'),
|
raise osv.except_osv(_('Error!'),
|
||||||
_("No email ID found for your company address."))
|
_("Missing default email address or missing email on responsible user"))
|
||||||
return mail_message.schedule_with_attach(cr, uid, emailfrom, emails, name, body, model='base.action.rule', reply_to=reply_to, res_id=obj.id)
|
return self.pool.get('mail.mail').create(cr, uid,
|
||||||
|
{ 'email_from': emailfrom,
|
||||||
|
'email_to': emails.join(','),
|
||||||
|
'reply_to': reply_to,
|
||||||
|
'state': 'outgoing',
|
||||||
|
'subject': '[%d] %s' % (obj.id, tools.ustr(obj.name)),
|
||||||
|
'body_html': '<pre>%s</pre>' % body,
|
||||||
|
'res_id': obj.id,
|
||||||
|
'model': obj._table_name,
|
||||||
|
'auto_delete': True
|
||||||
|
}, context=context)
|
||||||
|
|
||||||
|
|
||||||
def do_check(self, cr, uid, action, obj, context=None):
|
def do_check(self, cr, uid, action, obj, context=None):
|
||||||
|
@ -438,11 +432,8 @@ the rule to mark CC(mail to any other person defined in actions)."),
|
||||||
if len(emails) and action.act_mail_body:
|
if len(emails) and action.act_mail_body:
|
||||||
emails = list(set(emails))
|
emails = list(set(emails))
|
||||||
email_from = safe_eval(action.act_email_from, {}, locals_for_emails)
|
email_from = safe_eval(action.act_email_from, {}, locals_for_emails)
|
||||||
|
emails = tools.email_split(','.join(filter(None, emails)))
|
||||||
def to_email(text):
|
email_froms = tools.email_split(email_from)
|
||||||
return re.findall(r'([^ ,<@]+@[^> ,]+)', text or '')
|
|
||||||
emails = to_email(','.join(filter(None, emails)))
|
|
||||||
email_froms = to_email(email_from)
|
|
||||||
if email_froms:
|
if email_froms:
|
||||||
self.email_send(cr, uid, obj, emails, action.act_mail_body, emailfrom=email_froms[0])
|
self.email_send(cr, uid, obj, emails, action.act_mail_body, emailfrom=email_froms[0])
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -471,18 +471,10 @@ property or property parameter."),
|
||||||
def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context=None):
|
def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context=None):
|
||||||
"""
|
"""
|
||||||
Send mail for event invitation to event attendees.
|
Send mail for event invitation to event attendees.
|
||||||
@param cr: the current row, from the database cursor,
|
|
||||||
@param uid: the current user’s ID for security checks,
|
|
||||||
@param ids: List of attendee’s IDs.
|
|
||||||
@param email_from: Email address for user sending the mail
|
@param email_from: Email address for user sending the mail
|
||||||
@param context: A standard dictionary for contextual values
|
|
||||||
@return: True
|
@return: True
|
||||||
"""
|
"""
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
|
|
||||||
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name
|
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name
|
||||||
mail_message = self.pool.get('mail.message')
|
|
||||||
for att in self.browse(cr, uid, ids, context=context):
|
for att in self.browse(cr, uid, ids, context=context):
|
||||||
sign = att.sent_by_uid and att.sent_by_uid.signature or ''
|
sign = att.sent_by_uid and att.sent_by_uid.signature or ''
|
||||||
sign = '<br>'.join(sign and sign.split('\n') or [])
|
sign = '<br>'.join(sign and sign.split('\n') or [])
|
||||||
|
@ -508,17 +500,18 @@ property or property parameter."),
|
||||||
}
|
}
|
||||||
body = html_invitation % body_vals
|
body = html_invitation % body_vals
|
||||||
if mail_to and email_from:
|
if mail_to and email_from:
|
||||||
attach = self.get_ics_file(cr, uid, res_obj, context=context)
|
ics_file = self.get_ics_file(cr, uid, res_obj, context=context)
|
||||||
mail_message.schedule_with_attach(cr, uid,
|
vals = {'email_from': email_from,
|
||||||
email_from,
|
'email_to': mail_to,
|
||||||
mail_to,
|
'state': 'outgoing',
|
||||||
sub,
|
'subject': sub,
|
||||||
body,
|
'body_html': body,
|
||||||
attachments=attach and {'invitation.ics': attach} or None,
|
'auto_delete': True}
|
||||||
content_subtype='html',
|
if ics_file:
|
||||||
reply_to=email_from,
|
vals['attachment_ids'] = [(0,0,{'name': 'invitation.ics',
|
||||||
context=context
|
'datas_fname': 'invitation.ics',
|
||||||
)
|
'datas': str(ics_file).encode('base64')})]
|
||||||
|
self.pool.get('mail.mail').create(cr, uid, vals, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv):
|
def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv):
|
||||||
|
@ -812,7 +805,6 @@ class calendar_alarm(osv.osv):
|
||||||
"""
|
"""
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
mail_message = self.pool.get('mail.message')
|
|
||||||
current_datetime = datetime.now()
|
current_datetime = datetime.now()
|
||||||
alarm_ids = self.search(cr, uid, [('state', '!=', 'done')], context=context)
|
alarm_ids = self.search(cr, uid, [('state', '!=', 'done')], context=context)
|
||||||
|
|
||||||
|
@ -849,36 +841,10 @@ class calendar_alarm(osv.osv):
|
||||||
else:
|
else:
|
||||||
re_dates = [alarm.trigger_date]
|
re_dates = [alarm.trigger_date]
|
||||||
|
|
||||||
for r_date in re_dates:
|
if re_dates:
|
||||||
ref = alarm.model_id.model + ',' + str(alarm.res_id)
|
|
||||||
|
|
||||||
# search for alreay sent requests
|
|
||||||
#if request_obj.search(cr, uid, [('trigger_date', '=', r_date), ('ref_doc1', '=', ref)], context=context):
|
|
||||||
#continue
|
|
||||||
|
|
||||||
# Deactivated because of the removing of res.request
|
|
||||||
# TODO: when cleaning calendar module, re-add this in a new mechanism
|
|
||||||
#if alarm.action == 'display':
|
|
||||||
#value = {
|
|
||||||
#'name': alarm.name,
|
|
||||||
#'act_from': alarm.user_id.id,
|
|
||||||
#'act_to': alarm.user_id.id,
|
|
||||||
#'body': alarm.description,
|
|
||||||
#'trigger_date': r_date,
|
|
||||||
#'ref_doc1': ref
|
|
||||||
#}
|
|
||||||
#request_id = request_obj.create(cr, uid, value)
|
|
||||||
#request_ids = [request_id]
|
|
||||||
#for attendee in res_obj.attendee_ids:
|
|
||||||
#if attendee.user_id:
|
|
||||||
#value['act_to'] = attendee.user_id.id
|
|
||||||
#request_id = request_obj.create(cr, uid, value)
|
|
||||||
#request_ids.append(request_id)
|
|
||||||
#request_obj.request_send(cr, uid, request_ids)
|
|
||||||
|
|
||||||
if alarm.action == 'email':
|
if alarm.action == 'email':
|
||||||
sub = '[Openobject Reminder] %s' % (alarm.name)
|
sub = '[OpenERP Reminder] %s' % (alarm.name)
|
||||||
body = """
|
body = """<pre>
|
||||||
Event: %s
|
Event: %s
|
||||||
Event Date: %s
|
Event Date: %s
|
||||||
Description: %s
|
Description: %s
|
||||||
|
@ -888,20 +854,21 @@ From:
|
||||||
|
|
||||||
----
|
----
|
||||||
%s
|
%s
|
||||||
|
</pre>
|
||||||
""" % (alarm.name, alarm.trigger_date, alarm.description, \
|
""" % (alarm.name, alarm.trigger_date, alarm.description, \
|
||||||
alarm.user_id.name, alarm.user_id.signature)
|
alarm.user_id.name, alarm.user_id.signature)
|
||||||
mail_to = [alarm.user_id.email]
|
mail_to = [alarm.user_id.email]
|
||||||
for att in alarm.attendee_ids:
|
for att in alarm.attendee_ids:
|
||||||
mail_to.append(att.user_id.email)
|
mail_to.append(att.user_id.email)
|
||||||
if mail_to:
|
if mail_to:
|
||||||
mail_message.schedule_with_attach(cr, uid,
|
vals = {
|
||||||
tools.config.get('email_from', False),
|
'state': 'outgoing',
|
||||||
mail_to,
|
'subject': sub,
|
||||||
sub,
|
'body_html': body,
|
||||||
body,
|
'email_to': mail_to,
|
||||||
context=context
|
'email_from': tools.config.get('email_from', mail_to),
|
||||||
)
|
}
|
||||||
|
self.pool.get('mail.mail').create(cr, uid, vals, context=context)
|
||||||
if next_trigger_date:
|
if next_trigger_date:
|
||||||
update_vals.update({'trigger_date': next_trigger_date})
|
update_vals.update({'trigger_date': next_trigger_date})
|
||||||
else:
|
else:
|
||||||
|
@ -1616,36 +1583,6 @@ class calendar_todo(osv.osv):
|
||||||
|
|
||||||
calendar_todo()
|
calendar_todo()
|
||||||
|
|
||||||
class ir_attachment(osv.osv):
|
|
||||||
_name = 'ir.attachment'
|
|
||||||
_inherit = 'ir.attachment'
|
|
||||||
|
|
||||||
def search_count(self, cr, user, args, context=None):
|
|
||||||
new_args = []
|
|
||||||
for domain_item in args:
|
|
||||||
if isinstance(domain_item, (list, tuple)) and len(domain_item) == 3 and domain_item[0] == 'res_id':
|
|
||||||
new_args.append((domain_item[0], domain_item[1], base_calendar_id2real_id(domain_item[2])))
|
|
||||||
else:
|
|
||||||
new_args.append(domain_item)
|
|
||||||
return super(ir_attachment, self).search_count(cr, user, new_args, context)
|
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
|
||||||
if context:
|
|
||||||
id = context.get('default_res_id', False)
|
|
||||||
context.update({'default_res_id' : base_calendar_id2real_id(id)})
|
|
||||||
return super(ir_attachment, self).create(cr, uid, vals, context=context)
|
|
||||||
|
|
||||||
def search(self, cr, uid, args, offset=0, limit=None, order=None,
|
|
||||||
context=None, count=False):
|
|
||||||
new_args = []
|
|
||||||
for domain_item in args:
|
|
||||||
if isinstance(domain_item, (list, tuple)) and len(domain_item) == 3 and domain_item[0] == 'res_id':
|
|
||||||
new_args.append((domain_item[0], domain_item[1], base_calendar_id2real_id(domain_item[2])))
|
|
||||||
else:
|
|
||||||
new_args.append(domain_item)
|
|
||||||
return super(ir_attachment, self).search(cr, uid, new_args, offset=offset,
|
|
||||||
limit=limit, order=order, context=context, count=False)
|
|
||||||
ir_attachment()
|
|
||||||
|
|
||||||
class ir_values(osv.osv):
|
class ir_values(osv.osv):
|
||||||
_inherit = 'ir.values'
|
_inherit = 'ir.values'
|
||||||
|
|
|
@ -43,7 +43,7 @@ class crm_meeting(base_state, osv.Model):
|
||||||
_name = 'crm.meeting'
|
_name = 'crm.meeting'
|
||||||
_description = "Meeting"
|
_description = "Meeting"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ["calendar.event", 'ir.needaction_mixin', "mail.thread"]
|
_inherit = ["calendar.event", "mail.thread", 'ir.needaction_mixin']
|
||||||
_columns = {
|
_columns = {
|
||||||
# base_state required fields
|
# base_state required fields
|
||||||
'create_date': fields.datetime('Creation Date', readonly=True),
|
'create_date': fields.datetime('Creation Date', readonly=True),
|
||||||
|
@ -70,13 +70,17 @@ class crm_meeting(base_state, osv.Model):
|
||||||
# OpenChatter
|
# OpenChatter
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
|
|
||||||
|
# shows events of the day for this user
|
||||||
|
def needaction_domain_get(self, cr, uid, domain=[], context={}):
|
||||||
|
return [('date','<=',time.strftime('%Y-%M-%D 23:59:59')), ('date_deadline','>=', time.strftime('%Y-%M-%D 00:00:00')), ('user_id','=',uid)]
|
||||||
|
|
||||||
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
||||||
return 'Meeting'
|
return 'Meeting'
|
||||||
|
|
||||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
def case_open_send_note(self, cr, uid, ids, context=None):
|
||||||
return self.message_append_note(cr, uid, ids, body=_("Meeting has been <b>confirmed</b>."), context=context)
|
return self.message_post(cr, uid, ids, body=_("Meeting <b>confirmed</b>."), context=context)
|
||||||
|
|
||||||
def case_close_send_note(self, cr, uid, ids, context=None):
|
def case_close_send_note(self, cr, uid, ids, context=None):
|
||||||
return self.message_append_note(cr, uid, ids, body=_("Meeting has been <b>done</b>."), context=context)
|
return self.message_post(cr, uid, ids, body=_("Meeting <b>completed</b>."), context=context)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,8 @@
|
||||||
<page string="Invitation Detail">
|
<page string="Invitation Detail">
|
||||||
<button string="Invite People"
|
<button string="Invite People"
|
||||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||||
icon="terp-partner" type="action"
|
type="action"
|
||||||
|
attrs="{'readonly': [('state', '=', 'done')]}"
|
||||||
context="{'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}" colspan="2"/>
|
context="{'model' : 'crm.meeting', 'attendee_field':'attendee_ids'}" colspan="2"/>
|
||||||
<field name="attendee_ids" widget="one2many" mode="tree">
|
<field name="attendee_ids" widget="one2many" mode="tree">
|
||||||
<tree string="Invitation details" editable="top">
|
<tree string="Invitation details" editable="top">
|
||||||
|
@ -182,17 +183,16 @@
|
||||||
<button name="do_tentative"
|
<button name="do_tentative"
|
||||||
states="needs-action,declined,accepted"
|
states="needs-action,declined,accepted"
|
||||||
string="Uncertain" type="object"
|
string="Uncertain" type="object"
|
||||||
icon="terp-crm" />
|
/>
|
||||||
<button name="do_accept" string="Accept"
|
<button name="do_accept" string="Accept"
|
||||||
states="needs-action,tentative,declined"
|
states="needs-action,tentative,declined"
|
||||||
type="object" icon="gtk-apply" />
|
type="object" />
|
||||||
<button name="do_decline" string="Decline"
|
<button name="do_decline" string="Decline"
|
||||||
states="needs-action,tentative,accepted"
|
states="needs-action,tentative,accepted"
|
||||||
type="object" icon="gtk-cancel" />
|
type="object" />
|
||||||
<button
|
<button
|
||||||
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d"
|
||||||
string="Delegate" type="action"
|
string="Delegate" type="action"
|
||||||
icon="gtk-sort-descending"
|
|
||||||
states="needs-action,tentative,declined,accepted"
|
states="needs-action,tentative,declined,accepted"
|
||||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
||||||
</tree>
|
</tree>
|
||||||
|
@ -200,16 +200,16 @@
|
||||||
<header>
|
<header>
|
||||||
<button name="do_tentative" type="object"
|
<button name="do_tentative" type="object"
|
||||||
states="needs-action,declined,accepted"
|
states="needs-action,declined,accepted"
|
||||||
string="Uncertain" icon="terp-crm" />
|
string="Uncertain" />
|
||||||
<button name="do_accept" type="object"
|
<button name="do_accept" type="object"
|
||||||
states="needs-action,tentative,declined"
|
states="needs-action,tentative,declined"
|
||||||
string="Accept" icon="gtk-apply" />
|
string="Accept" />
|
||||||
<button name="do_decline" type="object"
|
<button name="do_decline" type="object"
|
||||||
states="needs-action,tentative,accepted"
|
states="needs-action,tentative,accepted"
|
||||||
string="Decline" icon="gtk-cancel" />
|
string="Decline" />
|
||||||
<button name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d" type="action"
|
<button name="%(base_calendar.action_view_calendar_invite_attendee_wizard)d" type="action"
|
||||||
states="needs-action,tentative,declined,accepted"
|
states="needs-action,tentative,declined,accepted"
|
||||||
string="Delegate" icon="gtk-sort-descending"
|
string="Delegate"
|
||||||
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
context="{'model' : 'calendar.attendee', 'attendee_field' : 'child_ids'}" />
|
||||||
<field name="state" widget="statusbar" statusbar_visible="draft,open,done"/>
|
<field name="state" widget="statusbar" statusbar_visible="draft,open,done"/>
|
||||||
</header>
|
</header>
|
||||||
|
@ -244,13 +244,13 @@
|
||||||
<field name="name">CRM - Meetings Tree</field>
|
<field name="name">CRM - Meetings Tree</field>
|
||||||
<field name="model">crm.meeting</field>
|
<field name="model">crm.meeting</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Meetings" fonts="bold:needaction_pending==True">
|
<tree string="Meetings" fonts="bold:message_unread==True">
|
||||||
<field name="name" string="Subject" />
|
<field name="name" string="Subject" />
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<field name="state" invisible="True"/>
|
<field name="state" invisible="True"/>
|
||||||
<field name="duration" />
|
<field name="duration" />
|
||||||
<field name="needaction_pending" invisible="1"/>
|
<field name="message_unread" invisible="1"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -287,9 +287,9 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Search Meetings">
|
<search string="Search Meetings">
|
||||||
<field name="name" string="Meeting" filter_domain="[('name','ilike',self)]"/>
|
<field name="name" string="Meeting" filter_domain="[('name','ilike',self)]"/>
|
||||||
<filter string="Inbox" help="Unread messages" icon="terp-mail-message-new" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
|
<filter string="Inbox" help="Unread messages" name="message_unread" domain="[('message_unread','=',True)]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="My Meetings" help="My Meetings" icon="terp-personal" domain="[('user_id','=',uid)]"/>
|
<filter string="My Meetings" help="My Meetings" domain="[('user_id','=',uid)]"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="partner_ids"/>
|
<field name="partner_ids"/>
|
||||||
</search>
|
</search>
|
||||||
|
|
|
@ -0,0 +1,271 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-04 13:40+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15901)\n"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,category:0
|
||||||
|
msgid "Category"
|
||||||
|
msgstr "Kategori"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||||
|
msgid "Information"
|
||||||
|
msgstr "Informasjon"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: model:ir.model,name:base_module_record.model_ir_module_record
|
||||||
|
msgid "ir.module.record"
|
||||||
|
msgstr "ir.modul.opptak"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_data,info,end:0
|
||||||
|
#: wizard_button:base_module_record.module_record_data,save_yaml,end:0
|
||||||
|
msgid "End"
|
||||||
|
msgstr "Slutt"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_data,init:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||||
|
msgid "Choose objects to record"
|
||||||
|
msgstr "Velg objekter til opptak"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,author:0
|
||||||
|
msgid "Author"
|
||||||
|
msgstr "Forfatter"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,directory_name:0
|
||||||
|
msgid "Directory Name"
|
||||||
|
msgstr "Navn på katalog"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_data,init,filter_cond:0
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,init,filter_cond:0
|
||||||
|
msgid "Records only"
|
||||||
|
msgstr "Bare opptak"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: selection:base_module_record.module_record_objects,info,data_kind:0
|
||||||
|
msgid "Demo Data"
|
||||||
|
msgstr "Demo data"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,save,module_filename:0
|
||||||
|
msgid "Filename"
|
||||||
|
msgstr "Filnavn"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,version:0
|
||||||
|
msgid "Version"
|
||||||
|
msgstr "Versjon"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_data,info:0
|
||||||
|
#: wizard_view:base_module_record.module_record_data,init:0
|
||||||
|
#: wizard_view:base_module_record.module_record_data,save_yaml:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,init:0
|
||||||
|
msgid "Objects Recording"
|
||||||
|
msgstr "objekter Innspilling"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||||
|
msgid ""
|
||||||
|
"If you think your module could interest other people, we'd like you to "
|
||||||
|
"publish it on http://www.openerp.com, in the 'Modules' section. You can do "
|
||||||
|
"it through the website or using features of the 'base_module_publish' module."
|
||||||
|
msgstr ""
|
||||||
|
"Hvis du tror din modul kan interessere andre mennesker, vil vi gjerne at du "
|
||||||
|
"publisere den på http://www.openerp.com, i 'Moduler-delen. Du kan gjøre det "
|
||||||
|
"gjennom nettstedet eller bruke funksjonene i «base_module_publish»-modulen."
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_data,init,check_date:0
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,init,check_date:0
|
||||||
|
msgid "Record from Date"
|
||||||
|
msgstr "Dato fra opptak"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_data,end:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,end:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,info:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save_yaml:0
|
||||||
|
msgid "Module Recording"
|
||||||
|
msgstr "Modul innspilling"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_objects
|
||||||
|
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_objects
|
||||||
|
msgid "Export Customizations As a Module"
|
||||||
|
msgstr "Eksporter Tilpasninger som en modul"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||||
|
msgid "Thanks in advance for your contribution."
|
||||||
|
msgstr "Takk på forhånd for ditt bidrag."
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: help:base_module_record.module_record_data,init,objects:0
|
||||||
|
#: help:base_module_record.module_record_objects,init,objects:0
|
||||||
|
msgid "List of objects to be recorded"
|
||||||
|
msgstr "Liste over objekter som skal spilles inn"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,description:0
|
||||||
|
msgid "Full Description"
|
||||||
|
msgstr "Full beskrivelse"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,name:0
|
||||||
|
msgid "Module Name"
|
||||||
|
msgstr "Modulnavn"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_data,init,objects:0
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,init,objects:0
|
||||||
|
msgid "Objects"
|
||||||
|
msgstr "Objekter"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,save,module_file:0
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,save_yaml,yaml_file:0
|
||||||
|
msgid "Module .zip File"
|
||||||
|
msgstr "Modul .zip fil"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save:0
|
||||||
|
msgid "Module successfully created!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,save_yaml:0
|
||||||
|
msgid "YAML file successfully created !"
|
||||||
|
msgstr "YAML fil opprettet!"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_data,info:0
|
||||||
|
#: wizard_view:base_module_record.module_record_data,save_yaml:0
|
||||||
|
msgid "Result, paste this to your module's xml"
|
||||||
|
msgstr "Resultatet, lim denne til modulen xml"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: selection:base_module_record.module_record_data,init,filter_cond:0
|
||||||
|
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||||
|
msgid "Created"
|
||||||
|
msgstr "Opprettet"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_data,end:0
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,end:0
|
||||||
|
msgid "Thanks For using Module Recorder"
|
||||||
|
msgstr "Takk for at du brukte Modul opptaker."
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,website:0
|
||||||
|
msgid "Documentation URL"
|
||||||
|
msgstr "Dokumentasjon URL"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: selection:base_module_record.module_record_data,init,filter_cond:0
|
||||||
|
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||||
|
msgid "Modified"
|
||||||
|
msgstr "Modifisert"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_data,init,record:0
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,init,record:0
|
||||||
|
msgid "Record"
|
||||||
|
msgstr "Opptak"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,info,save:0
|
||||||
|
msgid "Continue"
|
||||||
|
msgstr "Fortsett"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_data
|
||||||
|
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_data
|
||||||
|
msgid "Export Customizations As Data File"
|
||||||
|
msgstr "Eksport Tilpasninger Som datafil"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: code:addons/base_module_record/wizard/base_module_save.py:129
|
||||||
|
#, python-format
|
||||||
|
msgid "Error"
|
||||||
|
msgstr "Feil"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: selection:base_module_record.module_record_objects,info,data_kind:0
|
||||||
|
msgid "Normal Data"
|
||||||
|
msgstr "Normal data"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_data,end,end:0
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,end,end:0
|
||||||
|
msgid "OK"
|
||||||
|
msgstr "Ok"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec
|
||||||
|
msgid "Module Creation"
|
||||||
|
msgstr "modul Skapelsen"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,info,data_kind:0
|
||||||
|
msgid "Type of Data"
|
||||||
|
msgstr "Type data"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_view:base_module_record.module_record_objects,info:0
|
||||||
|
msgid "Module Information"
|
||||||
|
msgstr "Modul informasjon"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_data,init,info_yaml:0
|
||||||
|
#: wizard_field:base_module_record.module_record_objects,init,info_yaml:0
|
||||||
|
msgid "YAML"
|
||||||
|
msgstr "YAML"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_field:base_module_record.module_record_data,info,res_text:0
|
||||||
|
#: wizard_field:base_module_record.module_record_data,save_yaml,res_text:0
|
||||||
|
msgid "Result"
|
||||||
|
msgstr "Resultat"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_data,init,end:0
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,info,end:0
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,init,end:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Kanseller"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,save,end:0
|
||||||
|
#: wizard_button:base_module_record.module_record_objects,save_yaml,end:0
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Lukke"
|
||||||
|
|
||||||
|
#. module: base_module_record
|
||||||
|
#: selection:base_module_record.module_record_data,init,filter_cond:0
|
||||||
|
#: selection:base_module_record.module_record_objects,init,filter_cond:0
|
||||||
|
msgid "Created & Modified"
|
||||||
|
msgstr "Laget & Modifisert"
|
||||||
|
|
||||||
|
#~ msgid "Module successfully created !"
|
||||||
|
#~ msgstr "Modulen opprettet!"
|
|
@ -0,0 +1,204 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-04 13:59+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15901)\n"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.model,name:base_report_designer.model_base_report_sxw
|
||||||
|
msgid "base.report.sxw"
|
||||||
|
msgstr "basen.rapport.sxw"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "OpenERP Report Designer Configuration"
|
||||||
|
msgstr "OpenERP Rapport Designer Konfigurasjon"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid ""
|
||||||
|
"This plug-in allows you to create/modify OpenERP Reports into OpenOffice "
|
||||||
|
"Writer."
|
||||||
|
msgstr ""
|
||||||
|
"Denne plug-in tillater deg å lage / endre OpenERP rapporter i OpenOffice "
|
||||||
|
"Writer."
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.file.sxw:0
|
||||||
|
msgid "Upload the modified report"
|
||||||
|
msgstr "Laste opp den endrede rapporten"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.file.sxw:0
|
||||||
|
msgid "The .SXW report"
|
||||||
|
msgstr ".SXW rapport"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.model,name:base_report_designer.model_base_report_designer_installer
|
||||||
|
msgid "base_report_designer.installer"
|
||||||
|
msgstr "basen.rapport.designer.installatør"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "_Close"
|
||||||
|
msgstr "_Lukk"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.rml.save:0
|
||||||
|
msgid "The RML Report"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "Configure"
|
||||||
|
msgstr "Konfigurer"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "title"
|
||||||
|
msgstr "tittel"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base.report.file.sxw,report_id:0
|
||||||
|
#: field:base.report.sxw,report_id:0
|
||||||
|
msgid "Report"
|
||||||
|
msgstr "Rapport"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.model,name:base_report_designer.model_base_report_rml_save
|
||||||
|
msgid "base.report.rml.save"
|
||||||
|
msgstr "Basen.rapport.rml.lagre"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.ui.menu,name:base_report_designer.menu_action_report_designer_wizard
|
||||||
|
msgid "Report Designer"
|
||||||
|
msgstr "Rapportdesigner"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base_report_designer.installer,name:0
|
||||||
|
msgid "File name"
|
||||||
|
msgstr "Filnavn"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.file.sxw:0
|
||||||
|
#: view:base.report.sxw:0
|
||||||
|
msgid "Get a report"
|
||||||
|
msgstr "Få en rapport"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_wizard
|
||||||
|
msgid "OpenERP Report Designer"
|
||||||
|
msgstr "OpenERP Rapport designer"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.sxw:0
|
||||||
|
msgid "Continue"
|
||||||
|
msgstr "Fortsett"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base.report.rml.save,file_rml:0
|
||||||
|
msgid "Save As"
|
||||||
|
msgstr "Lagre som"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: help:base_report_designer.installer,plugin_file:0
|
||||||
|
msgid ""
|
||||||
|
"OpenObject Report Designer plug-in file. Save as this file and install this "
|
||||||
|
"plug-in in OpenOffice."
|
||||||
|
msgstr ""
|
||||||
|
"OpenObject Report Designer plug-in-filen. Lagre som denne filen og "
|
||||||
|
"installere denne plugin-modulen i OpenOffice."
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.rml.save:0
|
||||||
|
msgid "Save RML FIle"
|
||||||
|
msgstr "Lagre RML fil"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base.report.file.sxw,file_sxw:0
|
||||||
|
#: field:base.report.file.sxw,file_sxw_upload:0
|
||||||
|
msgid "Your .SXW file"
|
||||||
|
msgstr "Din .SXW fil"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "Installation and Configuration Steps"
|
||||||
|
msgstr "Installasjon og Konfigurasjon trinn"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base_report_designer.installer,description:0
|
||||||
|
msgid "Description"
|
||||||
|
msgstr "Beskrivelse:"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.file.sxw:0
|
||||||
|
msgid ""
|
||||||
|
"This is the template of your requested report.\n"
|
||||||
|
"Save it as a .SXW file and open it with OpenOffice.\n"
|
||||||
|
"Don't forget to install the OpenERP SA OpenOffice package to modify it.\n"
|
||||||
|
"Once it is modified, re-upload it in OpenERP using this wizard."
|
||||||
|
msgstr ""
|
||||||
|
"Dette er malen for den forespurte rapporten.\n"
|
||||||
|
"Lagre det som en. Sxw fil og åpne den med OpenOffice.\n"
|
||||||
|
"Ikke glem å installere OpenERP SA OpenOffice-pakken til å endre det.\n"
|
||||||
|
"Når den er modifisert, laste opp det i OpenERP bruke denne veiviseren."
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base_report_designer.installer,config_logo:0
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Bilde"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.actions.act_window,name:base_report_designer.action_view_base_report_sxw
|
||||||
|
msgid "Base Report sxw"
|
||||||
|
msgstr "Basen rapport sxw"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.model,name:base_report_designer.model_base_report_file_sxw
|
||||||
|
msgid "base.report.file.sxw"
|
||||||
|
msgstr "basen.rapport.fil.sxw"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: field:base_report_designer.installer,plugin_file:0
|
||||||
|
msgid "OpenObject Report Designer Plug-in"
|
||||||
|
msgstr "OpenObject Rapport Designer Plug-in"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_installer
|
||||||
|
msgid "OpenERP Report Designer Installation"
|
||||||
|
msgstr "OpenERP Rapport Designer Installasjon"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.file.sxw:0
|
||||||
|
#: view:base.report.rml.save:0
|
||||||
|
#: view:base.report.sxw:0
|
||||||
|
#: view:base_report_designer.installer:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Kanseller"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: model:ir.model,name:base_report_designer.model_ir_actions_report_xml
|
||||||
|
msgid "ir.actions.report.xml"
|
||||||
|
msgstr "ir.handlinger.rapport.xml"
|
||||||
|
|
||||||
|
#. module: base_report_designer
|
||||||
|
#: view:base.report.sxw:0
|
||||||
|
msgid "Select your report"
|
||||||
|
msgstr "Velg din rapport"
|
||||||
|
|
||||||
|
#~ msgid "The RML report"
|
||||||
|
#~ msgstr "RML rapport"
|
|
@ -297,55 +297,31 @@ class base_stage(object):
|
||||||
destination=False)
|
destination=False)
|
||||||
|
|
||||||
def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True):
|
def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True):
|
||||||
mail_message = self.pool.get('mail.message')
|
if 'message_post' in self:
|
||||||
for case in self.browse(cr, uid, ids, context=context):
|
for case in self.browse(cr, uid, ids, context=context):
|
||||||
if not destination and not case.email_from:
|
if destination:
|
||||||
return False
|
recipient_id = case.user_id.partner_id.id
|
||||||
if not case.user_id.email:
|
else:
|
||||||
return False
|
if not case.email_from:
|
||||||
if destination and case.section_id.user_id:
|
return False
|
||||||
case_email = case.section_id.user_id.email
|
recipient_id = self.pool.get('res.partner').find_or_create(cr, uid, case.email_from, context=context)
|
||||||
else:
|
|
||||||
case_email = case.user_id.email
|
body = case.description or ""
|
||||||
|
for message in case.message_ids:
|
||||||
src = case_email
|
if message.type == 'email' and message.body:
|
||||||
dest = case.user_id.email or ""
|
body = message.body
|
||||||
body = case.description or ""
|
break
|
||||||
for message in case.message_ids:
|
body = self.format_body(body)
|
||||||
if message.email_from and message.body_text:
|
attach_to_send = {}
|
||||||
body = message.body_text
|
if attach:
|
||||||
break
|
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'])
|
||||||
if not destination:
|
attach_to_send = dict(map(lambda x: (x['datas_fname'], x['datas'].decode('base64')), attach_to_send))
|
||||||
src, dest = dest, case.email_from
|
|
||||||
if body and case.user_id.signature:
|
subject = "Reminder: [%s] %s" % (case.id, case.name)
|
||||||
if body:
|
self.message_post(cr, uid, case.id, body=body,
|
||||||
body += '\n\n%s' % (case.user_id.signature)
|
subject=subject, attachments=attach_to_send,
|
||||||
else:
|
partner_ids=[recipient_id], context=context)
|
||||||
body = '\n\n%s' % (case.user_id.signature)
|
|
||||||
|
|
||||||
body = self.format_body(body)
|
|
||||||
|
|
||||||
attach_to_send = {}
|
|
||||||
|
|
||||||
if attach:
|
|
||||||
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 = dict(map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send))
|
|
||||||
|
|
||||||
# Send an email
|
|
||||||
subject = "Reminder: [%s] %s" % (str(case.id), case.name, )
|
|
||||||
mail_message.schedule_with_attach(cr, uid,
|
|
||||||
src,
|
|
||||||
[dest],
|
|
||||||
subject,
|
|
||||||
body,
|
|
||||||
model=self._name,
|
|
||||||
reply_to=case.section_id.reply_to,
|
|
||||||
res_id=case.id,
|
|
||||||
attachments=attach_to_send,
|
|
||||||
context=context
|
|
||||||
)
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _check(self, cr, uid, ids=False, context=None):
|
def _check(self, cr, uid, ids=False, context=None):
|
||||||
|
@ -360,17 +336,6 @@ class base_stage(object):
|
||||||
def format_mail(self, obj, body):
|
def format_mail(self, obj, body):
|
||||||
return self.pool.get('base.action.rule').format_mail(obj, body)
|
return self.pool.get('base.action.rule').format_mail(obj, body)
|
||||||
|
|
||||||
def message_thread_followers(self, cr, uid, ids, context=None):
|
|
||||||
res = {}
|
|
||||||
for case in self.browse(cr, uid, ids, context=context):
|
|
||||||
l=[]
|
|
||||||
if case.email_cc:
|
|
||||||
l.append(case.email_cc)
|
|
||||||
if case.user_id and case.user_id.email:
|
|
||||||
l.append(case.user_id.email)
|
|
||||||
res[case.id] = l
|
|
||||||
return res
|
|
||||||
|
|
||||||
# ******************************
|
# ******************************
|
||||||
# Notifications
|
# Notifications
|
||||||
# ******************************
|
# ******************************
|
||||||
|
@ -395,31 +360,31 @@ class base_stage(object):
|
||||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
def case_open_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_close_send_note(self, cr, uid, ids, context=None):
|
def case_close_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_cancel_send_note(self, cr, uid, ids, context=None):
|
def case_cancel_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_pending_send_note(self, cr, uid, ids, context=None):
|
def case_pending_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_reset_send_note(self, cr, uid, ids, context=None):
|
def case_reset_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
|
def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
|
||||||
|
@ -428,5 +393,5 @@ class base_stage(object):
|
||||||
msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
|
msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
|
||||||
else:
|
else:
|
||||||
msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -179,13 +179,13 @@ class base_state(object):
|
||||||
# Notifications
|
# Notifications
|
||||||
# ******************************
|
# ******************************
|
||||||
|
|
||||||
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
def case_open_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
|
def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
|
||||||
|
@ -194,29 +194,29 @@ class base_state(object):
|
||||||
msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
|
msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
|
||||||
else:
|
else:
|
||||||
msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_close_send_note(self, cr, uid, ids, context=None):
|
def case_close_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_cancel_send_note(self, cr, uid, ids, context=None):
|
def case_cancel_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_pending_send_note(self, cr, uid, ids, context=None):
|
def case_pending_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_reset_send_note(self, cr, uid, ids, context=None):
|
def case_reset_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=msg, context=context)
|
self.message_post(cr, uid, [id], body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -1,70 +1,54 @@
|
||||||
# Translation of OpenERP Server.
|
# Spanish (Mexico) translation for openobject-addons
|
||||||
# This file contains the translation of the following modules:
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
# * base_vat
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-12-25 18:58+0000\n"
|
"PO-Revision-Date: 2012-09-07 00:31+0000\n"
|
||||||
"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"<jesteve@zikzakmedia.com>\n"
|
"Language-Team: Spanish (Mexico) <es_MX@li.org>\n"
|
||||||
"Language-Team: \n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2011-09-05 05:10+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:57+0000\n"
|
||||||
"X-Generator: Launchpad (build 13830)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: code:addons/base_vat/base_vat.py:87
|
#: code:addons/base_vat/base_vat.py:141
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The Vat does not seems to be correct. You should have entered something like "
|
"This VAT number does not seem to be valid.\n"
|
||||||
"this %s"
|
"Note: the expected format is %s"
|
||||||
msgstr ""
|
msgstr "El RFC no es válido. El formato esperado es %s"
|
||||||
"El CIF/NIF parece que no sea correcto. Debería haber introducido algo como "
|
|
||||||
"esto %s"
|
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: model:ir.module.module,description:base_vat.module_meta_information
|
#: sql_constraint:res.company:0
|
||||||
msgid ""
|
msgid "The company name must be unique !"
|
||||||
"\n"
|
|
||||||
" Enable the VAT Number for the partner. Check the validity of that VAT "
|
|
||||||
"Number.\n"
|
|
||||||
"\n"
|
|
||||||
" This module follows the methods stated at http://sima-pc.com/nif.php "
|
|
||||||
"for\n"
|
|
||||||
" checking the validity of VAT Number assigned to partners in European "
|
|
||||||
"countries.\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
|
||||||
" Permite la validación del CIF/NIF de las empresas. Comprueba si el "
|
|
||||||
"CIF/NIF es un número válido.\n"
|
|
||||||
"\n"
|
|
||||||
" Este módulo usa los métodos especificados en http://sima-pc.com/nif.php "
|
|
||||||
"para\n"
|
|
||||||
" la validación del CIF/NIF asignado a las empresas de los países "
|
|
||||||
"europeos.\n"
|
|
||||||
" "
|
|
||||||
|
|
||||||
#. module: base_vat
|
|
||||||
#: model:ir.module.module,shortdesc:base_vat.module_meta_information
|
|
||||||
msgid "Base VAT - To check VAT number validity"
|
|
||||||
msgstr "Base CIF/NIF - Para comprobar la validez de los CIF/NIF"
|
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: constraint:res.partner:0
|
#: constraint:res.partner:0
|
||||||
msgid "Error ! You can not create recursive associated members."
|
msgid "Error ! You cannot create recursive associated members."
|
||||||
msgstr "¡Error! No puede crear miembros asociados recursivos."
|
msgstr ""
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: code:addons/base_vat/base_vat.py:88
|
#: field:res.company,vat_check_vies:0
|
||||||
#, python-format
|
msgid "VIES VAT Check"
|
||||||
msgid "The VAT is invalid, It should begin with the country code"
|
msgstr ""
|
||||||
msgstr "El CIF/NIF no es válido, debería empezar con el código del país"
|
|
||||||
|
#. module: base_vat
|
||||||
|
#: model:ir.model,name:base_vat.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: base_vat
|
||||||
|
#: constraint:res.company:0
|
||||||
|
msgid "Error! You can not create recursive companies."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: help:res.partner,vat_subjected:0
|
#: help:res.partner,vat_subjected:0
|
||||||
|
@ -72,27 +56,20 @@ msgid ""
|
||||||
"Check this box if the partner is subjected to the VAT. It will be used for "
|
"Check this box if the partner is subjected to the VAT. It will be used for "
|
||||||
"the VAT legal statement."
|
"the VAT legal statement."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Marque esta opción si la empresa está sujeta al IVA. Será utilizado para la "
|
|
||||||
"declaración legal del IVA."
|
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: model:ir.model,name:base_vat.model_res_partner
|
#: model:ir.model,name:base_vat.model_res_partner
|
||||||
msgid "Partner"
|
msgid "Partner"
|
||||||
msgstr "Empresa"
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: base_vat
|
||||||
|
#: help:res.company,vat_check_vies:0
|
||||||
|
msgid ""
|
||||||
|
"If checked, Partners VAT numbers will be fully validated against EU's VIES "
|
||||||
|
"service rather than via a simple format validation (checksum)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#. module: base_vat
|
#. module: base_vat
|
||||||
#: field:res.partner,vat_subjected:0
|
#: field:res.partner,vat_subjected:0
|
||||||
msgid "VAT Legal Statement"
|
msgid "VAT Legal Statement"
|
||||||
msgstr "Sujeto a IVA"
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "Invalid XML for View Architecture!"
|
|
||||||
#~ msgstr "¡XML inválido para la definición de la vista!"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "Enable the VAT Number for the partner. Check the validity of that VAT Number."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "Activa el IVA (Impuesto Valor Añadido) para la empresa. Comprueba la validez "
|
|
||||||
#~ "del CIF/NIF."
|
|
||||||
|
|
||||||
#~ msgid "VAT"
|
|
||||||
#~ msgstr "IVA"
|
|
||||||
|
|
|
@ -28,9 +28,7 @@
|
||||||
Lets the user create a custom dashboard.
|
Lets the user create a custom dashboard.
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
This module also creates the Administration Dashboard.
|
Allows users to create custom dashboard.
|
||||||
|
|
||||||
The user can also publish notes.
|
|
||||||
""",
|
""",
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'depends': ['base'],
|
'depends': ['base'],
|
||||||
|
|
|
@ -0,0 +1,348 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-06 14:01+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid " Year "
|
||||||
|
msgstr " År "
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.model,name:board.model_board_menu_create
|
||||||
|
msgid "Menu Create"
|
||||||
|
msgstr "Meny laget"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.menu.create:0
|
||||||
|
msgid "Menu Information"
|
||||||
|
msgstr "Meny informasjon"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.users:0
|
||||||
|
msgid "Latest Connections"
|
||||||
|
msgstr "Siste Tilkoblinger"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Log created in last month"
|
||||||
|
msgstr "Logg opprettet i forrige måned"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
#: model:ir.actions.act_window,name:board.open_board_administration_form
|
||||||
|
msgid "Administration Dashboard"
|
||||||
|
msgstr "Administrasjon kontrollpanel"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Group By..."
|
||||||
|
msgstr "Grupper etter ..."
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Log created in current year"
|
||||||
|
msgstr "Logg opprettet i gjeldende år."
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.model,name:board.model_board_board
|
||||||
|
msgid "Board"
|
||||||
|
msgstr "Brett"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.menu.create,menu_name:0
|
||||||
|
msgid "Menu Name"
|
||||||
|
msgstr "Menynavn"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.board_weekly_res_log_report_action
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Weekly Global Activity"
|
||||||
|
msgstr "Ukentlig global aktivitet"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,name:0
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Tittel"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:res.log.report,nbr:0
|
||||||
|
msgid "# of Entries"
|
||||||
|
msgstr "# av oppføringer"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
#: field:res.log.report,month:0
|
||||||
|
msgid "Month"
|
||||||
|
msgstr "Måned"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Log created in current month"
|
||||||
|
msgstr "Logg opprettet i gjeldende måned."
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.board_monthly_res_log_report_action
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Monthly Activity per Document"
|
||||||
|
msgstr "Månedlig aktivitet per dokument"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
msgid "Configuration Overview"
|
||||||
|
msgstr "Konfigurasjonsoversikt"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.action_view_board_list_form
|
||||||
|
#: model:ir.ui.menu,name:board.menu_view_board_form
|
||||||
|
msgid "Dashboard Definition"
|
||||||
|
msgstr "Kontrollpanel Definisjon"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "March"
|
||||||
|
msgstr "Mars"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "August"
|
||||||
|
msgstr "August"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.action_user_connection_tree
|
||||||
|
msgid "User Connections"
|
||||||
|
msgstr "Brukertilkoblinger"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:res.log.report,creation_date:0
|
||||||
|
msgid "Creation Date"
|
||||||
|
msgstr "Opprettelsesdato"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Log Analysis"
|
||||||
|
msgstr "Logg analyse"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:res.log.report,res_model:0
|
||||||
|
msgid "Object"
|
||||||
|
msgstr "Objekt"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "June"
|
||||||
|
msgstr "Juni"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board,line_ids:0
|
||||||
|
msgid "Action Views"
|
||||||
|
msgstr "Handling Visninger"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.model,name:board.model_res_log_report
|
||||||
|
msgid "Log Report"
|
||||||
|
msgstr "Logg rapport"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: code:addons/board/wizard/board_menu_create.py:46
|
||||||
|
#, python-format
|
||||||
|
msgid "Please Insert Dashboard View(s) !"
|
||||||
|
msgstr "Vennligst Sett Kontrollpanel Vinsning (er)!"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "July"
|
||||||
|
msgstr "juli"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
#: field:res.log.report,day:0
|
||||||
|
msgid "Day"
|
||||||
|
msgstr "Dag"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.menu.create:0
|
||||||
|
msgid "Create Menu For Dashboard"
|
||||||
|
msgstr "Opprett meny for Kontrollpanel."
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "February"
|
||||||
|
msgstr "Februar"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "October"
|
||||||
|
msgstr "Oktober"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.model,name:board.model_board_board_line
|
||||||
|
msgid "Board Line"
|
||||||
|
msgstr "bord Linje"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.menu.create,menu_parent_id:0
|
||||||
|
msgid "Parent Menu"
|
||||||
|
msgstr "Overordnet meny"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid " Month-1 "
|
||||||
|
msgstr " Måned-1 "
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "January"
|
||||||
|
msgstr "Januar"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
msgid "Users"
|
||||||
|
msgstr "Brukere"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "November"
|
||||||
|
msgstr "November"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: help:board.board.line,sequence:0
|
||||||
|
msgid ""
|
||||||
|
"Gives the sequence order when displaying a list of "
|
||||||
|
"board lines."
|
||||||
|
msgstr "Gir rekkefølgen av når du viser en liste over bord linjer."
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "April"
|
||||||
|
msgstr "April"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
#: field:board.board,name:0
|
||||||
|
#: field:board.board.line,board_id:0
|
||||||
|
#: model:ir.ui.menu,name:board.menu_dasboard
|
||||||
|
msgid "Dashboard"
|
||||||
|
msgstr "Kontrollpanel"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: code:addons/board/wizard/board_menu_create.py:45
|
||||||
|
#, python-format
|
||||||
|
msgid "User Error!"
|
||||||
|
msgstr "Bruker feil!"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,action_id:0
|
||||||
|
msgid "Action"
|
||||||
|
msgstr "Handling"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,position:0
|
||||||
|
msgid "Position"
|
||||||
|
msgstr "Posisjon"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid "Model"
|
||||||
|
msgstr "Modell"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.board_homepage_action
|
||||||
|
msgid "Home Page"
|
||||||
|
msgstr "Hjemmeside"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.action_latest_activities_tree
|
||||||
|
msgid "Latest Activities"
|
||||||
|
msgstr "Senest aktiveter"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:board.board.line,position:0
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Venstre"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board,view_id:0
|
||||||
|
msgid "Board View"
|
||||||
|
msgstr "Bord visning"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:board.board.line,position:0
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Høyre"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,width:0
|
||||||
|
msgid "Width"
|
||||||
|
msgstr "Bredde"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
msgid " Month "
|
||||||
|
msgstr " Måned "
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,sequence:0
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr "Sekvens"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "September"
|
||||||
|
msgstr "September"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "December"
|
||||||
|
msgstr "Desember"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
#: view:board.menu.create:0
|
||||||
|
msgid "Create Menu"
|
||||||
|
msgstr "Opprett meny"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: field:board.board.line,height:0
|
||||||
|
msgid "Height"
|
||||||
|
msgstr "Høyde"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: model:ir.actions.act_window,name:board.action_board_menu_create
|
||||||
|
msgid "Create Board Menu"
|
||||||
|
msgstr "Opprett bord meny"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: selection:res.log.report,month:0
|
||||||
|
msgid "May"
|
||||||
|
msgstr "Mai"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:res.log.report:0
|
||||||
|
#: field:res.log.report,name:0
|
||||||
|
msgid "Year"
|
||||||
|
msgstr "År"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.menu.create:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Kanseller"
|
||||||
|
|
||||||
|
#. module: board
|
||||||
|
#: view:board.board:0
|
||||||
|
msgid "Dashboard View"
|
||||||
|
msgstr "Kontrollpanel visning"
|
|
@ -0,0 +1,3 @@
|
||||||
|
dashboard.css: dashboard.sass
|
||||||
|
sass --trace -t expanded dashboard.sass dashboard.css
|
||||||
|
|
|
@ -5,6 +5,11 @@
|
||||||
.openerp .oe_dashboard {
|
.openerp .oe_dashboard {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_dashboard .oe_dashboard_layout_selector ul, .openerp .oe_dashboard .oe_dashboard_layout_selector li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
.openerp .oe_dashboard .oe_action {
|
.openerp .oe_dashboard .oe_action {
|
||||||
margin: 0 8px 8px 0;
|
margin: 0 8px 8px 0;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
|
|
|
@ -14,6 +14,11 @@
|
||||||
margin: 0 4px 6px 0
|
margin: 0 4px 6px 0
|
||||||
.oe_dashboard
|
.oe_dashboard
|
||||||
width: 100%
|
width: 100%
|
||||||
|
.oe_dashboard_layout_selector
|
||||||
|
ul, li
|
||||||
|
margin: 0
|
||||||
|
padding: 0
|
||||||
|
list-style-type: none
|
||||||
.oe_action
|
.oe_action
|
||||||
margin: 0 8px 8px 0
|
margin: 0 8px 8px 0
|
||||||
background-color: white
|
background-color: white
|
||||||
|
|
|
@ -2,22 +2,6 @@
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
<!-- CRM dashboard -->
|
<!-- CRM dashboard -->
|
||||||
<record model="ir.actions.act_window" id="act_my_oppor">
|
|
||||||
<field name="name">My Opportunities</field>
|
|
||||||
<field name="res_model">crm.lead</field>
|
|
||||||
<field name="view_mode">tree</field>
|
|
||||||
<field name="domain">[('user_id','=',uid),('type', '=', 'opportunity'),('state','not in',('cancel','done'))]</field>
|
|
||||||
<field name="view_id" ref="crm.crm_case_tree_view_oppor"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="act_crm_tag_tree_view_leads_all">
|
|
||||||
<field name="name">New Leads</field>
|
|
||||||
<field name="res_model">crm.lead</field>
|
|
||||||
<field name="view_mode">tree</field>
|
|
||||||
<field name="domain">[('user_id','=',uid),('state','=','draft'),('type','=','lead')]</field>
|
|
||||||
<field name="view_id" ref="crm.crm_case_tree_view_leads"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="view_crm_opportunity_stage_graph">
|
<record model="ir.ui.view" id="view_crm_opportunity_stage_graph">
|
||||||
<field name="name">Opportunities By Stage - Graph</field>
|
<field name="name">Opportunities By Stage - Graph</field>
|
||||||
<field name="model">crm.lead.report</field>
|
<field name="model">crm.lead.report</field>
|
||||||
|
@ -70,11 +54,9 @@
|
||||||
<form string="Statistics Dashboard" version="7.0">
|
<form string="Statistics Dashboard" version="7.0">
|
||||||
<board style="1-1">
|
<board style="1-1">
|
||||||
<column>
|
<column>
|
||||||
<action string="New Leads" name="%(act_crm_tag_tree_view_leads_all)d"/>
|
<action string="Planned Revenue by Stage and User" name="%(act_oppor_stage_user)d"/>
|
||||||
<action string="My Opportunities" name="%(act_my_oppor)d"/>
|
|
||||||
</column>
|
</column>
|
||||||
<column>
|
<column>
|
||||||
<action string="Planned Revenue by Stage and User" name="%(act_oppor_stage_user)d"/>
|
|
||||||
<action string="Opportunities by Stage" name="%(act_opportunity_stage)d"/>
|
<action string="Opportunities by Stage" name="%(act_opportunity_stage)d"/>
|
||||||
</column>
|
</column>
|
||||||
</board>
|
</board>
|
||||||
|
|
|
@ -46,21 +46,11 @@ class base_action_rule(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from', False), context=None):
|
def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from', False), context=None):
|
||||||
mail_message = self.pool.get('mail.message')
|
mail_id = super(base_action_rule, self).email_send(cr, uid, obj, emails, body, emailfrom=emailfrom, context=context)
|
||||||
body = self.format_mail(obj, body)
|
if mail_id and hasattr(obj, 'section_id') and obj.section_id and obj.section_id.alias_id:
|
||||||
if not emailfrom:
|
|
||||||
if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.email:
|
|
||||||
emailfrom = obj.user_id.email
|
|
||||||
|
|
||||||
name = '[%d] %s' % (obj.id, tools.ustr(obj.name))
|
|
||||||
emailfrom = tools.ustr(emailfrom)
|
|
||||||
if hasattr(obj, 'section_id') and obj.section_id and obj.section_id.alias_id:
|
|
||||||
reply_to = obj.section_id.alias_id.name_get()[0][1]
|
reply_to = obj.section_id.alias_id.name_get()[0][1]
|
||||||
else:
|
self.pool.get('mail.mail').write(cr, uid, [mail_id], {'reply_to': reply_to}, context=context)
|
||||||
reply_to = emailfrom
|
return mail_id
|
||||||
if not emailfrom:
|
|
||||||
raise osv.except_osv(_('Error!'), _("There is no email for your company address."))
|
|
||||||
return mail_message.schedule_with_attach(cr, uid, emailfrom, emails, name, body, model=obj._name, reply_to=reply_to, res_id=obj.id)
|
|
||||||
|
|
||||||
def do_check(self, cr, uid, action, obj, context=None):
|
def do_check(self, cr, uid, action, obj, context=None):
|
||||||
ok = super(base_action_rule, self).do_check(cr, uid, action, obj, context=context)
|
ok = super(base_action_rule, self).do_check(cr, uid, action, obj, context=context)
|
||||||
|
@ -105,8 +95,8 @@ class base_action_rule(osv.osv):
|
||||||
write['email_cc'] = obj.act_email_cc
|
write['email_cc'] = obj.act_email_cc
|
||||||
|
|
||||||
# Put state change by rule in communication history
|
# Put state change by rule in communication history
|
||||||
if hasattr(obj, 'state') and hasattr(obj, 'message_append') and action.act_state:
|
if hasattr(obj, 'state') and hasattr(obj, 'message_post') and action.act_state:
|
||||||
model_obj.message_append(cr, uid, [obj], _(action.act_state))
|
model_obj.message_post(cr, uid, [obj], _(action.act_state), context=context)
|
||||||
|
|
||||||
model_obj.write(cr, uid, [obj.id], write, context)
|
model_obj.write(cr, uid, [obj.id], write, context)
|
||||||
super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context)
|
super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context)
|
||||||
|
|
|
@ -55,21 +55,20 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- notify all employees of module installation -->
|
<!-- notify all employees of module installation -->
|
||||||
<function model="mail.group" name="message_append_note">
|
<record model="mail.message" id="module_install_notification">
|
||||||
<!-- ids, subject, body, parent_id=False, type='notification', content_subtype='html' -->
|
<field name="model">mail.group</field>
|
||||||
<value eval="[ref('mail.group_all_employees')]"/>
|
<field name="res_id" ref="mail.group_all_employees"/>
|
||||||
<value>Module CRM has been installed</value>
|
<field name="type">notification</field>
|
||||||
<value>From the top menu Sales, you can: trace leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.
|
<field name="subject">CRM application installed!</field>
|
||||||
|
<field name="body">From the top Sales menu you can track leads and opportunities, get accurate forecast on your sales pipeline, plan meetings and phonecalls, get realtime statistics and efficiently organize the communication with your prospects.
|
||||||
|
To manage quotations and sale orders, install the "Sales Management" application.</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
To manage quotations and sale orders, install the module "Sales Management".</value>
|
|
||||||
</function>
|
|
||||||
|
|
||||||
<record model="mail.alias" id="default_sales_alias">
|
<record model="mail.alias" id="default_sales_alias">
|
||||||
<field name="alias_name">sales</field>
|
<field name="alias_name">sales</field>
|
||||||
<field name="alias_model_id" ref="model_crm_lead"/>
|
<field name="alias_model_id" ref="model_crm_lead"/>
|
||||||
<field name="alias_user_id" ref="base.user_root"/>
|
<field name="alias_user_id" ref="base.user_root"/>
|
||||||
<field name="alias_defaults">{'type':'lead'}</field>
|
<field name="alias_defaults">{'type':'lead'}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -19,11 +19,9 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import binascii
|
|
||||||
from base_status.base_stage import base_stage
|
from base_status.base_stage import base_stage
|
||||||
import crm
|
import crm
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from mail.mail_message import to_email
|
|
||||||
from osv import fields, osv
|
from osv import fields, osv
|
||||||
import time
|
import time
|
||||||
import tools
|
import tools
|
||||||
|
@ -40,8 +38,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
_name = "crm.lead"
|
_name = "crm.lead"
|
||||||
_description = "Lead/Opportunity"
|
_description = "Lead/Opportunity"
|
||||||
_order = "priority,date_action,id desc"
|
_order = "priority,date_action,id desc"
|
||||||
_inherit = ['ir.needaction_mixin', 'mail.thread']
|
_inherit = ['mail.thread','ir.needaction_mixin']
|
||||||
_mail_compose_message = True
|
|
||||||
|
|
||||||
def _get_default_section_id(self, cr, uid, context=None):
|
def _get_default_section_id(self, cr, uid, context=None):
|
||||||
""" Gives default section by checking if present in the context """
|
""" Gives default section by checking if present in the context """
|
||||||
|
@ -90,8 +87,8 @@ class crm_lead(base_stage, osv.osv):
|
||||||
search_domain = []
|
search_domain = []
|
||||||
section_id = self._resolve_section_id_from_context(cr, uid, context=context)
|
section_id = self._resolve_section_id_from_context(cr, uid, context=context)
|
||||||
if section_id:
|
if section_id:
|
||||||
search_domain += ['|', '&', ('section_ids', '=', section_id), ('fold', '=', False)]
|
search_domain += ['|', ('section_ids', '=', section_id)]
|
||||||
search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)]
|
search_domain += ['|', ('id', 'in', ids), ('case_default', '=', True)]
|
||||||
# retrieve type from the context (if set: choose 'type' or 'both')
|
# retrieve type from the context (if set: choose 'type' or 'both')
|
||||||
type = self._resolve_type_from_context(cr, uid, context=context)
|
type = self._resolve_type_from_context(cr, uid, context=context)
|
||||||
if type:
|
if type:
|
||||||
|
@ -101,7 +98,12 @@ class crm_lead(base_stage, osv.osv):
|
||||||
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
|
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
|
||||||
# restore order of the search
|
# restore order of the search
|
||||||
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
|
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
|
||||||
return result
|
|
||||||
|
fold = {}
|
||||||
|
for stage in stage_obj.browse(cr, access_rights_uid, stage_ids, context=context):
|
||||||
|
fold[stage.id] = stage.fold or False
|
||||||
|
|
||||||
|
return result, fold
|
||||||
|
|
||||||
_group_by_full = {
|
_group_by_full = {
|
||||||
'stage_id': _read_group_stage_ids
|
'stage_id': _read_group_stage_ids
|
||||||
|
@ -175,16 +177,6 @@ class crm_lead(base_stage, osv.osv):
|
||||||
else:
|
else:
|
||||||
return [('id', '=', '0')]
|
return [('id', '=', '0')]
|
||||||
|
|
||||||
def _get_email_subject(self, cr, uid, ids, fields, args, context=None):
|
|
||||||
res = {}
|
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
|
||||||
res[obj.id] = ''
|
|
||||||
for msg in obj.message_ids:
|
|
||||||
if msg.email_from:
|
|
||||||
res[obj.id] = msg.subject
|
|
||||||
break
|
|
||||||
return res
|
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null',
|
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null',
|
||||||
select=True, help="Optional linked partner, usually after conversion of the lead"),
|
select=True, help="Optional linked partner, usually after conversion of the lead"),
|
||||||
|
@ -213,7 +205,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
|
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
|
||||||
'date_closed': fields.datetime('Closed', readonly=True),
|
'date_closed': fields.datetime('Closed', readonly=True),
|
||||||
'stage_id': fields.many2one('crm.case.stage', 'Stage',
|
'stage_id': fields.many2one('crm.case.stage', 'Stage',
|
||||||
domain="['&', '|', ('section_ids', '=', section_id), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
domain="['&', ('fold', '=', False), '&', '|', ('section_ids', '=', section_id), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
||||||
'user_id': fields.many2one('res.users', 'Salesperson'),
|
'user_id': fields.many2one('res.users', 'Salesperson'),
|
||||||
'referred': fields.char('Referred By', size=64),
|
'referred': fields.char('Referred By', size=64),
|
||||||
'date_open': fields.datetime('Opened', readonly=True),
|
'date_open': fields.datetime('Opened', readonly=True),
|
||||||
|
@ -228,7 +220,6 @@ class crm_lead(base_stage, osv.osv):
|
||||||
When the case is over, the state is set to \'Done\'.\
|
When the case is over, the state is set to \'Done\'.\
|
||||||
If the case needs to be reviewed then the state is \
|
If the case needs to be reviewed then the state is \
|
||||||
set to \'Pending\'.'),
|
set to \'Pending\'.'),
|
||||||
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
|
|
||||||
|
|
||||||
# Only used for type opportunity
|
# Only used for type opportunity
|
||||||
'probability': fields.float('Success Rate (%)',group_operator="avg"),
|
'probability': fields.float('Success Rate (%)',group_operator="avg"),
|
||||||
|
@ -449,7 +440,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
oldest_id = opportunity_ids[0]
|
oldest_id = opportunity_ids[0]
|
||||||
return self.browse(cr, uid, oldest_id, context=context)
|
return self.browse(cr, uid, oldest_id, context=context)
|
||||||
|
|
||||||
def _mail_body_text(self, cr, uid, lead, fields, title=False, context=None):
|
def _mail_body(self, cr, uid, lead, fields, title=False, context=None):
|
||||||
body = []
|
body = []
|
||||||
if title:
|
if title:
|
||||||
body.append("%s\n" % (title))
|
body.append("%s\n" % (title))
|
||||||
|
@ -486,11 +477,11 @@ class crm_lead(base_stage, osv.osv):
|
||||||
for opportunity in opportunities:
|
for opportunity in opportunities:
|
||||||
subject.append(opportunity.name)
|
subject.append(opportunity.name)
|
||||||
title = "%s : %s" % (merge_message, opportunity.name)
|
title = "%s : %s" % (merge_message, opportunity.name)
|
||||||
details.append(self._mail_body_text(cr, uid, opportunity, fields, title=title, context=context))
|
details.append(self._mail_body(cr, uid, opportunity, fields, title=title, context=context))
|
||||||
|
|
||||||
subject = subject[0] + ", ".join(subject[1:])
|
subject = subject[0] + ", ".join(subject[1:])
|
||||||
details = "\n\n".join(details)
|
details = "\n\n".join(details)
|
||||||
return self.message_append_note(cr, uid, [opportunity_id], subject=subject, body=details)
|
return self.message_post(cr, uid, [opportunity_id], body=details, subject=subject, context=context)
|
||||||
|
|
||||||
def _merge_opportunity_history(self, cr, uid, opportunity_id, opportunities, context=None):
|
def _merge_opportunity_history(self, cr, uid, opportunity_id, opportunities, context=None):
|
||||||
message = self.pool.get('mail.message')
|
message = self.pool.get('mail.message')
|
||||||
|
@ -546,7 +537,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
oldest = self._merge_find_oldest(cr, uid, ids, context=context)
|
oldest = self._merge_find_oldest(cr, uid, ids, context=context)
|
||||||
if ctx_opportunities :
|
if ctx_opportunities :
|
||||||
first_opportunity = ctx_opportunities[0]
|
first_opportunity = ctx_opportunities[0]
|
||||||
tail_opportunities = opportunities_list
|
tail_opportunities = opportunities_list + ctx_opportunities[1:]
|
||||||
else:
|
else:
|
||||||
first_opportunity = opportunities_list[0]
|
first_opportunity = opportunities_list[0]
|
||||||
tail_opportunities = opportunities_list[1:]
|
tail_opportunities = opportunities_list[1:]
|
||||||
|
@ -606,19 +597,13 @@ class crm_lead(base_stage, osv.osv):
|
||||||
for lead in self.browse(cr, uid, ids, context=context):
|
for lead in self.browse(cr, uid, ids, context=context):
|
||||||
if lead.state in ('done', 'cancel'):
|
if lead.state in ('done', 'cancel'):
|
||||||
continue
|
continue
|
||||||
if user_ids or section_id:
|
|
||||||
self.allocate_salesman(cr, uid, [lead.id], user_ids, section_id, context=context)
|
|
||||||
|
|
||||||
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
||||||
self.write(cr, uid, [lead.id], vals, context=context)
|
self.write(cr, uid, [lead.id], vals, context=context)
|
||||||
|
|
||||||
self.convert_opportunity_send_note(cr, uid, lead, context=context)
|
self.convert_opportunity_send_note(cr, uid, lead, context=context)
|
||||||
#TOCHECK: why need to change partner details in all messages of lead ?
|
|
||||||
if lead.partner_id:
|
if user_ids or section_id:
|
||||||
msg_ids = [ x.id for x in lead.message_ids]
|
self.allocate_salesman(cr, uid, ids, user_ids, section_id, context=context)
|
||||||
mail_message.write(cr, uid, msg_ids, {
|
|
||||||
'partner_id': lead.partner_id.id
|
|
||||||
}, context=context)
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _lead_create_contact(self, cr, uid, lead, name, is_company, parent_id=False, context=None):
|
def _lead_create_contact(self, cr, uid, lead, name, is_company, parent_id=False, context=None):
|
||||||
|
@ -630,7 +615,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
'parent_id': parent_id,
|
'parent_id': parent_id,
|
||||||
'phone': lead.phone,
|
'phone': lead.phone,
|
||||||
'mobile': lead.mobile,
|
'mobile': lead.mobile,
|
||||||
'email': lead.email_from and to_email(lead.email_from)[0],
|
'email': lead.email_from and tools.email_split(lead.email_from)[0],
|
||||||
'fax': lead.fax,
|
'fax': lead.fax,
|
||||||
'title': lead.title and lead.title.id or False,
|
'title': lead.title and lead.title.id or False,
|
||||||
'function': lead.function,
|
'function': lead.function,
|
||||||
|
@ -650,7 +635,7 @@ class crm_lead(base_stage, osv.osv):
|
||||||
partner_id = False
|
partner_id = False
|
||||||
if lead.partner_name and lead.contact_name:
|
if lead.partner_name and lead.contact_name:
|
||||||
partner_id = self._lead_create_contact(cr, uid, lead, lead.partner_name, True, context=context)
|
partner_id = self._lead_create_contact(cr, uid, lead, lead.partner_name, True, context=context)
|
||||||
self._lead_create_contact(cr, uid, lead, lead.contact_name, False, partner_id, context=context)
|
partner_id = self._lead_create_contact(cr, uid, lead, lead.contact_name, False, partner_id, context=context)
|
||||||
elif lead.partner_name and not lead.contact_name:
|
elif lead.partner_name and not lead.contact_name:
|
||||||
partner_id = self._lead_create_contact(cr, uid, lead, lead.partner_name, True, context=context)
|
partner_id = self._lead_create_contact(cr, uid, lead, lead.partner_name, True, context=context)
|
||||||
elif not lead.partner_name and lead.contact_name:
|
elif not lead.partner_name and lead.contact_name:
|
||||||
|
@ -678,32 +663,16 @@ class crm_lead(base_stage, osv.osv):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
partner_ids = {}
|
partner_ids = {}
|
||||||
|
force_partner_id = partner_id
|
||||||
for lead in self.browse(cr, uid, ids, context=context):
|
for lead in self.browse(cr, uid, ids, context=context):
|
||||||
if action == 'create':
|
if action == 'create':
|
||||||
if not partner_id:
|
if not partner_id:
|
||||||
partner_id = self._create_lead_partner(cr, uid, lead, context)
|
partner_id = self._create_lead_partner(cr, uid, lead, context)
|
||||||
|
partner_id = force_partner_id or self._create_lead_partner(cr, uid, lead, context=context)
|
||||||
self._lead_set_partner(cr, uid, lead, partner_id, context=context)
|
self._lead_set_partner(cr, uid, lead, partner_id, context=context)
|
||||||
partner_ids[lead.id] = partner_id
|
partner_ids[lead.id] = partner_id
|
||||||
return partner_ids
|
return partner_ids
|
||||||
|
|
||||||
def _send_mail_to_salesman(self, cr, uid, lead, context=None):
|
|
||||||
"""
|
|
||||||
Send mail to salesman with updated Lead details.
|
|
||||||
@ lead: browse record of 'crm.lead' object.
|
|
||||||
"""
|
|
||||||
#TOFIX: mail template should be used here instead of fix subject, body text.
|
|
||||||
message = self.pool.get('mail.message')
|
|
||||||
email_to = lead.user_id and lead.user_id.email
|
|
||||||
if not email_to:
|
|
||||||
return False
|
|
||||||
|
|
||||||
email_from = lead.section_id and lead.section_id.user_id and lead.section_id.user_id.email or email_to
|
|
||||||
partner = lead.partner_id and lead.partner_id.name or lead.partner_name
|
|
||||||
subject = "lead %s converted into opportunity" % lead.name
|
|
||||||
body = "Info \n Id : %s \n Subject: %s \n Partner: %s \n Description : %s " % (lead.id, lead.name, lead.partner_id.name, lead.description)
|
|
||||||
return message.schedule_with_attach(cr, uid, email_from, [email_to], subject, body)
|
|
||||||
|
|
||||||
|
|
||||||
def allocate_salesman(self, cr, uid, ids, user_ids, team_id=False, context=None):
|
def allocate_salesman(self, cr, uid, ids, user_ids, team_id=False, context=None):
|
||||||
index = 0
|
index = 0
|
||||||
for lead_id in ids:
|
for lead_id in ids:
|
||||||
|
@ -821,14 +790,13 @@ class crm_lead(base_stage, osv.osv):
|
||||||
if custom_values is None: custom_values = {}
|
if custom_values is None: custom_values = {}
|
||||||
custom_values.update({
|
custom_values.update({
|
||||||
'name': msg.get('subject') or _("No Subject"),
|
'name': msg.get('subject') or _("No Subject"),
|
||||||
'description': msg.get('body_text'),
|
'description': msg.get('body'),
|
||||||
'email_from': msg.get('from'),
|
'email_from': msg.get('from'),
|
||||||
'email_cc': msg.get('cc'),
|
'email_cc': msg.get('cc'),
|
||||||
'user_id': False,
|
'user_id': False,
|
||||||
})
|
})
|
||||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||||
custom_values['priority'] = msg.get('priority')
|
custom_values['priority'] = msg.get('priority')
|
||||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from', False), context=context))
|
|
||||||
return super(crm_lead, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
return super(crm_lead, self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||||
|
|
||||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||||
|
@ -841,18 +809,18 @@ class crm_lead(base_stage, osv.osv):
|
||||||
if update_vals is None: update_vals = {}
|
if update_vals is None: update_vals = {}
|
||||||
|
|
||||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||||
vals['priority'] = msg.get('priority')
|
update_vals['priority'] = msg.get('priority')
|
||||||
maps = {
|
maps = {
|
||||||
'cost':'planned_cost',
|
'cost':'planned_cost',
|
||||||
'revenue': 'planned_revenue',
|
'revenue': 'planned_revenue',
|
||||||
'probability':'probability',
|
'probability':'probability',
|
||||||
}
|
}
|
||||||
for line in msg.get('body_text', '').split('\n'):
|
for line in msg.get('body', '').split('\n'):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
res = tools.misc.command_re.match(line)
|
res = tools.misc.command_re.match(line)
|
||||||
if res and maps.get(res.group(1).lower()):
|
if res and maps.get(res.group(1).lower()):
|
||||||
key = maps.get(res.group(1).lower())
|
key = maps.get(res.group(1).lower())
|
||||||
vals[key] = res.group(2).lower()
|
update_vals[key] = res.group(2).lower()
|
||||||
|
|
||||||
return super(crm_lead, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
return super(crm_lead, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
||||||
|
|
||||||
|
@ -860,15 +828,10 @@ class crm_lead(base_stage, osv.osv):
|
||||||
# OpenChatter methods and notifications
|
# OpenChatter methods and notifications
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
|
|
||||||
def message_get_monitored_follower_fields(self, cr, uid, ids, context=None):
|
|
||||||
""" Add 'user_id' to the monitored fields """
|
|
||||||
res = super(crm_lead, self).message_get_monitored_follower_fields(cr, uid, ids, context=context)
|
|
||||||
return res + ['user_id']
|
|
||||||
|
|
||||||
def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
|
def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
|
||||||
""" Override of the (void) default notification method. """
|
""" Override of the (void) default notification method. """
|
||||||
stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
|
stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
|
||||||
return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context)
|
return self.message_post(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context)
|
||||||
|
|
||||||
def case_get_note_msg_prefix(self, cr, uid, lead, context=None):
|
def case_get_note_msg_prefix(self, cr, uid, lead, context=None):
|
||||||
if isinstance(lead, (int, long)):
|
if isinstance(lead, (int, long)):
|
||||||
|
@ -878,33 +841,33 @@ class crm_lead(base_stage, osv.osv):
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
for id in ids:
|
for id in ids:
|
||||||
message = _("%s has been <b>created</b>.")% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
message = _("%s has been <b>created</b>.")% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
||||||
self.message_append_note(cr, uid, [id], body=message, context=context)
|
self.message_post(cr, uid, [id], body=message, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_mark_lost_send_note(self, cr, uid, ids, context=None):
|
def case_mark_lost_send_note(self, cr, uid, ids, context=None):
|
||||||
message = _("Opportunity has been <b>lost</b>.")
|
message = _("Opportunity has been <b>lost</b>.")
|
||||||
return self.message_append_note(cr, uid, ids, body=message, context=context)
|
return self.message_post(cr, uid, ids, body=message, context=context)
|
||||||
|
|
||||||
def case_mark_won_send_note(self, cr, uid, ids, context=None):
|
def case_mark_won_send_note(self, cr, uid, ids, context=None):
|
||||||
message = _("Opportunity has been <b>won</b>.")
|
message = _("Opportunity has been <b>won</b>.")
|
||||||
return self.message_append_note(cr, uid, ids, body=message, context=context)
|
return self.message_post(cr, uid, ids, body=message, context=context)
|
||||||
|
|
||||||
def schedule_phonecall_send_note(self, cr, uid, ids, phonecall_id, action, context=None):
|
def schedule_phonecall_send_note(self, cr, uid, ids, phonecall_id, action, context=None):
|
||||||
phonecall = self.pool.get('crm.phonecall').browse(cr, uid, [phonecall_id], context=context)[0]
|
phonecall = self.pool.get('crm.phonecall').browse(cr, uid, [phonecall_id], context=context)[0]
|
||||||
if action == 'log': prefix = 'Logged'
|
if action == 'log': prefix = 'Logged'
|
||||||
else: prefix = 'Scheduled'
|
else: prefix = 'Scheduled'
|
||||||
message = _("<b>%s a call</b> for the <em>%s</em>.") % (prefix, phonecall.date)
|
message = _("<b>%s a call</b> for the <em>%s</em>.") % (prefix, phonecall.date)
|
||||||
return self.message_append_note(cr, uid, ids, body=message, context=context)
|
return self.message_post(cr, uid, ids, body=message, context=context)
|
||||||
|
|
||||||
def _lead_set_partner_send_note(self, cr, uid, ids, context=None):
|
def _lead_set_partner_send_note(self, cr, uid, ids, context=None):
|
||||||
for lead in self.browse(cr, uid, ids, context=context):
|
for lead in self.browse(cr, uid, ids, context=context):
|
||||||
message = _("%s <b>partner</b> is now set to <em>%s</em>." % (self.case_get_note_msg_prefix(cr, uid, lead, context=context), lead.partner_id.name))
|
message = _("%s <b>partner</b> is now set to <em>%s</em>." % (self.case_get_note_msg_prefix(cr, uid, lead, context=context), lead.partner_id.name))
|
||||||
lead.message_append_note(body=message)
|
lead.message_post(body=message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def convert_opportunity_send_note(self, cr, uid, lead, context=None):
|
def convert_opportunity_send_note(self, cr, uid, lead, context=None):
|
||||||
message = _("Lead has been <b>converted to an opportunity</b>.")
|
message = _("Lead has been <b>converted to an opportunity</b>.")
|
||||||
lead.message_append_note(body=message)
|
lead.message_post(body=message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
crm_lead()
|
crm_lead()
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
<record model="crm.case.stage" id="stage_lead7">
|
<record model="crm.case.stage" id="stage_lead7">
|
||||||
<field name="name">Dead</field>
|
<field name="name">Dead</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field eval="1" name="case_default"/>
|
||||||
<field eval="True" name="fold"/>
|
<field eval="False" name="fold"/>
|
||||||
<field name="state">cancel</field>
|
<field name="state">cancel</field>
|
||||||
<field eval="'0'" name="probability"/>
|
<field eval="'0'" name="probability"/>
|
||||||
<field eval="'16'" name="sequence"/>
|
<field eval="'16'" name="sequence"/>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<field name="channel_id" ref="crm_case_channel_email"/>
|
<field name="channel_id" ref="crm_case_channel_email"/>
|
||||||
<field name="priority">1</field>
|
<field name="priority">1</field>
|
||||||
<field name="section_id" ref="crm_case_section_4"/>
|
<field name="section_id" ref="crm_case_section_4"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field name="description">Hello,
|
<field name="description">Hello,
|
||||||
I am Jason from Le Club SARL,
|
I am Jason from Le Club SARL,
|
||||||
|
@ -47,7 +47,7 @@ Can you send details,</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_website"/>
|
<field name="channel_id" ref="crm_case_channel_website"/>
|
||||||
<field name="priority">4</field>
|
<field name="priority">4</field>
|
||||||
<field name="section_id" ref="crm_case_section_3"/>
|
<field name="section_id" ref="crm_case_section_3"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -108,7 +108,7 @@ Can you send details,</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_website"/>
|
<field name="channel_id" ref="crm_case_channel_website"/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field name="description">Hi, Can you send a quotation for 20 Computers with speakers?
|
<field name="description">Hi, Can you send a quotation for 20 Computers with speakers?
|
||||||
Regards,
|
Regards,
|
||||||
|
@ -135,7 +135,7 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref=""/>
|
<field name="channel_id" ref=""/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_4"/>
|
<field name="section_id" ref="crm_case_section_4"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -194,7 +194,7 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_phone"/>
|
<field name="channel_id" ref="crm_case_channel_phone"/>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -297,7 +297,7 @@ Andrew</field>
|
||||||
<field eval="time.strftime('%Y-%m-12')" name="date_action"/>
|
<field eval="time.strftime('%Y-%m-12')" name="date_action"/>
|
||||||
<field name="title_action">Meeting for pricing information.</field>
|
<field name="title_action">Meeting for pricing information.</field>
|
||||||
<field name="section_id" ref="crm_case_section_3"/>
|
<field name="section_id" ref="crm_case_section_3"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -342,7 +342,7 @@ Andrew</field>
|
||||||
<field eval="time.strftime('%Y-%m-10')" name="date_action"/>
|
<field eval="time.strftime('%Y-%m-10')" name="date_action"/>
|
||||||
<field name="title_action">Call to ask system requirement</field>
|
<field name="title_action">Call to ask system requirement</field>
|
||||||
<field name="section_id" ref="crm_case_section_3"/>
|
<field name="section_id" ref="crm_case_section_3"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead4"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -411,7 +411,7 @@ Andrew</field>
|
||||||
<field eval="time.strftime('%Y-%m-4')" name="date_action"/>
|
<field eval="time.strftime('%Y-%m-4')" name="date_action"/>
|
||||||
<field name="title_action">Call to define real needs about training</field>
|
<field name="title_action">Call to define real needs about training</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -434,7 +434,7 @@ Andrew</field>
|
||||||
<field eval="time.strftime('%Y-%m-5')" name="date_action"/>
|
<field eval="time.strftime('%Y-%m-5')" name="date_action"/>
|
||||||
<field name="title_action">Ask for the good receprion of the proposition</field>
|
<field name="title_action">Ask for the good receprion of the proposition</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead4"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -466,7 +466,7 @@ Andrew</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_phone"/>
|
<field name="channel_id" ref="crm_case_channel_phone"/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_4"/>
|
<field name="section_id" ref="crm_case_section_4"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead8"/>
|
<field name="stage_id" ref="crm.stage_lead8"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -484,7 +484,7 @@ Andrew</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_email"/>
|
<field name="channel_id" ref="crm_case_channel_email"/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_4"/>
|
<field name="section_id" ref="crm_case_section_4"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead8"/>
|
<field name="stage_id" ref="crm.stage_lead8"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -519,7 +519,7 @@ Andrew</field>
|
||||||
<field name="priority">5</field>
|
<field name="priority">5</field>
|
||||||
<field eval="time.strftime('%Y-%m-6')" name="date_deadline"/>
|
<field eval="time.strftime('%Y-%m-6')" name="date_deadline"/>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead6"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -542,7 +542,7 @@ Andrew</field>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="title_action">Conf call with technical service</field>
|
<field name="title_action">Conf call with technical service</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_admin"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead4"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
@ -552,86 +552,67 @@ Andrew</field>
|
||||||
<field name="subject">Plan to buy a Laptop</field>
|
<field name="subject">Plan to buy a Laptop</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_15"/>
|
<field name="res_id" ref="crm_case_15"/>
|
||||||
<field name="content_subtype">html</field>
|
<field name="body"><![CDATA[Email0 inquiry]]><div><font size="2">Hello,</font></div><div><font size="2"><br></font></div><div><font size="2">I am interested in your company's product and I plan to buy a new laptop having latest technologies and affordable price.</font></div><div><font size="2">Can you please send me product catalogue?</font></div></field>
|
||||||
<field name="body_html"><![CDATA[Email0 inquiry]]><div><font size="2">Hello,</font></div><div><font size="2"><br></font></div><div><font size="2">I am interested in your company's product and I plan to buy a new laptop having latest technologies and affordable price.</font></div><div><font size="2">Can you please send me product catalogue?</font></div></field>
|
|
||||||
<field name="type">email</field>
|
<field name="type">email</field>
|
||||||
<field name="state">received</field>
|
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
|
||||||
</record>
|
</record>
|
||||||
<record id="message_note0" model="mail.message">
|
<record id="message_note0" model="mail.message">
|
||||||
<field name="subject">Re: Plan to buy a Laptop</field>
|
<field name="subject">Re: Plan to buy a Laptop</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_15"/>
|
<field name="res_id" ref="crm_case_15"/>
|
||||||
<field name="parent_id" ref="message_email0"/>
|
<field name="type">comment</field>
|
||||||
<field name="content_subtype">plain</field>
|
<field name="body">Dear Customer,
|
||||||
<field name="body_text">Dear Customer,
|
|
||||||
Thanks for showing interest in our products.
|
Thanks for showing interest in our products.
|
||||||
We have attached the catalogue,
|
We have attached the catalogue,
|
||||||
We would like to know your interests, Let us know if we can call you for more details.
|
We would like to know your interests, Let us know if we can call you for more details.
|
||||||
|
|
||||||
Thanks</field>
|
Thanks</field>
|
||||||
<field name="type">email</field>
|
<field name="parent_id" ref="message_email0"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="author_id" ref="base.partner_root"/>
|
||||||
<field name="state">sent</field>
|
|
||||||
</record>
|
</record>
|
||||||
<record id="message_note0_comment0" model="mail.message">
|
<record id="message_note0_comment0" model="mail.message">
|
||||||
<field name="subject">Re: Plan to buy a Laptop</field>
|
<field name="subject">Re: Plan to buy a Laptop</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_15"/>
|
<field name="res_id" ref="crm_case_15"/>
|
||||||
<field name="content_subtype">html</field>
|
<field name="type">comment</field>
|
||||||
<field name="body_html"><div>Thanks for the information,</div><div>I will visit the store soon.</div></field>
|
<field name="body"><div>Thanks for the information,</div><div>I will visit the store soon.</div></field>
|
||||||
<field name="parent_id" ref="message_note0"/>
|
<field name="parent_id" ref="message_note0"/>
|
||||||
<field name="type">email</field>
|
<field name="author_id" ref="base.partner_demo"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
|
||||||
<field name="state">received</field>
|
|
||||||
</record>
|
</record>
|
||||||
<record id="message_note0_comment1" model="mail.message">
|
<record id="message_note0_comment1" model="mail.message">
|
||||||
<field name="subject">Re: Plan to buy a Laptop</field>
|
<field name="subject">Re: Plan to buy a Laptop</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_15"/>
|
<field name="res_id" ref="crm_case_15"/>
|
||||||
<field name="content_subtype">html</field>
|
<field name="type">comment</field>
|
||||||
<field name="body_html"><font color="#1f1f1f">Can you tell me if the store is open at 9:00 PM?</b></font></field>
|
<field name="body"><font color="#1f1f1f">Can you tell me if the store is open at 9:00 PM?</b></font></field>
|
||||||
<field name="parent_id" ref="message_note0"/>
|
<field name="parent_id" ref="message_note0"/>
|
||||||
<field name="type">email</field>
|
<field name="author_id" ref="base.partner_demo"/>
|
||||||
<field name="state">received</field>
|
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
|
||||||
</record>
|
</record>
|
||||||
<record id="message_email1" model="mail.message">
|
<record id="message_email1" model="mail.message">
|
||||||
<field name="subject">Re: Plan to buy a Laptop</field>
|
<field name="subject">Re: Plan to buy a Laptop</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_15"/>
|
<field name="res_id" ref="crm_case_15"/>
|
||||||
<field name="content_subtype">plain</field>
|
<field name="body">Yes, its open till 10:00 PM, you are welcome!</field>
|
||||||
<field name="body_text">Yes, its open till 10:00 PM, you are welcome!</field>
|
|
||||||
<field name="type">email</field>
|
<field name="type">email</field>
|
||||||
<field name="state">sent</field>
|
<field name="author_id" ref="base.partner_root"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="message_email_12" model="mail.message">
|
<record id="message_email_12" model="mail.message">
|
||||||
<field name="subject">Inquiry</field>
|
<field name="subject">Inquiry</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_1"/>
|
<field name="res_id" ref="crm_case_1"/>
|
||||||
<field name="content_subtype">plain</field>
|
<field name="body">Hello,
|
||||||
<field name="body_text">Hello,
|
|
||||||
I am Jason from Le Club SARL,
|
I am Jason from Le Club SARL,
|
||||||
I am intertested to attend Training organized in your company,
|
I am intertested to attend Training organized in your company,
|
||||||
Can you send details,</field>
|
Can you send details,</field>
|
||||||
<field name="type">email</field>
|
<field name="type">email</field>
|
||||||
<field name="state">received</field>
|
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="message_email_13" model="mail.message">
|
<record id="message_email_13" model="mail.message">
|
||||||
<field name="subject">Need Details</field>
|
<field name="subject">Need Details</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="res_id" ref="crm_case_2"/>
|
<field name="res_id" ref="crm_case_2"/>
|
||||||
<field name="content_subtype">plain</field>
|
<field name="body">Want to know features and benifits to use the new software.</field>
|
||||||
<field name="body_text">Want to know features and benifits to use the new software.</field>
|
|
||||||
<field name="type">comment</field>
|
<field name="type">comment</field>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<!-- Call Function to set the opportunities as Unread -->
|
<!-- Call Function to set the opportunities as Unread -->
|
||||||
<function model="crm.lead" name="message_mark_as_unread"
|
<function model="crm.lead" name="message_mark_as_unread"
|
||||||
eval="[ ref('crm_case_15'), ref('crm_case_16'),
|
eval="[ ref('crm_case_15'), ref('crm_case_16'),
|
||||||
|
|
|
@ -246,7 +246,7 @@
|
||||||
<field name="name">Leads</field>
|
<field name="name">Leads</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Leads" fonts="bold:needaction_pending==True" colors="grey:state in ('cancel', 'done')">
|
<tree string="Leads" fonts="bold:message_unread==True" colors="grey:state in ('cancel', 'done')">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date" groups="base.group_no_one"/>
|
<field name="create_date" groups="base.group_no_one"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
|
@ -257,12 +257,11 @@
|
||||||
<field name="stage_id"/>
|
<field name="stage_id"/>
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||||
<field name="state" groups="base.group_no_one"/>
|
<field name="state" invisible="1"/>
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
<field name="referred" invisible="1"/>
|
<field name="referred" invisible="1"/>
|
||||||
<field name="channel_id" invisible="1"/>
|
<field name="channel_id" invisible="1"/>
|
||||||
<field name="subjects" invisible="1"/>
|
<field name="message_unread" invisible="1"/>
|
||||||
<field name="needaction_pending" invisible="1"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -296,23 +295,15 @@
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="partner_address_email"/>
|
<field name="partner_address_email"/>
|
||||||
<field name="message_summary"/>
|
<field name="message_summary"/>
|
||||||
<field name="needaction_pending"/>
|
<field name="message_unread"/>
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="lead_details">
|
|
||||||
<ul class="oe_kanban_tooltip">
|
|
||||||
<li t-if="record.phone.raw_value"><b>Phone:</b> <field name="phone"/></li>
|
|
||||||
<li><b>Probability:</b> <field name="probability"/>%%</li>
|
|
||||||
<li><b>Creation date:</b> <field name="create_date"/></li>
|
|
||||||
<li t-if="record.date_deadline.raw_value"><b>Date Deadline:</b> <field name="date_deadline"/></li>
|
|
||||||
</ul>
|
|
||||||
</t>
|
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
||||||
<div class="oe_dropdown_toggle oe_dropdown_kanban">
|
<div class="oe_dropdown_toggle oe_dropdown_kanban">
|
||||||
<span class="oe_e">í</span>
|
<span class="oe_e">í</span>
|
||||||
<ul class="oe_dropdown_menu">
|
<ul class="oe_dropdown_menu">
|
||||||
<li><a type="edit" >Edit...</a></li>
|
<t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit...</a></li></t>
|
||||||
<li><a type="delete">Delete</a></li>
|
<t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
|
||||||
<li><a name="%(mail.action_email_compose_message_wizard)d" type="action">Send Email</a></li>
|
<li><a name="%(mail.action_email_compose_message_wizard)d" type="action">Send Email</a></li>
|
||||||
<li><a name="%(opportunity2phonecall_act)d" type="action">Log Call</a></li>
|
<li><a name="%(opportunity2phonecall_act)d" type="action">Log Call</a></li>
|
||||||
<li><a name="action_makeMeeting" type="object">Schedule Meeting</a></li>
|
<li><a name="action_makeMeeting" type="object">Schedule Meeting</a></li>
|
||||||
|
@ -342,7 +333,6 @@
|
||||||
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
|
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="oe_kanban_footer_left">
|
<div class="oe_kanban_footer_left">
|
||||||
<t t-if="record.needaction_pending.raw_value"><span class="oe_kanban_mail_new">New</span></t>
|
|
||||||
<t t-raw="record.message_summary.raw_value"/>
|
<t t-raw="record.message_summary.raw_value"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -362,10 +352,8 @@
|
||||||
<search string="Search Leads">
|
<search string="Search Leads">
|
||||||
<field name="name" string="Lead / Customer" filter_domain="['|','|',('partner_name','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/>
|
<field name="name" string="Lead / Customer" filter_domain="['|','|',('partner_name','ilike',self),('email_from','ilike',self),('name','ilike',self)]"/>
|
||||||
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike',self)]" />
|
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike',self)]" />
|
||||||
<!-- subjects is not set as store=True so, it is placed outside filter_domain-->
|
|
||||||
<field name="subjects"/>
|
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
|
<filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="message_unread" domain="[('message_unread','=',True)]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter icon="terp-check" string="New" name="new" help="New Leads" domain="[('state','=','draft')]"/>
|
<filter icon="terp-check" string="New" name="new" help="New Leads" domain="[('state','=','draft')]"/>
|
||||||
<filter icon="terp-camera_test" string="Open" name="open" domain="[('state','=','open')]"/>
|
<filter icon="terp-camera_test" string="Open" name="open" domain="[('state','=','open')]"/>
|
||||||
|
@ -386,7 +374,6 @@
|
||||||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
||||||
<separator orientation="vertical"/>
|
<separator orientation="vertical"/>
|
||||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
|
||||||
<filter string="Creation" help="Create date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
<filter string="Creation" help="Create date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Display">
|
<group string="Display">
|
||||||
|
@ -515,7 +502,7 @@
|
||||||
<field name="day_open" groups="base.group_no_one"/>
|
<field name="day_open" groups="base.group_no_one"/>
|
||||||
<field name="day_close" groups="base.group_no_one"/>
|
<field name="day_close" groups="base.group_no_one"/>
|
||||||
<field name="referred"/>
|
<field name="referred"/>
|
||||||
<field name="state" groups="base.group_no_one"/>
|
<field name="state" invisible="1"/>
|
||||||
<field name="type" invisible="1"/>
|
<field name="type" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="References">
|
<group string="References">
|
||||||
|
@ -545,7 +532,7 @@
|
||||||
<field name="name">Opportunities Tree</field>
|
<field name="name">Opportunities Tree</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Opportunities" fonts="bold:needaction_pending==True" colors="gray:state in ('cancel', 'done');red:date_deadline and (date_deadline < current_date)">
|
<tree string="Opportunities" fonts="bold:message_unread==True" colors="gray:state in ('cancel', 'done');red:date_deadline and (date_deadline < current_date)">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date" groups="base.group_no_one"/>
|
<field name="create_date" groups="base.group_no_one"/>
|
||||||
<field name="name" string="Opportunity"/>
|
<field name="name" string="Opportunity"/>
|
||||||
|
@ -555,7 +542,6 @@
|
||||||
<field name="title_action" />
|
<field name="title_action" />
|
||||||
<field name="channel_id" invisible="1"/>
|
<field name="channel_id" invisible="1"/>
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
<field name="subjects" invisible="1"/>
|
|
||||||
<field name="stage_id"/>
|
<field name="stage_id"/>
|
||||||
<field name="planned_revenue" sum="Expected Revenues"/>
|
<field name="planned_revenue" sum="Expected Revenues"/>
|
||||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||||
|
@ -563,7 +549,7 @@
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
<field name="state" groups="base.group_no_one"/>
|
<field name="state" groups="base.group_no_one"/>
|
||||||
<field name="needaction_pending" invisible="1"/>
|
<field name="message_unread" invisible="1"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -578,7 +564,7 @@
|
||||||
<field name="name" string="Opportunity / Customer"
|
<field name="name" string="Opportunity / Customer"
|
||||||
filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
|
filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
|
||||||
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike', self)]" />
|
<field name="categ_ids" string="Category" filter_domain="[('categ_ids','ilike', self)]" />
|
||||||
<filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
|
<filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="message_unread" domain="[('message_unread','=',True)]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter icon="terp-check" string="New" help="New Opportunities" name="new" domain="[('state','=','draft')]"/>
|
<filter icon="terp-check" string="New" help="New Opportunities" name="new" domain="[('state','=','draft')]"/>
|
||||||
<filter icon="terp-camera_test" string="Open" help="Open Opportunities" name="open" domain="[('state','=','open')]"/>
|
<filter icon="terp-camera_test" string="Open" help="Open Opportunities" name="open" domain="[('state','=','open')]"/>
|
||||||
|
@ -600,7 +586,6 @@
|
||||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'type_id'}"/>
|
<filter string="Campaign" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'type_id'}"/>
|
||||||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
|
||||||
<filter string="Creation" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
<filter string="Creation" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" groups="base.group_no_one"/>
|
||||||
<filter string="Exp.Closing" icon="terp-go-month" help="Expected Closing" domain="[]" context="{'group_by':'date_deadline'}" />
|
<filter string="Exp.Closing" icon="terp-go-month" help="Expected Closing" domain="[]" context="{'group_by':'date_deadline'}" />
|
||||||
</group>
|
</group>
|
||||||
|
|
|
@ -44,7 +44,7 @@ class crm_meeting(osv.Model):
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
# update context: if come from phonecall, default state values can make the message_append_note crash
|
# update context: if come from phonecall, default state values can make the message_post crash
|
||||||
context.pop('default_state', False)
|
context.pop('default_state', False)
|
||||||
for meeting in self.browse(cr, uid, ids, context=context):
|
for meeting in self.browse(cr, uid, ids, context=context):
|
||||||
# in the message, transpose meeting.date to the timezone of the current user
|
# in the message, transpose meeting.date to the timezone of the current user
|
||||||
|
@ -53,14 +53,14 @@ class crm_meeting(osv.Model):
|
||||||
if meeting.opportunity_id: # meeting can be create from phonecalls or opportunities, therefore checking for the parent
|
if meeting.opportunity_id: # meeting can be create from phonecalls or opportunities, therefore checking for the parent
|
||||||
lead = meeting.opportunity_id
|
lead = meeting.opportunity_id
|
||||||
message = _("Meeting linked to the opportunity <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (lead.name, meeting_date_tz)
|
message = _("Meeting linked to the opportunity <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (lead.name, meeting_date_tz)
|
||||||
lead.message_append_note(_('System Notification'), message)
|
lead.message_post(body=message)
|
||||||
elif meeting.phonecall_id:
|
elif meeting.phonecall_id:
|
||||||
phonecall = meeting.phonecall_id
|
phonecall = meeting.phonecall_id
|
||||||
message = _("Meeting linked to the phonecall <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (phonecall.name, meeting_date_tz)
|
message = _("Meeting linked to the phonecall <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (phonecall.name, meeting_date_tz)
|
||||||
phonecall.message_append_note(body=message)
|
phonecall.message_post(body=message)
|
||||||
else:
|
else:
|
||||||
message = _("A meeting has been <b>scheduled</b> on <em>%s</em>.") % (meeting_date_tz)
|
message = _("A meeting has been <b>scheduled</b> on <em>%s</em>.") % (meeting_date_tz)
|
||||||
meeting.message_append_note(body=message)
|
meeting.message_post(body=message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class calendar_attendee(osv.osv):
|
class calendar_attendee(osv.osv):
|
||||||
|
|
|
@ -32,7 +32,7 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
_name = "crm.phonecall"
|
_name = "crm.phonecall"
|
||||||
_description = "Phonecall"
|
_description = "Phonecall"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ['ir.needaction_mixin', 'mail.thread']
|
_inherit = ['mail.thread']
|
||||||
_columns = {
|
_columns = {
|
||||||
# base_state required fields
|
# base_state required fields
|
||||||
'date_action_last': fields.datetime('Last Action', readonly=1),
|
'date_action_last': fields.datetime('Last Action', readonly=1),
|
||||||
|
@ -177,11 +177,11 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
partner_ids = {}
|
partner_ids = {}
|
||||||
|
force_partner_id = partner_id
|
||||||
for call in self.browse(cr, uid, ids, context=context):
|
for call in self.browse(cr, uid, ids, context=context):
|
||||||
if action == 'create':
|
if action == 'create':
|
||||||
if not partner_id:
|
partner_id = force_partner_id or self._call_create_partner(cr, uid, call, context=context)
|
||||||
partner_id = self._call_create_partner(cr, uid, call, context=context)
|
self._call_create_partner_address(cr, uid, call, partner_id, context=context)
|
||||||
self._call_create_partner_address(cr, uid, call, partner_id, context=context)
|
|
||||||
self._call_set_partner(cr, uid, [call.id], partner_id, context=context)
|
self._call_set_partner(cr, uid, [call.id], partner_id, context=context)
|
||||||
partner_ids[call.id] = partner_id
|
partner_ids[call.id] = partner_id
|
||||||
return partner_ids
|
return partner_ids
|
||||||
|
@ -266,7 +266,7 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
|
|
||||||
def case_reset_send_note(self, cr, uid, ids, context=None):
|
def case_reset_send_note(self, cr, uid, ids, context=None):
|
||||||
message = _('Phonecall has been <b>reset and set as open</b>.')
|
message = _('Phonecall has been <b>reset and set as open</b>.')
|
||||||
return self.message_append_note(cr, uid, ids, body=message, context=context)
|
return self.message_post(cr, uid, ids, body=message, context=context)
|
||||||
|
|
||||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
def case_open_send_note(self, cr, uid, ids, context=None):
|
||||||
lead_obj = self.pool.get('crm.lead')
|
lead_obj = self.pool.get('crm.lead')
|
||||||
|
@ -280,11 +280,11 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
message = _("Phonecall linked to the opportunity <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (lead.name, phonecall_date_str)
|
message = _("Phonecall linked to the opportunity <em>%s</em> has been <b>created</b> and <b>scheduled</b> on <em>%s</em>.") % (lead.name, phonecall_date_str)
|
||||||
else:
|
else:
|
||||||
message = _("Phonecall has been <b>created and opened</b>.")
|
message = _("Phonecall has been <b>created and opened</b>.")
|
||||||
phonecall.message_append_note(body=message)
|
phonecall.message_post(body=message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _call_set_partner_send_note(self, cr, uid, ids, context=None):
|
def _call_set_partner_send_note(self, cr, uid, ids, context=None):
|
||||||
return self.message_append_note(cr, uid, ids, body=_("Partner has been <b>created</b>."), context=context)
|
return self.message_post(cr, uid, ids, body=_("Partner has been <b>created</b>."), context=context)
|
||||||
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -66,8 +66,7 @@
|
||||||
<field name="name">CRM - Phone Calls Tree</field>
|
<field name="name">CRM - Phone Calls Tree</field>
|
||||||
<field name="model">crm.phonecall</field>
|
<field name="model">crm.phonecall</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree fonts="bold:needaction_pending==True" colors="gray:state in ('cancel','done');blue:state in ('pending',)" string="Phone Calls">
|
<tree colors="gray:state in ('cancel','done');blue:state in ('pending',)" string="Phone Calls">
|
||||||
<field name="needaction_pending" invisible="1"/>
|
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
|
@ -76,7 +75,6 @@
|
||||||
<field name="categ_id" invisible="1"/>
|
<field name="categ_id" invisible="1"/>
|
||||||
<field name="create_date" invisible="1"/>
|
<field name="create_date" invisible="1"/>
|
||||||
<field name="opportunity_id" invisible="1"/>
|
<field name="opportunity_id" invisible="1"/>
|
||||||
<field name="needaction_pending" invisible="1"/>
|
|
||||||
<button string="Convert to Opportunity"
|
<button string="Convert to Opportunity"
|
||||||
name="%(phonecall2opportunity_act)d"
|
name="%(phonecall2opportunity_act)d"
|
||||||
states="open,pending"
|
states="open,pending"
|
||||||
|
@ -166,7 +164,7 @@
|
||||||
<field name="name">CRM - Logged Phone Calls Tree</field>
|
<field name="name">CRM - Logged Phone Calls Tree</field>
|
||||||
<field name="model">crm.phonecall</field>
|
<field name="model">crm.phonecall</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Phone Calls" fonts="bold:needaction_pending==True" editable="top">
|
<tree string="Phone Calls" editable="top">
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="partner_id"
|
<field name="partner_id"
|
||||||
|
@ -180,7 +178,6 @@
|
||||||
<field name="state" invisible="1"/>
|
<field name="state" invisible="1"/>
|
||||||
<field name="create_date" invisible="1"/>
|
<field name="create_date" invisible="1"/>
|
||||||
<field name="opportunity_id" invisible="1"/>
|
<field name="opportunity_id" invisible="1"/>
|
||||||
<field name="needaction_pending" invisible="1"/>
|
|
||||||
<button string="Schedule Other Call"
|
<button string="Schedule Other Call"
|
||||||
icon="terp-call-start"
|
icon="terp-call-start"
|
||||||
name="%(phonecall_to_phonecall_act)d"
|
name="%(phonecall_to_phonecall_act)d"
|
||||||
|
@ -219,7 +216,6 @@
|
||||||
<search string="Search Phonecalls">
|
<search string="Search Phonecalls">
|
||||||
<field name="name" string="Phonecalls"/>
|
<field name="name" string="Phonecalls"/>
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<filter icon="terp-mail-message-new" string="Inbox" help="Unread messages" name="needaction_pending" domain="[('needaction_pending','=',True)]"/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter icon="terp-gtk-go-back-rtl" string="To Do" name="current" domain="[('state','=','open')]"/>
|
<filter icon="terp-gtk-go-back-rtl" string="To Do" name="current" domain="[('state','=','open')]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
|
|
|
@ -105,21 +105,11 @@
|
||||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||||
<filter string="Stage" name="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
<filter string="Stage" name="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl" domain="[]" context="{'group_by':'type_id'}" />
|
|
||||||
<filter string="Channel" icon="terp-call-start" domain="[]" context="{'group_by':'channel_id'}" />
|
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" />
|
|
||||||
<filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'creation_year'}"/>
|
|
||||||
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'creation_month'}"/>
|
|
||||||
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'creation_day'}"/>
|
|
||||||
<filter string="Exp. Closing" icon="terp-go-month" domain="[]" context="{'group_by':'deadline_month'}"/>
|
|
||||||
<filter string="Campaign" icon="terp-gtk-jump-to-rtl"
|
<filter string="Campaign" icon="terp-gtk-jump-to-rtl"
|
||||||
domain="[]" context="{'group_by':'type_id'}" />
|
domain="[]" context="{'group_by':'type_id'}" />
|
||||||
<filter string="Channel" icon="terp-call-start"
|
<filter string="Channel" icon="terp-call-start"
|
||||||
domain="[]" context="{'group_by':'channel_id'}" />
|
domain="[]" context="{'group_by':'channel_id'}" />
|
||||||
<separator orientation="vertical" />
|
<separator orientation="vertical" />
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize"
|
|
||||||
domain="[]" context="{'group_by':'state'}" />
|
|
||||||
<separator orientation="vertical" />
|
|
||||||
<filter string="Year" icon="terp-go-year"
|
<filter string="Year" icon="terp-go-year"
|
||||||
domain="[]" context="{'group_by':'creation_year'}"/>
|
domain="[]" context="{'group_by':'creation_year'}"/>
|
||||||
<filter string="Month" icon="terp-go-month"
|
<filter string="Month" icon="terp-go-month"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
!python {model: mail.compose.message}: |
|
!python {model: mail.compose.message}: |
|
||||||
lead_ids = self.pool.get('crm.lead').search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
lead_ids = self.pool.get('crm.lead').search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
||||||
context.update({'active_model': 'crm.lead','active_id': lead_ids[0]})
|
context.update({'active_model': 'crm.lead','active_id': lead_ids[0]})
|
||||||
id = self.create(cr, uid, {'body_text': "Merci à l'intérêt pour notre produit.nous vous contacterons bientôt. Merci", 'email_from': 'sales@mycompany.com'}, context=context)
|
id = self.create(cr, uid, {'body': "Merci à l'intérêt pour notre produit.nous vous contacterons bientôt. Merci", 'email_from': 'sales@mycompany.com'}, context=context)
|
||||||
try:
|
try:
|
||||||
self.send_mail(cr, uid, [id], context=context)
|
self.send_mail(cr, uid, [id], context=context)
|
||||||
except:
|
except:
|
||||||
|
@ -34,12 +34,6 @@
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
lead_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
lead_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
||||||
self.convert_partner(cr, uid, lead_ids, context=context)
|
self.convert_partner(cr, uid, lead_ids, context=context)
|
||||||
-
|
|
||||||
Now, I search customer in regular customer list.
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
partner_ids = self.message_partner_by_email(cr, uid, 'Mr. John Right <info@customer.com>')
|
|
||||||
assert partner_ids.get('partner_id'), "Customer is not found in regular customer list."
|
|
||||||
-
|
-
|
||||||
I convert one phonecall request as a customer and put into regular customer list.
|
I convert one phonecall request as a customer and put into regular customer list.
|
||||||
-
|
-
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
After communicated with customer, I put some notes with contract details.
|
After communicated with customer, I put some notes with contract details.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
self.message_append_note(cr, uid, [ref('crm_case_4')], subject='Test note', body='ces détails envoyés par le client sur le FAX pour la qualité')
|
self.message_post(cr, uid, [ref('crm_case_4')], subject='Test note', body='ces détails envoyés par le client sur le FAX pour la qualité')
|
||||||
-
|
-
|
||||||
I win this opportunity
|
I win this opportunity
|
||||||
-
|
-
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
I convert mass lead into opportunity customer.
|
I convert mass lead into opportunity customer.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead2opportunity.partner.mass}: |
|
!python {model: crm.lead2opportunity.partner.mass}: |
|
||||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref("crm_case_11"), ref("crm_case_2")], 'active_id': ref("crm_case_4")})
|
context.update({'active_model': 'crm.lead', 'active_ids': [ref("crm_case_11"), ref("crm_case_2")], 'active_id': ref("crm_case_11")})
|
||||||
id = self.create(cr, uid, {'user_ids': [ref('base.user_root')], 'section_id': ref('crm.section_sales_department')}, context=context)
|
id = self.create(cr, uid, {'user_ids': [ref('base.user_root')], 'section_id': ref('crm.section_sales_department')}, context=context)
|
||||||
self.mass_convert(cr, uid, [id], context=context)
|
self.mass_convert(cr, uid, [id], context=context)
|
||||||
-
|
-
|
||||||
|
@ -83,7 +83,8 @@
|
||||||
opp = self.browse(cr, uid, ref('crm_case_11'))
|
opp = self.browse(cr, uid, ref('crm_case_11'))
|
||||||
assert opp.name == "Need estimated cost for new project", "Opportunity name not correct"
|
assert opp.name == "Need estimated cost for new project", "Opportunity name not correct"
|
||||||
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
|
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
|
||||||
assert opp.partner_id.name == "Thomas Passot", 'Partner mismatch!'
|
expected_partner = "Thomas Passot"
|
||||||
|
assert opp.partner_id.name == expected_partner, 'Partner mismatch! %s vs %s' % (opp.partner_id.name, expected_partner)
|
||||||
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
|
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
|
||||||
-
|
-
|
||||||
Then check for second lead converted on opportunity.
|
Then check for second lead converted on opportunity.
|
||||||
|
|
|
@ -24,8 +24,6 @@ from tools.translate import _
|
||||||
import tools
|
import tools
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
class crm_lead2opportunity_partner(osv.osv_memory):
|
class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
_name = 'crm.lead2opportunity.partner'
|
_name = 'crm.lead2opportunity.partner'
|
||||||
_description = 'Lead To Opportunity Partner'
|
_description = 'Lead To Opportunity Partner'
|
||||||
|
@ -35,8 +33,8 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
'action': fields.selection([('exist', 'Link to an existing partner'), \
|
'action': fields.selection([('exist', 'Link to an existing partner'), \
|
||||||
('create', 'Create a new partner'), \
|
('create', 'Create a new partner'), \
|
||||||
('nothing', 'Do not link to a partner')], \
|
('nothing', 'Do not link to a partner')], \
|
||||||
'Action', required=True),
|
'Related Partner', required=True),
|
||||||
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
|
'name': fields.selection([('convert', 'Convert to Opportunities'), ('merge', 'Merge with existing Opportunities')], 'Conversion Action', required=True),
|
||||||
'opportunity_ids': fields.many2many('crm.lead', string='Opportunities', domain=[('type', '=', 'opportunity')]),
|
'opportunity_ids': fields.many2many('crm.lead', string='Opportunities', domain=[('type', '=', 'opportunity')]),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,8 +66,6 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
if ids:
|
if ids:
|
||||||
opportunities.append(ids[0])
|
opportunities.append(ids[0])
|
||||||
if not partner_id:
|
if not partner_id:
|
||||||
label = False
|
|
||||||
opp_ids = []
|
|
||||||
if email:
|
if email:
|
||||||
# Find email of existing opportunity matches the email_from of the lead
|
# Find email of existing opportunity matches the email_from of the lead
|
||||||
cr.execute("""select id from crm_lead where type='opportunity' and
|
cr.execute("""select id from crm_lead where type='opportunity' and
|
||||||
|
@ -106,23 +102,36 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
lead = self.pool.get('crm.lead')
|
lead = self.pool.get('crm.lead')
|
||||||
partner_id = self._create_partner(cr, uid, ids, context=context)
|
res = False
|
||||||
|
partner_ids_map = self._create_partner(cr, uid, ids, context=context)
|
||||||
lead_ids = vals.get('lead_ids', [])
|
lead_ids = vals.get('lead_ids', [])
|
||||||
user_ids = vals.get('user_ids', False)
|
|
||||||
team_id = vals.get('section_id', False)
|
team_id = vals.get('section_id', False)
|
||||||
return lead.convert_opportunity(cr, uid, lead_ids, partner_id, user_ids, team_id, context=context)
|
for lead_id in lead_ids:
|
||||||
|
partner_id = partner_ids_map.get(lead_id, False)
|
||||||
|
# FIXME: cannot pass user_ids as the salesman allocation only works in batch
|
||||||
|
res = lead.convert_opportunity(cr, uid, [lead_id], partner_id, [], team_id, context=context)
|
||||||
|
# FIXME: must perform salesman allocation in batch separately here
|
||||||
|
user_ids = vals.get('user_ids', False)
|
||||||
|
if user_ids:
|
||||||
|
lead.allocate_salesman(cr, uid, lead_ids, user_ids, team_id=team_id, context=context)
|
||||||
|
return res
|
||||||
|
|
||||||
def _merge_opportunity(self, cr, uid, ids, opportunity_ids, action='merge', context=None):
|
def _merge_opportunity(self, cr, uid, ids, opportunity_ids, action='merge', context=None):
|
||||||
#TOFIX: is it usefully ?
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
merge_opportunity = self.pool.get('crm.merge.opportunity')
|
|
||||||
res = False
|
res = False
|
||||||
#If we convert in mass, don't merge if there is no other opportunity but no warning
|
# Expected: all newly-converted leads (active_ids) will be merged with the opportunity(ies)
|
||||||
if action == 'merge' and (len(opportunity_ids) > 1 or not context.get('mass_convert') ):
|
# that have been selected in the 'opportunity_ids' m2m, with all these records
|
||||||
self.write(cr, uid, ids, {'opportunity_ids' : [(6,0, [opportunity_ids[0].id])]}, context=context)
|
# merged into the first opportunity (and the rest deleted)
|
||||||
context.update({'lead_ids' : record_id, "convert" : True})
|
opportunity_ids = [o.id for o in opportunity_ids]
|
||||||
res = merge_opportunity.merge(cr, uid, data.opportunity_ids, context=context)
|
lead_ids = context.get('active_ids', [])
|
||||||
|
if action == 'merge' and lead_ids and opportunity_ids:
|
||||||
|
# Add the leads in the to-merge list, next to other opps
|
||||||
|
# (the fact that they're passed in context['lead_ids'] means that
|
||||||
|
# they cannot be selected to contain the result of the merge.
|
||||||
|
opportunity_ids.extend(lead_ids)
|
||||||
|
context.update({'lead_ids': lead_ids, "convert" : True})
|
||||||
|
res = self.pool.get('crm.lead').merge_opportunity(cr, uid, opportunity_ids, context=context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def action_apply(self, cr, uid, ids, context=None):
|
def action_apply(self, cr, uid, ids, context=None):
|
||||||
|
@ -131,27 +140,37 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
"""
|
"""
|
||||||
if not context:
|
if not context:
|
||||||
context = {}
|
context = {}
|
||||||
|
|
||||||
lead = self.pool.get('crm.lead')
|
lead = self.pool.get('crm.lead')
|
||||||
lead_ids = context.get('active_ids', [])
|
lead_ids = context.get('active_ids', [])
|
||||||
data = self.browse(cr, uid, ids, context=context)[0]
|
data = self.browse(cr, uid, ids, context=context)[0]
|
||||||
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
|
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
|
||||||
self._merge_opportunity(cr, uid, ids, data.opportunity_ids, data.action, context=context)
|
self._merge_opportunity(cr, uid, ids, data.opportunity_ids, data.name, context=context)
|
||||||
return lead.redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
|
return lead.redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
|
||||||
|
|
||||||
crm_lead2opportunity_partner()
|
|
||||||
|
|
||||||
class crm_lead2opportunity_mass_convert(osv.osv_memory):
|
class crm_lead2opportunity_mass_convert(osv.osv_memory):
|
||||||
_name = 'crm.lead2opportunity.partner.mass'
|
_name = 'crm.lead2opportunity.partner.mass'
|
||||||
_description = 'Mass Lead To Opportunity Partner'
|
_description = 'Mass Lead To Opportunity Partner'
|
||||||
_inherit = 'crm.lead2opportunity.partner'
|
_inherit = 'crm.lead2opportunity.partner'
|
||||||
|
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'user_ids': fields.many2many('res.users', string='Salesmans'),
|
'user_ids': fields.many2many('res.users', string='Salesmen'),
|
||||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
|
res = super(crm_lead2opportunity_mass_convert, self).default_get(cr, uid, fields, context)
|
||||||
|
if 'partner_id' in fields:
|
||||||
|
# avoid forcing the partner of the first lead as default
|
||||||
|
res['partner_id'] = False
|
||||||
|
if 'action' in fields:
|
||||||
|
res['action'] = 'create'
|
||||||
|
if 'name' in fields:
|
||||||
|
res['name'] = 'convert'
|
||||||
|
if 'opportunity_ids' in fields:
|
||||||
|
res['opportunity_ids'] = False
|
||||||
|
return res
|
||||||
|
|
||||||
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
|
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
|
||||||
data = self.browse(cr, uid, ids, context=context)[0]
|
data = self.browse(cr, uid, ids, context=context)[0]
|
||||||
salesteam_id = data.section_id and data.section_id.id or False
|
salesteam_id = data.section_id and data.section_id.id or False
|
||||||
|
@ -162,9 +181,6 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory):
|
||||||
return super(crm_lead2opportunity_mass_convert, self)._convert_opportunity(cr, uid, ids, vals, context=context)
|
return super(crm_lead2opportunity_mass_convert, self)._convert_opportunity(cr, uid, ids, vals, context=context)
|
||||||
|
|
||||||
def mass_convert(self, cr, uid, ids, context=None):
|
def mass_convert(self, cr, uid, ids, context=None):
|
||||||
value = self.default_get(cr, uid, ['partner_id', 'opportunity_ids'], context=context)
|
|
||||||
value['opportunity_ids'] = [(6, 0, value['opportunity_ids'])]
|
|
||||||
self.write(cr, uid, ids, value, context=context)
|
|
||||||
return self.action_apply(cr, uid, ids, context=context)
|
return self.action_apply(cr, uid, ids, context=context)
|
||||||
crm_lead2opportunity_mass_convert()
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -37,24 +37,38 @@
|
||||||
<field name="model">crm.lead2opportunity.partner.mass</field>
|
<field name="model">crm.lead2opportunity.partner.mass</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Convert to Opportunity" version="7.0">
|
<form string="Convert to Opportunity" version="7.0">
|
||||||
<field name="action"/>
|
<group string="Conversion Options">
|
||||||
<field name="name" colspan="4"/>
|
<field name="action"/>
|
||||||
<group string="Assigned Opportunities to">
|
<field name="partner_id" attrs="{'invisible':[('action','!=','exist')],'required': [('action', '=', 'exist')]}"/>
|
||||||
<field name="section_id"/>
|
<field name="name"/>
|
||||||
</group>
|
</group>
|
||||||
<separator string="Select Salesman"/>
|
<group string="Select Opportunities" attrs="{'invisible': [('name', '=', 'convert')]}">
|
||||||
<field name="user_ids">
|
<field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
|
||||||
<tree>
|
<tree>
|
||||||
<field name="name"/>
|
<field name="name" />
|
||||||
|
<field name="partner_id" />
|
||||||
|
<field name="user_id" />
|
||||||
|
<field name="section_id" />
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
</group>
|
||||||
|
|
||||||
|
<group string="Assign opportunities to">
|
||||||
|
<field name="section_id" />
|
||||||
|
<field name="user_ids" colspan="4">
|
||||||
|
<tree>
|
||||||
|
<field name="name" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<button name="mass_convert" string="Convert into Opportunities" type="object" class="oe_highlight"/>
|
<button name="mass_convert" string="Convert to Opportunities" type="object" class="oe_highlight"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="action_crm_lead2opportunity_partner" model="ir.actions.act_window">
|
<record id="action_crm_lead2opportunity_partner" model="ir.actions.act_window">
|
||||||
|
|
|
@ -50,20 +50,20 @@ class crm_lead2partner(osv.osv_memory):
|
||||||
def _select_partner(self, cr, uid, context=None):
|
def _select_partner(self, cr, uid, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
lead = self.pool.get('crm.lead')
|
if not context.get('active_model') == 'crm.lead' or not context.get('active_id'):
|
||||||
partner = self.pool.get('res.partner')
|
|
||||||
lead_ids = list(context and context.get('active_ids', []) or [])
|
|
||||||
if not len(lead_ids):
|
|
||||||
return False
|
return False
|
||||||
this = lead.browse(cr, uid, lead_ids[0], context=context)
|
partner = self.pool.get('res.partner')
|
||||||
# Find partner address matches the email_from of the lead
|
lead = self.pool.get('crm.lead')
|
||||||
res = lead.message_partner_by_email(cr, uid, this.email_from, context=context)
|
this = lead.browse(cr, uid, context.get('active_id'), context=context)
|
||||||
partner_id = res.get('partner_id', False)
|
partner_id = False
|
||||||
# Find partner name that matches the name of the lead
|
if this.email_from:
|
||||||
if not partner_id and this.partner_name:
|
partner_ids = partner.search(cr, uid, [('email', '=', this.email_from)], context=context)
|
||||||
|
if partner_ids:
|
||||||
|
partner_id = partner_ids[0]
|
||||||
|
if not this.partner_id and this.partner_name:
|
||||||
partner_ids = partner.search(cr, uid, [('name', '=', this.partner_name)], context=context)
|
partner_ids = partner.search(cr, uid, [('name', '=', this.partner_name)], context=context)
|
||||||
if partner_ids and len(partner_ids):
|
if partner_ids:
|
||||||
partner_id = partner_ids[0]
|
partner_id = partner_ids[0]
|
||||||
return partner_id
|
return partner_id
|
||||||
|
|
||||||
def default_get(self, cr, uid, fields, context=None):
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
|
@ -107,15 +107,16 @@ class crm_lead2partner(osv.osv_memory):
|
||||||
lead_ids = context and context.get('active_ids') or []
|
lead_ids = context and context.get('active_ids') or []
|
||||||
data = self.browse(cr, uid, ids, context=context)[0]
|
data = self.browse(cr, uid, ids, context=context)[0]
|
||||||
partner_id = data.partner_id and data.partner_id.id or False
|
partner_id = data.partner_id and data.partner_id.id or False
|
||||||
partner_ids = lead.convert_partner(cr, uid, lead_ids, data.action, partner_id, context=context)
|
return lead.convert_partner(cr, uid, lead_ids, data.action, partner_id, context=context)
|
||||||
return partner_ids[lead_ids[0]]
|
|
||||||
|
|
||||||
def make_partner(self, cr, uid, ids, context=None):
|
def make_partner(self, cr, uid, ids, context=None):
|
||||||
"""
|
"""
|
||||||
This function Makes partner based on action.
|
This function Makes partner based on action.
|
||||||
"""
|
"""
|
||||||
partner_id = self._create_partner(cr, uid, ids, context=context)
|
# Only called from Form view, so only meant to convert one Lead.
|
||||||
return self.pool.get('res.partner').redirect_partner_form(cr, uid, partner_id, context=context)
|
lead_id = context and context.get('active_id') or False
|
||||||
|
partner_ids_map = self._create_partner(cr, uid, ids, context=context)
|
||||||
|
return self.pool.get('res.partner').redirect_partner_form(cr, uid, partner_ids_map.get(lead_id, False), context=context)
|
||||||
|
|
||||||
crm_lead2partner()
|
crm_lead2partner()
|
||||||
|
|
||||||
|
|
|
@ -57,12 +57,10 @@ class crm_phonecall2partner(osv.osv_memory):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
phonecall = self.pool.get('crm.phonecall')
|
phonecall = self.pool.get('crm.phonecall')
|
||||||
|
|
||||||
data = self.browse(cr, uid, ids, context=context)[0]
|
data = self.browse(cr, uid, ids, context=context)[0]
|
||||||
call_ids = context and context.get('active_ids') or []
|
call_ids = context and context.get('active_ids') or []
|
||||||
partner_id = data.partner_id and data.partner_id.id or False
|
partner_id = data.partner_id and data.partner_id.id or False
|
||||||
partner_ids = phonecall.convert_partner(cr, uid, call_ids, data.action, partner_id, context=context)
|
return phonecall.convert_partner(cr, uid, call_ids, data.action, partner_id, context=context)
|
||||||
return partner_ids[call_ids[0]]
|
|
||||||
|
|
||||||
crm_phonecall2partner()
|
crm_phonecall2partner()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-04 14:04+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15901)\n"
|
||||||
|
|
||||||
|
#. module: crm_caldav
|
||||||
|
#: model:ir.actions.act_window,name:crm_caldav.action_caldav_browse
|
||||||
|
msgid "Caldav Browse"
|
||||||
|
msgstr "CalDAV Bla"
|
||||||
|
|
||||||
|
#. module: crm_caldav
|
||||||
|
#: model:ir.ui.menu,name:crm_caldav.menu_caldav_browse
|
||||||
|
msgid "Synchronize This Calendar"
|
||||||
|
msgstr "Synkroniser denne kalenderen"
|
||||||
|
|
||||||
|
#. module: crm_caldav
|
||||||
|
#: model:ir.model,name:crm_caldav.model_crm_meeting
|
||||||
|
msgid "Meeting"
|
||||||
|
msgstr "Møte"
|
|
@ -72,7 +72,7 @@ class crm_claim(base_stage, osv.osv):
|
||||||
_description = "Claim"
|
_description = "Claim"
|
||||||
_order = "priority,date desc"
|
_order = "priority,date desc"
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
_mail_compose_message = True
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'id': fields.integer('ID', readonly=True),
|
'id': fields.integer('ID', readonly=True),
|
||||||
'name': fields.char('Claim Subject', size=128, required=True),
|
'name': fields.char('Claim Subject', size=128, required=True),
|
||||||
|
@ -194,13 +194,12 @@ class crm_claim(base_stage, osv.osv):
|
||||||
if custom_values is None: custom_values = {}
|
if custom_values is None: custom_values = {}
|
||||||
custom_values.update({
|
custom_values.update({
|
||||||
'name': msg.get('subject') or _("No Subject"),
|
'name': msg.get('subject') or _("No Subject"),
|
||||||
'description': msg.get('body_text'),
|
'description': msg.get('body'),
|
||||||
'email_from': msg.get('from'),
|
'email_from': msg.get('from'),
|
||||||
'email_cc': msg.get('cc'),
|
'email_cc': msg.get('cc'),
|
||||||
})
|
})
|
||||||
if msg.get('priority'):
|
if msg.get('priority'):
|
||||||
custom_values['priority'] = msg.get('priority')
|
custom_values['priority'] = msg.get('priority')
|
||||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
|
||||||
return super(crm_claim,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
return super(crm_claim,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||||
|
|
||||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||||
|
@ -220,7 +219,7 @@ class crm_claim(base_stage, osv.osv):
|
||||||
'revenue': 'planned_revenue',
|
'revenue': 'planned_revenue',
|
||||||
'probability':'probability'
|
'probability':'probability'
|
||||||
}
|
}
|
||||||
for line in msg['body_text'].split('\n'):
|
for line in msg['body'].split('\n'):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
res = tools.misc.command_re.match(line)
|
res = tools.misc.command_re.match(line)
|
||||||
if res and maps.get(res.group(1).lower()):
|
if res and maps.get(res.group(1).lower()):
|
||||||
|
@ -239,16 +238,16 @@ class crm_claim(base_stage, osv.osv):
|
||||||
|
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
msg = _('Claim has been <b>created</b>.')
|
msg = _('Claim has been <b>created</b>.')
|
||||||
return self.message_append_note(cr, uid, ids, body=msg, context=context)
|
return self.message_post(cr, uid, ids, body=msg, context=context)
|
||||||
|
|
||||||
def case_refuse_send_note(self, cr, uid, ids, context=None):
|
def case_refuse_send_note(self, cr, uid, ids, context=None):
|
||||||
msg = _('Claim has been <b>refused</b>.')
|
msg = _('Claim has been <b>refused</b>.')
|
||||||
return self.message_append_note(cr, uid, ids, body=msg, context=context)
|
return self.message_post(cr, uid, ids, body=msg, context=context)
|
||||||
|
|
||||||
def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
|
def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
|
||||||
""" Override of the (void) default notification method. """
|
""" Override of the (void) default notification method. """
|
||||||
stage_name = self.pool.get('crm.claim.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
|
stage_name = self.pool.get('crm.claim.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
|
||||||
return self.message_append_note(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context)
|
return self.message_post(cr, uid, ids, body= _("Stage changed to <b>%s</b>.") % (stage_name), context=context)
|
||||||
|
|
||||||
|
|
||||||
class res_partner(osv.osv):
|
class res_partner(osv.osv):
|
||||||
|
|
|
@ -50,9 +50,9 @@
|
||||||
parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/>
|
parent="base.menu_aftersale" action="crm_case_categ_claim0" sequence="1"/>
|
||||||
|
|
||||||
<!-- Claim Stages -->
|
<!-- Claim Stages -->
|
||||||
|
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
|
||||||
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
|
<menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1"/>
|
||||||
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/>
|
<menuitem id="menu_claim_stage_view" name="Claim Stages" action="crm_claim_stage_act" parent="base.menu_project_config_project" sequence="20"/>
|
||||||
<menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.claim}: |
|
!python {model: crm.claim}: |
|
||||||
try:
|
try:
|
||||||
self.message_update(cr, uid,[ref('crm_claim_4')], {'subject': 'Claim Update record','body_text': 'first training session completed',})
|
self.message_update(cr, uid,[ref('crm_claim_4')], {'subject': 'Claim Update record','body': 'first training session completed',})
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -38,7 +38,7 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
_description = "Helpdesk"
|
_description = "Helpdesk"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
_mail_compose_message = True
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'id': fields.integer('ID', readonly=True),
|
'id': fields.integer('ID', readonly=True),
|
||||||
'name': fields.char('Name', size=128, required=True),
|
'name': fields.char('Name', size=128, required=True),
|
||||||
|
@ -105,12 +105,11 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
if custom_values is None: custom_values = {}
|
if custom_values is None: custom_values = {}
|
||||||
custom_values.update({
|
custom_values.update({
|
||||||
'name': msg.get('subject') or _("No Subject"),
|
'name': msg.get('subject') or _("No Subject"),
|
||||||
'description': msg.get('body_text'),
|
'description': msg.get('body'),
|
||||||
'email_from': msg.get('from'),
|
'email_from': msg.get('from'),
|
||||||
'email_cc': msg.get('cc'),
|
'email_cc': msg.get('cc'),
|
||||||
'user_id': False,
|
'user_id': False,
|
||||||
})
|
})
|
||||||
custom_values.update(self.message_partner_by_email(cr, uid, msg.get('from'), context=context))
|
|
||||||
return super(crm_helpdesk,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
return super(crm_helpdesk,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
|
||||||
|
|
||||||
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
def message_update(self, cr, uid, ids, msg, update_vals=None, context=None):
|
||||||
|
@ -130,7 +129,7 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
'revenue': 'planned_revenue',
|
'revenue': 'planned_revenue',
|
||||||
'probability':'probability'
|
'probability':'probability'
|
||||||
}
|
}
|
||||||
for line in msg['body_text'].split('\n'):
|
for line in msg['body'].split('\n'):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
res = tools.misc.command_re.match(line)
|
res = tools.misc.command_re.match(line)
|
||||||
if res and maps.get(res.group(1).lower()):
|
if res and maps.get(res.group(1).lower()):
|
||||||
|
@ -149,7 +148,7 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
|
|
||||||
def create_send_note(self, cr, uid, ids, context=None):
|
def create_send_note(self, cr, uid, ids, context=None):
|
||||||
msg = _('Case has been <b>created</b>.')
|
msg = _('Case has been <b>created</b>.')
|
||||||
self.message_append_note(cr, uid, ids, body=msg, context=context)
|
self.message_post(cr, uid, ids, body=msg, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ class crm_helpdesk_report(osv.osv):
|
||||||
c.planned_cost,
|
c.planned_cost,
|
||||||
count(*) as nbr,
|
count(*) as nbr,
|
||||||
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
|
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
|
||||||
(SELECT count(id) FROM mail_message WHERE model='crm.helpdesk' AND res_id=c.id AND email_from IS NOT NULL) AS email,
|
(SELECT count(id) FROM mail_message WHERE model='crm.helpdesk' AND res_id=c.id AND type = 'email') AS email,
|
||||||
abs(avg(extract('epoch' from (c.date_deadline - c.date_closed)))/(3600*24)) as delay_expected
|
abs(avg(extract('epoch' from (c.date_deadline - c.date_closed)))/(3600*24)) as delay_expected
|
||||||
from
|
from
|
||||||
crm_helpdesk c
|
crm_helpdesk c
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
!python {model: crm.helpdesk}: |
|
!python {model: crm.helpdesk}: |
|
||||||
question_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
question_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
||||||
try:
|
try:
|
||||||
self.message_update(cr, uid, question_ids, {'subject': 'Link of product', 'body_text': 'www.openerp.com'})
|
self.message_update(cr, uid, question_ids, {'subject': 'Link of product', 'body': 'www.openerp.com'})
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,7 @@
|
||||||
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
|
||||||
name="%(crm_lead_forward_to_partner_act)d"
|
name="%(crm_lead_forward_to_partner_act)d"
|
||||||
icon="terp-mail-forward" type="action"
|
icon="terp-mail-forward" type="action"
|
||||||
context="{'default_name': 'partner', 'default_partner_id': partner_assigned_id}"
|
context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/>
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<group string="Geo Assignation">
|
<group string="Geo Assignation">
|
||||||
|
@ -37,8 +36,6 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<record id="view_crm_opportunity_geo_assign_tree" model="ir.ui.view">
|
<record id="view_crm_opportunity_geo_assign_tree" model="ir.ui.view">
|
||||||
<field name="name">crm.lead.geo_assign.tree.inherit</field>
|
<field name="name">crm.lead.geo_assign.tree.inherit</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
|
@ -49,6 +46,7 @@
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="crm_opportunity_partner_filter">
|
<record model="ir.ui.view" id="crm_opportunity_partner_filter">
|
||||||
<field name="name">crm.opportunity.partner.filter.assigned</field>
|
<field name="name">crm.opportunity.partner.filter.assigned</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
|
@ -63,5 +61,6 @@
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "التمركز الجغرافي"
|
msgstr "التمركز الجغرافي"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ msgid "Highest"
|
||||||
msgstr "أعلى"
|
msgstr "أعلى"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Най-висок"
|
msgstr "Най-висок"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo localitzar"
|
msgstr "Geo localitzar"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "El més alt"
|
msgstr "El més alt"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geogr. Lokalisierung"
|
msgstr "Geogr. Lokalisierung"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Text Version der Mitteilung"
|
msgstr "Text Version der Mitteilung"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Sehr Hoch"
|
msgstr "Sehr Hoch"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Text Inhalt"
|
msgstr "Text Inhalt"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Υψηλότερο"
|
msgstr "Υψηλότερο"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo localizar"
|
msgstr "Geo localizar"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Más alta"
|
msgstr "Más alta"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo localizar"
|
msgstr "Geo localizar"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Versión en texto plano del mensaje"
|
msgstr "Versión en texto plano del mensaje"
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
||||||
msgstr "Más alta"
|
msgstr "Más alta"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Contenido del Texto"
|
msgstr "Contenido del Texto"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo localizar"
|
msgstr "Geo localizar"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Muy alto"
|
msgstr "Muy alto"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Alueellista"
|
msgstr "Alueellista"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Korkein"
|
msgstr "Korkein"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Géolocalisation"
|
msgstr "Géolocalisation"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Version plein texte du message"
|
msgstr "Version plein texte du message"
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
||||||
msgstr "La Plus haute"
|
msgstr "La Plus haute"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Contenu du texte"
|
msgstr "Contenu du texte"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Xeolocalizar"
|
msgstr "Xeolocalizar"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "A máis alta"
|
msgstr "A máis alta"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Najviši"
|
msgstr "Najviši"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Földrajzi fekvés meghatározása"
|
msgstr "Földrajzi fekvés meghatározása"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Legmagasabb"
|
msgstr "Legmagasabb"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo localizzazione"
|
msgstr "Geo localizzazione"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Maggiore"
|
msgstr "Maggiore"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "ジオロカライゼーション"
|
msgstr "ジオロカライゼーション"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "メッセージのテキスト版"
|
msgstr "メッセージのテキスト版"
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "最高"
|
msgstr "最高"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "テキストの内容"
|
msgstr "テキストの内容"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Ģeo. lokalizācija"
|
msgstr "Ģeo. lokalizācija"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "Augstākā"
|
msgstr "Augstākā"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo lokaliseren"
|
msgstr "Geo lokaliseren"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Platte tekst versie van het bericht"
|
msgstr "Platte tekst versie van het bericht"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Hoogste"
|
msgstr "Hoogste"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Tekst inhoud"
|
msgstr "Tekst inhoud"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Lokalizacja geograficzna"
|
msgstr "Lokalizacja geograficzna"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Najwyższy"
|
msgstr "Najwyższy"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Localizar Geograficamente"
|
msgstr "Localizar Geograficamente"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Formatação do texto da versão da mensagem"
|
msgstr "Formatação do texto da versão da mensagem"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Maior"
|
msgstr "Maior"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Conteúdos do texto"
|
msgstr "Conteúdos do texto"
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -75,7 +75,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Localização Geográfica"
|
msgstr "Localização Geográfica"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Versão em texto"
|
msgstr "Versão em texto"
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ msgid "Highest"
|
||||||
msgstr "Mais Alta"
|
msgstr "Mais Alta"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Conteúdo"
|
msgstr "Conteúdo"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Localizare Geo"
|
msgstr "Localizare Geo"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Versiune text-simplu a mesajului"
|
msgstr "Versiune text-simplu a mesajului"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Cel mai ridicat (cea mai ridicata)"
|
msgstr "Cel mai ridicat (cea mai ridicata)"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Cuprins text"
|
msgstr "Cuprins text"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Геолоцировать"
|
msgstr "Геолоцировать"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Высший"
|
msgstr "Высший"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:39+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geoplacering"
|
msgstr "Geoplacering"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Textversion av meddelandet"
|
msgstr "Textversion av meddelandet"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "Högsta"
|
msgstr "Högsta"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Textinnehåll"
|
msgstr "Textinnehåll"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Coğrafi konumlama"
|
msgstr "Coğrafi konumlama"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "Mesajın düz-metin versiyonu"
|
msgstr "Mesajın düz-metin versiyonu"
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ msgid "Highest"
|
||||||
msgstr "En yüksek"
|
msgstr "En yüksek"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "Metin içeriği"
|
msgstr "Metin içeriği"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:40+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "geolocalization定位"
|
msgstr "geolocalization定位"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "内容的纯文本版本"
|
msgstr "内容的纯文本版本"
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "最高"
|
msgstr "最高"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "文本内容"
|
msgstr "文本内容"
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-31 04:56+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
"X-Generator: Launchpad (build 15887)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,send_to:0
|
#: field:crm.lead.forward.to.partner,send_to:0
|
||||||
|
@ -74,7 +74,7 @@ msgid "Geo Localize"
|
||||||
msgstr "Geo 定位"
|
msgstr "Geo 定位"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body_text:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Plain-text version of the message"
|
msgid "Plain-text version of the message"
|
||||||
msgstr "內容的純文字版本"
|
msgstr "內容的純文字版本"
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ msgid "Highest"
|
||||||
msgstr "最高"
|
msgstr "最高"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body_text:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Text contents"
|
msgid "Text contents"
|
||||||
msgstr "文本內容"
|
msgstr "文本內容"
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
I forward this opportunity to its nearest partner.
|
I forward this opportunity to its nearest partner.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead.forward.to.partner}: |
|
!python {model: crm.lead.forward.to.partner}: |
|
||||||
context.update({'active_model': 'crm.lead', 'active_id': ref('crm.crm_case_19'), 'active_ids': [ref('crm.crm_case_19')]})
|
context.update({'default_model': 'crm.lead', 'default_res_id': ref('crm.crm_case_19'), 'active_ids': [ref('crm.crm_case_19')]})
|
||||||
forward_id = self.create(cr, uid, {'email_from': 'test@openerp.com', 'send_to': 'partner'}, context=context)
|
forward_id = self.create(cr, uid, {}, context=context)
|
||||||
try:
|
try:
|
||||||
self.action_forward(cr, uid, [forward_id], context=context)
|
self.action_forward(cr, uid, [forward_id], context=context)
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -20,186 +20,153 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import time
|
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
import tools
|
||||||
|
|
||||||
from osv import osv, fields
|
from osv import osv, fields
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
from mail.mail_message import to_email
|
|
||||||
|
|
||||||
class crm_lead_forward_to_partner(osv.osv_memory):
|
class crm_lead_forward_to_partner(osv.osv_memory):
|
||||||
"""Forwards lead history"""
|
""" Forward info history to partners. """
|
||||||
_name = 'crm.lead.forward.to.partner'
|
_name = 'crm.lead.forward.to.partner'
|
||||||
_inherit = "mail.compose.message"
|
_inherit = "mail.compose.message"
|
||||||
|
|
||||||
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
# set as comment, perform overrided document-like action that calls get_record_data
|
||||||
|
old_mode = context.get('default_composition_mode', 'forward')
|
||||||
|
context['default_composition_mode'] = 'comment'
|
||||||
|
res = super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context)
|
||||||
|
# back to forward mode
|
||||||
|
context['default_composition_mode'] = old_mode
|
||||||
|
res['composition_mode'] = context['default_composition_mode']
|
||||||
|
return res
|
||||||
|
|
||||||
|
def _get_composition_mode_selection(self, cr, uid, context=None):
|
||||||
|
composition_mode = super(crm_lead_forward_to_partner, self)._get_composition_mode_selection(cr, uid, context=context)
|
||||||
|
composition_mode.append(('forward', 'Forward'))
|
||||||
|
return composition_mode
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'send_to': fields.selection([('user', 'User'), ('partner', 'Partner'), \
|
'partner_ids': fields.many2many('res.partner',
|
||||||
('email', 'Email Address')], 'Send to', required=True),
|
'lead_forward_to_partner_res_partner_rel',
|
||||||
'user_id': fields.many2one('res.users', "User"),
|
'wizard_id', 'partner_id', 'Additional contacts'),
|
||||||
'attachment_ids': fields.many2many('ir.attachment','lead_forward_to_partner_attachment_rel', 'wizard_id', 'attachment_id', 'Attachments'),
|
'attachment_ids': fields.many2many('ir.attachment',
|
||||||
'partner_id' : fields.many2one('res.partner', 'Partner'),
|
'lead_forward_to_partner_attachment_rel',
|
||||||
'history': fields.selection([('info', 'Case Information'), ('latest', 'Latest email'), ('whole', 'Whole Story')], 'Send history', required=True),
|
'wizard_id', 'attachment_id', 'Attachments'),
|
||||||
|
'history_mode': fields.selection([('info', 'Case Information'),
|
||||||
|
('latest', 'Latest email'), ('whole', 'Whole Story')],
|
||||||
|
'Send history', required=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'send_to' : 'email',
|
'history_mode': 'latest',
|
||||||
'history': 'latest',
|
'content_subtype': lambda self,cr, uid, context={}: 'html',
|
||||||
'email_from': lambda s, cr, uid, c: s.pool.get('res.users').browse(cr, uid, uid, c).email,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def on_change_email(self, cr, uid, ids, user, context=None):
|
def get_record_data(self, cr, uid, model, res_id, context=None):
|
||||||
if not user:
|
""" Override of mail.compose.message, to add default values coming
|
||||||
return {'value': {'email_to': False}}
|
form the related lead.
|
||||||
return {'value': {'email_to': self.pool.get('res.users').browse(cr, uid, uid, context=context).email}}
|
|
||||||
|
|
||||||
def on_change_history(self, cr, uid, ids, history_type, context=None):
|
|
||||||
"""Gives message body according to type of history selected
|
|
||||||
* info: Forward the case information
|
|
||||||
* whole: Send the whole history
|
|
||||||
* latest: Send the latest histoy
|
|
||||||
"""
|
"""
|
||||||
#TODO: ids and context are not comming
|
res = super(crm_lead_forward_to_partner, self).get_record_data(cr, uid, model, res_id, context=context)
|
||||||
res = {}
|
if model not in ('crm.lead') or not res_id:
|
||||||
res_id = context.get('active_id')
|
return res
|
||||||
model = context.get('active_model')
|
lead_obj = self.pool.get(model)
|
||||||
lead = self.pool.get(model).browse(cr, uid, res_id, context)
|
lead = lead_obj.browse(cr, uid, res_id, context=context)
|
||||||
body_text = self._get_message_body_text(cr, uid, lead, history_type, context=context)
|
subject = '%s: %s - %s' % (_('Fwd'), _('Lead forward'), lead.name)
|
||||||
if body_text:
|
body = self._get_message_body(cr, uid, lead, 'info', context=context)
|
||||||
res = {'value': {'body_text' : body_text}}
|
res.update({
|
||||||
|
'subject': subject,
|
||||||
|
'body': body,
|
||||||
|
})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def on_change_partner(self, cr, uid, ids, partner_id):
|
def on_change_history_mode(self, cr, uid, ids, history_mode, model, res_id, context=None):
|
||||||
"""This function fills address information based on partner/user selected
|
""" Update body when changing history_mode """
|
||||||
"""
|
if model and model == 'crm.lead' and res_id:
|
||||||
if not partner_id:
|
lead = self.pool.get(model).browse(cr, uid, res_id, context=context)
|
||||||
return {'value' : {'email_to' : False}}
|
body = self._get_message_body(cr, uid, lead, history_mode, context=context)
|
||||||
partner_obj = self.pool.get('res.partner')
|
return {'value': {'body': body}}
|
||||||
data = {}
|
|
||||||
partner = partner_obj.browse(cr, uid, [partner_id])
|
def create(self, cr, uid, values, context=None):
|
||||||
user_id = partner and partner[0].user_id or False
|
""" TDE-HACK: remove 'type' from context, because when viewing an
|
||||||
data.update({'email_from': partner and partner[0].email or "",
|
opportunity form view, a default_type is set and propagated
|
||||||
'email_cc' : user_id and user_id.user or '',
|
to the wizard, that has a not matching type field. """
|
||||||
'user_id': user_id and user_id.id or False})
|
default_type = context.pop('default_type', None)
|
||||||
return {'value' : data}
|
new_id = super(crm_lead_forward_to_partner, self).create(cr, uid, values, context=context)
|
||||||
|
if default_type:
|
||||||
|
context['default_type'] = default_type
|
||||||
|
return new_id
|
||||||
|
|
||||||
def action_forward(self, cr, uid, ids, context=None):
|
def action_forward(self, cr, uid, ids, context=None):
|
||||||
"""
|
""" Forward the lead to a partner """
|
||||||
Forward the lead to a partner
|
|
||||||
"""
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
res = {'type': 'ir.actions.act_window_close'}
|
res = {'type': 'ir.actions.act_window_close'}
|
||||||
model = context.get('active_model')
|
wizard = self.browse(cr, uid, ids[0], context=context)
|
||||||
if model not in ('crm.lead'):
|
if wizard.model not in ('crm.lead'):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
this = self.browse(cr, uid, ids[0], context=context)
|
lead = self.pool.get(wizard.model)
|
||||||
lead = self.pool.get(model)
|
lead_ids = wizard.res_id and [wizard.res_id] or []
|
||||||
lead_id = context and context.get('active_id', False) or False
|
|
||||||
lead_ids = lead_id and [lead_id] or []
|
if wizard.composition_mode == 'mass_mail':
|
||||||
mode = context.get('mail.compose.message.mode')
|
|
||||||
if mode == 'mass_mail':
|
|
||||||
lead_ids = context and context.get('active_ids', []) or []
|
lead_ids = context and context.get('active_ids', []) or []
|
||||||
value = self.default_get(cr, uid, ['body_text', 'email_to', 'email_cc', 'subject', 'history'], context=context)
|
value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context)
|
||||||
self.write(cr, uid, ids, value, context=context)
|
self.write(cr, uid, ids, value, context=context)
|
||||||
context['mail.compose.message.mode'] = mode
|
|
||||||
|
|
||||||
self.send_mail(cr, uid, ids, context=context)
|
self.send_mail(cr, uid, ids, context=context)
|
||||||
for case in lead.browse(cr, uid, lead_ids, context=context):
|
# for case in lead.browse(cr, uid, lead_ids, context=context):
|
||||||
if (this.send_to == 'partner' and this.partner_id):
|
# TODO: WHAT TO DO WITH THAT ?
|
||||||
lead.assign_partner(cr, uid, [case.id], this.partner_id.id, context=context)
|
# if (this.send_to == 'partner' and this.partner_id):
|
||||||
|
# lead.assign_partner(cr, uid, [case.id], this.partner_id.id, context=context)
|
||||||
|
|
||||||
if this.send_to == 'user':
|
# if this.send_to == 'user':
|
||||||
lead.allocate_salesman(cr, uid, [case.id], [this.user_id.id], context=context)
|
# lead.allocate_salesman(cr, uid, [case.id], [this.user_id.id], context=context)
|
||||||
|
|
||||||
email_cc = to_email(case.email_cc)
|
|
||||||
email_cc = email_cc and email_cc[0] or ''
|
|
||||||
new_cc = []
|
|
||||||
if email_cc:
|
|
||||||
new_cc.append(email_cc)
|
|
||||||
for to in this.email_to.split(','):
|
|
||||||
email_to = to_email(to)
|
|
||||||
email_to = email_to and email_to[0] or ''
|
|
||||||
if email_to not in new_cc:
|
|
||||||
new_cc.append(to)
|
|
||||||
update_vals = {'email_cc' : ', '.join(new_cc) }
|
|
||||||
lead.write(cr, uid, [case.id], update_vals, context=context)
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _get_info_body_text(self, cr, uid, lead, context=None):
|
def _get_info_body(self, cr, uid, lead, context=None):
|
||||||
field_names = []
|
field_names = []
|
||||||
proxy = self.pool.get(lead._name)
|
proxy = self.pool.get(lead._name)
|
||||||
if lead.type == 'opportunity':
|
if lead.type == 'opportunity':
|
||||||
field_names += ['partner_id']
|
field_names += ['partner_id']
|
||||||
field_names += [
|
field_names += [
|
||||||
'partner_name' , 'title', 'function', 'street', 'street2',
|
'partner_name' , 'title', 'function', 'street', 'street2',
|
||||||
'zip', 'city', 'country_id', 'state_id', 'email_from',
|
'zip', 'city', 'country_id', 'state_id', 'email_from',
|
||||||
'phone', 'fax', 'mobile', 'categ_id', 'description',
|
'phone', 'fax', 'mobile', 'categ_id', 'description',
|
||||||
]
|
]
|
||||||
return proxy._mail_body_text(cr, uid, lead, field_names, context=context)
|
return proxy._mail_body(cr, uid, lead, field_names, context=context)
|
||||||
|
|
||||||
def _get_message_body_text(self, cr, uid, lead, mode='whole', context=None):
|
def _get_message_body(self, cr, uid, lead, history_mode='whole', context=None):
|
||||||
"""This function gets whole communication history and returns as top posting style
|
""" This function gets whole communication history and returns as top
|
||||||
|
posting style
|
||||||
|
#1: form a body, based on the lead
|
||||||
|
#2: append to the body the communication history, based on the
|
||||||
|
history_mode parameter
|
||||||
|
|
||||||
|
- info: Forward the case information
|
||||||
|
- latest: Send the latest history
|
||||||
|
- whole: Send the whole history
|
||||||
|
|
||||||
|
:param lead: browse_record on crm.lead
|
||||||
|
:param history_mode: 'whole' or 'latest'
|
||||||
"""
|
"""
|
||||||
mail_message = self.pool.get('mail.message')
|
mail_message = self.pool.get('mail.message')
|
||||||
message_ids = []
|
body = self._get_info_body(cr, uid, lead, context=context)
|
||||||
body = self._get_info_body_text(cr, uid, lead, context=context)
|
if history_mode not in ('whole', 'latest'):
|
||||||
if mode in ('whole', 'latest'):
|
return body or ''
|
||||||
message_ids = lead.message_ids
|
for message in lead.message_ids:
|
||||||
message_ids = map(lambda x: x.id, filter(lambda x: x.email_from, message_ids))
|
header = '-------- Original Message --------'
|
||||||
if mode == 'latest' and len(message_ids):
|
sentdate = 'Date: %s' % (message.date or '')
|
||||||
message_ids = [message_ids[0]]
|
desc = '\n%s'%(message.body)
|
||||||
for message in mail_message.browse(cr, uid, message_ids, context=context):
|
original = [header, sentdate, desc, '\n']
|
||||||
header = '-------- Original Message --------'
|
original = '\n'.join(original)
|
||||||
sender = 'From: %s' %(message.email_from or '')
|
body += original
|
||||||
to = 'To: %s' % (message.email_to or '')
|
if history_mode == 'latest':
|
||||||
sentdate = 'Date: %s' % (message.date or '')
|
break
|
||||||
desc = '\n%s'%(message.body_text)
|
|
||||||
original = [header, sender, to, sentdate, desc, '\n']
|
|
||||||
original = '\n'.join(original)
|
|
||||||
body += original
|
|
||||||
return body or ''
|
return body or ''
|
||||||
|
|
||||||
def get_value(self, cr, uid, model, res_id, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
res = super(crm_lead_forward_to_partner, self).get_value(cr, uid, model, res_id, context=context)
|
|
||||||
if model not in ("crm.lead"):
|
|
||||||
return res
|
|
||||||
proxy = self.pool.get(model)
|
|
||||||
partner = self.pool.get('res.partner')
|
|
||||||
lead = proxy.browse(cr, uid, res_id, context=context)
|
|
||||||
mode = context.get('mail.compose.message.mode')
|
|
||||||
if mode == "forward":
|
|
||||||
body_type = context.get('mail.compose.message.body')
|
|
||||||
email_cc = res.get('email_cc', "")
|
|
||||||
email = res.get('email_to', "")
|
|
||||||
subject = '%s: %s - %s' % (_('Fwd'), 'Lead forward', lead.name)
|
|
||||||
body = self._get_message_body_text(cr, uid, lead, body_type, context=context)
|
|
||||||
partner_assigned_id = lead.partner_assigned_id and lead.partner_assigned_id.id or False
|
|
||||||
user_id = False
|
|
||||||
if not partner_assigned_id:
|
|
||||||
partner_assigned_id = proxy.search_geo_partner(cr, uid, [lead.id], context=None).get(lead.id, False)
|
|
||||||
if partner_assigned_id:
|
|
||||||
assigned_partner = partner.browse(cr, uid, partner_assigned_id, context=context)
|
|
||||||
user_id = assigned_partner.user_id and assigned_partner.user_id.id or False
|
|
||||||
email_cc = assigned_partner.user_id and assigned_partner.user_id.email or ''
|
|
||||||
email = assigned_partner.email
|
|
||||||
|
|
||||||
res.update({
|
|
||||||
'subject' : subject,
|
|
||||||
'body_text' : body,
|
|
||||||
'email_cc' : email_cc,
|
|
||||||
'email_to' : email,
|
|
||||||
'partner_assigned_id': partner_assigned_id,
|
|
||||||
'user_id': user_id,
|
|
||||||
})
|
|
||||||
return res
|
|
||||||
|
|
||||||
|
|
||||||
def default_get(self, cr, uid, fields, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
context['mail.compose.message.mode'] = 'forward'
|
|
||||||
context['mail.compose.message.body'] = 'info'
|
|
||||||
return super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context)
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -7,42 +7,31 @@
|
||||||
<field name="model">crm.lead.forward.to.partner</field>
|
<field name="model">crm.lead.forward.to.partner</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Send Mail" version="7.0">
|
<form string="Send Mail" version="7.0">
|
||||||
|
<field name="composition_mode" colspan="2" nolabel="1" invisible="1"/>
|
||||||
|
<field name="model" colspan="2" nolabel="1" invisible="1"/>
|
||||||
|
<field name="res_id" colspan="2" nolabel="1" invisible="1"/>
|
||||||
<separator string="Forward to Partner" colspan="4"/>
|
<separator string="Forward to Partner" colspan="4"/>
|
||||||
<group col="4" colspan="6">
|
<group col="4">
|
||||||
<field name="history" colspan="2" on_change="on_change_history(history, context)"/>
|
<field name="history_mode" colspan="4"
|
||||||
<field name="send_to" colspan="2"/>
|
on_change="on_change_history_mode(history_mode, model, res_id)"/>
|
||||||
<group col="2" colspan="2" attrs="{ 'invisible' : [('send_to','!=','user')]}">
|
<field name="subject" colspan="4"/>
|
||||||
<field name="user_id"
|
<field name="partner_ids" colspan="4" widget="many2many_tags"
|
||||||
attrs="{ 'required' : [('send_to','=','user')]}"
|
on_change="onchange_partner_ids(partner_ids)"/>
|
||||||
on_change="on_change_email(user_id)"/>
|
<notebook colspan="4">
|
||||||
</group>
|
<page string="Body">
|
||||||
<group col="4" colspan="4" attrs="{'invisible' : [('send_to','!=','partner')]}">
|
<field name="body"/>
|
||||||
<field name="partner_id" attrs="{'required' : [('send_to','=','partner')]}" on_change="on_change_partner(partner_id)" colspan="2"/>
|
</page>
|
||||||
</group>
|
<page string="Attachments">
|
||||||
|
<field name="attachment_ids"/>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
</group>
|
</group>
|
||||||
<separator string="" colspan="4"/>
|
|
||||||
<group col="6" colspan="4">
|
|
||||||
<field name="email_from" colspan="4" required="1"/>
|
|
||||||
<field name="email_to" colspan="4" required="1"/>
|
|
||||||
<field name="email_cc" colspan="4"/>
|
|
||||||
<field name="email_bcc" colspan="4"/>
|
|
||||||
<field name="reply_to" colspan="4"/>
|
|
||||||
<field name="subject" colspan="4" widget="char" size="512"/>
|
|
||||||
</group>
|
|
||||||
<separator string="" colspan="4"/>
|
|
||||||
<notebook colspan="4">
|
|
||||||
<page string="Body">
|
|
||||||
<field name="body_text" colspan="4" nolabel="1"/>
|
|
||||||
</page>
|
|
||||||
<page string="Attachments">
|
|
||||||
<label string="Add here all attachments of the current document you want to include in the Email." colspan="4"/>
|
|
||||||
<field name="attachment_ids" colspan="4" nolabel="1"/>
|
|
||||||
</page>
|
|
||||||
</notebook>
|
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_forward" string="Send" type="object" class="oe_highlight"/>
|
<button name="action_forward" string="Send" type="object"
|
||||||
|
class="oe_highlight"/>
|
||||||
or
|
or
|
||||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
<button string="Cancel" special="cancel"
|
||||||
|
class="oe_link"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
@ -57,18 +46,14 @@
|
||||||
<field name="target">new</field>
|
<field name="target">new</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<act_window id="action_crm_send_mass_forward"
|
<act_window id="action_crm_send_mass_forward"
|
||||||
multi="True"
|
multi="True"
|
||||||
key2="client_action_multi" name="Mass forward to partner"
|
key2="client_action_multi" name="Mass forward to partner"
|
||||||
res_model="crm.lead.forward.to.partner" src_model="crm.lead"
|
res_model="crm.lead.forward.to.partner" src_model="crm.lead"
|
||||||
view_mode="form" target="new" view_type="form"
|
view_mode="form" target="new" view_type="form"
|
||||||
context="{'mail.compose.message.mode' : 'mass_mail'}"
|
context="{'default_composition_mode' : 'mass_mail'}"
|
||||||
view_id="crm_lead_forward_to_partner_form"
|
view_id="crm_lead_forward_to_partner_form"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -0,0 +1,212 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-06 14:26+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.questionnaire:0
|
||||||
|
msgid "Questions List"
|
||||||
|
msgstr "Spørsmål liste."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.actions.act_window,help:crm_profiling.open_questionnaires
|
||||||
|
msgid ""
|
||||||
|
"You can create specific topic-related questionnaires to guide your team(s) "
|
||||||
|
"in the sales cycle by helping them to ask the right questions. The "
|
||||||
|
"segmentation tool allows you to automatically assign a partner to a category "
|
||||||
|
"according to his answers to the different questionnaires."
|
||||||
|
msgstr ""
|
||||||
|
"Du kan opprette spesifikke tema-relaterte spørreskjemaer for å styre lag (e) "
|
||||||
|
"i salgsperioden ved å hjelpe dem til å stille de riktige spørsmålene. "
|
||||||
|
"Segmentering verktøyet lar deg automatisk tildele en partner til en kategori "
|
||||||
|
"i henhold til hans svar til de ulike spørreskjemaer."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm_profiling.answer,question_id:0
|
||||||
|
#: field:crm_profiling.question,name:0
|
||||||
|
#: model:ir.model,name:crm_profiling.model_crm_profiling_question
|
||||||
|
#: field:open.questionnaire.line,question_id:0
|
||||||
|
msgid "Question"
|
||||||
|
msgstr "Spørsmål"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.actions.act_window,name:crm_profiling.action_open_questionnaire
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
msgid "Open Questionnaire"
|
||||||
|
msgstr "åpen Spørreskjema"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm.segmentation,child_ids:0
|
||||||
|
msgid "Child Profiles"
|
||||||
|
msgstr "Barn profiler"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm.segmentation:0
|
||||||
|
msgid "Partner Segmentations"
|
||||||
|
msgstr "Partner segmenteringer"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm_profiling.answer,name:0
|
||||||
|
#: model:ir.model,name:crm_profiling.model_crm_profiling_answer
|
||||||
|
#: field:open.questionnaire.line,answer_id:0
|
||||||
|
msgid "Answer"
|
||||||
|
msgstr "Svar"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.model,name:crm_profiling.model_open_questionnaire_line
|
||||||
|
msgid "open.questionnaire.line"
|
||||||
|
msgstr "Åpen.Spørreskjema.Linje"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.model,name:crm_profiling.model_crm_segmentation
|
||||||
|
msgid "Partner Segmentation"
|
||||||
|
msgstr "Partnersegmentering"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:res.partner:0
|
||||||
|
msgid "Profiling"
|
||||||
|
msgstr "Profilering"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.questionnaire:0
|
||||||
|
#: field:crm_profiling.questionnaire,description:0
|
||||||
|
msgid "Description"
|
||||||
|
msgstr "Beskrivelse:"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm.segmentation,answer_no:0
|
||||||
|
msgid "Excluded Answers"
|
||||||
|
msgstr "Ekskluderte svar"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.answer:0
|
||||||
|
#: view:crm_profiling.question:0
|
||||||
|
#: field:res.partner,answers_ids:0
|
||||||
|
msgid "Answers"
|
||||||
|
msgstr "Svar"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.model,name:crm_profiling.model_open_questionnaire
|
||||||
|
msgid "open.questionnaire"
|
||||||
|
msgstr "Åpen.Spørresjema"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:open.questionnaire,questionnaire_id:0
|
||||||
|
msgid "Questionnaire name"
|
||||||
|
msgstr "Spørresjema navn."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:res.partner:0
|
||||||
|
msgid "Use a questionnaire"
|
||||||
|
msgstr "Bruk et spørresjema."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
msgid "_Cancel"
|
||||||
|
msgstr "_Avbryt"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:open.questionnaire,question_ans_ids:0
|
||||||
|
msgid "Question / Answers"
|
||||||
|
msgstr "Spørsmål / Svar"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.questionnaire:0
|
||||||
|
#: model:ir.actions.act_window,name:crm_profiling.open_questionnaires
|
||||||
|
#: model:ir.ui.menu,name:crm_profiling.menu_segm_questionnaire
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
msgid "Questionnaires"
|
||||||
|
msgstr "Spørreskjemaer"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: help:crm.segmentation,profiling_active:0
|
||||||
|
msgid ""
|
||||||
|
"Check this box if you want to use this tab as "
|
||||||
|
"part of the segmentation rule. If not checked, "
|
||||||
|
"the criteria beneath will be ignored"
|
||||||
|
msgstr ""
|
||||||
|
"Kryss av her hvis du ønsker å bruke denne kategorien som en del av "
|
||||||
|
"segmentering regelen. Hvis det ikke er merket, vil kriteriene under bli "
|
||||||
|
"ignorert."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: constraint:crm.segmentation:0
|
||||||
|
msgid "Error ! You can not create recursive profiles."
|
||||||
|
msgstr "Feil ! Du kan ikke lage rekursive profiler."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm.segmentation,profiling_active:0
|
||||||
|
msgid "Use The Profiling Rules"
|
||||||
|
msgstr "Bruk profileringen Regler"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: constraint:res.partner:0
|
||||||
|
msgid "Error ! You cannot create recursive associated members."
|
||||||
|
msgstr "Feil! Du kan ikke opprette rekursive tilknyttede medlemmer."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.question:0
|
||||||
|
#: field:crm_profiling.question,answers_ids:0
|
||||||
|
msgid "Avalaible Answers"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm.segmentation,answer_yes:0
|
||||||
|
msgid "Included Answers"
|
||||||
|
msgstr "Inkluderte svar."
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:crm_profiling.question:0
|
||||||
|
#: field:crm_profiling.questionnaire,questions_ids:0
|
||||||
|
#: model:ir.actions.act_window,name:crm_profiling.open_questions
|
||||||
|
#: model:ir.ui.menu,name:crm_profiling.menu_segm_answer
|
||||||
|
msgid "Questions"
|
||||||
|
msgstr "Spørsmål"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: field:crm.segmentation,parent_id:0
|
||||||
|
msgid "Parent Profile"
|
||||||
|
msgstr "Overordnede profil"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Kanseller"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: model:ir.model,name:crm_profiling.model_res_partner
|
||||||
|
msgid "Partner"
|
||||||
|
msgstr "Partner"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: code:addons/crm_profiling/wizard/open_questionnaire.py:77
|
||||||
|
#: field:crm_profiling.questionnaire,name:0
|
||||||
|
#: model:ir.model,name:crm_profiling.model_crm_profiling_questionnaire
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
#: view:open.questionnaire.line:0
|
||||||
|
#: field:open.questionnaire.line,wizard_id:0
|
||||||
|
#, python-format
|
||||||
|
msgid "Questionnaire"
|
||||||
|
msgstr "Spørreskjemaet"
|
||||||
|
|
||||||
|
#. module: crm_profiling
|
||||||
|
#: view:open.questionnaire:0
|
||||||
|
msgid "Save Data"
|
||||||
|
msgstr "Lagre data"
|
||||||
|
|
||||||
|
#~ msgid "Avalaible answers"
|
||||||
|
#~ msgstr "Tilgjengelige svar."
|
|
@ -0,0 +1,95 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-04 14:07+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-05 04:46+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15901)\n"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: model:ir.model,name:crm_todo.model_project_task
|
||||||
|
msgid "Task"
|
||||||
|
msgstr "Oppgave"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Timebox"
|
||||||
|
msgstr "Timeboks"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "For cancelling the task"
|
||||||
|
msgstr "For å avbryte oppgaven"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: constraint:project.task:0
|
||||||
|
msgid "Error ! Task end-date must be greater then task start-date"
|
||||||
|
msgstr "Feil! Oppgave sluttdato må være større enn oppgave startdato"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: model:ir.model,name:crm_todo.model_crm_lead
|
||||||
|
msgid "crm.lead"
|
||||||
|
msgstr "crm.lead"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Neste"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
|
||||||
|
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
|
||||||
|
msgid "My Tasks"
|
||||||
|
msgstr "Mine oppgaver"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
#: field:crm.lead,task_ids:0
|
||||||
|
msgid "Tasks"
|
||||||
|
msgstr "Oppgaver"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Done"
|
||||||
|
msgstr "Utført"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: constraint:project.task:0
|
||||||
|
msgid "Error ! You cannot create recursive tasks."
|
||||||
|
msgstr "Feil! Du kan ikke lage en rekursive oppgaver."
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Kanseller"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Extra Info"
|
||||||
|
msgstr "Ekstra informasjon"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: field:project.task,lead_id:0
|
||||||
|
msgid "Lead / Opportunity"
|
||||||
|
msgstr "Lede / mulighet"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "For changing to done state"
|
||||||
|
msgstr "For å bytte til ferdig tilstand"
|
||||||
|
|
||||||
|
#. module: crm_todo
|
||||||
|
#: view:crm.lead:0
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Tidligere"
|
|
@ -8,9 +8,6 @@
|
||||||
<form string="Document board" version="7.0">
|
<form string="Document board" version="7.0">
|
||||||
<board style="2-1" >
|
<board style="2-1" >
|
||||||
<column>
|
<column>
|
||||||
<action string="New Files"
|
|
||||||
name="%(document.action_view_all_document_tree1)d"
|
|
||||||
view_mode="tree,form"/>
|
|
||||||
<action string="Files by Month"
|
<action string="Files by Month"
|
||||||
name="%(document.action_view_files_by_month_graph)d"
|
name="%(document.action_view_files_by_month_graph)d"
|
||||||
view_mode="graph,tree"/>
|
view_mode="graph,tree"/>
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
# Norwegian Bokmal translation for openobject-addons
|
||||||
|
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-06 14:45+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2012-09-07 04:59+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.model,name:document_ftp.model_document_ftp_configuration
|
||||||
|
msgid "Auto Directory Configuration"
|
||||||
|
msgstr "Automatisk Katalog Konfigurasjon."
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.configuration:0
|
||||||
|
msgid ""
|
||||||
|
"Indicate the network address on which your OpenERP server should be "
|
||||||
|
"reachable for end-users. This depends on your network topology and "
|
||||||
|
"configuration, and will only affect the links displayed to the users. The "
|
||||||
|
"format is HOST:PORT and the default host (localhost) is only suitable for "
|
||||||
|
"access from the server machine itself.."
|
||||||
|
msgstr ""
|
||||||
|
"Indikere nettverksadressen som din OpenERP server bør være tilgjengelige for "
|
||||||
|
"sluttbrukerne. Dette avhenger av nettverkstopologi og konfigurasjon, og vil "
|
||||||
|
"bare påvirke lenker som vises til brukerne. Formatet er HOST: PORT og "
|
||||||
|
"standard verten (lokalhost) er bare egnet for tilgang fra serveren maskinen "
|
||||||
|
"selv .."
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.actions.url,name:document_ftp.action_document_browse
|
||||||
|
msgid "Browse Files"
|
||||||
|
msgstr "Bla i filer"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: field:document.ftp.configuration,config_logo:0
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Bilde"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: field:document.ftp.configuration,host:0
|
||||||
|
msgid "Address"
|
||||||
|
msgstr "Adresse"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: field:document.ftp.browse,url:0
|
||||||
|
msgid "FTP Server"
|
||||||
|
msgstr "FTP-tjener"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory
|
||||||
|
msgid "FTP Server Configuration"
|
||||||
|
msgstr "FTP Serverkonfigurasjon"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.browse:0
|
||||||
|
msgid "_Browse"
|
||||||
|
msgstr "_Bla gjennom"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: help:document.ftp.configuration,host:0
|
||||||
|
msgid ""
|
||||||
|
"Server address or IP and port to which users should connect to for DMS access"
|
||||||
|
msgstr ""
|
||||||
|
"Server adresse eller IP og port til hvilke brukere som skal koble seg til "
|
||||||
|
"for DMS tilgang"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.ui.menu,name:document_ftp.menu_document_browse
|
||||||
|
msgid "Shared Repository (FTP)"
|
||||||
|
msgstr "Wikimedia Commons (FTP)"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.browse:0
|
||||||
|
msgid "_Cancel"
|
||||||
|
msgstr "_Avbryt"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.configuration:0
|
||||||
|
msgid "Configure FTP Server"
|
||||||
|
msgstr "Konfigurer FTP serveren"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.configuration:0
|
||||||
|
msgid "title"
|
||||||
|
msgstr "tittel"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.model,name:document_ftp.model_document_ftp_browse
|
||||||
|
msgid "Document FTP Browse"
|
||||||
|
msgstr "Document FTP Bla i."
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.configuration:0
|
||||||
|
msgid "Knowledge Application Configuration"
|
||||||
|
msgstr "Kunnskap Programkonfigurasjon"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse
|
||||||
|
msgid "Document Browse"
|
||||||
|
msgstr "Dokument Bla i."
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.browse:0
|
||||||
|
msgid "Browse Document"
|
||||||
|
msgstr "Bla igjennom dokument"
|
||||||
|
|
||||||
|
#. module: document_ftp
|
||||||
|
#: view:document.ftp.configuration:0
|
||||||
|
msgid "res_config_contents"
|
||||||
|
msgstr "res_konfig_innhold"
|
|
@ -1,7 +1,3 @@
|
||||||
.oe_form_readonly .oe_notebook {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.oe_document_page ul, .oe_document_page li {
|
.oe_document_page ul, .oe_document_page li {
|
||||||
padding: 2px 8px;
|
padding: 2px 8px;
|
||||||
margin: 2px 8px;
|
margin: 2px 8px;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<t t-call="WebClient"/>
|
<t t-call="WebClient"/>
|
||||||
</t>
|
</t>
|
||||||
<t t-name="EdiView">
|
<t t-name="EdiView">
|
||||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" id="oe_app" class="oe-application oe_forms">
|
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" id="oe_app" class="oe-application oe_forms oe_semantic_html_override">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" valign="top" id="oe_header" class="header">
|
<td colspan="2" valign="top" id="oe_header" class="header">
|
||||||
<div> <a href="/" class="company_logo_link">
|
<div> <a href="/" class="company_logo_link">
|
||||||
|
|
|
@ -28,6 +28,8 @@ from osv import osv
|
||||||
from osv import fields
|
from osv import fields
|
||||||
import tools
|
import tools
|
||||||
from tools.translate import _
|
from tools.translate import _
|
||||||
|
from tools.html_sanitize import html_sanitize
|
||||||
|
from tools import append_content_to_html
|
||||||
from urllib import quote as quote
|
from urllib import quote as quote
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -38,10 +40,8 @@ except ImportError:
|
||||||
|
|
||||||
class email_template(osv.osv):
|
class email_template(osv.osv):
|
||||||
"Templates for sending email"
|
"Templates for sending email"
|
||||||
_inherit = 'mail.message'
|
|
||||||
_name = "email.template"
|
_name = "email.template"
|
||||||
_description = 'Email Templates'
|
_description = 'Email Templates'
|
||||||
_rec_name = 'name' # override mail.message's behavior
|
|
||||||
|
|
||||||
def render_template(self, cr, uid, template, model, res_id, context=None):
|
def render_template(self, cr, uid, template, model, res_id, context=None):
|
||||||
"""Render the given template text, replace mako expressions ``${expr}``
|
"""Render the given template text, replace mako expressions ``${expr}``
|
||||||
|
@ -99,66 +99,46 @@ class email_template(osv.osv):
|
||||||
mod_name = False
|
mod_name = False
|
||||||
if model_id:
|
if model_id:
|
||||||
mod_name = self.pool.get('ir.model').browse(cr, uid, model_id, context).model
|
mod_name = self.pool.get('ir.model').browse(cr, uid, model_id, context).model
|
||||||
return {'value':{'model': mod_name}}
|
return {'value': {'model': mod_name}}
|
||||||
|
|
||||||
def name_get(self, cr, uid, ids, context=None):
|
|
||||||
""" Override name_get of mail.message: return directly the template
|
|
||||||
name, and not the generated name from mail.message.common."""
|
|
||||||
return [(record.id, record.name) for record in self.browse(cr, uid, ids, context=context)]
|
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Name', size=250),
|
'name': fields.char('Name'),
|
||||||
'model_id': fields.many2one('ir.model', 'Related document model'),
|
'model_id': fields.many2one('ir.model', 'Applies to', help="The kind of document with with this template can be used"),
|
||||||
'lang': fields.char('Language Selection', size=250,
|
'model': fields.related('model_id', 'model', type='char', string='Related Document Model',
|
||||||
|
size=128, select=True, store=True, readonly=True),
|
||||||
|
'lang': fields.char('Language',
|
||||||
help="Optional translation language (ISO code) to select when sending out an email. "
|
help="Optional translation language (ISO code) to select when sending out an email. "
|
||||||
"If not set, the english version will be used. "
|
"If not set, the english version will be used. "
|
||||||
"This should usually be a placeholder expression "
|
"This should usually be a placeholder expression "
|
||||||
"that provides the appropriate language code, e.g. "
|
"that provides the appropriate language code, e.g. "
|
||||||
"${object.partner_id.lang.code}."),
|
"${object.partner_id.lang.code}.",
|
||||||
|
placeholder="${object.partner_id.lang.code}"),
|
||||||
'user_signature': fields.boolean('Add Signature',
|
'user_signature': fields.boolean('Add Signature',
|
||||||
help="If checked, the user's signature will be appended to the text version "
|
help="If checked, the user's signature will be appended to the text version "
|
||||||
"of the message"),
|
"of the message"),
|
||||||
'report_name': fields.char('Report Filename', size=200, translate=True,
|
'subject': fields.char('Subject', translate=True, help="Subject (placeholders may be used here)",),
|
||||||
help="Name to use for the generated report file (may contain placeholders)\n"
|
'email_from': fields.char('From', help="Sender address (placeholders may be used here)"),
|
||||||
"The extension can be omitted and will then come from the report type."),
|
'email_to': fields.char('To', help="Comma-separated recipient addresses (placeholders may be used here)"),
|
||||||
'report_template':fields.many2one('ir.actions.report.xml', 'Optional report to print and attach'),
|
'email_cc': fields.char('Cc', help="Carbon copy recipients (placeholders may be used here)"),
|
||||||
'ref_ir_act_window':fields.many2one('ir.actions.act_window', 'Sidebar action', readonly=True,
|
'reply_to': fields.char('Reply-To', help="Preferred response address (placeholders may be used here)"),
|
||||||
help="Sidebar action to make this template available on records "
|
|
||||||
"of the related document model"),
|
|
||||||
'ref_ir_value':fields.many2one('ir.values', 'Sidebar Button', readonly=True,
|
|
||||||
help="Sidebar button to open the sidebar action"),
|
|
||||||
'track_campaign_item': fields.boolean('Resource Tracking',
|
|
||||||
help="Enable this is you wish to include a special tracking marker "
|
|
||||||
"in outgoing emails so you can identify replies and link "
|
|
||||||
"them back to the corresponding resource record. "
|
|
||||||
"This is useful for CRM leads for example"),
|
|
||||||
|
|
||||||
# Overridden mail.message.common fields for technical reasons:
|
|
||||||
'model': fields.related('model_id','model', type='char', string='Related Document Model',
|
|
||||||
size=128, select=True, store=True, readonly=True),
|
|
||||||
# we need a separate m2m table to avoid ID collisions with the original mail.message entries
|
|
||||||
'attachment_ids': fields.many2many('ir.attachment', 'email_template_attachment_rel', 'email_template_id',
|
|
||||||
'attachment_id', 'Files to attach',
|
|
||||||
help="You may attach files to this template, to be added to all "
|
|
||||||
"emails created from this template"),
|
|
||||||
|
|
||||||
# Overridden mail.message.common fields to make tooltips more appropriate:
|
|
||||||
'subject':fields.char('Subject', size=512, translate=True, help="Subject (placeholders may be used here)",),
|
|
||||||
'email_from': fields.char('From', size=128, help="Sender address (placeholders may be used here)"),
|
|
||||||
'email_to': fields.char('To', size=256, help="Comma-separated recipient addresses (placeholders may be used here)"),
|
|
||||||
'email_cc': fields.char('Cc', size=256, help="Carbon copy recipients (placeholders may be used here)"),
|
|
||||||
'email_bcc': fields.char('Bcc', size=256, help="Blind carbon copy recipients (placeholders may be used here)"),
|
|
||||||
'reply_to': fields.char('Reply-To', size=250, help="Preferred response address (placeholders may be used here)"),
|
|
||||||
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing Mail Server', readonly=False,
|
'mail_server_id': fields.many2one('ir.mail_server', 'Outgoing Mail Server', readonly=False,
|
||||||
help="Optional preferred server for outgoing mails. If not set, the highest "
|
help="Optional preferred server for outgoing mails. If not set, the highest "
|
||||||
"priority one will be used."),
|
"priority one will be used."),
|
||||||
'body_text': fields.text('Text Contents', translate=True, help="Plaintext version of the message (placeholders may be used here)"),
|
'body_html': fields.text('Body', translate=True, help="Rich-text/HTML version of the message (placeholders may be used here)"),
|
||||||
'body_html': fields.text('Rich-text Contents', translate=True, help="Rich-text/HTML version of the message (placeholders may be used here)"),
|
'report_name': fields.char('Report Filename', translate=True,
|
||||||
'message_id': fields.char('Message-Id', size=256, help="Message-ID SMTP header to use in outgoing messages based on this template. "
|
help="Name to use for the generated report file (may contain placeholders)\n"
|
||||||
"Please note that this overrides the 'Resource Tracking' option, "
|
"The extension can be omitted and will then come from the report type."),
|
||||||
"so if you simply need to track replies to outgoing emails, enable "
|
'report_template': fields.many2one('ir.actions.report.xml', 'Optional report to print and attach'),
|
||||||
"that option instead.\n"
|
'ref_ir_act_window': fields.many2one('ir.actions.act_window', 'Sidebar action', readonly=True,
|
||||||
"Placeholders must be used here, as this value always needs to be unique!"),
|
help="Sidebar action to make this template available on records "
|
||||||
|
"of the related document model"),
|
||||||
|
'ref_ir_value': fields.many2one('ir.values', 'Sidebar Button', readonly=True,
|
||||||
|
help="Sidebar button to open the sidebar action"),
|
||||||
|
'attachment_ids': fields.many2many('ir.attachment', 'email_template_attachment_rel', 'email_template_id',
|
||||||
|
'attachment_id', 'Attachments',
|
||||||
|
help="You may attach files to this template, to be added to all "
|
||||||
|
"emails created from this template"),
|
||||||
|
'auto_delete': fields.boolean('Auto Delete', help="Permanently delete this email after sending it, to save space"),
|
||||||
|
|
||||||
# Fake fields used to implement the placeholder assistant
|
# Fake fields used to implement the placeholder assistant
|
||||||
'model_object_field': fields.many2one('ir.model.fields', string="Field",
|
'model_object_field': fields.many2one('ir.model.fields', string="Field",
|
||||||
|
@ -172,12 +152,12 @@ class email_template(osv.osv):
|
||||||
help="When a relationship field is selected as first field, "
|
help="When a relationship field is selected as first field, "
|
||||||
"this field lets you select the target field within the "
|
"this field lets you select the target field within the "
|
||||||
"destination document model (sub-model)."),
|
"destination document model (sub-model)."),
|
||||||
'null_value': fields.char('Null value', help="Optional value to use if the target field is empty", size=128),
|
'null_value': fields.char('Default Value', help="Optional value to use if the target field is empty"),
|
||||||
'copyvalue': fields.char('Expression', size=256, help="Final placeholder expression, to be copy-pasted in the desired template field."),
|
'copyvalue': fields.char('Placeholder Expression', help="Final placeholder expression, to be copy-pasted in the desired template field."),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'track_campaign_item': True
|
'auto_delete': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
def create_action(self, cr, uid, ids, context=None):
|
def create_action(self, cr, uid, ids, context=None):
|
||||||
|
@ -195,7 +175,7 @@ class email_template(osv.osv):
|
||||||
'res_model': 'mail.compose.message',
|
'res_model': 'mail.compose.message',
|
||||||
'src_model': src_obj,
|
'src_model': src_obj,
|
||||||
'view_type': 'form',
|
'view_type': 'form',
|
||||||
'context': "{'mail.compose.message.mode':'mass_mail', 'mail.compose.template_id' : %d}" % (template.id),
|
'context': "{'default_composition_mode': 'mass_mail', 'default_template_id' : %d}" % (template.id),
|
||||||
'view_mode':'form,tree',
|
'view_mode':'form,tree',
|
||||||
'view_id': res_id,
|
'view_id': res_id,
|
||||||
'target': 'new',
|
'target': 'new',
|
||||||
|
@ -222,7 +202,7 @@ class email_template(osv.osv):
|
||||||
if template.ref_ir_value:
|
if template.ref_ir_value:
|
||||||
ir_values_obj = self.pool.get('ir.values')
|
ir_values_obj = self.pool.get('ir.values')
|
||||||
ir_values_obj.unlink(cr, uid, template.ref_ir_value.id, context)
|
ir_values_obj.unlink(cr, uid, template.ref_ir_value.id, context)
|
||||||
except:
|
except Exception:
|
||||||
raise osv.except_osv(_("Warning"), _("Deletion of the action record failed."))
|
raise osv.except_osv(_("Warning"), _("Deletion of the action record failed."))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -294,65 +274,33 @@ class email_template(osv.osv):
|
||||||
:param res_id: id of the record to use for rendering the template (model
|
:param res_id: id of the record to use for rendering the template (model
|
||||||
is taken from template definition)
|
is taken from template definition)
|
||||||
:returns: a dict containing all relevant fields for creating a new
|
:returns: a dict containing all relevant fields for creating a new
|
||||||
mail.message entry, with the addition one additional
|
mail.mail entry, with one extra key ``attachments``, in the
|
||||||
special key ``attachments`` containing a list of
|
format expected by :py:meth:`mail_thread.message_post`.
|
||||||
"""
|
"""
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
values = {
|
|
||||||
'subject': False,
|
|
||||||
'body_text': False,
|
|
||||||
'body_html': False,
|
|
||||||
'email_from': False,
|
|
||||||
'email_to': False,
|
|
||||||
'email_cc': False,
|
|
||||||
'email_bcc': False,
|
|
||||||
'reply_to': False,
|
|
||||||
'auto_delete': False,
|
|
||||||
'model': False,
|
|
||||||
'res_id': False,
|
|
||||||
'mail_server_id': False,
|
|
||||||
'attachments': False,
|
|
||||||
'attachment_ids': False,
|
|
||||||
'message_id': False,
|
|
||||||
'state': 'outgoing',
|
|
||||||
'content_subtype': 'plain',
|
|
||||||
'partner_ids': [],
|
|
||||||
}
|
|
||||||
if not template_id:
|
|
||||||
return values
|
|
||||||
|
|
||||||
report_xml_pool = self.pool.get('ir.actions.report.xml')
|
report_xml_pool = self.pool.get('ir.actions.report.xml')
|
||||||
template = self.get_email_template(cr, uid, template_id, res_id, context)
|
template = self.get_email_template(cr, uid, template_id, res_id, context)
|
||||||
|
values = {}
|
||||||
for field in ['subject', 'body_text', 'body_html', 'email_from',
|
for field in ['subject', 'body_html', 'email_from',
|
||||||
'email_to', 'email_cc', 'email_bcc', 'reply_to',
|
'email_to', 'email_cc', 'reply_to']:
|
||||||
'message_id']:
|
|
||||||
values[field] = self.render_template(cr, uid, getattr(template, field),
|
values[field] = self.render_template(cr, uid, getattr(template, field),
|
||||||
template.model, res_id, context=context) \
|
template.model, res_id, context=context) \
|
||||||
or False
|
or False
|
||||||
|
|
||||||
# if email_to: find or create a partner
|
|
||||||
if values['email_to']:
|
|
||||||
partner_id = self.pool.get('mail.thread').message_partner_by_email(cr, uid, values['email_to'], context=context)['partner_id']
|
|
||||||
if not partner_id:
|
|
||||||
partner_id = self.pool.get('res.partner').name_create(cr, uid, values['email_to'], context=context)
|
|
||||||
values['partner_ids'] = [partner_id]
|
|
||||||
|
|
||||||
if values['body_html']:
|
|
||||||
values.update(content_subtype='html')
|
|
||||||
|
|
||||||
if template.user_signature:
|
if template.user_signature:
|
||||||
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
|
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
|
||||||
values['body_text'] += '\n\n' + signature
|
values['body_html'] = append_content_to_html(values['body_html'], signature)
|
||||||
|
|
||||||
values.update(mail_server_id = template.mail_server_id.id or False,
|
if values['body_html']:
|
||||||
auto_delete = template.auto_delete,
|
values['body'] = html_sanitize(values['body_html'])
|
||||||
|
|
||||||
|
values.update(mail_server_id=template.mail_server_id.id or False,
|
||||||
|
auto_delete=template.auto_delete,
|
||||||
model=template.model,
|
model=template.model,
|
||||||
res_id=res_id or False)
|
res_id=res_id or False)
|
||||||
|
|
||||||
attachments = {}
|
attachments = []
|
||||||
# Add report as a Document
|
# Add report in attachments
|
||||||
if template.report_template:
|
if template.report_template:
|
||||||
report_name = self.render_template(cr, uid, template.report_name, template.model, res_id, context=context)
|
report_name = self.render_template(cr, uid, template.report_name, template.model, res_id, context=context)
|
||||||
report_service = 'report.' + report_xml_pool.browse(cr, uid, template.report_template.id, context).report_name
|
report_service = 'report.' + report_xml_pool.browse(cr, uid, template.report_template.id, context).report_name
|
||||||
|
@ -368,12 +316,11 @@ class email_template(osv.osv):
|
||||||
ext = "." + format
|
ext = "." + format
|
||||||
if not report_name.endswith(ext):
|
if not report_name.endswith(ext):
|
||||||
report_name += ext
|
report_name += ext
|
||||||
attachments[report_name] = result
|
attachments.append(report_name, result)
|
||||||
|
|
||||||
# Add document attachments
|
# Add template attachments
|
||||||
for attach in template.attachment_ids:
|
for attach in template.attachment_ids:
|
||||||
# keep the bytes as fetched from the db, base64 encoded
|
attachments.append((attach.datas_fname, attach.datas))
|
||||||
attachments[attach.datas_fname] = attach.datas
|
|
||||||
|
|
||||||
values['attachments'] = attachments
|
values['attachments'] = attachments
|
||||||
return values
|
return values
|
||||||
|
@ -391,12 +338,12 @@ class email_template(osv.osv):
|
||||||
:returns: id of the mail.message that was created
|
:returns: id of the mail.message that was created
|
||||||
"""
|
"""
|
||||||
if context is None: context = {}
|
if context is None: context = {}
|
||||||
mail_message = self.pool.get('mail.message')
|
mail_mail = self.pool.get('mail.mail')
|
||||||
ir_attachment = self.pool.get('ir.attachment')
|
ir_attachment = self.pool.get('ir.attachment')
|
||||||
values = self.generate_email(cr, uid, template_id, res_id, context=context)
|
values = self.generate_email(cr, uid, template_id, res_id, context=context)
|
||||||
assert 'email_from' in values, 'email_from is missing or empty after template rendering, send_mail() cannot proceed'
|
assert 'email_from' in values, 'email_from is missing or empty after template rendering, send_mail() cannot proceed'
|
||||||
attachments = values.pop('attachments') or {}
|
attachments = values.pop('attachments') or {}
|
||||||
msg_id = mail_message.create(cr, uid, values, context=context)
|
msg_id = mail_mail.create(cr, uid, values, context=context)
|
||||||
# link attachments
|
# link attachments
|
||||||
attachment_ids = []
|
attachment_ids = []
|
||||||
for fname, fcontent in attachments.iteritems():
|
for fname, fcontent in attachments.iteritems():
|
||||||
|
@ -404,15 +351,15 @@ class email_template(osv.osv):
|
||||||
'name': fname,
|
'name': fname,
|
||||||
'datas_fname': fname,
|
'datas_fname': fname,
|
||||||
'datas': fcontent,
|
'datas': fcontent,
|
||||||
'res_model': mail_message._name,
|
'res_model': mail_mail._name,
|
||||||
'res_id': msg_id,
|
'res_id': msg_id,
|
||||||
}
|
}
|
||||||
context.pop('default_type', None)
|
context.pop('default_type', None)
|
||||||
attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context))
|
attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context))
|
||||||
if attachment_ids:
|
if attachment_ids:
|
||||||
mail_message.write(cr, uid, msg_id, {'attachment_ids': [(6, 0, attachment_ids)]}, context=context)
|
mail_mail.write(cr, uid, msg_id, {'attachment_ids': [(6, 0, attachment_ids)]}, context=context)
|
||||||
if force_send:
|
if force_send:
|
||||||
mail_message.send(cr, uid, [msg_id], context=context)
|
mail_mail.send(cr, uid, [msg_id], context=context)
|
||||||
return msg_id
|
return msg_id
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -1,99 +1,67 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<openerp>
|
<openerp>
|
||||||
<data>
|
<data>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="email_template_form">
|
<record model="ir.ui.view" id="email_template_form">
|
||||||
<field name="name">email.template.form</field>
|
<field name="name">email.template.form</field>
|
||||||
<field name="model">email.template</field>
|
<field name="model">email.template</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Templates" version="7.0">
|
<form string="Templates" version="7.0">
|
||||||
<sheet>
|
<sheet>
|
||||||
<group col="4">
|
<div class="oe_title">
|
||||||
<field name="name" required="1"/>
|
<label for="name" class="oe_edit_only"/><h1><field name="name" required="1"/></h1>
|
||||||
<field name="model_id" required="1" on_change="onchange_model_id(model_id)"/>
|
<h3><label for="model_id"/><field name="model_id" required="1" on_change="onchange_model_id(model_id)" class="oe_inline"/></h3>
|
||||||
<field name="model" invisible="1"/>
|
<field name="model" invisible="1"/>
|
||||||
</group>
|
</div>
|
||||||
<notebook>
|
<div class="oe_right oe_button_box" name="buttons">
|
||||||
<page string="Email Details">
|
<field name="ref_ir_act_window" invisible="1"/>
|
||||||
<group>
|
<button name="create_action" string="Add context action" type="object"
|
||||||
<field name="email_from" required="1"/>
|
attrs="{'invisible':[('ref_ir_act_window','!=',False)]}"
|
||||||
<field name="email_to" required="1"/>
|
help="Display an option on related documents to open a composition wizard with this template"/>
|
||||||
<field name="email_cc"/>
|
<button name="unlink_action" string="Remove context action" type="object"
|
||||||
<field name="email_bcc"/>
|
attrs="{'invisible':[('ref_ir_act_window','=',False)]}"
|
||||||
<field name="reply_to"/>
|
help="Remove the contextual action to use this template on related documents"/>
|
||||||
<field name="subject" required="1"/>
|
<button name="%(wizard_email_template_preview)d" string="Preview"
|
||||||
<notebook colspan="4">
|
type="action" target="new"
|
||||||
<page string="Body (Text)">
|
context="{'template_id':active_id}"/>
|
||||||
<field name="body_text" colspan="4" width="250" height="250" nolabel="1"/>
|
</div>
|
||||||
</page>
|
<notebook>
|
||||||
<page string="Body (Rich/HTML)">
|
<page string="Email Details">
|
||||||
<field name="body_html" colspan="4" width="250" height="250" nolabel="1"/>
|
<group>
|
||||||
<label string="Note: This is Raw HTML." colspan="4"/>
|
<group string="Addressing">
|
||||||
</page>
|
<field name="email_from" required="1"/>
|
||||||
</notebook>
|
<field name="email_to" required="1"/>
|
||||||
<field name="user_signature"/>
|
<field name="email_cc"/>
|
||||||
<notebook colspan="4">
|
<field name="reply_to"/>
|
||||||
<page string="Dynamic Values Builder">
|
<field name="user_signature"/>
|
||||||
<group>
|
</group>
|
||||||
<field name="model_object_field"
|
<group string="Dynamic Value Builder" class="oe_edit_only">
|
||||||
domain="[('model_id','=',model_id),('ttype','!=','one2many'),('ttype','!=','many2many')]"
|
<field name="model_object_field" domain="[('model_id','=',model_id),('ttype','!=','one2many'),('ttype','!=','many2many')]" on_change="onchange_sub_model_object_value_field(model_object_field)"/>
|
||||||
on_change="onchange_sub_model_object_value_field(model_object_field)"/>
|
<field name="sub_object" readonly="1"/>
|
||||||
<field name="sub_object" readonly="1"/>
|
<field name="sub_model_object_field" domain="[('model_id','=',sub_object),('ttype','!=','one2many'),('ttype','!=','many2many')]" attrs="{'readonly':[('sub_object','=',False)],'required':[('sub_object','!=',False)]}" on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field)"/>
|
||||||
<field name="sub_model_object_field"
|
<field name="null_value" on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field,null_value)"/>
|
||||||
domain="[('model_id','=',sub_object),('ttype','!=','one2many'),('ttype','!=','many2many')]"
|
<field name="copyvalue"/>
|
||||||
attrs="{'readonly':[('sub_object','=',False)],'required':[('sub_object','!=',False)]}"
|
</group>
|
||||||
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field)"/>
|
<group string="Contents" colspan="2">
|
||||||
<field name="null_value" on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field,null_value)"/>
|
<field name="subject" required="1"/>
|
||||||
<field name="copyvalue"/>
|
<field name="body_html" width="250" height="450" nolabel="1" colspan="2" placeholder="Email contents (in raw HTML format)"/>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
|
||||||
</notebook>
|
|
||||||
<button name="%(wizard_email_template_preview)d" string="Preview Template"
|
|
||||||
type="action" colspan="4" target="new" icon="gtk-zoom-fit" context="{'template_id':active_id}"/>
|
|
||||||
</group>
|
|
||||||
</page>
|
|
||||||
<page string="Advanced">
|
|
||||||
<group colspan="2" col="2">
|
|
||||||
<group colspan="2" col="2">
|
|
||||||
<separator string="Sidebar Button" colspan="2"/>
|
|
||||||
<button name="create_action" string="Add sidebar button" type="object" icon="gtk-execute"
|
|
||||||
colspan="2" attrs="{'invisible':[('ref_ir_act_window','!=',False)]}"
|
|
||||||
help="Display a button in the sidebar of related documents to open a composition wizard with this template"
|
|
||||||
/>
|
|
||||||
<field name="ref_ir_act_window" attrs="{'invisible':[('ref_ir_act_window','=',False)]}"/>
|
|
||||||
<field name="ref_ir_value" attrs="{'invisible':[('ref_ir_act_window','=',False)]}"/>
|
|
||||||
<button name="unlink_action" string="Remove sidebar button" type="object" icon="gtk-delete"
|
|
||||||
colspan="2" attrs="{'invisible':[('ref_ir_act_window','=',False)]}"
|
|
||||||
help="Remove the sidebar button currently displayed on related documents"
|
|
||||||
/>
|
|
||||||
</group>
|
</group>
|
||||||
<group colspan="2" col="2">
|
</page>
|
||||||
<separator string="Advanced Options" colspan="2"/>
|
<page string="Advanced">
|
||||||
<field name="mail_server_id"/>
|
<group>
|
||||||
<field name="track_campaign_item"/>
|
|
||||||
<field name="message_id"/>
|
|
||||||
<field name="auto_delete"/>
|
|
||||||
<field name="lang"/>
|
<field name="lang"/>
|
||||||
|
<field name="mail_server_id"/>
|
||||||
|
<field name="auto_delete"/>
|
||||||
|
<field name="report_template" domain="[('model','=',model)]"/>
|
||||||
|
<field name="report_name" class="oe_inline"
|
||||||
|
attrs="{'invisible':[('report_template','=',False)]}"/>
|
||||||
|
<field name="attachment_ids">
|
||||||
|
<tree><field name="name"/></tree>
|
||||||
|
</field>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</page>
|
||||||
<group colspan="2" col="2">
|
</notebook>
|
||||||
<separator string="Attachments" colspan="2"/>
|
</sheet>
|
||||||
<notebook colspan="2">
|
|
||||||
<page string="Attach Report">
|
|
||||||
<group>
|
|
||||||
<field name="report_template" colspan="4"
|
|
||||||
domain="[('model','=',model)]"/>
|
|
||||||
<field name="report_name" colspan="4" />
|
|
||||||
</group>
|
|
||||||
</page>
|
|
||||||
<page string="Attach existing files">
|
|
||||||
<field name="attachment_ids" colspan="4" nolabel="1" height="350"/>
|
|
||||||
</page>
|
|
||||||
</notebook>
|
|
||||||
</group>
|
|
||||||
</page>
|
|
||||||
</notebook>
|
|
||||||
</sheet>
|
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -103,9 +71,9 @@
|
||||||
<field name="model">email.template</field>
|
<field name="model">email.template</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Templates">
|
<tree string="Templates">
|
||||||
<field name="model_id"/>
|
|
||||||
<field name="mail_server_id" invisible="1"/>
|
<field name="mail_server_id" invisible="1"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
|
<field name="model_id"/>
|
||||||
<field name="subject"/>
|
<field name="subject"/>
|
||||||
<field name="email_from"/>
|
<field name="email_from"/>
|
||||||
<field name="email_to"/>
|
<field name="email_to"/>
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:34+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: field:email.template,subtype:0
|
#: field:email.template,subtype:0
|
||||||
|
@ -316,8 +316,8 @@ msgid "Add Signature"
|
||||||
msgstr "إضافة توقيع"
|
msgstr "إضافة توقيع"
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: help:email.template,body_text:0
|
#: help:email.template,body:0
|
||||||
#: help:email_template.preview,body_text:0
|
#: help:email_template.preview,body:0
|
||||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||||
msgstr "نص عادي نسخة من رسالة (ويمكن استخدام العناصر البديلة هنا)"
|
msgstr "نص عادي نسخة من رسالة (ويمكن استخدام العناصر البديلة هنا)"
|
||||||
|
|
||||||
|
@ -460,8 +460,8 @@ msgid "Cc"
|
||||||
msgstr "نسخة"
|
msgstr "نسخة"
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: field:email.template,body_text:0
|
#: field:email.template,body:0
|
||||||
#: field:email_template.preview,body_text:0
|
#: field:email_template.preview,body:0
|
||||||
msgid "Text Contents"
|
msgid "Text Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-08-28 06:34+0000\n"
|
"X-Launchpad-Export-Date: 2012-09-07 04:58+0000\n"
|
||||||
"X-Generator: Launchpad (build 15864)\n"
|
"X-Generator: Launchpad (build 15914)\n"
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: field:email.template,subtype:0
|
#: field:email.template,subtype:0
|
||||||
|
@ -303,8 +303,8 @@ msgid "Add Signature"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: help:email.template,body_text:0
|
#: help:email.template,body:0
|
||||||
#: help:email_template.preview,body_text:0
|
#: help:email_template.preview,body:0
|
||||||
msgid "Plaintext version of the message (placeholders may be used here)"
|
msgid "Plaintext version of the message (placeholders may be used here)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -445,8 +445,8 @@ msgid "Cc"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: email_template
|
#. module: email_template
|
||||||
#: field:email.template,body_text:0
|
#: field:email.template,body:0
|
||||||
#: field:email_template.preview,body_text:0
|
#: field:email_template.preview,body:0
|
||||||
msgid "Text Contents"
|
msgid "Text Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue