-
Notifications
You must be signed in to change notification settings - Fork 3
/
partner.go
66 lines (59 loc) · 2.46 KB
/
partner.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
// Copyright 2017 NDP Systèmes. All Rights Reserved.
// See LICENSE file for full licensing details.
package product
import (
"github.com/hexya-addons/base"
"github.com/hexya-erp/hexya/src/models"
"github.com/hexya-erp/pool/h"
"github.com/hexya-erp/pool/m"
"github.com/hexya-erp/pool/q"
)
func init() {
h.Partner().AddFields(map[string]models.FieldDefinition{
"PropertyProductPricelist": models.Many2OneField{String: "Sale Pricelist", RelationModel: h.ProductPricelist(),
Compute: h.Partner().Methods().ComputeProductPricelist(),
Depends: []string{"Country"},
Inverse: h.Partner().Methods().InverseProductPricelist(),
Help: "This pricelist will be used instead of the default one for sales to the current partner"},
"ProductPricelist": models.Many2OneField{String: "Stored Pricelist", RelationModel: h.ProductPricelist(),
Contexts: base.CompanyDependent},
})
h.Partner().Methods().ComputeProductPricelist().DeclareMethod(
`ComputeProductPricelist returns the price list applicable for this partner`,
func(rs m.PartnerSet) m.PartnerData {
if rs.ID() == 0 {
// We are processing an Onchange
return h.Partner().NewData()
}
company := h.User().NewSet(rs.Env()).CurrentUser().Company()
return h.Partner().NewData().SetPropertyProductPricelist(
h.ProductPricelist().NewSet(rs.Env()).GetPartnerPricelist(rs, company))
})
h.Partner().Methods().InverseProductPricelist().DeclareMethod(
`InverseProductPricelist sets the price list for this partner to the given list`,
func(rs m.PartnerSet, priceList m.ProductPricelistSet) {
var defaultForCountry m.ProductPricelistSet
if !rs.Country().IsEmpty() {
defaultForCountry = h.ProductPricelist().Search(rs.Env(),
q.ProductPricelist().CountryGroupsFilteredOn(
q.CountryGroup().CountriesFilteredOn(
q.Country().Code().Equals(rs.Country().Code())))).Limit(1)
} else {
defaultForCountry = h.ProductPricelist().Search(rs.Env(),
q.ProductPricelist().CountryGroups().IsNull()).Limit(1)
}
actual := rs.PropertyProductPricelist()
if !priceList.IsEmpty() || (!actual.IsEmpty() && !defaultForCountry.Equals(actual)) {
if priceList.IsEmpty() {
rs.SetProductPricelist(defaultForCountry)
return
}
rs.SetProductPricelist(priceList)
}
})
h.Partner().Methods().CommercialFields().Extend(
`CommercialFields`,
func(rs m.PartnerSet) []models.FieldNamer {
return append(rs.Super().CommercialFields(), q.Partner().PropertyProductPricelist())
})
}