/// <summary> /// Initializes a new instance of the <see cref="PayorCoverageCache"/> class. /// </summary> /// <param name="patient">The patient.</param> /// <param name="payorCache">The payor cache.</param> /// <param name="effectiveDateRange">The effective date range.</param> /// <param name="memberNumber">The member number.</param> /// <param name="payorSubscriber">The payor subscriber.</param> /// <param name="payorCoverageCacheType">Type of the payor coverage cache.</param> protected internal PayorCoverageCache( Patient patient, PayorCache payorCache, DateRange effectiveDateRange, string memberNumber, PayorSubscriberCache payorSubscriber, PayorCoverageCacheType payorCoverageCacheType ) { Patient = patient; PayorCache = payorCache; EffectiveDateRange = effectiveDateRange; MemberNumber = memberNumber; PayorSubscriberCache = payorSubscriber; PayorCoverageCacheType = payorCoverageCacheType; }
/// <summary> /// Creates the payor coverage. /// </summary> /// <param name="patient">The patient.</param> /// <param name="payorCache">The payor cache.</param> /// <param name="effectiveDateRange">The effective date range.</param> /// <param name="memberNumber">The member number.</param> /// <param name="payorSubscriberCache">The payor subscriber cache.</param> /// <param name="payorCoverageCacheType">Type of the payor coverage cache.</param> /// <returns>A Payor coverage cache.</returns> public PayorCoverageCache CreatePayorCoverage( Patient patient, PayorCache payorCache, DateRange effectiveDateRange, string memberNumber, PayorSubscriberCache payorSubscriberCache, PayorCoverageCacheType payorCoverageCacheType ) { var payorCoverage = new PayorCoverageCache ( patient, payorCache, effectiveDateRange, memberNumber, payorSubscriberCache, payorCoverageCacheType ); PayorCoverageCache createdPayorCoverage = null; DomainRuleEngine.CreateRuleEngine(payorCoverage, "CreatePayorCoverageRuleSet") .WithContext ( payorCoverage.PayorCoverageCacheType ) .WithContext ( payorCoverage.EffectiveDateRange ) .Execute(() => { createdPayorCoverage = payorCoverage; _payorCoverageCacheRepository.MakePersistent(payorCoverage); }); return createdPayorCoverage; }
/// <summary> /// Revises the payor subscriber cache. /// </summary> /// <param name="payorSubscriberCache">The payor subscriber cache.</param> public virtual void RevisePayorSubscriberCache( PayorSubscriberCache payorSubscriberCache ) { PayorSubscriberCache = payorSubscriberCache; }
/// <summary> /// Handles the specified request. /// </summary> /// <param name="request">The request.</param> /// <returns>A <see cref="Agatha.Common.Response"/></returns> public override Response Handle(SaveDtoRequest <PayorCoverageCacheDto> request) { var requestDto = request.DataTransferObject; DomainEvent.Register <RuleViolationEvent> (failure => _validationFailureOccurred = true); LogicalTreeWalker.Walk <IDataTransferObject> (requestDto, dto => dto.ClearAllDataErrorInfo()); var response = CreateTypedResponse(); if (requestDto.EditStatus == EditStatus.Create || requestDto.EditStatus == EditStatus.Update) { var patient = _patientRepository.GetByKeyOrThrow(requestDto.PatientKey, "Patient"); var payorCache = _payorCacheRepository.GetByKeyOrThrow(requestDto.PayorCache.Key, "Payor"); var effectiveDateRange = new DateRange(requestDto.StartDate, requestDto.EndDate); var payorCoverageCacheType = _mappingHelper.MapLookupField <PayorCoverageCacheType> (requestDto.PayorCoverageCacheType); var countyArea = _mappingHelper.MapLookupField <CountyArea> (requestDto.PayorSubscriberCache.Address.CountyArea); var stateProvince = _mappingHelper.MapLookupField <StateProvince> (requestDto.PayorSubscriberCache.Address.StateProvince); var country = _mappingHelper.MapLookupField <Country> (requestDto.PayorSubscriberCache.Address.Country); var address = new Address( requestDto.PayorSubscriberCache.Address.FirstStreetAddress, requestDto.PayorSubscriberCache.Address.SecondStreetAddress, requestDto.PayorSubscriberCache.Address.CityName, countyArea, stateProvince, country, new PostalCode(requestDto.PayorSubscriberCache.Address.PostalCode)); var gender = _mappingHelper.MapLookupField <AdministrativeGender>(requestDto.PayorSubscriberCache.AdministrativeGender); var patientName = new PersonNameBuilder() .WithFirst(requestDto.PayorSubscriberCache.FirstName) .WithMiddle(requestDto.PayorSubscriberCache.MiddleName) .WithLast(requestDto.PayorSubscriberCache.LastName); var payorSubscriberRelationshipCacheType = _mappingHelper.MapLookupField <PayorSubscriberRelationshipCacheType> (requestDto.PayorSubscriberCache.PayorSubscriberRelationshipCacheType); var payorSubscriberCache = new PayorSubscriberCache( address, requestDto.PayorSubscriberCache.BirthDate, gender, patientName, payorSubscriberRelationshipCacheType); PayorCoverageCache payorCoverageCache; if (requestDto.EditStatus == EditStatus.Create) { payorCoverageCache = _payorCoverageCacheFactory.CreatePayorCoverage( patient, payorCache, effectiveDateRange, requestDto.MemberNumber, payorSubscriberCache, payorCoverageCacheType); } else { payorCoverageCache = _payorCoverageCacheRepository.GetByKeyOrThrow(requestDto.Key, "Payor"); payorCoverageCache.RevisePayorCoverageCacheInfo(payorCoverageCacheType, effectiveDateRange, requestDto.MemberNumber); payorCoverageCache.RevisePayorCache(payorCache); payorCoverageCache.RevisePayorSubscriberCache(payorSubscriberCache); } response.DataTransferObject = payorCoverageCache == null ? requestDto : Mapper.Map <PayorCoverageCache, PayorCoverageCacheDto>(payorCoverageCache); } else if (requestDto.EditStatus == EditStatus.Delete) { var payorCoverageCache = _payorCoverageCacheRepository.GetByKey(requestDto.Key); if (payorCoverageCache != null) { _payorCoverageCacheFactory.DestroyPayorCoverage(payorCoverageCache); } response.DataTransferObject = requestDto; } else { var payorCoverageCache = _payorCoverageCacheRepository.GetByKeyOrThrow(requestDto.Key, "Payor"); response.DataTransferObject = Mapper.Map <PayorCoverageCache, PayorCoverageCacheDto>(payorCoverageCache); } var processSucceeded = !_validationFailureOccurred; if (processSucceeded) { Session.Flush(); Session.Clear(); } else { if (requestDto.EditStatus == EditStatus.Create) { response.DataTransferObject.Key = 0; } } return(response); }