private static Employee GivePromotion(Employee employee, double rate) { return(employee.With( salary: employee.Salary *(1 + rate), role: EmployeeAppHelpers.NextRole(employee.Role) )); }
private static Either <Error, Unit> Loop() { EmployeeAppHelpers.PrintWelcomeMessage(); return(ReadAction() .Bind(action => EmployeeApp.Run(action) ) .Match( Right: _ => RetryPrompt(), Left: error => { Console.WriteLine("Error: " + error.Message); return RetryPrompt(); } )); //return ( // from action in ReadAction() // from result in EmployeeApp.Run(action) // select result //).Match( // Right: _ => RetryPrompt(), // Left: error => // { // Console.WriteLine("Error: " + error.Message); // return RetryPrompt(); // } //); }
private static void Loop() { EmployeeAppHelpers.PrintWelcomeMessage(); var action = Enum.Parse <UserAction>(Console.ReadLine()); EmployeeApp.Run(action); RetryPrompt(); }
private static Option <Unit> Loop() { EmployeeAppHelpers.PrintWelcomeMessage(); return(ReadAction() .Bind((action) => EmployeeApp.Run(action)) .Match( Some: _ => RetryPrompt(), None: () => { Console.WriteLine("Error occured!"); return RetryPrompt(); } )); }
public void Run(UserAction action) { switch (action) { case UserAction.Show: { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); Console.WriteLine(employee.ToString()); break; } case UserAction.Raise: { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); var happyEmployee = GiveRaise(employee, RAISE_RATE); Console.WriteLine("Employee " + employee); Console.WriteLine("Happy Employee " + happyEmployee); break; } case UserAction.Promote: { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); var happyEmployee = GivePromotion(employee, RAISE_RATE); Console.WriteLine("Employee " + employee); Console.WriteLine("Happy Employee " + happyEmployee); break; } case UserAction.ReportAll: { var employees = DbHelper.GetEmployees(); var report = employees .GroupBy(x => x.Role) .ToDictionary( xs => xs.Key, xs => xs.Select(x => x.Salary / 52).Sum() ); EmployeeAppHelpers.PrintReport(report); break; } case UserAction.ReportByRole: { var employees = DbHelper.GetEmployees(); var role = ReadRole(); // NOTE: there many ways to do this var report = employees .GroupBy(x => x.Role) .Where(x => x.Key == role) .ToDictionary( xs => xs.Key, xs => xs.Select(x => x.Salary / 52).Sum() ); EmployeeAppHelpers.PrintReport(report); break; } default: throw new Exception($"Something really bad has happened, Action of {action} is invalid"); } }
private static Unit PrintReport(IDictionary <Role, double> report) { EmployeeAppHelpers.PrintReport(report); return(unit); }
public void Run(string action) { if (action == "Show") { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); Console.WriteLine(employee.ToString()); } else if (action == "Raise") { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); var happyEmployee = GiveRaise(employee); Console.WriteLine("Employee " + employee); Console.WriteLine("Happy Employee " + happyEmployee); } else if (action == "Promote") { var id = ReadEmployeeId(); var employee = DbHelper.GetEmployee(id); var happyEmployee = GivePromotion(employee); Console.WriteLine("Employee " + employee); Console.WriteLine("Happy Employee " + happyEmployee); } else if (action == "ReportAll") { var employees = DbHelper.GetEmployees(); var report = new Dictionary <Role, double>(); foreach (var employee in employees) { if (!report.ContainsKey(employee.Role)) { report[employee.Role] = 0d; } report[employee.Role] = report[employee.Role] + (employee.Salary / 52); } EmployeeAppHelpers.PrintReport(report); } else if (action == "ReportByRole") { var role = ReadRole(); var employees = DbHelper.GetEmployees(); var report = new Dictionary <Role, double>(); foreach (var employee in employees) { if (employee.Role != role) { continue; } if (!report.ContainsKey(employee.Role)) { report[employee.Role] = 0d; } report[employee.Role] = report[employee.Role] + (employee.Salary / 52); } EmployeeAppHelpers.PrintReport(report); } else { throw new Exception($"Action of {action} is invalid"); } }
private static Employee GivePromotion(Employee employee) { employee.Salary *= (1 + RAISE_RATE); employee.Role = EmployeeAppHelpers.NextRole(employee.Role); return(employee); }