/* * Description: The CallViewModel class is a view model for calls. The class has * methods to retrieve a call by its ID and to retrieve * all calls as well as methods to add, update, and delete a call. * These methods use a CallDAO object to access data from the database. */ using HelpdeskDAL; using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Threading.Tasks; namespace HelpdeskViewModels { public class CallViewModel { private readonly CallDAO _dao; public int Id { get; set; } public int EmployeeId { get; set; } public int ProblemId { get; set; } public string? EmployeeName { get; set; } public string? ProblemDescription { get; set; } public string? TechName { get; set; } public int TechId { get; set; } public DateTime DateOpened { get; set; } public DateTime? DateClosed { get; set; } public bool OpenStatus { get; set; } public string? Notes { get; set; } public string? Timer { get; set; } // constructor public CallViewModel() { _dao = new CallDAO(); } // // Retrieve Call by their Id // public async Task GetById() { try { Call call = await _dao.GetById(Id); Id = call.Id; EmployeeId = call.EmployeeId; ProblemId = call.ProblemId; EmployeeName = call.Employee.LastName; ProblemDescription = call.Problem.Description; TechName = call.Tech.LastName; TechId = call.TechId; DateOpened = call.DateOpened; DateClosed = call.DateClosed; OpenStatus = call.OpenStatus; Notes = call.Notes; Timer = Convert.ToBase64String(call.Timer!); } catch (NullReferenceException nex) { Debug.WriteLine(nex.Message); ProblemDescription = "not found"; } catch (Exception ex) { ProblemDescription = "not found"; Debug.WriteLine("Problem in " + GetType().Name + " " + MethodBase.GetCurrentMethod()!.Name + " " + ex.Message); throw; } } // // Retrieve all the Calls // public async Task<List<CallViewModel>> GetAll() { List<CallViewModel> allVms = new(); try { List<Call> allCalls = await _dao.GetAll(); foreach (Call call in allCalls) { CallViewModel callVm = new() { Id = call.Id, EmployeeId = call.EmployeeId, ProblemId = call.ProblemId, EmployeeName = call.Employee.LastName, ProblemDescription = call.Problem.Description, TechName = call.Tech.LastName, TechId = call.TechId, DateOpened = call.DateOpened, DateClosed = call.DateClosed, OpenStatus = call.OpenStatus, Notes = call.Notes, Timer = Convert.ToBase64String(call.Timer!) }; allVms.Add(callVm); } } catch (Exception ex) { Debug.WriteLine("Problem in " + GetType().Name + " " + MethodBase.GetCurrentMethod()!.Name + " " + ex.Message); throw; } return allVms; } // // Add an Call // public async Task Add() { Id = -1; try { Call call = new() { EmployeeId = EmployeeId, ProblemId = ProblemId, TechId = TechId, DateOpened = DateOpened, DateClosed = DateClosed, OpenStatus = OpenStatus, Notes = Notes! }; Id = await _dao.Add(call); } catch (Exception ex) { Debug.WriteLine("Problem in " + GetType().Name + " " + MethodBase.GetCurrentMethod()!.Name + " " + ex.Message); throw; } } // // Update an Call // public async Task<int> Update() { UpdateStatus update = UpdateStatus.Failed; try { Call call = new() { Id = Id, EmployeeId = EmployeeId, ProblemId = ProblemId, TechId = TechId, DateOpened = DateOpened, DateClosed = DateClosed, OpenStatus = OpenStatus, Notes = Notes!, Timer = Convert.FromBase64String(Timer!) }; update = await _dao.Update(call); } catch (Exception ex) { Debug.WriteLine("Problem in " + GetType().Name + " " + MethodBase.GetCurrentMethod()!.Name + " " + ex.Message); throw; } return (int)update; } // // Delete an Call // public async Task<int> Delete() { try { return await _dao.Delete(Id); } catch (Exception ex) { Debug.WriteLine("Problem in " + GetType().Name + " " + MethodBase.GetCurrentMethod()!.Name + " " + ex.Message); throw; } } } }