Ejemplo n.º 1
0
        protected ExternalPractitioner AddPractitioner(string practitionerId, string givenName, string familyName)
        {
            var practitioner = GetPractitioner(practitionerId);

            if (practitioner != null)
            {
                return(practitioner);
            }
            if (practitionerId == null || givenName == null || familyName == null)
            {
                throw new Exception("Practitioner is not valid");
            }

            var addedPractitioner = new ExternalPractitioner
            {
                LicenseNumber = practitionerId,
                Name          = { FamilyName = familyName, GivenName = givenName }
            };

            addedPractitioner.ExtendedProperties.Add("Comment", "HL7");
            var contactPoint = new ExternalPractitionerContactPoint(addedPractitioner)
            {
                IsDefaultContactPoint = true,
                Name        = "Default",
                Description = "HL7"
            };

            PersistenceContext.Lock(addedPractitioner, DirtyState.New);
            PersistenceContext.Lock(contactPoint, DirtyState.New);
            return(addedPractitioner);
        }
			/// <summary>
			/// Add an address to a contact point with the specified city and province.
			/// </summary>
			public static Address AddAddress(ExternalPractitionerContactPoint cp, 
				string city, string province)
			{
				var address = new Address {City = city, Province = province};
				cp.Addresses.Add(address);
				return address;
			}
Ejemplo n.º 3
0
        private long EstimateAffectedRecords(ExternalPractitionerContactPoint right, ExternalPractitionerContactPoint left)
        {
            var rightOrderCount = QueryOrders <long>(new[] { right }, PersistenceContext.GetBroker <IOrderBroker>().CountByResultRecipient);
            var leftOrderCount  = QueryOrders <long>(new[] { left }, PersistenceContext.GetBroker <IOrderBroker>().CountByResultRecipient);

            // number of contact point referneces that must be updated
            return(rightOrderCount + leftOrderCount);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="report"></param>
        /// <param name="recipient"></param>
        public ReportPageModel(Report report, ExternalPractitionerContactPoint recipient)
            : base(new PrintTemplateSettings().ReportTemplateUrl)
        {
            Platform.CheckForNullReference(report, "report");
            Platform.CheckForNullReference(recipient, "recipient");

            _report    = report;
            _recipient = recipient;
        }
Ejemplo n.º 5
0
            /// <summary>
            /// Add an address to a contact point with the specified city and province.
            /// </summary>
            public static Address AddAddress(ExternalPractitionerContactPoint cp,
                                             string city, string province)
            {
                var address = new Address {
                    City = city, Province = province
                };

                cp.Addresses.Add(address);
                return(address);
            }
Ejemplo n.º 6
0
            /// <summary>
            /// Add a telephone number to a contact point with the specified area code and number.
            /// </summary>
            public static TelephoneNumber AddTelephoneNumber(ExternalPractitionerContactPoint cp,
                                                             string areaCode, string number)
            {
                var telephone = new TelephoneNumber {
                    AreaCode = areaCode, Number = number
                };

                cp.TelephoneNumbers.Add(telephone);
                return(telephone);
            }
Ejemplo n.º 7
0
            /// <summary>
            /// Add an email address to a contact point.
            /// </summary>
            public static EmailAddress AddEmailAddress(ExternalPractitionerContactPoint cp,
                                                       string address)
            {
                var email = new EmailAddress {
                    Address = address
                };

                cp.EmailAddresses.Add(email);
                return(email);
            }
			/// <summary>
			/// Add a contact point to a practitioner with the specified name and description.
			/// </summary>
			/// <remarks>
			/// No telephone/address/emails are added to the new contact point
			/// </remarks>
			public static ExternalPractitionerContactPoint AddContactPoint(ExternalPractitioner p, string name, string description)
			{
				var isDefault = p.ContactPoints.Count == 0;
				var cp = new ExternalPractitionerContactPoint(p,
					name, description, 
					ResultCommunicationMode.ANY, null, isDefault,
					new List<TelephoneNumber>(),
					new List<Address>(),
					new List<EmailAddress>(), null);

				p.ContactPoints.Add(cp);

				return cp;
			}
Ejemplo n.º 9
0
            /// <summary>
            /// Add a contact point to a practitioner with the specified name and description.
            /// </summary>
            /// <remarks>
            /// No telephone/address/emails are added to the new contact point
            /// </remarks>
            public static ExternalPractitionerContactPoint AddContactPoint(ExternalPractitioner p, string name, string description)
            {
                var isDefault = p.ContactPoints.Count == 0;
                var cp        = new ExternalPractitionerContactPoint(p,
                                                                     name, description,
                                                                     ResultCommunicationMode.ANY, null, isDefault,
                                                                     new List <TelephoneNumber>(),
                                                                     new List <Address>(),
                                                                     new List <EmailAddress>(), null);

                p.ContactPoints.Add(cp);

                return(cp);
            }
        public void UpdateExternalPractitioner(ExternalPractitionerDetail detail, ExternalPractitioner prac, IPersistenceContext context)
        {
            // validate that only one contact point is specified as default
            var defaultPoints = CollectionUtils.Select(detail.ContactPoints, cp => cp.IsDefaultContactPoint);

            if (defaultPoints.Count > 1)
            {
                throw new RequestValidationException(SR.ExceptionOneDefaultContactPoint);
            }

            var assembler = new PersonNameAssembler();

            assembler.UpdatePersonName(detail.Name, prac.Name);

            prac.LicenseNumber = detail.LicenseNumber;
            prac.BillingNumber = detail.BillingNumber;
            prac.MarkDeactivated(detail.Deactivated);

            // update contact points collection
            var syncHelper = new CollectionSynchronizeHelper <ExternalPractitionerContactPoint, ExternalPractitionerContactPointDetail>(
                delegate(ExternalPractitionerContactPoint cp, ExternalPractitionerContactPointDetail cpDetail)
            {
                // ignore version in this comparison - deal with this issue in the update delegate
                return(cp.GetRef().Equals(cpDetail.ContactPointRef, true));
            },
                delegate(ExternalPractitionerContactPointDetail cpDetail, ICollection <ExternalPractitionerContactPoint> cps)
            {
                // create a new contact point
                var cp = new ExternalPractitionerContactPoint(prac);
                UpdateExternalPractitionerContactPoint(cpDetail, cp, context);
                cps.Add(cp);
            },
                (cp, cpDetail, cps) => UpdateExternalPractitionerContactPoint(cpDetail, cp, context),
                (cp, cps) => cps.Remove(cp));

            syncHelper.Synchronize(prac.ContactPoints, detail.ContactPoints);

            ExtendedPropertyUtils.Update(prac.ExtendedProperties, detail.ExtendedProperties);
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Performs a simple merge of two contact points.
 /// </summary>
 /// <remarks>
 /// Destination is the primary contact point.  The result will have all info inherit from destination.
 /// The Merge operation should clone/copy all the value collections.
 /// </remarks>
 public static ExternalPractitionerContactPoint SimpleMerge(ExternalPractitionerContactPoint src, ExternalPractitionerContactPoint dest)
 {
     return(ExternalPractitionerContactPoint.MergeContactPoints(src, dest,
                                                                dest.Name, dest.Description, dest.PreferredResultCommunicationMode, dest.InformationAuthority,
                                                                null, null, null));
 }
Ejemplo n.º 12
0
 internal PractitionerFacade(ExternalPractitioner practitioner, ExternalPractitionerContactPoint contactPoint)
 {
     _practitioner = practitioner;
     _contactPoint = contactPoint;
 }
Ejemplo n.º 13
0
			internal PractitionerFacade(ExternalPractitioner practitioner, ExternalPractitionerContactPoint contactPoint)
			{
				_practitioner = practitioner;
				_contactPoint = contactPoint;
			}
Ejemplo n.º 14
0
		public void UpdateExternalPractitionerContactPoint(ExternalPractitionerContactPointDetail detail, ExternalPractitionerContactPoint contactPoint, IPersistenceContext context)
		{
			contactPoint.Name = detail.Name;
			contactPoint.Description = detail.Description;
			contactPoint.IsDefaultContactPoint = detail.IsDefaultContactPoint;
			contactPoint.PreferredResultCommunicationMode = EnumUtils.GetEnumValue<ResultCommunicationMode>(detail.PreferredResultCommunicationMode);
			contactPoint.InformationAuthority = EnumUtils.GetEnumValue<InformationAuthorityEnum>(detail.InformationAuthority, context);
			contactPoint.MarkDeactivated(detail.Deactivated);

			var phoneAssembler = new TelephoneNumberAssembler();
			var addressAssembler = new AddressAssembler();
			var emailAddressAssembler = new EmailAddressAssembler();

			contactPoint.TelephoneNumbers.Clear();
			if (detail.TelephoneNumbers != null)
			{
				foreach (var phoneDetail in detail.TelephoneNumbers)
				{
					contactPoint.TelephoneNumbers.Add(phoneAssembler.CreateTelephoneNumber(phoneDetail));
				}
			}

			contactPoint.Addresses.Clear();
			if (detail.Addresses != null)
			{
				foreach (var addressDetail in detail.Addresses)
				{
					contactPoint.Addresses.Add(addressAssembler.CreateAddress(addressDetail));
				}
			}

			contactPoint.EmailAddresses.Clear();
			if (detail.EmailAddresses != null)
			{
				foreach (var emailAddressDetail in detail.EmailAddresses)
				{
					contactPoint.EmailAddresses.Add(emailAddressAssembler.CreateEmailAddress(emailAddressDetail));
				}
			}
		}
Ejemplo n.º 15
0
		public ExternalPractitionerContactPointSummary CreateExternalPractitionerContactPointSummary(ExternalPractitionerContactPoint contactPoint)
		{
			return new ExternalPractitionerContactPointSummary(contactPoint.GetRef(),
				contactPoint.Name,
				contactPoint.Description,
				contactPoint.IsDefaultContactPoint,
				contactPoint.IsMerged,
				contactPoint.Deactivated);
		}
			/// <summary>
			/// Performs a simple merge of two contact points.
			/// </summary>
			/// <remarks>
			/// Destination is the primary contact point.  The result will have all info inherit from destination.
			/// The Merge operation should clone/copy all the value collections.
			/// </remarks>
			public static ExternalPractitionerContactPoint SimpleMerge(ExternalPractitionerContactPoint src, ExternalPractitionerContactPoint dest)
			{
				return ExternalPractitionerContactPoint.MergeContactPoints(src, dest,
					dest.Name, dest.Description, dest.PreferredResultCommunicationMode, dest.InformationAuthority,
					null, null, null);
			}
			/// <summary>
			/// Add an email address to a contact point.
			/// </summary>
			public static EmailAddress AddEmailAddress(ExternalPractitionerContactPoint cp,
				string address)
			{
				var email = new EmailAddress { Address = address };
				cp.EmailAddresses.Add(email);
				return email;
			}
Ejemplo n.º 18
0
        /// <summary>
        /// Import external practitioner from CSV format.
        /// </summary>
        /// <param name="rows">
        /// Each string in the list must contain 25 CSV fields, as follows:
        ///     0 - FamilyName
        ///     1 - GivenName
        ///     2 - MiddleName
        ///     3 - Prefix
        ///     4 - Suffix
        ///     5 - Degree
        ///     6 - LicenseNumber
        ///     7 - BillingNumber
        ///     8 - Street
        ///     9 - Unit
        ///     10 - City
        ///     11 - Province
        ///     12 - PostalCode
        ///     13 - Country
        ///     14 - ValidFrom
        ///     15 - ValidUntil
        ///     16 - Phone CountryCode
        ///     17 - Phone AreaCode
        ///     18 - Phone Number
        ///     19 - Phone Extension
        ///     20 - ValidFrom
        ///     21 - ValidUntil
        ///     22 - Fax CountryCode
        ///     23 - Fax AreaCode
        ///     24 - Fax Number
        ///     25 - Fax Extension
        ///     26 - ValidFrom
        ///     27 - ValidUntil
        /// </param>
        /// <param name="context"></param>
        public override void Import(List <string> rows, IUpdateContext context)
        {
            _context = context;

            var importedEPs = new List <ExternalPractitioner>();
            var validator   = new DomainObjectValidator();

            foreach (var row in rows)
            {
                var fields = ParseCsv(row, _numFields);

                var epFamilyName = fields[0];
                var epGivenName  = fields[1];
                var epMiddlename = fields[2];
                var epPrefix     = fields[3];
                var epSuffix     = fields[4];
                var epDegree     = fields[5];

                var epLicense       = fields[6];
                var epBillingNumber = fields[7];

                var addressStreet     = fields[8];
                var addressUnit       = fields[9];
                var addressCity       = fields[10];
                var addressProvince   = fields[11];
                var addressPostalCode = fields[12];
                var addressCountry    = fields[13];

                var addressValidFrom  = ParseDateTime(fields[14]);
                var addressValidUntil = ParseDateTime(fields[15]);

                var phoneCountryCode = fields[16];
                var phoneAreaCode    = fields[17];
                var phoneNumber      = fields[18];
                var phoneExtension   = fields[19];
                var phoneValidFrom   = ParseDateTime(fields[20]);
                var phoneValidUntil  = ParseDateTime(fields[21]);

                var faxCountryCode = fields[22];
                var faxAreaCode    = fields[23];
                var faxNumber      = fields[24];
                var faxExtension   = fields[25];
                var faxValidFrom   = ParseDateTime(fields[26]);
                var faxValidUntil  = ParseDateTime(fields[27]);


                ExternalPractitioner ep = GetExternalPracitioner(epLicense, importedEPs);

                if (ep != null)
                {
                    continue;
                }

                ep = new ExternalPractitioner {
                    LicenseNumber = epLicense, BillingNumber = epBillingNumber
                };
                ep.Name = new PersonName(epFamilyName, epGivenName, epMiddlename, epPrefix, epSuffix, epDegree);

                // create a single default contact point
                var contactPoint = new ExternalPractitionerContactPoint(ep)
                {
                    Name = "Default", IsDefaultContactPoint = true
                };

                try
                {
                    var epAddress = new Address(
                        addressStreet,
                        addressUnit,
                        addressCity,
                        addressProvince,
                        addressPostalCode,
                        addressCountry,
                        AddressType.B,
                        new DateTimeRange(addressValidFrom, addressValidUntil));
                    validator.Validate(epAddress);
                    contactPoint.Addresses.Add(epAddress);
                }
                catch (EntityValidationException)
                {
                    /* invalid address - ignore */
                }

                try
                {
                    var epTelephone = new TelephoneNumber(
                        phoneCountryCode,
                        phoneAreaCode,
                        phoneNumber,
                        phoneExtension,
                        TelephoneUse.WPN,
                        TelephoneEquipment.PH,
                        new DateTimeRange(phoneValidFrom, phoneValidUntil));

                    validator.Validate(epTelephone);
                    contactPoint.TelephoneNumbers.Add(epTelephone);
                }
                catch (EntityValidationException)
                {
                    /* invalid phone - ignore */
                }

                try
                {
                    var epFax = new TelephoneNumber(
                        faxCountryCode,
                        faxAreaCode,
                        faxNumber,
                        faxExtension,
                        TelephoneUse.WPN,
                        TelephoneEquipment.FX,
                        new DateTimeRange(faxValidFrom, faxValidUntil));

                    validator.Validate(epFax);
                    contactPoint.TelephoneNumbers.Add(epFax);
                }
                catch (EntityValidationException)
                {
                    /* invalid fax - ignore */
                }

                _context.Lock(ep, DirtyState.New);

                importedEPs.Add(ep);
            }
        }
        public void UpdateExternalPractitionerContactPoint(ExternalPractitionerContactPointDetail detail, ExternalPractitionerContactPoint contactPoint, IPersistenceContext context)
        {
            contactPoint.Name                             = detail.Name;
            contactPoint.Description                      = detail.Description;
            contactPoint.IsDefaultContactPoint            = detail.IsDefaultContactPoint;
            contactPoint.PreferredResultCommunicationMode = EnumUtils.GetEnumValue <ResultCommunicationMode>(detail.PreferredResultCommunicationMode);
            contactPoint.InformationAuthority             = EnumUtils.GetEnumValue <InformationAuthorityEnum>(detail.InformationAuthority, context);
            contactPoint.MarkDeactivated(detail.Deactivated);

            var phoneAssembler        = new TelephoneNumberAssembler();
            var addressAssembler      = new AddressAssembler();
            var emailAddressAssembler = new EmailAddressAssembler();

            contactPoint.TelephoneNumbers.Clear();
            if (detail.TelephoneNumbers != null)
            {
                foreach (var phoneDetail in detail.TelephoneNumbers)
                {
                    contactPoint.TelephoneNumbers.Add(phoneAssembler.CreateTelephoneNumber(phoneDetail));
                }
            }

            contactPoint.Addresses.Clear();
            if (detail.Addresses != null)
            {
                foreach (var addressDetail in detail.Addresses)
                {
                    contactPoint.Addresses.Add(addressAssembler.CreateAddress(addressDetail));
                }
            }

            contactPoint.EmailAddresses.Clear();
            if (detail.EmailAddresses != null)
            {
                foreach (var emailAddressDetail in detail.EmailAddresses)
                {
                    contactPoint.EmailAddresses.Add(emailAddressAssembler.CreateEmailAddress(emailAddressDetail));
                }
            }
        }
        public ExternalPractitionerContactPointDetail CreateExternalPractitionerContactPointDetail(ExternalPractitionerContactPoint contactPoint,
                                                                                                   IPersistenceContext context)
        {
            var telephoneNumberAssembler = new TelephoneNumberAssembler();
            var addressAssembler         = new AddressAssembler();
            var emailAddressAssembler    = new EmailAddressAssembler();

            var currentPhone        = contactPoint.CurrentPhoneNumber;
            var currentFax          = contactPoint.CurrentFaxNumber;
            var currentAddress      = contactPoint.CurrentAddress;
            var currentEmailAddress = contactPoint.CurrentEmailAddress;

            return(new ExternalPractitionerContactPointDetail(
                       contactPoint.GetRef(),
                       contactPoint.Name,
                       contactPoint.Description,
                       contactPoint.IsDefaultContactPoint,
                       EnumUtils.GetEnumValueInfo(contactPoint.PreferredResultCommunicationMode, context),
                       EnumUtils.GetEnumValueInfo(contactPoint.InformationAuthority),
                       CollectionUtils.Map(contactPoint.TelephoneNumbers, (TelephoneNumber phone) => telephoneNumberAssembler.CreateTelephoneDetail(phone, context)),
                       CollectionUtils.Map(contactPoint.Addresses, (Address address) => addressAssembler.CreateAddressDetail(address, context)),
                       CollectionUtils.Map(contactPoint.EmailAddresses, (EmailAddress emailAddress) => emailAddressAssembler.CreateEmailAddressDetail(emailAddress, context)),
                       currentPhone == null ? null : telephoneNumberAssembler.CreateTelephoneDetail(currentPhone, context),
                       currentFax == null ? null : telephoneNumberAssembler.CreateTelephoneDetail(currentFax, context),
                       currentAddress == null ? null : addressAssembler.CreateAddressDetail(currentAddress, context),
                       currentEmailAddress == null ? null : emailAddressAssembler.CreateEmailAddressDetail(currentEmailAddress, context),
                       CreateExternalPractitionerContactPointSummary(contactPoint.GetUltimateMergeDestination()),
                       contactPoint.IsMerged,
                       contactPoint.Deactivated));
        }
 public ExternalPractitionerContactPointSummary CreateExternalPractitionerContactPointSummary(ExternalPractitionerContactPoint contactPoint)
 {
     return(new ExternalPractitionerContactPointSummary(contactPoint.GetRef(),
                                                        contactPoint.Name,
                                                        contactPoint.Description,
                                                        contactPoint.IsDefaultContactPoint,
                                                        contactPoint.IsMerged,
                                                        contactPoint.Deactivated));
 }
Ejemplo n.º 22
0
		/// <summary>
		/// Import external practitioner from CSV format.
		/// </summary>
		/// <param name="rows">
		/// Each string in the list must contain 25 CSV fields, as follows:
		///     0 - FamilyName
		///     1 - GivenName
		///     2 - MiddleName
		///     3 - Prefix
		///     4 - Suffix
		///     5 - Degree
		///     6 - LicenseNumber
		///     7 - BillingNumber
		///     8 - Street
		///     9 - Unit
		///     10 - City
		///     11 - Province
		///     12 - PostalCode
		///     13 - Country
		///     14 - ValidFrom
		///     15 - ValidUntil
		///     16 - Phone CountryCode
		///     17 - Phone AreaCode
		///     18 - Phone Number
		///     19 - Phone Extension
		///     20 - ValidFrom
		///     21 - ValidUntil
		///     22 - Fax CountryCode
		///     23 - Fax AreaCode
		///     24 - Fax Number
		///     25 - Fax Extension
		///     26 - ValidFrom
		///     27 - ValidUntil
		/// </param>
		/// <param name="context"></param>
		public override void Import(List<string> rows, IUpdateContext context)
		{
			_context = context;

			var  importedEPs = new List<ExternalPractitioner>();
			var validator = new DomainObjectValidator();

			foreach (var row in rows)
			{
				var fields = ParseCsv(row, _numFields);

				var epFamilyName = fields[0];
				var epGivenName = fields[1];
				var epMiddlename = fields[2];
				var epPrefix = fields[3];
				var epSuffix = fields[4];
				var epDegree = fields[5];

				var epLicense = fields[6];
				var epBillingNumber = fields[7];

				var addressStreet = fields[8];
				var addressUnit = fields[9];
				var addressCity = fields[10];
				var addressProvince = fields[11];
				var addressPostalCode = fields[12];
				var addressCountry = fields[13];

				var addressValidFrom = ParseDateTime(fields[14]);
				var addressValidUntil = ParseDateTime(fields[15]);

				var phoneCountryCode = fields[16];
				var phoneAreaCode = fields[17];
				var phoneNumber = fields[18];
				var phoneExtension = fields[19];
				var phoneValidFrom = ParseDateTime(fields[20]);
				var phoneValidUntil = ParseDateTime(fields[21]);

				var faxCountryCode = fields[22];
				var faxAreaCode = fields[23];
				var faxNumber = fields[24];
				var faxExtension = fields[25];
				var faxValidFrom = ParseDateTime(fields[26]);
				var faxValidUntil = ParseDateTime(fields[27]);


				ExternalPractitioner ep = GetExternalPracitioner(epLicense, importedEPs);

				if (ep != null)
					continue;

				ep = new ExternalPractitioner {LicenseNumber = epLicense, BillingNumber = epBillingNumber};
				ep.Name = new PersonName(epFamilyName, epGivenName, epMiddlename, epPrefix, epSuffix, epDegree);

				// create a single default contact point
				var contactPoint = new ExternalPractitionerContactPoint(ep) {Name = "Default", IsDefaultContactPoint = true};

				try
				{
					var epAddress = new Address(
						addressStreet,
						addressUnit,
						addressCity,
						addressProvince,
						addressPostalCode,
						addressCountry,
						AddressType.B,
						new DateTimeRange(addressValidFrom, addressValidUntil));
					validator.Validate(epAddress);
					contactPoint.Addresses.Add(epAddress);
				}
				catch(EntityValidationException)
				{
					/* invalid address - ignore */
				}

				try
				{
					var epTelephone = new TelephoneNumber(
						phoneCountryCode,
						phoneAreaCode,
						phoneNumber,
						phoneExtension,
						TelephoneUse.WPN,
						TelephoneEquipment.PH,
						new DateTimeRange(phoneValidFrom, phoneValidUntil));

					validator.Validate(epTelephone);
					contactPoint.TelephoneNumbers.Add(epTelephone);
				}
				catch (EntityValidationException)
				{
					/* invalid phone - ignore */
				}

				try
				{
					var epFax = new TelephoneNumber(
						faxCountryCode,
						faxAreaCode,
						faxNumber,
						faxExtension,
						TelephoneUse.WPN,
						TelephoneEquipment.FX,
						new DateTimeRange(faxValidFrom, faxValidUntil));

					validator.Validate(epFax);
					contactPoint.TelephoneNumbers.Add(epFax);
				}
				catch (EntityValidationException)
				{
					/* invalid fax - ignore */
				}

				_context.Lock(ep, DirtyState.New);

				importedEPs.Add(ep);
			}
		}
Ejemplo n.º 23
0
        public MergeDuplicateContactPointResponse MergeDuplicateContactPoint(MergeDuplicateContactPointRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.RetainedContactPointRef, "RetainedContactPointRef");
            Platform.CheckMemberIsSet(request.ReplacedContactPointRef, "ReplacedContactPointRef");

            var dest = PersistenceContext.Load <ExternalPractitionerContactPoint>(request.RetainedContactPointRef, EntityLoadFlags.Proxy);
            var src  = PersistenceContext.Load <ExternalPractitionerContactPoint>(request.ReplacedContactPointRef, EntityLoadFlags.Proxy);

            // if we are only doing a cost estimate, exit here without modifying any data
            if (request.EstimateCostOnly)
            {
                // compute cost estimate.  Need to include affected records of both src and dest, because both will be merged and deactivated.
                var cost = EstimateAffectedRecords(dest, src);
                return(new MergeDuplicateContactPointResponse(cost));
            }

            // combine all phone numbers and addresses, expiring those from the src object
            var allPhoneNumbers = CollectionUtils.Concat(
                CloneAndExpire(dest.TelephoneNumbers, tn => tn.ValidRange, false),
                CloneAndExpire(src.TelephoneNumbers, tn => tn.ValidRange, true));
            var allAddresses = CollectionUtils.Concat(
                CloneAndExpire(dest.Addresses, tn => tn.ValidRange, false),
                CloneAndExpire(src.Addresses, tn => tn.ValidRange, true));
            var allEmailAddresses = CollectionUtils.Concat(
                CloneAndExpire(dest.EmailAddresses, tn => tn.ValidRange, false),
                CloneAndExpire(src.EmailAddresses, tn => tn.ValidRange, true));

            // merge contact points
            var result = ExternalPractitionerContactPoint.MergeContactPoints(
                dest,
                src,
                dest.Name,
                dest.Description,
                dest.PreferredResultCommunicationMode,
                dest.InformationAuthority,
                allPhoneNumbers,
                allAddresses,
                allEmailAddresses);

            PersistenceContext.Lock(result, DirtyState.New);

            // if user has verify permission, verify the practitioner
            if (Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Admin.Data.ExternalPractitionerVerification))
            {
                result.Practitioner.MarkVerified();
            }

            // queue work items to migrate orders
            foreach (var contactPoint in new[] { src, dest })
            {
                var queueItem = MergeWorkQueueItem.Create(contactPoint.GetRef());
                PersistenceContext.Lock(queueItem, DirtyState.New);
            }

            PersistenceContext.SynchState();

            var assembler = new ExternalPractitionerAssembler();

            return(new MergeDuplicateContactPointResponse(assembler.CreateExternalPractitionerContactPointSummary(result)));
        }
Ejemplo n.º 24
0
		public ExternalPractitionerContactPointDetail CreateExternalPractitionerContactPointDetail(ExternalPractitionerContactPoint contactPoint,
			IPersistenceContext context)
		{
			var telephoneNumberAssembler = new TelephoneNumberAssembler();
			var addressAssembler = new AddressAssembler();
			var emailAddressAssembler = new EmailAddressAssembler();

			var currentPhone = contactPoint.CurrentPhoneNumber;
			var currentFax = contactPoint.CurrentFaxNumber;
			var currentAddress = contactPoint.CurrentAddress;
			var currentEmailAddress = contactPoint.CurrentEmailAddress;

			return new ExternalPractitionerContactPointDetail(
				contactPoint.GetRef(),
				contactPoint.Name,
				contactPoint.Description,
				contactPoint.IsDefaultContactPoint,
				EnumUtils.GetEnumValueInfo(contactPoint.PreferredResultCommunicationMode, context),
				EnumUtils.GetEnumValueInfo(contactPoint.InformationAuthority),
				CollectionUtils.Map(contactPoint.TelephoneNumbers, (TelephoneNumber phone) => telephoneNumberAssembler.CreateTelephoneDetail(phone, context)),
				CollectionUtils.Map(contactPoint.Addresses, (Address address) => addressAssembler.CreateAddressDetail(address, context)),
				CollectionUtils.Map(contactPoint.EmailAddresses, (EmailAddress emailAddress) => emailAddressAssembler.CreateEmailAddressDetail(emailAddress, context)),
				currentPhone == null ? null : telephoneNumberAssembler.CreateTelephoneDetail(currentPhone, context),
				currentFax == null ? null : telephoneNumberAssembler.CreateTelephoneDetail(currentFax, context),
				currentAddress == null ? null : addressAssembler.CreateAddressDetail(currentAddress, context),
				currentEmailAddress == null ? null : emailAddressAssembler.CreateEmailAddressDetail(currentEmailAddress, context),
				CreateExternalPractitionerContactPointSummary(contactPoint.GetUltimateMergeDestination()),
				contactPoint.IsMerged,
				contactPoint.Deactivated);
		}
        private static void UpdateExternalPractitionerContactPoint(ExternalPractitionerContactPointData data, ExternalPractitionerContactPoint cp, IUpdateContext context)
        {
            cp.Name                             = data.Name;
            cp.Description                      = data.Description;
            cp.IsDefaultContactPoint            = data.IsDefaultContactPoint;
            cp.PreferredResultCommunicationMode = (ResultCommunicationMode)Enum.Parse(typeof(ResultCommunicationMode), data.PreferredResultCommunicationMode);
            cp.InformationAuthority             = string.IsNullOrEmpty(data.InformationAuthority) ? null : context.GetBroker <IEnumBroker>().Find <InformationAuthorityEnum>(data.InformationAuthority);

            if (data.TelephoneNumbers != null)
            {
                cp.TelephoneNumbers.Clear();
                foreach (var phoneDetail in data.TelephoneNumbers)
                {
                    cp.TelephoneNumbers.Add(phoneDetail.CreateTelephoneNumber());
                }
            }

            if (data.Addresses != null)
            {
                cp.Addresses.Clear();
                foreach (var addressDetail in data.Addresses)
                {
                    cp.Addresses.Add(addressDetail.CreateAddress());
                }
            }

            if (data.EmailAddresses != null)
            {
                cp.EmailAddresses.Clear();
                foreach (var addressDetail in data.EmailAddresses)
                {
                    cp.EmailAddresses.Add(addressDetail.CreateEmailAddress());
                }
            }
        }
Ejemplo n.º 26
0
		public void UpdateExternalPractitioner(ExternalPractitionerDetail detail, ExternalPractitioner prac, IPersistenceContext context)
		{
			// validate that only one contact point is specified as default
			var defaultPoints = CollectionUtils.Select(detail.ContactPoints, cp => cp.IsDefaultContactPoint);
			if(defaultPoints.Count > 1)
				throw new RequestValidationException(SR.ExceptionOneDefaultContactPoint);

			var assembler = new PersonNameAssembler();
			assembler.UpdatePersonName(detail.Name, prac.Name);

			prac.LicenseNumber = detail.LicenseNumber;
			prac.BillingNumber = detail.BillingNumber;
			prac.MarkDeactivated(detail.Deactivated);

			// update contact points collection
			var syncHelper = new CollectionSynchronizeHelper<ExternalPractitionerContactPoint, ExternalPractitionerContactPointDetail>(
					delegate (ExternalPractitionerContactPoint cp, ExternalPractitionerContactPointDetail cpDetail)
					{
						// ignore version in this comparison - deal with this issue in the update delegate
						return cp.GetRef().Equals(cpDetail.ContactPointRef, true);
					},
					delegate (ExternalPractitionerContactPointDetail cpDetail, ICollection<ExternalPractitionerContactPoint> cps)
					{
						// create a new contact point
						var cp = new ExternalPractitionerContactPoint(prac);
						UpdateExternalPractitionerContactPoint(cpDetail, cp, context);
						cps.Add(cp);
					},
					(cp, cpDetail, cps) => UpdateExternalPractitionerContactPoint(cpDetail, cp, context),
					(cp, cps) => cps.Remove(cp));

			syncHelper.Synchronize(prac.ContactPoints, detail.ContactPoints);

			ExtendedPropertyUtils.Update(prac.ExtendedProperties, detail.ExtendedProperties);
		}
Ejemplo n.º 27
0
		/// <summary>
		/// Constructor.
		/// </summary>
		/// <param name="report"></param>
		/// <param name="recipient"></param>
		public ReportPageModel(Report report, ExternalPractitionerContactPoint recipient)
			: base(new PrintTemplateSettings().ReportTemplateUrl)
		{
			Platform.CheckForNullReference(report, "report");
			Platform.CheckForNullReference(recipient, "recipient");

			_report = report;
			_recipient = recipient;
		}
			/// <summary>
			/// Add a telephone number to a contact point with the specified area code and number.
			/// </summary>
			public static TelephoneNumber AddTelephoneNumber(ExternalPractitionerContactPoint cp,
				string areaCode, string number)
			{
				var telephone = new TelephoneNumber {AreaCode = areaCode, Number = number};
				cp.TelephoneNumbers.Add(telephone);
				return telephone;
			}
Ejemplo n.º 29
0
		/// <summary>
		/// Creates a new practitioner that is the result of merging the two specified practitioners.
		/// </summary>
		/// <param name="right"></param>
		/// <param name="left"></param>
		/// <param name="name"></param>
		/// <param name="licenseNumber"></param>
		/// <param name="billingNumber"></param>
		/// <param name="extendedProperties"></param>
		/// <param name="defaultContactPoint"></param>
		/// <param name="deactivatedContactPoints"></param>
		/// <param name="contactPointReplacements"></param>
		/// <returns></returns>
		public static ExternalPractitioner MergePractitioners(
			ExternalPractitioner right,
			ExternalPractitioner left,
			PersonName name,
			string licenseNumber,
			string billingNumber,
			IDictionary<string, string> extendedProperties,
			ExternalPractitionerContactPoint defaultContactPoint,
			ICollection<ExternalPractitionerContactPoint> deactivatedContactPoints,
			IDictionary<ExternalPractitionerContactPoint, ExternalPractitionerContactPoint> contactPointReplacements)
		{
			// sanity check
			if (Equals(right, left))
				throw new WorkflowException("Cannot merge a practitioner with itself.");
			if (right.Deactivated || left.Deactivated)
				throw new WorkflowException("Cannot merge a practitioner that is de-activated.");
			if (right.IsMerged || left.IsMerged)
				throw new WorkflowException("Cannot merge a practitioner that has already been merged.");
			if (defaultContactPoint != null && defaultContactPoint.IsMerged)
				throw new WorkflowException("Cannot assigned a merged contact point as default");

			// update properties on result record
			var result = new ExternalPractitioner { Name = name, LicenseNumber = licenseNumber, BillingNumber = billingNumber };

			ExtendedPropertyUtils.Update(result.ExtendedProperties, extendedProperties);

			// construct the set of retained contact points
			var retainedContactPoints = new HashedSet<ExternalPractitionerContactPoint>();
			retainedContactPoints.AddAll(contactPointReplacements.Values);

			// some of the replacement contact points are merged.  This should not be allowed.
			if (CollectionUtils.Contains(contactPointReplacements.Values, cp => cp.IsMerged))
				throw new WorkflowException("Cannot replace a contact point with another that has already been merged.");

			// add any existing contact point that was not in the replacement list (because it is implicitly being retained)
			foreach (var contactPoint in CollectionUtils.Concat(right.ContactPoints, left.ContactPoints))
			{
				// No need to retain a merged contact point.  Because its replacement would already be retained.
				if (!contactPointReplacements.ContainsKey(contactPoint) && !contactPoint.IsMerged)
					retainedContactPoints.Add(contactPoint);
			}

			// for all retained contact points, create a copy attached to the result practitioner,
			// and mark the original as having been merged into the copy
			foreach (var original in retainedContactPoints)
			{
				var copy = original.CreateCopy(result);
				result.ContactPoints.Add(copy);

				copy.IsDefaultContactPoint = original.Equals(defaultContactPoint);
				copy.MarkDeactivated(original.Deactivated || deactivatedContactPoints.Contains(original));
				original.SetMergedInto(copy);
			}

			// for all replaced contact points, mark the original as being merged into the 
			// copy of the replacement
			foreach (var kvp in contactPointReplacements)
			{
				kvp.Key.SetMergedInto(kvp.Value.MergedInto);
			}

			// mark both left and right as edited and merged
			foreach (var practitioner in new[] { right, left })
	{
				practitioner.MarkEdited();
				practitioner.SetMergedInto(result);
			}

			// mark the result as being edited
			result.MarkEdited();
			return result;
		}