Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #4
0
        /// <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");
                }
            });
        }
Beispiel #5
0
        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;
                        }
                    }
                }
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
        }