Следите за изменениями рабочего процесса в OpenERP 7.0

Есть ли способ отслеживать изменения, внесенные в статус рабочего процесса, чтобы пользователи могли следить за процессом, который я реализую.

Ex:
Created on March 1st, by User 1.
Submitted on March 1st, by User 1.
Reviewing on March 2nd, by Admin.
Evaluating on March 4th, by SuperUser.
Accepted on March 6th, by MegaUser.

Таким образом, первая запись будет вставлена ​​при создании запроса, вторая - при нажатии кнопки рабочего процесса «отправить»; третий - когда нажата кнопка рабочего процесса «Обзор» и так далее.

Любые мысли и предложения приветствуются!

Использование записей журнала аудита для этого не подходит.

Заранее спасибо. -FC.


Я решил это с помощью self.pool.get ('obj_name'). Create (cr, uid, values) для создания новых записей во второй таблице.

использовал эту функцию:

    def insert_trace(self, cr, uid, id_request, context=None):
    request = self.browse(cr, uid, id_request, context)
    values = { 
        'generic_request_id':  id_request[0],
        'executor': self._get_user(cr, uid, context),
        'state': request[0].state,
    }
    tracing_ids = self.pool.get('tracing').create(cr, uid,values)
    return True

и вызывал его каждый раз, когда рабочий процесс менялся, например:

    def request_draft(self, cr, uid, ids, context=None):
    self.write(cr, uid, ids, {'state': 'draft'})
    self.insert_trace(cr, uid, ids,  context)
    return True

def submit_request(self, cr, uid, ids, context=None):
    self.write(cr, uid, ids, {'state': 'submitted'})
    self.insert_trace(cr, uid, ids, context)
    return True

Я оставлю это здесь, чтобы помочь любому с той же проблемой, что и у меня. Спасибо за советы!


person Filipe Castanheira    schedule 24.03.2014    source источник


Ответы (3)


Сделайте так, чтобы ваша таблица наследовала mail.thread, и пусть ваши кнопки будут отправлять сообщения всем подписчикам.

Вот урезанная версия одной из таблиц, в которой я реализовал это:

class fnx_sr_shipping(osv.Model):
    _name = 'fnx.sr.shipping'
    _description = 'shipping & receiving'
    _inherit = ['mail.thread']
    _mail_flat_thread = False

    ...

    def create(self, cr, uid, values, context=None):
        ...
        body = "some message"
        follower_ids = [47, 29, 31] # actual ids here
        ...
        new_id = super(fnx_sr_shipping, self).create(cr, uid, values, context=context)
        self.message_post(cr, uid, new_id, body=body,
                partner_ids=follower_ids, subtype='mt_comment',
                context=context)
        return new_id

    def sr_complete(self, cr, uid, ids, context=None):
        ...
        for id in ids:
            current = self.browse(cr, uid, id, context=context)
            if self.write(cr, uid, id, values, context=context):
                context['mail_create_nosubscribe'] = True
                followers = self._get_followers(cr, uid, [id], None, None,
                        context=context)[id]['message_follower_ids']
                message = 'Complete:  ...'
                self.message_post(cr, uid, id, body=message, subtype='mt_comment',
                        partner_ids=followers, context=context)
        return True

а затем в файле XML:

<button string="Complete" name="sr_complete" type="object"/>
person Ethan Furman    schedule 24.03.2014
comment
Спасибо за ответ, но, полагаю, я не совсем понял свое объяснение. Я хочу, чтобы изменения сохранялись в базе данных и отображали трассировку каждого запроса на странице в виде формы. Таким образом, в любое время пользователи могут видеть эволюцию процесса, его текущий статус и ответственных лиц в данный момент. - person Filipe Castanheira; 25.03.2014
comment
@FilipeCastanheira: Тогда, возможно, OpenChatter - это то, что вам нужно. Он отображает все сообщения, которые были отправлены в нижней части формы. В противном случае вам нужно будет создать отдельную history таблицу со ссылкой на нее one2many, зарегистрировать там свои записи и добавить ее как notebook page. - person Ethan Furman; 25.03.2014
comment
Спасибо, попробую. - person Filipe Castanheira; 26.03.2014

Я решил это с помощью self.pool.get ('obj_name'). Create (cr, uid, values) для создания новых записей во второй таблице.

использовал эту функцию:

def insert_trace(self, cr, uid, id_request, context=None):
    request = self.browse(cr, uid, id_request, context)
    values = { 
        'generic_request_id':  id_request[0],
        'executor': self._get_user(cr, uid, context),
        'state': request[0].state,
    }
    tracing_ids = self.pool.get('tracing').create(cr, uid,values)
    return True

и вызывал его каждый раз, когда рабочий процесс менялся, например:

def request_draft(self, cr, uid, ids, context=None):
    self.write(cr, uid, ids, {'state': 'draft'})
    self.insert_trace(cr, uid, ids,  context)
    return True

def submit_request(self, cr, uid, ids, context=None):
    self.write(cr, uid, ids, {'state': 'submitted'})
    self.insert_trace(cr, uid, ids, context)
    return True

Я оставлю это здесь, чтобы помочь любому с той же проблемой, что и у меня.

person Filipe Castanheira    schedule 07.04.2014

Мы разработали модуль для выполнения этой задачи. Если кто-то в этом нуждается, его можно загрузить с https://github.com/AC-Hoatzin/odoo-addons.

person Manuel Alejandro    schedule 02.03.2015