public TimeSlotData[] LoadDayTimeSlots(DateTime when) { string path = GetPath(when); if (!File.Exists(path)) { string templatePath = GetPathOfTemplate(when); if (File.Exists(templatePath)) { File.Copy(templatePath, path); } else { return(new TimeSlotData[0]); } } string[] lines = File.ReadAllLines(path); int numEntries = int.Parse(lines[0]); TimeSlotData[] toReturn = new TimeSlotData[numEntries]; for (int i = 0; i < numEntries; i++) { toReturn[i].id = int.Parse(lines[i * 3 + 1]); toReturn[i].startTime = int.Parse(lines[i * 3 + 2]); toReturn[i].duration = int.Parse(lines[i * 3 + 3]); } return(toReturn); }
protected override async Task <ICommandResult> Handle(ReserveTimeSlotCommand command) { ReserveTimeSlotCommandResult results = new ReserveTimeSlotCommandResult(); ReserveTimeSlotReqestModel reserveTimelotRequestModel = new ReserveTimeSlotReqestModel(); IEnumerable <long> eventTicketAttributeIds = command.EventTicketAttributeList.Select(s => s.Id).Distinct(); IEnumerable <Contracts.Models.EventTicketAttribute> eventTicketAttributes = AutoMapper.Mapper.Map <IEnumerable <Contracts.Models.EventTicketAttribute> >(_eventTicketAttributeRepository.GetByIds(eventTicketAttributeIds)); var allETD = _eventTicketDetailRepository.GetByEventTicketDetailsIds(eventTicketAttributes.Select(s => s.EventTicketDetailId).Distinct()).Distinct(); var allTC = _ticketCategoryRepository.GetByTicketCategoryIds(allETD.Select(s => s.TicketCategoryId).Distinct()).Distinct(); var allED = _eventDetailRepository.GetByIds(allETD.Select(s => s.EventDetailId).Distinct()).Distinct().FirstOrDefault(); var citySightEventDetails = _citySightSeeingEventDetailMappingRepository.GetByEventDetailId(allED.Id); var citySightSeeingTickets = _citySightSeeingTicketRepository.Get(citySightEventDetails.CitySightSeeingTicketId); var citySightSeeingTicketDetails = _citySightSeeingTicketDetailRepository.GetByTicketId(citySightSeeingTickets.TicketId); var citySightSeeingLocations = _citySightSeeingLocationRepository.Get(citySightSeeingTickets.CitySightSeeingLocationId); var locationDetail = await _googleMapApi.GetLatLongFromAddress(citySightSeeingLocations.Name); string tz = ""; DateTime fromDate = DateTime.Now;; var offset = ""; if (locationDetail.Success) { double lat = Convert.ToDouble(locationDetail.Result.lat); double lng = Convert.ToDouble(locationDetail.Result.lng); tz = TimeZoneLookup.GetTimeZone(lat, lng).Result; TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo(tz); var visitDate = command.EventTicketAttributeList[0].VisitDate; var timeSlot = command.EventTicketAttributeList[0].TimeSlot; var utcOffset = tzi.BaseUtcOffset.ToString().Split(":")[0]; var minutes = Convert.ToInt64(tzi.BaseUtcOffset.ToString().Split(":")[1]); if (utcOffset.Contains("-")) { var hours = Convert.ToInt64((tzi.BaseUtcOffset.ToString().Split(":")[0]).Split("-")[1]); visitDate = visitDate.AddHours(hours).AddMinutes(minutes); offset = utcOffset; } else { var hours = Convert.ToInt64((tzi.BaseUtcOffset.ToString().Split(":")[0])); visitDate = visitDate.AddHours(-hours).AddMinutes(-minutes); offset = "+" + utcOffset; } var formattedDateTime = visitDate.Year + "-" + visitDate.Month + "-" + visitDate.Day + "T" + timeSlot; fromDate = Convert.ToDateTime(formattedDateTime); } var duration = citySightSeeingTicketDetails.Duration; reserveTimelotRequestModel.request_type = "reserve"; TimeSlotData timeSlotData = new TimeSlotData(); timeSlotData.distributor_id = _settings.GetConfigSetting <string>(SettingKeys.Integration.CitySightSeeing.DistributorId); timeSlotData.ticket_id = citySightSeeingTickets.TicketId; timeSlotData.pickup_point_id = (citySightSeeingTicketDetails.PickupPoints != null && citySightSeeingTicketDetails.PickupPoints != "") ? citySightSeeingTicketDetails.PickupPoints : ""; DateTime endDate = DateTime.Now; List <BookingTimeSlotDetail> bookingTimeSlotDetailList = new List <BookingTimeSlotDetail>(); foreach (Contracts.Commands.Transaction.EventTicketAttribute ticketAttributes in command.EventTicketAttributeList) { BookingTimeSlotDetail bookingTimeSlotDetail = new BookingTimeSlotDetail(); var currentTA = ticketAttributes; Contracts.Models.EventTicketAttribute checkoutCommandEventTicketAttribute = eventTicketAttributes.Where(w => w.Id == ticketAttributes.Id).FirstOrDefault(); EventTicketDetail eventTicketDetail = allETD.Where(s => s.Id == checkoutCommandEventTicketAttribute.EventTicketDetailId).FirstOrDefault(); var ticketCategoryId = allTC.Where(s => s.Id == eventTicketDetail.TicketCategoryId).FirstOrDefault(); bookingTimeSlotDetail.count = ticketAttributes.TotalTickets; var formattedTicketCat = ticketCategoryId.Name.Split("("); bookingTimeSlotDetail.ticket_type = formattedTicketCat[0].ToUpper(); bookingTimeSlotDetail.extra_options = null; bookingTimeSlotDetailList.Add(bookingTimeSlotDetail); } if (duration.Contains("day")) { string[] day = duration.Split("day"); endDate = fromDate.AddDays(Convert.ToDouble(day[0])); } if (duration.Contains("hour")) { string[] hour = duration.Split("hour"); endDate = fromDate.AddHours(Convert.ToDouble(hour[0])); } var fromDate_with_time_slot = Convert.ToDateTime(fromDate.ToString() + offset); var endDate_with_time_slot = Convert.ToDateTime(endDate.ToString() + offset); timeSlotData.from_date_time = fromDate_with_time_slot; timeSlotData.to_date_time = endDate_with_time_slot; timeSlotData.booking_details = bookingTimeSlotDetailList; reserveTimelotRequestModel.data = timeSlotData; reserveTimelotRequestModel.data.distributor_reference = RandomDigits(10); var response = Mapper <TimeSlotResponseModel> .MapFromJson(await ReserveBooking(reserveTimelotRequestModel)); if (response != null && response.data.booking_status == "Reserved") { results.Success = true; results.FromTime = fromDate.ToString() + offset; results.EndTime = endDate.ToString() + offset; results.Reservation_reference = response.data.reservation_reference; results.Reservation_valid_until = response.data.reservation_valid_until; results.Distributor_reference = response.data.distributor_reference; results.TicketId = citySightSeeingTicketDetails.TicketId; results.TimeSlot = command.EventTicketAttributeList[0].TimeSlot; } else { results.Success = false; } return(results); }
public void OnMinuteUpdated() { int currentTime = (DateTime.Now.Hour - 7) * 60 + DateTime.Now.Minute; TimeSlotData[] slots = TimeManager.S.LoadDayTimeSlots(); // No events if (slots.Length == 0) { animator.AnimateOutSpeech(new AvianSpeech("I'm impressed, you have absolutely nothing going on today apparently. Maybe you should add some events", fingertapping)); return; } string text = ""; bool eventJustEnded = false; // Event Ending foreach (TimeSlotData slot in slots) { if (currentTime == slot.startTime + slot.duration) { text = RandomText("Congratulations kid, ", "Good work, ", "Great job, "); text += "you just finished up your " + IdToText(slot.id) + " event. "; eventJustEnded = true; // Check if another event is starting foreach (TimeSlotData slot2 in slots) { if (currentTime == slot2.startTime) { text += " But, it looks like you've got a " + IdToText(slot2.id) + " event up now. Hope you had a good 1 second break."; animator.AnimateOutSpeech(new AvianSpeech(text, wicked)); if (slot.id != 7 && slot2.id != 7) // Don't vibrate if we're sleeping { MakeNoise(); } return; } } if (slot.id != 7) // Don't vibrate if we're sleeping { MakeNoise(); } text += "Now "; } } // Event Starting foreach (TimeSlotData slot in slots) { if (currentTime == slot.startTime) { text = "And with that we've got a " + IdToText(slot.id) + " event starting now. It's scheduled to last for the next " + ColorStartOrange() + slot.duration + " minute" + sIfNotOne(slot.duration) + ColorEnd() + "."; animator.AnimateOutSpeech(new AvianSpeech(text, talk)); if (slot.id != 7) // Don't vibrate if we're sleeping { MakeNoise(); } return; } } if (!eventJustEnded) { text += RandomText("Heads up, ", "Hey, ", "Just so you know "); } int closestEventTime = int.MaxValue; TimeSlotData closestEvent = new TimeSlotData(); foreach (TimeSlotData slot in slots) { if (currentTime > slot.startTime && currentTime < slot.startTime + slot.duration) { int timeToNext = slot.startTime + slot.duration - currentTime; text += "you've got " + ColorStartOrange() + (timeToNext) + " minute" + sIfNotOne(timeToNext) + ColorEnd() + " left until "; text += RandomText("you're done with your ", "you're finished with your "); text += IdToText(slot.id) + " event."; animator.AnimateOutSpeech(new AvianSpeech(text, talk)); return; } int timeUntil = slot.startTime - currentTime; if (timeUntil < closestEventTime && timeUntil > 0) { closestEventTime = timeUntil; closestEvent = slot; } } if (closestEventTime == int.MaxValue) { animator.AnimateOutSpeech(new AvianSpeech("Wow it looks like you've got nothing left to do today, not even sleep. That's suspiciously impressive.", fingertapping)); return; } text += "you've got " + ColorStartOrange() + (closestEventTime) + ColorEnd() + " minute" + sIfNotOne(closestEventTime) + " left until "; text += RandomText("you start your ", "you begin your "); text += IdToText(closestEvent.id) + " event."; animator.AnimateOutSpeech(new AvianSpeech(text, talk)); }