Example #1
0
        public ActionResult Confirm()
        {
            var dbContext      = new ApplicationDbContext();
            var user           = dbContext.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
            var userChallenger = dbContext.JobDbModels.Count(x => x.IsChallenge && x.ChallengeCreatorUserId == user.Id && !x.IsDone && x.ChallengeExpirationDate > DateTime.Now);

            if (user != null && user.Email != AccountController.GuestEmail && userChallenger <= CHALLENGE_LIMIT)
            {
                if (Session[CHALLENGE_SESSION_MODEL] != null)
                {
                    var challenge = (ChallengeViewModel)Session[CHALLENGE_SESSION_MODEL];
                    var job       = new JobDbModel()
                    {
                        IsChallenge             = true,
                        ChallengeType           = (ChallengeTypeEnum)Enum.Parse(typeof(ChallengeTypeEnum), challenge.Type),
                        ChallengeCreatorUserId  = user.Id,
                        ChallengeExpirationDate = DateTime.Now.AddDays(5),
                        DepartureICAO           = challenge.DepartureICAO,
                        ArrivalICAO             = challenge.ArrivalICAO,
                        AviationType            = 2,
                        Cargo     = challenge.Cargo,
                        Pax       = challenge.Pax,
                        Pay       = challenge.TotalPayment,
                        Dist      = challenge.Dist,
                        StartTime = DateTime.Now,
                        EndTime   = DateTime.Now
                    };
                    dbContext.JobDbModels.Add(job);
                    dbContext.SaveChanges();
                }
            }

            return(RedirectToAction("Index", "Challenge"));
        }
Example #2
0
        private bool UpdateStatistics(JobDbModel job, ApplicationDbContext dbContext)
        {
            var licenseOverdue = false;
            var statistics     = dbContext.StatisticsDbModels.FirstOrDefault(s => s.User.Id == job.User.Id);

            if (statistics != null)
            {
                licenseOverdue = IsLicenseOverdue(dbContext, job.User.Id);
                if (!licenseOverdue)
                {
                    if (job.AviationType == 1)
                    {
                        statistics.PilotScore += job.Dist / 10;
                    }
                    else
                    {
                        statistics.PilotScore += job.Dist / 15;
                    }

                    statistics.BankBalance += job.Pay;
                }
            }
            else
            {
                var newStatistics = new StatisticsDbModel()
                {
                    BankBalance = job.Pay,
                    PilotScore  = job.AviationType == 1 ? job.Dist / 10 : job.Dist / 15,
                    Logo        = "/Content/img/default.jpg",
                    User        = job.User
                };
                dbContext.StatisticsDbModels.Add(newStatistics);
            }
            return(licenseOverdue);
        }
Example #3
0
        public ActionResult Delete(int id)
        {
            var dbContext = new ApplicationDbContext();
            var user      = dbContext.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

            if (user != null && user.Email == AccountController.GuestEmail)
            {
                TempData["GuestMessage"] = AccountController.GuestMessage;
                return(RedirectToAction("Register", "Account"));
            }

            JobDbModel job = new JobDbModel()
            {
                Id = id
            };

            if (job.User?.Id == user.Id)
            {
                dbContext.JobDbModels.Attach(job);
                dbContext.JobDbModels.Remove(job);
                dbContext.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
Example #4
0
        private void UpdateAirline(JobDbModel job, ApplicationDbContext dbContext)
        {
            var statistics = dbContext.StatisticsDbModels.FirstOrDefault(s => s.User.Id == job.User.Id);

            if (statistics != null && statistics.Airline != null)
            {
                //long airlinePay = job.Pay + 35;
                var jobAirline = new JobAirlineDbModel()
                {
                    Airline = statistics.Airline,
                    Job     = job
                };
                var departureFbo = dbContext.AirlineFbo.FirstOrDefault(x => x.Airline.Id == jobAirline.Airline.Id && x.Icao == job.DepartureICAO);
                jobAirline.CalcAirlineJob(departureFbo);

                if (statistics.Airline.DebtValue > 0 && statistics.Airline.DebtMaturityDate < DateTime.Now)
                {
                    // tem dívida, não pontua e perde dinheiro
                    statistics.Airline.BankBalance -= (long)(jobAirline.FlightIncome / 2);

                    if (statistics.Airline.BankBalance <= 0)
                    {
                        statistics.Airline.BankBalance = 0;
                    }
                }
                else
                {
                    // Pontua e ganha
                    statistics.Airline.AirlineScore += job.Dist / 14;
                    statistics.Airline.AirlineScore += departureFbo != null ? departureFbo.ScoreIncrease : 0;
                    statistics.Airline.BankBalance  += (long)jobAirline.RevenueEarned;
                }

                // Aplica débitos somente airlines compradas
                if (!string.IsNullOrEmpty(statistics.Airline.UserId))
                {
                    if (statistics.Airline.DebtValue == 0)
                    {
                        // Aplica o vencimento
                        statistics.Airline.DebtMaturityDate = DateTime.Now.AddDays(5);
                    }

                    // Aplica o débito
                    statistics.Airline.DebtValue += (long)jobAirline.TotalFlightCost;

                    if (statistics.Airline.DebtValue > 0)
                    {
                        Task.Factory.StartNew(() => SendEmailWarningForAirlineDebtAsync(statistics.Airline, job));
                    }
                }
                dbContext.JobAirlineDbModels.Add(jobAirline);
            }
        }
        public ActionResult CloneJob(long jobId)
        {
            var dbContext = new ApplicationDbContext();
            var user      = dbContext.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);
            var job       = dbContext.JobDbModels.FirstOrDefault(x => x.Id == jobId);

            var cloneJob = JobDbModel.Clone(job, user);

            dbContext.JobDbModels.Add(cloneJob);
            dbContext.SaveChanges();

            return(RedirectToAction("Index", "Home"));
        }
Example #6
0
        public ActionResult DeleteJob(int id)
        {
            var dbContext = new ApplicationDbContext();
            // Check GUEST
            var user = dbContext.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

            if (user != null)
            {
                if (user.Email == AccountController.GuestEmail)
                {
                    TempData["GuestMessage"] = AccountController.GuestMessage;
                    return(RedirectToAction("Register", "Account"));
                }

                JobDbModel job = dbContext.JobDbModels.FirstOrDefault(j => j.Id == id && j.User.Id == user.Id);
                if (job != null)
                {
                    dbContext.JobDbModels.Remove(job);
                    dbContext.SaveChanges();
                }
            }

            return(RedirectToAction("Index"));
        }
        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));
        }
Example #8
0
        private async Task SendEmailWarningForAirlineDebtAsync(AirlineDbModel airline, JobDbModel job)
        {
            await Task.Delay(10000);

            var dbContext = new ApplicationDbContext();

            try
            {
                var airlinePilotsHiredStatistics = dbContext.StatisticsDbModels.Where(s =>
                                                                                      s.Airline != null &&
                                                                                      s.Airline.Id == airline.Id && s.SendAirlineBillsWarning).ToList();

                foreach (var pilotHired in airlinePilotsHiredStatistics)
                {
                    var sb = new StringBuilder();
                    sb.Append($"<p><a href='https://www.flight-jobs.net' target='_blank'><img src='http://flight-jobs.net/Content/img/FlightJobsLogo0001.png' /></a></p><hr />");
                    sb.Append($"<p>Hi captain {pilotHired.User.UserName},</p>");
                    sb.Append("<p>FlightJobs is sending you this email because you have defined to be advised when your airline generates a Debt since one Job was finished.</p>");
                    sb.Append("<p>You can disable this email warning any time unchecking the box in the Airline Balance Situation popup window.</p>");
                    sb.Append("<h3>A job at the airline generated bills to pay.</h3>");
                    sb.Append($"<h4><p>The debt of {airline.Name} is <font color=\"red\"> {string.Format("{0:C}", airline.DebtValue)} </font> at the moment. </p></h4>");
                    sb.Append($"<h4><p>The maturity date for the debt is <font color=\"red\"> {airline.DebtMaturityDate.ToShortDateString()} </font> </p></h4>");
                    sb.Append($"<p>If the owner does not pay bills before the due date the airline will not score, and the Jobs will generate more debts which could lead to the bankruptcy of the company.</p>  <hr />");

                    sb.Append($"<p><b>Info about the job that generate the debt: </b></p><ul>");
                    sb.Append($"<li>Depature: <b>{job.DepartureICAO}</b>  </li>");
                    sb.Append($"<li>Arrival: <b>{job.ArrivalICAO}</b>  </li>");
                    sb.Append($"<li>Model: <b>{job.ModelDescription}</b>  </li>");
                    sb.Append($"<li>Pilot: <b>{job.User.UserName}</b>  </li>");
                    sb.Append($"<li>Flight time: <b>{job.FlightTime}</b>  </li>");
                    sb.Append($"<li>Flight distance: <b>{job.Dist}nm</b> </li>");
                    sb.Append($"<li>Arrive time: <b>{job.EndTime}</b> </li>");
                    sb.Append($"<li>Pax: <b>{job.Pax}</b> </li>");
                    sb.Append($"<li>Cargo: <b>{job.Cargo}</b> </li>");
                    sb.Append($"<li>Challenge: <b>{job.IsChallenge.ToString()} </b></li></ul><hr />");

                    sb.Append($"<p>Thanks for use FlightJobs.</p>");
                    sb.Append($"<p>FlightJobs is free. If you like it, please consider making a donation in PayPal.</p>");
                    sb.Append($"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=44VG35XYRJUCW&source=url");
                    sb.Append($"<p>https://www.flight-jobs.net</p>");
                    await new EmailService().SendAsync(new IdentityMessage()
                    {
                        Body        = sb.ToString(),
                        Subject     = "[FlightJobs] Airline has bills to pay",
                        Destination = pilotHired.User.Email
                    });
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error sending license e-mail warning: {e.ToString()}", e);
            }
        }
Example #9
0
        public HttpResponseMessage FinishJob(string icaoStr, string payloadStr, string usarIdStr, string fuelWeightStr, string tailNumberStr, string planeDescriptionStr)
        {
            var response = Request.CreateResponse(HttpStatusCode.BadRequest, "Server error");

            try
            {
                var        dbContext = new ApplicationDbContext();
                JobDbModel job       = null;
                if (icaoStr.Length == 3)
                {
                    job = dbContext.JobDbModels.FirstOrDefault(j => j.User.Id == usarIdStr &&
                                                               j.IsActivated && j.InProgress &&
                                                               (j.ArrivalICAO.Substring(1).ToLower() == icaoStr.ToLower() ||
                                                                j.AlternativeICAO.Substring(1).ToLower() == icaoStr.ToLower()));
                }
                else
                {
                    job = dbContext.JobDbModels.FirstOrDefault(j => j.User.Id == usarIdStr &&
                                                               j.IsActivated && j.InProgress &&
                                                               (j.ArrivalICAO.ToLower() == icaoStr.ToLower() ||
                                                                j.AlternativeICAO.ToLower() == icaoStr.ToLower()));
                }

                if (job == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, "Wrong destination to finish this job."));
                }

                string name = job.IsChallenge ? "Challenge" : "Job";

                if (job.IsChallenge && job.ChallengeExpirationDate <= DateTime.Now)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, CHALLENGE_EXPIRED));
                }

                // Check GUEST
                if (job.User != null && job.User.Email == AccountController.GuestEmail)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, AccountController.GuestMessage));
                }

                long payload = Convert.ToInt64(Math.Round(Convert.ToDouble(payloadStr, new CultureInfo("en-US"))));
                // Check payload
                if (payload >= (job.Payload + 150) || payload <= (job.Payload - 150))
                {
                    var payloadInPounds = DataConversion.ConvertKilogramsToPounds(job.Payload);
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, $"Wrong. Active {name} payload is: {job.Payload}kg / {payloadInPounds}lbs"));
                }

                var diffTime = DateTime.Now - job.StartTime;

                var minTime = (job.Dist * 11) / 100;

                if (diffTime.TotalMinutes < minTime)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, "Impossible to arrive at destination in this short time."));
                }

                job.InProgress       = false;
                job.EndTime          = DateTime.Now;
                job.IsDone           = true;
                job.IsActivated      = false;
                job.ModelName        = tailNumberStr;
                job.ModelDescription = planeDescriptionStr;

                long fuelWeight = Convert.ToInt64(Math.Round(Convert.ToDouble(fuelWeightStr, new CultureInfo("en-US"))));
                job.FinishFuelWeight = fuelWeight;

                var expectedFuelBurned = (job.Dist * job.Payload * 0.12) / 1000;
                //// Check Fuel
                if ((job.UsedFuelWeight) < expectedFuelBurned)
                {
                    return(Request.CreateResponse(HttpStatusCode.Forbidden, $"Impossible to finish this {name} with {job.UsedFuelWeight}Kg burned fuel."));
                }

                var licenseExpired = UpdateStatistics(job, dbContext);
                UpdateAirline(job, dbContext);

                dbContext.SaveChanges();

                string resultMsg = $"{name} finish successfully at: " + job.EndTime.ToShortTimeString() + "  (UTC)";
                if (licenseExpired)
                {
                    resultMsg = $"{name} finish. Your license is expired. Check Profile page.";
                }

                return(Request.CreateResponse(HttpStatusCode.OK, resultMsg));
            }
            catch (Exception e)
            {
                ErrorLog.GetDefault(null).Log(new Error(e));
                response = Request.CreateResponse(HttpStatusCode.BadRequest, "Process error.");
            }

            return(response);
        }
Example #10
0
        private HttpResponseMessage StartJob(string icaoStr, string payloadStr, string usarIdStr, string fuelWeightStr)
        {
            var        dbContext = new ApplicationDbContext();
            JobDbModel job       = null;

            if (icaoStr.Length == 3)
            {
                job = dbContext.JobDbModels.FirstOrDefault(j => j.User.Id == usarIdStr &&
                                                           j.IsActivated &&
                                                           j.DepartureICAO.Substring(1).ToLower() == icaoStr.ToLower());
            }
            else
            {
                job = dbContext.JobDbModels.FirstOrDefault(j => j.User.Id == usarIdStr &&
                                                           j.IsActivated &&
                                                           j.DepartureICAO.ToLower() == icaoStr.ToLower());
            }

            if (job == null)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden, "You don't have any job activated for this location."));
            }

            if (job.IsChallenge && job.ChallengeExpirationDate <= DateTime.Now)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden, CHALLENGE_EXPIRED));
            }

            // Check GUEST
            if (job.User != null && job.User.Email == AccountController.GuestEmail)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden, AccountController.GuestMessage));
            }

            long payload = Convert.ToInt64(Math.Round(Convert.ToDouble(payloadStr, new CultureInfo("en-US"))));

            // Check payload
            if (payload >= (job.Payload + 150) || payload <= (job.Payload - 150))
            {
                var payloadInPounds = DataConversion.ConvertKilogramsToPounds(job.Payload);
                return(Request.CreateResponse(HttpStatusCode.Forbidden, $"Wrong. Active job payload is: {job.Payload}kg / {payloadInPounds}lbs"));
            }

            long fuelWeight = Convert.ToInt64(Math.Round(Convert.ToDouble(fuelWeightStr, new CultureInfo("en-US"))));

            job.StartFuelWeight = fuelWeight;

            job.InProgress = true;
            job.StartTime  = DateTime.Now;
            dbContext.SaveChanges();

            string name = job.IsChallenge ? "Challenge" : "Job";

            var licenseOverdue = IsLicenseOverdue(dbContext, job.User.Id);
            var resultMsg      = $"{name} to " + job.ArrivalICAO + " started at: " + job.StartTime.ToShortTimeString() + " (UTC)";

            if (licenseOverdue)
            {
                resultMsg = $"{name} started. Warn: Your pilot license is expired. Check profile page.";
            }

            var response = Request.CreateResponse(HttpStatusCode.OK, resultMsg);

            response.Headers.Add("arrival-icao", job.ArrivalICAO);

            return(response);
        }