/// <summary>
        /// gets all the work orders for the current customer and technician (current user logged in)
        /// </summary>
        /// <returns></returns>
        public List <TechnicianWorkOrderListItem> GetTechnicianWorkOrders(int customerId, int technicianId)
        {
            var techWorkOrders = new List <TechnicianWorkOrderListItem>();
            //get all the work orders for the customer and assigned to this tech
            var workOrders = MaintenanceEntities.FMWorkOrders.Where(x => x.CustomerId == customerId && x.TechnicianId == technicianId && x.AssignmentState == (int)AssignmentState.Assigned &&
                                                                    (x.WorkOrderStatusId == (int)WorkOrderStatus.Open ||
                                                                     x.WorkOrderStatusId == (int)WorkOrderStatus.Incomplete));

            if (workOrders.Any())
            {
                foreach (var workOrder in workOrders)
                {
                    var techWorkOrder = new TechnicianWorkOrderListItem
                    {
                        WorkOrderAsset   = MakeWorkOrderAsset(workOrder, customerId),
                        Deadline         = workOrder.SLADue,
                        WorkOrderId      = workOrder.WorkOrderId,
                        NotificationTime = workOrder.AssignedDate,
                        Location         = workOrder.Location
                    };
                    techWorkOrders.Add(techWorkOrder);
                }
            }
            return(techWorkOrders);
        }
        /// <summary>
        /// gets all the pm work orders for the current customer
        /// </summary>
        /// <returns></returns>
        public List <TechnicianWorkOrderListItem> GetTechnicianPMWorkOrders(int customerId)
        {
            var techWorkOrders = new List <TechnicianWorkOrderListItem>();
            //get all the work orders for the customer and for the pm event code, all open or incomplete ones. ignore closed, suspended, and rejected ones

            var settingFactory    = new SettingsFactory();
            var pmEventCodeString = settingFactory.GetValue("PMEventCode", customerId);

            if (pmEventCodeString == null)
            {
                //if they havent set this, then just return an empty list
                settingFactory.Set(customerId, "PMEventCode", string.Empty);
                return(techWorkOrders);
            }
            int pmEventCode;

            if (int.TryParse(pmEventCodeString, out pmEventCode))
            {
                var workOrders =
                    MaintenanceEntities.FMWorkOrders.Where(
                        x => x.CustomerId == customerId && x.WorkOrderEvents.Any(y => y.EventCode == pmEventCode)
                        &&
                        (x.WorkOrderStatusId == (int)WorkOrderStatus.Open ||
                         x.WorkOrderStatusId == (int)WorkOrderStatus.Incomplete));
                if (workOrders.Any())
                {
                    foreach (var workOrder in workOrders)
                    {
                        var techWorkOrder = new TechnicianWorkOrderListItem
                        {
                            WorkOrderAsset   = MakeWorkOrderAsset(workOrder, customerId),
                            Deadline         = workOrder.SLADue,
                            WorkOrderId      = workOrder.WorkOrderId,
                            NotificationTime = workOrder.AssignedDate,
                            Location         = workOrder.Location,
                        };
                        techWorkOrders.Add(techWorkOrder);
                    }
                }
            }

            return(techWorkOrders);
        }