//metoda uruchamiajaca sie wtedy gdy zostanie zmieniona widocznosc zakladki oraz gdy
        //uzytkownik przejdzie na ta zakladke
        //ladowane sa tutaj dane do gridow
        private async void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.Dict;
                if (db == null || loadUI == false)
                    return;
                
                System.Windows.Data.CollectionViewSource sprzet_typViewSource =
                   ((System.Windows.Data.CollectionViewSource)(this.FindResource("sprzet_typViewSource")));
                await db.sprzet_typ.LoadAsync();//operacja asynchroniczna
                sprzet_typViewSource.Source = db.sprzet_typ.Local.ToBindingList().OrderBy(t => t.id);
                
                System.Windows.Data.CollectionViewSource sala_typViewSource =
                    ((System.Windows.Data.CollectionViewSource)(this.FindResource("sala_typViewSource")));
                await db.sala_typ.LoadAsync();//operacja asynchroniczna
                sala_typViewSource.Source = db.sala_typ.Local.ToBindingList().OrderBy(s => s.id);

                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
 //wylogowanie, usuniecie niepotrzebnych danych
 public void Logout()
 {
     userAcc = null;
     db = null;
     ViewLogic.DisposeDatabase();
     InitDbAsync();
 }
        private async void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.Workers;
                if (db == null || loadUI == false)
                    return;

                System.Windows.Data.CollectionViewSource workerRecordViewSource =
                    ((System.Windows.Data.CollectionViewSource)(this.FindResource("workerRecordViewSource")));
                await db.pracownik.LoadAsync();
                List<pracownik> pracownicy = db.pracownik.Local.ToList();
                List<WorkerRecord> rekordy = new List<WorkerRecord>();
                foreach (pracownik p in pracownicy)
                {
                    rekordy.Add(new WorkerRecord(p));
                }
                workerRecordViewSource.Source = rekordy.OrderBy(r => r.id);
                
                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
 //usuniecie kontekstu bazy
 static public void DisposeDatabase()
 {
     if (db != null)
     {
         db.Dispose();
         db = null;
     }
 }
        private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.Raports;
                if (db == null || loadUI == false)
                    return;

                userAcc = StocktakingViewModel.Stocktaking.User;

                if (!String.IsNullOrWhiteSpace(TypeTextBlock.Text))
                {
                    if (Room.IsChecked == true)
                    {
                        Room_Checked(this, null);
                    }
                    else if (Worker.IsChecked == true)
                    {
                        Worker_Checked(this, null);
                    }
                    else if (Device.IsChecked == true)
                    {
                        Device_Checked(this, null);
                    }
                    else if (RoomMan.IsChecked == true)
                    {
                        RoomMan_Checked(this, null);
                    }
                    else if (DeviceMan.IsChecked == true)
                    {
                        DeviceMan_Checked(this, null);
                    }
                }

                int Type = userAcc.konto_typ_id;
                switch (Type)
                {
                    case 2://Dyrektor zakładu
                        managerUI();
                        break;
                    case 3:// Kierownik instytutu
                        chiefUI();
                        break;
                    default:
                        break;
                }
                upData();
                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
        // funkcja odpowiedzialna za ładowanie danych do elementów GUI
        private async void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.Devs;
                if (db == null || loadUI == false)
                    return;

                System.Windows.Data.CollectionViewSource deviceRecordViewSource =
                    (System.Windows.Data.CollectionViewSource)this.Resources["deviceRecordViewSource"];
                await db.sprzet.LoadAsync();
                List<sprzet> sprzety = db.sprzet.Local.ToList();
                List<DeviceRecord> rekordy = new List<DeviceRecord>();
                foreach (sprzet s in sprzety)
                {
                    rekordy.Add(new DeviceRecord(s));
                }
                deviceRecordViewSource.Source = rekordy.OrderBy(r => r.id);

                System.Windows.Data.CollectionViewSource sprzet_typViewSource =
                    (System.Windows.Data.CollectionViewSource)this.Resources["sprzet_typViewSource"];
                await db.sprzet_typ.LoadAsync();
                sprzet_typViewSource.Source = db.sprzet_typ.Local.ToBindingList();

                System.Windows.Data.CollectionViewSource roomRecordViewSource =
                    (System.Windows.Data.CollectionViewSource)this.Resources["roomRecordViewSource"];
                await db.sala.LoadAsync();
                List<sala> sale = db.sala.Local.ToList();
                List<RoomRecord> rekordyS = new List<RoomRecord>();
                foreach (sala s in sale)
                {
                    rekordyS.Add(new RoomRecord(s));
                }
                roomRecordViewSource.Source = rekordyS.OrderBy(r => r.id);

                System.Windows.Data.CollectionViewSource zakladViewSource =
                    (System.Windows.Data.CollectionViewSource)this.Resources["zakladViewSource"];
                await db.zaklad.LoadAsync();
                zakladViewSource.Source = db.zaklad.Local.ToList();

                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
        //metoda uruchamiajaca sie wtedy gdy zostanie zmieniona widocznosc zakladki oraz gdy
        //uzytkownik przejdzie na ta zakladke
        //ladowane tutaj sa rekordy do gridow oraz inne typy do comboboxa
        private async void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.UsrAcc; 
                if (db == null || loadUI == false)
                    return;

                System.Windows.Data.CollectionViewSource userRecordViewSource =
                    ((System.Windows.Data.CollectionViewSource)(this.FindResource("userRecordViewSource")));
                List<UserRecord> rekordy = new List<UserRecord>();
                await db.konto.LoadAsync();//operacja asynchroniczna
                List<konto> konta = db.konto.Local.ToList();
                foreach (konto k in konta)
                {
                    rekordy.Add(new UserRecord(k));
                }
                userRecordViewSource.Source = rekordy.OrderBy(r => r.id);

                System.Windows.Data.CollectionViewSource konto_typViewSource =
                    ((System.Windows.Data.CollectionViewSource)(this.FindResource("konto_typViewSource")));
                await db.konto_typ.LoadAsync();//operacja asynchroniczna
                konto_typViewSource.Source = db.konto_typ.Local.ToBindingList().OrderBy(t => t.id);

                typComboBox.ItemsSource = db.konto_typ.Local.ToList().OrderBy(t => t.id);

                System.Windows.Data.CollectionViewSource pracownikViewSource =
                    ((System.Windows.Data.CollectionViewSource)(this.FindResource("pracownikViewSource")));
                pracownikViewSource.Source = await db.pracownik.Where(p => p.konto.Count == 0).ToListAsync();//operacja asnychroniczna

                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
        // w zależności kto się zalogował tak interfejs zostanie zmodyfikowany
        private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            try
            {
                if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
                    return;
                db = ViewLogic.dbContext;
                StocktakingViewModel.Stocktaking.SelectedTab = Tab.InstMan;
                if (db == null || loadUI == false)
                    return;

                userAcc = StocktakingViewModel.Stocktaking.User;

                int Type = userAcc.konto_typ_id;
                switch (Type)
                {
                    case 2://Dyrektor zakładu
                        managerUI();
                        upDataManager();
                        break;
                    case 3:// Kierownik instytutu
                        chiefUI();
                        upDataChief();
                        break;
                    case 4:// zakładowy pracownik techniczny
                        technicalWorkerUI();
                        upDataTechnician();
                        break;
                    default:
                        break;
                }

                loadUI = false;
            }
            catch (Exception)
            {
                ViewLogic.Blad("Wystapił bład w UserControl_IsVisibleChanged!");
            }
        }
 //inicjalizacja bazy danych w innym watku
 private void InitDbAsync()
 {
     initDbTask = new Task(() =>
     {
         ViewLogic.InitDataBase();
         db = ViewLogic.dbContext;
     });
     initDbTask.Start();
 }
 public AddNewInstitute(StocktakingDatabaseEntities db)
 {
     InitializeComponent();
     myDb = db;
 }
 public AddNewWorker(StocktakingDatabaseEntities db, zaklad zak)
 {
     InitializeComponent();
     myDb = db;
     myZaklad = zak;
 }
 public MoveDevice(StocktakingDatabaseEntities db, sprzet device)
 {
     InitializeComponent();
     myDb = db;
     myDevice = device;
 }
 //inicjalizaca bazy
 static public void InitDataBase()
 {
     if(db == null)
         db = new StocktakingDatabaseEntities();
 }
 public AddNewRoom(StocktakingDatabaseEntities db, zaklad zaklad)
 {
     InitializeComponent();
     myDb = db;
     myZaklad = zaklad;
 }
 public SelectOldRaport(StocktakingDatabaseEntities db, int institute = 0)
 {
     InitializeComponent();
     myDb = db;
 }