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; }
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; } } } } }
private void SetInventoryModel(WorkOrderModel workOrderModel, int workOrderId, InventoryModel primaryAssetInventoryModel, int workOrderType) { List<InventoryModel> InventoryModelList = new List<InventoryModel>(); if (null != primaryAssetInventoryModel && null != primaryAssetInventoryModel.Type) { InventoryModelList.Add(primaryAssetInventoryModel); _log.Notice("WorkOrder Primary Asset Type :" + primaryAssetInventoryModel.Type); } //adding asset inventory model into workorder. if (InventoryModelList.Count > 0) { workOrderModel.ActivityInventories = InventoryModelList; } //Adding work Order Type Inventory into Required Inventory List List<RequiredInventoryModel> RequiredInventoryModelList = new List<RequiredInventoryModel>(); //string salesProductQuery = String.Format("select Quantity, Serial_Number, WO_Inventory from TOA.WO_Type_Inventory where Work_Order_Type = {0}", workOrderModel.WorkType); string[] workOrder_type_inventories = RightNowConnectService.GetService().GetRequiredInventoryDetailsFromWorkOrderType(workOrderType); if (workOrder_type_inventories != null) { foreach (string workOrder_type_inventory in workOrder_type_inventories) { string[] details = workOrder_type_inventory.Split('|'); RequiredInventoryModel reqInventoryModel = new RequiredInventoryModel(); reqInventoryModel.Quantity = details[1]; //Quantity = Quantity reqInventoryModel.Model = details[2]; //model = Model string[] productDetails = RightNowConnectService.GetService().GetProductDetailsFromProductID(details[0]);//Type = Product's ID (i.e. SalesProduct.PartNumber) if (null != productDetails && productDetails.Length > 0) { reqInventoryModel.Type = productDetails[0]; } else { _log.Warning("invtype_label is not valid for required inventory."); } RequiredInventoryModelList.Add(reqInventoryModel); _log.Notice("Adding WorkOrder Required Inventory with ID :" + workOrderId); } } if (RequiredInventoryModelList.Count > 0) { workOrderModel.RequiredInventories = RequiredInventoryModelList; } }