[MERGE] auto-follow Sales Team, Projet, HR Manager
bzr revid: fp@tinyerp.com-20120927191059-pug5mrft8f06uwux
This commit is contained in:
commit
0eee48d30a
|
@ -102,6 +102,7 @@ class crm_case_section(osv.osv):
|
|||
""" Model for sales teams. """
|
||||
_name = "crm.case.section"
|
||||
_inherits = {'mail.alias': 'alias_id'}
|
||||
_inherit = "mail.thread"
|
||||
_description = "Sales Teams"
|
||||
_order = "complete_name"
|
||||
|
||||
|
|
|
@ -277,6 +277,10 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
obj_id = super(crm_lead, self).create(cr, uid, vals, context)
|
||||
section_id = self.browse(cr, uid, obj_id, context=context).section_id
|
||||
if section_id:
|
||||
followers = [follow.id for follow in section_id.message_follower_ids]
|
||||
self.message_subscribe(cr, uid, [obj_id], followers, context=context)
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
return obj_id
|
||||
|
||||
|
@ -790,7 +794,12 @@ class crm_lead(base_stage, format_address, osv.osv):
|
|||
stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
|
||||
if stage.on_change:
|
||||
vals['probability'] = stage.probability
|
||||
return super(crm_lead,self).write(cr, uid, ids, vals, context)
|
||||
if vals.get('section_id'):
|
||||
section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context)
|
||||
if section_id:
|
||||
vals.setdefault('message_follower_ids', [])
|
||||
vals['message_follower_ids'] += [(4, follower.id) for follower in section_id.message_follower_ids]
|
||||
return super(crm_lead,self).write(cr, uid, ids, vals, context)
|
||||
|
||||
# ----------------------------------------
|
||||
# Mail Gateway
|
||||
|
|
|
@ -115,6 +115,10 @@
|
|||
<field name="note"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers" help="Followers of this salesteam follow automatically all opportunities related to this salesteam."/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -141,6 +141,7 @@ hr_employee()
|
|||
|
||||
class hr_evaluation(osv.osv):
|
||||
_name = "hr_evaluation.evaluation"
|
||||
_inherit = "mail.thread"
|
||||
_description = "Employee Appraisal"
|
||||
_rec_name = 'employee_id'
|
||||
_columns = {
|
||||
|
@ -242,8 +243,10 @@ class hr_evaluation(osv.osv):
|
|||
def button_final_validation(self, cr, uid, ids, context=None):
|
||||
request_obj = self.pool.get('hr.evaluation.interview')
|
||||
self.write(cr, uid, ids, {'state':'progress'}, context=context)
|
||||
for id in self.browse(cr, uid, ids, context=context):
|
||||
if len(id.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', id.id),('state', 'in', ['done','cancel'])], context=context)):
|
||||
for evaluation in self.browse(cr, uid, ids, context=context):
|
||||
if evaluation.employee_id and evaluation.employee_id.parent_id and evaluation.employee_id.parent_id.user_id:
|
||||
self.message_subscribe_users(cr, uid, [evaluation.id], user_ids=[evaluation.employee_id.parent_id.user_id.id], context=context)
|
||||
if len(evaluation.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', evaluation.id),('state', 'in', ['done','cancel'])], context=context)):
|
||||
raise osv.except_osv(_('Warning!'),_("You cannot change state, because some appraisal(s) are in waiting answer or draft state."))
|
||||
return True
|
||||
|
||||
|
@ -263,6 +266,10 @@ class hr_evaluation(osv.osv):
|
|||
return True
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if vals.get('employee_id'):
|
||||
employee_id = self.pool.get('hr.employee').browse(cr, uid, vals.get('employee_id'), context=context)
|
||||
if employee_id.parent_id and employee_id.parent_id.user_id:
|
||||
vals['message_follower_ids'] = [(4, employee_id.parent_id.user_id.partner_id.id)]
|
||||
if 'date' in vals:
|
||||
new_vals = {'date_deadline': vals.get('date')}
|
||||
obj_hr_eval_iterview = self.pool.get('hr.evaluation.interview')
|
||||
|
|
|
@ -209,6 +209,10 @@
|
|||
<field nolabel="1" name="note_summary" placeholder="Action Plan..."/>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -118,6 +118,9 @@ class hr_expense_expense(osv.osv):
|
|||
return {'value': {'department_id': department_id, 'company_id': company_id}}
|
||||
|
||||
def expense_confirm(self, cr, uid, ids, *args):
|
||||
for expense in self.browse(cr, uid, ids):
|
||||
if expense.employee_id and expense.employee_id.parent_id.user_id:
|
||||
self.message_subscribe_users(cr, uid, [expense.id], user_ids=[expense.employee_id.parent_id.user_id.id])
|
||||
self.write(cr, uid, ids, {
|
||||
'state':'confirm',
|
||||
'date_confirm': time.strftime('%Y-%m-%d')
|
||||
|
|
|
@ -303,7 +303,7 @@ class hr_holidays(osv.osv):
|
|||
self.check_holidays(cr, uid, ids, context=context)
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
if record.employee_id and record.employee_id.parent_id and record.employee_id.parent_id.user_id:
|
||||
self.message_subscribe(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context)
|
||||
self.message_subscribe_users(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context)
|
||||
self.holidays_confirm_notificate(cr, uid, ids, context=context)
|
||||
return self.write(cr, uid, ids, {'state':'confirm'})
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@ class one2many_mod(fields.one2many):
|
|||
|
||||
class hr_timesheet_sheet(osv.osv):
|
||||
_name = "hr_timesheet_sheet.sheet"
|
||||
_inherit = "mail.thread"
|
||||
_table = 'hr_timesheet_sheet_sheet'
|
||||
_order = "id desc"
|
||||
_description="Timesheet"
|
||||
|
@ -265,6 +266,8 @@ class hr_timesheet_sheet(osv.osv):
|
|||
|
||||
def button_confirm(self, cr, uid, ids, context=None):
|
||||
for sheet in self.browse(cr, uid, ids, context=context):
|
||||
if sheet.employee_id and sheet.employee_id.parent_id and sheet.employee_id.parent_id.user_id:
|
||||
self.message_subscribe_users(cr, uid, [sheet.id], user_ids=[sheet.employee_id.parent_id.user_id.id], context=context)
|
||||
self.check_employee_attendance_state(cr, uid, sheet.id, context=context)
|
||||
di = sheet.user_id.company_id.timesheet_max_difference
|
||||
if (abs(sheet.total_difference) < di) or not di:
|
||||
|
|
|
@ -142,6 +142,10 @@
|
|||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -26,6 +26,8 @@ openerp_mail_followers = function(session, mail) {
|
|||
this._super.apply(this, arguments);
|
||||
this.options.image = this.node.attrs.image || 'image_small';
|
||||
this.options.title = this.node.attrs.title || 'Followers';
|
||||
this.options.context = this.node.attrs.context;
|
||||
this.options.comment = this.node.attrs.help || false;
|
||||
this.ds_model = new session.web.DataSetSearch(this, this.view.model);
|
||||
this.ds_follow = new session.web.DataSetSearch(this, this.field.relation);
|
||||
},
|
||||
|
|
|
@ -11,6 +11,11 @@
|
|||
<button type="button" class="oe_mail_button_follow">Follow</button>
|
||||
<button type="button" class="oe_mail_button_unfollow oe_mail_button_mouseout">Following</button>
|
||||
</div>
|
||||
<div class="oe_grey">
|
||||
<t t-if="widget.options.comment">
|
||||
<h5><t t-raw="widget.options.comment"/></h5>
|
||||
</t>
|
||||
</div>
|
||||
<div class="oe_mail_recthread_followers">
|
||||
<t t-if="widget.options.title">
|
||||
<h4><t t-raw="widget.options.title"/></h4>
|
||||
|
|
|
@ -1100,6 +1100,10 @@ class task(base_stage, osv.osv):
|
|||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
task_id = super(task, self).create(cr, uid, vals, context=context)
|
||||
project_id = self.browse(cr, uid, task_id, context=context).project_id
|
||||
if project_id:
|
||||
followers = [follower.id for follower in project_id.message_follower_ids]
|
||||
self.message_subscribe(cr, uid, [task_id], followers, context=context)
|
||||
self._store_history(cr, uid, [task_id], context=context)
|
||||
self.create_send_note(cr, uid, [task_id], context=context)
|
||||
return task_id
|
||||
|
@ -1109,6 +1113,9 @@ class task(base_stage, osv.osv):
|
|||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
if vals.get('project_id'):
|
||||
project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context)
|
||||
vals['message_follower_ids'] = [(4, follower.id) for follower in project_id.message_follower_ids]
|
||||
if vals and not 'kanban_state' in vals and 'stage_id' in vals:
|
||||
new_stage = vals.get('stage_id')
|
||||
vals_reset_kstate = dict(vals, kanban_state='normal')
|
||||
|
|
|
@ -152,7 +152,7 @@
|
|||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_follower_ids" widget="mail_followers" help="Follow this project to automatically follow all related tasks and issues."/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
@ -364,6 +364,10 @@ class project_issue(base_stage, osv.osv):
|
|||
logged_fields = ['stage_id', 'state', 'message_ids']
|
||||
if any([field in vals for field in logged_fields]):
|
||||
vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
if vals.get('project_id'):
|
||||
project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context)
|
||||
vals['message_follower_ids'] = [(4, follower.id) for follower in project_id.message_follower_ids]
|
||||
|
||||
return super(project_issue, self).write(cr, uid, ids, vals, context)
|
||||
|
||||
def onchange_task_id(self, cr, uid, ids, task_id, context=None):
|
||||
|
@ -381,6 +385,10 @@ class project_issue(base_stage, osv.osv):
|
|||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
obj_id = super(project_issue, self).create(cr, uid, vals, context=context)
|
||||
project_id = self.browse(cr, uid, obj_id, context=context).project_id
|
||||
if project_id:
|
||||
followers = [follower.id for follower in project_id.message_follower_ids]
|
||||
self.message_subscribe(cr, uid, [obj_id], followers, context=context)
|
||||
self.create_send_note(cr, uid, [obj_id], context=context)
|
||||
return obj_id
|
||||
|
||||
|
|
|
@ -23,13 +23,27 @@ from osv import osv,fields
|
|||
|
||||
class sale_order(osv.osv):
|
||||
_inherit = 'sale.order'
|
||||
|
||||
_columns = {
|
||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||
'categ_ids': fields.many2many('crm.case.categ', 'sale_order_category_rel', 'order_id', 'category_id', 'Categories', \
|
||||
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]")
|
||||
}
|
||||
|
||||
def create(self, cr, uid, vals, context=None):
|
||||
order = super(sale_order, self).create(cr, uid, vals, context=context)
|
||||
section_id = self.browse(cr, uid, order, context=context).section_id
|
||||
if section_id:
|
||||
followers = [follow.id for follow in section_id.message_follower_ids]
|
||||
self.message_subscribe(cr, uid, [order], followers, context=context)
|
||||
return order
|
||||
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if vals.get('section_id'):
|
||||
section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context)
|
||||
if section_id:
|
||||
vals['message_follower_ids'] = [(4, follower.id) for follower in section_id.message_follower_ids]
|
||||
return super(sale_order, self).write(cr, uid, ids, vals, context=context)
|
||||
|
||||
sale_order()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
Loading…
Reference in New Issue