truckstop/broker/job.go

90 lines
1.5 KiB
Go

package broker
import (
"fmt"
"local/truckstop/config"
"log"
"strings"
"time"
)
type Job struct {
ID string
URI string
Pickup JobLocation
Dropoff JobLocation
Weight int
Miles int
Meta string
secrets func() interface{} `json:"-"`
}
type JobLocation struct {
Date time.Time
City string
State string
}
func (j *Job) Secrets() {
if j.secrets == nil {
return
}
v := j.secrets()
j.secrets = nil
if v == nil {
return
}
j.Meta = fmt.Sprintf("%s %+v", j.Meta, v)
}
func (j Job) String() string {
return fmt.Sprintf(
`%s => %s (%d miles), Weight:%d, Notes:%s Link:%s`,
j.Pickup.String(),
j.Dropoff.String(),
j.Miles,
j.Weight,
j.Meta,
j.URI,
)
}
func (j JobLocation) String() string {
return fmt.Sprintf("%s, %s @ %s", j.City, j.State, j.Date.Format("Monday Jan 02"))
}
func (j Job) FormatMultilineText() string {
foo := func(client string) string {
return fmt.Sprintf(
"--- %s: %s => %s ---",
client,
j.Pickup.State,
j.Dropoff.State,
)
}
out := ""
clients := config.Clients(j.Pickup.Date)
for k := range clients {
log.Printf("job multiline: %+v contains %s then use %v", clients[k].States, j.Pickup.State, k)
if strings.Contains(fmt.Sprint(clients[k].States), j.Pickup.State) {
if len(out) > 0 {
out += "\n"
}
out += foo(k)
}
}
if len(out) > 0 {
out = fmt.Sprintf(
"%s\nPickup: %s\nDropoff: %s\nNotes: %d lbs, %d miles, %s\n%s",
out,
j.Pickup.String(),
j.Dropoff.String(),
j.Weight,
j.Miles,
j.Meta,
j.URI,
)
}
return out
}