Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 5
0
        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);
        }