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