/
domestic_nts_pack_pricer.go
56 lines (45 loc) · 2.08 KB
/
domestic_nts_pack_pricer.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
package ghcrateengine
import (
"time"
"github.com/transcom/mymove/pkg/appcontext"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/services"
"github.com/transcom/mymove/pkg/unit"
)
type domesticNTSPackPricer struct {
}
// NewDomesticNTSPackPricer creates a new pricer for the domestic NTS pack service
func NewDomesticNTSPackPricer() services.DomesticNTSPackPricer {
return &domesticNTSPackPricer{}
}
// Price determines the price for a domestic NTS pack service
func (p domesticNTSPackPricer) Price(appCtx appcontext.AppContext, contractCode string, referenceDate time.Time, weight unit.Pound, servicesScheduleOrigin int, isPPM bool) (unit.Cents, services.PricingDisplayParams, error) {
return priceDomesticPackUnpack(appCtx, models.ReServiceCodeDNPK, contractCode, referenceDate, weight, servicesScheduleOrigin, isPPM)
}
// PriceUsingParams determines the price for a domestic NTS pack service given PaymentServiceItemParams
func (p domesticNTSPackPricer) PriceUsingParams(appCtx appcontext.AppContext, params models.PaymentServiceItemParams) (unit.Cents, services.PricingDisplayParams, error) {
contractCode, err := getParamString(params, models.ServiceItemParamNameContractCode)
if err != nil {
return unit.Cents(0), nil, err
}
referenceDate, err := getParamTime(params, models.ServiceItemParamNameReferenceDate)
if err != nil {
return unit.Cents(0), nil, err
}
servicesScheduleOrigin, err := getParamInt(params, models.ServiceItemParamNameServicesScheduleOrigin)
if err != nil {
return unit.Cents(0), nil, err
}
weightBilled, err := getParamInt(params, models.ServiceItemParamNameWeightBilled)
if err != nil {
return unit.Cents(0), nil, err
}
var isPPM = false
if params[0].PaymentServiceItem.MTOServiceItem.MTOShipment.ShipmentType == models.MTOShipmentTypePPM {
// PPMs do not require minimums for a shipment's weight
// this flag is passed into the Price function to ensure the weight min
// are not enforced for PPMs
isPPM = true
}
return p.Price(appCtx, contractCode, referenceDate, unit.Pound(weightBilled), servicesScheduleOrigin, isPPM)
}