public async Task InitNewPatient()
        {
            var patient = new Patient
            {
            };
            var appointment = new Appointment
            {
            };
            var screenQuiz = new ScreenQuiz
            {
            };
            var labConsent = new LabConsent
            {
            };

            var patientOrderItem = new PatientOrderItem
            {
                IsNew       = true,
                IsNewRow    = true,
                IsInitRow   = true,
                Patient     = patient,
                Appointment = appointment,
                ScreenQuiz  = screenQuiz,
                LabConsent  = labConsent,
            };

            SetupPatientOrderItems(new[] { patientOrderItem });
            PatientOrderItems.Add(patientOrderItem);
            SelectedPatientOrderItem = patientOrderItem;
            CalcAll();
        }
        //private void PropertyChangedAction(object sender, PropertyChangedEventArgs e)
        //{
        //	if (e.PropertyName == nameof())
        //}

        async Task <bool> LoadData()
        {
            UIFunc.ShowLoading();

            var task1 = WebServiceFunc.GetOrder(OrderRowId);
            var task2 = WebServiceFunc.GetInstitutionsForSchedule();
            var task3 = WebServiceFunc.GetStates(1);
            await Task.WhenAll(task1, task2, task3);

            if (task1.Result == null || task2.Result == null || task3.Result == null)
            {
                await UIFunc.AlertError(U.StandartErrorUpdateText);

                return(false);
            }

            Order           = task1.Result;
            DdlInstitutions = task2.Result.OrderBy(q => q.CompanyName).ToObservableCollection();
            DdlStates       = task3.Result.OrderBy(q => q.Name).ToArray();

            var institutionRowIds = DdlInstitutions.Select(q => q.RowId).ToArray();
            var slotTasks         = institutionRowIds.Select(q => WebServiceFunc.GetBookingSlots(q)).ToArray();
            await Task.WhenAll(slotTasks);

            if (slotTasks.Any(q => q.Result == null))
            {
                await UIFunc.AlertError(U.StandartErrorUpdateText);

                return(false);
            }

            AllBookingSlots = new Dictionary <Guid, ScheduleItemSlot[]>();
            for (int i = 0; i < institutionRowIds.Length; i++)
            {
                AllBookingSlots.Add(institutionRowIds[i], slotTasks[i].Result);
            }


            Model             = Order.UserProfile;
            PatientOrderItems = Order.Pois.OrderBy(q => q.Patient?.FullPatientName).ToObservableCollection();
            SetupPatientOrderItems(PatientOrderItems);

            PatientOrderItemsJson0 = JsonConvert.SerializeObject(PatientOrderItems);

            if (IsShowFromMode)
            {
                SelectedPatientOrderItem = PatientOrderItems.SingleOrDefault(q => q.RowId == InitSelectedPatientOrderItemRowId);
                if (SelectedPatientOrderItem == null)
                {
                    IsNewRow = true;
                    await InitNewPatient();
                }
                PatientHeaderModels[General].IsExpanded = true;
            }

            UIFunc.HideLoading();

            return(true);
        }
        public async Task Commit()
        {
            var norder = JsonConvert.DeserializeObject <Order>(JsonConvert.SerializeObject(Order));

            norder.Pois = PatientOrderItems.ToList();

            UIFunc.ShowLoading(U.StandartUpdatingText);
            var result = await WebServiceFunc.SaveOrder(norder);

            UIFunc.HideLoading();

            if (!result.Item1)
            {
                await UIFunc.AlertError(U.StandartErrorUpdateText);

                return;
            }

            var newOrder = result.Item2;

            IsCommit = true;
            await NavFunc.Pop(forceClose : true);
        }
 bool HasPatientOrderItemError()
 {
     HasModelError = (PatientOrderItems?.Any(q => q.IsHasError) == true);
     return(HasModelError);
 }