//Metoda koja prima stari i ažurirani zapisnik od IspisZapisnikaUC i stari zapisnik ažurira u novi
        public int AzurirajZapisnik(Zapisnik zapisnik)
        {
            string sql = $"UPDATE zapisnik SET ruta_id = {zapisnik.Ruta_id}, opis = '{zapisnik.Opis}', datum_i_vrijeme = GETDATE(), obrađen = 0 WHERE zapisnik_id = {zapisnik.Zapisnik_id};";
            int    i   = Database.Instance.IzvrsiUpit(sql);

            return(i);
        }
        //Konstruktor koji se poziva kod ažuriranja, prima parametar zapisnik koje se dohvaća iz kontrole IspisZapisnikaUC pomoću metode
        //DohvatiSelektiraniZapisnik, i zatim podatke o tom zapisniku stavlja unutar textboxeva itd. u formi koji se mogu mijenjati
        public DodajZapisnikForma(Zapisnik zapisnik)
        {
            InitializeComponent();
            Ucitaj();
            stariZapisnik        = zapisnik;
            cmbRuta.SelectedText = stariZapisnik.Ruta_id.ToString();
            txtOpisGreške.Text   = stariZapisnik.Opis;

            List <Greska> lista     = stariZapisnik.ListaGreski;
            List <Greska> sveGreske = new List <Greska>();

            for (int i = 0; i < clbGreske.Items.Count; i++)
            {
                sveGreske.Add(zapisnikRepozitorij.DohvatiGreskuPremaNazivu(clbGreske.Items[i].ToString()));
            }
            int j = 0;

            foreach (var item in sveGreske)
            {
                if (lista.Contains(item))
                {
                    clbGreske.SetItemChecked(j, true);
                }
                j++;
            }
        }
        //Metoda koja prima zapisnik od IspisZapisnikaUC i dodaje ga u bazu
        public int DodajZapisnik(Zapisnik zapisnik)
        {
            string sql = $"INSERT INTO zapisnik (ruta_id, opis, datum_i_vrijeme, obrađen) VALUES ({zapisnik.Ruta_id}, '{zapisnik.Opis}', GETDATE(), 0);";
            int    i   = Database.Instance.IzvrsiUpit(sql);

            return(i);
        }
        //Metoda briše zapise iz tablice zapisnik_greške jer se prilikom ažuriranja zapisnika mogu promijeniti
        //greške za taj zapisnik, ukoliko se ne obriše i ponovo upiše ostali bi pogrešni podaci
        public int ObrisiZapisnikGreske(Zapisnik zapisnik)
        {
            string sql = $"DELETE zapisnik_greške WHERE zapisnik_id = {zapisnik.Zapisnik_id};";
            int    i   = Database.Instance.IzvrsiUpit(sql);

            return(i);
        }
        //Metoda koja prima zapisnik od IspisZapisnikaUC i dodaje vrijednosti u tablicu zapisnik_greške
        public int AzurirajZapisnikGreske(Zapisnik zapisnik)
        {
            int i = 0;

            foreach (var item in zapisnik.ListaGreski)
            {
                string sql = $"INSERT INTO zapisnik_greške (zapisnik_id, greška_id) VALUES ({zapisnik.Zapisnik_id}, {item.greska_id});";
                i = Database.Instance.IzvrsiUpit(sql);
            }
            return(i);
        }
        //Metoda koja dohvaća selektirani zapisnik iz datagridview-a i prosljeđuje ga formi DodajZapisnikForma za ažuriranje
        public Zapisnik DohvatiSelektiraniZapisnik()
        {
            Zapisnik zapisnik = null;

            if (dgvZapisnici.CurrentRow != null)
            {
                zapisnik             = dgvZapisnici.CurrentRow.DataBoundItem as Zapisnik;
                zapisnik.ListaGreski = zapisnikRepozitorij.DohvatiGreskeZapisnika(zapisnik.Zapisnik_id);
                return(zapisnik);
            }
            return(null);
        }
 //Klikon na gumb Obrađen/neobrađen u user controli za ispis zapisnika disponent označuje zapisnik kao obrađen ili neobrađen
 //i ova metoda ažurira stanje zapisnika u bazi podataka
 public int PromijeniStatusZapisnika(Zapisnik zapisnik)
 {
     if (zapisnik.Obrađen == "Ne")
     {
         string sql = $"UPDATE zapisnik SET obrađen = 1 WHERE zapisnik_id = {zapisnik.Zapisnik_id};";
         int    i   = Database.Instance.IzvrsiUpit(sql);
         return(i);
     }
     else
     {
         string sql = $"UPDATE zapisnik SET obrađen = 0 WHERE zapisnik_id = {zapisnik.Zapisnik_id};";
         int    i   = Database.Instance.IzvrsiUpit(sql);
         return(i);
     }
 }
        //Metoda vraća sve zapisnike za ispis u datagridview
        public List <Zapisnik> DohvatiZapisnike()
        {
            List <Zapisnik> lista = new List <Zapisnik>();
            string          sql   = null;

            if (PrijavaForma.uloga == 1)
            {
                sql = $"SELECT z.zapisnik_id as zapisnik_id, z.ruta_id as ruta_id, z.opis as opis, z.datum_i_vrijeme as datum_i_vrijeme, z.obrađen as obrađen FROM zapisnik z join ruta r on z.ruta_id = r.ruta_id join zaposlenik za on r.kreirao = za.oib WHERE za.tvrtka_id = {PrijavaForma.prijavljeniZaposlenik.Tvrtka.Tvrtka_id};";
            }
            if (PrijavaForma.uloga == 2)
            {
                sql = $"SELECT z.zapisnik_id as zapisnik_id, z.ruta_id as ruta_id, z.opis as opis, z.datum_i_vrijeme as datum_i_vrijeme, z.obrađen as obrađen FROM zapisnik z join ruta r on z.ruta_id = r.ruta_id WHERE r.kreirao = {PrijavaForma.oib};";
            }
            if (PrijavaForma.uloga == 3)
            {
                sql = $"SELECT z.zapisnik_id as zapisnik_id, z.ruta_id as ruta_id, z.opis as opis, z.datum_i_vrijeme as datum_i_vrijeme, z.obrađen as obrađen FROM zapisnik z join ruta r on z.ruta_id = r.ruta_id WHERE r.zaposlenik_oib = {PrijavaForma.oib};";
            }
            SqlDataReader dr = Database.Instance.DohvatiDataReader(sql);

            while (dr.Read())
            {
                Zapisnik zapisnik = new Zapisnik();
                zapisnik.Zapisnik_id     = int.Parse(dr["zapisnik_id"].ToString());
                zadnjiZapisnik           = int.Parse(dr["zapisnik_id"].ToString());
                zapisnik.Ruta_id         = int.Parse(dr["ruta_id"].ToString());
                zapisnik.Opis            = dr["opis"].ToString();
                zapisnik.Datum_i_vrijeme = DateTime.Parse(dr["datum_i_vrijeme"].ToString());
                if (dr["obrađen"].ToString() == "1")
                {
                    zapisnik.Obrađen = "Da";
                }
                if (dr["obrađen"].ToString() == "0")
                {
                    zapisnik.Obrađen = "Ne";
                }

                lista.Add(zapisnik);
            }
            dr.Close();
            return(lista);
        }
        //Klikom na određeni zapisnik u dgvGreske ispisuju se sve greške iz odabranog zapisnika
        private void dgvZapisnici_SelectionChanged(object sender, EventArgs e)
        {
            Zapisnik zapisnik = DohvatiSelektiraniZapisnik();

            dgvGreske.DataSource            = null;
            dgvGreske.DataSource            = zapisnikRepozitorij.DohvatiGreskeZapisnika(zapisnik.Zapisnik_id);
            dgvGreske.Columns[0].HeaderText = "Greška ID";
            dgvGreske.Columns[1].HeaderText = "Naziv greške";
            dgvGreske.Columns[2].HeaderText = "Opis greške";
            dgvGreske.Columns[2].DefaultCellStyle.WrapMode = DataGridViewTriState.True;

            if (zapisnik.Obrađen == "Da")
            {
                btnAžurirajZapisnik.Enabled = false;
                btnIzbrišiZapisnik.Enabled  = false;
            }
            if (zapisnik.Obrađen == "Ne")
            {
                btnAžurirajZapisnik.Enabled = true;
                btnIzbrišiZapisnik.Enabled  = true;
            }
        }
        //Metoda koja vraća zapisnik u koje su pohranjeni svi podaci kontroli IspiszapisnikaUC koja na prisitak tipke Dodaj nakon zatvaranja
        //DodajZapisnikaForma i zatim se pomoću klase ZapisnikRepozotorij upisuje novi zapisnik u bazu
        public Zapisnik VratiZapisnik()
        {
            Zapisnik zapisnik = new Zapisnik();

            if (stariZapisnik != null)
            {
                zapisnik.Zapisnik_id = stariZapisnik.Zapisnik_id;
            }
            zapisnik.Ruta_id = int.Parse(cmbRuta.SelectedItem.ToString());
            zapisnik.Opis    = txtOpisGreške.Text;

            List <Greska> listaGreski = new List <Greska>();

            foreach (var item in clbGreske.CheckedItems)
            {
                listaGreski.Add(zapisnikRepozitorij.DohvatiGreskuPremaNazivu(item.ToString()));
            }

            zapisnik.ListaGreski = listaGreski;
            zapisnik.Obrađen     = "Ne";

            return(zapisnik);
        }