-
Notifications
You must be signed in to change notification settings - Fork 0
/
res_partner_bank.go
170 lines (141 loc) · 4.87 KB
/
res_partner_bank.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package odooconn
import (
"fmt"
"strings"
"sync"
"github.com/ppreeper/pad"
"github.com/schollz/progressbar/v3"
)
func (o *OdooConn) ResPartnerVendorsBankUnlink() {
// vendor_bank_unlink
mdl := "res_partner_bank"
umdl := strings.Replace(mdl, "_", ".", -1)
fmt.Printf("\n%v ResPartnerVendorsBank", umdl)
ids, err := o.Search(umdl, oarg{})
o.checkErr(err)
pageSize := 100
var ddList [][]int
for i := 0; i <= (len(ids) / pageSize); i++ {
ddList = append(ddList, ids[i*pageSize:(i+1)*pageSize])
}
bar := progressbar.Default(int64(len(ddList)))
sem := make(chan int, o.JobCount)
var wg sync.WaitGroup
wg.Add(len(ddList))
for _, r := range ddList {
go func(sem chan int, wg *sync.WaitGroup, bar *progressbar.ProgressBar, r []int) {
defer bar.Add(1)
defer wg.Done()
sem <- 1
o.Unlink(umdl, r)
<-sem
}(sem, &wg, bar, r)
}
wg.Wait()
}
func (o *OdooConn) ResPartnerVendorsBank() {
// vendor_bank
mdl := "res_partner_bank"
umdl := strings.Replace(mdl, "_", ".", -1)
fmt.Printf("\n%v ResPartnerVendorsBank", umdl)
sem := make(chan int, o.JobCount)
var wg sync.WaitGroup
stmt := ``
limit := 2
if limit > 0 {
stmt += fmt.Sprintf(" limit %d", limit)
}
type Partner struct {
Ref string `db:"vendorno"`
Name string `db:"name"`
OrderCurrency string `db:"order_currency"`
BCountry string `db:"bcountry"`
BIC string `db:"bic"`
BAN string `db:"ban"`
BANName string `db:"ban_name"`
}
var rr []Partner
err := o.DB.Select(&rr, stmt)
o.checkErr(err)
recs := len(rr)
bar := progressbar.Default(int64(recs))
// cids := o.ResCompanyMap()
// As you can see below, the bank info is tagged onto the end of the bank name and the financial institution and transit number fields are left blank. Canadian banks are a combination of 0 + institution # (3 digits) + transit # (5 digits) - total of 9 digits which is also the number for the ABA/Routing number. In the number below the bank info should be 0 004 15522 (no spaces)
// US banks have 9 digits ABA/Routing numbers
// Also the payment method hasn’t been transferred. That needs to be transferred as well. three options – C – Cheque, E – EFT or ACH, T – Wire transfer. ODOO has Check, EFT, NACHA, and Manual.
// tasker
wg.Add(recs)
for _, v := range rr {
go func(sem chan int, wg *sync.WaitGroup, bar *progressbar.ProgressBar, v Partner) {
defer bar.Add(1)
defer wg.Done()
sem <- 1
// o.Log.Debug(umdl, "v", v)
// companyID := cids[company]
partnerID, err := o.GetID("res.partner", oarg{oarg{"name", "=", v.Name}, oarg{"ref", "=", v.Ref}})
o.checkErr(err)
currencyID, err := o.GetID("res.currency", oarg{oarg{"name", "=", v.OrderCurrency}})
o.checkErr(err)
bankID, err := o.GetID("res.bank", oarg{oarg{"bic", "=", v.BIC}})
o.checkErr(err)
// bankCountry := o.SearchRead("res.bank", oarg{"id", "=", bankID}, 0, 0, []string{"country"})
r, err := o.GetID(umdl, oarg{oarg{"partner_id", "=", partnerID}, oarg{"currency_id", "=", currencyID}, oarg{"bank_id", "=", bankID}, oarg{"acc_number", "=", v.BAN}})
o.checkErr(err)
ur := map[string]interface{}{
"acc_number": v.BAN,
// "sanitized_acc-number": v.Ref,
"acc_holder_name": v.BANName,
"partner_id": partnerID,
"bank_id": bankID,
"currency_id": currencyID,
}
// if bank in US
ur["aba_routing"] = v.BIC
// if bank in CA
ur["financial_institution_number"] = pad.RJustLen(pad.LJustLen(v.BIC, 4), 3)
ur["bank_transit_number"] = pad.RJustLen(v.BIC, 5)
o.Log.Debug(umdl, "record", ur, "r", r)
if r == -1 {
o.Record(umdl, r, ur)
}
<-sem
}(sem, &wg, bar, v)
}
wg.Wait()
}
func (o *OdooConn) ResPartnerVendorsBankFix(limit int) {
// vendor_bank_fix
mdl := "res_partner_bank"
umdl := strings.Replace(mdl, "_", ".", -1)
fmt.Printf("\n%v ResPartnerVendorsBankFix", umdl)
// banks := o.ModelMap("res.bank", "name")
// o.Log.Debug(umdl, "banks", banks)
bankAccounts, err := o.SearchRead(umdl, oarg{}, 0, 0, []string{})
o.checkErr(err)
// bankAccounts := o.SearchRead(umdl, oarg{}, 0, 0, []string{})
// o.Log.Debug(umdl, "bankAccounts", bankAccounts)
recs := len(bankAccounts)
bar := progressbar.Default(int64(recs))
// sem := make(chan int, o.JobCount)
// var wg sync.WaitGroup
// wg.Add(recs)
for _, b := range bankAccounts {
// go func(sem chan int, wg *sync.WaitGroup, bar *progressbar.ProgressBar, b map[string]interface{}) {
// defer bar.Add(1)
// defer wg.Done()
// sem <- 1
r := int(b["id"].(float64))
bankBic := b["bank_bic"].(string)
ur := map[string]interface{}{}
// if bank in US
ur["aba_routing"] = bankBic
// if bank in CA
ur["financial_institution_number"] = pad.RJustLen(pad.LJustLen(bankBic, 4), 3)
ur["bank_transit_number"] = pad.RJustLen(bankBic, 5)
o.Log.Debug(umdl, "record", ur, "r", r)
o.Record(umdl, r, ur)
bar.Add(1)
// <-sem
// }(sem, &wg, bar, b)
}
}