public ActionResult ResolveWorkOrder(DispatcherWorkOrderDetailsModel model, string submitButton, string ddlVandalism) { var factory = (new DispatcherWorkOrderFactory(CurrentCity)); //get the two factory.UpdateNotes(model.WorkOrderId, model.Notes); //check the other submit buttons and act on them, or continue switch (submitButton) { case "Close": //have to get hte vandalism flag and the resolution code from the user selections int resCode; int.TryParse(model.SelectedRepairDescription, out resCode); bool vandalism = ddlVandalism == "Yes"; factory.ResolveWorkOrder(model.WorkOrderId, resCode, vandalism); //check to see if the work order evetns closed correctly. if (!string.IsNullOrEmpty(factory.ErrorMessage)) { //if we got this far, something failed. add error to model and display to user ModelState.AddModelError(Constants.ViewData.ModelStateStatusKey, factory.ErrorMessage); var tWorkOrder = factory.GetWorkOrderDetails(model.WorkOrderId, CurrentCity.LocalTime); return(View("ResolveWorkOrder", tWorkOrder)); } //now send them back to the details. return(RedirectToAction("WorkOrderDetail", new { workOrderId = model.WorkOrderId })); } //if we got this far, something failed. add error to model and display to user ModelState.AddModelError(Constants.ViewData.ModelStateStatusKey, (new ResourceFactory()).GetLocalizedTitle(ResourceTypes.StatusMessage, "An error occurred. Try again.")); var techWorkOrder = factory.GetWorkOrderDetails(model.WorkOrderId, CurrentCity.LocalTime); return(View("ResolveWorkOrder", techWorkOrder)); }
public ActionResult WorkOrderDetail(DispatcherWorkOrderDetailsModel model, string submitButton, IEnumerable <HttpPostedFileBase> files, FormCollection formValues) { var factory = (new DispatcherWorkOrderFactory(CurrentCity)); switch (submitButton) { case "Assign": // assign the work order to the technicianid of the model (SelectedTechnician) and redirect back to the details page factory.AssignWorkOrder(model.WorkOrderId, model.SelectedTechnicianId, CurrentCity.LocalTime); break; case "Unassign": // unassign the work order and redirect back to the details page factory.UnassignWorkOrder(model.WorkOrderId); break; case "SaveImages": //now we need to add the images to the work order (if there are any) if (files != null) { foreach (var file in files) { factory.CreateWorkOrderImage(model.WorkOrderId, ImageFactory.StreamToByteArray(file.InputStream), CurrentCity.LocalTime); } } break; case "AddPart": //add the available part to the work order as a work order part //get the selectd part ID long partID; //poart will be PartId | PartName var partIdentifier = model.SelectedPart.Split('|'); bool parsed = long.TryParse(partIdentifier[0], out partID); if (parsed) { factory.AddPartToWorkOrder(partID, model.WorkOrderId, model.PartNote); } break; case "UpdateQuantities": //rebuild the model with the work order parts and quantities passed in from the forms colleciton model = RebuildTechnicianWorkOrderDetailsModel(model, formValues); //now pass it to the factory to update part quantities //save all of the part values and then send them back to this page again factory.UpdateWorkOrderPartQuantities(model); break; } //redirect back to the details page so the changes wil be reflected. return(RedirectToAction("WorkOrderDetail", new { model.WorkOrderId })); }
/// <summary> /// Updates work order part quantities on all of the work order parts for a work order. /// The only data fora work order part that it is expecting is workOrderPartId and Quantity for a work order part. /// </summary> /// <param name="model"></param> public void UpdateWorkOrderPartQuantities(DispatcherWorkOrderDetailsModel model) { UpdatePartQuantities(model.WorkOrderParts, model.WorkOrderId); }
/// <summary> /// Gets the mobile version of the work order details screen /// </summary> /// <param name="workOrderId"></param> /// <param name="customerId"></param> /// <param name="localTime"></param> /// <returns></returns> public DispatcherWorkOrderDetailsModel GetWorkOrderDetails(long workOrderId, DateTime localTime) { var model = new DispatcherWorkOrderDetailsModel(); //get the work order var workOrder = MaintenanceEntities.FMWorkOrders.FirstOrDefault(x => x.WorkOrderId == workOrderId); if (workOrder != null) { var customerId = workOrder.CustomerId; //convert it to our enetity model.Deadline = workOrder.SLADue; model.Location = workOrder.Location; model.Status = workOrder.WorkOrderStatu.WorkOrderStatusDesc; model.StatusId = workOrder.WorkOrderStatusId; model.WorkOrderId = workOrder.WorkOrderId; model.Notes = workOrder.Notes; model.CreationDate = workOrder.CreateDateTime; model.CrossStreet = workOrder.CrossStreet; model.AreaId = workOrder.AreaId; model.AreaId2Display = GetAreaName(customerId, workOrder.AreaId, workOrder.MeterId); //create the asset for this work order model.WorkOrderAsset = MakeWorkOrderAsset(workOrder, customerId); //create a list of images model.WorkOrderImages = MakeWorkOrderImages(workOrder.WorkOrderImages); //create a list of events model.WorkOrderEvents = MakeWorkOrderEvents(workOrder.WorkOrderEvents); //Repair Descriptions (used for closing the work order) model.RepairDescriptions = GetRepairDescriptions(); //available parts for this work order (based ont he asset id - metergroup of hte work order) model.AvailableParts = GetAvailableParts(workOrder.MeterGroup, workOrder.Mechanism); //list of parts assigned to this work order model.WorkOrderParts = MakeWorkOrderParts(workOrder.WorkOrderParts); //highest severity of all the work order events model.Priority = workOrder.HighestSeverity; //fix up alarm tier (priority) display - have to go back to pems for this info. var tier = PemsEntities.AlarmTiers.FirstOrDefault(x => x.Tier == workOrder.HighestSeverity); model.PriorityDisplay = tier != null? tier.TierDesc: ""; //list of all past work orders inthe last 14 days (this migh have to be configurable per client todo - make this configurable) var pastDatetime = localTime.AddDays(-14); var pastWorkOrders = MaintenanceEntities.FMWorkOrders.Where( x => x.MeterId == workOrder.MeterId && x.WorkOrderId != workOrderId && x.CreateDateTime >= pastDatetime); model.PastWorkOrders = pastWorkOrders.Any() ? pastWorkOrders.Count().ToString() : "0"; //set the flag based on the current customer to determine if they need to close the entire work order out or per events var settingFactory = new SettingsFactory(); var workOrderCloseEventSetting = settingFactory.GetValue("CloseWorkOrderEvents", customerId); //if it doenst exist, create it if (workOrderCloseEventSetting == null) { settingFactory.Set(customerId, "CloseWorkOrderEvents", false.ToString()); } workOrderCloseEventSetting = settingFactory.GetValue("CloseWorkOrderEvents", customerId); model.CloseWorkOrderEvents = bool.Parse(workOrderCloseEventSetting); //technicina details model.Technician = MakeTechnicianFromWorkOrder(workOrder); //get all the techs in the system model.AvailableTechnicians = GetMaintenanceGroupTechnicians(MaintenanceGroup); } return(model); }
private DispatcherWorkOrderDetailsModel RebuildTechnicianWorkOrderDetailsModel(DispatcherWorkOrderDetailsModel model, FormCollection formValues) { // Prep the Model.Coins class if (model.WorkOrderParts == null) { model.WorkOrderParts = new List <WorkOrderPart>(); } // Walk the form fields and set any values in the model to values reflected by // the form fields. foreach (var formValueKey in formValues.Keys) { string[] tokens = formValueKey.ToString().Split(model.Separator); var formValue = formValues[formValueKey.ToString()]; //token is going to be "partId_" then the id of the part if (tokens.Length != 2) { continue; } // Get model id int woPartID; if (int.TryParse(tokens[1], out woPartID)) { if (tokens[0].Equals(DispatcherWorkOrderDetailsModel.PartIdPrefix)) { //this is a textbox that represents a number (quantity). try to part it as an int. int quantity; var parsed = int.TryParse(formValue, out quantity); if (parsed) { //create a work order part and add it to the list var woPart = new WorkOrderPart(); woPart.WorkOrderPartId = woPartID; woPart.Quantity = quantity; model.WorkOrderParts.Add(woPart); } else { //if we cant parse it, they either didnt put anything there, or put a nonsensical value (a), so set it to 0 so we can remove it. var woPart = new WorkOrderPart(); woPart.WorkOrderPartId = woPartID; woPart.Quantity = 0; model.WorkOrderParts.Add(woPart); } } } } return(model); }