Refactored ticket code into kiosk code.
This commit is contained in:
parent
72b245d6d6
commit
3eec81af7f
5 changed files with 110 additions and 190 deletions
104
handle_signup.go
104
handle_signup.go
|
|
@ -146,51 +146,19 @@ func (app *App) handleConfirmEmail(w http.ResponseWriter, r *http.Request) {
|
|||
var signupsOpen string
|
||||
app.db.QueryRow(`SELECT value FROM config WHERE key = 'shift_signups_open'`).Scan(&signupsOpen)
|
||||
|
||||
if signupsOpen == "true" && vol.ParticipantID != nil {
|
||||
// Find a ticket with a code, or create/assign one.
|
||||
tickets, _ := app.listTickets(vol.ParticipantID, "")
|
||||
var code *string
|
||||
for _, tk := range tickets {
|
||||
if tk.Code != nil {
|
||||
code = tk.Code
|
||||
break
|
||||
if signupsOpen == "true" {
|
||||
code, err := app.generateVolunteerKioskCode()
|
||||
if err == nil {
|
||||
if err := app.assignKioskCode(vol.ID, code); err == nil {
|
||||
kioskLink := fmt.Sprintf("%s/v/%s", app.resolveBaseURL(), code)
|
||||
response["kiosk_link"] = kioskLink
|
||||
go func() {
|
||||
if err := app.sendShiftSignupEmail(vol.Email, vol.PreferredName, kioskLink); err != nil {
|
||||
log.Printf("shift signup email to %s failed: %v", vol.Email, err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
if code == nil {
|
||||
// No coded ticket — find any ticket or create a stub, then generate code.
|
||||
var ticketID int
|
||||
if len(tickets) > 0 {
|
||||
ticketID = tickets[0].ID
|
||||
} else {
|
||||
tkName := vol.TicketName
|
||||
if tkName == "" {
|
||||
tkName = vol.PreferredName
|
||||
}
|
||||
stub, err := app.createTicket(Ticket{
|
||||
ParticipantID: vol.ParticipantID,
|
||||
Name: tkName,
|
||||
Source: "manual",
|
||||
})
|
||||
if err == nil {
|
||||
ticketID = stub.ID
|
||||
}
|
||||
}
|
||||
if ticketID > 0 {
|
||||
if t, err := app.generateUniqueToken(); err == nil {
|
||||
app.db.Exec(`UPDATE tickets SET code=?, updated_at=? WHERE id=?`, t, now(), ticketID)
|
||||
code = &t
|
||||
}
|
||||
}
|
||||
}
|
||||
if code != nil {
|
||||
kioskLink := fmt.Sprintf("%s/v/%s", app.resolveBaseURL(), *code)
|
||||
response["kiosk_link"] = kioskLink
|
||||
go func() {
|
||||
if err := app.sendShiftSignupEmail(vol.Email, vol.PreferredName, kioskLink); err != nil {
|
||||
log.Printf("shift signup email to %s failed: %v", vol.Email, err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
writeJSON(w, response)
|
||||
|
|
@ -217,62 +185,28 @@ func (app *App) handleToggleShiftSignups(w http.ResponseWriter, r *http.Request)
|
|||
}
|
||||
|
||||
func (app *App) openShiftSignups() {
|
||||
// Generate codes for tickets belonging to confirmed volunteers that have no code yet.
|
||||
vols, _ := app.listConfirmedVolunteersNeedingCode()
|
||||
// Assign kiosk codes to email-confirmed volunteers that don't have one yet.
|
||||
vols, _ := app.listVolunteersNeedingKioskCode()
|
||||
for _, v := range vols {
|
||||
if v.ParticipantID == nil {
|
||||
continue
|
||||
}
|
||||
// Find any ticket for this participant, or create a stub one.
|
||||
tickets, _ := app.listTickets(v.ParticipantID, "")
|
||||
var ticketID int
|
||||
if len(tickets) > 0 {
|
||||
ticketID = tickets[0].ID
|
||||
} else {
|
||||
tkName := v.TicketName
|
||||
if tkName == "" {
|
||||
tkName = v.PreferredName
|
||||
}
|
||||
stub, err := app.createTicket(Ticket{
|
||||
ParticipantID: v.ParticipantID,
|
||||
Name: tkName,
|
||||
Source: "manual",
|
||||
})
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
ticketID = stub.ID
|
||||
}
|
||||
t, err := app.generateUniqueToken()
|
||||
code, err := app.generateVolunteerKioskCode()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
app.db.Exec(`UPDATE tickets SET code=?, updated_at=? WHERE id=?`, t, now(), ticketID)
|
||||
app.assignKioskCode(v.ID, code)
|
||||
}
|
||||
|
||||
// Email all confirmed volunteers that now have a ticket with a code.
|
||||
// Email all email-confirmed volunteers that now have a kiosk code.
|
||||
confirmed, _ := queryVolunteers(app.db, `
|
||||
SELECT `+volunteerSelect+` `+volunteerFrom+`
|
||||
WHERE v.email_confirmed = 1 AND v.deleted_at IS NULL AND v.participant_id IS NOT NULL`)
|
||||
WHERE v.email_confirmed = 1 AND v.kiosk_code IS NOT NULL AND v.deleted_at IS NULL`)
|
||||
baseURL := app.resolveBaseURL()
|
||||
sent := 0
|
||||
|
||||
for _, v := range confirmed {
|
||||
if v.ParticipantID == nil || v.Email == "" {
|
||||
if v.Email == "" || v.KioskCode == nil {
|
||||
continue
|
||||
}
|
||||
tickets, _ := app.listTickets(v.ParticipantID, "")
|
||||
var code *string
|
||||
for _, tk := range tickets {
|
||||
if tk.Code != nil {
|
||||
code = tk.Code
|
||||
break
|
||||
}
|
||||
}
|
||||
if code == nil {
|
||||
continue
|
||||
}
|
||||
kioskLink := fmt.Sprintf("%s/v/%s", baseURL, *code)
|
||||
kioskLink := fmt.Sprintf("%s/v/%s", baseURL, *v.KioskCode)
|
||||
name := v.PreferredName
|
||||
if name == "" {
|
||||
name = v.Name
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue