/// <summary> /// Fetches the Work Order Areas for a particular zipcode /// </summary> /// <param name="zipCode">Zipcode</param> public void getWorkOrderArea(String zipCode) { _log.Notice("Inside getWorkOrderArea. ZipCode: " + zipCode); CapacityModel capacityModel = new CapacityModel(); capacityModel.DetermineLocationByWorkZone = true; capacityModel.DetermineLocationByWorkZoneSpecified = true; ActivityField zipField = new ActivityField(); zipField.Name = "czip"; zipField.Value = zipCode; DateTime[] dateTimes = new DateTime[] { DateTime.Today, }; capacityModel.QuotaDates = dateTimes; List <ActivityField> activityFields = new List <ActivityField>(); activityFields.Add(zipField); capacityModel.ActivityField = activityFields.ToArray(); ICapacityService service = CapacityService.GetService(); if (service != null) { _log.Notice("Got CapacityService Object"); service.GetWorkOrderArea(capacityModel, WorkOrderAreaCallback); } }
/// <summary> /// Begin request for Inbound service. /// </summary> /// <param name="inboundRequest"></param> /// <param name="inboundServiceCallback"></param> public ToaRequestResult BeginSyncRequest(InboundRequest inboundRequest) { _log.Debug("InboundService - BeginRequest() - Start"); var inboundRequestElement = inboundRequest.GetInboundRequestElement(); _log.Debug(ToaLogMessages.InboundServiceRequest, Json.Encode(inboundRequestElement)); //Validate the current sitename. if (!ToaCommonUtil.ValidateCurrentSiteName()) { return(null); } var inboundResult = _inboundInterfaceService.inbound_interface(inboundRequestElement); _log.Debug(ToaLogMessages.InboundServiceResponse, Json.Encode(inboundResult)); //TODO: Initialize response var toaResponse = new ToaRequestResult(); _log.Notice("Started processing response element"); toaResponse.processResponseElement(inboundResult); _log.Debug("InboundService - BeginRequest() - End"); return(toaResponse); }
/// <summary> /// Initialize the Calendar Control /// </summary> /// <returns>True if Calendar is properly initialized</returns> public bool InitializeCalendar() { _log.Notice("Inside InitializeCalendar"); p_HighlightedDateText = new string[42]; monthlyQuota = new Dictionary <DateTime, DayQuota>(); currentDateSelected = OldDisplayDate = p_DisplayDate = DateTime.Today; ToaRequestResultCode result = this.getQuotaForMonth(); if (result == ToaRequestResultCode.Failure) { return(false); } // Subscribe to PropertyChanged event this.PropertyChanged += OnPropertyChanged; return(true); }
/// <summary> /// Get Work Order Area mapped to zipcode /// </summary> /// <param name="capacityModel">Capacity Model object</param> /// <param name="capacityCallback">Callback method</param> public void GetWorkOrderArea(CapacityModel capacityModel, CapacityServiceDelegate capacityCallback) { _log.Notice("Inside GetWorkOrderArea"); var backgroundService = new ToaBackgroundServiceUtil(); backgroundService.RunAsync(() => { try { capacity_element[] capacityElement = capacityModel.getCapacityElement(); time_slot_info_element[] timeSlotInfoElement = capacityModel.getTimeSlotInfoElement(); long activityTravelTime = capacityModel.ActivityTravelTime; bool activityTravelTimeSpecified = capacityModel.AggregateResultsSpecified; _toaCapacityInterface.get_capacity(ToaUserUtil.GetCapacityUser(), capacityModel.QuotaDates, capacityModel.Location, capacityModel.CalculateDuration, capacityModel.CalculateDurationSpecified, capacityModel.CalculateTravelTime, capacityModel.CalculateTravelTimeSpecified, capacityModel.CalculateWorkSkill, capacityModel.CalculateWorkSkillSpecified, capacityModel.ReturnTimeSlotInfo, capacityModel.ReturnTimeSlotInfoSpecified, capacityModel.DetermineLocationByWorkZone, capacityModel.DetermineLocationByWorkZoneSpecified, capacityModel.DontAggregateResults, capacityModel.DontAggregateResultsSpecified, capacityModel.MinTimeEndOfTimeSlot, capacityModel.MinTimeEndOfTimeSlotSpecified, capacityModel.DefaultDuration, capacityModel.DefaultDurationSpecified, capacityModel.Timeslots, capacityModel.WorkSkill, capacityModel.getActivityFieldElement(), out activityTravelTime, out activityTravelTimeSpecified, out activityTravelTime, out activityTravelTimeSpecified, out capacityElement, out timeSlotInfoElement); CapacityModel response = new CapacityModel(); HashSet <string> locations = new HashSet <string>(); if (capacityElement != null) { foreach (capacity_element ce in capacityElement) { if (!locations.Contains(ce.location)) { locations.Add(ce.location); } } } response.Location = new string[locations.Count]; locations.CopyTo(response.Location); // initialize toa result and activity model object var toaRequestResult = new ToaRequestResult(); toaRequestResult.DataModels.Add(response); toaRequestResult.ResultCode = ToaRequestResultCode.Success; if (locations.Count == 0) { List <ReportMessageModel> reportMessageModel = new List <ReportMessageModel>(); _log.Error("Unable to determine work zone for given fields"); reportMessageModel.Add(new ReportMessageModel("No Work Order Areas exist for this Postal Code, please update the Postal Code field or submit with no timeslot and data selected", null, null, "Unable to determine work zone for given fields")); toaRequestResult.ReportMessages = reportMessageModel; toaRequestResult.ResultCode = ToaRequestResultCode.Failure; } capacityCallback.Invoke(toaRequestResult); } catch (Exception exception) { _log.Error("Unable to fetch Work Order Area"); _log.Error(exception.StackTrace); MessageBox.Show("No Work Order Areas exist for this Postal Code, please update the Postal Code field or submit with no timeslot and data selected"); } }); }
public void processResponseElement(InboundInterfaceResponseElement inboundResponseElement) { if (inboundResponseElement.report != null) { ReportMessageElement[] reportMessages = inboundResponseElement.report; WorkOrderModel workOrderModel = new WorkOrderModel(); if (null != reportMessages && reportMessages.Length > 0) { _log.Notice("Processing Report Element for WorkOrder"); foreach (ReportMessageElement reportMessage in reportMessages) { workOrderModel.AddReportMessage(reportMessage.result, reportMessage.type, reportMessage.code, reportMessage.description); if (!reportMessage.code.Equals(ActivityProperty.TOA_Report_Success_Code)) { _resultCode = Common.ToaRequestResultCode.Failure; _log.Error("Error creating appointment ", "Result:" + reportMessage.result + ", Type:" + reportMessage.type + ", Code:" + reportMessage.code + ", Description:" + reportMessage.description); } } _log.Notice("Processing of Report Element for WorkOrder is done"); } _dataModels.Add(workOrderModel); } else if (inboundResponseElement.data != null) { CommandResponseElement[] commands = inboundResponseElement.data.commands; _resultCode = Common.ToaRequestResultCode.Success; if (null != commands && commands.Length > 0) { foreach (CommandResponseElement command in commands) { WorkOrderModel workOrderModel = new WorkOrderModel(); ReportMessageElement[] reportMessages = command.appointment.report; if (null != reportMessages && reportMessages.Length > 0) { _log.Notice("Processing Report Element for WorkOrder"); foreach (ReportMessageElement reportMessage in reportMessages) { workOrderModel.AddReportMessage(reportMessage.result, reportMessage.type, reportMessage.code, reportMessage.description); if (!reportMessage.code.Equals(ActivityProperty.TOA_Report_Success_Code)) { _resultCode = Common.ToaRequestResultCode.Failure; _log.Error("Error creating appointment:" + command.appointment.appt_number, "Result:" + reportMessage.result + ", Type:" + reportMessage.type + ", Code:" + reportMessage.code + ", Description:" + reportMessage.description); } else { _log.Notice("Appointment created:" + command.appointment.appt_number, "Result:" + reportMessage.result + ", Type:" + reportMessage.type + ", Code:" + reportMessage.code + ", Description:" + reportMessage.description); } } _log.Notice("Processing of Report Element for WorkOrder is done"); } workOrderModel.AppointmentNumber = command.appointment.appt_number; _log.Notice("WorkOrder Id:" + command.appointment.appt_number); workOrderModel.TOA_AID = command.appointment.aid; _log.Notice("ETA Direct Activity Id:" + command.appointment.aid); workOrderModel.CustomerNumber = command.appointment.customer_number; workOrderModel.CommandType = ToaEnumsUtil.GetActivityCommandTypeEnum(command.type); workOrderModel.AssignedDate = command.date; workOrderModel.ExternalId = command.external_id; _dataModels.Add(workOrderModel); //Processing Inventories InventoryResponseElement[] inventoriesResponseElement = command.appointment.inventories; if (null != inventoriesResponseElement && inventoriesResponseElement.Length > 0) { List <InventoryModel> inventoryResponseModels = new List <InventoryModel>(); foreach (InventoryResponseElement inventoryResponseElement in inventoriesResponseElement) { ReportMessageElement[] inventoryReportMessages = inventoryResponseElement.report; InventoryModel responseInventoryModel = new InventoryModel(); if (inventoryResponseElement.invid > 0) { responseInventoryModel.InventoryID = inventoryResponseElement.invid; _log.Notice("Inventory ID is:" + inventoryResponseElement.invid); } _log.Notice("Processing Report Element for Inventory"); if (null != inventoryReportMessages) { foreach (ReportMessageElement reportMessage in inventoryReportMessages) { responseInventoryModel.AddReportMessage(reportMessage.result, reportMessage.type, reportMessage.code, reportMessage.description); if (!reportMessage.code.Equals(ActivityProperty.TOA_Report_Success_Code)) { _resultCode = Common.ToaRequestResultCode.Failure; _log.Error("Error creating/updating inventory", "Result:" + reportMessage.result + ", Type:" + reportMessage.type + ", Code:" + reportMessage.code + ", Description:" + reportMessage.description); } else { _log.Notice("Inventory added/updated", "Result:" + reportMessage.result + ", Type:" + reportMessage.type + ", Code:" + reportMessage.code + ", Description:" + reportMessage.description); } } } _log.Notice("Processing of Report Element for Inventory is done"); if (null != inventoryResponseElement.properties) { foreach (PropertyElement inventoryProperty in inventoryResponseElement.properties) { switch (inventoryProperty.label) { case "invsn": responseInventoryModel.SerialNumber = inventoryProperty.value; _log.Notice("Inventory Serial Number is:" + inventoryProperty.value); break; case "invtype_label": responseInventoryModel.Type = inventoryProperty.value; _log.Notice("Inventory Type is:" + inventoryProperty.value); break; default: break; } } } //Adding individual inventory to list inventoryResponseModels.Add(responseInventoryModel); } //Adding list to WorkOrder Model workOrderModel.ActivityInventories = inventoryResponseModels; } } } } }
public void Handler() { InboundRequest inboundRequest = null; ToaRequestResult inboundResult = null; int? aid = null; WorkOrderModel workOrderModel = null; try { _log.Notice("Starting WorkOrderSave Handler."); object wotype = EventHandlerServices.GetEventHandlerService().getFieldFromWorOrderRecord(_workOrderRecord, "WO_Type"); object overrideRequest = EventHandlerServices.GetEventHandlerService().getFieldFromWorOrderRecord(_workOrderRecord, "Override_Request"); object timeSlot = EventHandlerServices.GetEventHandlerService().getFieldFromWorOrderRecord(_workOrderRecord, "WO_Time_Slot"); object wodate = EventHandlerServices.GetEventHandlerService().getFieldFromWorOrderRecord(_workOrderRecord, "WO_Date"); object resolutionDue = EventHandlerServices.GetEventHandlerService().getFieldFromWorOrderRecord(_workOrderRecord, "Resolution_Due"); if (null == wotype) { return; } if (overrideRequest != null) { if (timeSlot == null || wodate == null) { return; } } else { if (timeSlot == null || wodate == null) { if (resolutionDue == null) { return; } } } _log.Notice("Converting from RecordContext to WorkOrder Model started"); workOrderModel = EventHandlerServices.GetEventHandlerService().GetWorkOrderModel(_recordContext); _log.Notice("Convertion from RecordContext to WorkOrder Model completed"); //Appointments 'key' fields are set in the constuctor of below object var activitySettings = new ActivitySettingsModel(); //Inventory 'key' fields are set in the constuctor of below object var inventorySettings = new InventorySettingsModel(); _log.Notice("Initialize InboundRequest"); inboundRequest = new InboundRequest(new List <IToaModel>() { workOrderModel }); inboundRequest.PropertiesMode = Client.Common.PropertiesMode.Replace; inboundRequest.AllowChangeDate = Client.Common.AllowChangeDate.Yes; inboundRequest.ActivitySettings = activitySettings; inboundRequest.InventorySettings = inventorySettings; _log.Notice("Invoking TOA Server using Inbound API Started"); inboundResult = InboundService.GetService().BeginSyncRequest(inboundRequest); if (inboundResult != null) { _log.Notice("Invoking TOA Server using Inbound API Completed"); ToaExceptionManager manager = new ToaExceptionManager(); _log.Notice("Processing Inbound API Response Result"); aid = manager.ProcessInboundResult(inboundResult); _log.Notice("Completed Processing Inbound API Response Result"); if (aid == null) { _cancelEventArgs.Cancel = true; return; } } else { foreach (IGenericField field in _workOrderRecord.GenericFields) { if (field.Name.Equals("WO_Status")) { TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; field.DataValue.Value = textInfo.ToTitleCase(ToaStringsUtil.GetString(Client.Common.ActivityStatus.NotCreated)); break; } } } } catch (Exception ex) { _log.Error(ex.Message, ex.StackTrace); MessageBox.Show(ToaExceptionMessages.UnexpectedError, ToaExceptionMessages.TitleError, MessageBoxButton.OK, MessageBoxImage.Error); } try { _log.Notice("Updating WorkOrder Record."); workOrderModel.TOA_AID = (aid != null) ? aid : 0; UpdateWorkOrderRecord(inboundResult, workOrderModel); _log.Notice("WorkOrder Record Updated."); _log.Notice("Exiting WorkOrderSave Handler."); } catch (Exception ex) { _log.Error(ex.Message, ex.StackTrace); MessageBox.Show(ToaExceptionMessages.UnexpectedError, ToaExceptionMessages.TitleError, MessageBoxButton.OK, MessageBoxImage.Error); } }
public WorkOrderModel GetWorkOrderModel(IRecordContext RecordContext) { ICustomObject workOrder = RecordContext.GetWorkspaceRecord(RecordContext.WorkspaceTypeName) as ICustomObject; IContact contact = RecordContext.GetWorkspaceRecord(WorkspaceRecordType.Contact) as IContact; WorkOrderModel workOrderModel = new WorkOrderModel(); _log.Notice("Processing WorkOrder:" + workOrder.Id.ToString()); if (workOrder != null) { IList <IGenericField> fields = workOrder.GenericFields; workOrderModel.AppointmentNumber = workOrder.Id.ToString(); InventoryModel primaryAssetInventoryModel = null; int workorderTypeId = (Int32)getFieldFromWorOrderRecord(workOrder, "WO_Type"); string[] workordertype = RightNowConnectService.GetService().GetWorkOrderTypeFromID(workorderTypeId); _log.Notice("WorkOrder Type ID:" + workordertype[0]); foreach (IGenericField field in fields) { if (field.DataValue.Value != null) { switch (field.Name) { case "Asset": //cannot use record context here as Asset WorkspaceType is not exposed through RightNow.AddIns.Common. //TODO Un-Comment below lines when RN Connect Services are available if (null != field.DataValue.Value) { primaryAssetInventoryModel = new InventoryModel(); int assetid = (int)field.DataValue.Value; _log.Notice("WorkOrder Primary Asset ID:" + assetid); string[] details = RightNowConnectService.GetService().GetAssetDetailsFromAssetID(assetid.ToString()); string[] productDetails = RightNowConnectService.GetService().GetProductDetailsFromProductID(details[0]); //Type = Product's ID (i.e. SalesProduct.PartNumber) if (null != productDetails && productDetails.Length > 0) { primaryAssetInventoryModel.Type = productDetails[0]; } else { _log.Warning("invtype_label is not valid for primary asset."); } if (details.Length > 1) { primaryAssetInventoryModel.SerialNumber = details[1]; //model = Serial Number } } break; case "Case_Note": workOrderModel.SetPropertyValue("XA_CASE_NOTES", field.DataValue.Value.ToString()); break; case "Cancel_Reason": workOrderModel.CancelReason = field.DataValue.Value.ToString(); break; case "Contact": if (contact != null) { workOrderModel.CustomerNumber = contact.ID.ToString(); _log.Notice("WorkOrder Contact ID:" + contact.ID.ToString()); workOrderModel.Name = contact.NameFirst + " " + contact.NameLast; } break; case "Contact_City": workOrderModel.City = field.DataValue.Value.ToString(); break; case "Contact_Email": workOrderModel.EmailAddress = field.DataValue.Value.ToString(); break; case "Contact_Mobile_Phone": workOrderModel.MobileNumber = field.DataValue.Value.ToString(); break; case "Contact_Phone": workOrderModel.PhoneNumber = field.DataValue.Value.ToString(); break; case "Contact_Postal_Code": workOrderModel.ZipCode = field.DataValue.Value.ToString(); break; case "Contact_Province_State": int province_id = (Int32)field.DataValue.Value; string name = RightNowConnectService.GetService().GetProvinceName(province_id); if (name != null) { workOrderModel.State = name; } break; case "Contact_Street": workOrderModel.Address = field.DataValue.Value.ToString(); break; case "Duration": if (null == field.DataValue.Value) { if (workordertype[1].Equals("1")) { workOrderModel.Duration = workordertype[2]; } _log.Notice("WorkOrder Duration :" + workOrderModel.Duration); } else { workOrderModel.Duration = field.DataValue.Value.ToString(); _log.Notice("WorkOrder Duration :" + workOrderModel.Duration); } break; case "Reminder_Time": if (null != field.DataValue.Value) { int id = Convert.ToInt32(field.DataValue.Value); string[] remindertime1 = RightNowConnectService.GetService().GetReminder_TimeFromID(id); workOrderModel.ReminderTime = Convert.ToInt32(remindertime1[0]); } break; case "Requested_Service_End": workOrderModel.ServiceWindowEnd = field.DataValue.Value.ToString(); break; case "Requested_Service_Start": workOrderModel.ServiceWindowStart = field.DataValue.Value.ToString(); break; case "Resolution_Due": workOrderModel.SlaWindowEnd = Convert.ToDateTime(field.DataValue.Value); break; case "WO_Area": workOrderModel.ExternalId = field.DataValue.Value.ToString(); break; case "WO_Date": workOrderModel.AssignedDate = ((DateTime)field.DataValue.Value).ToString("yyyy-MM-dd"); break; case "WO_Status": //Set it for each handler and not in generic code. break; case "WO_Time_Slot": workOrderModel.TimeSlot = field.DataValue.Value.ToString(); break; case "WO_Type": workOrderModel.WorkType = workordertype[0]; break; } } } //Set Duration if (workOrderModel.Duration == null) { if (workordertype[1].Equals("1")) { workOrderModel.Duration = workordertype[2]; } _log.Notice("WorkOrder Duration :" + workOrderModel.Duration); } // Set Cancel Activity if (workOrderModel.CancelReason != null && !workOrderModel.CancelReason.Trim().Equals("")) { workOrderModel.CommandType = Client.Common.ActivityCommandType.Cancel; } else // Set Update Activity { workOrderModel.Status = Client.Common.ActivityStatus.Pending; workOrderModel.CommandType = Client.Common.ActivityCommandType.Update; } _log.Notice("WorOrder Command Type is set as " + ToaStringsUtil.GetString(workOrderModel.CommandType)); workOrderModel.SetActionIfCompleted = Client.Common.ActionIfCompleted.CreateIfAssignOrReschedule; //TODO UnComment below code SetInventoryModel(workOrderModel, workOrder.Id, primaryAssetInventoryModel, workorderTypeId); } return(workOrderModel); }