Example #1
0
    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);
    }
Example #2
0
        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);
        }
Example #3
0
    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));
    }