public ActionResult Create(int employerId)
        {
            var utcNow = DateTime.UtcNow;

            var workOrder = new WorkOrder
            {
                EmployerID        = employerId,
                dateTimeofWork    = utcNow,
                transportMethodID = _defaults.getDefaultID(LCategory.transportmethod),
                typeOfWorkID      = _defaults.getDefaultID(LCategory.worktype),
                statusID          = _defaults.getDefaultID(LCategory.orderstatus),
                timeFlexible      = true,
                workerRequestsDDD = new List <WorkerRequest>()
            };

            ViewBag.workerRequests = workOrder.workerRequestsDDD?.Select(a =>
                                                                         new SelectListItem
            {
                Value = a.WorkerID.ToString(),
                Text  = a.workerRequested.dwccardnum.ToString() + ' ' +
                        a.workerRequested.Person.firstname1 + ' ' +
                        a.workerRequested.Person.lastname1
            }
                                                                         );

            MapperHelpers.ClientTimeZoneInfo = _clientTimeZoneInfo;
            MapperHelpers.Defaults           = _defaults;
            var wo = _map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            return(PartialView("Create", wo));
        }
        public async Task <ActionResult> Create(WorkOrder wo, string userName, [FromForm] List <int> workerRequestsAAA)
        {
            ModelState.ThrowIfInvalid();
            var modelUpdated = await _adaptor.TryUpdateModelAsync(this, wo);

            if (!modelUpdated)
            {
                return(StatusCode(500));
            }

            List <Domain.WorkerRequest> wRequests = new List <Domain.WorkerRequest>();

            foreach (var workerID in workerRequestsAAA)
            {
                wRequests.Add(new WorkerRequest {
                    WorkerID = workerID
                });
            }

            //wo.workerRequests = wRequests;

            wo.dateTimeofWork = TimeZoneInfo.ConvertTimeToUtc(wo.dateTimeofWork, _clientTimeZoneInfo);

            var workOrder = _woServ.Create(wo, wRequests, userName);

            MapperHelpers.ClientTimeZoneInfo = _clientTimeZoneInfo;
            var result = _map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            return(Json(new {
                sNewRef = result.tabref,
                sNewLabel = result.tablabel,
                iNewID = result.ID
            }));
        }
Example #3
0
        public ActionResult View(int id)
        {
            WorkOrder workOrder = woServ.Get(id);
            var       m         = map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            m.def = def;
            return(View(m));
        }
Example #4
0
        public ActionResult ViewForEmail(int id)
        {
            WorkOrder workOrder = woServ.Get(id);
            var       m         = map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            m.def = def;
            ViewBag.OrganizationName = def.getConfig("OrganizationName");
            return(PartialView(m));
        }
        public ActionResult View(int id)
        {
            WorkOrder workOrder = _woServ.Get(id);

            MapperHelpers.ClientTimeZoneInfo = _clientTimeZoneInfo;
            MapperHelpers.Defaults           = _defaults;
            var m = _map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            return(View(m));
        }
        public ActionResult ViewForEmail(int id)
        {
            WorkOrder workOrder = _woServ.Get(id);

            MapperHelpers.ClientTimeZoneInfo = _clientTimeZoneInfo;
            MapperHelpers.Defaults           = _defaults;
            var m = _map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            ViewBag.OrganizationName = _defaults.getConfig("OrganizationName");
            return(PartialView(m));
        }
Example #7
0
        public ActionResult Edit(int id, string userName, List <WorkerRequest> workerRequestList)
        {
            WorkOrder workOrder = woServ.Get(id);

            UpdateModel(workOrder);

            woServ.Save(workOrder, workerRequestList, userName);
            return(Json(new
            {
                status = "OK",
                editedID = id
            }));
        }
Example #8
0
        public ActionResult Create(WorkOrder wo, string userName, List <WorkerRequest> workerRequestList)
        {
            UpdateModel(wo);
            WorkOrder neworder = woServ.Create(wo, userName);

            // JSON object with new work order data
            var result = map.Map <WorkOrder, ViewModel.WorkOrder>(neworder);

            return(Json(new
            {
                sNewRef = result.tabref,
                sNewLabel = result.tablabel,
                iNewID = result.ID
            }));
        }
 public void createcombined_valid_post_returns_json()
 {
     //Arrange
     var combined = new EmployerWoCombined { name = "unit test" };
     var employer = new Employer { ID = 4242 };
     var wo = new WorkOrder { ID= 4243, EmployerID = 4242 };
     serv.Setup(p => p.Create(It.IsAny<Employer>(), "UnitTest")).Returns(employer);
     woServ.Setup(p => p.Create(It.IsAny<WorkOrder>(), "UnitTest")).Returns(wo);
     ctrlr.ValueProvider = form.ToValueProvider();
     //Act
     var result = ctrlr.CreateCombined(combined, "UnitTest");
     //Assert
     Assert.IsInstanceOfType(result, typeof(JsonResult));
     //Assert.IsInstanceOfType(result.Data["EmployerWoConbined"], typeof(EmployerWoCombined));
     Assert.AreEqual("{ iEmployerID = 4242, iWorkOrderID = 4243, jobSuccess = True }", result.Data.ToString());
 }
Example #10
0
        public ActionResult Edit(int id)
        {
            // Retrieve Work Order
            WorkOrder workOrder = woServ.Get(id);

            // Retrieve Worker Requests associated with Work Order
            ViewBag.workerRequests = workOrder.workerRequests.Select(a =>
                                                                     new SelectListItem
            {
                Value = a.WorkerID.ToString(),
                Text  = a.workerRequested.dwccardnum.ToString() + ' ' +
                        a.workerRequested.Person.firstname1 + ' ' +
                        a.workerRequested.Person.lastname1
            });
            var m = map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            m.def = def;
            return(PartialView("Edit", m));
        }
Example #11
0
        public ActionResult Edit(int id)
        {
            // Retrieve Work Order
            WorkOrder workOrder = _woServ.Get(id);

            // Retrieve Worker Requests associated with Work Order
            var workerRequests  = workOrder.workerRequestsDDD;
            var selectListItems = workerRequests?.Select(a =>
                                                         new SelectListItem
            {
                Value = a.WorkerID.ToString(),
                Text  = a.workerRequested.dwccardnum.ToString() + ' ' +
                        a.workerRequested.Person.firstname1 + ' ' +
                        a.workerRequested.Person.lastname1
            });

            ViewBag.workerRequests = selectListItems;

            MapperHelpers.ClientTimeZoneInfo = _clientTimeZoneInfo;
            MapperHelpers.Defaults           = _defaults;
            var m = _map.Map <WorkOrder, ViewModel.WorkOrder>(workOrder);

            return(PartialView("Edit", m));
        }
 public void WorkOrderController_edit_post_invalid_throws_exception()
 {
     //Arrange
     var workOrder = new WorkOrder();
     workOrder.workerRequests = workerRequest;
     int testid = 4243;
     //
     // Mock service and setup SaveWorkOrder mock
     _serv.Setup(p => p.Get(testid)).Returns(workOrder);
     //
     // Mock HttpContext so that ModelState and FormCollection work
     fakeform.Remove("contactName");
     _ctrlr.ValueProvider = fakeform.ToValueProvider();
     //
     //Act
     List<WorkerRequest> list = new List<WorkerRequest>();
     _ctrlr.Edit(testid, fakeform, "UnitTest", list);
     //Assert
 }
 public void WorkOrderController_edit_post_valid_updates_model_redirects_to_index()
 {
     //Arrange
     int testid = 4242;
     WorkOrder fakeworkOrder = new WorkOrder();
     fakeworkOrder.workerRequests = workerRequest;
     WorkOrder savedworkOrder = new WorkOrder();
     string user = "";
     _serv.Setup(p => p.Get(testid)).Returns(fakeworkOrder);
     _serv.Setup(x => x.Save(It.IsAny<WorkOrder>(),
                                   It.IsAny<string>())
                                  ).Callback((WorkOrder p, string str) =>
                                  {
                                      savedworkOrder = p;
                                      user = str;
                                  });
     _ctrlr.SetFakeControllerContext();
     _ctrlr.ValueProvider = fakeform.ToValueProvider();
     //Act
     List<WorkerRequest> list = new List<WorkerRequest>();
     list.Add(new WorkerRequest { WorkerID = 12345 });
     list.Add(new WorkerRequest { WorkerID = 30002 });
     list.Add(new WorkerRequest { WorkerID = 30311 });
     list.Add(new WorkerRequest { WorkerID = 30420 });
     list.Add(new WorkerRequest { WorkerID = 30421 });
     var result = _ctrlr.Edit(testid, fakeform, "UnitTest", list) as JsonResult;
     //Assert
     //Assert.AreEqual("Index", result.RouteValues["action"]);
     Assert.AreEqual(fakeworkOrder, savedworkOrder);
     Assert.AreEqual(savedworkOrder.workSiteAddress1, "blah");
     Assert.AreEqual(savedworkOrder.city, "UnitTest");
     Assert.AreEqual(savedworkOrder.state, "WA");
     Assert.AreEqual(savedworkOrder.phone, "123-456-7890");
     Assert.AreEqual(savedworkOrder.zipcode, "12345-6789");
     Assert.AreEqual(savedworkOrder.typeOfWorkID, 1);
     Assert.AreEqual(savedworkOrder.dateTimeofWork, Convert.ToDateTime("1/1/2011 12:00:00 AM"));
     Assert.AreEqual(savedworkOrder.transportMethodID, 1);
     Assert.AreEqual(savedworkOrder.transportFee, Convert.ToDouble("20.00"));
     //Assert.AreEqual(savedworkOrder.workerRequests.Count(), 5);
 }
        public void WorkOrderController_edit_post_workerRequests_finds_duplicates()
        {
            //Arrange
            int testid = 4242;
            WorkOrder fakeworkOrder = new WorkOrder();
            fakeworkOrder.workerRequests = workerRequest;
            WorkerRequest foo1 = new WorkerRequest
            {
                ID = 111,
                WorkerID = 1,
                WorkOrderID = testid,
                workerRequested = new Worker { ID = 1, dwccardnum = 12345 }

            };

            WorkerRequest foo2 = new WorkerRequest
            {
                ID = 222,
                WorkerID = 2,
                WorkOrderID = testid,
                workerRequested = new Worker { ID = 2, dwccardnum = 12346 }
            };
            workerRequest.Add(foo1);
            workerRequest.Add(foo2);
            WorkOrder savedworkOrder = new WorkOrder();
            string user = "";
            _serv.Setup(p => p.Get(testid)).Returns(fakeworkOrder);
            _serv.Setup(x => x.Save(It.IsAny<WorkOrder>(),
                                          It.IsAny<string>())
                                         ).Callback((WorkOrder p, string str) =>
                                         {
                                             savedworkOrder = p;
                                             user = str;
                                         });
            _wrServ.Setup(x => x.GetWorkerRequestsByNum(testid, 1)).Returns(foo1);
            _wrServ.Setup(x => x.GetWorkerRequestsByNum(testid, 2)).Returns(foo2);
            _ctrlr.SetFakeControllerContext();
            _ctrlr.ValueProvider = fakeform.ToValueProvider();
            List<WorkerRequest> list = new List<WorkerRequest>();
            list.Add(new WorkerRequest { WorkerID = 12345 });
            list.Add(new WorkerRequest { WorkerID = 30002 });
            list.Add(new WorkerRequest { WorkerID = 30311 });
            list.Add(new WorkerRequest { WorkerID = 30420 });
            list.Add(new WorkerRequest { WorkerID = 30421 });
            //Act

            var result = _ctrlr.Edit(testid, fakeform, "UnitTest", list) as JsonResult;
            //Assert
            //Assert.AreEqual("Index", result.RouteValues["action"]);
            Assert.AreEqual(fakeworkOrder, savedworkOrder);

            Assert.AreEqual(savedworkOrder.workerRequests.Count(), 5);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 12345), 1);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 30002), 1);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 30311), 1);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 30420), 1);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 30421), 1);
            Assert.AreEqual(savedworkOrder.workerRequests.Count(a => a.WorkerID == 12346), 0);
        }
Example #15
0
 /// <summary>
 /// Activate work order. Assumes start at WA ListTab. 
 /// </summary>
 /// <param name="_emp"></param>
 /// <param name="_wo"></param>
 /// <param name="_wa"></param>
 /// <returns></returns>
 public bool workAssignmentActivate(Employer _emp, WorkOrder _wo, WorkAssignment _wa)
 {
     // Verify we're on the WA ListTab we expected
     WaitForElement(By.Id("walt-" + _wo.ID));
     // Look for WA datatable to have a first row (at least one record)
     By walt = By.XPath("//table[@id='workAssignTable-wo-" + _wo.ID + "']/tbody/tr/td[1]");
     // The #####-## order number from the first column
     var waltText = WaitForElement(walt).Text;
     WaitForElementValue(walt, _wa.getFullPseudoID());
     Assert.AreEqual(_wa.getFullPseudoID(), waltText, "Unexpected PseudoID in assignment's list");
     Thread.Sleep(1000);
     WaitThenClickElement(By.Id("activateWorkOrderButton-" + _wo.ID));
     // todo: find a way to change this hard-coded value assignment
     _wo.status = 40; // changing test object to reflect activate status from previous action
     return true;
 }
Example #16
0
        public bool workOrderCreate(Employer _emp, WorkOrder _wo)
        {
            string prefix = "WO0-";
            WaitThenClickElement(By.Id("workOrderCreateTab_" + _emp.ID));
            WaitForElement(By.Id(prefix + "contactName"));
            ReplaceElementText(By.Id(prefix + "contactName"), _wo.contactName);
            //ReplaceElementText(By.Id(prefix + "dateTimeofWork"), String.Format("{MM/dd/yyyy hh:mm tt}", _wo.dateTimeofWork));
            ReplaceElementText(By.Id(prefix + "paperOrderNum"), _wo.paperOrderNum.ToString());
            //ReplaceElementText(By.Id(prefix + "timeFlexible"), _wo.timeFlexible.ToString());
            //ReplaceElementText(By.Id(prefix + "permanentPlacement"), _wo.permanentPlacement);
            ReplaceElementText(By.Id(prefix + "workSiteAddress1"), _wo.workSiteAddress1);
            ReplaceElementText(By.Id(prefix + "workSiteAddress2"), _wo.workSiteAddress2);
            //ReplaceElementText(By.Id(prefix + "englishRequired"), _wo.englishRequired);
            ReplaceElementText(By.Id(prefix + "phone"), _wo.phone);
            //ReplaceElementText(By.Id(prefix + "lunchSupplied"), _wo.lunchSupplied);
            ReplaceElementText(By.Id(prefix + "city"), _wo.city);
            ReplaceElementText(By.Id(prefix + "state"), _wo.state);
            //ReplaceElementText(By.Id(prefix + "transportMethodID"), _wo.transportMethodID);
            ReplaceElementText(By.Id(prefix + "zipcode"), _wo.zipcode);
            //ReplaceElementText(By.Id(prefix + "transportFee"), _wo.transportFee);
            //ReplaceElementText(By.Id(prefix + "transportFeeExtra"), _wo.transportFeeExtra);
            //ReplaceElementText(By.Id(prefix + "englishRequiredNote"), _wo.englishRequiredNote);
            ReplaceElementText(By.Id(prefix + "description"), _wo.description);

               // SelectOption(By.Id(prefix + "status"), MacheteLookup.cache.First(c => c.category == "orderstatus" && c.ID == _wo.status).text_EN);
            SelectOptionByIndex(By.Id(prefix + "transportMethodID"), _wo.transportMethodID);
            SelectOptionByIndex(By.Id(prefix + "timeFlexible"), _wo.timeFlexible ? 2 : 1);
            SelectOptionByIndex(By.Id(prefix + "permanentPlacement"), _wo.permanentPlacement ? 2 : 1);
            SelectOptionByIndex(By.Id(prefix + "englishRequired"), _wo.englishRequired ? 2 : 1);
            SelectOptionByIndex(By.Id(prefix + "lunchSupplied"), _wo.lunchSupplied ? 2 : 1);

            Thread.Sleep(1000); //prevent race condition
            if (_wo.workerRequests != null)
                foreach (var request in _wo.workerRequests)
                {
                    WaitThenClickElement(By.Id("addRequestBtn-" + _wo.ID));
                    ReplaceElementText(By.XPath("//*[@id='workerTable-0_filter']/label/input"), request.ID.ToString());
                    WaitThenClickElement(By.XPath("//*[@id='workerTable-0']/tbody/tr/td[1]"));
                }

            Thread.Sleep(1000); //prevent race condition
            //
            // save work order
            _d.FindElement(By.Id(prefix + "SaveBtn")).Click();
            //
            // Find new work order tab (css class "WO"), get embedded WOID, populate
            // WO object

            _wo.ID = getSelectedTabRecordID("WO");
            Assert.IsTrue(_d.FindElement(By.CssSelector("li.WO.ui-tabs-selected > a"))
                                            .Text == Machete.Web.Resources.WorkOrders.tabprefix + _wo.getTabLabel(),
                "Work order anchor label doesn't match work order");

            return true;
        }
 public void WorkOrderController_delete_get_returns_JSON()
 {
     //Arrange
     int testid = 4242;
     WorkOrder fakeworkOrder = new WorkOrder();
     _serv.Setup(p => p.Get(testid)).Returns(fakeworkOrder);
     //Act
     JsonResult result = (JsonResult)_ctrlr.Delete(testid, "test user");
     //Assert
     IDictionary<string,object> data = new RouteValueDictionary(result.Data);
     Assert.AreEqual("OK", data["status"]);
     Assert.AreEqual(4242, data["deletedID"]);
 }
 public void WorkOrderController_create_valid_post_returns_JSON()
 {
     //Arrange
     var workOrder = new WorkOrder();
     var _model = new WorkOrder();
     _serv.Setup(p => p.Create(workOrder, "UnitTest")).Returns(() => workOrder);
     _ctrlr.ValueProvider = fakeform.ToValueProvider();
     //Act
     var result = (JsonResult)_ctrlr.Create(workOrder, "UnitTest", workerRequest);
     //Assert
     Assert.IsInstanceOfType(result, typeof(JsonResult));
     Assert.AreEqual(result.Data.ToString(), "{ sNewRef = /WorkOrder/Edit/4242, sNewLabel = Order #: 04242 @ blah, iNewID = 4242 }");
 }
 public void DeleteWorkOrder()
 {
     //
     //Arrange
     _repo = new Mock<IWorkOrderRepository>();
     _uow = new Mock<IUnitOfWork>();
     var _wo = (WorkOrder)Records.order.Clone();
     string user = "******";
     int id = 1;
     WorkOrder dp = new WorkOrder();
     _repo.Setup(r => r.Delete(It.IsAny<WorkOrder>())).Callback((WorkOrder p) => { dp = p; });
     _repo.Setup(r => r.GetById(id)).Returns(_wo);
     _waServ = new Mock<IWorkAssignmentService>();
     var _serv = new WorkOrderService(_repo.Object, _waServ.Object, _uow.Object);
     //
     //Act
     _serv.Delete(id, user);
     //
     //Assert
     Assert.AreEqual(dp, _wo);
 }
        public ActionResult Create(WorkOrder wo, string userName, string workerAssignments)
        {
            UpdateModel(wo);

            // Retrieve user ID of signed in Employer
            string userID = HttpContext.User.Identity.GetUserId();

            // Retrieve Employer record
            Employer onlineEmployer = eServ.GetRepo().GetAllQ().Where(e => e.onlineSigninID == userID).FirstOrDefault();
            if (onlineEmployer != null)
            {
                // Employer has created profile or work order already

                // Associate WO with Employer
                wo.EmployerID = onlineEmployer.ID;
            }
            else
            {
                // Employer has NOT created profile or work order yet
                Employer employer = new Employer();

                // Set up default values from WO
                employer.name = wo.contactName;
                employer.phone = wo.phone;
                employer.address1 = wo.workSiteAddress1;
                employer.address2 = wo.workSiteAddress2;
                employer.city = wo.city;
                employer.state = wo.state;
                employer.zipcode = wo.zipcode;

                // Set up default online Employer profile
                employer.isOnlineProfileComplete = true;
                employer.onlineSigninID = userID;
                employer.email = HttpContext.User.Identity.GetUserName(); // The Employer's username is their email address
                employer.active = true;
                employer.business = false;
                employer.blogparticipate = false;
                employer.onlineSource = true;
                employer.returnCustomer = false;
                employer.receiveUpdates = true;
                employer.business = false;

                Employer newEmployer = eServ.Create(employer, userName);
                if (newEmployer != null)
                {
                    wo.EmployerID = newEmployer.ID;
                }
            }

            // Set disclosure agreement - to get here, the user had to accept
            wo.disclosureAgreement = true;

            if (workerAssignments == "")
            {
                // Set WA counter
                wo.waPseudoIDCounter = 0;
            }

            // Create Work Order
            WorkOrder neworder = woServ.Create(wo, userName);

            if (workerAssignments != "")
            {
                // Create Work Assignments
                dynamic parsedWorkerRequests = JObject.Parse(workerAssignments);

                // Set WA counter
                wo.waPseudoIDCounter = parsedWorkerRequests["assignments"].Count;
                woServ.Save(neworder, userName);

                for (int i = 0; i < parsedWorkerRequests["assignments"].Count; i++)
                {
                    WorkAssignment wa = new WorkAssignment();

                    // Create WA from Employer data
                    wa.workOrderID = neworder.ID;
                    wa.skillID = parsedWorkerRequests["assignments"][i].skillId;
                    wa.hours = parsedWorkerRequests["assignments"][i].hours;
                    wa.weightLifted = parsedWorkerRequests["assignments"][i].weight;
                    wa.hourlyWage = parsedWorkerRequests["assignments"][i].hourlyWage; // TODO: consider looking this up instead - however, this is the value quoted to the customer online
                    wa.pseudoID = i + 1;
                    wa.description = parsedWorkerRequests["assignments"][i].desc;

                    // Set up defaults
                    wa.active = true;
                    wa.englishLevelID = 0; // TODO: note- all incoming online work assignments won't have the proper English level set (this needs to be set by the worker center)
                    wa.surcharge = 0.0;
                    wa.days = 1;
                    wa.qualityOfWork = 0;
                    wa.followDirections = 0;
                    wa.attitude = 0;
                    wa.reliability = 0;
                    wa.transportProgram = 0;

                    WorkAssignment newWa = waServ.Create(wa, userName);
                }

                // TODO: test
                // New Worker Requests to add
                for (int i = 0; i < parsedWorkerRequests["requests"].Count; i++)
                {
                    WorkerRequest wr = new WorkerRequest();

                    // Create Worker Request from Employer data
                    wr.WorkOrderID = neworder.ID;
                    wr.WorkerID = parsedWorkerRequests["requests"][i].workerId;

                    WorkerRequest newWr = wrServ.Create(wr, userName);
                }
            }

            if (neworder.transportFee > 0)
            {
                return View("IndexPrePaypal", neworder);
            }
            else
            {
                return View("IndexComplete", neworder);
            }
        }
        /// <summary>
        /// Determines displayState value in WorkOrder/AjaxHandler. Display state is used to provide color highlighting to records based on state.
        /// The displayState is not presented to the user, so don't have to provide internationalization text.
        /// </summary>
        /// <param name="wo">WorkOrder</param>
        /// <returns>status string</returns>
        private string _getDisplayState(WorkOrder wo)
        {
            string status = lcache.textByID(wo.status, "en");

            if (wo.status == WorkOrder.iCompleted)
            {
                // If WO is completed, but 1 (or more) WA aren't assigned - the WO is still Unassigned
                if (wo.workAssignments.Count(wa => wa.workerAssignedID == null) > 0)
                {
                    return "Unassigned";
                }
                // If WO is completed, but 1 (or more) Assigned Worker(s) never signed in, then the WO has been Orphaned
                if (wo.workAssignments.Count(wa => wa.workerAssignedID != null && wa.workerSigninID == null) > 0)
                {
                    return "Orphaned";
                }
            }
            return status;
        }
Example #22
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="p"></param>
 /// <param name="showWorkers"></param>
 /// <returns></returns>
 public object dtResponse(ref WorkOrder p, bool showWorkers)
 {
     int ID = p.ID;
     return new
     {
         tabref = p.getTabRef(),
         tablabel = Machete.Web.Resources.WorkOrders.tabprefix + p.getTabLabel(),
         EID = Convert.ToString(p.EmployerID),
         WOID = System.String.Format("{0,5:D5}", p.paperOrderNum),
         dateTimeofWork = p.dateTimeofWork.ToString(),
         status = lcache.textByID(p.status, CI.TwoLetterISOLanguageName),
         WAcount = p.workAssignments.Count(a => a.workOrderID == ID).ToString(),
         contactName = p.contactName,
         workSiteAddress1 = p.workSiteAddress1,
         zipcode = p.zipcode,
         dateupdated = System.String.Format("{0:MM/dd/yyyy HH:mm:ss}", p.dateupdated),
         updatedby = p.Updatedby,
         transportMethod = lcache.textByID(p.transportMethodID, CI.TwoLetterISOLanguageName),
         displayState = _getDisplayState(p),
         onlineSource = p.onlineSource ? Shared.True : Shared.False,
         emailSentCount = p.Emails.Where(e => e.statusID == Email.iSent || e.statusID == Email.iReadyToSend).Count(),
         emailErrorCount = p.Emails.Where(e => e.statusID == Email.iTransmitError).Count(),
         recordid = p.ID.ToString(),
         workers = showWorkers ?
                 from w in p.workAssignments
                 select new
                 {
                     WID = w.workerAssigned != null ? (int?)w.workerAssigned.dwccardnum : null,
                     name = w.workerAssigned != null ? w.workerAssigned.Person.fullName() : null,
                     skill = lcache.textByID(w.skillID, CI.TwoLetterISOLanguageName),
                     hours = w.hours,
                     wage = w.hourlyWage
                 } : null
     };
 }
Example #23
0
 public ActionResult Create(WorkOrder _wo, string userName, List<WorkerRequest> workerRequests2)
 {
     UpdateModel(_wo);
     WorkOrder neworder = woServ.Create(_wo, userName);
     //
     //New requests to add
     foreach (var add in workerRequests2)
     {
         add.workOrder = neworder;
         add.workerRequested = wServ.Get(add.WorkerID);
         add.updatedby(userName);
         add.createdby(userName);
         neworder.workerRequests.Add(add);
     }
     woServ.Save(neworder, userName);
     //
     //
     return Json(new
     {
         sNewRef = neworder.getTabRef(),
         sNewLabel = Machete.Web.Resources.WorkOrders.tabprefix + neworder.getTabLabel(),
         iNewID = neworder.ID
     },
     JsonRequestBehavior.AllowGet);
 }
Example #24
0
        public bool workOrderValidate(WorkOrder _wo)
        {
            string prefix = "WO" + _wo.ID.ToString() + "-";
            Func<string, string, bool> getAttributeAssertEqual = ((p, q) =>
            {
                Assert.AreEqual(p,
                    WaitForElement(By.Id(prefix + q)).GetAttribute("value"),
                    "New work order " + q + "doesn't match original.");
                return true;
            });
            getAttributeAssertEqual(_wo.contactName, "contactName");
            Assert.IsTrue(WaitForElement(By.Id(prefix + "paperOrderNum")).GetAttribute("value") != "", "paper order number is empty");
            //getAttributeAssertEqual(_wo.paperOrderNum.ToString(), "paperOrderNum");
            getAttributeAssertEqual(_wo.workSiteAddress1, "workSiteAddress1");
            getAttributeAssertEqual(_wo.workSiteAddress2, "workSiteAddress2");
            getAttributeAssertEqual(_wo.phone, "phone");
            getAttributeAssertEqual(_wo.city, "city");
            getAttributeAssertEqual(_wo.state, "state");
            getAttributeAssertEqual(_wo.zipcode, "zipcode");
            getAttributeAssertEqual(_wo.description, "description");

            WaitForElement(By.Id(prefix + "status"));
            string optionText = GetOptionText(By.Id(prefix + "status"));
            Assert.AreEqual(_wo.status, MacheteLookup.cache.First(c => c.category == "orderstatus" && c.text_EN == optionText).ID);
            WaitForElement(By.Id(prefix + "timeFlexible"));
            Assert.AreEqual(_wo.timeFlexible ? 2:1, GetOptionIndex(By.Id(prefix + "timeFlexible")));
            WaitForElement(By.Id(prefix + "permanentPlacement"));
            Assert.AreEqual(_wo.permanentPlacement ? 2 : 1, GetOptionIndex(By.Id(prefix + "permanentPlacement")));
            WaitForElement(By.Id(prefix + "englishRequired"));
            Assert.AreEqual(_wo.englishRequired ? 2 : 1, GetOptionIndex(By.Id(prefix + "englishRequired")));
            WaitForElement(By.Id(prefix + "lunchSupplied"));
            Assert.AreEqual(_wo.lunchSupplied ? 2 : 1, GetOptionIndex(By.Id(prefix + "lunchSupplied")));
            WaitForElement(By.Id(prefix + "transportMethodID"));
            Assert.AreEqual(_wo.transportMethodID, GetOptionIndex(By.Id(prefix + "transportMethodID")));
            WaitForElement(By.Id("workerRequests2_WO-" + _wo.ID.ToString()));
            if (_wo.workerRequests != null)
                foreach (var request in _wo.workerRequests)
                {
                    WaitForElementValue(By.XPath("//*[@id='workerRequests2_WO-" + _wo.ID + "']/option"), request.fullNameAndID);
                }
            return true;
        }
 public void WorkOrderController_edit_get_returns_workOrder()
 {
     //Arrange
     int testid = 4242;
     WorkOrder fakeworkOrder = new WorkOrder();
     fakeworkOrder.workerRequests = workerRequest;
     _serv.Setup(p => p.Get(testid)).Returns(fakeworkOrder);
     //Act
     var result = (PartialViewResult)_ctrlr.Edit(testid);
     //Assert
     Assert.IsInstanceOfType(result.ViewData.Model, typeof(WorkOrder));
 }
        public void Unit_WA_Controller_create_valid_post_returns_json()
        {
            //Arrange
            WorkAssignment _asmt = new WorkAssignment();
            fakeform.Add("ID", "11");
            fakeform.Add("englishlevelID", "0");
            fakeform.Add("skillID", "60");
            fakeform.Add("hours", "5");
            fakeform.Add("hourlyWage", "12");
            fakeform.Add("days", "1");
            WorkOrder _wo = new WorkOrder();
            _wo.paperOrderNum = 12345;
            _wo.ID = 123;
            int _num = 0;

            string username = "******";
            _woServ.Setup(p => p.Get(_num)).Returns(() => _wo);
            _waServ.Setup(p => p.Create(_asmt, username)).Returns(() => _asmt);

            _ctrlr.ValueProvider = fakeform.ToValueProvider();
            //Act
            JsonResult result = (JsonResult)_ctrlr.Create(_asmt, username);
            //Assert
            Assert.IsInstanceOfType(result, typeof(JsonResult));
            Assert.AreEqual("{ sNewRef = /WorkAssignment/Edit/12345, sNewLabel = Assignment #: 12345-01, iNewID = 12345 }",
                            result.Data.ToString());
        }
Example #27
0
        /// <summary>
        /// Create new assignment. Last action executes Create Button, returning to List Tab.
        /// </summary>
        /// <param name="emp"></param>
        /// <param name="wo"></param>
        /// <param name="wa"></param>
        /// <returns></returns>
        public bool workAssignmentCreate(Employer emp, WorkOrder wo, WorkAssignment wa)
        {
            // Click on the assignment Create Tab
            WaitThenClickElement(By.Id("wact-" + wo.ID)); //the ID here is the WorkOrder.ID, not the Employer.ID
            WaitForElement(By.Id(wa.idPrefix + "description"));
            SelectOption(By.Id(wa.idPrefix + "englishLevelID"), wa.englishLevelID.ToString());
            SelectOptionByValue(By.Id(wa.idPrefix + "skillID"), wa.skillID.ToString());
            ReplaceElementText(By.Id(wa.idPrefix + "hourlyWage"), wa.hourlyWage.ToString());
            SelectOption(By.Id(wa.idPrefix + "hours"), wa.hours.ToString());
            if (wa.hourRange.ToString().Length > 0)
                SelectOption(By.Id(wa.idPrefix + "hourRange"), wa.hourRange.ToString());
            SelectOption(By.Id(wa.idPrefix + "days"), wa.days.ToString());
            ReplaceElementText(By.Id(wa.idPrefix + "description"), wa.description);

            WaitForElement(By.Id("WO" + wo.ID + "-waCreateBtn")).Click();
            Thread.Sleep(1000);
            wa.ID = getSelectedTabRecordID("WA");
            WaitForElement(By.Id(wa.idPrefix + "EditTab"));
            WaitThenClickElement(By.Id("walt-" + wo.ID));
            return true;
        }
Example #28
0
 /// <summary>
 /// determines displayState value in WorkOrder/AjaxHandler
 /// </summary>
 /// <param name="wo">WorkOrder</param>
 /// <returns>status string</returns>
 private string _getDisplayState(WorkOrder wo)
 {
     string status = lcache.textByID(wo.status, "en");
     //TODO: Pull out WorkOrder status strings, use WorkOrder object reference
     if (status == "Completed")
     {
         if (wo.workAssignments.Count(wa => wa.workerAssignedID == null) > 0) return "Unassigned";
         if (wo.workAssignments.Count(wa => wa.workerAssignedID != null && wa.workerSigninID == null) > 0) return "Orphaned";
     }
     return status;
 }
Example #29
0
        public bool workAssignmentValidate(Employer _emp, WorkOrder _wo, WorkAssignment _wa)
        {
            Thread.Sleep(1000);
            WaitThenClickElement(By.Id("WO" + _wo.ID + "-EditTab"));
            Thread.Sleep(1000);
            WaitThenClickElement(By.Id("WO" + _wo.ID + "-EditTab"));
            Thread.Sleep(1000);
            WaitForElement(By.Id("walt-" + _wo.ID));
            WaitThenClickElement(By.Id("walt-" + _wo.ID));
            Thread.Sleep(1000);
            WaitForElement(By.Id("workAssignTable-wo-" + _wo.ID + "_searchbox"));
            string idString = _wo.ID.ToString("D5") + "-" + ((int)_wa.pseudoID).ToString("D2");
            ReplaceElementText(By.Id("workAssignTable-wo-" + _wo.ID + "_searchbox"), idString);
            Thread.Sleep(1000);
            string xpath = "//*[@id='workAssignTable-wo-" + _wo.ID + "']/tbody/tr/td[.='" + idString + "']";
            Assert.IsTrue(WaitAndDoubleClick(By.XPath(xpath)),
                "Cannot find work assignment row to click.");

            //Now, check each of the fields

            string prefix = "WA" + _wa.ID + "-";

            WaitForElement(By.Id(prefix + "englishLevelID"));
            WaitForElement(By.Id(prefix + "hours")); //Doing a lot of waits up front here because I was having some problems with the englishLevelID getting
            WaitForElement(By.Id(prefix + "hourRange")); //detached from the DOM if I grab it too early. A short sleep seemed to work, but waits make sure.
            WaitForElement(By.Id(prefix + "days"));
            WaitForElement(By.Id(prefix + "skillID"));
            WaitForElement(By.Id(prefix + "hourlyWage"));
            WaitForElement(By.Id(prefix + "total"));
            Thread.Sleep(50);
            Assert.AreEqual(_wa.englishLevelID.ToString(), GetOptionValue(By.Id(prefix + "englishLevelID")));
            Assert.AreEqual(_wa.hours, GetOptionIndex(By.Id(prefix + "hours")));
            if (_wa.hourRange != null)
                Assert.AreEqual(_wa.hourRange, GetOptionIndex(By.Id(prefix + "hourRange")) + 6);
            Assert.AreEqual(_wa.days, GetOptionIndex(By.Id(prefix + "days")));
            string skillIDValue = GetOptionValue(By.Id(prefix + "skillID"));
            Assert.AreEqual(_wa.skillID.ToString(), skillIDValue);
            WaitForElement(By.Id(prefix + "hourlyWage"));
            Assert.AreEqual(_wa.hourlyWage.ToString("F"), WaitForElement(By.Id(prefix + "hourlyWage")).GetAttribute("value"));
            WaitForElement(By.Id(prefix + "total"));
            Assert.AreEqual("$" +(_wa.hourlyWage * _wa.hours * _wa.days).ToString("F"), WaitForElement(By.Id(prefix + "total")).GetAttribute("value"));
            Assert.AreEqual(_wa.pseudoID.ToString(), WaitForElement(By.Id(prefix + "pseudoID")).GetAttribute("Value"));

            // Now change field values and check field relationships

            //reset to default values
            SelectOptionByIndex(By.Id(prefix + "englishLevelID"), 0);
            SelectOptionByIndex(By.Id(prefix + "skillID"), 0);
            ReplaceElementText(By.Id(prefix + "hourlyWage"), "0");
            SelectOptionByIndex(By.Id(prefix + "hours"), 0);
            SelectOptionByIndex(By.Id(prefix + "hourRange"), 0);
            SelectOptionByIndex(By.Id(prefix + "days"), 0);
            SelectOptionByIndex(By.Id(prefix + "hourRange"), 0);

            //check default form response
            Assert.AreEqual("not calculable", WaitForElement(By.Id(prefix + "total")).GetAttribute("value"));
            Assert.AreEqual("not calculable", WaitForElement(By.Id(prefix + "totalRange")).GetAttribute("value"));

            //change skill and make sure wage and hours changed
            SelectOptionByIndex(By.Id(prefix + "skillID"), 1);
            Assert.IsFalse(Convert.ToInt32(WaitForElement(By.Id(prefix + "hourlyWage")).GetAttribute("value")) == 0, "Hourly Wage failed reaction to skill selection");
            var indexResult = GetOptionIndex(By.Id(prefix + "hours"));
            //Assert.AreEqual(0, indexResult, "Hours dropdown failed reaction to skill selection");

            //set hourly range and days then check total and max total
            SelectOptionByIndex(By.Id(prefix + "hourRange"), 3);
            SelectOptionByIndex(By.Id(prefix + "days"), 1);

            int hourlyWage = Convert.ToInt32(WaitForElement(By.Id(prefix + "hourlyWage")).GetAttribute("value"));
            int hoursWork = Convert.ToInt32(WaitForElement(By.Id(prefix + "hours")).GetAttribute("value"));
            int hourRange = Convert.ToInt32(GetOptionValue(By.Id(prefix + "hourRange")));
            int daysWork = Convert.ToInt32(GetOptionValue(By.Id(prefix + "days")));

            Assert.AreEqual("$" + (hourlyWage * hoursWork * daysWork).ToString("F"), WaitForElement(By.Id(prefix + "total")).GetAttribute("value"), "Total pay doesn't match hour, wage and day calculation");
            Assert.AreEqual("$" + (hourlyWage * hourRange * daysWork).ToString("F"), WaitForElement(By.Id(prefix + "totalRange")).GetAttribute("value"), "Max Total pay doesn't match hourRange, wage and day calculation");

            //select fixed job and verify hourly pay is fixed
            // TODO: Find another way of testing this. I took fixed categories out of the Lookups.
            // Centers should be aware that they *can* fix pay in the config, but Casa Latina is the
            // only center that's had that as a requirement for certain types of jobs.

            //String skillValue = MacheteLookup.cache.First(x => x.category == LCategory.skill && x.text_EN == "DWC Chambita 1hr").ID.ToString();
            //SelectOptionByValue(By.Id(prefix + "skillID"), skillValue);
            //Thread.Sleep(1000); // to avoid race condition
            //Assert.AreEqual("true", WaitForElement(By.Id(prefix + "hourlyWage")).GetAttribute("disabled"), "Hourly Wage should be fixed (disabled) in response to skill selection");

            return true;
        }
        public ActionResult Create()
        {
            WorkOrder wo = new WorkOrder();

            // Retrieve user ID of signed in Employer
            string userID = HttpContext.User.Identity.GetUserId();

            // Retrieve Employer record
            Employer employer = eServ.GetRepo().GetAllQ().Where(e => e.onlineSigninID == userID).FirstOrDefault();
            if (employer != null)
            {
                // Employer has created profile or work order already

                // Associate WO with Employer
                wo.EmployerID = employer.ID;

                // Set up default values from Employer record
                wo.contactName = employer.name;
                wo.phone = employer.phone;
                wo.workSiteAddress1 = employer.address1;
                wo.workSiteAddress2 = employer.address2;
                wo.city = employer.city;
                wo.state = employer.state;
                wo.zipcode = employer.zipcode;
            }

            // Set default values
            wo.dateTimeofWork = DateTime.Today.AddHours(9).AddDays(3); // Set default work time to 9am three days from now
            wo.transportMethodID = Lookups.getDefaultID(LCategory.transportmethod);
            wo.typeOfWorkID = Lookups.getDefaultID(LCategory.worktype);
            wo.status = Lookups.getDefaultID(LCategory.orderstatus);
            wo.timeFlexible = true;
            wo.onlineSource = true;
            wo.disclosureAgreement = false;
            ViewBag.workerRequests = new List<SelectListItem> { };

            // Build Skill lookups
            ViewBag.ID = new int[22];
            ViewBag.text_EN = new string[22];
            ViewBag.text_ES = new string[22];
            ViewBag.wage = new double[22];
            ViewBag.minHour = new int[22];
            ViewBag.workType = new int[22];
            ViewBag.desc_ES = new string[22];
            ViewBag.desc_EN = new string[22];

            //IEnumerable<Lookup> lookup = lcache.getCache();
            List<SelectListEmployerSkills> lookup = Lookups.getOnlineEmployerSkill();

            int counter = 0;

            for (int i = 0; i < lookup.Count(); i++)
            {
                SelectListEmployerSkills lup = lookup.ElementAt(i);
                //Lookup lup = lookup.ElementAt(i);
                //if (lup.ID == 60 || lup.ID == 61 || lup.ID == 62 || lup.ID == 63 || lup.ID == 64 || lup.ID == 65 || lup.ID == 66 || lup.ID == 67 || lup.ID == 68 || lup.ID == 69 || lup.ID == 77 || lup.ID == 83 || lup.ID == 88 || lup.ID == 89 || lup.ID == 118 || lup.ID == 120 || lup.ID == 122 || lup.ID == 128 || lup.ID == 131 || lup.ID == 132 || lup.ID == 133 || lup.ID == 183)
                if (lup.ID == 60 || lup.ID == 61 || lup.ID == 62 || lup.ID == 63 || lup.ID == 64 || lup.ID == 65 || lup.ID == 66 || lup.ID == 67 || lup.ID == 68 || lup.ID == 69 || lup.ID == 77 || lup.ID == 83 || lup.ID == 88 || lup.ID == 89 || lup.ID == 118 || lup.ID == 120 || lup.ID == 122 || lup.ID == 128 || lup.ID == 131 || lup.ID == 132 || lup.ID == 133 || lup.ID == 183)
                {
                    ViewBag.ID[counter] = lup.ID;
                    ViewBag.wage[counter] = lup.wage;
                    ViewBag.minHour[counter] = lup.minHour;
                    ViewBag.workType[counter] = lup.typeOfWorkID;
                    ViewBag.text_EN[counter] = lup.skillDescriptionEn;
                    ViewBag.text_ES[counter] = lup.skillDescriptionEs;
                    counter++;
                }
            }

            return PartialView("Create", wo);
        }
        public ActionResult Create(int EmployerID)
        {
            WorkOrder _wo = new WorkOrder();
            _wo.EmployerID = EmployerID;
            _wo.dateTimeofWork = DateTime.Today;
            _wo.transportMethodID = Lookups.getDefaultID(LCategory.transportmethod); // TODO: investigate if it make sense to have this as a default
            _wo.typeOfWorkID = Lookups.getDefaultID(LCategory.worktype); // TODO: investigate if it make sense to have this as a default
            _wo.status = Lookups.getDefaultID(LCategory.orderstatus);
            _wo.timeFlexible = true;
            ViewBag.workerRequests = new List<SelectListItem> {};

            return PartialView("Create", _wo);
        }
        /// <summary>
        /// Returns Work Order object to AjaxHandler - presented on the WorkOrder Details tab
        /// </summary>
        /// <param name="wo">WorkOrder</param>
        /// <param name="showWorkers">bool flag determining whether the workers associated with the WorkOrder should be retrieved</param>
        /// <returns>Work Order </returns>
        public object dtResponse( WorkOrder wo, bool showWorkers)
        {
            // tabref = "/HirerWorkOrder/Edit" + Convert.ToString(wo.ID),
            int ID = wo.ID;
            return new
            {
                tabref = "/HirerWorkOrder/View/" + Convert.ToString(wo.ID),
                tablabel = Machete.Web.Resources.WorkOrders.tabprefix + wo.getTabLabel(),
                EID = Convert.ToString(wo.EmployerID),
                WOID = System.String.Format("{0,5:D5}", wo.paperOrderNum), // Note: paperOrderNum defaults to the value of the WO when a paperOrderNum is not provided
                dateTimeofWork = wo.dateTimeofWork.ToString(),
                status = lcache.textByID(wo.status, CI.TwoLetterISOLanguageName),
                WAcount = wo.workAssignments.Count(a => a.workOrderID == ID).ToString(),
                contactName = wo.contactName,
                workSiteAddress1 = wo.workSiteAddress1,
                zipcode = wo.zipcode,
                transportMethod = lcache.textByID(wo.transportMethodID, CI.TwoLetterISOLanguageName),
                displayState = _getDisplayState(wo), // State is used to provide color highlighting to records based on state
                onlineSource = wo.onlineSource ? Shared.True : Shared.False,
                workers = showWorkers ? // Workers is only loaded when showWorkers parameter set to TRUE
                        from w in wo.workAssignments
                        select new
                        {
                            WID = w.workerAssigned != null ? (int?)w.workerAssigned.dwccardnum : null,
                            name = w.workerAssigned != null ? w.workerAssigned.Person.firstname1 : null, // Note: hirers should only have access to the workers first name
                            skill = lcache.textByID(w.skillID, CI.TwoLetterISOLanguageName),
                            hours = w.hours,
                            wage = w.hourlyWage
                        } : null

            };
        }
        public ActionResult Create(WorkOrder wo, string userName, List<WorkerRequest> workerRequestList)
        {
            UpdateModel(wo);
            WorkOrder neworder = woServ.Create(wo, userName);

            // New Worker Requests to add
            foreach (var workerRequest in workerRequestList)
            {
                workerRequest.workOrder = neworder;
                workerRequest.workerRequested = wServ.Get(workerRequest.WorkerID);
                workerRequest.updatedby(userName);
                workerRequest.createdby(userName);
                neworder.workerRequests.Add(workerRequest);
            }

            woServ.Save(neworder, userName);

            // JSON object with new work order data
            return Json(new
            {
                sNewRef = neworder.getTabRef(),
                sNewLabel = Machete.Web.Resources.WorkOrders.tabprefix + neworder.getTabLabel(),
                iNewID = neworder.ID
            },
            JsonRequestBehavior.AllowGet);
        }
 /// <summary>
 /// Returns Work Order object - presented on the WorkOrder Details tab
 /// </summary>
 /// <param name="wo">WorkOrder</param>
 /// <param name="showWorkers">bool flag determining whether the workers associated with the WorkOrder should be retrieved</param>
 /// <returns>Work Order </returns>
 public object dtResponse( WorkOrder wo, bool showWorkers)
 {
     int ID = wo.ID;
     return new
     {
         tabref = wo.getTabRef(),
         tablabel = Machete.Web.Resources.WorkOrders.tabprefix + wo.getTabLabel(),
         EID = Convert.ToString(wo.EmployerID), // Note: Employer ID appears to be unused
         WOID = System.String.Format("{0,5:D5}", wo.paperOrderNum), // TODO: investigate why PaperOrderNum is used - shouldn't this be the Order # from the WO Table?
         dateTimeofWork = wo.dateTimeofWork.ToString(),
         status = lcache.textByID(wo.status, CI.TwoLetterISOLanguageName),
         WAcount = wo.workAssignments.Count(a => a.workOrderID == ID).ToString(),
         contactName = wo.contactName,
         workSiteAddress1 = wo.workSiteAddress1,
         zipcode = wo.zipcode,
         dateupdated = System.String.Format("{0:MM/dd/yyyy HH:mm:ss}", wo.dateupdated), // Note: Date Updated appears to be unused
         updatedby = wo.Updatedby,
         transportMethod = lcache.textByID(wo.transportMethodID, CI.TwoLetterISOLanguageName), // Note: Transport Method appears to be unused
         displayState = _getDisplayState(wo), // Note: Display State appears to be unused
         onlineSource = wo.onlineSource ? Shared.True : Shared.False,
         emailSentCount = wo.Emails.Where(e => e.statusID == Email.iSent || e.statusID == Email.iReadyToSend).Count(),
         emailErrorCount = wo.Emails.Where(e => e.statusID == Email.iTransmitError).Count(),
         recordid = wo.ID.ToString(), // Note: Work Order ID appears not to be used
         workers = showWorkers ? // Note: Workers appears to not be used
                 from w in wo.workAssignments
                 select new
                 {
                     WID = w.workerAssigned != null ? (int?)w.workerAssigned.dwccardnum : null,
                     name = w.workerAssigned != null ? w.workerAssigned.Person.fullName() : null,
                     skill = lcache.textByID(w.skillID, CI.TwoLetterISOLanguageName),
                     hours = w.hours,
                     wage = w.hourlyWage
                 } : null
     };
 }
 public void WorkOrderController_create_post_invalid_throws_exception()
 {
     //Arrange
     var workOrder = new WorkOrder();
     _serv.Setup(p => p.Create(workOrder, "UnitTest")).Returns(workOrder);
     fakeform.Remove("contactName");
     _ctrlr.ValueProvider = fakeform.ToValueProvider();
     //Act
     _ctrlr.Create(workOrder, "UnitTest", workerRequest);
     //Assert
 }