Beispiel #1
0
        public async Task <IActionResult> Index()
        {
            var CalendarModel = new List <CalendarEvent>();

            // Check if database has existing prediction values
            if (repository.CheckPredictions())
            {
                // If database prediction table is empty
                // Calculate predictions for all room types occupancy and rates
                CalendarModel = CalendarPredictions();
            }
            else
            {
                // If database already has existing predicted data
                var list = repository.GetPredictions();

                foreach (var pred in list)
                {
                    var   modal        = new CalendarEvent();
                    float totalRevenue = 0;

                    // Calculate the ADR
                    var totalOccupancy = pred.SprOccupancy + pred.StdOccupancy + pred.FamOccupancy + pred.SuiteOccupancy + pred.DlxOccupancy;

                    if (pred.SelectedRoomRate == 1)
                    {
                        totalRevenue = (pred.SprRoomRate * pred.SprOccupancy) + (pred.StdRoomRate * pred.StdOccupancy) +
                                       (pred.FamRoomRate * pred.FamOccupancy) + (pred.SuiteRoomRate * pred.SuiteOccupancy) +
                                       (pred.DlxRoomRate * pred.DlxOccupancy);
                    }
                    else if (pred.SelectedRoomRate == 2)
                    {
                        totalRevenue = (DEFAULT_SPR * pred.SprOccupancy) + (DEFAULT_STD * pred.StdOccupancy) +
                                       (DEFAULT_FAM * pred.FamOccupancy) + (DEFAULT_SUITE * pred.SuiteOccupancy) +
                                       (DEFAULT_DLX * pred.DlxOccupancy);
                    }
                    else
                    {
                        totalRevenue = (pred.AdjSprRoomRate * pred.SprOccupancy) + (pred.AdjStdRoomRate * pred.StdOccupancy) +
                                       (pred.AdjFamRoomRate * pred.FamOccupancy) + (pred.AdjSuiteRoomRate * pred.SuiteOccupancy) +
                                       (pred.AdjDlxRoomRate * pred.DlxOccupancy);
                    }

                    var adr           = totalRevenue / totalOccupancy;
                    var revpar        = totalRevenue / 71;
                    var occupancyRate = totalOccupancy / 71;
                    var percent       = Math.Round((adr - DEFAULT_ADR) / DEFAULT_ADR * 100, 2);

                    modal.Date         = pred.Date;
                    modal.Adr          = adr.ToString("N0");
                    modal.RevPar       = revpar.ToString("N0");
                    modal.Occupancy    = occupancyRate.ToString("#0.##%");
                    modal.SelectedPlan = pred.SelectedRoomRate;

                    if (adr > DEFAULT_ADR)
                    {
                        modal.Type = "success";
                    }
                    else if (adr == DEFAULT_ADR)
                    {
                        modal.Type = "warning";
                    }
                    else
                    {
                        modal.Type = "danger";
                    }

                    if (percent < 0)
                    {
                        modal.Percent = percent.ToString() + "%";
                    }
                    else
                    {
                        modal.Percent = "+" + percent.ToString() + "%";
                    }

                    CalendarModel.Add(modal);
                }

                // If there's no new predictions in the database
                if (repository.CheckIfNeedsPredictions(DateTime.Today) == true)
                {
                    var Predictionlist = new List <CalendarEvent>();
                    Predictionlist = CalendarPredictions();

                    foreach (var item in Predictionlist)
                    {
                        CalendarModel.Add(item);
                    }
                }
            }

            return(View(CalendarModel));
        }