public HL7V2Controller(IBusinessEngine IBusinessEngine, IBusinessEngineInput IBusinessEngineInput, IOptions <IcimsSiteContext> IcimsSiteContext, IBusinessEngineOutcome IBusinessOutcomeError, ILogger <HL7V2Controller> ILogger) { this.IBusinessEngine = IBusinessEngine; this.IBusinessEngineInput = IBusinessEngineInput; this.IcimsSiteContext = IcimsSiteContext; this.IBusinessOutcomeError = IBusinessOutcomeError; this.ILogger = ILogger; }
public IBusinessEngineOutcome Process(IBusinessEngineInput BusinessEngineInput) { //ILogger.LogDebug("### ANGUS TEST ####"); //Parse the V2 Message try { Msg = Creator.Message(BusinessEngineInput.HL7V2Message); } catch (Exception Exec) { IBusinessOutcome.StatusCode = StatusCode.error; IBusinessOutcome.Message = Exec.Message; return(IBusinessOutcome); } //Check it is an ADT message type if (Msg.MessageType != "ADT") { IBusinessOutcome.StatusCode = StatusCode.error; IBusinessOutcome.Message = $"Only message types of ADT are supported by the {IcimsSiteContext.Value.NameOfThisService}. The message type received was {Msg.MessageType}"; return(IBusinessOutcome); } DomainModel = new DomainModel(); DomainModel.HL7Message.MessageControlId = Msg.MessageControlID; DomainModel.HL7Message.MessageDateTime = Msg.MessageCreationDateTime; switch (Msg.MessageTrigger) { case "A04": if (AddProcessing()) { Common.Models.IcimsInterface.Add Add = IIcimsInterfaceModelMapper.MapToAdd(DomainModel); Task <IIcimsHttpClientOutcome> IcimsHttpCleintTaskResult = IIcimsHttpClient.PostAddAsync(Add.GetValueDictionary()); IcimsHttpCleintTaskResult.Wait(); IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result; IBusinessOutcome.StatusCode = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome); IBusinessOutcome.Message = IcimsHttpClientOutcome.Message; IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse; } break; case "A08": if (UpdateProcessing()) { Common.Models.IcimsInterface.Update Update = IIcimsInterfaceModelMapper.MapToUpdate(DomainModel); Task <IIcimsHttpClientOutcome> IcimsHttpCleintTaskResult = IIcimsHttpClient.PostUpdateAsync(Update.GetValueDictionary()); IcimsHttpCleintTaskResult.Wait(); IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result; IBusinessOutcome.StatusCode = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome); IBusinessOutcome.Message = IcimsHttpClientOutcome.Message; IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse; } break; case "A40": if (MergeProcessing()) { Common.Models.IcimsInterface.Merge Merge = IIcimsInterfaceModelMapper.MapToMerge(DomainModel); Task <IIcimsHttpClientOutcome> IcimsHttpCleintTaskResult = IIcimsHttpClient.PostMergeAsync(Merge.GetValueDictionary()); IcimsHttpCleintTaskResult.Wait(); IIcimsHttpClientOutcome IcimsHttpClientOutcome = IcimsHttpCleintTaskResult.Result; IBusinessOutcome.StatusCode = SetMirthStatusBasedOnHttpClientResponse(IcimsHttpClientOutcome); IBusinessOutcome.Message = IcimsHttpClientOutcome.Message; IBusinessOutcome.IcimsResponse = IcimsHttpClientOutcome.IcimsResponse; } break; default: IBusinessOutcome.StatusCode = StatusCode.error; IBusinessOutcome.Message = $"Only ADT message of event types A04. A08 and A40 are supported by the {IcimsSiteContext.Value.NameOfThisService}. The message event received was {Msg.MessageTrigger}"; IBusinessOutcome.IcimsResponse = null; return(IBusinessOutcome); } return(IBusinessOutcome); }