async Task <object> deleteVehicleReservation(int id)
        {
            VehicleReservation vehicleReservation = await _context.VehicleReservation.FindAsync(id);

            var vehicle = await _context.Vehicles.Include(vehicle => vehicle.UnavailableDates).FirstOrDefaultAsync(vehicle => vehicle.VehicleId == vehicleReservation.VehicleId);

            vehicle.UnavailableDates.ToList().ForEach(
                unavailableDate =>
            {
                if (unavailableDate.Date.Date >= vehicleReservation.FromDate.Date && unavailableDate.Date.Date <= vehicleReservation.ToDate.Date)
                {
                    _context.Remove(unavailableDate);
                }
            }
                );
            _context.Entry(vehicleReservation).State = EntityState.Deleted;

            try
            {
                await _context.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception e)
            {
                return(BadRequest());
            }
        }
        public async Task <Object> PostVehicleReservation(TOVehicleReservation toVehicleReservation, [FromQuery] int version)
        {
            string role = User.Claims.First(c => c.Type == "Roles").Value;

            if (role != "regular")
            {
                return(BadRequest("You are not authorised to do this action"));
            }

            VehicleReservation vehicleReservation = new VehicleReservation();

            vehicleReservation.FromTO(toVehicleReservation);

            bool    success = false;
            Vehicle vehicle = await _context.Vehicles.Include(v => v.UnavailableDates).FirstOrDefaultAsync(v => v.VehicleId == vehicleReservation.VehicleId);

            if (vehicle.Version != version)
            {
                //Provera da li je zbog edita ili rezervacije duple
                return(Ok(new { success }));
            }

            _context.VehicleReservation.Add(vehicleReservation);
            await _context.SaveChangesAsync();

            //Treba popuniti Unavailable Dates


            for (int i = 0; i < vehicleReservation.NumOfDays; i++)
            {
                vehicle.UnavailableDates.Add(new UnavailableDate()
                {
                    DateId  = 0,
                    Vehicle = vehicle,
                    Date    = vehicleReservation.FromDate.AddDays(i)
                });
            }

            vehicle.Version++;
            await _context.SaveChangesAsync();

            int id = vehicleReservation.ReservationId;

            success = true;
            return(Ok(new { id, success }));
        }
        public async Task <IActionResult> PutVehicleReservation(int id, TOVehicleReservation toVehicleReservation)
        {
            string role = User.Claims.First(c => c.Type == "Roles").Value;

            if (role != "regular")
            {
                return(BadRequest("You are not authorised to do this action"));
            }

            VehicleReservation vehicleReservation = new VehicleReservation();

            vehicleReservation.FromTO(toVehicleReservation);

            if (id != vehicleReservation.ReservationId)
            {
                return(BadRequest());
            }

            _context.Entry(vehicleReservation).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!VehicleReservationExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <FlightReservation> > PostFlightReservation(TOFlightReservation flightReservation, int points)
        {
            TOFlight tempFlight = new TOFlight();

            string userId  = User.Claims.First(c => c.Type == "UserID").Value;
            var    inviter = await _userManager.FindByIdAsync(userId);

            VehicleReservation vehicleReservation = null;
            Vehicle            vehicle            = null;

            if (flightReservation.VehicleReservationId != 0)
            {
                vehicleReservation = await _context.VehicleReservation.FindAsync(flightReservation.VehicleReservationId);

                vehicle = await _context.Vehicles.Include(vehicle => vehicle.RentACar).FirstOrDefaultAsync(vehicle => vehicle.VehicleId == vehicleReservation.VehicleId);
            }

            FlightReservation tempFlightReservation = new FlightReservation()
            {
                ReservationId        = 0,
                TimeOfCreation       = DateTime.Now,
                Creator              = inviter.UserName,
                VehicleReservationId = flightReservation.VehicleReservationId,
                FinalPrice           = flightReservation.FinalPrice
            };

            flightReservation.FlightReservationDetails.ForEach(flightReservation => { inviter.NumberOfPoint += (int)Math.Round(flightReservation.Flight.Distance); });
            inviter.NumberOfPoint -= points;

            await _userManager.UpdateAsync(inviter);

            _context.FlightReservations.Add(tempFlightReservation);
            await _context.SaveChangesAsync();

            foreach (TOFlightReservationDetail tOFlightReservationDetail in flightReservation.FlightReservationDetails)
            {
                tempFlight = tOFlightReservationDetail.Flight;

                FlightReservationDetail flightReservationDetail = new FlightReservationDetail()
                {
                    FlightId                  = tOFlightReservationDetail.Flight.FlightId,
                    FlightReservation         = tempFlightReservation,
                    FlightReservationDetailId = 0,
                    AirlineName               = tOFlightReservationDetail.Flight.AirlineName
                };

                _context.Entry(flightReservationDetail).State = EntityState.Added;

                await _context.SaveChangesAsync();

                foreach (TOPassengerSeat tOPassengerSeat in tOFlightReservationDetail.PassengerSeats)
                {
                    PassengerSeat passengerSeat = new PassengerSeat()
                    {
                        SeatId                  = tOPassengerSeat.Seat.SeatId,
                        Surname                 = tOPassengerSeat.Surname,
                        PassengerSeatId         = 0,
                        Name                    = tOPassengerSeat.Name,
                        Passport                = tOPassengerSeat.Passport,
                        Username                = tOPassengerSeat.Username,
                        FlightReservationDetail = flightReservationDetail,
                        AirlineScored           = false,
                        FlightScored            = false,
                    };

                    if (passengerSeat.Username == "" || passengerSeat.Username == inviter.UserName)
                    {
                        passengerSeat.Accepted = true;
                    }
                    else
                    {
                        passengerSeat.Accepted = false;
                    }

                    _context.Entry(passengerSeat).State = EntityState.Added;

                    if (passengerSeat.Username != null && passengerSeat.Username != "" && passengerSeat.Username != inviter.UserName)
                    {
                        var user = await _userManager.FindByNameAsync(passengerSeat.Username);

                        flightReservation.FlightReservationDetails.ForEach(flightReservation => { user.NumberOfPoint += (int)Math.Round(flightReservation.Flight.Distance); });

                        await _userManager.UpdateAsync(user);

                        MailingService.SendEMailInvite(inviter, user, flightReservation, vehicle, tempFlightReservation.ReservationId);
                    }

                    Seat seat = await _context.Seats.FindAsync(passengerSeat.SeatId);

                    seat.Occupied = true;
                    _context.Entry(seat).State = EntityState.Modified;
                    await _context.SaveChangesAsync();
                }

                await _context.SaveChangesAsync();
            }

            MailingService.SendEMailReceipt(inviter, flightReservation, vehicle);

            return(Ok());
        }
示例#5
0
        /// <summary>
        /// Save NRT
        /// </summary>
        /// <param name="nrtVehicle"></param>
        /// <returns></returns>
        public long SaveNrt(NrtVehicle nrtVehicle)
        {
            NrtMain  nrtMainDbVersion = nrtMainRepository.Find(nrtVehicle.NrtMainId);
            RaStatus raStatus;

            if (nrtVehicle.NrtMain.NrtStatusId == 2)
            {
                raStatus = raStatusRepository.FindByStatusKey(2);
            }
            else
            {
                raStatus = raStatusRepository.FindByStatusKey(1);
            }

            if (nrtMainDbVersion == null)
            {
                //NRT Main
                nrtVehicle.NrtMain.IsActive         = true;
                nrtVehicle.NrtMain.IsDeleted        =
                    nrtVehicle.NrtMain.IsPrivate    = nrtVehicle.NrtMain.IsReadOnly = false;
                nrtVehicle.NrtMain.RecLastUpdatedBy =
                    nrtVehicle.NrtMain.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                nrtVehicle.NrtMain.RecCreatedDt     = nrtVehicle.NrtMain.RecLastUpdatedDt = DateTime.Now;
                nrtVehicle.NrtMain.RowVersion       = 0;
                nrtVehicle.NrtMain.UserDomainKey    = nrtMainRepository.UserDomainKey;
                nrtVehicle.NrtMain.NrtStatusId      = raStatus != null ? raStatus.RaStatusId : raStatus.RaStatusId;
                nrtMainRepository.Add(nrtVehicle.NrtMain);
                nrtMainRepository.SaveChanges();
                //Vehicle Reservation
                VehicleReservation vehicleReservation = new VehicleReservation();
                vehicleReservation.IsActive         = true;
                vehicleReservation.IsDeleted        =
                    vehicleReservation.IsPrivate    = vehicleReservation.IsReadOnly = false;
                vehicleReservation.RecLastUpdatedBy =
                    vehicleReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                vehicleReservation.RecCreatedDt     = vehicleReservation.RecLastUpdatedDt = DateTime.Now;
                vehicleReservation.RowVersion       = 0;
                vehicleReservation.UserDomainKey    = nrtMainRepository.UserDomainKey;
                vehicleReservation.VehicleId        = nrtVehicle.VehicleId;
                vehicleReservation.StartDtTime      = nrtVehicle.NrtMain.StartDtTime;
                vehicleReservation.EndDtTime        = nrtVehicle.NrtMain.EndDtTime;
                vehicleReservation.NrtMainId        = nrtVehicle.NrtMain.NrtMainId;
                vehicleReservationRepository.Add(vehicleReservation);
                vehicleReservationRepository.SaveChanges();


                //NRT vehicle
                nrtVehicle.IsActive         = true;
                nrtVehicle.IsDeleted        =
                    nrtVehicle.IsPrivate    = nrtVehicle.IsReadOnly = false;
                nrtVehicle.RecLastUpdatedBy =
                    nrtVehicle.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                nrtVehicle.RecCreatedDt     = nrtVehicle.RecLastUpdatedDt = DateTime.Now;
                nrtVehicle.RowVersion       = 0;
                nrtVehicle.UserDomainKey    = nrtMainRepository.UserDomainKey;
                nrtVehicle.NrtVehicleId     = nrtVehicle.VehicleId;
                nrtVehicle.NrtMainId        = nrtVehicle.NrtMain.NrtMainId;

                //NRT Drivers
                if (nrtVehicle.NrtDrivers != null)
                {
                    foreach (var item in nrtVehicle.NrtDrivers)
                    {
                        item.IsActive         = true;
                        item.IsDeleted        = item.IsPrivate = item.IsReadOnly = false;
                        item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                        item.RecCreatedDt     = item.RecLastUpdatedDt = DateTime.Now;
                        item.RowVersion       = 0;
                        item.UserDomainKey    = nrtMainRepository.UserDomainKey;
                        item.NrtVehicleId     = nrtVehicle.NrtVehicleId;

                        //Chauffer Reservation
                        ChaufferReservation chaufferReservation = new ChaufferReservation();
                        chaufferReservation.IsActive         = true;
                        chaufferReservation.IsDeleted        =
                            chaufferReservation.IsPrivate    = chaufferReservation.IsReadOnly = false;
                        chaufferReservation.RecLastUpdatedBy =
                            chaufferReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                        chaufferReservation.RecCreatedDt     = chaufferReservation.RecLastUpdatedDt = DateTime.Now;
                        chaufferReservation.RowVersion       = 0;
                        chaufferReservation.UserDomainKey    = nrtMainRepository.UserDomainKey;
                        chaufferReservation.ChaufferId       = (item.ChaufferId ?? 0);
                        chaufferReservation.StartDtTime      = nrtVehicle.NrtMain.StartDtTime;
                        chaufferReservation.EndDtTime        = nrtVehicle.NrtMain.EndDtTime;
                        chaufferReservation.NrtMainId        = nrtVehicle.NrtMain.NrtMainId;
                        chaufferReservationRepository.Add(chaufferReservation);
                        chaufferReservationRepository.SaveChanges();
                    }
                }

                //NRT Vehicle movements
                if (nrtVehicle.NrtVehicleMovements != null)
                {
                    foreach (var item in nrtVehicle.NrtVehicleMovements)
                    {
                        item.IsActive         = true;
                        item.IsDeleted        = item.IsPrivate = item.IsReadOnly = false;
                        item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                        item.RecCreatedDt     = item.RecLastUpdatedDt = DateTime.Now;
                        item.RowVersion       = 0;
                        item.UserDomainKey    = nrtMainRepository.UserDomainKey;
                        item.NrtVehicleId     = nrtVehicle.NrtVehicleId;
                        item.VehicleCondition = "0011111";
                    }
                }

                //NRT Charges
                if (nrtVehicle.NrtCharges != null)
                {
                    foreach (var item in nrtVehicle.NrtCharges)
                    {
                        item.IsActive         = true;
                        item.IsDeleted        = item.IsPrivate = item.IsReadOnly = false;
                        item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                        item.RecCreatedDt     = item.RecLastUpdatedDt = DateTime.Now;
                        item.RowVersion       = 0;
                        item.UserDomainKey    = nrtMainRepository.UserDomainKey;
                        item.NrtVehicleId     = nrtVehicle.NrtVehicleId;
                    }
                }
                nrtVehicleRepository.Add(nrtVehicle);
                nrtVehicleRepository.SaveChanges();
            }
            else
            {
                //NrtVehicle nrtVehicleDbVersion = nrtVehicleRepository.Find(nrtMainDbVersion.NrtMainId);


                nrtMainDbVersion.CloseLocationId = nrtVehicle.NrtMain.CloseLocationId;
                nrtMainDbVersion.EndDtTime       = nrtVehicle.NrtMain.EndDtTime;
                nrtMainDbVersion.NrtStatusId     = raStatus.RaStatusId;
                //Vehicle Reservation
                if (nrtMainDbVersion.VehicleReservations != null)
                {
                    foreach (var item in nrtMainDbVersion.VehicleReservations)
                    {
                        item.EndDtTime = nrtVehicle.NrtMain.EndDtTime;
                    }
                }

                if (nrtMainDbVersion.NrtVehicles != null)
                {
                    foreach (var nrtVehicleDbVersion in nrtMainDbVersion.NrtVehicles)
                    {
                        #region NRT Drivers
                        if (nrtVehicle.NrtDrivers != null)
                        {
                            foreach (var item in nrtVehicle.NrtDrivers)
                            {
                                if (
                                    nrtVehicleDbVersion.NrtDrivers.All(
                                        x =>
                                        x.NrtDriverId != item.NrtDriverId ||
                                        item.NrtDriverId == 0))
                                {
                                    item.IsActive         = true;
                                    item.IsDeleted        = item.IsPrivate = item.IsReadOnly = false;
                                    item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                                    item.RecCreatedDt     = item.RecLastUpdatedDt = DateTime.Now;
                                    item.RowVersion       = 0;
                                    item.UserDomainKey    = nrtMainRepository.UserDomainKey;
                                    item.NrtVehicleId     = nrtVehicle.NrtVehicleId;
                                    nrtVehicleDbVersion.NrtDrivers.Add(item);

                                    //Chauffer Reservation
                                    ChaufferReservation chaufferReservation = new ChaufferReservation();
                                    chaufferReservation.IsActive         = true;
                                    chaufferReservation.IsDeleted        =
                                        chaufferReservation.IsPrivate    = chaufferReservation.IsReadOnly = false;
                                    chaufferReservation.RecLastUpdatedBy =
                                        chaufferReservation.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                                    chaufferReservation.RecCreatedDt     = chaufferReservation.RecLastUpdatedDt = DateTime.Now;
                                    chaufferReservation.RowVersion       = 0;
                                    chaufferReservation.UserDomainKey    = nrtMainRepository.UserDomainKey;
                                    chaufferReservation.ChaufferId       = (item.ChaufferId ?? 0);
                                    chaufferReservation.StartDtTime      = nrtVehicle.NrtMain.StartDtTime;
                                    chaufferReservation.EndDtTime        = nrtVehicle.NrtMain.EndDtTime;
                                    chaufferReservation.NrtMainId        = nrtVehicle.NrtMain.NrtMainId;
                                    chaufferReservationRepository.Add(chaufferReservation);
                                    chaufferReservationRepository.SaveChanges();
                                }
                            }
                        }

                        //find missing items
                        List <NrtDriver> missingNrtDriverItems = new List <NrtDriver>();
                        foreach (NrtDriver dbversionNrtDriverItem in nrtVehicleDbVersion.NrtDrivers)
                        {
                            if (nrtVehicle.NrtDrivers != null && nrtVehicle.NrtDrivers.All(x => x.NrtDriverId != dbversionNrtDriverItem.NrtDriverId))
                            {
                                missingNrtDriverItems.Add(dbversionNrtDriverItem);
                            }
                            if (nrtVehicle.NrtDrivers == null)
                            {
                                missingNrtDriverItems.Add(dbversionNrtDriverItem);
                            }
                        }
                        //remove missing items
                        foreach (NrtDriver missingNrtDriverItem in missingNrtDriverItems)
                        {
                            NrtDriver dbVersionMissingItem = nrtVehicleDbVersion.NrtDrivers.First(x => x.NrtDriverId == missingNrtDriverItem.NrtDriverId);
                            if (dbVersionMissingItem.NrtDriverId > 0)
                            {
                                nrtVehicleDbVersion.NrtDrivers.Remove(dbVersionMissingItem);
                                nrtDriverRepository.Delete(dbVersionMissingItem);
                                nrtDriverRepository.SaveChanges();
                            }
                        }
                        #endregion

                        #region NRT Charges
                        if (nrtVehicle.NrtCharges != null)
                        {
                            foreach (var item in nrtVehicle.NrtCharges)
                            {
                                if (
                                    nrtVehicleDbVersion.NrtCharges.All(
                                        x =>
                                        x.NrtChargeId != item.NrtChargeId ||
                                        item.NrtChargeId == 0))
                                {
                                    item.IsActive         = true;
                                    item.IsDeleted        = item.IsPrivate = item.IsReadOnly = false;
                                    item.RecLastUpdatedBy = item.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                                    item.RecCreatedDt     = item.RecLastUpdatedDt = DateTime.Now;
                                    item.RowVersion       = 0;
                                    item.UserDomainKey    = nrtMainRepository.UserDomainKey;
                                    item.NrtVehicleId     = nrtVehicle.NrtVehicleId;

                                    nrtVehicleDbVersion.NrtCharges.Add(item);
                                }
                            }
                        }

                        //find missing items
                        List <NrtCharge> missingNrtChargeItems = new List <NrtCharge>();
                        foreach (NrtCharge dbversionNrtChargeItem in nrtVehicleDbVersion.NrtCharges)
                        {
                            if (nrtVehicle.NrtCharges != null && nrtVehicle.NrtCharges.All(x => x.NrtChargeId != dbversionNrtChargeItem.NrtChargeId))
                            {
                                missingNrtChargeItems.Add(dbversionNrtChargeItem);
                            }
                            if (nrtVehicle.NrtCharges == null)
                            {
                                missingNrtChargeItems.Add(dbversionNrtChargeItem);
                            }
                        }
                        //remove missing items
                        foreach (NrtCharge missingNrtChargeItem in missingNrtChargeItems)
                        {
                            NrtCharge dbVersionMissingItem = nrtVehicleDbVersion.NrtCharges.First(x => x.NrtChargeId == missingNrtChargeItem.NrtChargeId);
                            if (dbVersionMissingItem.NrtChargeId > 0)
                            {
                                nrtVehicleDbVersion.NrtCharges.Remove(dbVersionMissingItem);
                                nrtChargeRepository.Delete(dbVersionMissingItem);
                                nrtChargeRepository.SaveChanges();
                            }
                        }
                        #endregion

                        //NRT Vehicle movements
                        if (nrtVehicleDbVersion.NrtVehicleMovements != null)
                        {
                            foreach (var vMovement in nrtVehicle.NrtVehicleMovements)
                            {
                                if (vMovement.MovementStatus)
                                {
                                    bool flag = false;
                                    foreach (var item in nrtVehicleDbVersion.NrtVehicleMovements)
                                    {
                                        if (item.MovementStatus)
                                        {
                                            flag                       = true;
                                            item.DtTime                = vMovement.DtTime;
                                            item.FuelLevel             = vMovement.FuelLevel;
                                            item.Odometer              = vMovement.Odometer;
                                            item.OperationsWorkPlaceId = vMovement.OperationsWorkPlaceId;
                                            item.VehicleStatusId       = vMovement.VehicleStatusId;
                                            item.VehicleCondition      = "0011111";
                                        }
                                    }
                                    //in case return vehicle new add
                                    if (!flag)
                                    {
                                        vMovement.IsActive         = true;
                                        vMovement.IsDeleted        = vMovement.IsPrivate = vMovement.IsReadOnly = false;
                                        vMovement.RecLastUpdatedBy = vMovement.RecCreatedBy = nrtMainRepository.LoggedInUserIdentity;
                                        vMovement.RecCreatedDt     = vMovement.RecLastUpdatedDt = DateTime.Now;
                                        vMovement.RowVersion       = 0;
                                        vMovement.UserDomainKey    = nrtMainRepository.UserDomainKey;
                                        vMovement.NrtVehicleId     = nrtVehicle.NrtVehicleId;
                                        vMovement.VehicleCondition = "0011111";
                                        nrtVehicleDbVersion.NrtVehicleMovements.Add(vMovement);
                                    }
                                }
                            }
                        }
                    }
                    nrtMainRepository.SaveChanges();
                }
                nrtVehicleRepository.SaveChanges();
            }

            return(nrtVehicle.NrtMain.NrtMainId);
        }