using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Text;
using Baza_Reklam.Classes;
using Baza_Reklam.Classes.Helpers;
using Baza_Reklam.Classes.Interfaces;
using Baza_Reklam.Classes.Model;
using Baza_Reklam.Classes.Repositories;

namespace Baza_Reklam
{
    public partial class ProductionForm : Form, IForm
    {
        private const string IN_PRODUCTION = "W PRODUKCJI";
        private const string DONE = "GOTOWY";
        private const string NEW = "NOWY";
        private const string BACK_TO_AGENT = "ZWROT";


        //Nr wydań wg których generowane są listy do klientów
        private static ProductionForm productionForm;
        private SqlCommand command;
        private short nrAMT;
        private short nrGS1;
        private short nrGS2;
        private short nrWyd;

        private const string query = "SELECT * FROM dbo.PRODUKCJA WHERE 1=1 AND [Type]=1 ";

        //zapytanie wybierające projekty będące w stanie produkcji
        private string queryDzisiaj;

        private SqlDataAdapter sqlDataAdapter;
        private string tyt;

        protected Production CurrentProduction
        {
            get
            {
                if (dgvOgloszenia.CurrentRow == null) return null;

                return (Production)dgvOgloszenia.CurrentRow.DataBoundItem;
            }
        }

        private ProductionForm(Form parent)
        {
            InitializeComponent();

            MdiParent = parent;

            gRZBIETYTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            grzbietyProdukcjaTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            aGENCJETableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            aGENCITableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            lISTA_TYTULOWTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            reklamaTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            pRODUKCJATableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            listaReklamDoWydaniaNrTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            aGENCJETableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            aGENCITableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            listyTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            listyPodsumowanieTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            klienciTableAdapter1.Connection.ConnectionString = ConnString.getConnString().Value;

            zwrotToolStripButton.Enabled = false;
            doDTPToolStripButton.Enabled = false;
            proToolStripButton.Enabled = false;
            doKorektyToolStripButton.Enabled = false;
            doDTP2ToolStripButton.Enabled = false;
            doKorekty2ToolStripButton.Enabled = false;
            doAgentaToolStripButton.Enabled = false;

            produkcjaDataGridView.Sort(zAMAWIAMNADataGridViewTextBoxColumn, ListSortDirection.Descending);

            queryDzisiaj = buildQuery();

            Uprawnienia();

            nrAMTToolStripTextBox.Text = Global.getGlobal().NrAMT.ToString();
            nrGS1ToolStripTextBox.Text = Global.getGlobal().NrGS1.ToString();
            nrGS2ToolStripTextBox.Text = Global.getGlobal().NrGS2.ToString();

            dateTimePicker1.Value = DateTime.Today;
        }

        public static ProductionForm getProductionForm(MDIBazaReklam parent)
        {
            if (productionForm == null)
            {
                productionForm = new ProductionForm(parent);
            }
            return productionForm;
        }

        private void ProductionForm_Load(object sender, EventArgs e)
        {
            grzbietyProdukcjaTableAdapter.Fill(sLOWNIKDataSet.GrzbietyProdukcja);
            aGENCJETableAdapter.Fill(sLOWNIKDataSet.AGENCJE);
            aGENCITableAdapter.Fill(sLOWNIKDataSet.AGENCI);
            gRZBIETYTableAdapter.Fill(sLOWNIKDataSet.GRZBIETY);
            lISTA_TYTULOWTableAdapter.Fill(sLOWNIKDataSet.LISTA_TYTULOW);

            tytulComboBox.SelectedIndex = 0;
            grzbietyComboBox.SelectedIndex = -1;

            SqlConnection conn = new SqlConnection(ConnString.getConnString().Value);
            sqlDataAdapter = new SqlDataAdapter();
            command = new SqlCommand();
            command.CommandText = queryDzisiaj;
            command.CommandType = CommandType.Text;
            command.Connection = conn;

            sqlDataAdapter.SelectCommand = command;
            sqlDataAdapter.Fill(rEKLAMADataSet.PRODUKCJA);
        }

        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                plikToolStripTextBox.Text = Convert.ToString(row["PLIK"]);
            }

            ZablokujButtony();
        }

        private void zwrotToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                row["PRODUKCJA"] = User.Instance().Login;
                row["DATA_PRODUKCJA"] = DateTime.Now;
                // na koncu,bo moze byc sortowanie po stanie 
                row["stan"] = "ZWROT Z PRODUKCJI";
                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);

                ZablokujButtony();
                wlaczSortowanieGrida();
            }
        }

        private void doDTPToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current == null) return;

            wylaczSortowanieGrida();

            DataRowView row = (DataRowView) pRODUKCJABindingSource.Current;

            REKLAMADataSet.PRODUKCJADataTable t = pRODUKCJATableAdapter.GetDataById(Convert.ToInt32(row["ID"]));

            if (!t[0].IsDATA_PRODUKCJANull())
            {
                MessageBox.Show("Zlecenie jest już przekazane do DTP.\nWidok zostanie odświeżony.",
                                "Baza Reklam - Produkcja", MessageBoxButtons.OK);
                wlaczSortowanieGrida();
                RefreshGrid();
                return;
            }

            row["PRODUKCJA"] = User.Instance().Login;
            row["DATA_PRODUKCJA"] = DateTime.Now;
            // na koncu,bo moze byc sortowanie po stanie 
            row["stan"] = "DO DTP";
            pRODUKCJABindingSource.EndEdit();
            pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
            ZablokujButtony();

            wlaczSortowanieGrida();
        }

        private void proToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current == null) return;

            wylaczSortowanieGrida();

            DataRowView row = (DataRowView) pRODUKCJABindingSource.Current;

            REKLAMADataSet.PRODUKCJADataTable t = pRODUKCJATableAdapter.GetDataById(Convert.ToInt32(row["ID"]));

            if (!t[0].IsDTPNull())
            {
                DialogResult dialogResult = MessageBox.Show("Zlecenie jest już w DTP. Czy chcesz je przejąć?",
                                                            "Baza Reklam - Produkcja",
                                                            MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.No)
                {
                    wlaczSortowanieGrida();
                    RefreshGrid();
                    return;
                }
            }

            row["DTP"] = User.Instance().Login;
            row["DATA_DTP"] = DateTime.Now;
            // na koncu,bo moze byc sortowanie po stanie 
            row["stan"] = "W DTP";

            pRODUKCJABindingSource.EndEdit();
            pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
            ZablokujButtony();

            wlaczSortowanieGrida();
        }

        private void doKorektyToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                row["stan"] = "DO KOREKTY";

                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                ZablokujButtony();

                wlaczSortowanieGrida();
            }
        }

        private void doDTP2ToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                row["KOREKTA"] = User.Instance().Login;
                row["DATA_KOREKTA"] = DateTime.Now;
                // na koncu,bo moze byc sortowanie po stanie 
                row["stan"] = "PO KOREKCIE";

                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                ZablokujButtony();

                wlaczSortowanieGrida();
            }
        }

        private void doKorekty2ToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                row["DTP_PO_KOR"] = User.Instance().Login;
                row["DATA_DTP_PO_KOR"] = DateTime.Now;
                // na koncu,bo moze byc sortowanie po stanie 
                row["stan"] = "W 2 KOREKCIE";

                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                ZablokujButtony();

                wlaczSortowanieGrida();
            }
        }

        private void doAgentaToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                row["DTP_PO_KOR"] = User.Instance().Login;
                row["DATA_DTP_PO_KOR"] = DateTime.Now;

                //row["DATA_AKCEPTACJI"] = DateTime.Now;

                row["stan"] = "DO AKCEPTACJI";
                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                ZablokujButtony();

                wlaczSortowanieGrida();
            }
        }

        private void akceptToolStripButton_Click(object sender, EventArgs e)
        {
            if (ocenaToolStripComboBox.SelectedIndex == -1)
            {
                MessageBox.Show("Oceń projekt");
            }
            else
            {
                if (pRODUKCJABindingSource.Current != null)
                {
                    wylaczSortowanieGrida();
                    DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                    row["DATA_AKCEPTACJI"] = DateTime.Now;
                    row["ocena"] = ocenaToolStripComboBox.Items[ocenaToolStripComboBox.SelectedIndex];
                    // na koncu,bo moze byc sortowanie po stanie 
                    row["stan"] = "ZAAKCEPTOWANE";

                    pRODUKCJABindingSource.EndEdit();
                    pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                    ZablokujButtony();

                    wlaczSortowanieGrida();
                }
            }
        }

        private void nieakceptToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                wylaczSortowanieGrida();
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                row["DATA_AKCEPTACJI"] = DateTime.Now;
                row["ocena"] = -1;
                // na koncu,bo moze byc sortowanie po stanie
                row["stan"] = "NIEZAAKCEPTOWANE";

                pRODUKCJABindingSource.EndEdit();
                pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                ZablokujButtony();

                wlaczSortowanieGrida();
            }
        }

        private void produkcjaDataGridView_CellLeave(object sender, DataGridViewCellEventArgs e)
        {
            pRODUKCJABindingSource.CancelEdit();
        }

        private void szukajToolStripButton_Click(object sender, EventArgs e)
        {
            if (stanToolStripComboBox.SelectedIndex != -1)
            {
                Cursor = Cursors.WaitCursor;

                command.CommandText = query;
                command.Parameters.Clear();

                string status = stanToolStripComboBox.SelectedItem.ToString();

                if (status == "*W PRODUKCJI*")
                {
                    command.CommandText +=
                        " AND STAN!='ZAAKCEPTOWANE' AND STAN!='NIEZAAKCEPTOWANE' AND STAN!='DO AKCEPTACJI' AND STAN!='ZWROT Z PRODUKCJI'";
                }
                else
                {
                    command.CommandText += " AND STAN=@stan ";
                    command.Parameters.AddWithValue("@stan", status);

                    //wybieramy z ostatnich 3 miesiecy
                    if (status == "NIEZAAKCEPTOWANE" || status == "ZAAKCEPTOWANE" || status == "ZWROT Z PRODUKCJI")
                    {
                        command.CommandText += "AND datediff(month,DATA_AGENT,getdate()) <= 3 ";
                    }
                }

                command.CommandText += "order by DATA_AGENT desc";

                rEKLAMADataSet.PRODUKCJA.Clear();
                sqlDataAdapter.Fill(rEKLAMADataSet.PRODUKCJA);

                Cursor = Cursors.Default;
            }
        }

        private void dzisiajToolStripButton_Click(object sender, EventArgs e)
        {
            RefreshGrid();
        }

        private void RefreshGrid()
        {
            Cursor = Cursors.WaitCursor;

            command.CommandText = queryDzisiaj;

            sqlDataAdapter.SelectCommand = command;

            rEKLAMADataSet.PRODUKCJA.Clear();
            sqlDataAdapter.Fill(rEKLAMADataSet.PRODUKCJA);

            Cursor = Cursors.Default;
        }

        /// <summary>
        /// Wczytuje listę reklam na wskazane wydanie i sprawdza czy istnieją pliki do reklam
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            listaReklamDoWydaniaNrBindingSource.Filter = "";
            grzbietyComboBox.SelectedIndex = -1;

            if ((tytulComboBox.Text.Trim() != "") && (nrWydaniaTextBox.Text.Trim() != ""))
            {
                short nr = Convert.ToInt16(nrWydaniaTextBox.Text);
                nrWyd = nr;
                tyt = tytulComboBox.Text;
                listaReklamDoWydaniaNrTableAdapter.Fill2Produkcja(rEKLAMADataSet.ListaReklamDoWydaniaNr,
                                                                  tytulComboBox.Text, nr);
                sprawdzPlikiDlaWszystkichReklam();
            }

            spisPlikowDataGridView.Refresh();

            Cursor = Cursors.Default;
        }

        /// <summary>
        ///  Otwiera plik xtg. Zczytuje z niego reklamy do listy obiektów Reklama. 
        ///  Wpisuje znalezione strony do tabeli.
        /// </summary>
        private void XTGbutton_Click(object sender, EventArgs e)
        {
            openFileDialog.InitialDirectory = "R:\\MAKIETY\\QUARK\\" + tyt + nrWyd;
            openFileDialog.DefaultExt = "xtg";

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                xtgTextBox.Text = openFileDialog.FileName;

                XTGFile xtgfile = new XTGFile();

                List<Reklama> lista = xtgfile.zczytajStronyZplikuXTG(openFileDialog.FileName);

                wpiszStronyDoTabeli(lista);

                spisPlikowDataGridView.Sort(IdReklamyColumn, ListSortDirection.Ascending);

                StringBuilder message = new StringBuilder();
                message.AppendLine("Wczytywanie stron z pliku " + openFileDialog.FileName + " zakończone. ");
                message.AppendLine("Niewczytane reklamy: ");

                foreach (Reklama r in lista)
                {
                    if (!r.wpisana)
                    {
                        message.AppendLine(r.nrRek);
                    }
                }

                MessageBox.Show(message.ToString());
            }
        }

        public void wpiszStronyDoTabeli(List<Reklama> lista)
        {
            Cursor = Cursors.WaitCursor;

            foreach (DataRowView r in listaReklamDoWydaniaNrBindingSource.List)
            {
                foreach (Reklama reklama in lista)
                {
                    if (!r["id reklamy"].ToString().ToLower().Contains(reklama.nrRek.ToLower())) continue;
                    
                        short test;

                    if (reklama.costam.Count <= 1) continue;
                    
                        bool result = Int16.TryParse(reklama.costam[1], out test);
                        if (result)
                        {
                            r["strona"] = test;
                            reklama.wpisana = true;
                        }
                    }
                }

            rEKLAMADataSet.ListaReklamDoWydaniaNr.AcceptChanges();

            Cursor = Cursors.Default;
        }

        /// <summary>
        /// Usuwa poprzednie informacje o stronach i zapisuje nowe strony. W tabeli strona nie ma
        /// kolumny wyznaczającej tytuł, więc sprawdza grzbiet.
        /// </summary>
        private void zapiszStronyButton_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = new SqlConnection(ConnString.getConnString().Value);

            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Clear();

                if (listaReklamDoWydaniaNrBindingSource.Filter == "")
                {
                    cmd.CommandText = "sp_DeleteReklamaStrona";
                    cmd.Parameters.AddWithValue("@nrWyd", nrWyd);
                    cmd.Parameters.AddWithValue("@tytul", tyt);
                }
                else
                {
                    cmd.CommandText = "sp_DeleteReklamaStronaByStaryGrzbiet";
                    cmd.Parameters.AddWithValue("@nrWydania", nrWyd);
                    cmd.Parameters.AddWithValue("@tytul", tyt);
                    cmd.Parameters.AddWithValue("@staryGrzbiet", grzbietyComboBox.SelectedValue);
                }

                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
            }
            finally
            {
                cmd.Connection.Close();
                Cursor = Cursors.Default;
            }

            Cursor = Cursors.WaitCursor;

            cmd.CommandText = "INSERT INTO Reklama_Strona(ReklamaId, NR_WYDANIA, STRONA) VALUES(@idRek, @nrWyd, @nrStrony);";
            cmd.CommandType = CommandType.Text;

            try
            {
                cmd.Connection.Open();

                foreach (DataGridViewRow row in spisPlikowDataGridView.Rows)
                {
                    //reklam bez stron nie zapisuje w bazie
                    if ((row.Cells["strona"].Value != null))
                    {
                        cmd.Parameters.Clear();

                        cmd.Parameters.AddWithValue("@idRek", row.Cells["reklamaId"].Value);
                        cmd.Parameters.AddWithValue("@nrWyd", row.Cells["NR"].Value);
                        cmd.Parameters.AddWithValue("@nrStrony", row.Cells["strona"].Value);

                        cmd.ExecuteNonQuery();
                    }
                }
            }
            finally
            {
                cmd.Connection.Close();
                Cursor = Cursors.Default;
            }
            MessageBox.Show("Zapisano strony");
        }

        private void spisPlikowDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            if (listaReklamDoWydaniaNrBindingSource.Current != null)
            {
                DataRowView row = (DataRowView)listaReklamDoWydaniaNrBindingSource.Current;
                pobierzSciezki(row);
            }
        }

        /// <summary>
        /// Sprawdza ścieżki do plików JPG (PDF), CDR, EPS dla danego projektu.
        /// Jeżeli pliki istnieją uzupełnia informację o datach.
        /// </summary>
        private void pobierzSciezki(DataRowView row)
        {
            string idReklamy = row["id reklamy"].ToString();
            string tytul = row["TYTUŁ"].ToString();
            int idGrzbietu = Convert.ToInt32(row["GRZBIET"]);
            string miasto = row["miasto"].ToString();
            string agencja = row["agencja"].ToString();
            byte staryNowyArchiwum = 0;

            string plikJPG = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto, staryNowyArchiwum, "jpg", agencja);
            string plikPDF = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto, staryNowyArchiwum, "pdf", agencja);
            string plikEPS = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto, staryNowyArchiwum, "eps", agencja);
            string plikCDR = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto, staryNowyArchiwum, "cdr", agencja);


            if (File.Exists(plikCDR))
            {
                DateTime data = File.GetLastWriteTime(plikCDR);
                CDRTextBox.Text = plikCDR;
                CDRdataTextBox.Text = data.ToString();
                CDRbutton.Enabled = true;
            }
            else
            {
                CDRTextBox.Text = "";
                CDRdataTextBox.Text = "";
                CDRbutton.Enabled = false;
            }

            if (File.Exists(plikEPS))
            {
                DateTime data = File.GetLastWriteTime(plikEPS);
                EPSTextBox.Text = plikEPS;
                EPSdataTextBox.Text = data.ToString();
                EPSbutton.Enabled = true;
            }
            else
            {
                EPSTextBox.Text = "";
                EPSdataTextBox.Text = "";
                EPSbutton.Enabled = false;
            }


            if (File.Exists(plikJPG))
            {
                DateTime data = File.GetLastWriteTime(plikJPG);
                JPGTextBox.Text = plikJPG;
                JPGdataTextBox.Text = data.ToString();
                JPGbutton.Enabled = true;
            }
            else if (File.Exists(plikPDF))
            {
                DateTime data = File.GetLastWriteTime(plikPDF);
                JPGTextBox.Text = plikPDF;
                JPGdataTextBox.Text = data.ToString();
                JPGbutton.Enabled = true;
            }
            else
            {
                JPGTextBox.Text = "";
                JPGdataTextBox.Text = "";
                JPGbutton.Enabled = false;
            }
        }

        /// <summary>
        /// Sprawdza dla wszytskich reklam czy istnieją pliki JPG,CDR, EPS.
        /// </summary>
        private void sprawdzPlikiDlaWszystkichReklam()
        {
            CDRColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
            EPSColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
            JPGColumn.SortMode = DataGridViewColumnSortMode.NotSortable;

            foreach (DataRowView row in listaReklamDoWydaniaNrBindingSource.List)
            {
                if (row["id reklamy"] != DBNull.Value)
                {
                    string idReklamy = row["Id Reklamy"].ToString();
                    string tytul = row["TYTUŁ"].ToString();
                    string agencja = row["agencja"].ToString();

                    int idGrzbietu = 0;
                    if (row["GRZBIET"] != DBNull.Value)
                    {
                        idGrzbietu = Convert.ToInt32(row["GRZBIET"]);
                    }

                    string miasto = row["miasto"].ToString();

                    byte staryNowyArchiwum = 0;

                    string plikJPG = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto,
                                                                  staryNowyArchiwum, "jpg", agencja);
                    string plikPDF = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto,
                                                                  staryNowyArchiwum, "pdf", agencja);
                    string plikEPS = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto,
                                                                  staryNowyArchiwum, "eps", agencja);
                    string plikCDR = Produkcja.GetReklamaFileName(idReklamy, tytul, idGrzbietu, miasto,
                                                                  staryNowyArchiwum, "cdr", agencja);

                    if (File.Exists(plikCDR))
                    {
                        row["jestCDR"] = true;
                    }

                    if (File.Exists(plikEPS))
                    {
                        row["jestEPS"] = true;
                    }

                    if (File.Exists(plikJPG) || File.Exists(plikPDF))
                    {
                        row["jestJPG"] = true;
                    }
                }
            }

            CDRColumn.SortMode = DataGridViewColumnSortMode.Automatic;
            EPSColumn.SortMode = DataGridViewColumnSortMode.Automatic;
            JPGColumn.SortMode = DataGridViewColumnSortMode.Automatic;
        }

        private void Uprawnienia()
        {
            usunToolStripButton.Enabled = User.Instance().IsKierownik | User.Instance().IsProdukcja;

            zamowienieToolStripButton.Visible = User.Instance().IsProdukcja | User.Instance().IsHandlowiec | User.Instance().IsKierownik;
            klientToolStripButton.Visible = User.Instance().IsProdukcja | User.Instance().IsHandlowiec | User.Instance().IsKierownik;

            zwrotToolStripButton.Enabled = User.Instance().IsProdukcja | User.Instance().IsKorekta |
                                           User.Instance().IsDtp;
            doDTPToolStripButton.Enabled = User.Instance().IsProdukcja || User.Instance().IsDtp;
            proToolStripButton.Enabled = User.Instance().IsDtp;
            doKorektyToolStripButton.Enabled = User.Instance().IsDtp;
            doDTP2ToolStripButton.Enabled = User.Instance().IsKorekta;
            doKorekty2ToolStripButton.Enabled = User.Instance().IsDtp;
            doAgentaToolStripButton.Enabled = User.Instance().IsKorekta | User.Instance().IsDtp;
            akceptToolStripButton.Enabled = User.Instance().IsHandlowiec | User.Instance().IsKierownik | User.Instance().IsProdukcja;
            nieakceptToolStripButton.Enabled = User.Instance().IsHandlowiec | User.Instance().IsKierownik;

            if (!(User.Instance().IsProdukcja | User.Instance().IsKierownik | User.Instance().IsDtp))
            {
                tabs.TabPages.Remove(spisTabPage);
                tabs.TabPages.Remove(listyDoKlientowTabPage);
            }

            zapiszStronyButton.Enabled = User.Instance().IsProdukcja | User.Instance().IsKierownik;
        }

        /// <summary>
        /// Blokuje buttony w zależności od uprawnień i stanu projektu.
        /// </summary>
        private void ZablokujButtony()
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                Uprawnienia();

                string agent = row["agent"].ToString();

                switch (row["stan"].ToString())
                {
                    case "ZAMAWIAM":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = doDTPToolStripButton.Enabled & true;
                        proToolStripButton.Enabled = proToolStripButton.Enabled & false;
                        doKorektyToolStripButton.Enabled = doKorektyToolStripButton.Enabled & false;
                        doDTP2ToolStripButton.Enabled = doDTP2ToolStripButton.Enabled & false;
                        doKorekty2ToolStripButton.Enabled = doKorekty2ToolStripButton.Enabled & false;
                        doAgentaToolStripButton.Enabled = doAgentaToolStripButton.Enabled & false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "DO DTP":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = proToolStripButton.Enabled & true;
                        doKorektyToolStripButton.Enabled = doKorektyToolStripButton.Enabled & false;
                        doDTP2ToolStripButton.Enabled = doDTP2ToolStripButton.Enabled & false;
                        doKorekty2ToolStripButton.Enabled = doKorekty2ToolStripButton.Enabled & false;
                        doAgentaToolStripButton.Enabled = doAgentaToolStripButton.Enabled & false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "W DTP":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = proToolStripButton.Enabled & true;
                        doKorektyToolStripButton.Enabled = doKorektyToolStripButton.Enabled & true;
                        doDTP2ToolStripButton.Enabled = doDTP2ToolStripButton.Enabled & false;
                        doKorekty2ToolStripButton.Enabled = doKorekty2ToolStripButton.Enabled & false;
                        doAgentaToolStripButton.Enabled = doAgentaToolStripButton.Enabled & false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "DO KOREKTY":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = doDTP2ToolStripButton.Enabled & true;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = doAgentaToolStripButton.Enabled & false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "PO KOREKCIE":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = doKorekty2ToolStripButton.Enabled & true;
                        doAgentaToolStripButton.Enabled = doAgentaToolStripButton.Enabled & true;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "W 2 KOREKCIE":
                        zwrotToolStripButton.Enabled = zwrotToolStripButton.Enabled & true;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = doDTP2ToolStripButton.Enabled & true;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    case "NIEZAAKCEPTOWANE":
                        zwrotToolStripButton.Enabled = false;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;

                        if ((User.Instance().IsHandlowiec) && (!User.Instance().IsKierownik))
                        {
                            //handlowiec moze akceptowac tylko swoje projekty
                            bool ok = agent.ToLower() == User.Instance().Symbol_agenta.ToLower() ? true : false;
                            akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true & ok;
                            nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true & ok;
                        }
                        else
                        {
                            akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true;
                            nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true;
                        }
                        break;
                    case "DO AKCEPTACJI":
                        zwrotToolStripButton.Enabled = false;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;

                        //produkcja ma miec zawsze aktywny ten button
                        if (User.Instance().IsProdukcja)
                            akceptToolStripButton.Enabled = true;
                        else
                        {
                            if ((User.Instance().IsHandlowiec) && (!User.Instance().IsKierownik))
                            {
                                //handlowiec moze akceptowac tylko swoje projekty
                                bool ok = agent.ToLower() == User.Instance().Symbol_agenta.ToLower() ? true : false;
                                akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true & ok;
                                nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true & ok;
                            }
                            else
                            {
                                akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true;
                                nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true;
                            }
                        }
                        break;
                    case "ZAAKCEPTOWANE":
                        zwrotToolStripButton.Enabled = false;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;

                        if ((User.Instance().IsHandlowiec) && (!User.Instance().IsKierownik))
                        {
                            //handlowiec moze akceptowac tylko swoje projekty
                            bool ok = agent.ToLower() == User.Instance().Symbol_agenta.ToLower() ? true : false;
                            akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true & ok;
                            nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true & ok;
                        }
                        else
                        {
                            akceptToolStripButton.Enabled = akceptToolStripButton.Enabled & true;
                            nieakceptToolStripButton.Enabled = nieakceptToolStripButton.Enabled & true;
                        }

                        break;
                    case "ZWROT Z PRODUKCJI":
                        zwrotToolStripButton.Enabled = false;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                    default:
                        zwrotToolStripButton.Enabled = false;
                        doDTPToolStripButton.Enabled = false;
                        proToolStripButton.Enabled = false;
                        doKorektyToolStripButton.Enabled = false;
                        doDTP2ToolStripButton.Enabled = false;
                        doKorekty2ToolStripButton.Enabled = false;
                        doAgentaToolStripButton.Enabled = false;
                        akceptToolStripButton.Enabled = false;
                        nieakceptToolStripButton.Enabled = false;
                        break;
                }
            }
        }

        private void EPSbutton_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(EPSTextBox.Text);
        }

        private void JPGbutton_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(JPGTextBox.Text);
        }

        private void CDRbutton_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(CDRTextBox.Text);
        }

        private void spisPlikowDataGridView_CellLeave(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                listaReklamDoWydaniaNrBindingSource.CancelEdit();
            }
        }

        private void podgladToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current == null) return;

            DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
            REKLAMADataSet.REKLAMADataTable dt = new REKLAMADataSet.REKLAMADataTable();
            reklamaTableAdapter.FillByReklamaId(dt, Convert.ToInt32(row["reklamaId"]));

            if (dt.Rows.Count <= 0)
            {
                MessageBox.Show("Upss, dla wybranej pozycji nie odnaleziono reklamy! Coś tu jest nie tak....", "Produkcja - podgląd PDF", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            string symbolReklamy = dt.Rows[0]["ID Reklamy"].ToString();

            Cursor = Cursors.WaitCursor;
            try
            {
                PdfHelper pdfHelper = new PdfHelper(symbolReklamy);
                if (!pdfHelper.DisplayPdf())
                    MessageBox.Show(pdfHelper.ErrorMessage);
            }
            catch (System.Net.WebException exception)
            {
                PdfHelper.HandleWebException(exception);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }

        private void produkcjaDataGridView_Leave(object sender, EventArgs e)
        {
            ukrytyLabel.Select();
        }

        private void zamowienieToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                int idRek = Convert.ToInt32(row["ReklamaId"]);
                reklamaTableAdapter.FillByReklamaId(rEKLAMADataSet.REKLAMA, idRek);

                OrderDetails.getOrderDetails().PokazSzczegolyZamowienia(idRek);
                OrderDetails.getOrderDetails().ShowDialog();
            }
        }

        private void projektToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                int idRek = Convert.ToInt32(row["ReklamaId"]);
                int idPro = Convert.ToInt32(row["ID"]);
                ProjectForm pf = new ProjectForm(idRek, idPro);

                if (pf.ShowDialog() == DialogResult.OK)
                {
                    rEKLAMADataSet.PRODUKCJA.Clear();
                    sqlDataAdapter.Fill(rEKLAMADataSet.PRODUKCJA);
                }
            }
        }

        private void wczytajPlikButton_Click(object sender, EventArgs e)
        {
            if (projektOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (pRODUKCJABindingSource.Current != null)
                {
                    DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                    row["PLIK"] = projektOpenFileDialog.FileName;
                    pRODUKCJABindingSource.EndEdit();
                    pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                }
            }
        }

        private void drukujToolStripButton_Click(object sender, EventArgs e)
        {
            PrintDGV.Print_DataGridView(produkcjaDataGridView, 50);
        }

        private void wyczyscPolaToolStripButton_Click(object sender, EventArgs e)
        {
            stanToolStripComboBox.SelectedIndex = -1;
            symbolToolStripTextBox.Clear();
        }

        private void tytulComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (tytulComboBox.Text)
            {
                case "AMT":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=1";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                case "GS":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=2";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                case "adMot":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=6";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                case "truck":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=36";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                case "AS-GD":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=37";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                case "AS-WA":
                    grzbietyProdukcjaBindingSource.Filter = "TitleId=38";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
                default:
                    gRZBIETYBindingSource.Filter = "";
                    grzbietyComboBox.SelectedIndex = -1;
                    break;
            }
        }

        private void szukajToolStripButton2_Click(object sender, EventArgs e)
        {
            if (symbolToolStripTextBox.Text.Trim() != "")
            {
                Cursor = Cursors.WaitCursor;

                command.Parameters.Clear();

                command.CommandText =
                    " SELECT TOP 100 * FROM dbo.PRODUKCJA WHERE [Type]=1 AND NAZWA_ZAMOWIENIA LIKE '%' + @symbol + '%' ORDER BY DATA_AGENT DESC ";
                command.Parameters.AddWithValue("@symbol", symbolToolStripTextBox.Text);

                rEKLAMADataSet.PRODUKCJA.Clear();
                sqlDataAdapter.Fill(rEKLAMADataSet.PRODUKCJA);

                Cursor = Cursors.Default;
            }
        }

        /// <summary>
        /// Buduje zapytanie filtrujace projekty wg uprawnien
        /// </summary>
        private string buildQuery()
        {
            string str =
                "SELECT * FROM dbo.PRODUKCJA WHERE [Type]=1 AND STAN != 'ZAAKCEPTOWANE' AND STAN != 'NIEZAAKCEPTOWANE' AND STAN !='ZWROT Z PRODUKCJI'";

            if (User.Instance().IsProdukcja)
            {
                str =
                    "SELECT * FROM dbo.PRODUKCJA WHERE [Type]=1 AND STAN!='ZAAKCEPTOWANE' AND STAN!='NIEZAAKCEPTOWANE' AND STAN!='ZWROT Z PRODUKCJI'";
                return str;
            }

            if (User.Instance().IsKierownik)
            {
                str = "SELECT dbo.PRODUKCJA.* FROM dbo.PRODUKCJA LEFT JOIN dbo.AGENCI " +
                      " ON dbo.PRODUKCJA.AGENT = dbo.AGENCI.Symbol LEFT JOIN dbo.AGENCJE " +
                      " ON dbo.AGENCJE.Id_agencji = dbo.AGENCI.ID_AGENCJI WHERE [Type]=1 AND STAN!='ZAAKCEPTOWANE' " +
                      " AND STAN!='NIEZAAKCEPTOWANE' AND STAN!='ZWROT Z PRODUKCJI' AND dbo.AGENCJE.Id_agencji=" +
                      User.Instance().IdAgencji;
                return str;
            }

            if (User.Instance().IsHandlowiec)
            {
                str = "SELECT * FROM dbo.PRODUKCJA WHERE [Type]=1 AND STAN != 'ZAAKCEPTOWANE' AND STAN != 'NIEZAAKCEPTOWANE' AND datediff(day, DATA_AGENT,getdate()) <= 30 ";
                str += " AND AGENT='" + User.Instance().Symbol_agenta + "'";
                return str;
            }

            if (User.Instance().IsDtp)
            {
                str = "SELECT * FROM dbo.PRODUKCJA WHERE ([Type]=1 AND STAN='DO DTP') OR ([Type]=1 AND STAN='W DTP') OR ([Type]=1 AND STAN='PO KOREKCIE') OR ([Type]=1 AND STAN='ZAMAWIAM')";
                return str;
            }

            if (User.Instance().IsKorekta)
            {
                str = "SELECT * FROM dbo.PRODUKCJA WHERE [Type]=1 AND STAN='DO KOREKTY' OR STAN='W 2 KOREKCIE' ";
                return str;
            }

            return str;
        }

        private void wczytajPlikToolStripButton_Click(object sender, EventArgs e)
        {
            if (projektOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (pRODUKCJABindingSource.Current != null)
                {
                    DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                    row["PLIK"] = projektOpenFileDialog.FileName;
                    pRODUKCJABindingSource.EndEdit();
                    pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                    plikToolStripTextBox.Text = Convert.ToString(row["PLIK"]);
                }
            }
        }

        private void otworzPlikToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                if (row["PLIK"] != DBNull.Value)
                {
                    string plik = Convert.ToString(row["PLIK"]);

                    if (File.Exists(plik))
                    {
                        System.Diagnostics.Process.Start(plik);
                    }
                    else
                    {
                        MessageBox.Show("Nie można odnależć pliku");
                    }
                }
                else
                {
                    MessageBox.Show("Podaj ścieżkę do pliku.");
                }
            }
        }

        private void spisPlikowDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            spisPlikowDataGridView.CancelEdit();
        }


        private void grzbietyComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (grzbietyComboBox.SelectedIndex != -1)
            {
                listaReklamDoWydaniaNrBindingSource.Filter = "StaryGrzbiet='" + grzbietyComboBox.Text + "'";
            }
        }

        private void znajdzKlientowToolStripButton_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            Int16.TryParse(nrAMTToolStripTextBox.Text.Trim(), out nrAMT);
            Int16.TryParse(nrGS1ToolStripTextBox.Text.Trim(), out nrGS1);
            Int16.TryParse(nrGS2ToolStripTextBox.Text.Trim(), out nrGS2);

            listyTableAdapter.Fill(rEKLAMADataSet.Listy, nrAMT, nrGS1, nrGS2);
            listyPodsumowanieTableAdapter.Fill(rEKLAMADataSet.ListyPodsumowanie, nrAMT, nrGS1, nrGS2);

            Cursor = Cursors.Default;
        }

        private void podgladListuToolStripButton_Click(object sender, EventArgs e)
        {
            listyDataGridView.EndEdit();

            if (listyBindingSource.Current != null)
            {
                Cursor = Cursors.WaitCursor;

                DataRowView row = (DataRowView)listyBindingSource.Current;
                int custId = Convert.ToInt32(row["custId"]);
                LetterViewer lv = new LetterViewer(custId, nrAMT, nrGS1, nrGS2, dateTimePicker1.Value);
                lv.ShowDialog();

                Cursor = Cursors.Default;
            }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            listyDataGridView.EndEdit();

            foreach (DataRowView r in listyBindingSource.List)
            {
                r["drukuj"] = !Convert.ToBoolean(r["drukuj"]);
            }

            listyBindingSource.ResetBindings(false);
        }

        /// <summary>
        /// Ustawia kolejność do druku.
        /// </summary>
        private void ustawKolejnoscToolStripButton_Click(object sender, EventArgs e)
        {
            if (listyDataGridView.SortedColumn != null)
            {
                DataGridViewColumn c = listyDataGridView.SortedColumn;
                listyDataGridView.SortedColumn.SortMode = DataGridViewColumnSortMode.NotSortable;
                listyBindingSource.Sort = "suma DESC, ilosc DESC";
                c.SortMode = DataGridViewColumnSortMode.Automatic;
            }
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            listyDataGridView.EndEdit();

            if (listyBindingSource.List.Count != 0)
            {
                List<int> klienci = new List<int>();
                int custId;

                foreach (DataRowView r in listyBindingSource.List)
                {
                    if (Convert.ToBoolean(r["drukuj"]))
                    {
                        custId = Convert.ToInt32(r["custId"]);
                        klienci.Add(custId);
                    }
                }

                Cursor = Cursors.WaitCursor;

                LetterViewer lv = new LetterViewer(klienci, nrAMT, nrGS1, nrGS2, dateTimePicker1.Value);
                lv.ShowDialog();
            }

            Cursor = Cursors.Default;
        }

        private void klientToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                int idRek = Convert.ToInt32(row["ReklamaId"]);

                int custId = DbUtils.customerId(idRek);

                ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).pokazKlienta(custId);

                Hide();

                ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).Show();
            }
        }

        private void wyslijProMailemToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                Cursor = Cursors.WaitCursor;

                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;

                string idReklamy = row["NAZWA_ZAMOWIENIA"].ToString();
                int reklamaId = Convert.ToInt32(row["reklamaId"]);
                

                string tytul;
                int grzbiet;
                string miasto;
                string agencja;
                byte staryNowyArchiwum;

                Produkcja.ArgumentyDoSciezki(reklamaId, idReklamy, out tytul, out grzbiet, out miasto,
                                             out staryNowyArchiwum, out agencja);

                string sciezka = Produkcja.GetReklamaFileName(idReklamy, tytul, grzbiet, miasto, staryNowyArchiwum,
                                                              "jpg", agencja);

                if (File.Exists(sciezka))
                {
                    int custId = DbUtils.customerId(Convert.ToInt32(row["reklamaId"]));
                    string temat = "Projekt do zamówienia: " + idReklamy;
                    MailForm mf = new MailForm(custId, temat, sciezka);
                    mf.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Nie znaleziono pliku: " + sciezka);
                }

                Cursor = Cursors.Default;
            }
        }

        private void usunToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                if (MessageBox.Show("Czy na pewno chcesz usunąć rekord?", "", MessageBoxButtons.YesNo) ==
                    DialogResult.Yes)
                {
                    pRODUKCJABindingSource.RemoveCurrent();
                    pRODUKCJABindingSource.EndEdit();
                    pRODUKCJATableAdapter.Update(rEKLAMADataSet.PRODUKCJA);
                }
            }
        }


        private void wylaczSortowanieGrida()
        {
            foreach (DataGridViewColumn c in produkcjaDataGridView.Columns)
            {
                c.SortMode = DataGridViewColumnSortMode.Programmatic;
            }
        }

        private void wlaczSortowanieGrida()
        {
            foreach (DataGridViewColumn c in produkcjaDataGridView.Columns)
            {
                c.SortMode = DataGridViewColumnSortMode.Automatic;
            }
        }

        private void fullInfoToolStripButton_Click(object sender, EventArgs e)
        {
            if (pRODUKCJABindingSource.Current != null)
            {
                DataRowView row = (DataRowView)pRODUKCJABindingSource.Current;
                int id = Convert.ToInt32(row["id"]);
                FullInfoProjectForm fipf = new FullInfoProjectForm(id);
                fipf.ShowDialog();
            }
        }

        private void produkcjaDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (produkcjaDataGridView["PRIORYTET", e.RowIndex].Value.ToString() == "PILNY")
            {
                e.CellStyle.ForeColor = Color.Red;
            }
            else
            {
                e.CellStyle.ForeColor = Color.Black;
            }
        }

        #region IForm Members

        public void CloseForm()
        {
            productionForm = null;
        }

        #endregion

        private void tabOgloszenia_Enter(object sender, EventArgs e)
        {
            BindOgloszenia();
        }

        private void BindOgloszenia()
        {
            ProductionRepository repository = new ProductionRepository(ConnString.getConnString().Value);
            dgvOgloszenia.DataSource = repository.FindAllToDo(User.Instance().Login);
        }

        private void SearchOgloszenia()
        {
            string status = string.Empty;
            string adName = string.Empty;

            if (!string.IsNullOrEmpty(productionStatusCombo.Text))
                status = productionStatusCombo.Text;

            if (!string.IsNullOrEmpty(adNameTxt.Text.Trim()))
                adName = adNameTxt.Text.Trim();

            ProductionRepository repository = new ProductionRepository(ConnString.getConnString().Value);
            dgvOgloszenia.DataSource = repository.Find(status, adName);
        }

        private static void UpdateOgloszenie(Production entity)
        {
            ProductionRepository repository = new ProductionRepository(ConnString.getConnString().Value);
            repository.Save(entity);
        }

        private void productionSearchBtn_Click(object sender, EventArgs e)
        {
            SearchOgloszenia();
        }

        private void clearParamsBtn_Click(object sender, EventArgs e)
        {
            productionStatusCombo.SelectedIndex = -1;
            adNameTxt.Text = string.Empty;
            agentListCombo.SelectedIndex = -1;
        }

        private void productionRefreshBtn_Click(object sender, EventArgs e)
        {
            SearchOgloszenia();
        }

        private void productionDetailsBtn_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).pokazKlienta(CurrentProduction.CustomerId);
            Hide();
            ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).Show();
        }

        private void productionDetails_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            ProjectForm projectForm = new ProjectForm(CurrentProduction.AdId, CurrentProduction.Id);
            if (projectForm.ShowDialog() == DialogResult.OK)
            {
                SearchOgloszenia();
            }
        }

        private void adDetailsBtn_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            OrderDetails.getOrderDetails().PokazSzczegolyZamowienia(CurrentProduction.AdId);
            OrderDetails.getOrderDetails().ShowDialog();
        }

        private void toProduction_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            ProductionRepository repository = new ProductionRepository(ConnString.getConnString().Value);
            Production production = repository.Find(CurrentProduction.Id);
            if (production.ProductionDate != DateTime.MinValue)
            {
                MessageBox.Show("Ogłoszenie już zostało przejęte do produkcji.\nProszę odświeżyć widok.",
                                "Baza Reklam - produkcja ogłoszeń");
                return;
            }

            CurrentProduction.Status = IN_PRODUCTION;
            CurrentProduction.ProductionDate = DateTime.Now;
            CurrentProduction.ProductionAgent = User.Instance().Login;

            UpdateOgloszenie(CurrentProduction);

            SearchOgloszenia();
        }

        private void dgvOgloszenia_SelectionChanged(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            toProductionBtn.Enabled = CurrentProduction.ProductionDate == DateTime.MinValue && User.Instance().IsProdukcja;
            
            readyBtn.Enabled = CurrentProduction.ProductionDate != DateTime.MinValue 
                               && CurrentProduction.AcceptanceDate == DateTime.MinValue 
                               && User.Instance().IsProdukcja;

            returnBtn.Enabled = CurrentProduction.ProductionDate != DateTime.MinValue 
                                && CurrentProduction.AcceptanceDate == DateTime.MinValue 
                                && CurrentProduction.ReturnDate == DateTime.MinValue 
                                && User.Instance().IsProdukcja;
        }

        private void readyBtn_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            CurrentProduction.Status = DONE;
            CurrentProduction.AcceptanceDate = DateTime.Now;

            UpdateOgloszenie(CurrentProduction);

            SearchOgloszenia();

        }

        private void returnBtn_Click(object sender, EventArgs e)
        {
            if (CurrentProduction == null) return;

            CurrentProduction.Status = BACK_TO_AGENT;
            CurrentProduction.ReturnDate = DateTime.Now;

            UpdateOgloszenie(CurrentProduction);

            SearchOgloszenia();
        }
    }
}