[MERGE, IMP] crm: Improve data and merge with mma branch

bzr revid: psi@tinyerp.com-20120419133309-hn30exz1qnu0zxzz
This commit is contained in:
Purnendu Singh (OpenERP) 2012-04-19 19:03:09 +05:30
commit d3df8f51b9
5 changed files with 70 additions and 33 deletions

View File

@ -71,12 +71,14 @@ class crm_case_stage(osv.osv):
'on_change': fields.boolean('Change Probability Automatically', help="Setting this stage will change the probability automatically on the opportunity."),
'requirements': fields.text('Requirements'),
'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', 'Sections'),
'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="This state is related to stage"),
'case_default': fields.boolean('Common to All Teams', help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
}
_defaults = {
'sequence': lambda *args: 1,
'probability': lambda *args: 0.0,
'state': 'draft',
}
class crm_case_section(osv.osv):

View File

@ -138,6 +138,30 @@ class crm_lead(crm_case, osv.osv):
break
return res
def _get_state(self, cr, uid, ids, name, arg, context=None):
res = {}
for lead in self.browse(cr, uid, ids, context=context):
if lead.stage_id:
res[lead.id] = lead.stage_id.state
return res
def _get_stage(self, cr, uid, ids, context=None):
crm_lead_obj = self.pool.get('crm.lead')
result = {}
for stage in self.browse(cr, uid, ids, context=context):
if stage.state:
crm_lead_ids = crm_lead_obj.search(cr, uid, [('state', '=', stage.state)], context=context)
for lead in crm_lead_obj.browse(cr, uid, crm_lead_ids, context=context):
result[lead.id] = True
return result.keys()
def _save_state(self, cr, uid, lead_id, field_name, field_value, arg, context=None):
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('state', '=', field_value)], order='sequence', context=context)
if stage_ids:
return self.write(cr, uid, [lead_id], {'stage_id': stage_ids[0]}, context=context)
else:
return cr.execute("""update crm_lead set state=%s where id=%s""", (field_value, crm_lead_id))
_columns = {
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null',
select=True, help="Optional linked partner, usually after conversion of the lead"),
@ -175,11 +199,14 @@ class crm_lead(crm_case, osv.osv):
multi='day_open', type="float", store=True),
'day_close': fields.function(_compute_day, string='Days to Close', \
multi='day_close', type="float", store=True),
'state': fields.selection(crm.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\'.'),
'state': fields.function(_get_state, fnct_inv=_save_state, type='selection', selection=crm.AVAILABLE_STATES, string="State", readonly=True,
store = {
'crm.lead': (lambda self, cr, uid, ids, c={}: ids, ['stage_id'], 10),
'crm.case.stage': (_get_stage, ['state'], 10)
}, 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\'.'),
'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
@ -203,11 +230,11 @@ class crm_lead(crm_case, osv.osv):
}
_defaults = {
'active': lambda *a: 1,
'active': 1,
'user_id': crm_case._get_default_user,
'email_from': crm_case._get_default_email,
'state': lambda *a: 'draft',
'type': lambda *a: 'lead',
'state': 'draft',
'type': 'lead',
'section_id': crm_case._get_section,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],

View File

@ -6,36 +6,42 @@
<record model="crm.case.stage" id="stage_lead6">
<field name="name">Lost</field>
<field eval="1" name="case_default"/>
<field name="state">cancel</field>
<field eval="'0'" name="probability"/>
<field eval="'0'" name="sequence"/>
</record>
<record model="crm.case.stage" id="stage_lead1">
<field name="name">New</field>
<field eval="1" name="case_default"/>
<field name="state">draft</field>
<field eval="'10'" name="probability"/>
<field eval="'11'" name="sequence"/>
</record>
<record model="crm.case.stage" id="stage_lead2">
<field name="name">Qualification</field>
<field eval="1" name="case_default"/>
<field name="state">open</field>
<field eval="'20'" name="probability"/>
<field eval="'12'" name="sequence"/>
</record>
<record model="crm.case.stage" id="stage_lead3">
<field name="name">Proposition</field>
<field eval="1" name="case_default"/>
<field name="state">open</field>
<field eval="'40'" name="probability"/>
<field eval="'13'" name="sequence"/>
</record>
<record model="crm.case.stage" id="stage_lead4">
<field name="name">Negotiation</field>
<field eval="1" name="case_default"/>
<field name="state">pending</field>
<field eval="'60'" name="probability"/>
<field eval="'14'" name="sequence"/>
</record>
<record model="crm.case.stage" id="stage_lead5">
<field name="name">Won</field>
<field eval="1" name="case_default"/>
<field eval="1" name="case_default"/
<field name="state">done</field>>
<field eval="'100'" name="probability"/>
<field eval="'15'" name="sequence"/>
<field eval="1" name="on_change"/>

View File

@ -53,12 +53,12 @@
<field name="arch" type="xml">
<form string="Leads Form" layout="manual">
<div class="oe_form_topbar">
<button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel" />
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" />
<button name="case_mark_lost" string="Close" states="open,pending" type="object" icon="gtk-close" />
<button name="case_pending" string="Pending" states="open" type="object" icon="gtk-media-pause" />
<button name="case_cancel" string="Cancel" states="draft,open,pending" type="object" icon="gtk-cancel"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward"/>
<button name="case_mark_lost" string="Close" states="open,pending" type="object" icon="gtk-close"/>
<button name="case_pending" string="Pending" states="open" type="object" icon="gtk-media-pause"/>
<button name="case_escalate" string="Escalate" states="open,pending" type="object" groups="base.group_extended" icon="gtk-go-up" />
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert" />
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert"/>
<div class="oe_right">
<field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
</div>
@ -192,13 +192,13 @@
icon="gtk-go-forward" />
<field name="section_id" invisible="context.get('invisible_section', True)" />
<field name="user_id" />
<field name="state" />
<field name="state"/>
<button name="case_open" string="Open"
states="draft,pending" type="object"
icon="gtk-go-forward" />
icon="gtk-go-forward"/>
<button name="case_close" string="Close"
states="open,draft,pending" type="object"
icon="gtk-close" />
icon="gtk-close"/>
<button name="%(crm.action_crm_lead2opportunity_partner)d"
string="Convert to Opportunity"
states="draft,open,pending" icon="gtk-index"
@ -299,11 +299,11 @@
<a string="Schedule Meeting" name="action_makeMeeting" type="object" icon="stock_calendar"/>
<a string="Add Internal Note" name="%(crm.action_crm_add_note)d" context="{'model': 'crm.lead' }" icon="terp-document-new" type="action"/>
</div>
<div class="oe_kanban_right">
<a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="kanban-stop" />
<a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause" />
<a name="case_open" string="Open" states="pending" type="object" icon="gtk-media-play" />
<a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="kanban-apply" />
<div class="oe_kanban_right" groups="base.group_no_one">
<a name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="kanban-stop"/>
<a name="case_pending" string="Pending" states="draft,open" type="object" icon="kanban-pause"/>
<a name="case_open" string="Open" states="pending" type="object" icon="gtk-media-play"/>
<a name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="kanban-apply"/>
</div>
<br class="oe_kanban_clear"/>
</div>
@ -400,14 +400,14 @@
<field name="arch" type="xml">
<form string="Opportunities" layout="manual">
<div class="oe_form_topbar">
<button name="case_cancel" string="Cancel" states="draft" type="object" icon="gtk-cancel" />
<button name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="gtk-cancel" />
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert" />
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" />
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause" />
<button name="case_cancel" string="Cancel" states="draft" type="object" icon="gtk-cancel" groups="base.group_no_one"/>
<button name="case_mark_lost" string="Mark Lost" states="open,pending" type="object" icon="gtk-cancel" groups="base.group_no_one"/>
<button name="case_reset" string="Reset to Draft" states="done,cancel" type="object" icon="gtk-convert" groups="base.group_no_one"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" groups="base.group_no_one"/>
<button name="case_pending" string="Pending" states="draft,open" type="object" icon="gtk-media-pause" groups="base.group_no_one"/>
<button name="case_escalate" string="Escalate" states="open,pending" type="object" groups="base.group_extended" icon="gtk-go-up" />
<button name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="gtk-apply" />
<div class="oe_right">
<button name="case_mark_won" string="Mark Won" states="open,pending" type="object" icon="gtk-apply" groups="base.group_no_one"/>
<div class="oe_right" groups="base.group_no_one">
<field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
</div>
</div>
@ -557,10 +557,10 @@
<field name="priority" invisible="1"/>
<field name="categ_id" invisible="1"/>
<field name="state"/>
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" />
<button name="case_pending" string="Pending" states="open,draft" type="object" icon="gtk-media-pause" />
<button name="case_mark_lost" string="Lost" states="open,pending" type="object" icon="gtk-cancel" />
<button name="case_mark_won" string="Won" states="open,pending" type="object" icon="gtk-apply" />
<button name="case_open" string="Open" states="draft,pending" type="object" icon="gtk-go-forward" groups="base.group_no_one"/>
<button name="case_pending" string="Pending" states="open,draft" type="object" icon="gtk-media-pause" groups="base.group_no_one"/>
<button name="case_mark_lost" string="Lost" states="open,pending" type="object" icon="gtk-cancel" groups="base.group_no_one"/>
<button name="case_mark_won" string="Won" states="open,pending" type="object" icon="gtk-apply" groups="base.group_no_one"/>
</tree>
</field>
</record>

View File

@ -143,6 +143,7 @@
<field name="sequence"/>
<field name="name"/>
<field name="probability"/>
<field name="state"/>
</tree>
</field>
</record>
@ -162,6 +163,7 @@
<field name="on_change"/>
<field name="case_default"/>
<field name="sequence"/>
<field name="state"/>
</group>
<separator string="Requirements" colspan="4"/>
<field name="requirements" nolabel="1" colspan="4"/>