/
overtimesApprovers.go
138 lines (123 loc) · 3.66 KB
/
overtimesApprovers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package overtimes
import (
//"fmt"
"opms/models"
//"opms/utils"
"time"
//"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
)
type OvertimesApprover struct {
Id int64 `orm:"pk;column(approverid);"`
Overtimeid int64
Userid int64
Summary string
Status int
Created int64
Changed int64
}
func (this *OvertimesApprover) TableName() string {
return models.TableName("overtimes_approver")
}
func init() {
orm.RegisterModel(new(OvertimesApprover))
}
func AddOvertimesApprover(upd OvertimesApprover) error {
o := orm.NewOrm()
overtime := new(OvertimesApprover)
overtime.Id = upd.Id
overtime.Userid = upd.Userid
overtime.Overtimeid = upd.Overtimeid
//overtime.Summary = upd.Summary
overtime.Status = 0
overtime.Created = time.Now().Unix()
overtime.Changed = time.Now().Unix()
_, err := o.Insert(overtime)
return err
}
func UpdateOvertimesApprover(id int64, upd OvertimesApprover) error {
var overtime OvertimesApprover
o := orm.NewOrm()
overtime = OvertimesApprover{Id: id}
overtime.Summary = upd.Summary
overtime.Status = upd.Status
overtime.Changed = time.Now().Unix()
_, err := o.Update(&overtime, "summary", "status", "changed")
if err == nil {
//直接结束
if upd.Status == 2 {
ChangeOvertimeResult(upd.Overtimeid, 2)
o.Raw("UPDATE pms_overtimes_approver SET status = ?,summary = ?, changed = ? WHERE overtimeid = ? AND approverid != ?", 2, "前审批人拒绝,后面审批人默认为拒绝状态", time.Now().Unix(), upd.Overtimeid, id).Exec()
} else {
_, _, approvers := ListOvertimeApproverProcess(upd.Overtimeid)
//检测审批顺序
var ApproverNum = 0
for _, v := range approvers {
if v.Status == 1 {
ApproverNum++
}
}
if ApproverNum == len(approvers) {
ChangeOvertimeResult(upd.Overtimeid, 1)
}
}
}
return err
}
type OvertimeApproverProcess struct {
Userid int64
Realname string
Avatar string
Position string
Status int
Summary string
Changed int64
}
func ListOvertimeApproverProcess(overtimeid int64) (num int64, err error, user []OvertimeApproverProcess) {
var users []OvertimeApproverProcess
qb, _ := orm.NewQueryBuilder("mysql")
qb.Select("upr.userid", "upr.realname", "p.name AS position", "u.avatar", "la.status", "la.summary", "la.changed").From("pms_overtimes_approver AS la").
LeftJoin("pms_users AS u").On("u.userid = la.userid").
LeftJoin("pms_users_profile AS upr").On("upr.userid = u.userid").
LeftJoin("pms_positions AS p").On("p.positionid = upr.positionid").
Where("la.overtimeid=?").
OrderBy("la.approverid").
Asc()
sql := qb.String()
o := orm.NewOrm()
nums, err := o.Raw(sql, overtimeid).QueryRows(&users)
return nums, err, users
}
func ListOvertimeApproverProcessHtml(overtimeid int64) string {
nums, _, users := ListOvertimeApproverProcess(overtimeid)
var html, avatar, css, status string
var num = int(nums)
for i, v := range users {
if "" == v.Avatar {
avatar = "/static/img/avatar/1.jpg"
} else {
avatar = v.Avatar
}
if v.Status == 1 {
status = "同意"
} else if v.Status == 2 {
//css = "gray"
status = "拒绝"
} else {
css = "gray"
status = "未处"
}
html += "<a href='javascript:;' title='" + v.Realname + "'><img class='" + css + "' src='" + avatar + "' alt='" + v.Realname + "'>" + status + "</a>"
if i < (num - 1) {
html += "<span>..........</span>"
}
}
return html
}
//检测是否已经审批
func CheckOvertimeApprover(id, userId int64) (int64, int) {
var overtime OvertimesApprover
o := orm.NewOrm()
o.QueryTable(models.TableName("overtimes_approver")).Filter("overtimeid", id).Filter("userid", userId).One(&overtime, "approverid", "status")
return overtime.Id, overtime.Status
}