public async Task <APIResult <List <DAL.trip_book> > > Booking(int trip_id, int?seat = 1, bool?all_shoots = true) { var u = Requests.APIRequest.User(HttpContext.Current.Request); if (trip_id == 0) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserValidationField, "'trip_id' is required!")); } List <DAL.trip_book> lst = new List <DAL.trip_book>(); using (var ctx = new DAL.MainEntities()) { var selectedTrip = ctx.trip_share_details.Include("trip_share").FirstOrDefault(a => a.id == trip_id); if (selectedTrip.trip_share.driver_id == u.Entity.id) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserValidationField, "You cannot booking your shared trip!")); } //var cTime = DateTime.Now.AddMinutes(-30) ; //&& a.start_at_date >= cTime var triplist = ctx.trip_share_details.Include("trip_share").Where(a => a.trip_share_id == selectedTrip.trip_share_id).ToList(); if (triplist.Count == 0) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserValidationField, "This trip not available for booking now!")); } foreach (var trip in triplist) { //var trip=ctx.trip_share_details.Include("trip_share").Where(a=>a.id==trip_id).FirstOrDefault(); if (trip == null) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserNotFound, "This trip not found!")); } if (trip.booked_seats == null) { trip.booked_seats = 0; } if (trip.seats == trip.booked_seats) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserNotAcceptable, "There are no available seat in this trip!")); } if (trip.seats - trip.booked_seats < seat) { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.UserNotAcceptable, "There are only " + (trip.seats - trip.booked_seats) + " available seat/s in this trip")); } //var requests=ctx.trip_request_details.Include("trip_request").Where(a=>) var req = new DAL.trip_request() { created_at = DateTime.Now, created_by = u.Entity.id, end_at_date = null, rider_id = u.Entity.id, seats = seat, start_at_date = trip.start_at_date, trip_type_id = trip.trip_share.trip_type_id, }; var req_details = new DAL.trip_request_details() { from_lat = trip.from_lat, from_lng = trip.from_lng, from_plc = trip.from_plc, gender_id = trip.gender_id, is_active = true, seats = seat, seat_cost_from = trip.seat_cost, seat_cost_to = trip.seat_cost, start_at_date = trip.start_at_date, start_at_time = trip.start_at_time, to_lat = trip.to_lat, to_lng = trip.to_lng, to_plc = trip.to_plc, booked = true }; req.trip_request_details.Add(req_details); ctx.trip_request.Add(req); if (ctx.SaveChanges() > 0) { for (int i = 0; i < seat; i++) { var itm = new DAL.trip_book() { trip_request_details_id = req_details.id, booked_at = DateTime.Now, seats = 1, trip_share_details_id = trip_id, trip_token = Guid.NewGuid(), }; trip.booked_seats++; ctx.Entry(trip).State = System.Data.Entity.EntityState.Modified; ctx.trip_book.Add(itm); lst.Add(itm); } ctx.SaveChanges(); } else { return(APIResult <List <DAL.trip_book> > .Error(ResponseCode.BackendDatabase, "Error while save trip_request")); } if (all_shoots != true) { return(APIResult <List <DAL.trip_book> > .Success(lst)); } } var driverDeviceID = ctx.sec_sessions.Where(a => a.user_id == selectedTrip.trip_share.driver_id && a.device_id != null).Select(a => a.device_id).Distinct().ToArray(); //var ddd = ctx.sec_sessions.Where(a => a.user_id == selectedTrip.trip_share.driver_id).ToArray(); // Logger.log(JsonConvert.SerializeObject( ddd)); await FirebaseNotifications.Send(driverDeviceID, "Seats Booking", "Someone has booked your shared seats.", new { type = 1, screen = "trip_share", id = selectedTrip.id, sender = ctx.vwProfile.FirstOrDefault(a => a.id == u.Entity.id).firebase_uid }); //FirebaseNotifications.Send(new string[] { "rP2tRzF3uKNfYrZu9YypmohBKJX2" }, "Seats Booking", "Someone has booked your shared seats.", new { type = 1, screen = "trip_share", id = 2272, sender = "PF3nbGndlZV99YyPI1J4NOs6XVE2" }); return(APIResult <List <DAL.trip_book> > .Success(lst)); } }
public APIResult <bool> Need(NeedSeatRequest request) { var u = APIRequest.User(HttpContext.Current.Request); if (request.start_at == null) { request.start_at = DateTime.Now; } using (var ctx = new DAL.MainEntities()) { var Trip = new DAL.trip_request() { created_at = DateTime.Now, created_by = u.Entity.id, start_at_date = request.start_at, trip_type_id = (int)request.trip_type, rider_id = u.Entity.id }; if (request.shuttle_at != null) { Trip.end_at_date = request.shuttle_at; } var Leave_Details = new DAL.trip_request_details() { from_lat = request.from.lat, from_lng = request.from.lng, from_plc = request.from.country + ", " + request.from.governorate + ", " + request.from.city + ", " + request.from.street, to_lat = request.to.lat, to_lng = request.to.lng, to_plc = request.to.country + ", " + request.to.governorate + ", " + request.to.city + ", " + request.to.street, gender_id = request.gender_id, is_active = true, seats = request.seats, seat_cost_from = request.seat_cost_from, seat_cost_to = request.seat_cost_to, start_at_date = request.start_at.Value, start_at_time = request.start_at.Value.TimeOfDay, trip_direction = 1, }; Trip.trip_request_details.Add(Leave_Details); if (request.trip_type == TripTypes.Round || request.trip_type == TripTypes.Shuttle) { var Round_Details = new DAL.trip_request_details() { to_lat = request.from.lat, to_lng = request.from.lng, to_plc = request.from.country + ", " + request.from.governorate + ", " + request.from.city + ", " + request.from.street, from_lat = request.to.lat, from_lng = request.to.lng, from_plc = request.to.country + ", " + request.to.governorate + ", " + request.to.city + ", " + request.to.street, gender_id = request.gender_id, is_active = true, seats = request.seats, seat_cost_from = request.seat_cost_from, seat_cost_to = request.seat_cost_to, start_at_date = request.round_at.Value, start_at_time = request.round_at.Value.TimeOfDay, trip_direction = 2, }; Trip.trip_request_details.Add(Round_Details); } if (request.trip_type == TripTypes.Shuttle) { var cDate = request.start_at.Value.AddDays(1); var rDate = request.round_at.Value.AddDays(1); while (cDate <= request.shuttle_at.Value) { var Leave = new DAL.trip_request_details() { from_lat = request.from.lat, from_lng = request.from.lng, from_plc = request.from.country + ", " + request.from.governorate + ", " + request.from.city + ", " + request.from.street, to_lat = request.to.lat, to_lng = request.to.lng, to_plc = request.to.country + ", " + request.to.governorate + ", " + request.to.city + ", " + request.to.street, gender_id = request.gender_id, is_active = true, seats = request.seats, seat_cost_from = request.seat_cost_from, seat_cost_to = request.seat_cost_to, start_at_date = cDate, start_at_time = request.start_at.Value.TimeOfDay, trip_direction = 1, }; Trip.trip_request_details.Add(Leave); var Round = new DAL.trip_request_details() { to_lat = request.from.lat, to_lng = request.from.lng, to_plc = request.from.country + ", " + request.from.governorate + ", " + request.from.city + ", " + request.from.street, from_lat = request.to.lat, from_lng = request.to.lng, from_plc = request.to.country + ", " + request.to.governorate + ", " + request.to.city + ", " + request.to.street, gender_id = request.gender_id, is_active = true, seats = request.seats, seat_cost_from = request.seat_cost_from, seat_cost_to = request.seat_cost_to, start_at_date = rDate, start_at_time = request.round_at.Value.TimeOfDay, trip_direction = 2, }; Trip.trip_request_details.Add(Round); cDate = cDate.AddDays(1); rDate = rDate.AddDays(1); } } ctx.trip_request.Add(Trip); try { ctx.SaveChanges(); return(APIResult <bool> .Success(true)); } catch (Exception ex) { return(APIResult <bool> .Error(ResponseCode.BackendDatabase, ex.Message)); } } }