-
Notifications
You must be signed in to change notification settings - Fork 0
/
crm_team.go
136 lines (114 loc) · 2.97 KB
/
crm_team.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
package odooconn
import (
"fmt"
"strings"
"sync"
"github.com/schollz/progressbar/v3"
)
// CrmTeam function
func (o *OdooConn) CrmTeam() {
mdl := "crm_team"
umdl := strings.Replace(mdl, "_", ".", -1)
fmt.Printf("\n%v", umdl)
sem := make(chan int, o.JobCount)
var wg sync.WaitGroup
stmt := `
select stl.team||' '||stl.division team,stl.leader,u.ename
from ct.steamlead stl
join sapdata.users u on stl.leader = u.username
where stl.datestart::date <= current_date and current_date <= stl.dateend::date
and stl.division <> 'ARTG'
`
type CrmTeam struct {
Team string `db:"team"`
Leader string `db:"leader"`
Ename string `db:"ename"`
}
var rr []CrmTeam
err := o.DB.Select(&rr, stmt)
o.checkErr(err)
recs := len(rr)
bar := progressbar.Default(int64(recs))
// tasker
wg.Add(recs)
for _, v := range rr {
// process
go func(sem chan int, wg *sync.WaitGroup, bar *progressbar.ProgressBar, v CrmTeam) {
defer bar.Add(1)
defer wg.Done()
sem <- 1
r, err := o.GetID(umdl, oarg{oarg{"name", "=", v.Team}})
o.checkErr(err)
rp, err := o.GetID("res.partner", oarg{oarg{"name", "=", v.Ename}})
o.checkErr(err)
ru, err := o.GetID("res.users", oarg{oarg{"partner_id", "=", rp}})
o.checkErr(err)
ur := map[string]interface{}{
"name": v.Team,
"company_id": 1,
"user_id": ru,
}
o.Log.Info(umdl, "ur", ur, "r", r)
o.Record(umdl, r, ur)
<-sem
}(sem, &wg, bar, v)
}
wg.Wait()
}
// CrmTeamMembers function
func (o *OdooConn) CrmTeamMembers() {
mdl := "crm_team"
umdl := strings.Replace(mdl, "_", ".", -1)
fmt.Printf("\n%v", umdl)
stmt := `
select sl.team||' '||sl.division team,sl.ename
from ct.steammember_list sl
where sl.datestart::date <= current_date and current_date <= sl.dateend::date
and division <> 'ARTG'
order by team,ename
`
type CrmTeam struct {
Team string `db:"team"`
Ename string `db:"ename"`
}
var rr []CrmTeam
err := o.DB.Select(&rr, stmt)
o.checkErr(err)
recs := len(rr)
bar := progressbar.Default(int64(recs))
// tasker
sem := make(chan int, o.JobCount)
var wg sync.WaitGroup
wg.Add(recs)
for _, v := range rr {
// process
go func(sem chan int, wg *sync.WaitGroup, bar *progressbar.ProgressBar, v CrmTeam) {
defer bar.Add(1)
defer wg.Done()
sem <- 1
o.Log.Info("", "team", v)
r, err := o.GetID(umdl, oarg{oarg{"name", "=", v.Team}})
o.checkErr(err)
rp, err := o.GetID("res.users", oarg{oarg{"name", "=", v.Ename}})
o.checkErr(err)
team, err := o.SearchRead(umdl, oarg{oarg{"name", "=", v.Team}}, 0, 0, []string{"member_ids"})
o.checkErr(err)
mids := team[0]["member_ids"]
var mIDS []int
if !valInSlice(rp, mIDS) {
mIDS = append(mIDS, rp)
}
for _, v := range mids.([]interface{}) {
mIDS = append(mIDS, int(v.(float64)))
}
ur := map[string]interface{}{
"name": v.Team,
"member_ids": mIDS,
}
o.Log.Info(mdl, "model", umdl, "record", ur, "r", r)
o.Record(umdl, r, ur)
<-sem
}(sem, &wg, bar, v)
}
wg.Wait()
}