-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreporting.go
110 lines (84 loc) · 2.52 KB
/
reporting.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"fmt"
"time"
)
const (
ShowtimeReport = iota + 1
DateReport
)
type ReportHandler struct {
broker *DataBroker
}
func (reporter *ReportHandler) ProceedReporting() {
fmt.Println("Create a report for \n (1) A specific showtime \n (2) All shows on a specific date")
choice, err := chooseMenuOption("report")
if err != nil {
return
}
if choice == ShowtimeReport {
day, err := reporter.GetDateFromUser()
if err != nil {
return
}
hour, err := reporter.GetTimeFromUser()
if err != nil {
return
}
loc, _ := time.LoadLocation("America/Chicago")
reportDate := time.Date(day.Year(), day.Month(), day.Day(), hour.Hour(), 0, 0, 0, loc)
show, movieTitle, err := reporter.GetSpecificShowFromUser(&reportDate)
if err != nil {
fmt.Println("Something went wrong, please try again!", err)
return
}
tickets, vacant := reporter.broker.GetSoldVacantTicketsByShow(&reportDate, show.ShowID)
output := fmt.Sprintf("%v on %v sold %v tickets, %v seats empty", movieTitle,
reportDate.Format("Jan 2, 2006"), tickets, vacant)
fmt.Println(output)
} else if choice == DateReport {
date, err := reporter.GetDateFromUser()
if err != nil {
return
}
output := fmt.Sprintf("On %v we sold %v tickets", date.Format("Jan 2, Mon"), reporter.broker.GetTicketCountByDay(date))
fmt.Println(output)
} else {
fmt.Println("I did not understand that, sorry :(")
}
}
func (reporter *ReportHandler) GetDateFromUser() (*time.Time, error) {
fmt.Println("Which date? (mm/dd/yyyy)")
input := readcmd("date")
date, err := time.Parse("01/02/2006", input)
if err != nil {
fmt.Println("I did not understand that, sorry :(")
return nil, err
}
return &date, nil
}
func (reporter *ReportHandler) GetTimeFromUser() (*time.Time, error) {
fmt.Println("Which time? (h am/pm)")
input := readcmd("time")
hour, err := time.Parse("3 pm", input)
if err != nil {
fmt.Println("I did not understand that, sorry :(")
return nil, err
}
return &hour, nil
}
func (reporter *ReportHandler) GetSpecificShowFromUser(reportDate *time.Time) (show *Show, movieTitle string, err error) {
shows := reporter.broker.GetShowsByPlaytime(reportDate.Weekday().String(), reportDate.Hour())
movieTitles := reporter.broker.GetMovieTitlesByShows(shows)
for i, show := range shows {
output := fmt.Sprintf("(%v) %v on Screen %v", i+1, movieTitles[i], show.Screen)
fmt.Println(output)
}
choice, err := chooseMenuOption("which show")
if err != nil {
return
}
show = &(shows[choice-1])
movieTitle = movieTitles[choice-1]
return
}