Esempio n. 1
0
        private static void ImportAddresses(ForeignAddressRepository addressRepo, DPDoctor dpDoctor, ForeignFacility foreignFacility, ForeignDoctor foreignDoctor, List <Address> addresses)
        {
            if (addresses == null)
            {
                return;
            }

            foreach (var address in addresses)
            {
                var foreignAddress = new ForeignAddress()
                {
                    Id                 = address.Id,
                    Name               = address.Name,
                    Street             = address.Street + " " + address.PostCode,
                    BookingExtraFields = new Data.BookingExtraFields()
                    {
                        ForeignAddressId = address.Id,
                        IsBirthDate      = address.BookingExtraFields.IsBirthDateEnabled,
                        IsGender         = address.BookingExtraFields.IsGenderEnabled,
                        IsNin            = address.BookingExtraFields.IsNinEnabled
                    },
                    ForeignDoctorId   = foreignDoctor.Id,
                    ForeignFacilityId = foreignFacility.Id
                };

                addressRepo.InsertOrUpdate(foreignAddress);
            }
        }
Esempio n. 2
0
        public bool RegisterDpVisit(DPFacility facility, DPDoctor doctor, Address address, Booking visitBooking)
        {
            var doctorMapping = _mappingRepo.GetByForeignAddress(address.Id);
            var existingVisit = _visitRepository.GetByForeignId(visitBooking.Id);
            var startAt       = visitBooking.StartAt.LocalDateTime.ChangeTimeZone(timeZone);
            var endAt         = visitBooking.EndAt.LocalDateTime.ChangeTimeZone(timeZone);

            if (existingVisit != null)
            {
                return(true);
            }
            else if (false == _scheduleManager.IsSlotExist(startAt, endAt, doctorMapping.DoctorFacility))
            {
                return(false);
            }
            else if (doctorMapping == null)
            {
                return(false);
            }

            var patient = visitBooking.Patient;
            var visit   = new Visit()
            {
                DoctorFacility = doctorMapping.DoctorFacility,
                DoctorId       = doctorMapping.DoctorId,
                FacilityId     = doctorMapping.FacilityId,
                StartAt        = visitBooking.StartAt.LocalDateTime.ChangeTimeZone(timeZone),
                EndAt          = visitBooking.EndAt.LocalDateTime.ChangeTimeZone(timeZone),
                ForeignVisitId = visitBooking.Id,
                VisitStatus    = VisitStatus.Booked,
                VisitPatient   = new VisitPatient()
                {
                    Name      = patient.Name,
                    Surname   = patient.Surname,
                    Phone     = patient.Phone,
                    Email     = patient.Email,
                    Gender    = patient.Gender == null ? Gender.NotSpecified : (patient.Gender == "m" ? Gender.Male : Gender.Female),
                    NIN       = patient.Nin,
                    Birthdate = patient.BirthDate
                }
            };


            var schedule = _scheduleManager.FindDoctorSchedule(doctorMapping.DoctorFacility, visit.StartAt, visit.EndAt, visitBooking.Service.Id);

            if (schedule == null || schedule.IsFullfilled)
            {
                return(false);
            }
            else
            {
                visit.DoctorSchedule   = schedule;
                visit.DoctorScheduleId = schedule.Id;

                BookVisit(visit, true);
                return(true);
            }
        }
Esempio n. 3
0
        private bool SlotBookedEvent(DPFacility facility, DPDoctor doctor, Address address, Booking visitBooking)
        {
            bool result = _visitManager.RegisterDpVisit(facility, doctor, address, visitBooking);

            if (result == false)
            {
                _visitManager.CancelVisitDP(facility.Id, doctor.Id, address.Id, visitBooking.Id);
            }

            return(result);
        }
        private bool DefaultEventHandler(DPFacility facility, DPDoctor doctor, Address address)
        {
            var mapping = _mappingRepo.GetByForeignAddress(address.Id);

            if (mapping == null)
            {
                return(false);
            }

            return(true);
            //noop
        }
Esempio n. 5
0
        public bool CanSlotBeBooked(DPFacility facility, DPDoctor doctor, Address address, RealtimeBooking visitBooking)
        {
            var doctorMapping = _mappingRepo.GetByForeignAddress(address.Id);
            var startAt       = visitBooking.StartAt.LocalDateTime.ChangeTimeZone(timeZone);
            var endAt         = visitBooking.EndAt.LocalDateTime.ChangeTimeZone(timeZone);

            if (doctorMapping == null)
            {
                return(false);
            }

            return(_scheduleManager.IsSlotExist(startAt, endAt, doctorMapping.DoctorFacility));
        }
Esempio n. 6
0
        private static ForeignDoctor CreateOrUpdateDoctor(DPDoctor doctor)
        {
            var foreignDoctor = CheckDoctorContext(doctor.Id);

            foreignDoctor.Id      = doctor.Id;
            foreignDoctor.Name    = doctor.Name;
            foreignDoctor.Surname = doctor.Surname;

            if (db.Entry(foreignDoctor).State == EntityState.Detached)
            {
                db.ForeignDoctors.Add(foreignDoctor);
            }

            return(foreignDoctor);
        }
 private bool SlotBookedEvent(DPFacility facility, DPDoctor doctor, Address address, Booking visitBooking)
 {
     return(_visitManager.RegisterDpVisit(facility, doctor, address, visitBooking));
 }
 private bool BookingCanceled(DPFacility facility, DPDoctor doctor, Address address, Booking visitBooking)
 {
     return(_visitManager.CancelVisit(visitBooking.Id, false));
 }
 private bool BookingMoved(DPFacility facility, DPDoctor doctor, Address address, Booking oldVisitBooking, Booking newVisitBooking)
 {
     return(_visitManager.MoveVisit(oldVisitBooking, newVisitBooking, facility, doctor, address));
 }
 /// <summary>
 /// Given the case when overbooking a slot is not permitted.
 /// </summary>
 /// <param name="facility"></param>
 /// <param name="doctor"></param>
 /// <param name="address"></param>
 /// <param name="visitBooking"></param>
 private bool SlotOverbooked(DPFacility facility, DPDoctor doctor, Address address, Booking visitBooking)
 {
     return(_visitManager.CancelVisitDP(facility.Id, doctor.Id, address.Id, visitBooking.Id));
 }
Esempio n. 11
0
        /// <summary>
        /// Handles the visit-moved event from Docplanner
        /// </summary>
        /// <param name="notification"></param>
        /// <returns></returns>
        public bool MoveVisit(Booking oldVisit, Booking newVisit, DPFacility facility, DPDoctor doctor, Address address)
        {
            var visit = _visitRepository.GetByForeignId(oldVisit.Id);

            if (_scheduleManager.IsSlotExist(newVisit.StartAt.LocalDateTime.ChangeTimeZone(timeZone), newVisit.EndAt.LocalDateTime.ChangeTimeZone(timeZone), visit.DoctorFacility))
            {
                visit.ForeignVisitId = newVisit.Id;
                visit.StartAt        = newVisit.StartAt.LocalDateTime.ChangeTimeZone(timeZone);
                visit.EndAt          = newVisit.EndAt.LocalDateTime.ChangeTimeZone(timeZone);

                var oldSchedule = visit.DoctorSchedule;
                var newSchedule = _scheduleManager.FindDoctorSchedule(visit.DoctorFacility, visit.StartAt, visit.EndAt, newVisit.Service.Id);

                visit.DoctorSchedule   = newSchedule;
                visit.DoctorScheduleId = newSchedule.Id;

                _scheduleManager.RestoreSchedule(oldSchedule);
                _scheduleManager.ArrangeSchedule(visit);

                return(true);
            }
            else
            {
                CancelVisit(visit, false);
                CancelVisitDP(visit);
                CancelVisitDP(facility.Id, doctor.Id, address.Id, newVisit.Id);

                return(false);
            }
        }
Esempio n. 12
0
 private bool SlotBookingEvent(DPFacility facility, DPDoctor doctor, Address address, RealtimeBooking visitBooking)
 {
     return(_visitManager.CanSlotBeBooked(facility, doctor, address, visitBooking));
 }
Esempio n. 13
0
 private bool DefaultEventHandler(DPFacility facility, DPDoctor doctor, Address address)
 {
     return(true);
 }
Esempio n. 14
0
        private static void ImportSpecializations(ForeignSpecializationRepository repo, DPDoctor dpDoctor, ForeignDoctor foreignDoctor)
        {
            if (dpDoctor.Specializations == null)
            {
                return;
            }

            dpDoctor.Specializations
            .Items
            .ForEach(ds =>
            {
                if (ds.Id != null && ds.Name != null)
                {
                    repo.InsertOrUpdate(new ForeignSpecialization()
                    {
                        ForeignDoctorId = foreignDoctor.Id,
                        Id   = ds.Id,
                        Name = ds.Name
                    });
                }
            });
        }
Esempio n. 15
0
        private static void ImportDoctorServices(ForeignDoctorServiceRepository doctorServiceRepo, DPDoctor dpDoctor, ForeignDoctor foreignDoctor, List <DoctorService> doctorServices)
        {
            if (doctorServices == null)
            {
                return;
            }

            foreach (var doctorService in doctorServices)
            {
                var foreignDoctorService = new ForeignDoctorService()
                {
                    Id              = doctorService.Id,
                    Name            = doctorService.Name,
                    PriceMax        = doctorService.PriceMax,
                    PriceMin        = doctorService.PriceMin,
                    ServiceId       = doctorService.ServiceId,
                    ForeignDoctorId = foreignDoctor.Id
                };

                doctorServiceRepo.InsertOrUpdate(foreignDoctorService);
            }
        }