public async Task <IHttpActionResult> GetAllActiveTasksThatAreUnassignedByIdForBuildingAreaOrMachine([FromBody] TasksForMachineSearch search)
        {
            //check if model is valid
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (search.SearchTerm == "Building" || search.SearchTerm == "Area" || search.SearchTerm == "Machine")
            {
                //instantiate service
                TasksForMachineService service = CreateTasksForMachineService();

                List <TasksForMachineByMachineIdLookup> tasksForMachine = await service.GetAllActiveTasksThatAreUnassignedByIdForBuildingAreaOrMachine(search);

                return(Ok(tasksForMachine)); //200
            }

            return(BadRequest()); //400
        }
        //[ActionName("GetAllActiveTasksThatAreUnassignedByIdForBuildingAreaOrMachine")]
        public async Task <List <TasksForMachineByMachineIdLookup> > GetAllActiveTasksThatAreUnassignedByIdForBuildingAreaOrMachine([FromBody] TasksForMachineSearch search)
        {
            List <int> machineList = new List <int>();

            switch (search.SearchTerm)
            {
            case "Building":
                List <int> areaInBuildingList =
                    _context
                    .Areas
                    .Where(a => a.BuildingId == search.SearchId)
                    .Select(
                        a => a.AreaId).ToList();

                foreach (int areaId in areaInBuildingList)
                {
                    List <int> machineInBuildingListStep =
                        _context
                        .Machines
                        .Where(m => m.AreaId == areaId)
                        .Select(
                            m => m.MachineId).ToList();
                    foreach (int machineId in machineInBuildingListStep)
                    {
                        machineList.Add(machineId);
                    }
                }
                break;

            case "Area":
                List <int> machineInAreaListStep =
                    _context
                    .Machines
                    .Where(m => m.AreaId == search.SearchId)
                    .Select(
                        m => m.MachineId).ToList();
                foreach (int machineId in machineInAreaListStep)
                {
                    machineList.Add(machineId);
                }
                break;

            case "Machine":
                machineList.Add(search.SearchId);
                break;

            default:
                break;
            }

            List <TasksForMachineByMachineIdLookup> finalList = new List <TasksForMachineByMachineIdLookup>();

            foreach (int machineId in machineList)
            {
                var queryMidStep =
                    await
                    _context.
                    Machines.
                    Where(m => m.MachineId == machineId).
                    Select(m =>
                           new TasksForMachineByMachineIdLookup
                {
                    MachineId               = m.MachineId,
                    MachineName             = m.MachineName,
                    TasksForMachineListItem =
                        _context.
                        TasksForMachines.
                        Where(tm => tm.MachineId == m.MachineId && tm.Maintained == DateTimeOffset.MinValue && tm.ApplicationUserId == null).
                        Select(tm =>
                               new TasksForMachineListItem
                    {
                        Id                   = tm.MaintenanceTaskId,
                        MachineId            = tm.MachineId,
                        Maintained           = tm.Maintained,
                        NeedToBeMaintainedBy = tm.NeedToBeMaintainedBy,
                        MaintenanceTaskId    = tm.MaintenanceTaskId,
                        ApplicationUserId    = tm.ApplicationUserId
                    }).ToList()
                }).ToListAsync();

                TasksForMachineByMachineIdLookup queryListItem = queryMidStep[0];
                finalList.Add(queryListItem);
            }

            return(finalList);
        }