import { Day } from './day'; import { Time } from './time'; import { SpecialSchedule } from './special-schedule'; export class Place { main_schedule_times: Day[] = []; special_schedules: SpecialSchedule[] = []; id: number; last_modified: string; name: string; category: number; location: string; constructor(main_schedule_times?: Day[], special_schedules?: SpecialSchedule[], id?: number, last_modified?: string, name?: string, category?: number, location?: string) { this.main_schedule_times = main_schedule_times || []; this.special_schedules = special_schedules || []; this.id = id || 0; this.last_modified = last_modified || ''; this.name = name || ''; this.category = category || 0; this.location = location || ''; } // This method does NOT work with Special schedules isOpen(): boolean { const currTime = new Date(); const inSeconds = currTime.getHours() * 60 * 60 + currTime.getMinutes() * 60 + currTime.getSeconds(); const dayOfWeekShift = [6, 0, 1, 2, 3, 4, 5]; const dayOfWeek = dayOfWeekShift[currTime.getDay()]; const useSpecialSchedule = this.useSpecial(); let schedule; if (useSpecialSchedule === -1) { schedule = this.main_schedule_times; } else { schedule = this.special_schedules[useSpecialSchedule].openTimes; } for (let i = 0; i < schedule.length; i++) { const day = schedule[i]; if ((dayOfWeek === day.start_day || dayOfWeek === day.end_day) && day.start_day === day.end_day) { if (inSeconds >= day.start_time.inSeconds()) { if (inSeconds <= day.end_time.inSeconds()) { return true; } } } else if (dayOfWeek >= day.start_day && dayOfWeek <= day.end_day) { if (dayOfWeek === day.start_day) { if (inSeconds >= day.start_time.inSeconds()) { return true; } } else if (dayOfWeek === day.end_day) { if (inSeconds <= day.end_time.inSeconds()) { return true; } } else { return true; } } } return false; } openFor(): any { const currTime = new Date(); const inSeconds = currTime.getHours() * 60 * 60 + currTime.getMinutes() * 60 + currTime.getSeconds(); const dayOfWeekShift = [6, 0, 1, 2, 3, 4, 5]; const dayOfWeek = dayOfWeekShift[currTime.getDay()]; const useSpecialSchedule = this.useSpecial(); let timeTilClose = new Time(); let sumSeconds = 0; let schedule; if (useSpecialSchedule === -1) { schedule = this.main_schedule_times; } else { schedule = this.special_schedules[useSpecialSchedule].openTimes; } for (let i = 0; i < schedule.length; i++) { const day = schedule[i]; if ((dayOfWeek === day.start_day || dayOfWeek === day.end_day) && day.start_day === day.end_day) { if (inSeconds >= day.start_time.inSeconds()) { if (inSeconds <= day.end_time.inSeconds()) { sumSeconds = day.end_time.inSeconds() - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } else { //not done sumSeconds = 86400 - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } } else { sumSeconds = day.start_time.inSeconds() - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } // console.log(sumSeconds); } else if (dayOfWeek >= day.start_day && dayOfWeek <= day.end_day) { if (dayOfWeek === day.start_day) { if (inSeconds >= day.start_time.inSeconds()) { sumSeconds = 86400 - inSeconds + (86400 * (day.end_day - day.start_day - 1)) + day.end_time.inSeconds(); return timeTilClose.fromSeconds(sumSeconds); } else { sumSeconds = day.start_time.inSeconds() - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } } else if (dayOfWeek === day.end_day) { if (inSeconds >= day.end_time.inSeconds()) { //not done sumSeconds = 86400 - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } else { sumSeconds = day.end_time.inSeconds() - inSeconds; return timeTilClose.fromSeconds(sumSeconds); } } else { sumSeconds = 86400 - inSeconds + (86400 * (day.end_day - dayOfWeek - 2)) + day.end_time.inSeconds(); return timeTilClose.fromSeconds(sumSeconds); } // console.log(sumSeconds); } } return new Time(); } useSpecial(): number { const todaysDate = new Date(); for (let i = 0; i < this.special_schedules.length; i++) { let parsedStart = this.special_schedules[i].validStart.split('-'); let parsedEnd = this.special_schedules[i].validEnd.split('-'); if (todaysDate.getFullYear() >= Number(parsedStart[0]) && todaysDate.getFullYear() <= Number(parsedEnd[0])) { if (todaysDate.getMonth() >= Number(parsedStart[1]) && todaysDate.getMonth() <= Number(parsedEnd[1])) { if (todaysDate.getDate() >= Number(parsedStart[2]) && todaysDate.getDate() <= Number(parsedEnd[2])) { return i; } } } } return -1; } }