private Data GenerateAlarmRequest(CloseAlarmRequest request) { //hook this up to the duncan web service to create the event //create the request var dataRequest = new Data { Request = new DataRequest { ActiveAlarms = new DataRequestActiveAlarms[1] } }; dataRequest.Request.ActiveAlarms[0] = new DataRequestActiveAlarms { TimeOfNotification = request.LocalTime, TimeOfNotificationSpecified = true, ActiveAlarm = new DataRequestActiveAlarmsActiveAlarm[1] }; dataRequest.Request.ActiveAlarms[0].ActiveAlarm[0] = new DataRequestActiveAlarmsActiveAlarm { cid = request.CustomerId.ToString(), aid = request.AreaId.ToString(), mid = request.AssetId.ToString(), EventUID = request.EventUID.ToString(), EventCode = request.EventCode.ToString() }; return(dataRequest); }
/// <summary> /// Update the status of each event to be "Rejected" WorkOrderEventStatus.Rejected /// </summary> /// <param name="eventIds"></param> public void ResolveEvents(long[] eventIds, DateTime localTime, bool vandalism = false) { if (eventIds == null) { return; } //for each event, set the status to closed., as they are closing out individual events on a work order if (eventIds.Any()) { var webServiceFactory = new WebServiceFactory(); foreach (var eventId in eventIds) { var fmworkOrderEvent = MaintenanceEntities.FMWorkOrderEvents.FirstOrDefault(x => x.WorkOrderEventId == eventId); if (fmworkOrderEvent != null) { fmworkOrderEvent.Vandalism = vandalism; //now that we have closed them on our side, we need to close them on Duncans side, so for each event, send the request off to duncan to close this alarm as well. //create the event via the web service factory. //create the close Alarm Request object to pass to the web services var closeAlarmRequest = new CloseAlarmRequest { AreaId = fmworkOrderEvent.WorkOrder.AreaId, AssetId = fmworkOrderEvent.WorkOrder.MeterId, CustomerId = fmworkOrderEvent.WorkOrder.CustomerId, EventCode = fmworkOrderEvent.EventCode, EventUID = fmworkOrderEvent.EventId, LocalTime = localTime, }; var closeAlarmResponse = webServiceFactory.CloseAlarm(closeAlarmRequest); //set the status and if there were errors, report them //first, check to see if it is valid. if it is, then if (closeAlarmResponse.Closed) { fmworkOrderEvent.Status = (int)WorkOrderEventStatus.Closed; } else { fmworkOrderEvent.Status = (int)WorkOrderEventStatus.Open; var eventResource = (new ResourceFactory()).GetLocalizedTitle(ResourceTypes.Glossary, "Event(s) not closed:"); if (string.IsNullOrEmpty(ErrorMessage)) { ErrorMessage = string.Format(eventResource + " {0}", fmworkOrderEvent.WorkOrderEventId); } else { ErrorMessage += string.Format(", {0}", fmworkOrderEvent.WorkOrderEventId); } } } } MaintenanceEntities.SaveChanges(); } }
/// <summary> /// Closes the alarm on Duncan sside and returns a response if it was successful or not /// </summary> /// <param name="request"></param> /// <returns></returns> public CloseAlarmResponse CloseAlarm(CloseAlarmRequest request) { //fix up the response with some default values var alarmResponse = new CloseAlarmResponse { IsValid = false }; var dataRequest = GenerateAlarmRequest(request); //now that we have our data request, we need to send it to duncan and get the response. string strUrl = ConfigurationManager.AppSettings[Constants.FieldMaintenance.WebServiceCloseAlarmName]; var serializedDataRequest = Serialize(dataRequest); if (string.IsNullOrEmpty(serializedDataRequest)) { return(alarmResponse); } byte[] dataByte = StringToByteArray(serializedDataRequest); var response = PostRequest(strUrl, dataByte); return(GetAlarmResponse(response, alarmResponse)); }