示例#1
0
        public int PostTicket(string username, TicketPostViewModel model)
        {
            var customerId    = _customerRepository.Get(x => x.Username == username && x.Deleted == false).Id;
            var existedTicket = _ticketRepository.Get(x => x.TicketCode.ToLower().Equals(model.TicketCode.ToLower()) &&
                                                      x.TransportationId == model.TransportationId && x.TicketTypeId == model.TicketTypeId &&
                                                      x.DepartureStationId == model.DepartureStationId && x.ArrivalStationId == model.ArrivalStationId &&
                                                      DateTime.Equals(x.DepartureDateTime, model.DepartureDateTime) && DateTime.Equals(x.ArrivalDateTime, model.ArrivalDateTime));

            if (existedTicket != null && existedTicket.Status != TicketStatus.Invalid)
            {
                throw new InvalidOperationException();
            }
            var ticket = _mapper.Map <TicketPostViewModel, Ticket>(model);

            ticket.CommissionPercent = 10;
            ticket.Status            = Core.Enum.TicketStatus.Pending;
            ticket.SellerId          = customerId;
            ticket.ExpiredDateTime   = model.DepartureDateTime;

            //convert time into UTC time
            var departureStation = _stationRepository.Get(x => x.Id == ticket.DepartureStationId && x.Deleted == false);

            if (departureStation.City.TimeZoneId != null)
            {
                ticket.DepartureDateTimeUTC = ticket.DepartureDateTime.ToSpecifiedTimeZone(departureStation.City.TimeZoneId);
                if (ticket.ExpiredDateTime != null)
                {
                    ticket.ExpiredDateTimeUTC = ticket.ExpiredDateTime.Value.ToSpecifiedTimeZone(departureStation.City.TimeZoneId);
                }
            }
            else
            {
                ticket.DepartureDateTimeUTC = ticket.DepartureDateTime;
                ticket.ExpiredDateTimeUTC   = ticket.ExpiredDateTime;
            }

            var arrivalStation = _stationRepository.Get(x => x.Id == ticket.ArrivalStationId && x.Deleted == false);

            if (arrivalStation.City.TimeZoneId != null)
            {
                ticket.ArrivalDateTimeUTC = ticket.ArrivalDateTime.ToSpecifiedTimeZone(arrivalStation.City.TimeZoneId);
            }
            else
            {
                ticket.ArrivalDateTimeUTC = ticket.ArrivalDateTime;
            }

            _ticketRepository.Add(ticket);
            _unitOfWork.CommitChanges();

            //noti to staff
            List <string> adminDeviceIds = GetAdminDeviceIds();
            var           message        = "A new ticket is posted";

            _oneSignalService.PushNotificationAdmin(message, adminDeviceIds);
            return(ticket.Id);
        }
示例#2
0
 public ActionResult PostTicket(TicketPostViewModel model)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest("Invalid Request"));
     }
     try
     {
         var username = User.Identity.Name;
         int Id       = _ticketService.PostTicket(username, model);
         return(Ok(Id));
     }
     catch (Exception e)
     {
         return(StatusCode((int)HttpStatusCode.NotAcceptable, e.Message));
     }
 }