add event base intelligency
This commit is contained in:
@@ -163,11 +163,37 @@ type PricingStrategy[T Strategy] struct {
|
||||
OverrideStrategy T `json:"override_strategy" bson:"override_strategy" default:"-1"` // Modulation is the modulation of the pricing
|
||||
}
|
||||
|
||||
func (p PricingStrategy[T]) GetPrice(amountOfData float64, bookingTimeDuration float64, start time.Time, end *time.Time) (float64, error) {
|
||||
func (p PricingStrategy[T]) GetPriceHT(amountOfData float64, bookingTimeDuration float64, start time.Time, end *time.Time, variations []*PricingVariation) (float64, error) {
|
||||
if p.BuyingStrategy == SUBSCRIPTION {
|
||||
return BookingEstimation(p.GetTimePricingStrategy(), p.Price*float64(amountOfData), bookingTimeDuration, start, end)
|
||||
} else if p.BuyingStrategy == PERMANENT {
|
||||
price, err := BookingEstimation(p.GetTimePricingStrategy(), p.Price*float64(amountOfData), bookingTimeDuration, start, end)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if variations != nil {
|
||||
for _, v := range variations {
|
||||
price = v.GetPriceHT(price)
|
||||
}
|
||||
return price, nil
|
||||
}
|
||||
|
||||
return p.Price, nil
|
||||
|
||||
} else if p.BuyingStrategy == PERMANENT {
|
||||
if variations != nil {
|
||||
price := p.Price
|
||||
for _, v := range variations {
|
||||
price = v.GetPriceHT(price)
|
||||
}
|
||||
return price, nil
|
||||
}
|
||||
return p.Price, nil
|
||||
}
|
||||
if variations != nil {
|
||||
price := p.Price
|
||||
for _, v := range variations {
|
||||
price = v.GetPriceHT(price)
|
||||
}
|
||||
return price, nil
|
||||
}
|
||||
return p.Price * float64(amountOfData), nil
|
||||
}
|
||||
@@ -183,3 +209,18 @@ func (p PricingStrategy[T]) GetTimePricingStrategy() TimePricingStrategy {
|
||||
func (p PricingStrategy[T]) GetOverrideStrategy() T {
|
||||
return p.OverrideStrategy
|
||||
}
|
||||
|
||||
type PricingVariation struct {
|
||||
Inflate bool `json:"inflate" bson:"price"` // Price is the Price of the pricing
|
||||
Percentage float64 `json:"percent" bson:"percent"` // Currency is the currency of the pricing // Modulation is the modulation of the pricing
|
||||
Priority int `json:"priority" bson:"priority"`
|
||||
}
|
||||
|
||||
func (pv *PricingVariation) GetPriceHT(priceHT float64) float64 {
|
||||
value := (priceHT * pv.Percentage) / 100
|
||||
if pv.Inflate {
|
||||
return priceHT + value
|
||||
} else {
|
||||
return priceHT - value
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user