[MERGE] merged with trunk-addons-development
bzr revid: hmo@tinyerp.com-20110225074706-pjzvvfqe1200zwji
This commit is contained in:
commit
85e8c93460
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-02-23 06:02+0000\n"
|
||||
"Last-Translator: Ginandjar Satyanagara <Unknown>\n"
|
||||
"PO-Revision-Date: 2011-02-24 07:59+0000\n"
|
||||
"Last-Translator: moelyana <Unknown>\n"
|
||||
"Language-Team: Indonesian <id@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: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -332,6 +332,7 @@ msgstr "St."
|
|||
#, python-format
|
||||
msgid "Invoice line account company does not match with invoice company."
|
||||
msgstr ""
|
||||
"Baris tagihan dari rekening perusahaan tidak sesuai dengan tagihan perusahaan"
|
||||
|
||||
#. module: account
|
||||
#: field:account.journal.column,field:0
|
||||
|
@ -427,7 +428,7 @@ msgstr "Situasi Pembukaan/ Penutupan"
|
|||
#. module: account
|
||||
#: help:account.journal,currency:0
|
||||
msgid "The currency used to enter statement"
|
||||
msgstr "Mata uang yang digunakan untuk memasukkan pernyataan"
|
||||
msgstr "Mata uang yang digunakan untuk masukkan pernyataan"
|
||||
|
||||
#. module: account
|
||||
#: field:account.open.closed.fiscalyear,fyear_id:0
|
||||
|
@ -9724,12 +9725,12 @@ msgstr ""
|
|||
#. module: account
|
||||
#: selection:account.aged.trial.balance,direction_selection:0
|
||||
msgid "Future"
|
||||
msgstr ""
|
||||
msgstr "Masa Depan"
|
||||
|
||||
#. module: account
|
||||
#: view:account.move.line:0
|
||||
msgid "Search Journal Items"
|
||||
msgstr ""
|
||||
msgstr "Cari Jurnal Produk"
|
||||
|
||||
#. module: account
|
||||
#: help:account.tax,base_sign:0
|
||||
|
@ -9746,12 +9747,12 @@ msgstr ""
|
|||
#. module: account
|
||||
#: model:ir.model,name:account.model_account_fiscal_position_account_template
|
||||
msgid "Template Account Fiscal Mapping"
|
||||
msgstr ""
|
||||
msgstr "Template Akun Pemetaan Fiskal"
|
||||
|
||||
#. module: account
|
||||
#: field:account.chart.template,property_account_expense:0
|
||||
msgid "Expense Account on Product Template"
|
||||
msgstr ""
|
||||
msgstr "Beban Account pada Template Produk"
|
||||
|
||||
#. module: account
|
||||
#: field:account.analytic.line,amount_currency:0
|
||||
|
@ -9762,13 +9763,13 @@ msgstr ""
|
|||
#: code:addons/account/wizard/account_report_aged_partner_balance.py:55
|
||||
#, python-format
|
||||
msgid "You must enter a period length that cannot be 0 or below !"
|
||||
msgstr ""
|
||||
msgstr "Jumlah mata uang"
|
||||
|
||||
#. module: account
|
||||
#: code:addons/account/account.py:501
|
||||
#, python-format
|
||||
msgid "You cannot remove an account which has account entries!. "
|
||||
msgstr ""
|
||||
msgstr "Anda tidak dapat menghapus akun yang akunnya sudah tercatat "
|
||||
|
||||
#. module: account
|
||||
#: model:ir.actions.act_window,help:account.action_account_form
|
||||
|
@ -9788,8 +9789,8 @@ msgid ""
|
|||
"The residual amount on a receivable or payable of a journal entry expressed "
|
||||
"in its currency (maybe different of the company currency)."
|
||||
msgstr ""
|
||||
"Jumlah sisa piutang/ hutang dari catatan jurnal dinyatakan dalam mata "
|
||||
"uangnya (yang mungkin berbeda dari mata uang perusahaan)."
|
||||
"Jumlah residual pada piutang / hutang dari catatan jurnal dinyatakan dalam "
|
||||
"mata uang (mungkin berbeda dari mata uang perusahaan)."
|
||||
|
||||
#~ msgid "Asset"
|
||||
#~ msgstr "Aktiva"
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
<filter string="Salesman" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True,'residual_invisible':True}"/>
|
||||
<filter string="Category of Product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/>
|
||||
<filter string="Category of Product" name="category_product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/>
|
||||
|
@ -139,7 +139,7 @@
|
|||
<field name="res_model">account.invoice.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="context">{'search_default_current':1, 'search_default_partner':1, 'search_default_customer':1, 'search_default_date': time.strftime('%Y-01-01'), 'group_by':[], 'group_by_no_leaf':1,}</field>
|
||||
<field name="context">{'search_default_current':1, 'search_default_category_product':1, 'search_default_customer':1, 'search_default_date': time.strftime('%Y-01-01'), 'group_by':[], 'group_by_no_leaf':1,}</field>
|
||||
<field name="search_view_id" ref="view_account_invoice_report_search"/>
|
||||
<field name="help">From this report, you can have an overview of the amount invoiced to your customer as well as payment delays. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field>
|
||||
|
||||
|
|
|
@ -142,16 +142,16 @@
|
|||
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
|
||||
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para>
|
||||
<pto_header><!-- Must be after setLang() -->
|
||||
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
|
||||
<tr>
|
||||
<td> <para style="terp_tblheader_Details">Description</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Price</para> </td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
|
||||
<tr>
|
||||
<td> <para style="terp_tblheader_Details">Description</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
|
||||
<td> <para style="terp_tblheader_Details_Right">Price</para> </td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</pto_header>
|
||||
<blockTable colWidths="297.0,233.0" style="Table_Partner_Address">
|
||||
<tr>
|
||||
|
@ -194,7 +194,7 @@
|
|||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Invoice Date</para>
|
||||
</td>
|
||||
<td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Origin</para>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -210,7 +210,7 @@
|
|||
<td>
|
||||
<para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_9">[[ o.origin or '' ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: account_invoice_layout
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: analytic
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: anonymization
|
||||
|
|
|
@ -44,11 +44,11 @@
|
|||
<group col="3" colspan="2" attrs="{'invisible': [('trg_date_type', '=', 'none')]}">
|
||||
<field name="trg_date_range" string="Delay After Trigger Date"/>
|
||||
<field name="trg_date_range_type" nolabel="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<separator colspan="4" string="Note"/>
|
||||
<label align="0.0" colspan="4" width="900"
|
||||
string="The rule uses the AND operator. The model must match all non-empty fields so that the rule executes the action described in the 'Actions' tab." />
|
||||
string="The rule uses the AND operator. The model must match all non-empty fields so that the rule executes the action described in the 'Actions' tab." />
|
||||
</page>
|
||||
<page string="Actions">
|
||||
<separator colspan="4" string="Fields to Change"/>
|
||||
|
@ -74,7 +74,7 @@
|
|||
<field colspan="4" name="act_email_cc"/>
|
||||
<separator colspan="4" string="Email Body"/>
|
||||
<field colspan="4" name="act_mail_body" height="250"
|
||||
nolabel="1" attrs="{'required':[('act_remind_user','=',True)]}" />
|
||||
nolabel="1" attrs="{'required':[('act_remind_user','=',True)]}" />
|
||||
<separator colspan="4" string="Special Keywords to Be Used in The Body"/>
|
||||
<label align="0.0" string="%%(object_id)s = Object ID" colspan="2"/>
|
||||
<label align="0.0" string="%%(object_subject)s = Object subject" colspan="2"/>
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: caldav
|
||||
|
|
|
@ -218,12 +218,14 @@ class crm_case(object):
|
|||
def stage_change(self, cr, uid, ids, context=None, order='sequence'):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
stage_pool = self.pool.get('crm.case.stage')
|
||||
stage_type = context and context.get('stage_type','')
|
||||
current_seq = False
|
||||
next_stage_id = False
|
||||
|
||||
for case in self.browse(cr, uid, ids, context=context):
|
||||
|
||||
next_stage = False
|
||||
value = {}
|
||||
if case.section_id.id :
|
||||
|
@ -281,13 +283,12 @@ class crm_case(object):
|
|||
@param part: Partner's id
|
||||
@email: Partner's email ID
|
||||
"""
|
||||
if not part:
|
||||
return {'value': {'partner_address_id': False,
|
||||
'email_from': False,
|
||||
'phone': False
|
||||
}}
|
||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
||||
data = {'partner_address_id': addr['contact']}
|
||||
data={}
|
||||
if part:
|
||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
||||
data = {'partner_address_id': addr['contact']}
|
||||
|
||||
#<<<<<<<<<<= MERGE
|
||||
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
|
||||
return {'value': data}
|
||||
|
||||
|
|
|
@ -246,46 +246,28 @@ class crm_lead(crm_case, osv.osv):
|
|||
context.update({'active_ids': ids})
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_action')
|
||||
value = {}
|
||||
|
||||
view_id = False
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
|
||||
for case in self.browse(cr, uid, ids):
|
||||
for case in self.browse(cr, uid, ids, context=context):
|
||||
context.update({'active_id': case.id})
|
||||
if not case.partner_id:
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_partner')
|
||||
view_id1 = False
|
||||
if data_id:
|
||||
view_id1 = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
value = {
|
||||
'name': _('Create Partner'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity.partner',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id1, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy': True
|
||||
}
|
||||
break
|
||||
else:
|
||||
value = {
|
||||
'name': _('Create Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity.action',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy': True
|
||||
}
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_partner')
|
||||
view_id1 = False
|
||||
if data_id:
|
||||
view_id1 = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
value = {
|
||||
'name': _('Create Partner'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity.partner',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id1, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy': True
|
||||
}
|
||||
return value
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
|
@ -294,6 +276,17 @@ class crm_lead(crm_case, osv.osv):
|
|||
|
||||
if 'date_closed' in vals:
|
||||
return super(crm_lead,self).write(cr, uid, ids, vals, context=context)
|
||||
|
||||
if 'stage_id' in vals and vals['stage_id']:
|
||||
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
|
||||
self.history(cr, uid, ids, _("Changed Stage to: ") + stage_obj.name, details=_("Changed Stage to: ") + stage_obj.name)
|
||||
message=''
|
||||
for case in self.browse(cr, uid, ids, context=context):
|
||||
if case.type == 'lead' or context.get('stage_type',False)=='lead':
|
||||
message = _("The stage of lead '%s' has been changed to '%s'.") % (case.name, stage_obj.name)
|
||||
elif case.type == 'opportunity':
|
||||
message = _("The stage of opportunity '%s' has been changed to '%s'.") % (case.name, stage_obj.name)
|
||||
self.log(cr, uid, case.id, message)
|
||||
return super(crm_lead,self).write(cr, uid, ids, vals, context)
|
||||
|
||||
def stage_historize(self, cr, uid, ids, stage, context=None):
|
||||
|
@ -310,16 +303,21 @@ class crm_lead(crm_case, osv.osv):
|
|||
def stage_next(self, cr, uid, ids, context=None):
|
||||
stage = super(crm_lead, self).stage_next(cr, uid, ids, context=context)
|
||||
if stage:
|
||||
self.stage_historize(cr, uid, ids, stage, context=context)
|
||||
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, stage, context=context)
|
||||
if stage_obj.on_change:
|
||||
data = {'probability': stage_obj.probability}
|
||||
self.write(cr, uid, ids, data)
|
||||
return stage
|
||||
|
||||
def stage_previous(self, cr, uid, ids, context=None):
|
||||
stage = super(crm_lead, self).stage_previous(cr, uid, ids, context)
|
||||
stage = super(crm_lead, self).stage_previous(cr, uid, ids, context=context)
|
||||
if stage:
|
||||
self.stage_historize(cr, uid, ids, stage, context=context)
|
||||
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, stage, context=context)
|
||||
if stage_obj.on_change:
|
||||
data = {'probability': stage_obj.probability}
|
||||
self.write(cr, uid, ids, data)
|
||||
return stage
|
||||
|
||||
|
||||
def message_new(self, cr, uid, msg, context=None):
|
||||
"""
|
||||
Automatically calls when new email message arrives
|
||||
|
@ -417,12 +415,12 @@ class crm_lead(crm_case, osv.osv):
|
|||
if optin:
|
||||
return {'value':{'optin':optin,'optout':False}}
|
||||
return {}
|
||||
|
||||
|
||||
def on_chnage_optout(self, cr, uid, ids, optout):
|
||||
if optout:
|
||||
return {'value':{'optout':optout,'optin':False}}
|
||||
return {}
|
||||
|
||||
|
||||
crm_lead()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -104,8 +104,12 @@
|
|||
<field name="state_id"/>
|
||||
</group>
|
||||
<group colspan="2" col="3">
|
||||
<separator string="Communication History" colspan="4" col="3"/>
|
||||
<separator string="Communication" colspan="4" col="3"/>
|
||||
<field name="email_from" widget="email"/>
|
||||
<button string="Send Email"
|
||||
name="%(emails.action_email_compose_message_wizard)d"
|
||||
context="{'email_model':'crm.lead'}"
|
||||
icon="terp-mail-message-new" type="action" colspan="1"/>
|
||||
<newline/>
|
||||
<field name="phone"/>
|
||||
<newline/>
|
||||
|
@ -114,7 +118,7 @@
|
|||
<field name="mobile"/>
|
||||
<newline/>
|
||||
<separator string="Links" colspan="4" col="3"/>
|
||||
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" string="Customer"/>
|
||||
<field name="partner_id" string="Customer"/>
|
||||
<button
|
||||
name="%(action_crm_lead2partner)d"
|
||||
icon="terp-partner" type="action"
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
domain="[('type','=','opportunity'),('section_ids', '=', section_id)]"/>
|
||||
<button name="stage_previous"
|
||||
states="draft,open,pending" type="object"
|
||||
icon="gtk-go-back" string="" />
|
||||
icon="gtk-go-back" string="" context="{'stage_type': 'opportunity'}"/>
|
||||
<button name="stage_next" states="draft,open,pending"
|
||||
type="object" icon="gtk-go-forward" string="" context="{'stage_type': 'opportunity'}"/>
|
||||
</group>
|
||||
|
@ -57,8 +57,15 @@
|
|||
string="Contact"
|
||||
on_change="onchange_partner_address_id(partner_address_id, email_from)"
|
||||
colspan="1" />
|
||||
<field name="email_from" string="Email" />
|
||||
<group col="3" colspan="2">
|
||||
<field name="email_from" string="Email" />
|
||||
<button string="Send Email"
|
||||
name="%(emails.action_email_compose_message_wizard)d"
|
||||
context="{'email_model': 'crm.lead'}"
|
||||
icon="terp-mail-message-new" type="action"/>
|
||||
</group>
|
||||
<field name="phone"/>
|
||||
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator colspan="2" string="Categorization"/>
|
||||
|
@ -148,21 +155,21 @@
|
|||
<field name="date"/>
|
||||
<field name="email_to" size="512"/>
|
||||
<field name="email_cc" size="512"/>
|
||||
<field name="name" colspan="4"/>
|
||||
<field name="name" colspan="4" attrs="{'invisible': [('history', '=', True)]}"/>
|
||||
<field name="display_text" colspan="4" attrs="{'invisible': [('history', '=', False)]}"/>
|
||||
<field name="history" invisible="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Details">
|
||||
<group attrs="{'invisible': [('history', '!=', True)]}">
|
||||
<field name="description" colspan="4" nolabel="1" height="250"/>
|
||||
<button colspan="4" string="Reply"
|
||||
name="%(emails.action_email_compose_message_wizard)d"
|
||||
context="{'mail':'reply', 'message_id':active_id}"
|
||||
icon="terp-mail-replied" type="action"/>
|
||||
</group>
|
||||
<group attrs="{'invisible': [('history', '=', True)]}">
|
||||
<field name="display_text" colspan="4" nolabel="1" height="250"/>
|
||||
<field name="description" colspan="4" nolabel="1"/>
|
||||
<group attrs="{'invisible': [('history', '!=', True)]}">
|
||||
<button colspan="4"
|
||||
string="Reply"
|
||||
name="%(emails.action_email_compose_message_wizard)d"
|
||||
context="{'mail':'reply', 'message_id':active_id}"
|
||||
icon="terp-mail-replied" type="action" />
|
||||
</group>
|
||||
|
||||
</page>
|
||||
<page string="Attachments">
|
||||
<field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
|
||||
|
@ -321,6 +328,7 @@
|
|||
<filter string="Salesman" icon="terp-personal"
|
||||
domain="[]" context="{'group_by':'user_id'}" />
|
||||
<filter string="Team" help="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}"/>
|
||||
<filter string="Customer" help="Partner" icon="terp-personal+" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Stage" icon="terp-stage" domain="[]"
|
||||
context="{'group_by':'stage_id'}" />
|
||||
|
@ -361,5 +369,7 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: crm
|
||||
|
|
|
@ -87,9 +87,9 @@ class crm_lead_report(osv.osv):
|
|||
CREATE OR REPLACE VIEW crm_lead_report AS (
|
||||
SELECT
|
||||
id,
|
||||
to_char(c.create_date, 'YYYY') as name,
|
||||
to_char(c.create_date, 'MM') as month,
|
||||
to_char(c.create_date, 'YYYY-MM-DD') as day,
|
||||
to_char(c.date_deadline, 'YYYY') as name,
|
||||
to_char(c.date_deadline, 'MM') as month,
|
||||
to_char(c.date_deadline, 'YYYY-MM-DD') as day,
|
||||
to_char(c.create_date, 'YYYY-MM-DD') as creation_date,
|
||||
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
|
||||
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
||||
|
|
|
@ -71,6 +71,15 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Leads Analysis">
|
||||
<group col="20" colspan="8">
|
||||
<filter icon="terp-personal"
|
||||
string="Lead"
|
||||
domain="[('type','=', 'lead')]"
|
||||
help="Show only lead"/>
|
||||
<filter icon="terp-personal+"
|
||||
string="Opportunity"
|
||||
domain="[('type','=','opportunity')]"
|
||||
help="Show only opportunity"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string=" Year " icon="terp-go-year"
|
||||
domain="[('create_date','<=', time.strftime('%%Y-%%m-%%d')),('create_date','>=',time.strftime('%%Y-01-01'))]"
|
||||
help="Leads/Opportunities created in current year"/>
|
||||
|
@ -133,7 +142,7 @@
|
|||
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" />
|
||||
<filter string="Company" icon="terp-go-home"
|
||||
domain="[]"
|
||||
context="{'group_by':'company_id'}"
|
||||
context="{'group_by':'company_id'}"
|
||||
groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical" />
|
||||
<filter string="Stage" name="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
|
|
|
@ -60,24 +60,12 @@
|
|||
-
|
||||
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_0}:
|
||||
action: 'create'
|
||||
-
|
||||
I click on "Continue" button of this wizard.
|
||||
-
|
||||
!python {model: crm.lead2opportunity.partner}: |
|
||||
self.make_partner(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")]})
|
||||
-
|
||||
Now, I give value to this wizard field.
|
||||
-
|
||||
!record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}:
|
||||
name: Capegemini
|
||||
planned_revenue: 0.00
|
||||
probability: 0.00
|
||||
name: 'convert'
|
||||
-
|
||||
Then, Click on "Create Opportunity" button of this wizard.
|
||||
-
|
||||
!python {model: crm.lead2opportunity}: |
|
||||
self.action_apply(cr, uid, [ref('crm_lead2opportunity_stonage_0')], {'active_id': ref('crm_lead_newcustomer0')})
|
||||
|
||||
!python {model: crm.lead2opportunity.partner}: |
|
||||
self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
|
||||
- |
|
||||
In order to check the opportunity is created or not, I check type.
|
||||
-
|
||||
|
|
|
@ -32,15 +32,14 @@
|
|||
-
|
||||
I find that this lead can be converted to opportunity.
|
||||
-
|
||||
!record {model: crm.lead2opportunity, id: crm_lead2opportunity0}:
|
||||
name: OpenERP Presentation
|
||||
probability: 60.0
|
||||
planned_revenue: 45000.0
|
||||
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner0}:
|
||||
action: 'create'
|
||||
name: 'convert'
|
||||
-
|
||||
So I convert the lead to opportunity.
|
||||
-
|
||||
!python {model: crm.lead2opportunity}: |
|
||||
self.action_apply(cr, uid, [ref('crm_lead2opportunity0')], context={'active_id': ref('crm_lead_openerppresentation0')})
|
||||
!python {model: crm.lead2opportunity.partner}: |
|
||||
self.action_apply(cr, uid, [ref('crm_lead2opportunity_partner0')], context={'active_ids': [ref('crm_lead_openerppresentation0')]})
|
||||
-
|
||||
I check that lead is now converted to opportunity.
|
||||
-
|
||||
|
|
|
@ -47,7 +47,7 @@ class crm_add_note(osv.osv_memory):
|
|||
attach = [
|
||||
(x.name, base64.decodestring(x.binary)) for x in obj.attachment_ids
|
||||
]
|
||||
case_pool.history(cr, uid, [case], _("Note"), history=False,
|
||||
case_pool.history(cr, uid, [case], self.pool.get('email.message').truncate_data(cr, uid, obj.body, context=context), history=False,
|
||||
details=obj.body, email_from=user_name, attach=attach)
|
||||
|
||||
if obj.state == 'unchanged':
|
||||
|
|
|
@ -9,24 +9,9 @@
|
|||
<field name="model">crm.add.note</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Add Note" col="4">
|
||||
<separator string="Add Note" colspan="6"/>
|
||||
<notebook colspan="6">
|
||||
<page string="Note">
|
||||
<field name="body" nolabel="1" colspan="4" default_focus="1"/>
|
||||
</page>
|
||||
<page string="Attachments">
|
||||
<field name="attachment_ids" colspan="4" nolabel="1">
|
||||
<form string="Attachment">
|
||||
<field name="binary" filename="name" />
|
||||
<field name="name" />
|
||||
</form>
|
||||
<tree string="Attachments">
|
||||
<field name="name" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
<form string="Add Note">
|
||||
<separator string="Add Note" colspan="4" />
|
||||
<field name="body" nolabel="1" colspan="4" default_focus="1"/>
|
||||
<separator string="" colspan="6"/>
|
||||
<group colspan="6" col="4" >
|
||||
<field name="state" />
|
||||
|
|
|
@ -22,22 +22,106 @@
|
|||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
|
||||
import time
|
||||
|
||||
class crm_lead2opportunity(osv.osv_memory):
|
||||
_name = 'crm.lead2opportunity'
|
||||
_description = 'Lead To Opportunity'
|
||||
class crm_lead2opportunity_partner(osv.osv_memory):
|
||||
_name = 'crm.lead2opportunity.partner'
|
||||
_description = 'Lead To Opportunity Partner'
|
||||
_inherit = 'crm.lead2partner'
|
||||
|
||||
def action_cancel(self, cr, uid, ids, context=None):
|
||||
_columns = {
|
||||
'action': fields.selection([('exist', 'Link to an existing partner'), \
|
||||
('create', 'Create a new partner'), \
|
||||
('nothing', 'Do not link to a partner')], \
|
||||
'Action', required=True),
|
||||
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
|
||||
'opportunity_ids': fields.many2many('crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id', 'Opportunities', domain=[('type', '=', 'opportunity')]),
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
Closes Lead To Opportunity form
|
||||
Default get for name, opportunity_ids
|
||||
if there is an exisitng partner link to the lead, find all existing opportunity link with this partnet to merge
|
||||
all information together
|
||||
"""
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
|
||||
|
||||
res = super(crm_lead2opportunity_partner, self).default_get(cr, uid, fields, context=context)
|
||||
opportunities = res.get('opportunity_ids') or []
|
||||
|
||||
partner_id = False
|
||||
for lead in lead_obj.browse(cr, uid, opportunities, context=context):
|
||||
partner_id = lead.partner_id and lead.partner_id.id or False
|
||||
|
||||
if not partner_id and res.get('partner_id'):
|
||||
partner_id = res.get('partner_id')
|
||||
|
||||
ids = []
|
||||
if partner_id:
|
||||
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', '=', 'opportunity')])
|
||||
opportunities += ids
|
||||
|
||||
if 'action' in fields:
|
||||
res.update({'action' : partner_id and 'exist' or 'create'})
|
||||
if 'partner_id' in fields:
|
||||
res.update({'partner_id' : partner_id})
|
||||
if 'name' in fields:
|
||||
res.update({'name' : ids and 'merge' or 'convert'})
|
||||
if 'opportunity_ids' in fields:
|
||||
res.update({'opportunity_ids': opportunities})
|
||||
|
||||
|
||||
return res
|
||||
|
||||
def view_init(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function checks for precondition before wizard executes
|
||||
@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 ids: List of Lead to Partner's IDs
|
||||
@param fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
"""
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
if context is None:
|
||||
context = {}
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||
if lead.state in ['done', 'cancel']:
|
||||
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
|
||||
Leads Could not convert into Opportunity"))
|
||||
return False
|
||||
|
||||
def _convert(self, cr, uid, ids, lead, partner_id, stage_ids, context=None):
|
||||
leads = self.pool.get('crm.lead')
|
||||
address_id = self.pool.get('res.partner.address').search(cr, uid,
|
||||
[('partner_id', '=', partner_id)],
|
||||
order='create_date desc',
|
||||
limit=1)
|
||||
vals = {
|
||||
'planned_revenue': lead.planned_revenue,
|
||||
'probability': lead.probability,
|
||||
'name': lead.name,
|
||||
'partner_id': partner_id,
|
||||
'user_id': (lead.user_id and lead.user_id.id),
|
||||
'type': 'opportunity',
|
||||
'stage_id': stage_ids and stage_ids[0] or False,
|
||||
'date_action': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
}
|
||||
if address_id:
|
||||
vals['partner_address_id'] = address_id[0]
|
||||
|
||||
lead.write(vals, context=context)
|
||||
leads.history(cr, uid, [lead], _('Converted to opportunity'), details='Converted to Opportunity', context=context)
|
||||
if lead.partner_id:
|
||||
msg_ids = [ x.id for x in lead.message_ids]
|
||||
self.pool.get('email.message').write(cr, uid, msg_ids, {
|
||||
'partner_id': lead.partner_id.id
|
||||
}, context=context)
|
||||
leads.log(cr, uid, lead.id, _("Lead '%s' has been converted to an opportunity.") % lead.name)
|
||||
|
||||
|
||||
def action_apply(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
|
@ -46,7 +130,7 @@ class crm_lead2opportunity(osv.osv_memory):
|
|||
|
||||
@return : View dictionary opening the Opportunity form view
|
||||
"""
|
||||
record_id = context and context.get('active_id') or False
|
||||
record_id = context and context.get('active_ids') or False
|
||||
if not record_id:
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
@ -69,30 +153,24 @@ class crm_lead2opportunity(osv.osv_memory):
|
|||
opportunity_view_tree = models_data.browse(
|
||||
cr, uid, opportunity_view_tree, context=context).res_id
|
||||
|
||||
lead = leads.browse(cr, uid, record_id, context=context)
|
||||
if(lead.section_id):
|
||||
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1), ('section_ids','=', lead.section_id.id)])
|
||||
else:
|
||||
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1)])
|
||||
for this in self.browse(cr, uid, ids, context=context):
|
||||
vals ={
|
||||
'planned_revenue': this.planned_revenue,
|
||||
'probability': this.probability,
|
||||
'name': this.name,
|
||||
'partner_id': this.partner_id.id,
|
||||
'user_id': (this.partner_id.user_id and this.partner_id.user_id.id) or (lead.user_id and lead.user_id.id),
|
||||
'type': 'opportunity',
|
||||
'stage_id': stage_ids and stage_ids[0] or False
|
||||
}
|
||||
lead.write(vals, context=context)
|
||||
leads.history(cr, uid, [lead], _('Opportunity'), details='Converted to Opportunity', context=context)
|
||||
if lead.partner_id:
|
||||
msg_ids = [ x.id for x in lead.message_ids]
|
||||
self.pool.get('email.message').write(cr, uid, msg_ids, {
|
||||
'partner_id': lead.partner_id.id
|
||||
}, context=context)
|
||||
leads.log(cr, uid, lead.id,
|
||||
_("Lead '%s' has been converted to an opportunity.") % lead.name)
|
||||
for lead in leads.browse(cr, uid, record_id, context=context):
|
||||
if(lead.section_id):
|
||||
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1), ('section_ids','=', lead.section_id.id)])
|
||||
else:
|
||||
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1)])
|
||||
|
||||
data = self.browse(cr, uid, ids[0], context=context)
|
||||
partner_ids = []
|
||||
if data.action == 'create':
|
||||
partner_ids = self._create_partner(cr, uid, ids, context=context)
|
||||
|
||||
partner_id = partner_ids and partner_ids[0] or data.partner_id.id
|
||||
self._convert(cr, uid, ids, lead, partner_id, stage_ids, context=context)
|
||||
if data.name == 'merge':
|
||||
merge_obj = self.pool.get('crm.merge.opportunity')
|
||||
self.write(cr, uid, ids, {'opportunity_ids' : [(6,0, [data.opportunity_ids[0].id])]}, context=context)
|
||||
context.update({'lead_ids' : record_id})
|
||||
return merge_obj.merge(cr, uid, data.opportunity_ids, context=context)
|
||||
|
||||
return {
|
||||
'name': _('Opportunity'),
|
||||
|
@ -109,220 +187,6 @@ class crm_lead2opportunity(osv.osv_memory):
|
|||
'search_view_id': opportunity_view_search
|
||||
}
|
||||
|
||||
_columns = {
|
||||
'name' : fields.char('Opportunity', size=64, required=True, select=1),
|
||||
'probability': fields.float('Success Rate (%)'),
|
||||
'planned_revenue': fields.float('Expected Revenue'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
}
|
||||
|
||||
def view_init(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function checks for precondition before wizard executes
|
||||
@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 fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||
if lead.state in ['done', 'cancel']:
|
||||
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
|
||||
Leads Could not convert into Opportunity"))
|
||||
return False
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function gets default values
|
||||
@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 fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
@return : default values of fields.
|
||||
"""
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
data = context and context.get('active_ids', []) or []
|
||||
res = super(crm_lead2opportunity, self).default_get(cr, uid, fields, context=context)
|
||||
for lead in lead_obj.browse(cr, uid, data, context=context):
|
||||
if 'name' in fields:
|
||||
res.update({'name': lead.name})
|
||||
if 'partner_id' in fields:
|
||||
res.update({'partner_id': lead.partner_id.id or False})
|
||||
return res
|
||||
|
||||
crm_lead2opportunity()
|
||||
|
||||
|
||||
class crm_lead2opportunity_partner(osv.osv_memory):
|
||||
_name = 'crm.lead2opportunity.partner'
|
||||
_description = 'Lead To Opportunity Partner'
|
||||
_inherit = 'crm.lead2partner'
|
||||
|
||||
_columns = {
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'action': fields.selection([('exist', 'Link to an existing partner'), ('create', 'Create a new partner'), ('no','Do not create a partner')], 'Action'),
|
||||
}
|
||||
|
||||
def make_partner(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function Makes partner based on action.
|
||||
@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 ids: List of Lead to Partner's IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
@return : Dictionary value for created Partner form.
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
partner_ids = self._create_partner(cr, uid, ids, context=context)
|
||||
value = {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_action')
|
||||
view_id = False
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
|
||||
context.update({'partner_id': partner_ids})
|
||||
value = {
|
||||
'name': _('Create Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity.action',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
}
|
||||
return value
|
||||
|
||||
def action_skip(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This skips partner creation
|
||||
@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 ids: List of Lead to Opportunity IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
@return : Dictionary value for Opportunity form
|
||||
"""
|
||||
value = {}
|
||||
if context is None:
|
||||
context = {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_create')
|
||||
view_id = False
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
|
||||
context.update({'partner_id': False})
|
||||
value = {
|
||||
'name': _('Create Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
}
|
||||
return value
|
||||
|
||||
|
||||
def view_init(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function checks for precondition before wizard executes
|
||||
@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 fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
|
||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||
if lead.state in ['done', 'cancel']:
|
||||
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
|
||||
Leads Could not convert into Opportunity"))
|
||||
return False
|
||||
|
||||
crm_lead2opportunity_partner()
|
||||
|
||||
class crm_lead2opportunity_action(osv.osv_memory):
|
||||
'''
|
||||
Merge with Existing Opportunity or Convert to Opportunity
|
||||
'''
|
||||
_name = 'crm.lead2opportunity.action'
|
||||
_description = 'Convert/Merge Opportunity'
|
||||
_columns = {
|
||||
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
|
||||
}
|
||||
_defaults = {
|
||||
'name': 'convert',
|
||||
}
|
||||
def do_action(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function opens form according to selected Action
|
||||
@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 ids: List of Lead to Opportunity IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return : Dictionary value for Opportunity form
|
||||
"""
|
||||
value = {}
|
||||
if context is None:
|
||||
context = {}
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
view_id = False
|
||||
for this in self.browse(cr, uid, ids, context=context):
|
||||
if this.name == 'convert':
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_create')
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
value = {
|
||||
'name': _('Create Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.lead2opportunity',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
}
|
||||
elif this.name == 'merge':
|
||||
data_id = data_obj._get_id(cr, uid, 'crm', 'merge_opportunity_form')
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
value = {
|
||||
'name': _('Merge with Existing Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'crm.merge.opportunity',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
}
|
||||
return value
|
||||
|
||||
crm_lead2opportunity_action()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -1,85 +1,38 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- Lead to Opportunity view -->
|
||||
|
||||
<record id="view_crm_lead2opportunity_create" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.create</field>
|
||||
<field name="model">crm.lead2opportunity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Convert To Opportunity">
|
||||
<field name="name"/>
|
||||
<group attrs="{'invisible':[('partner_id','=',False)]}" col="2" colspan="2">
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<field name="planned_revenue"/>
|
||||
<field name="probability"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<label string="" colspan="2"/>
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-go-forward"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Lead to Opportunity action -->
|
||||
|
||||
<record id="action_crm_lead2opportunity" model="ir.actions.act_window">
|
||||
<field name="name">Create Opportunity</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">crm.lead2opportunity</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_crm_lead2opportunity_partner" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.partner.form</field>
|
||||
<field name="model">crm.lead2opportunity.partner</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create a Partner">
|
||||
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<group colspan="4" col="1" attrs="{'invisible':[('msg','=',False)]}">
|
||||
<field name="msg" colspan="4" nolabel="1" height="50"/>
|
||||
</group>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
|
||||
</group>
|
||||
<separator string="" colspan="4" />
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="make_partner" string="Continue" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_crm_lead2opportunity_action" model="ir.ui.view">
|
||||
<field name="name">crm.lead2opportunity.action.form</field>
|
||||
<field name="model">crm.lead2opportunity.action</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Select Action">
|
||||
<separator string="Select Action" colspan="4" />
|
||||
<label string="If you select Merge with existing Opportunity, the lead details(with the communication history) will be merged with existing Opportunity of Selected partner." colspan="4"/>
|
||||
<newline/>
|
||||
<field name="name" colspan="4"/>
|
||||
<separator colspan="4" />
|
||||
<group col="4" colspan="4">
|
||||
<label colspan="2"/>
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="do_action" string="Next" type="object" icon="gtk-go-forward"/>
|
||||
</group>
|
||||
</form>
|
||||
<form string="Convert to Opportunity">
|
||||
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
|
||||
</group>
|
||||
<separator string="Convert to Opportunity" colspan="4"/>
|
||||
<field name="name" colspan="4"/>
|
||||
<group col="4" colspan="4" attrs="{'invisible': [('name', '=', 'convert')]}" >
|
||||
<separator string="Select Opportunities" colspan="4" />
|
||||
</group>
|
||||
<field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
|
||||
<tree>
|
||||
<field name="name" />
|
||||
<field name="partner_id" />
|
||||
<field name="user_id" />
|
||||
<field name="section_id" />
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
<separator string="" colspan="4" />
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -34,8 +34,7 @@ class crm_lead2partner(osv.osv_memory):
|
|||
('create', 'Create a new partner')], \
|
||||
'Action', required=True),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'msg': fields.text('Message', readonly=True)
|
||||
}
|
||||
}
|
||||
|
||||
def view_init(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
|
@ -66,6 +65,7 @@ class crm_lead2partner(osv.osv_memory):
|
|||
|
||||
@return : default values of fields.
|
||||
"""
|
||||
|
||||
lead_obj = self.pool.get('crm.lead')
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
contact_obj = self.pool.get('res.partner.address')
|
||||
|
@ -80,8 +80,8 @@ class crm_lead2partner(osv.osv_memory):
|
|||
email = re.findall(r'([^ ,<@]+@[^> ,]+)', lead.email_from or '')
|
||||
email = map(lambda x: "'" + x + "'", email)
|
||||
if email:
|
||||
cr.execute("""select id from res_partner_address
|
||||
where
|
||||
cr.execute("""select id from res_partner_address
|
||||
where
|
||||
substring(email from '([^ ,<@]+@[^> ,]+)') in (%s)""" % (','.join(email)))
|
||||
address_ids = map(lambda x: x[0], cr.fetchall())
|
||||
if address_ids:
|
||||
|
@ -92,38 +92,20 @@ class crm_lead2partner(osv.osv_memory):
|
|||
if not partner_ids and lead.partner_name:
|
||||
partner_ids = partner_obj.search(cr, uid, [('name', '=', lead.partner_name)], context=context)
|
||||
if not partner_ids:
|
||||
cr.execute("""SELECT p.id from res_partner p
|
||||
cr.execute("""SELECT p.id from res_partner p
|
||||
where regexp_replace(lower(p.name), '[^a-z]*', '', 'g') = regexp_replace(%s, '[^a-z]*', '', 'g')""", (lead.name.lower(), ))
|
||||
partner_ids = map(lambda x: x[0], cr.fetchall())
|
||||
partner_id = partner_ids and partner_ids[0] or False
|
||||
|
||||
if not partner_id:
|
||||
label = False
|
||||
opp_ids = []
|
||||
if email:
|
||||
# Find email of existing opportunity matches the email_from of the lead
|
||||
cr.execute("""select id from crm_lead
|
||||
where type='opportunity' and
|
||||
substring(email_from from '([^ ,<@]+@[^> ,]+)') in (%s)""" % (','.join(email)))
|
||||
opp_ids = map(lambda x:x[0], cr.fetchall())
|
||||
label = opp_ids and 'email' or False
|
||||
if not opp_ids:
|
||||
# Find name of existing opportunity matches the name of the lead
|
||||
cr.execute("""SELECT l.id from crm_lead l
|
||||
where type = 'opportunity' and
|
||||
regexp_replace(lower(l.name), '[^a-z]*', '', 'g') = regexp_replace(%s, '[^a-z]*', '', 'g')""", (lead.name.lower(), ))
|
||||
opp_ids = map(lambda x: x[0], cr.fetchall())
|
||||
label = opp_ids and 'name' or False
|
||||
if label:
|
||||
res.update({'msg': "An existing opportunity seems to match the %s of this lead, you should double-check before converting it." % (label)})
|
||||
|
||||
if 'partner_id' in fields:
|
||||
res.update({'partner_id': partner_id})
|
||||
if 'action' in fields:
|
||||
res.update({'action': partner_id and 'exist' or 'create'})
|
||||
if 'opportunity_ids' in fields:
|
||||
res.update({'opportunity_ids': data})
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def open_create_partner(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function Opens form of create partner.
|
||||
|
@ -203,18 +185,15 @@ class crm_lead2partner(osv.osv_memory):
|
|||
if data.partner_id:
|
||||
partner_id = data.partner_id.id
|
||||
contact_id = partner_obj.address_get(cr, uid, [partner_id])['default']
|
||||
|
||||
self.assign_partner(cr, uid, lead.id, partner_id)
|
||||
partner_ids.append(partner_id)
|
||||
|
||||
if data.action<>'no':
|
||||
vals = {}
|
||||
if partner_id:
|
||||
vals.update({'partner_id': partner_id})
|
||||
if contact_id:
|
||||
vals.update({'partner_address_id': contact_id})
|
||||
lead_obj.write(cr, uid, [lead.id], vals)
|
||||
return partner_ids
|
||||
|
||||
|
||||
def assign_partner(self, cr, uid, lead_id, partner_id):
|
||||
self.pool.get("crm.lead").write(cr, uid, [lead_id], {'partner_id' : partner_id})
|
||||
|
||||
|
||||
def make_partner(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function Makes partner based on action.
|
||||
|
@ -233,19 +212,8 @@ class crm_lead2partner(osv.osv_memory):
|
|||
mod_obj = self.pool.get('ir.model.data')
|
||||
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
|
||||
res = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
|
||||
value = {
|
||||
'domain': "[]",
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'res.partner',
|
||||
'res_id': partner_ids and int(partner_ids[0]) or False,
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'type': 'ir.actions.act_window',
|
||||
'search_view_id': res['res_id']
|
||||
}
|
||||
return value
|
||||
print partner_ids
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
crm_lead2partner()
|
||||
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Create a Partner">
|
||||
<separator string="Create a Partner" colspan="4" />
|
||||
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
|
||||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
|
||||
|
@ -25,9 +23,9 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Lead to Partner wizard -->
|
||||
|
||||
<record id="action_crm_lead2partner" model="ir.actions.act_window">
|
||||
|
||||
<!-- Lead to Partner wizard -->
|
||||
<record id="action_crm_lead2partner" model="ir.actions.act_window">
|
||||
<field name="name">Create a Partner</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">crm.lead2partner</field>
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from crm import crm
|
||||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
|
||||
|
@ -28,91 +27,175 @@ class crm_merge_opportunity(osv.osv_memory):
|
|||
_name = 'crm.merge.opportunity'
|
||||
_description = 'Merge two Opportunities'
|
||||
|
||||
def view_init(self, cr, uid, fields, context=None):
|
||||
"""
|
||||
This function checks for precondition before wizard executes
|
||||
@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 fields: List of fields for default value
|
||||
@param context: A standard dictionary for contextual values
|
||||
def _get_first_not_null_id(self, attr, ops):
|
||||
for op in ops:
|
||||
if hasattr(op, attr) and getattr(op, attr):
|
||||
return getattr(op, attr).id
|
||||
return False
|
||||
|
||||
def _get_first_not_null(self, attr, ops):
|
||||
for op in ops:
|
||||
if hasattr(op, attr) and getattr(op, attr):
|
||||
return getattr(op, attr)
|
||||
return False
|
||||
|
||||
def _concat_all(self, attr, ops):
|
||||
return ', '.join([getattr(op, attr) for op in ops if hasattr(op, attr) and getattr(op, attr)])
|
||||
|
||||
|
||||
def get_attachments(self, cr, uid, id, context=None):
|
||||
attach_obj = self.pool.get('ir.attachment')
|
||||
result = []
|
||||
attach_ids = attach_obj.search(cr, uid, [('res_model' , '=', 'crm.lead'), ('res_id', '=', id)])
|
||||
return attach_ids
|
||||
|
||||
def set_attachements_res_id(self, cr, uid, op_id, attach_ids, context=None):
|
||||
attach_obj = self.pool.get('ir.attachment')
|
||||
attach_obj.write(cr, uid, attach_ids, {'res_id' : op_id})
|
||||
|
||||
|
||||
|
||||
def merge(self, cr, uid, op_ids, context=None):
|
||||
"""
|
||||
record_id = context and context.get('active_id', False) or False
|
||||
if record_id:
|
||||
opp_obj = self.pool.get('crm.lead')
|
||||
opp = opp_obj.browse(cr, uid, record_id, context=context)
|
||||
if not opp.partner_id:
|
||||
raise osv.except_osv(_('Warning!'), _('Opportunity must have Partner assigned before merging with other Opportunity.'))
|
||||
#Search for Opportunity for the same partner
|
||||
opp_ids = opp_obj.search(cr, uid, [('partner_id', '=', opp.partner_id.id), ('type', '=', 'opportunity'), ('state', 'in', ('open', 'pending'))])
|
||||
# Removing current opportunity
|
||||
if record_id in opp_ids:
|
||||
opp_ids.remove(record_id)
|
||||
if not opp_ids:
|
||||
raise osv.except_osv(_('Warning!'), _("There are no other 'Open' or 'Pending' Opportunities for the partner '%s'.") % (opp.partner_id.name))
|
||||
pass
|
||||
@param opp_ids : list of opportunities ids to merge
|
||||
"""
|
||||
opp_obj = self.pool.get('crm.lead')
|
||||
message_obj = self.pool.get('email.message')
|
||||
|
||||
lead_ids = context and context.pop('lead_ids', []) or []
|
||||
|
||||
|
||||
if len(op_ids) <= 1:
|
||||
raise osv.except_osv(_('Warning !'),_('Please select more than one opportunities.'))
|
||||
|
||||
opportunities = opp_obj.browse(cr, uid, lead_ids, context=context)
|
||||
opportunities_list = list(set(op_ids) - set(opportunities))
|
||||
|
||||
if opportunities :
|
||||
first_opportunity = opportunities[0]
|
||||
tail_opportunities = opportunities_list
|
||||
else:
|
||||
first_opportunity = opportunities_list[0]
|
||||
tail_opportunities = opportunities_list[1:]
|
||||
|
||||
|
||||
data = {
|
||||
'partner_id': self._get_first_not_null_id('partner_id', op_ids), # !!
|
||||
'title': self._get_first_not_null_id('title', op_ids),
|
||||
'name' : self._concat_all('name', op_ids), #not lost
|
||||
'categ_id' : self._get_first_not_null_id('categ_id', op_ids), # !!
|
||||
'channel_id' : self._get_first_not_null_id('channel_id', op_ids), # !!
|
||||
'city' : self._get_first_not_null('city', op_ids), # !!
|
||||
'company_id' : self._get_first_not_null_id('company_id', op_ids), #!!
|
||||
'contact_name' : self._concat_all('contact_name', op_ids), #not lost
|
||||
'country_id' : self._get_first_not_null_id('country_id', op_ids), #!!
|
||||
'partner_address_id' : self._get_first_not_null_id('partner_address_id', op_ids), #!!
|
||||
'partner_assigned_id' : hasattr(opp_obj,'partner_assigned_id') and self._get_first_not_null_id('partner_assigned_id', op_ids), #!!
|
||||
'type_id' : self._get_first_not_null_id('type_id', op_ids), #!!
|
||||
'user_id' : self._get_first_not_null_id('user_id', op_ids), #!!
|
||||
'section_id' : self._get_first_not_null_id('section_id', op_ids), #!!
|
||||
'state_id' : self._get_first_not_null_id('state_id', op_ids),
|
||||
'description' : self._concat_all('description', op_ids), #not lost
|
||||
'email' : self._get_first_not_null('email', op_ids), # !!
|
||||
'fax' : self._get_first_not_null('fax', op_ids),
|
||||
'mobile' : self._get_first_not_null('mobile', op_ids),
|
||||
'partner_latitude' : hasattr(opp_obj,'partner_latitude') and self._get_first_not_null('partner_latitude', op_ids),
|
||||
'partner_longitude' : hasattr(opp_obj,'partner_longitude') and self._get_first_not_null('partner_longitude', op_ids),
|
||||
'partner_name' : self._get_first_not_null('partner_name', op_ids),
|
||||
'phone' : self._get_first_not_null('phone', op_ids),
|
||||
'probability' : self._get_first_not_null('probability', op_ids),
|
||||
'planned_revenue' : self._get_first_not_null('planned_revenue', op_ids),
|
||||
'street' : self._get_first_not_null('street', op_ids),
|
||||
'street2' : self._get_first_not_null('street2', op_ids),
|
||||
'zip' : self._get_first_not_null('zip', op_ids),
|
||||
|
||||
}
|
||||
|
||||
#copy message into the first opportunity + merge attachement
|
||||
for opp in tail_opportunities:
|
||||
attach_ids = self.get_attachments(cr, uid, opp, context=context)
|
||||
self.set_attachements_res_id(cr, uid, first_opportunity.id, attach_ids)
|
||||
for history in opp.message_ids:
|
||||
new_history = message_obj.copy(cr, uid, history.id, default={'res_id': opp.id})
|
||||
|
||||
#Notification about loss of information
|
||||
details = []
|
||||
subject = ['Merged opportunities :']
|
||||
for opp in op_ids:
|
||||
subject.append(opp.name)
|
||||
details.append(_('Merged Opportunity: %s\n Partner: %s\n Stage: %s\n Section: %s\n Salesman: %s\n Category: %s\n Channel: %s\n Company: %s\n Contact name: %s\n Email: %s\n Phone number: %s\n Fax: %s\n Mobile: %s\n State: %s\n Description: %s\n Probability: %s\n Planned revennue: %s\n Country: %s\n City: %s\n Street: %s\n Street 2: %s\n Zip 2: %s') % ( opp.name, opp.partner_id.name or '',
|
||||
opp.stage_id.name or '',
|
||||
opp.section_id.name or '',
|
||||
opp.user_id.name or '',
|
||||
opp.categ_id.name or '',
|
||||
opp.channel_id.name or '',
|
||||
opp.company_id.name or '',
|
||||
opp.contact_name or '',
|
||||
opp.email_from or '',
|
||||
opp.phone or '',
|
||||
opp.fax or '',
|
||||
opp.mobile or '',
|
||||
opp.state_id.name or '',
|
||||
opp.description or '',
|
||||
opp.probability or '',
|
||||
opp.planned_revenue or '',
|
||||
opp.country_id.name or '',
|
||||
opp.city or '',
|
||||
opp.street or '',
|
||||
opp.street2 or '',
|
||||
opp.zip or '',
|
||||
))
|
||||
subject = subject[0] + ", ".join(subject[1:])
|
||||
details = "\n\n".join(details)
|
||||
|
||||
opp_obj._history(cr, uid, [first_opportunity], subject, details=details)
|
||||
#data.update({'message_ids' : [(6, 0 ,self._concat_o2m('message_ids', op_ids))]})
|
||||
opp_obj.write(cr, uid, [first_opportunity.id], data)
|
||||
unlink_ids = map(lambda x: x.id, tail_opportunities)
|
||||
opp_obj.unlink(cr, uid, unlink_ids, context=context)
|
||||
|
||||
models_data = self.pool.get('ir.model.data')
|
||||
|
||||
|
||||
|
||||
# Get Opportunity views
|
||||
result = models_data._get_id(
|
||||
cr, uid, 'crm', 'view_crm_case_opportunities_filter')
|
||||
opportunity_view_form = models_data._get_id(
|
||||
cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
opportunity_view_tree = models_data._get_id(
|
||||
cr, uid, 'crm', 'crm_case_tree_view_oppor')
|
||||
if opportunity_view_form:
|
||||
opportunity_view_form = models_data.browse(
|
||||
cr, uid, opportunity_view_form, context=context).res_id
|
||||
if opportunity_view_tree:
|
||||
opportunity_view_tree = models_data.browse(
|
||||
cr, uid, opportunity_view_tree, context=context).res_id
|
||||
|
||||
return {
|
||||
'name': _('Opportunity'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree, form',
|
||||
'res_model': 'crm.lead',
|
||||
'domain': [('type', '=', 'opportunity')],
|
||||
'res_id': int(first_opportunity.id),
|
||||
'view_id': False,
|
||||
'views': [(opportunity_view_form, 'form'),
|
||||
(opportunity_view_tree, 'tree'),
|
||||
(False, 'calendar'), (False, 'graph')],
|
||||
'type': 'ir.actions.act_window',
|
||||
}
|
||||
|
||||
|
||||
def action_merge(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
This function merges two opportunities
|
||||
@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 ids: List of Phonecall to Opportunity IDs
|
||||
@param context: A standard dictionary for contextual values
|
||||
|
||||
@return : Dictionary value for created Opportunity form
|
||||
"""
|
||||
record_id = context and context.get('active_id', False) or False
|
||||
if record_id:
|
||||
opp_obj = self.pool.get('crm.lead')
|
||||
message_obj = self.pool.get('email.message')
|
||||
current_opp = opp_obj.browse(cr, uid, record_id, context=context)
|
||||
|
||||
for this in self.browse(cr, uid, ids, context=context):
|
||||
for opp in this.opportunity_ids:
|
||||
opp_obj.write(cr, uid, [opp.id], {
|
||||
'stage_id': opp.stage_id.id or current_opp.stage_id.id or False,
|
||||
'priority': opp.priority or current_opp.priority,
|
||||
'email_from': opp.email_from or current_opp.email_from,
|
||||
'phone': opp.phone or current_opp.phone,
|
||||
'section_id': opp.section_id.id or current_opp.section_id.id or False,
|
||||
'categ_id': opp.categ_id.id or current_opp.categ_id.id or False,
|
||||
'description': (opp.description or '') + '\n' + (current_opp.description or ''),
|
||||
'partner_name': opp.partner_name or current_opp.partner_name,
|
||||
'title': opp.title.id or current_opp.title.id or False,
|
||||
'function': opp.function or current_opp.function,
|
||||
'street': opp.street or current_opp.street,
|
||||
'street2': opp.street2 or current_opp.street2,
|
||||
'zip': opp.zip or current_opp.zip,
|
||||
'city': opp.city or current_opp.city,
|
||||
'country_id': opp.country_id.id or current_opp.country_id.id or False,
|
||||
'state_id': opp.state_id.id or current_opp.state_id.id or False,
|
||||
'fax': opp.fax or current_opp.fax,
|
||||
'mobile': opp.mobile or current_opp.mobile,
|
||||
'email_cc': ','.join(filter(lambda x: x, [opp.email_cc, current_opp.email_cc]))
|
||||
})
|
||||
for history in current_opp.message_ids:
|
||||
if history.history:
|
||||
new_history = message_obj.copy(cr, uid, history.id, default={'res_id': opp.id})
|
||||
opp_obj._history(cr, uid, [current_opp], _('Merged into Opportunity: %s') % (opp.id))
|
||||
|
||||
if this.state == 'unchanged':
|
||||
pass
|
||||
elif this.state == 'done':
|
||||
opp_obj.case_close(cr, uid, [record_id])
|
||||
elif this.state == 'draft':
|
||||
opp_obj.case_reset(cr, uid, [record_id])
|
||||
elif this.state in ['cancel', 'open', 'pending']:
|
||||
act = 'case_' + this.state
|
||||
getattr(opp_obj, act)(cr, uid, [record_id])
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
obj_opportunity = self.browse(cr, uid, ids[0], context=context)
|
||||
op_ids = obj_opportunity.opportunity_ids
|
||||
self.write(cr, uid, ids, {'opportunity_ids' : [(6,0, [op_ids[0].id])]}, context=context)
|
||||
context['lead_ids'] = [op_ids[0].id]
|
||||
return self.merge(cr, uid, op_ids, context)
|
||||
|
||||
_columns = {
|
||||
'opportunity_ids' : fields.many2many('crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id', 'Opportunities', domain=[('type', '=', 'opportunity')]),
|
||||
'state': fields.selection(crm.AVAILABLE_STATES + [('unchanged', 'Unchanged')], string='Set State To', required=True),
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
|
@ -126,21 +209,12 @@ class crm_merge_opportunity(osv.osv_memory):
|
|||
|
||||
@return : default values of fields.
|
||||
"""
|
||||
record_id = context and context.get('active_id', False) or False
|
||||
record_ids = context and context.get('active_ids', False) or False
|
||||
res = super(crm_merge_opportunity, self).default_get(cr, uid, fields, context=context)
|
||||
|
||||
if record_id:
|
||||
opp_obj = self.pool.get('crm.lead')
|
||||
opp = opp_obj.browse(cr, uid, record_id, context=context)
|
||||
opp_ids = opp_obj.search(cr, uid, [('partner_id', '=', opp.partner_id.id), ('type', '=', 'opportunity'), ('state', 'in', ('open', 'pending'))])
|
||||
# Removing current opportunity
|
||||
if record_id in opp_ids:
|
||||
opp_ids.remove(record_id)
|
||||
|
||||
if record_ids:
|
||||
if 'opportunity_ids' in fields:
|
||||
res.update({'opportunity_ids': opp_ids})
|
||||
if 'state' in fields:
|
||||
res.update({'state': u'cancel'})
|
||||
res.update({'opportunity_ids': record_ids})
|
||||
|
||||
return res
|
||||
|
||||
|
|
|
@ -11,10 +11,16 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Merge Opportunities">
|
||||
<separator string="Select Opportunities" colspan="4"/>
|
||||
<field name="opportunity_ids" nolabel="1" colspan="4" width="550" height="300"/>
|
||||
<field name="opportunity_ids" nolabel="1" colspan="4" width="550" height="300" >
|
||||
<tree>
|
||||
<field name="name" />
|
||||
<field name="partner_id" />
|
||||
<field name="user_id" />
|
||||
<field name="section_id" />
|
||||
</tree>
|
||||
</field>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<field name="state" />
|
||||
<button string="_Cancel" icon="gtk-cancel" special="cancel" />
|
||||
<button name="action_merge" type="object"
|
||||
string="_Merge" icon="gtk-ok" />
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: crm_fundraising
|
||||
|
|
|
@ -37,6 +37,7 @@ based on geolocalization.
|
|||
'crm_lead_view.xml',
|
||||
'report/crm_lead_report_view.xml',
|
||||
],
|
||||
'test': ['test/test_crm_partner_assign.yml'],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '00503409558942442061',
|
||||
|
|
|
@ -37,6 +37,9 @@
|
|||
</data>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<record id="view_crm_opportunity_geo_assign_tree" model="ir.ui.view">
|
||||
<field name="name">crm.lead.geo_assign.tree.inherit</field>
|
||||
<field name="model">crm.lead</field>
|
||||
|
@ -48,5 +51,21 @@
|
|||
</field>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="crm_opportunity_partner_filter">
|
||||
<field name="name">crm.opportunity.partner.filter.assigned</field>
|
||||
<field name="model">crm.lead</field>
|
||||
<field name="type">search</field>
|
||||
<field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<filter string="Team" position="after">
|
||||
<filter string="Referred Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||
</filter>
|
||||
|
||||
<field name="categ_id" position="after">
|
||||
<separator orientation="vertical"/>
|
||||
<field name="partner_assigned_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: crm_partner_assign
|
||||
|
|
|
@ -26,7 +26,7 @@ import random, time
|
|||
from tools.translate import _
|
||||
|
||||
def geo_find(addr):
|
||||
try:
|
||||
try:
|
||||
regex = '<coordinates>([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+)</coordinates>'
|
||||
url = 'http://maps.google.com/maps/geo?q=' + urllib.quote(addr) + '&output=xml&oe=utf8&sensor=false'
|
||||
xml = urllib.urlopen(url).read()
|
||||
|
@ -37,7 +37,7 @@ def geo_find(addr):
|
|||
return None
|
||||
return float(result.group(1)),float(result.group(2))
|
||||
except Exception, e:
|
||||
raise osv.except_osv(_('Network error'),
|
||||
raise osv.except_osv(_('Network error'),
|
||||
_('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
|
||||
|
||||
|
||||
|
@ -64,7 +64,7 @@ class res_partner(osv.osv):
|
|||
'partner_weight': fields.integer('Weight',
|
||||
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
|
||||
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
|
||||
'Assigned Opportunities'),
|
||||
'Assigned Opportunities'),
|
||||
'grade_id': fields.many2one('res.partner.grade', 'Partner Grade')
|
||||
}
|
||||
_defaults = {
|
||||
|
@ -105,7 +105,12 @@ class crm_lead(osv.osv):
|
|||
if not partner_assigned_id:
|
||||
return {'value':{'date_assign': False}}
|
||||
else:
|
||||
return {'value':{'date_assign': time.strftime('%Y-%m-%d')}}
|
||||
partners = self.pool.get('res.partner').browse(cr, uid, [partner_assigned_id], context=context)
|
||||
user_id = partners[0] and partners[0].user_id.id or False
|
||||
return {'value':
|
||||
{'date_assign': time.strftime('%Y-%m-%d'),
|
||||
'user_id' : user_id}
|
||||
}
|
||||
|
||||
def assign_partner(self, cr, uid, ids, context=None):
|
||||
ok = False
|
||||
|
@ -161,7 +166,7 @@ class crm_lead(osv.osv):
|
|||
('country', '=', part.country_id.id),
|
||||
], context=context)
|
||||
|
||||
# 6. sixth way: closest partner whatsoever, just to have at least one result
|
||||
# 6. sixth way: closest partner whatsoever, just to have at least one result
|
||||
if not part_ids:
|
||||
# warning: point() type takes (longitude, latitude) as parameters in this order!
|
||||
cr.execute("""SELECT id, distance
|
||||
|
@ -183,7 +188,9 @@ class crm_lead(osv.osv):
|
|||
mypartner = random.randint(0,total)
|
||||
for t in toassign:
|
||||
if mypartner<=t[1]:
|
||||
self.write(cr, uid, [part.id], {'partner_assigned_id': t[0], 'date_assign': time.strftime('%Y-%m-%d')}, context=context)
|
||||
vals = self.onchange_assign_id(cr,uid, ids, t[0], context=context)['value']
|
||||
vals.update({'partner_assigned_id': t[0], 'date_assign': time.strftime('%Y-%m-%d')})
|
||||
self.write(cr, uid, [part.id], vals, context=context)
|
||||
break
|
||||
ok = True
|
||||
return ok
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
-
|
||||
In order to test Forward Partner functionality, I create an opportunity and forward it to partner.
|
||||
-
|
||||
I assign an email address to Administrator.
|
||||
-
|
||||
!record {model: res.users, id: base.user_root}:
|
||||
user_email: admin@openerp.com
|
||||
-
|
||||
I create some partner grades.
|
||||
-
|
||||
I create a grade 'First'.
|
||||
-
|
||||
!record {model: res.partner.grade, id: res_partner_grade_first0}:
|
||||
name: First
|
||||
sequence: 1
|
||||
-
|
||||
I create another grade 'Second'.
|
||||
-
|
||||
!record {model: res.partner.grade, id: res_partner_grade_second0}:
|
||||
name: Second
|
||||
sequence: 2
|
||||
-
|
||||
I create one more grade 'Third'.
|
||||
-
|
||||
!record {model: res.partner.grade, id: res_partner_grade_third0}:
|
||||
name: Third
|
||||
sequence: 3
|
||||
-
|
||||
I assign grade 'First' to the partner 'Axelor'.
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_desertic_hispafuentes}:
|
||||
grade_id: res_partner_grade_first0
|
||||
-
|
||||
I assgin a reply-to email address to Sales Team.
|
||||
-
|
||||
!record {model: crm.case.section, id: crm.section_sales_department}:
|
||||
reply_to: sales_openerp@openerp.com
|
||||
-
|
||||
I create an opportunity 'Questionnaire on OpenERP'.
|
||||
-
|
||||
!record {model: crm.lead, id: crm_lead_questionnaireonopenerp0}:
|
||||
categ_id: crm.categ_oppor7
|
||||
section_id: crm.section_sales_department
|
||||
country_id: base.fr
|
||||
date_assign: '2011-02-07'
|
||||
day_close: 0.0
|
||||
day_open: 0.0
|
||||
email_from: info@axelor.com
|
||||
name: Questionnaire on OpenERP
|
||||
partner_address_id: base.res_partner_address_3000
|
||||
partner_assigned_id: base.res_partner_desertic_hispafuentes
|
||||
partner_id: base.res_partner_desertic_hispafuentes
|
||||
partner_latitude: 0.0
|
||||
partner_longitude: 0.0
|
||||
phone: +33 1 64 61 04 01
|
||||
planned_revenue: 0.0
|
||||
probability: 0.0
|
||||
type: opportunity
|
||||
-
|
||||
Now I click on Forward button.
|
||||
-
|
||||
!python {model: crm.lead.forward.to.partner}: |
|
||||
import tools
|
||||
vals = {
|
||||
'name': 'email',
|
||||
'email_to': 'info@axelor.com',
|
||||
'email_from': 'Administrator <admin@openerp.com>',
|
||||
'reply_to': 'sales_openerp@openerp.com'
|
||||
}
|
||||
ids = self.create(cr, uid, vals, context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'})
|
||||
assert tools.config.get('smtp_user', False), 'SMTP not configured !'
|
||||
self.action_forward(cr, uid, [ids], context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'})
|
||||
|
|
@ -151,9 +151,15 @@ class crm_lead_forward_to_partner(osv.osv_memory):
|
|||
if not partner_id:
|
||||
return {'value' : {'email_to' : False, 'address_id': False}}
|
||||
|
||||
addr = self.pool.get('res.partner').address_get(cr, uid, [partner_id], ['contact'])
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
addr = partner_obj.address_get(cr, uid, [partner_id], ['contact'])
|
||||
data = {'address_id': addr['contact']}
|
||||
data.update(self.on_change_address(cr, uid, ids, addr['contact'])['value'])
|
||||
|
||||
partner = partner_obj.browse(cr, uid, [partner_id])
|
||||
user_id = partner and partner[0].user_id or False
|
||||
email = user_id and user_id.user_email or ''
|
||||
data.update({'email_cc' : email})
|
||||
return {
|
||||
'value' : data,
|
||||
'domain' : {'address_id' : partner_id and "[('partner_id', '=', partner_id)]" or "[]"}
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: document_ftp
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: document_webdav
|
||||
|
|
|
@ -157,7 +157,7 @@ class mailgate_thread(osv.osv):
|
|||
'model' : case._name,
|
||||
'res_id': case.id,
|
||||
'date': email_date or time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'description': details or (hasattr(case, 'description') and case.description or False),
|
||||
'description': details,
|
||||
'email_to': email,
|
||||
'email_from': email_from or \
|
||||
(hasattr(case, 'user_id') and case.user_id and case.user_id.address_id and \
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="0">
|
||||
<record id="base.res_groups_email_template_admin" model="res.groups">
|
||||
<field name="name">Marketing / User</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -57,7 +57,6 @@ import time
|
|||
#]
|
||||
|
||||
LOGGER = netsvc.Logger()
|
||||
|
||||
def format_date_tz(date, tz=None):
|
||||
if not date:
|
||||
return 'n/a'
|
||||
|
@ -166,15 +165,7 @@ class email_message(osv.osv):
|
|||
msg_txt += self.truncate_data(cr, uid, message.description, context=context)
|
||||
else:
|
||||
msg_txt = (message.user_id.name or '/') + _(' on ') + format_date_tz(message.date, tz) + ':\n\t'
|
||||
if message.name == _('Opportunity'):
|
||||
msg_txt += _("Converted to Opportunity")
|
||||
elif message.name == _('Note'):
|
||||
msg_txt = (message.user_id.name or '/') + _(' added note on ') + format_date_tz(message.date, tz) + ':\n\t'
|
||||
msg_txt += self.truncate_data(cr, uid, message.description, context=context)
|
||||
elif message.name == _('Stage'):
|
||||
msg_txt += _("Changed Stage to: ") + message.description
|
||||
else:
|
||||
msg_txt += _("Changed Status to: ") + message.name
|
||||
msg_txt += message.name
|
||||
result[message.id] = msg_txt
|
||||
return result
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: fetchmail
|
||||
|
|
|
@ -0,0 +1,318 @@
|
|||
# Turkish translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-02-24 20:53+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Turkish <tr@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: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: fetchmail
|
||||
#: constraint:email.server:0
|
||||
msgid ""
|
||||
"Warning! Record for selected Model can not be created\n"
|
||||
"Please choose valid Model"
|
||||
msgstr ""
|
||||
"UYARI! seçilen model için kayıt oluşturulamıyor\n"
|
||||
"Lütfen geçerli bir model seçin"
|
||||
|
||||
#. module: fetchmail
|
||||
#: selection:email.server,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr "Onaylandı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Confirm"
|
||||
msgstr "Onayla"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Group By..."
|
||||
msgstr "Grupla..."
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
#: field:email.server,state:0
|
||||
msgid "State"
|
||||
msgstr "Durum"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "POP"
|
||||
msgstr "POP"
|
||||
|
||||
#. module: fetchmail
|
||||
#: selection:email.server,state:0
|
||||
msgid "Not Confirmed"
|
||||
msgstr "Onaylanmadı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,user:0
|
||||
msgid "User Name"
|
||||
msgstr "Kullanıcı Adı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Type"
|
||||
msgstr "Tip"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "POP/IMAP Servers"
|
||||
msgstr "POP/IMAP Sunucuları"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.module.module,shortdesc:fetchmail.module_meta_information
|
||||
msgid "Fetchmail Server"
|
||||
msgstr "Fetchmail Sunucusu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
#: field:email.server,note:0
|
||||
msgid "Description"
|
||||
msgstr "Açıklama"
|
||||
|
||||
#. module: fetchmail
|
||||
#: help:email.server,object_id:0
|
||||
msgid ""
|
||||
"OpenObject Model. Generates a record of this model.\n"
|
||||
"Select Object with message_new attrbutes."
|
||||
msgstr ""
|
||||
"OpenObject Model. Bu model için bir kayıt oluşturur.\n"
|
||||
"message_new özelliği olan bir nesne seçin."
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,attach:0
|
||||
msgid "Add Attachments ?"
|
||||
msgstr "Ek Ekle ?"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "# of emails"
|
||||
msgstr "E-posta sayısı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.actions.act_window,name:fetchmail.act_server_history
|
||||
msgid "Email History"
|
||||
msgstr "Eposta Geçmişi"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,user_id:0
|
||||
msgid "User"
|
||||
msgstr "Kullanıcı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,date:0
|
||||
msgid "Date"
|
||||
msgstr "Tarih"
|
||||
|
||||
#. module: fetchmail
|
||||
#: selection:email.server,state:0
|
||||
msgid "Waiting for Verification"
|
||||
msgstr "Onay Bekleniyor"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,password:0
|
||||
msgid "Password"
|
||||
msgstr "Şifre"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:mailgate.message:0
|
||||
msgid "Emails"
|
||||
msgstr "E-postalar"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Search Email Servers"
|
||||
msgstr "E-posta Sunucusu Ara"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Server & Login"
|
||||
msgstr "Sunucu & Kullanıcı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Auto Reply?"
|
||||
msgstr "Otomatik Cevap?"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,name:0
|
||||
msgid "Name"
|
||||
msgstr "Adı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.model,name:fetchmail.model_mailgate_message
|
||||
msgid "Mailgateway Message"
|
||||
msgstr "Mailgeçidi Mesajı"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree
|
||||
msgid "POP Servers"
|
||||
msgstr "POP Sunucuları"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Set to Draft"
|
||||
msgstr "Taslağa Çevir"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,message_ids:0
|
||||
#: model:ir.actions.act_window,name:fetchmail.action_view_mail_message_emails
|
||||
msgid "Messages"
|
||||
msgstr "Mesajlar"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree
|
||||
msgid "Fetchmail Services"
|
||||
msgstr "Fetchmail Servisleri"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,server:0
|
||||
msgid "Server"
|
||||
msgstr "Sunucu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,active:0
|
||||
msgid "Active"
|
||||
msgstr "Aktif"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Process Parameter"
|
||||
msgstr "İşlem Parametresi"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,is_ssl:0
|
||||
msgid "SSL ?"
|
||||
msgstr "SSL ?"
|
||||
|
||||
#. module: fetchmail
|
||||
#: selection:email.server,type:0
|
||||
#: selection:mailgate.message,server_type:0
|
||||
msgid "IMAP Server"
|
||||
msgstr "IMAP sunucusu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,object_id:0
|
||||
msgid "Model"
|
||||
msgstr "Model"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "IMAP"
|
||||
msgstr "IMAP"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
#: model:ir.model,name:fetchmail.model_email_server
|
||||
msgid "POP/IMAP Server"
|
||||
msgstr "POP/IMAP Sunucu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: constraint:email.server:0
|
||||
msgid "Warning! Can't have duplicate server configuration!"
|
||||
msgstr "UYARI! Mükerrer sunucu ayarı yapamazsınız!"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,type:0
|
||||
#: field:mailgate.message,server_type:0
|
||||
msgid "Server Type"
|
||||
msgstr "Sunucu Türü"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Login Information"
|
||||
msgstr "Kullanıcı Bilgileri"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Server Information"
|
||||
msgstr "Sunucu Bilgileri"
|
||||
|
||||
#. module: fetchmail
|
||||
#: help:email.server,attach:0
|
||||
msgid "Fetches mail with attachments if true."
|
||||
msgstr "Eğer doğru işe e-postaları ekleriyle birlikte çeker."
|
||||
|
||||
#. module: fetchmail
|
||||
#: selection:email.server,type:0
|
||||
#: selection:mailgate.message,server_type:0
|
||||
msgid "POP Server"
|
||||
msgstr "POP Sunucu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,port:0
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#. module: fetchmail
|
||||
#: model:ir.module.module,description:fetchmail.module_meta_information
|
||||
msgid ""
|
||||
"Fetchmail: \n"
|
||||
" * Fetch email from Pop / IMAP server\n"
|
||||
" * Support SSL\n"
|
||||
" * Integrated with all Modules\n"
|
||||
" * Automatic Email Receive\n"
|
||||
" * Email based Records (Add, Update)\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"Fetchmail: \n"
|
||||
" * POP/IMAP sunuculardan e-postaları çeker\n"
|
||||
" * SSL Destekler\n"
|
||||
" * Bütün Modüllerle entegre çalışır\n"
|
||||
" * Otomatik E-posta çekimi\n"
|
||||
" * E-posta temelli kayıtlar (ekle,Güncelle)\n"
|
||||
" "
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "SSL"
|
||||
msgstr "SSL"
|
||||
|
||||
#. module: fetchmail
|
||||
#: help:email.server,action_id:0
|
||||
msgid ""
|
||||
"An Email Server Action. It will be run whenever an e-mail is fetched from "
|
||||
"server."
|
||||
msgstr ""
|
||||
"E-posta sunucu eylemi. Sunucudan bir mesaj çekildiğinde bu eylem "
|
||||
"çalıştırılır."
|
||||
|
||||
#. module: fetchmail
|
||||
#: help:email.server,priority:0
|
||||
msgid "Priority between 0 to 10, select define the order of Processing"
|
||||
msgstr ""
|
||||
"İşlem sırasını belirlemek için öncelik seviyesi 0 ile 10 arası seçin."
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,action_id:0
|
||||
msgid "Email Server Action"
|
||||
msgstr "E-posta Sunucu Eylemi"
|
||||
|
||||
#. module: fetchmail
|
||||
#: field:email.server,priority:0
|
||||
msgid "Server Priority"
|
||||
msgstr "Sunucu Önceliği"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:mailgate.message:0
|
||||
#: field:mailgate.message,server_id:0
|
||||
msgid "Mail Server"
|
||||
msgstr "E-Posta Sunucusu"
|
||||
|
||||
#. module: fetchmail
|
||||
#: view:email.server:0
|
||||
msgid "Fetch Emails"
|
||||
msgstr "E-postaları Çeker"
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: hr_contract
|
||||
|
|
|
@ -14,13 +14,13 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: hr_payroll
|
||||
#: rml:employees.salary:0
|
||||
msgid "E-mail Address"
|
||||
msgstr ""
|
||||
msgstr "Sähköpostiosoite"
|
||||
|
||||
#. module: hr_payroll
|
||||
#: view:hr.allounce.deduction.categoty:0
|
||||
|
@ -52,7 +52,7 @@ msgstr ""
|
|||
#: rml:employees.salary:0
|
||||
#: rml:salary.structure:0
|
||||
msgid "Department"
|
||||
msgstr ""
|
||||
msgstr "Osasto"
|
||||
|
||||
#. module: hr_payroll
|
||||
#: rml:employees.salary:0
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: hr_payroll_account
|
||||
|
|
|
@ -0,0 +1,694 @@
|
|||
# Galician translation for openobject-addons
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
|
||||
"PO-Revision-Date: 2011-02-24 22:34+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Galician <gl@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: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: idea
|
||||
#: help:idea.category,visibility:0
|
||||
msgid "If True creator of the idea will be visible to others"
|
||||
msgstr "Se é verdadeiro, o creador da idea será visible para outros"
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_select
|
||||
msgid "Idea select"
|
||||
msgstr "Seleccionar idea"
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: view:idea.vote:0
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_vote
|
||||
msgid "Votes"
|
||||
msgstr "Votos"
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: field:idea.idea,comment_ids:0
|
||||
msgid "Comments"
|
||||
msgstr "Comentarios"
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Submit Vote"
|
||||
msgstr "Enviar voto"
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_report_vote_all
|
||||
#: model:ir.ui.menu,name:idea.menu_report_vote_all
|
||||
msgid "Ideas Analysis"
|
||||
msgstr "Análisis de ideas"
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
#: view:idea.idea:0
|
||||
#: view:idea.vote:0
|
||||
#: view:report.vote:0
|
||||
msgid "Group By..."
|
||||
msgstr "Agrupar por ..."
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.module.module,description:idea.module_meta_information
|
||||
msgid ""
|
||||
"\n"
|
||||
" This module allows your user to easily and efficiently participate in "
|
||||
"the innovation of the enterprise.\n"
|
||||
" It allows everybody to express ideas about different subjects.\n"
|
||||
" Then, other users can comment on these ideas and vote for particular "
|
||||
"ideas.\n"
|
||||
" Each idea has a score based on the different votes.\n"
|
||||
" The managers can obtain an easy view on best ideas from all the users.\n"
|
||||
" Once installed, check the menu 'Ideas' in the 'Tools' main menu."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Este módulo permite aos seus usuarios participar de forma fácil e eficaz "
|
||||
"na innovación da empresa.\n"
|
||||
"Permite a todos expresar as súas ideas sobre diferentes temas.\n"
|
||||
"Logo, outros usuarios poden comentar estas ideas e votar a favor dalgunhas "
|
||||
"das ideas.\n"
|
||||
"Cada idea ten unha puntuación baseada nas diferentes votacións.\n"
|
||||
"Os administradores poden obter unha visión fácil das mellores ideas de todos "
|
||||
"os usuarios.\n"
|
||||
"Unha vez instalado, aparecerá o menú 'Ideas' dentro do menú principal "
|
||||
"'Ferramentas'."
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.module.module,shortdesc:idea.module_meta_information
|
||||
msgid "Idea Manager"
|
||||
msgstr "Xestión de ideas"
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "March"
|
||||
msgstr "Marzo"
|
||||
|
||||
#. module: idea
|
||||
#: code:addons/idea/wizard/idea_post_vote.py:92
|
||||
#, python-format
|
||||
msgid "Idea must be in 'Open' state before vote for that idea."
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,day:0
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Refuse"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,count_votes:0
|
||||
msgid "Count of votes"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_report_vote
|
||||
msgid "Idea Vote Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Bad"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,idea_state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
msgid "Category of ideas"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: code:addons/idea/idea.py:253
|
||||
#: code:addons/idea/wizard/idea_post_vote.py:89
|
||||
#: code:addons/idea/wizard/idea_post_vote.py:92
|
||||
#, python-format
|
||||
msgid "Warning !"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Your comment"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
msgid " Month "
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_vote
|
||||
msgid "Idea Vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.category,parent_id:0
|
||||
msgid "Parent Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Very Bad"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.vote:0
|
||||
msgid "Ideas vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,nbr:0
|
||||
msgid "# of Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: code:addons/idea/wizard/idea_post_vote.py:89
|
||||
#, python-format
|
||||
msgid "You can not give Vote for this idea more than %s times"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
msgid "Ideas Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: help:idea.idea,description:0
|
||||
msgid "Content of the idea"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_category
|
||||
msgid "Idea Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: field:idea.idea,stat_vote_ids:0
|
||||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Not Voted"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: sql_constraint:idea.category:0
|
||||
msgid "The name of the category must be unique"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_select
|
||||
msgid "select idea"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.stat:0
|
||||
msgid "stat"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.category,child_ids:0
|
||||
msgid "Child Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.select:0
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: field:idea.idea,state:0
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,idea_state:0
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Good"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: help:idea.idea,open_date:0
|
||||
msgid "Date when an idea opened"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Idea Detail"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: help:idea.idea,state:0
|
||||
msgid ""
|
||||
"When the Idea is created the state is 'Draft'.\n"
|
||||
" It is opened by the user, the state is 'Opened'. \n"
|
||||
"If the idea is accepted, the state is 'Accepted'."
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.category,visibility:0
|
||||
#: field:idea.idea,visibility:0
|
||||
msgid "Open Idea?"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: selection:idea.idea,state:0
|
||||
#: view:report.vote:0
|
||||
#: selection:report.vote,idea_state:0
|
||||
msgid "Accepted"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_category
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_category
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
msgid " Month-1 "
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,open_date:0
|
||||
msgid "Open date"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,vote_ids:0
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_post_vote
|
||||
msgid "Vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_vote_stat
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_vote_stat
|
||||
msgid "Vote Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,vote_limit:0
|
||||
msgid "Maximum Vote per User"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
msgid "Parent Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.comment,content:0
|
||||
#: view:idea.idea:0
|
||||
#: view:idea.post.vote:0
|
||||
#: field:idea.vote,comment:0
|
||||
#: model:ir.model,name:idea.model_idea_comment
|
||||
msgid "Comment"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_idea_categ_open
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_idea_open
|
||||
msgid "Open Ideas"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
#: field:idea.category,name:0
|
||||
#: view:idea.idea:0
|
||||
#: field:idea.idea,category_id:0
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,category_id:0
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Very Good"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
msgid " Year "
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,state:0
|
||||
#: selection:report.vote,idea_state:0
|
||||
msgid "Opened"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_vote
|
||||
msgid "Idea's Votes"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "New Idea"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.vote.stat:0
|
||||
msgid "vote_stat of ideas"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_category_tree
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_category_tree
|
||||
msgid "Ideas by Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,state:0
|
||||
#: selection:report.vote,idea_state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,my_vote:0
|
||||
#: selection:idea.post.vote,vote:0
|
||||
#: selection:idea.vote,score:0
|
||||
#: selection:idea.vote.stat,score:0
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:report.vote,creater_id:0
|
||||
#: field:report.vote,user_id:0
|
||||
msgid "User Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_vote_stat
|
||||
msgid "Idea Votes Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.comment,user_id:0
|
||||
#: view:idea.vote:0
|
||||
#: field:idea.vote,user_id:0
|
||||
#: view:report.vote:0
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.vote,date:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.post.vote:0
|
||||
msgid "Post"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,my_vote:0
|
||||
msgid "My Vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.comment,create_date:0
|
||||
#: field:idea.idea,created_date:0
|
||||
msgid "Creation date"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_idea
|
||||
msgid "idea.idea"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.category,summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,name:0
|
||||
msgid "Idea Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Vots Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:report.vote,date:0
|
||||
msgid "Date Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: field:idea.idea,user_id:0
|
||||
#: view:report.vote:0
|
||||
msgid "Creator"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.post.vote:0
|
||||
#: model:ir.ui.menu,name:idea.menu_give_vote
|
||||
msgid "Give Vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: help:idea.idea,vote_limit:0
|
||||
msgid "Set to one if you require only one Vote per user"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.post.vote:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.select:0
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: view:report.vote:0
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
msgid "Idea Vote Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
#: model:ir.actions.act_window,name:idea.action_idea_idea
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_idea
|
||||
#: model:ir.ui.menu,name:idea.menu_ideas
|
||||
#: model:ir.ui.menu,name:idea.menu_ideas1
|
||||
msgid "Ideas"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: model:ir.model,name:idea.model_idea_post_vote
|
||||
msgid "Post vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.vote.stat,score:0
|
||||
#: field:report.vote,score:0
|
||||
msgid "Score"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.vote:0
|
||||
msgid "Comments:"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.category:0
|
||||
#: field:idea.idea,description:0
|
||||
#: field:idea.post.vote,note:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:idea.idea,state:0
|
||||
#: view:report.vote:0
|
||||
msgid "Refused"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: code:addons/idea/idea.py:253
|
||||
#, python-format
|
||||
msgid "Draft/Accepted/Cancelled ideas Could not be voted"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.vote:0
|
||||
msgid "Vote date"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
msgid " Today "
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.vote.stat,nbr:0
|
||||
msgid "Number of Votes"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: selection:report.vote,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,count_comments:0
|
||||
msgid "Count of comments"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.vote,score:0
|
||||
msgid "Vote Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.idea,vote_avg:0
|
||||
msgid "Average Score"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.comment,idea_id:0
|
||||
#: field:idea.select,idea_id:0
|
||||
#: view:idea.vote:0
|
||||
#: field:idea.vote,idea_id:0
|
||||
#: field:idea.vote.stat,idea_id:0
|
||||
#: model:ir.ui.menu,name:idea.menu_idea_reporting
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,idea_id:0
|
||||
msgid "Idea"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.idea:0
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: field:idea.post.vote,vote:0
|
||||
msgid "Post Vote"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:report.vote:0
|
||||
#: field:report.vote,year:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: idea
|
||||
#: view:idea.select:0
|
||||
msgid "Select Idea for Vote"
|
||||
msgstr ""
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: knowledge
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<menuitem id="menu_mrp_manufacturing" name="Manufacturing" parent="base.menu_mrp_root" sequence="1"/>
|
||||
|
||||
|
||||
|
||||
<menuitem name="Master Data"
|
||||
id="menu_mrp_bom"
|
||||
parent="base.menu_mrp_root"
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: purchase_requisition
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#, python-format
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: sale_journal
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: sale_margin
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-03 16:58+0000\n"
|
||||
"PO-Revision-Date: 2011-01-17 12:58+0000\n"
|
||||
"PO-Revision-Date: 2011-02-24 10:05+0000\n"
|
||||
"Last-Translator: Pekka Pylvänäinen <Unknown>\n"
|
||||
"Language-Team: Finnish <fi@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: 2011-01-18 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 12177)\n"
|
||||
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 12351)\n"
|
||||
|
||||
#. module: stock_invoice_directly
|
||||
#: model:ir.model,name:stock_invoice_directly.model_stock_partial_picking
|
||||
|
@ -30,6 +30,10 @@ msgid ""
|
|||
" the invoicing wizard if the delivery is to be invoiced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Tämä moduuli käynnistää laskutusavustajan, kun laskutettavat tavarat "
|
||||
"lähetetään tai toimitetaan.\n"
|
||||
" "
|
||||
|
||||
#. module: stock_invoice_directly
|
||||
#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information
|
||||
|
|
Loading…
Reference in New Issue