[IMP] crm: immprovement on lead,opportunity
bzr revid: hmo@tinyerp.com-20100225065542-v5f9z5mbqnmd5ua2
This commit is contained in:
parent
db2ddf6345
commit
05fdaa58a7
|
@ -155,6 +155,7 @@ class crm_case_stage(osv.osv):
|
|||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of case stages."),
|
||||
'object_id': fields.many2one('ir.model','Object Name'),
|
||||
'probability': fields.float('Probability (%)', required=True),
|
||||
'on_change': fields.boolean('Set Onchange'),
|
||||
}
|
||||
def _find_object_id(self, cr, uid, context=None):
|
||||
object_id = context and context.get('object_id', False) or False
|
||||
|
|
|
@ -36,7 +36,7 @@ class crm_lead(osv.osv):
|
|||
'name': fields.char('Lead Subject', size=64),
|
||||
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'type_id': fields.many2one('crm.case.resource.type', 'Lead Type Name', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.lead')]"),
|
||||
'partner_name': fields.char("Lead Name", size=64),
|
||||
'partner_name': fields.char("Partner Name", size=64),
|
||||
'partner_name2': fields.char('Contact', size=64),
|
||||
'partner_phone': fields.char('Phone', size=32),
|
||||
'partner_mobile': fields.char('Mobile', size=32),
|
||||
|
@ -54,6 +54,7 @@ class crm_lead(osv.osv):
|
|||
"the partner mentality in relation to our services.The scale has" \
|
||||
"to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
|
||||
'opportunity_id': fields.many2one('crm.opportunity', 'Opportunity'),
|
||||
'user_id': fields.many2one('res.users', 'Salesman'),
|
||||
}
|
||||
|
||||
crm_lead()
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Leads Form">
|
||||
<group colspan="4" col="7">
|
||||
<field name="partner_name" string="Lead Name" required="1"/>
|
||||
<field name="partner_name" string="Partner Name" required="1"/>
|
||||
<field name="partner_name2"/>
|
||||
<field name="user_id"/>
|
||||
<button
|
||||
|
@ -124,11 +124,9 @@
|
|||
<field name="partner_name2"/>
|
||||
<field name="email_from"/>
|
||||
<field name="partner_phone"/>
|
||||
|
||||
<field name="stage_id" string="Status"/>
|
||||
<button name="stage_previous" string="Previous" states="open,pending" type="object" icon="gtk-go-back"/>
|
||||
<button name="stage_next" string="Next" states="open,pending" type="object" icon="gtk-go-forward"/>
|
||||
|
||||
<field name="section_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
|
||||
|
@ -191,7 +189,7 @@
|
|||
<group expand="1" string="Group By..." colspan="4">
|
||||
<filter string="Stage" icon="terp-crm" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Partner" icon="terp-crm" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Responsible" icon="terp-crm" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Salesman" icon="terp-crm" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Creation" icon="terp-project" domain="[]" context="{'group_by':'create_date'}"/>
|
||||
<filter string="Exp.Closing" icon="terp-project" domain="[]" context="{'group_by':'date_deadline'}"/>
|
||||
|
|
|
@ -37,7 +37,7 @@ class crm_opportunity(osv.osv):
|
|||
_inherit = 'crm.case'
|
||||
_columns = {
|
||||
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'categ_id': fields.many2one('crm.case.categ', 'Source', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'type_id': fields.many2one('crm.case.resource.type', 'Resource Type', domain="[('section_id','=',section_id),('object_id.model', '=', 'crm.opportunity')]"),
|
||||
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
|
||||
'probability': fields.float('Probability (%)'),
|
||||
|
@ -45,17 +45,20 @@ class crm_opportunity(osv.osv):
|
|||
'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
|
||||
'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
|
||||
'date_closed': fields.datetime('Closed', readonly=True),
|
||||
'user_id': fields.many2one('res.users', 'Salesman'),
|
||||
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True,
|
||||
help='The state is set to \'Draft\', when a case is created.\
|
||||
\nIf the case is in progress the state is set to \'Open\'.\
|
||||
\nWhen the case is over, the state is set to \'Done\'.\
|
||||
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
|
||||
}
|
||||
def onchange_stage_id(self, cr, uid, ids, stage, context={}):
|
||||
if not stage:
|
||||
def onchange_stage_id(self, cr, uid, ids, stage_id, context={}):
|
||||
if not stage_id:
|
||||
return {'value':{}}
|
||||
probability = self.pool.get('crm.case.stage').browse(cr, uid, stage, context).probability
|
||||
return {'value':{'probability':probability}}
|
||||
stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context)
|
||||
if not stage.on_change:
|
||||
return {'value':{}}
|
||||
return {'value':{'probability':stage.probability}}
|
||||
|
||||
crm_opportunity()
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<field name="type_id" select="1" string="Campaign"/>
|
||||
<field name="section_id" colspan="1" widget="selection"/>
|
||||
<field name="priority" string="Priority"/>
|
||||
<field name="categ_id" select="1" string="Source" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
|
||||
<field name="categ_id" select="1" string="Category" widget="selection" domain="[('object_id.model', '=', 'crm.opportunity')]"/>
|
||||
</group>
|
||||
|
||||
<separator colspan="4" string="Details"/>
|
||||
|
@ -154,6 +154,7 @@
|
|||
<field name="planned_revenue" sum="Total of Planned Revenue"/>
|
||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||
<field name="date_deadline" string="Excepted Closing"/>
|
||||
<field name="section_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
|
||||
|
@ -213,8 +214,11 @@
|
|||
<newline/>
|
||||
<group expand="1" string="Group By..." colspan="4">
|
||||
<filter string="Stage" icon="terp-crm" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Partner" icon="terp-crm" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Responsible" icon="terp-crm" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Category" icon="terp-crm" domain="[]" context="{'group_by':'categ_id'}"/>
|
||||
<filter string="Campaign" icon="terp-crm" domain="[]" context="{'group_by':'type_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Partner" icon="terp-crm" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Salesman" icon="terp-crm" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Creation" icon="terp-project" domain="[]" context="{'group_by':'create_date'}"/>
|
||||
<filter string="Exp.Closing" icon="terp-project" domain="[]" context="{'group_by':'date_deadline'}"/>
|
||||
|
|
|
@ -76,6 +76,8 @@
|
|||
<field name="object_id" invisible="1" />
|
||||
<field name="sequence"/>
|
||||
<field name="probability"/>
|
||||
<field name="on_change"/>
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -35,7 +35,7 @@ class lead2opportunity(wizard.interface):
|
|||
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
|
||||
<newline />
|
||||
<field name="action"/>
|
||||
<group attrs="{'invisible':[('action','=','create')]}">
|
||||
<group attrs="{'invisible':[('action','!=','exist')]}">
|
||||
<field name="partner_id" attrs="{'required':[('action','=','exist')]}"/>
|
||||
</group>
|
||||
</form>"""
|
||||
|
@ -75,11 +75,9 @@ class lead2opportunity(wizard.interface):
|
|||
def _selectopportunity(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
case_obj = pool.get('crm.lead')
|
||||
for case in case_obj.browse(cr, uid, data['ids']):
|
||||
if not case.partner_id:
|
||||
return 'create_partner'
|
||||
return {'name': case.name, 'probability': case.probability or 20.0,
|
||||
'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id.id}
|
||||
case = case_obj.browse(cr, uid, data['id'])
|
||||
return {'name': case.name, 'probability': case.probability,
|
||||
'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id and case.partner_id.id or False}
|
||||
|
||||
def _selectChoice(self, cr, uid, data, context):
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
|
@ -151,7 +149,7 @@ class lead2opportunity(wizard.interface):
|
|||
pool = pooler.get_pool(cr.dbname)
|
||||
lead_case_obj = pool.get('crm.lead')
|
||||
partner_obj = pool.get('res.partner')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
contact_obj = pool.get('res.partner.address')
|
||||
if data['form']['action'] == 'create':
|
||||
for case in lead_case_obj.browse(cr, uid, data['ids']):
|
||||
partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
|
||||
|
@ -189,7 +187,7 @@ class lead2opportunity(wizard.interface):
|
|||
'create_partner': {
|
||||
'actions': [],
|
||||
'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
|
||||
'state' : [('end', 'Cancel', 'gtk-cancel'),('opportunity', 'Skip', 'gtk-goto-last'), ('create', 'Continue', 'gtk-go-forward')]}
|
||||
},
|
||||
'create': {
|
||||
'actions': [],
|
||||
|
|
Loading…
Reference in New Issue