-
Notifications
You must be signed in to change notification settings - Fork 3
/
product_template.go
67 lines (59 loc) · 2.88 KB
/
product_template.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
// Copyright 2017 NDP Systèmes. All Rights Reserved.
// See LICENSE file for full licensing details.
package sale
import (
"fmt"
"github.com/hexya-addons/base"
"github.com/hexya-erp/hexya/src/actions"
"github.com/hexya-erp/hexya/src/models"
"github.com/hexya-erp/hexya/src/models/types"
"github.com/hexya-erp/pool/h"
"github.com/hexya-erp/pool/m"
)
func init() {
h.ProductTemplate().AddFields(map[string]models.FieldDefinition{
"TrackService": models.SelectionField{String: "Track Service", Selection: types.Selection{
"manual": "Manually set quantities on order",
}, Help: `Manually set quantities on order: Invoice based on the manually entered quantity without creating an
analytic account.
Timesheets on contract: Invoice based on the tracked hours on the related timesheet.
Create a task and track hours: Create a task on the sale order validation and track the work hours.`,
Default: models.DefaultValue("manual")},
"SaleLineWarn": models.SelectionField{Selection: base.WarningMessage, String: "Sales Order Line",
/*Help: base.WarningHelp,*/ Required: true, Default: models.DefaultValue("no-message")},
"SaleLineWarnMsg": models.TextField{String: "Message for Sales Order Line')"},
"ExpensePolicy": models.SelectionField{String: "Re-Invoice Expenses", Selection: types.Selection{
"no": "No",
"cost": "At cost",
"sales_price": "At sale price",
}, Default: models.DefaultValue("no")},
"SalesCount": models.IntegerField{String: "# Sales",
Compute: h.ProductTemplate().Methods().ComputeSalesCount(), GoType: new(int)},
"InvoicePolicy": models.SelectionField{String: "Invoicing Policy", Selection: types.Selection{
"order": "Ordered quantities",
"delivery": "Delivered quantities",
}, Help: `Ordered Quantity: Invoice based on the quantity the customer ordered.
Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries).`,
Default: models.DefaultValue("order")},
})
h.ProductTemplate().Methods().ComputeSalesCount().DeclareMethod(
`ComputeSalesCount returns the number of sales for this product template.`,
func(rs m.ProductTemplateSet) m.ProductTemplateData {
var count int
for _, product := range rs.ProductVariants().Records() {
count += product.SalesCount()
}
return h.ProductTemplate().NewData().SetSalesCount(count)
})
h.ProductTemplate().Methods().ActionViewSales().DeclareMethod(
`ActionViewSales`,
func(rs m.ProductTemplateSet) *actions.Action {
rs.EnsureOne()
action := actions.Registry.MustGetById("sale_action_product_sale_list")
products := rs.WithContext("active_test", false).ProductVariants()
returnedAction := *action
returnedAction.Context = types.NewContext().WithKey("default_product_id", products.Ids()[0])
returnedAction.Domain = fmt.Sprintf("[('state', 'in', ['sale', 'done']), ('product_id.product_tmpl_id', '=', %d)]", rs.ID())
return &returnedAction
})
}