Exemplo n.º 1
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");
                }
            });
        }
Exemplo n.º 2
0
        public int?ProcessInboundResult(ToaRequestResult inboundResult)
        {
            int?aid = null;
            HashSet <string> errors           = new HashSet <string>();
            bool             ErrorDialogShown = false;

            {
                if (inboundResult.DataModels.Count > 0)
                {
                    WorkOrderModel workOrderModel  = null;
                    List <IToaModel> .Enumerator e = inboundResult.DataModels.GetEnumerator();
                    while (e.MoveNext())
                    {
                        IToaModel model = e.Current;
                        if (model is WorkOrderModel)
                        {
                            workOrderModel = (WorkOrderModel)model;

                            foreach (ReportMessageModel reportMessage in workOrderModel.ReportMessages)
                            {
                                if (!reportMessage.Code.Equals(ActivityProperty.TOA_Report_Success_Code))
                                {
                                    errors.Add(reportMessage.Code);
                                    _log.Error(reportMessage.Code, reportMessage.Description);
                                }
                            }

                            List <InventoryModel> inventories = workOrderModel.ActivityInventories;
                            if (null != inventories && inventories.Count > 0)
                            {
                                foreach (InventoryModel inventory in inventories)
                                {
                                    List <ReportMessageModel> reportMessages = inventory.ReportMessages;
                                    foreach (ReportMessageModel reportMessage in reportMessages)
                                    {
                                        if (!reportMessage.Code.Equals(ActivityProperty.TOA_Report_Success_Code))
                                        {
                                            errors.Add(reportMessage.Code);
                                            _log.Error(reportMessage.Code, reportMessage.Description);
                                        }
                                    }
                                }
                            }

                            foreach (string errorcode in errors)
                            {
                                if (!ErrorDialogShown)
                                {
                                    ShowErrorOrWarningDialog(errorcode);
                                    ErrorDialogShown = true;
                                }

                                if (ErrorsNotToSave.Contains(errorcode))
                                {
                                    return(null);
                                }
                            }

                            aid = workOrderModel.TOA_AID;
                        }
                    }
                }
            }
            return(aid);
        }
Exemplo n.º 3
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;
                        }
                    }
                }
            }
        }
Exemplo n.º 4
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);
            }
        }