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); }
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)); } }