Ejemplo n.º 1
0
        public JsonResult Confirm(List <JobDbModel> jobList)
        {
            var  dbContext = new ApplicationDbContext();
            bool isPounds  = GetWeightUnit(Request) == DataConversion.UnitPounds;

            // Check GUEST
            var user = dbContext.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

            if (user != null && user.Email == AccountController.GuestEmail)
            {
                return(Json("Guest can't save!!!", JsonRequestBehavior.AllowGet));;
            }

            if (jobList != null)
            {
                if (Request.Cookies[PassengersWeightCookie] != null &&
                    Request.Cookies[PassengersWeightCookie].Value != null)
                {
                    PaxWeight = int.Parse(Request.Cookies[PassengersWeightCookie].Value);
                }

                foreach (var selJob in jobList)
                {
                    selJob.User      = user;
                    selJob.StartTime = DateTime.Now;
                    selJob.EndTime   = DateTime.Now;
                    selJob.ChallengeExpirationDate = DateTime.Now.AddDays(-1);
                    selJob.PaxWeight = PaxWeight;

                    if (isPounds)
                    {
                        selJob.Cargo = DataConversion.ConvertPoundsToKilograms(selJob.Cargo);
                    }

                    if (Session["JobSerachModel"] != null)
                    {
                        JobSerachModel searchModel = (JobSerachModel)Session["JobSerachModel"];
                        if (!string.IsNullOrEmpty(searchModel.Alternative) && searchModel.Alternative.Length == 4)
                        {
                            selJob.AlternativeICAO = searchModel.Alternative.ToUpper();
                        }
                    }

                    dbContext.JobDbModels.Add(selJob);
                }
                dbContext.SaveChanges();
            }

            return(Json("Saved", JsonRequestBehavior.AllowGet));;
        }
Ejemplo n.º 2
0
        public JsonResult ResultNext(FormCollection form)
        {
            var  ids              = new List <int>();
            var  pageSelsIds      = form["sels"];
            var  passengersWeight = form["paxWeight-text"];
            bool isPounds         = GetWeightUnit(Request) == DataConversion.UnitPounds;

            if (isPounds)
            {
                PaxWeight = int.TryParse(passengersWeight, out PaxWeight) ? PaxWeight : 185;
            }
            else
            {
                PaxWeight = int.TryParse(passengersWeight, out PaxWeight) ? PaxWeight : 84;
            }


            if (pageSelsIds != null)
            {
                string[] sList = pageSelsIds.ToString().Split(',');
                foreach (var idString in sList)
                {
                    ids.Add(Convert.ToInt32(idString));
                }
            }

            long totalPax   = 0;
            long totalCargo = 0;
            long totalPay   = 0;

            var list = new Dictionary <string, JobDbModel>();
            var jobs = (IList <JobListModel>)Session["JobSearchResult"];

            if (jobs != null)
            {
                foreach (var job in jobs.Where(j => j.Selected || ids.Contains(j.Id)))
                {
                    JobDbModel jobDB;
                    if (!list.ContainsKey(job.Arrival.ICAO))
                    {
                        jobDB = new JobDbModel()
                        {
                            DepartureICAO = job.Departure.ICAO,
                            ArrivalICAO   = job.Arrival.ICAO,
                            Dist          = job.Dist,
                            Pax           = job.Pax,
                            Cargo         = job.Cargo,
                            Pay           = job.Pay,
                            FirstClass    = job.FirstClass,
                            AviationType  = GetAviationTypeId(job.AviationType)
                        };

                        list.Add(job.Arrival.ICAO, jobDB);
                    }
                    else
                    {
                        jobDB = list[job.Arrival.ICAO];

                        jobDB.Pax   += job.Pax;
                        jobDB.Cargo += job.Cargo;
                        jobDB.Pay   += job.Pay;
                    }
                    totalPax   += job.Pax;
                    totalCargo += job.Cargo;
                    totalPay   += job.Pay;
                }
            }

            var jobList = list.Values.ToList();

            var viewModel = new ConfirmJobsViewModel()
            {
                JobsList     = jobList,
                TotalPax     = totalPax,
                TotalCargo   = totalCargo,
                TotalPay     = string.Format("{0:C}", totalPay),
                TotalPayload = string.Format("{0:G}", (totalPax * PaxWeight) + totalCargo)
            };

            var pxWeight = isPounds ? DataConversion.ConvertPoundsToKilograms(PaxWeight) : PaxWeight;

            Response.SetCookie(new HttpCookie(PassengersWeightCookie, pxWeight.ToString()));

            return(Confirm(jobList));
        }
Ejemplo n.º 3
0
        internal IList <JobListModel> GenerateBoardJobs(JobSerachModel model, StatisticsDbModel statistics)
        {
            IList <JobListModel> listBoardJobs = new List <JobListModel>();

            try
            {
                var weightUnit = GetWeightUnit(Request);
                var dep        = AirportDatabaseFile.FindAirportInfo(model.Departure);
                var arrival    = AirportDatabaseFile.FindAirportInfo(model.Arrival);

                var  depCoord      = new GeoCoordinate(dep.Latitude, dep.Longitude);
                var  randomPob     = new Random();
                var  randomCargo   = new Random();
                int  id            = 0;
                bool validGaProfit = false;

                var arrCoord   = new GeoCoordinate(arrival.Latitude, arrival.Longitude);
                var distMeters = depCoord.GetDistanceTo(arrCoord);
                var distMiles  = (int)DataConversion.ConvertMetersToMiles(distMeters);

                //                    if (distMiles >= model.MinRange && distMiles <= model.MaxRange && arrival.ICAO.ToUpper() != dep.ICAO.ToUpper() &&
                //                        arrival.ICAO.ToUpper() == model.Arrival.ToUpper())

                if (arrival.ICAO.ToUpper() != dep.ICAO.ToUpper() &&
                    arrival.ICAO.ToUpper() == model.Arrival.ToUpper())
                {
                    var customCapacity = model.CustomPlaneCapacity;

                    if (GetWeightUnit(Request) == DataConversion.UnitPounds)
                    {
                        customCapacity.CustomCargoCapacityWeight = DataConversion.ConvertPoundsToKilograms(customCapacity.CustomCargoCapacityWeight);
                    }

                    int index = randomPob.Next(14, 25);
                    if (model.AviationType == "GeneralAviation" && model.UseCustomPlaneCapacity)
                    {
                        validGaProfit = customCapacity.CustomCargoCapacityWeight < 3000 && customCapacity.CustomPassengerCapacity < 30;
                    }

                    long gePobCount = 0, auxCargoCount = 0;

                    for (int i = 0; i < index; i++)
                    {
                        long pob          = 0;
                        long cargo        = 0;
                        long profit       = 0;
                        bool isFisrtClass = Convert.ToBoolean(randomPob.Next(2));

                        var  flightType     = model.AviationType.Trim();
                        int  alternateCargo = randomPob.Next(2);
                        bool isCargo        = alternateCargo == 0 || flightType == "Cargo";
                        if (isCargo)
                        {
                            int minCargo = 5;
                            int maxCargo = 160;
                            if (flightType == "AirTransport")
                            {
                                minCargo = 100; maxCargo = 3000;
                            }
                            ;
                            if (flightType == "Cargo")
                            {
                                minCargo = 80; maxCargo = 3500;
                            }
                            if (flightType == "HeavyAirTransport")
                            {
                                minCargo = 800; maxCargo = 6000;
                            }

                            if (model.UseCustomPlaneCapacity)
                            {
                                var cargoCapacity = customCapacity.CustomCargoCapacityWeight;
                                if (cargoCapacity < minCargo)
                                {
                                    cargoCapacity = minCargo + 1;
                                }
                                cargo = randomCargo.Next(minCargo, cargoCapacity);
                                if (auxCargoCount + cargo > cargoCapacity)
                                {
                                    cargo = cargoCapacity - auxCargoCount;
                                    if (cargo == 0)
                                    {
                                        continue;
                                    }
                                    auxCargoCount = cargoCapacity;
                                }
                                else
                                {
                                    auxCargoCount += cargo;
                                }
                            }
                            else
                            {
                                cargo = randomCargo.Next(minCargo, maxCargo);
                            }

                            if (flightType == "GeneralAviation")
                            {
                                if (validGaProfit)
                                {
                                    profit  = Convert.ToInt32(taxCargoGE * distMiles * cargo);
                                    profit += (140 / customCapacity.CustomCargoCapacityWeight);
                                }
                                else
                                {
                                    profit = Convert.ToInt32(taxCargo * distMiles * cargo);
                                }
                            }
                            else if (flightType == "AirTransport")
                            {
                                profit = Convert.ToInt32(taxCargo * distMiles * cargo);
                            }
                            else if (flightType == "Cargo")
                            {
                                profit = Convert.ToInt32((taxCargo + 0.0005) * distMiles * cargo);
                            }
                            else // HeavyAirTransport
                            {
                                profit = Convert.ToInt32(taxCargo * distMiles * cargo);
                            }
                        }
                        else
                        {
                            int minPob = 1;
                            int maxPob = 12;
                            if (flightType == "AirTransport")
                            {
                                minPob = 10; maxPob = 80;
                            }
                            ;
                            if (flightType == "HeavyAirTransport")
                            {
                                minPob = 50; maxPob = 140;
                            }

                            if (model.UseCustomPlaneCapacity)
                            {
                                if (customCapacity.CustomPassengerCapacity < minPob)
                                {
                                    customCapacity.CustomPassengerCapacity = minPob + 1;
                                }
                                pob = randomPob.Next(minPob, customCapacity.CustomPassengerCapacity);
                                if (gePobCount + pob > customCapacity.CustomPassengerCapacity)
                                {
                                    pob = customCapacity.CustomPassengerCapacity - gePobCount;
                                    if (pob == 0)
                                    {
                                        continue;
                                    }
                                    gePobCount = customCapacity.CustomPassengerCapacity;
                                }
                                else
                                {
                                    gePobCount += pob;
                                }
                            }
                            else
                            {
                                pob = randomPob.Next(minPob, maxPob);
                            }

                            if (flightType == "GeneralAviation")
                            {
                                isFisrtClass = true; /// Always premium for GA
                                if (validGaProfit)
                                {
                                    profit  = Convert.ToInt32(taxFirstGE * distMiles * pob);
                                    profit += ((distMiles * 2) / customCapacity.CustomPassengerCapacity);
                                }
                                else
                                {
                                    profit = Convert.ToInt32(taxFirstC * distMiles * pob);
                                }
                            }
                            else if (flightType == "AirTransport")
                            {
                                profit = isFisrtClass ? Convert.ToInt32(taxFirstC * distMiles * pob) : Convert.ToInt32(taxEcon * distMiles * pob);
                            }
                            else // HeavyAirTransport
                            {
                                profit = isFisrtClass ? Convert.ToInt32(taxFirstC * distMiles * pob) : Convert.ToInt32(taxEcon * distMiles * pob);
                            }
                        }

                        cargo = GetWeight(Request, cargo, statistics);

                        listBoardJobs.Add(new JobListModel()
                        {
                            Id           = id++,
                            Departure    = dep,
                            Arrival      = arrival,
                            Dist         = distMiles,
                            Pax          = pob,
                            Cargo        = cargo,
                            PayloadLabel = (isCargo) ? "[Cargo] " : (isFisrtClass) ? "[Full price] " : "[Promo] ",
                            PayloadView  = (isCargo) ? cargo + weightUnit : (isFisrtClass) ? pob + " Pax" : pob + " Pax",
                            Pay          = profit,
                            FirstClass   = isFisrtClass,
                            AviationType = model.AviationType,
                            IsCargo      = isCargo
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("error", ex.Message);
            }

            return(listBoardJobs.OrderBy(j => j.Arrival).ThenBy(x => x.PayloadLabel).ToList());
        }