ODOO10工作流列子

可以在工作流每个节点上审批和申请,在表单上列出审批情况及审批意见

每个节点上的人员设置。

1.fhtestweishui001.py
 

# -*- encoding: utf-8 -*- 

from itertools import groupby
from datetime import datetime, timedelta

from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.tools import float_is_zero, float_compare, DEFAULT_SERVER_DATETIME_FORMAT
from odoo.tools.misc import formatLang

import odoo.addons.decimal_precision as dp
class fhtest_weishui001(models.Model):
    _name = 'fhtest.weishui001'
    _description = u'测试001'
    _inherit = ['mail.thread', 'ir.needaction_mixin']    
    _rec_name='fname'
    #_order = 'date_order desc, id desc'    
    
    def get_employee(self):
        obj = self.env['hr.employee']
        idsobj = obj.search([('user_id','=',self.env.user.id)])
        print('-------------------------------------')        
        print(self.env.user.id)        
        #print(ids)    
        res = idsobj.read()
        print(res)                    
        return res and res[0]['id'] or 0
        
    @api.depends('qty_delivered','qty_delivered0')    
    def _amount_all(self):
        amount_untaxed = amount_tax = 0.0    
        print('-------------------触发器----------------------')            
        
        for order in self:
            order.update({'amount_untaxed':order.qty_delivered0-order.qty_delivered,})
        
        return True        


    
        
    fname= fields.Many2one('hr.employee',u'商品',readonly=False,required=False,translate=False)
    origin = fields.Char(string='Source Document', help="Reference of the document that generated this sales order request.")  
    FAddperson =fields.Many2one('hr.employee',u'添加人',readonly=False,required=False,translate=False,default=lambda self: self.get_employee())
    FConsultant=fields.Many2one('hr.employee',u'班主任',readonly=False,required=False,translate=False)                       
    FAdddate= fields.Datetime(u'添加日期',readonly=False,required=False,translate=False, default=fields.Datetime.now)
    state=fields.Selection([('draft',u'草稿'),('wait_prove',u'提交申请'),('proved',u'主管审批')], u'状态', required=False, default='draft')                   
    FDisable=fields.Selection([('0',u'启用'),('1',u'停用')],u'是否停用',readonly=False,required=False,translate=False) 
    order_line = fields.One2many('fhtest.weishui001tbline', 'pay_id', string='Order Lines', copy=True)
    FConsultant1=fields.Many2one('hr.employee',u'员工',readonly=False,required=False,translate=False)    
    FConsultant2=fields.Many2one('hr.employee',u'经理',readonly=False,required=False,translate=False)    
    #工作例子    
    @api.multi        
    def action_funproved00(self):
        #context = context or {}
        t=fields.datetime.now()
        #huid=self.get_employee(cr,uid,context)
        #self.write({'state':'wait_prove','FAdddate':t}) 
        
        '''print('--------------------------')
        print(self.id)            
        #selfmodels=super(fhtest_weishui001,self).browse(self.id)
        model002= self.env['fhtest.weishui002']            
        
        print('--------------------------')    
        print(self)    

        print(self.fname)        
        print(self.fname.id)        
            
        vals={'fname': self.fname.id,'FAdddate':t}
        model002.create(vals)'''
            
            
        model002= self.env['fhtest.weishui002']    
        selfmodels=model002.search([('fname', '=', self.fname.id)])        
        for selfmodel in selfmodels:
        
            print('------------2222--------------')    
            
            #selfmodel.update({'state':self.state,'FAdddate':t})
            selfmodel.unlink()

            '''default={}                
            selfmodel.copy(default)'''        
        return True
        
    @api.model        
    def action_funproved0(self):
        #context = context or {}
        t=fields.datetime.now()
        #huid=self.get_employee(cr,uid,context)
        self.write({'state':'wait_prove','FAdddate':t})       
        return True
        
    @api.model        
    def action_funproved(self):
        #context = context or {}
        t=fields.datetime.now()
        #huid=self.get_employee(cr,uid,context)
        self.write({'state':'proved','FAdddate':t})       
        return True        
    @api.model        
    def create(self, vals):
    
    
        result = super(fhtest_weishui001, self).create(vals)

        print('-------------新增-------------------------')
        print(vals)
        print(result)        
        return result
    @api.multi        
    def write(self, values):
        
        result = super(fhtest_weishui001, self).write(values)        
        print('-------------修改-------------------------')
        print(values)
        print(result)
        print(self)
        return result
    @api.multi
    def unlink(self):
        print('-------------删除-------------------------')
        print(self)    
        return super(fhtest_weishui001, self).unlink()
    @api.multi
    def copy(self, default=None):
        print('-------------复制-------------------------')    
        return super(fhtest_weishui001, self).copy(default)
    @api.multi
    def search(self, args, offset=0, limit=None, order=None, context=None, count=False):
        domain =None        
        domain = [('state', '=', '0')]        
        return super(fhtest_weishui001, self).search(args, offset=offset, limit=limit, order=order, count=count)
        
fhtest_weishui001() #对象定义结束

class fhtest_weishui001tbline(models.Model):
    _name = 'fhtest.weishui001tbline'
    _description = u'测试子表'
    #_rec_name='FClass'
    def get_employee(self, cr, uid, context={}):
        obj = self.pool.get('hr.employee')
        ids = obj.search(cr, uid, [('user_id','=',uid)])
        res = obj.read(cr, uid, ids, ['id','name'], context)
        return res and res[0]['id'] or 0

    pay_id=fields.Many2one('fhtest.weishui001',u'fhtest_weishui001tb',required=True, ondelete='cascade', index=True, copy=False)
    fmobile1= fields.Char(u'标题',readonly=False,required=False,translate=False)
    fremarks=fields.Text(u'备注',readonly=False,required=False,translate=False)
    FAddperson =fields.Many2one('hr.employee',u'审批人',readonly=False,required=False,translate=False)
    FAdddate= fields.Datetime(u'添加日期',readonly=False,required=False,translate=False)    
    FConsultant=fields.Many2one('hr.employee',u'班主任',readonly=False,required=False,translate=False)                       
    #FAdddate= fields.Datetime(u'添加日期',readonly=False,required=False,translate=False)
    Fstatus=fields.Selection([('0',u'同意'),('1',u'驳回')],u'结果',readonly=False,required=False,translate=False)                       
    FDisable=fields.Selection([('0',u'启用'),('1',u'停用')],u'是否停用',readonly=False,required=False,translate=False)
        
    @api.model        
    def create(self, vals):
        result = super(fhtest_weishui001tbline, self).create(vals)    
        return result
    @api.multi        
    def write(self, values):
        
        result = super(fhtest_weishui001tbline, self).write(values)        
        
        return result
    @api.multi
    def unlink(self):
    
        return super(fhtest_weishui001tbline, self).unlink()
    @api.multi
    def copy(self, default=None):
        return super(fhtest_weishui001tbline, self).copy(default)
    @api.multi
    def search(self, args, offset=0, limit=None, order=None, context=None, count=False):
        domain =None        
        domain = [('state', '=', '0')]        
        return super(fhtest_weishui001tbline, self).search(args, offset=offset, limit=limit, order=order, count=count)    
     
fhtest_weishui001tbline() #对象定义结束
2.fhtest_weishui001_view.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    
        <record id="weishui001_tree_view" model="ir.ui.view">
            <field name="name">测试001</field>
            <field name="model">fhtest.weishui001</field>
            <field name="priority">2</field>
            <field name="arch" type="xml">
                <tree string="测试001"  deng="true">
                  <field name="fname"/>
                 <field name="FAddperson" /> 

                 
                </tree>
            </field>
        </record>
        <!-- form view -->
        <record model="ir.ui.view" id="weishui001_form_view">
            <field name="name">测试001</field>
            <field name="model">fhtest.weishui001</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="测试001">
                
                    <header>
                        <button string="提交申请" name="%(tbclue_invoice)d"  states="draft"  context="{'pay_id':id,'work':'action_toprovekk'}"  type="action" class="oe_highlight"  />
                        <button string="经理审批" name="%(tbclue_invoice)d"  states="wait_prove"  context="{'pay_id':id,'work':'action_prove'}" type="action" class="oe_highlight"  />                    
                         <field name="state" widget="statusbar" statusbar_visible="draft,wait_prove,proved"/>
                        
                    </header>
                    <sheet>
                        <group col="4">

                        <field name="fname"   options="{'no_create_edit': True,'no_open': True}" />

                        <field name="FAddperson"  groups=""  />
                        <field name="FAdddate"/>

                        </group>
                        <notebook>

                            <page string="经办信息">
                            <group col="4"> 
                            <field name="FConsultant1"/>
                            <field name="FConsultant2"/>
                            </group>  
                            </page>
                            <page string="审批信息">

                                <field name="order_line" nolabel="1" string="测试子表">
                                    <tree string="测试子表" editable="bottom">
                                        <!--列表字段-->
                                        <field name="Fstatus"/>
                                        <field name="fmobile1"/>
                                        <field name="fremarks"/>
                                        <field name="FAddperson"/>
                                        <field name="FAdddate"/>

                                    </tree>
                                    <form string="测试001">
                                    <sheet> 
                                        <group col="4"> 
                                        <field name="Fstatus"/>
                                        <field name="fmobile1"/>

                                        <field name="FAddperson"/>
                                        <field name="FAdddate"/>

                                        </group>  

                                        <group col="2"> 
                                         <field name="fremarks"/>                                       
                                        </group>                                                                                  

                                    </sheet>
                                    </form>
                                </field>
                            </page>
                            

                        </notebook>                        
                    
                    </sheet>
                    
                <div class="oe_chatter">
                    <field name="message_follower_ids" widget="mail_followers"/>
                    <field name="message_ids" widget="mail_thread"/>
                </div>                    
                    
                </form>
            </field>
        </record>
        <record id="view_weishui001_filter" model="ir.ui.view">
            <field name="name">测试001</field>
            <field name="model">fhtest.weishui001</field>
            <field name="arch" type="xml">
                <search string="测试001">    
                    <field name="fname"/>
                    
                    <filter string="草稿" domain="[('state','=','draft')]" />    
                    <filter string="非草稿" domain="[('state','!=','draft')]" />                        
                    <group expand="0" string="">
                        <filter string="按name分组" domain="[]" context="{'group_by':'fname'}"/>
                        
                    </group>
                </search>
            </field>
        </record>    


        <record id="view_weishui001_calendar" model="ir.ui.view">
            <field name="name">fhtest.weishui001calendar</field>
            <field name="model">fhtest.weishui001</field>
            <field name="arch" type="xml">
                <calendar string="Sales Orders" color="state" date_start="FAdddate">
                    <field name="fname"/>
                   <field name="FAddperson"/>
                </calendar>
            </field>
        </record>

        <record model="ir.ui.view" id="view_weishui001_kanban">
            <field name="name">fhtest.weishui001.kanban</field>
            <field name="model">fhtest.weishui001</field>
            <field name="arch" type="xml">
                <kanban class="o_kanban_mobile">
                 
                    <templates>
                        <t t-name="kanban-box">
                            <div t-attf-class="oe_kanban_card oe_kanban_global_click">
                                <div class="row">
                                    <div class="col-xs-6">
                                        <strong><span><field name="fname"/></span></strong>
                                    </div>
                                    <div class="col-xs-6 pull-right text-right">
                                        <strong><field name="FAddperson"/></strong>
                                    </div>
                                </div>
                                <div class="row">
                                    <div class="col-xs-6 text-muted">
                                        <span></span>
                                    </div>
                                    <div class="col-xs-6">
                                        <span class="pull-right text-right">
                                           
                                        </span>
                                    </div>
                                </div>
                            </div>
                        </t>
                    </templates>
                </kanban>
            </field>
        </record>
        
        <!-- actions -->
        <record model="ir.actions.act_window" id="action_weishui001_form">
            <field name="name">测试001</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">fhtest.weishui001</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form,calendar,kanban</field>
            <field name="search_view_id" ref="view_weishui001_filter"/>            
            <field name="view_id" ref="weishui001_tree_view"/>
            <field name="domain">[] </field>
        </record>
        
        
        
        
        
        <menuitem name="测试001" id="weishui001_menu_mainform_1"/>
        <menuitem name="测试001" id="weishui001_menu_mainform_2" parent="weishui001_menu_mainform_1"/>
        <menuitem name="测试001" parent="weishui001_menu_mainform_2" id="weishui001_menu_mainform_3" action="action_weishui001_form"/>
    
    
    
    
    
    
    
    
</odoo>
 

3.工作流文件TB_workflow.xml

<?xml version="1.0" ?>
<openerp>
    <data>
        <record id="wkf_tblesson" model="workflow">
            <field name="name">转课申请</field>
            <field name="osv">fhtest.weishui001</field>
        </record>
        <record id="act_draft" model="workflow.activity">
            <field name="wkf_id" ref="wkf_tblesson"/>
            <field name="flow_start">True</field>
            <field name="name">draft</field>
            <field name="kind">function</field>
            <field name="action">write({'state':'draft'})</field>
        </record>
        <record id="act_wait_prove" model="workflow.activity">
            <field name="wkf_id" ref="wkf_tblesson"/>
            <field name="name">wait_prove</field>
            <field name="kind">function</field>
            <field name="action">action_funproved0()</field>
        </record>
        <record id="act_proved" model="workflow.activity">
            <field name="wkf_id" ref="wkf_tblesson"/>
            <field name="name">proved</field>
            <field name="kind">function</field>
            
            <field name="flow_stop">True</field>            
            <field name="action">action_funproved()</field>
        </record>

        <record id="trans_draft_wait" model="workflow.transition">
            <field name="act_from" ref="act_draft"/>
            <field name="act_to" ref="act_wait_prove"/>
            <field name="signal">action_toprovekk</field>
        </record>
        <record id="trans_wait_proved" model="workflow.transition">
            <field name="act_from" ref="act_wait_prove"/>
            <field name="act_to" ref="act_proved"/>
            <field name="signal">action_prove</field>
        </record>
        
    </data>
</openerp>
4.审批程序:审批并通知到审批人,出现消息提示

# -*- coding: utf-8 -*-
import time
from odoo import SUPERUSER_ID, workflow
from odoo import api, fields, models, _
import odoo.addons.decimal_precision as dp
from odoo.exceptions import UserError
import calendar
class fhtest_tbclue(models.TransientModel):
    _name = 'fhtest.tbclue'
    _description = u'线索'

    fsex=fields.Selection([('0',u'是'),('1',u'否')],u'性别',readonly=False,required=False,translate=False)
    fsource=fields.Many2one('hr.employee',u'线索来源',readonly=False,required=False,translate=False)
    fmobile1= fields.Char(u'标题',readonly=False,required=False,translate=False)
    fmobile2= fields.Char(u'手机2',readonly=False,required=False,translate=False)
    fweixin= fields.Char(u'微信号',readonly=False,required=False,translate=False)
    fqq= fields.Char(u'QQ',readonly=False,required=False,translate=False)
    femail= fields.Char(u'邮箱',readonly=False,required=False,translate=False)
    fregion=fields.Many2one('hr.employee',u'地区',readonly=False,required=False,translate=False)
    faddress= fields.Char(u'地址',readonly=False,required=False,translate=False)
    fstate=fields.Selection([('0',u'是'),('1',u'否')],u'状态',readonly=False,required=False,translate=False)
    ffollowuptime=fields.Datetime(u'下次跟进时间',readonly=False,required=False,translate=False)
    fremarks=fields.Text(u'备注',readonly=False,required=False,translate=False)
    fsubordinate=fields.Many2one('hr.employee',u'所属部门',readonly=False,required=False,translate=False)

    def ziyuanxd_fdcrm_create(self):
        model_data = self.env['ir.model.data']
        model_self=super(fhtest_tbclue, self).read()[0]
            
        
        domaincontext=[]
                
            
        value = {
            'view_type': 'form',
            'view_mode': 'tree,form',
            'res_model': 'fhtest.weishui001',
            'res_id': 1,
            'views': [(False, 'tree'),(False, 'form')],
            'type': 'ir.actions.act_window',
            #'domain':domaincontext ,                    
        }        
        
        return value
    def ziyuanxd_fdcrm_create002(self):
        model_data = self.env['ir.model.data']
        model_self=super(fhtest_tbclue, self).read(['fmobile1','fremarks'])[0]
        vals={}
        vals['pay_id']=self._context.get('pay_id')       
        vals['fmobile1']=model_self['fmobile1']
        vals['fremarks']=model_self['fremarks'] 
        vals['FAddperson']=self.env.user.id
        vals['FAdddate']=fields.Datetime.now()         
        vals['Fstatus']='0'
        result =self.env['fhtest.weishui001tbline'].create(vals)
        print("--------------------self._context.get('work')-----------------------")  
        print(self._context.get('work'))  
        print(self._context.get('pay_id'))             
        #发送消息
        tinfo=self.env['fhtest.weishui001'].browse(self._context.get('pay_id'))[0]
        print(tinfo.FConsultant2.user_id.name)
        print(tinfo.FConsultant2.user_id.partner_id.id)        
        fid=tinfo.message_post(body=_("物品申购表工作流"))
        fmessage=self.env['mail.message'].browse(fid.id)[0]  

        partner_channels = self.env['res.partner'].search([('name', '=',tinfo.FConsultant2.user_id.name)])[0]
        print('------------partner_channels:----------------')
        print(partner_channels.id)
        
        fmessage.write({'subject':'物品申购表工作流','needaction_partner_ids':[[6, False,[partner_channels.id]]],'partner_ids':  [[6, False,[tinfo.FConsultant2.user_id.partner_id.id]]],'notified_partner_ids': [[6, False, [tinfo.FConsultant2.user_id.partner_id.id]]]})    
        print(fid.id)    
        
        self.env['fhtest.weishui001'].browse(self._context.get('pay_id')).signal_workflow(self._context.get('work'))

        
        return True
    def ziyuanxd_fdcrm_create003(self):
        model_data = self.env['ir.model.data']
        model_self=super(fhtest_tbclue, self).read(['fmobile1','fremarks'])[0]
        vals={}
        vals['pay_id']=self._context.get('pay_id')       
        vals['fmobile1']=model_self['fmobile1']
        vals['fremarks']=model_self['fremarks'] 
        vals['FAddperson']=self.env.user.id
        vals['FAdddate']=fields.Datetime.now()         
        vals['Fstatus']='1'    
        result =self.env['fhtest.weishui001tbline'].create(vals)
        print("--------------------self._context.get('work')-----------------------")  
        print(self._context.get('work'))  
        print(self._context.get('pay_id'))             

        self.env['fhtest.weishui001'].browse(self._context.get('pay_id')).signal_workflow(self._context.get('work'))        
        return True

    def ziyuanxd_fdcrm_create004(self):
        
        
        return True        
fhtest_tbclue()
 

5.fhcrm_tbclue_view.xml审批界面:

<?xml version="1.0"?>
<odoo>
        <!-- Phonecall to Phonecall view -->
        <record model="ir.ui.view" id="tbclue_view">
            <field name="name">线索</field>
            <field name="model">fhtest.tbclue</field>
            <field name="arch" type="xml">
                <form string="CRM向导" >
                    <group col="2" colspan="2">
                    <field name="fmobile1"/>
                
                    </group>

                    <group col="2" colspan="2">
                    
                    <field name="fremarks"/>


                    </group>

                    <footer>
                        <button name="ziyuanxd_fdcrm_create002" string="同意" type="object" class="oe_highlight"/>
                        or

                        <button name="ziyuanxd_fdcrm_create003" string="驳回" type="object" class="oe_highlight"/>
                        or                        
                        <button string="取消" class="oe_link" special="cancel" />
                    </footer>
                </form>
            </field>
        </record>
        <record id="tbclue_invoice" model="ir.actions.act_window">
            <field name="name">线索</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">fhtest.tbclue</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="view_id" ref="tbclue_view"/>
            <field name="target">new</field>
        </record>
        <!-- Phonecall to Phonecall view -->
        <record model="ir.ui.view" id="tbclue_view2">
            <field name="name">线索</field>
            <field name="model">fhtest.tbclue</field>
            <field name="arch" type="xml">
                <form string="CRM向导" >
                    <group col="2" colspan="2">
                    <field name="fmobile1"/>
                
                    </group>

                

                    <footer>
                        <button name="ziyuanxd_fdcrm_create004" string="确定" type="object" class="oe_highlight"/>
                   
                        or                        
                        <button string="取消" class="oe_link" special="cancel" />
                    </footer>
                </form>
            </field>
        </record>
        <record id="tbclue_invoice2" model="ir.actions.act_window">
            <field name="name">线索</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">fhtest.tbclue</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="view_id" ref="tbclue_view2"/>
            <field name="target">new</field>
        </record>        
        <act_window id="action_crm_tbclue2"
            multi="True"
            key2="client_action_multi" name="线索"
            res_model="fhtest.tbclue" src_model="fhtest.weishui001"
            view_mode="form" target="new" view_type="form"
            context="{'mass_convert' : True}"  groups=""
            view_id="tbclue_view"/>
        <!--res_model="要弹出的向导窗体的实体类" view_id="要弹出的向导窗体" src_model="需要在那个表更多里显示这个向导"-->
</odoo>
 

 

本文章内容是秋风流云调试编写

 

转载于:https://my.oschina.net/u/3740195/blog/1591072

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值