def _find_lost_stage(self, cr, uid, type, section_id):
return self._find_percent_stage(cr, uid, 0.0, type, section_id)
--
++
def _find_won_stage(self, cr, uid, type, section_id):
return self._find_percent_stage(cr, uid, 100.0, type, section_id)
stage_pool = self.pool.get('crm.case.stage')
if section_id :
ids = stage_pool.search(cr, uid, [("probability", '=', percent), ("type", 'like', type), ("section_ids", 'in', [section_id])])
-- else :
++ else :
ids = stage_pool.search(cr, uid, [("probability", '=', percent), ("type", 'like', type)])
--
++
if ids:
return ids[0]
return False
--
--
++
++
def _find_first_stage(self, cr, uid, type, section_id):
"""
return the first stage that has a sequence number equal or higher than sequence
stage_pool = self.pool.get('crm.case.stage')
if section_id :
ids = stage_pool.search(cr, uid, [("sequence", '>', 0), ("type", 'like', type), ("section_ids", 'in', [section_id])])
-- else :
++ else :
ids = stage_pool.search(cr, uid, [("sequence", '>', 0), ("type", 'like', type)])
--
++
if ids:
stages = stage_pool.browse(cr, uid, ids)
stage_min = stages[0]
if stage_min.sequence > stage.sequence:
stage_min = stage
return stage_min.id
-- else :
++ else :
return False
--
++
def onchange_stage_id(self, cr, uid, ids, stage_id, context={}):
""" @param self: The object pointer
@param uid: the current user’s ID for security checks,
@param ids: List of stage’s IDs
@stage_id: change state id on run time """
--
++
if not stage_id:
return {'value':{}}
default = {}
default.update({
-- 'message_ids': [],
++ 'message_ids': [],
})
if hasattr(self, '_columns'):
if self._columns.get('date_closed'):
default.update({
-- 'date_closed': False,
++ 'date_closed': False,
})
if self._columns.get('date_open'):
default.update({
'date_open': False
})
return super(osv.osv, self).copy(cr, uid, id, default, context=context)
--
++
def _get_default_email(self, cr, uid, context=None):
"""Gives default email address for current user
@param self: The object pointer
return next_stage
else :
return self._find_next_stage(cr, uid, stage_list, index + 1, current_seq, stage_pool)
--
++
def stage_change(self, cr, uid, ids, context=None, order='sequence'):
if context is None:
context = {}
for case in self.browse(cr, uid, ids, context=context):
next_stage = False
value = {}
-- if case.section_id.id :
++ if case.section_id.id :
domain = [('type', '=', stage_type),('section_ids', '=', case.section_id.id)]
else :
domain = [('type', '=', stage_type)]
--
++
stages = stage_pool.search(cr, uid, domain, order=order)
current_seq = case.stage_id.sequence
index = -1
index = stages.index(case.stage_id.id)
next_stage = self._find_next_stage(cr, uid, stages, index, current_seq, stage_pool, context=context)
--
++
if next_stage:
next_stage_id = next_stage.id
value.update({'stage_id': next_stage.id})
if next_stage.on_change:
value.update({'probability': next_stage.probability})
self.write(cr, uid, [case.id], value, context=context)
--
--
++
++
return next_stage_id #FIXME should return a list of all id
--
--
++
++
def stage_next(self, cr, uid, ids, context=None):
"""This function computes next stage for case from its current stage
using available stage for that case type
@param uid: the current user’s ID for security checks,
@param ids: List of case IDs
@param context: A standard dictionary for contextual values"""
--
++
return self.stage_change(cr, uid, ids, context=context, order='sequence')
--
++
def stage_previous(self, cr, uid, ids, context=None):
"""This function computes previous stage for case from its current stage
using available stage for that case type
"""
if not part:
return {'value': {'partner_address_id': False,
-- 'email_from': False,
++ 'email_from': False,
'phone': False
}}
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
--
++
cases = self.browse(cr, uid, ids)
self._history(cr, uid, cases, _('Open'))
for case in cases:
if not case.user_id:
data['user_id'] = uid
self.write(cr, uid, case.id, data)
--
--
-- self._action(cr, uid, cases, 'open')
++
++
++ self._action(cr, uid, cases, 'open')
return True
def case_close(self, cr, uid, ids, *args):
tools.email_send(
src,
[dest],
-- subject,
++ subject,
body,
reply_to=case.section_id.reply_to,
openobject_id=str(case.id),
_description = "Stage of case"
_rec_name = 'name'
_order = "sequence"
--
--
--
++
++
++
def _get_type_value(self, cr, user, context):
return [('lead','Lead'),('opportunity','Opportunity')]
'requirements': fields.text('Requirements'),
'type': fields.selection(_get_type_value, 'Type'),
}
--
--
++
++
def _find_stage_type(self, cr, uid, context=None):
"""Finds type of stage according to object.
@param self: The object pointer
'child_ids': fields.one2many('crm.case.section', 'parent_id', 'Child Teams'),
'resource_calendar_id': fields.many2one('resource.calendar', "Working Time"),
'note': fields.text('Description'),
-- 'working_hours': fields.float('Working Hours', digits=(16,2 )),
++ 'working_hours': fields.float('Working Hours', digits=(16,2 )),
'stage_ids': fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'),
}
_columns = {
'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', 'Sections'),
}
--
++
crm_case_stage()
_columns = {
'context_section_id': fields.many2one('crm.case.section', 'Sales Team'),
}
- def write(self, cr, uid, ids, vals, context=None):
- res = super(users, self).write(cr, uid, ids, vals, context=context)
++
++ def create(self, cr, uid, vals, context=None):
++ res = super(users, self).create(cr, uid, vals, context=context)
+ section_obj=self.pool.get('crm.case.section')
- if isinstance(ids, (str, int, long)):
- ids = [ids]
- for user in self.browse(cr, uid, ids, context):
- if user.context_section_id:
- section_obj.write(cr, uid, [user.context_section_id.id], {'member_ids':[(4, user.id)]},context)
- return res
++
++ if vals.get('context_section_id', False):
++ section_obj.write(cr, uid, [vals['context_section_id']], {'member_ids':[(4, res)]}, context)
++ return res
users()