Fix monthly earning estimation (#4282)
This commit is contained in:
parent
336500c04d
commit
f9b630b0f4
@ -58,3 +58,10 @@ func UTCEndOfMonth(now time.Time) time.Time {
|
|||||||
y, m, _ := now.Date()
|
y, m, _ := now.Date()
|
||||||
return time.Date(y, m+1, 1, 0, 0, 0, 0, &time.Location{}).Add(-time.Nanosecond)
|
return time.Date(y, m+1, 1, 0, 0, 0, 0, &time.Location{}).Add(-time.Nanosecond)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UTCBeginOfMonth returns utc begin of month (f.e. to get first day in month at 00h00m).
|
||||||
|
func UTCBeginOfMonth(now time.Time) time.Time {
|
||||||
|
now = now.UTC()
|
||||||
|
y, m, _ := now.Date()
|
||||||
|
return time.Date(y, m, 1, 0, 0, 0, 0, &time.Location{})
|
||||||
|
}
|
||||||
|
@ -82,24 +82,22 @@ func (estimatedPayout *EstimatedPayout) Set(current, previous PayoutMonthly, now
|
|||||||
estimatedPayout.CurrentMonth = current
|
estimatedPayout.CurrentMonth = current
|
||||||
estimatedPayout.PreviousMonth = previous
|
estimatedPayout.PreviousMonth = previous
|
||||||
|
|
||||||
daysPerMonth := float64(date.UTCEndOfMonth(now).Day())
|
beginOfMonth := date.UTCBeginOfMonth(now)
|
||||||
daysSinceJoined := now.Sub(joinedAt).Hours() / 24
|
endOfMonth := date.UTCEndOfMonth(now)
|
||||||
if daysSinceJoined < 1 {
|
|
||||||
daysSinceJoined = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
if daysSinceJoined >= float64(now.Day()) {
|
// Joined before the first day of this month
|
||||||
daysPast := float64(now.Day()) - 1
|
if joinedAt.Before(beginOfMonth) {
|
||||||
if daysPast < 1 {
|
minutesPast := now.Sub(beginOfMonth).Minutes()
|
||||||
daysPast = 1
|
estimatedMinutesJoinedCurrentMonth := endOfMonth.Sub(beginOfMonth).Minutes()
|
||||||
}
|
|
||||||
|
|
||||||
payoutPerDay := estimatedPayout.CurrentMonth.Payout / daysPast
|
payoutPerMin := estimatedPayout.CurrentMonth.Payout / minutesPast
|
||||||
estimatedPayout.CurrentMonthExpectations += int64(payoutPerDay * daysPerMonth)
|
estimatedPayout.CurrentMonthExpectations += int64(payoutPerMin * estimatedMinutesJoinedCurrentMonth)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// Joined this month
|
||||||
estimatedPayout.CurrentMonthExpectations += int64(estimatedPayout.CurrentMonth.Payout / math.Round(daysSinceJoined) * daysPerMonth)
|
minutesSinceJoined := now.Sub(joinedAt).Minutes()
|
||||||
|
estimatedMinutesJoinedCurrentMonth := endOfMonth.Sub(joinedAt).Minutes()
|
||||||
|
estimatedPayout.CurrentMonthExpectations += int64(estimatedPayout.CurrentMonth.Payout / minutesSinceJoined * estimatedMinutesJoinedCurrentMonth)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add adds estimate into the receiver.
|
// Add adds estimate into the receiver.
|
||||||
|
@ -24,7 +24,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
}
|
}
|
||||||
tests := []test{
|
tests := []test{
|
||||||
// 28 days in month
|
// 28 days in month
|
||||||
{time.Date(2021, 2, 1, 16, 0, 0, 0, time.UTC), 2800.00, time.Date(2021, 1, 1, 12, 0, 0, 0, time.UTC),
|
{time.Date(2021, 2, 1, 16, 0, 0, 0, time.UTC), 4199.00, time.Date(2021, 1, 1, 12, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
@ -48,7 +48,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
Payout: payout,
|
Payout: payout,
|
||||||
Held: 901,
|
Held: 901,
|
||||||
}},
|
}},
|
||||||
{time.Date(2021, 2, 28, 10, 0, 0, 0, time.UTC), 103, time.Date(2021, 1, 26, 10, 0, 0, 0, time.UTC),
|
{time.Date(2021, 2, 28, 10, 0, 0, 0, time.UTC), 102, time.Date(2021, 1, 26, 10, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
@ -72,7 +72,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
Payout: payout,
|
Payout: payout,
|
||||||
Held: 901,
|
Held: 901,
|
||||||
}},
|
}},
|
||||||
{time.Date(2021, 2, 28, 10, 0, 0, 0, time.UTC), 215, time.Date(2021, 2, 15, 10, 0, 0, 0, time.UTC),
|
{time.Date(2021, 2, 28, 10, 0, 0, 0, time.UTC), 104, time.Date(2021, 2, 15, 10, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
@ -97,7 +97,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
Held: 901,
|
Held: 901,
|
||||||
}},
|
}},
|
||||||
// 31 days in month
|
// 31 days in month
|
||||||
{time.Date(2021, 3, 1, 19, 0, 0, 0, time.UTC), 3100.0, time.Date(2021, 1, 1, 19, 0, 0, 0, time.UTC),
|
{time.Date(2021, 3, 1, 19, 0, 0, 0, time.UTC), 3915.0, time.Date(2021, 1, 1, 19, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
@ -121,7 +121,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
Payout: payout,
|
Payout: payout,
|
||||||
Held: 901,
|
Held: 901,
|
||||||
}},
|
}},
|
||||||
{time.Date(2021, 3, 31, 21, 0, 0, 0, time.UTC), 103, time.Date(2021, 1, 31, 21, 0, 0, 0, time.UTC),
|
{time.Date(2021, 3, 31, 21, 0, 0, 0, time.UTC), 100, time.Date(2021, 1, 31, 21, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
@ -145,7 +145,7 @@ func TestCurrentMonthExpectations(t *testing.T) {
|
|||||||
Payout: payout,
|
Payout: payout,
|
||||||
Held: 901,
|
Held: 901,
|
||||||
}},
|
}},
|
||||||
{time.Date(2021, 3, 31, 21, 0, 0, 0, time.UTC), 193, time.Date(2021, 3, 15, 21, 0, 0, 0, time.UTC),
|
{time.Date(2021, 3, 31, 21, 0, 0, 0, time.UTC), 100, time.Date(2021, 3, 15, 21, 0, 0, 0, time.UTC),
|
||||||
estimatedpayouts.EstimatedPayout{},
|
estimatedpayouts.EstimatedPayout{},
|
||||||
estimatedpayouts.PayoutMonthly{
|
estimatedpayouts.PayoutMonthly{
|
||||||
EgressBandwidth: 123,
|
EgressBandwidth: 123,
|
||||||
|
Loading…
Reference in New Issue
Block a user