Ejemplo n.º 1
0
        static void Main()
        {
            OpheliasOasis = new Hotel();

            string input = "";

            try
            {
                Console.WriteLine("Welcome to Ophleias Oasis Hotel System");
                Console.WriteLine("Type a command or help for a command list");
                while (!input.StartsWith("Q") && !input.StartsWith("q"))
                {
                    input = Console.ReadLine();

                    if (input.StartsWith("help"))
                    {
                        Console.WriteLine("Command List:");
                        Console.WriteLine("user <login> <userId>");
                        Console.WriteLine("user <logout>");
                        Console.WriteLine("user display");
                        Console.WriteLine("rate set <startdate>, <enddate>, <rate>");
                        Console.WriteLine("admin reset");
                        Console.WriteLine("admin daily");
                        Console.WriteLine("res create <name> <email> <startdate>, <enddate>");
                        Console.WriteLine("res change <id> <startdate> <enddate>");
                        Console.WriteLine("res cancel <id>");
                        Console.WriteLine("res list <startdate> <enddate>");
                        Console.WriteLine("res card <id> <name> <card_number> <exp> <cvc> <address> <city> <state> <zip>");
                        Console.WriteLine("report eor <startdate> <enddate> (Expected Occupancy Report)");
                        Console.WriteLine("report erir <startdate> <enddate> (Expected Room Income Report)");
                        Console.WriteLine("report dor <startdate> <enddate> (Daily Occupancy Report)");
                        Console.WriteLine("report ab <startdate> <enddate> (Accomodation Bill Occupancy Report)");
                        Console.WriteLine("report ir <startdate> <enddate> (Incentive Report)");
                        Console.WriteLine("clear");
                        Console.WriteLine("Note: values within <> cannot contain spaces use \"-\" instead");
                    }
                    else if (input.Length > 0 && !input.StartsWith("user login") && Program.Employee == -1)
                    {
                        // user is logged out and tried to make a command
                        Console.WriteLine("Must be logged in to execute commands");
                        // skip processing any commands from someone not logged in
                        continue;
                    }
                    else if (input.StartsWith("clear"))
                    {
                        Console.Clear();
                    }
                    else if (input.StartsWith("user "))
                    {
                        var toks = input.Split(' ');

                        if (toks.Length == 3)
                        {
                            if (toks[1].Equals("login"))
                            {
                                Employee = int.TryParse(toks[2], out int id) ? id : -1;
                            }
                        }
                        else if (toks.Length == 2)
                        {
                            if (toks[1].Equals("display"))
                            {
                                Console.WriteLine(Employee);
                            }
                            else if (toks[1].Equals("logout"))
                            {
                                Employee = -1;
                            }
                        }
                    }
                    else if (input.StartsWith("rate "))
                    {
                        var toks = input.Split(' ');

                        if (toks.Length == 5)
                        {
                            if ((Employee == 1 || Employee == 2) && toks[1].Equals("set"))
                            {
                                var rate  = double.TryParse(toks[4], out double r) ? r : -1;                          // -1 causes booking to fail
                                var start = DateTime.TryParse(toks[2], out DateTime s) ? s : DateTime.Now;
                                var end   = DateTime.TryParse(toks[3], out DateTime e) ? e : DateTime.Now.AddDays(1); // prevent error end < start

                                var success = OpheliasOasis.SetBaseRates(start, end, rate);
                                Console.WriteLine("{0}", success);
                            }
                        }
                    }
                    else if (input.StartsWith("res "))
                    {
                        var toks = input.Split(' ');

                        if (toks.Length == 6)
                        {
                            if (Employee != -1 && toks[1].Equals("create"))
                            {
                                var start = DateTime.Parse(toks[4]);
                                var end   = DateTime.Parse(toks[5]);

                                var booked = OpheliasOasis.BookReservation(0, start, end, toks[2], toks[3]);
                                Console.WriteLine(booked);
                            }
                        }
                        else if (toks.Length == 3)
                        {
                            if (Employee != -1 && toks[1].Equals("cancel"))
                            {
                                int id        = int.TryParse(toks[2], out int result) ? result : -1;
                                var cancelled = OpheliasOasis.CancelReservation(id);
                                Console.WriteLine(cancelled);
                            }
                        }
                        else if (toks.Length == 5)
                        {
                            if (Employee != -1 && toks[1].Equals("change"))
                            {
                                var id    = int.TryParse(toks[2], out int result) ? result : -1;
                                var start = DateTime.Parse(toks[3]);
                                var end   = DateTime.Parse(toks[4]);

                                var changed = OpheliasOasis.ChangeReservation(id, start, end);
                                Console.WriteLine(changed);
                            }
                        }
                        else if (toks.Length == 11)
                        {
                            if (Employee != -1 && toks[1].Equals("card"))
                            {
                                CreditCard card = new CreditCard
                                {
                                    Id         = int.TryParse(toks[2], out int id) ? id : -1,
                                    Name       = toks[3],
                                    Number     = toks[4],
                                    Expiration = DateTime.TryParse(toks[5], out var date) ? date : DateTime.Now,
                                    CVC        = toks[6],
                                    Address    = toks[7],
                                    City       = toks[8],
                                    State      = toks[9],
                                    Zip        = toks[10],
                                };

                                var added = OpheliasOasis.AddCreditCard(card.Id, card);
                                Console.WriteLine(added);
                            }
                        }
                        else if (toks.Length == 4)
                        {
                            if (Employee != -1 && toks[1].Equals("list"))
                            {
                                // res list <startdate> <enddate>
                                DateTime start = DateTime.TryParse(toks[2], out var s) ? s : DateTime.Now;
                                DateTime end   = DateTime.TryParse(toks[3], out var e) ? e : DateTime.Now;

                                IEnumerable <Reservation> reservations = OpheliasOasis.GetReservationsDuring(start, end);

                                foreach (Reservation res in reservations)
                                {
                                    Console.WriteLine(JsonConvert.SerializeObject(res));
                                }
                                Console.WriteLine(reservations.Count() > 0);
                            }
                        }
                    }
                    else if (input.StartsWith("report "))
                    {
                        var toks = input.Split(' ');

                        if (toks.Length == 4 || toks.Length == 5)
                        {
                            if ((Employee == 1 || Employee == 2))
                            {
                                var start = DateTime.TryParse(toks[2], out DateTime s) ? s : DateTime.Now;
                                var end   = DateTime.TryParse(toks[3], out DateTime e) ? e : DateTime.Now.AddDays(1); // prevent error end < start

                                if (toks[1].Equals("eor"))
                                {
                                    var report = (ExpectedOcupancyReport)OpheliasOasis.GetExpectedOccupancyReport(start, end);
                                    Console.WriteLine(string.Join("\n", report?.SampleOutput));
                                }
                                if (toks[1].Equals("erir"))
                                {
                                    var report = (ExpectedRoomIncomeReport)OpheliasOasis.GetExpectedRoomIncomeReport(start, end);
                                    Console.WriteLine(string.Join("\n", report?.SampleOutput));
                                }
                                if (toks[1].Equals("dor"))
                                {
                                    var report = (DailyOccupancyReport)OpheliasOasis.GetDailyOccupancyReport(start, end);
                                    Console.WriteLine(string.Join("\n", report?.SampleOutput));
                                }
                                if (toks[1].Equals("ab"))
                                {
                                    var resId  = int.TryParse(toks[4], out int i) ? i : -1;
                                    var report = (AccomodationBill)OpheliasOasis.GetAccomodationBill(resId, start, end);
                                    Console.WriteLine(string.Join("\n", report?.SampleOutput));
                                }
                                if (toks[1].Equals("ir"))
                                {
                                    var report = (IncentiveReport)OpheliasOasis.GetIncentiveReport(start, end);
                                    Console.WriteLine(string.Join("\n", report?.SampleOutput));
                                }
                            }
                        }
                    }
                    else if (input.StartsWith("admin "))
                    {
                        var toks = input.Split(' ');

                        if (toks.Length == 2)
                        {
                            if (Employee == 2 && toks[1].Equals("reset"))
                            {
                                var reset = OpheliasOasis.Reset();
                                Console.WriteLine(reset);
                            }
                            else if (Employee == 2 && toks[1].Equals("daily"))
                            {
                                OpheliasOasis.TriggerDailyActivities();
                            }
                        }
                    }
                    else if (input.ToLower().StartsWith("q"))
                    {
                        // skip
                    }
                    else
                    {
                        Console.WriteLine("Command Not Found: Type 'help' for command list");
                    }
                }
            }
            catch (Exception e)
            {
                if (Program.Employee == 2)
                {
                    Console.WriteLine(e.Message);
                }
            }
            finally
            {
                Console.WriteLine("Press any key to exit.");
            }
            Console.ReadKey();
        }