using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BazaZamowien.Classes;

namespace BazaZamowien
{
    public partial class ZamowieniaForm : Form
    {
        private bool queryExist;
        private SqlCommand refreshCommand = new SqlCommand();

        private static ZamowieniaForm zamowieniaFormInstace;

        public static ZamowieniaForm getZamowieniaForm(MDImainForm parent)
        {
            if (zamowieniaFormInstace == null)
            {
                zamowieniaFormInstace = new ZamowieniaForm(parent);
            }
            return zamowieniaFormInstace;
        }

        private ZamowieniaForm(MDImainForm parent)
        {
            InitializeComponent();

            this.MdiParent = parent;

            usersTableAdapter.Connection.ConnectionString = ConnString.getConnString().ZamowieniaConnStr;
            dzialyTableAdapter.Connection.ConnectionString = ConnString.getConnString().ZamowieniaConnStr;
            view_ZamowieniaTableAdapter.Connection.ConnectionString = ConnString.getConnString().ZamowieniaConnStr;
            zamowieniaTableAdapter1.Connection.ConnectionString = ConnString.getConnString().ZamowieniaConnStr;


            szukajToolStrip.Items.Insert(6, new ToolStripLabel("cykl.:"));
            szukajToolStrip.Items.Insert(7, new ToolStripControlHost(new CheckBox(), "CykliczneCheckBox"));

            szukajToolStrip.Items.Insert(8, new ToolStripLabel("własne:"));
            szukajToolStrip.Items.Insert(9, new ToolStripControlHost(new CheckBox(), "mojeCheckBox"));

            szukajToolStrip.Items.Insert(10, new ToolStripLabel("Z:"));
            szukajToolStrip.Items.Insert(11, new ToolStripControlHost(new CheckBox(), "ZCheckBox"));

            szukajToolStrip.Items.Insert(12, new ToolStripLabel("D1:"));
            szukajToolStrip.Items.Insert(13, new ToolStripControlHost(new CheckBox(), "D1CheckBox"));

            szukajToolStrip.Items.Insert(14, new ToolStripLabel("D2:"));
            szukajToolStrip.Items.Insert(15, new ToolStripControlHost(new CheckBox(), "D2CheckBox"));

            szukajToolStrip.Items.Insert(16, new ToolStripLabel("D3:"));
            szukajToolStrip.Items.Insert(17, new ToolStripControlHost(new CheckBox(), "D3CheckBox"));

            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["ZCheckBox"]).Control).ThreeState = true;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D1CheckBox"]).Control).ThreeState = true;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D2CheckBox"]).Control).ThreeState = true;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D3CheckBox"]).Control).ThreeState = true;
            
            DateTimePicker dtp = new DateTimePicker();
            dtp.Format = DateTimePickerFormat.Short;
            dtp.Value = DateTime.Today;
            dtp.Width = 80;

            szukajToolStrip.Items.Insert(22, new ToolStripLabel("data zam.:"));
            szukajToolStrip.Items.Insert(23, new ToolStripControlHost(dtp,"dtp"));

            filtrToolStripButton.PerformClick();
        }

        private void mainForm_Load(object sender, EventArgs e)
        {
            this.usersTableAdapter.Fill(this.zamowieniaDataSet.Users);
            this.dzialyTableAdapter.Fill(this.zamowieniaDataSet.Dzialy);

            if (User.getUser().Grupa == 3 | User.getUser().Administracja)
            {
                ZamowieniaDBBindings.bindujDzialyAll(dzialyToolStripComboBox);
            }
            else
            {
                ZamowieniaDBBindings.bindujDzialy(dzialyToolStripComboBox, User.getUser().IDE);
            }
            this.dzialyToolStripComboBox.SelectedIndex = -1;

            danePoczatkowe();
            uprawnienia();
        }

        private void szukajToolStripButton_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            
            string query = "SELECT  IDE,Numer, Numer_Roz, Numer_Rok, ZamowienieKto, ZamowienieDzial, ZamowienieKategoria1, ";
            query += " ZamowienieData, ZamowienieTresc, ZamowienieWartosc1, ZamowienieWartosc2, ZamowienieZatwierdzone, ";
            query += " Decyzja1, Decyzja1Kto, Decyzja1Data, Decyzja2, Decyzja2Kto, Decyzja2Data, Decyzja3, Decyzja3Kto, ";
            query += " Decyzja3Data, FullNumer, Dec2, Dec1, Dec3 FROM view_Zamowienia ";

            if (!(User.getUser().Grupa == 3))
            {
                query += " WHERE ((ZamowienieKto = @PARAM) or  ((ZamowienieKto !=@PARAM)";
                query += " and view_Zamowienia.ZamowienieDzial in (select UsersDzialy.IDEDzial from UsersDzialy ";
                query += " where UsersDzialy.IDEUser = @PARAM)))";
            }
            else
            {
                query += " WHERE 1=1 ";
            }

            SqlCommand command = new SqlCommand();
            command.CommandText = query;
            command.Connection = new SqlConnection(ConnString.getConnString().ZamowieniaConnStr);

            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;

            command.Parameters.AddWithValue("@PARAM", User.getUser().IDE);

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["mojeCheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " and (ZamowienieKto=@kto) ";
                command.Parameters.AddWithValue("@kto", User.getUser().IDE);

            }
            
            if (dzialyToolStripComboBox.SelectedItem != null)
            {
                command.CommandText += "  and ZamowienieDzial=@dzial ";
                command.Parameters.AddWithValue("@dzial", ((BoundItem)dzialyToolStripComboBox.SelectedItem).IDEvalue1);
            }
            
            if (rokToolStripTextBox.Text != "")
            {
                int i;
                if (!Int32.TryParse(rokToolStripTextBox.Text, out i)){
                    MessageBox.Show("Podaj poprawny rok.");
                    return;
                }

                command.CommandText += " and (Numer_Rok=@rok) ";
                command.Parameters.AddWithValue("@rok", i);
            }           

            if (trescToolStripTextBox.Text != "")
            {
                command.CommandText += " and ZamowienieTresc like '%' + @tresc + '%' ";
                command.Parameters.AddWithValue("@tresc", trescToolStripTextBox.Text);
            }

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["CykliczneCheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " AND (ZamowienieWartosc2<>0) ";
            }
            else if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["CykliczneCheckBox"]).Control).CheckState == CheckState.Unchecked)
            {
                command.CommandText += " AND (ZamowienieWartosc2=0)  ";
            }                  

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["ZCheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " AND (ZamowienieZatwierdzone<>0) ";
            }
            else if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["ZCheckBox"]).Control).CheckState == CheckState.Unchecked)
            {
                command.CommandText += " AND (ZamowienieZatwierdzone=0 OR ZamowienieZatwierdzone is null)  ";
            }

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D1CheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " AND (Decyzja1<>0) ";
            }
            else if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D1CheckBox"]).Control).CheckState == CheckState.Unchecked)
            {
                command.CommandText += " AND (Decyzja1=0 OR Decyzja1 is null) ";
            }

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D2CheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " AND (Decyzja2<>0) ";
            }
            else if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D2CheckBox"]).Control).CheckState == CheckState.Unchecked)
            {
                command.CommandText += " AND (Decyzja2=0 OR Decyzja2 is null) ";
            }

            if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D3CheckBox"]).Control).CheckState == CheckState.Checked)
            {
                command.CommandText += " AND (Decyzja3<>0) ";
            }
            else if (((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D3CheckBox"]).Control).CheckState == CheckState.Unchecked)
            {
                command.CommandText += " AND (Decyzja3=0 OR Decyzja3 is null) ";
            }
            
            zamowieniaDataSet.view_Zamowienia.Clear();
         
            adapter.Fill(zamowieniaDataSet.view_Zamowienia);

            this.refreshCommand = command;
            this.queryExist = true;

            this.Cursor = Cursors.Default;
            
        }

        private void filtrToolStripButton_Click(object sender, EventArgs e)
        {
            rokToolStripTextBox.Clear();
            trescToolStripTextBox.Clear();
            this.dzialyToolStripComboBox.SelectedIndex = -1;

            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["CykliczneCheckBox"]).Control).CheckState = CheckState.Indeterminate;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["mojeCheckBox"]).Control).CheckState = CheckState.Indeterminate;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["ZCheckBox"]).Control).CheckState = CheckState.Indeterminate;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D1CheckBox"]).Control).CheckState = CheckState.Indeterminate;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D2CheckBox"]).Control).CheckState = CheckState.Indeterminate;
            ((CheckBox)((ToolStripControlHost)szukajToolStrip.Items["D3CheckBox"]).Control).CheckState = CheckState.Indeterminate;       
        }

        private void kryteriumWyszukiwania_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                szukajToolStripButton.PerformClick();
            }
        }
                
        private void zamowieniaDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show(e.ColumnIndex + "****" + zamowieniaDataGridView[e.ColumnIndex, e.RowIndex].Value.ToString() + "***" + e.RowIndex);
        }

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

                DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;
                int IDE = Convert.ToInt32(row["IDE"]);

                ZamowienieForm zf = new ZamowienieForm(IDE, false);

                if (zf.ShowDialog() == DialogResult.OK)
                {
                    //odswiezanie
                    odswiez();
                }

                this.Cursor = Cursors.Default;
            }
        }

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

                DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;
                int IDE = Convert.ToInt32(row["IDE"]);

                ZamowienieForm zf = new ZamowienieForm(IDE, true);

                if (zf.ShowDialog() == DialogResult.OK)
                {
                    //odswiezanie
                    //odswiez();
                    danePoczatkowe();
                }

                this.Cursor = Cursors.Default;
            }
        }

        private void mainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

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

            ZamowienieForm zf = new ZamowienieForm();

            if (zf.ShowDialog() == DialogResult.OK)
            {
               // this.refreshCommand.CommandText = "select ";
               // odswiez();
                danePoczatkowe();
            }

            this.Cursor = Cursors.Default;
        }

        private void uprawnienia(){      
            
            //administracja
            //dyr generalny
            //dyr finansowy
            //glowna ksiegowa
            //kierownik
            //zwykly suer

            // wyszukiwanie
            // filtry
            /*
            if (!(User.getUser().St_kierownik | User.getUser().St_dyrektorGeneralny |
                User.getUser().St_dyrektorFinansowy | User.getUser().St_glownyKsiegowy | 
                User.getUser().Administracja | (User.getUser().Grupa == 3))) {

                usunZamToolStripButton.Enabled = false;
            } */

            if (User.getUser().Administracja | (User.getUser().Grupa == 3)) {
                userToolStripButton.Visible = true;
                userToolStripButton.Enabled = true;
            }

        }

        private void danePoczatkowe()
        {
          
            string query = "SELECT  IDE,Numer, Numer_Roz, Numer_Rok, ZamowienieKto, ZamowienieDzial, ZamowienieKategoria1, ";
            query += " ZamowienieData, ZamowienieTresc, ZamowienieWartosc1, ZamowienieWartosc2, ZamowienieZatwierdzone, ";
            query += " Decyzja1, Decyzja1Kto, Decyzja1Data, Decyzja2, Decyzja2Kto, Decyzja2Data, Decyzja3, Decyzja3Kto, ";
            query += " Decyzja3Data, FullNumer, Dec2, Dec1, Dec3 FROM view_Zamowienia";
            query += " WHERE ((ZamowienieKto = @PARAM) or  ((ZamowienieKto !=@PARAM)";
            query += " and view_Zamowienia.ZamowienieDzial in (select UsersDzialy.IDEDzial from UsersDzialy ";
            query += " where UsersDzialy.IDEUser = @PARAM))) ";


            if (User.getUser().St_glownyKsiegowy)
            {
                query += " AND (Decyzja3 is null or Decyzja3 <> 1) ";
            }
            else if (User.getUser().St_dyrektorFinansowy)
            {
                query += " AND (Decyzja2 is null or Decyzja2 <> 1) ";
            }

            query += " AND (ZamowienieData >= GETDATE()-100) ORDER BY ZamowienieData desc";
            /*
            query += User.getUser().St_kierownik ? " AND (Dec1 IS NULL) " : "";
            query += User.getUser().St_dyrektorFinansowy ? " AND (Dec2 IS NULL) " : "";
            query += User.getUser().St_dyrektorGeneralny | User.getUser().St_glownyKsiegowy ? " AND (Dec3 IS NULL) " : "";
            */
      
            SqlCommand command = new SqlCommand();
            command.CommandText = query;
            command.Connection = new SqlConnection(ConnString.getConnString().ZamowieniaConnStr);


            command.Parameters.AddWithValue("@PARAM", User.getUser().IDE);

            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;
            
            zamowieniaDataSet.view_Zamowienia.Clear();

            adapter.Fill(zamowieniaDataSet.view_Zamowienia);

            this.refreshCommand = command;
            this.queryExist = true;
            
        }


        private int ileDoRoboty()
        {
          /*
            int i = 0;

            if (User.getUser().St_glownyKsiegowy | User.getUser().St_dyrektorGeneralny)
            {
                i += (int)ZamowieniaUtils.ExecuteQuery("select count(*) from zamowienia where (ZamowienieZatwierdzone<>0) AND (Decyzja3=0 Or Decyzja3 IS NULL) ");
            }

            if (User.getUser().St_dyrektorFinansowy)
            {
                i += (int)ZamowieniaUtils.ExecuteQuery("select count(*) from zamowienia where (ZamowienieZatwierdzone<>0) AND (Decyzja2=0 Or Decyzja2 IS NULL) ");
            }
            
            if (User.getUser().St_kierownik) {
                i += (int)ZamowieniaUtils.ExecuteQuery("select count(*) from zamowienia where (ZamowienieZatwierdzone<>0) AND (Decyzja1=0 Or Decyzja1 IS NULL) and ZamowienieDzial " +
                    "in (select UsersDzialy.IDEDzial from UsersDzialy where UsersDzialy.IDEUser = "  + User.getUser().IDE +" ) " );
                  
            }
            
            return i; 
             * */
            return 0;
        }

        private void usunZamToolStripButton_Click(object sender, EventArgs e)
        {
            if (viewZamowieniaBindingSource.Current != null)
            {
                if (MessageBox.Show("Czy na pewno chcesz usunąc rekord?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {

                    DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;
                    int IDE = Convert.ToInt32(row["IDE"]);


                    if (ZamowieniaUtils.czyMoznaUsunacZam(IDE))
                    {

                        zamowieniaTableAdapter1.Delete(IDE);
                        MessageBox.Show("Zamówienie zostało usunięte.");
                        odswiez();
                    }
                    else
                    {
                        MessageBox.Show("Nie można usunąć zamówienia");
                    }
                }
            }
        }
        
        private void mainForm_Shown(object sender, EventArgs e)
        {
            int i = ileDoRoboty();

            if (i != 0)
            {
                MessageBox.Show("Liczba rekordów do zatwierdzenia : " + i);
            }
        }

        private void odswiez()
        {
            if (queryExist)
            {               
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = this.refreshCommand;

                zamowieniaDataSet.view_Zamowienia.Clear();

                adapter.Fill(zamowieniaDataSet.view_Zamowienia);
            }
        }

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

            string query = "SELECT  IDE,Numer, Numer_Roz, Numer_Rok, ZamowienieKto, ZamowienieDzial, ZamowienieKategoria1, ";
            query += " ZamowienieData, ZamowienieTresc, ZamowienieWartosc1, ZamowienieWartosc2, ZamowienieZatwierdzone, ";
            query += " Decyzja1, Decyzja1Kto, Decyzja1Data, Decyzja2, Decyzja2Kto, Decyzja2Data, Decyzja3, Decyzja3Kto, ";
            query += " Decyzja3Data, FullNumer, Dec2, Dec1, Dec3 FROM view_Zamowienia ";
            query += " WHERE ((ZamowienieKto = @PARAM) or  ((ZamowienieKto !=@PARAM)";
            query += " and view_Zamowienia.ZamowienieDzial in (select UsersDzialy.IDEDzial from UsersDzialy ";
            query += " where UsersDzialy.IDEUser = @PARAM)))";
 

            SqlCommand command = new SqlCommand();
            command.CommandText = query;
            command.Connection = new SqlConnection(ConnString.getConnString().ZamowieniaConnStr);

            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;

            command.Parameters.AddWithValue("@PARAM", User.getUser().IDE);

            DateTime dzien = ((DateTimePicker)((ToolStripControlHost)szukajToolStrip.Items["dtp"]).Control).Value;
            if (dzien != null)
            {
                command.CommandText += " and year(ZamowienieData)=@rok and month(ZamowienieData)=@ms and day(ZamowienieData)=@dzien ";
                command.Parameters.AddWithValue("@rok", dzien.Year);
                command.Parameters.AddWithValue("@ms", dzien.Month);
                command.Parameters.AddWithValue("@dzien", dzien.Day);
            }

            zamowieniaDataSet.view_Zamowienia.Clear();

            adapter.Fill(zamowieniaDataSet.view_Zamowienia);

            this.refreshCommand = command;
            this.queryExist = true;

            this.Cursor = Cursors.Default;
        }

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

        private void userToolStripButton_Click(object sender, EventArgs e)
        {
            AdminFormZamowienie af = new AdminFormZamowienie();
            af.Show();
        }

        private void mailToolStripButton_Click(object sender, EventArgs e)
        {
            if (viewZamowieniaBindingSource.Current != null)
            {
                DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;
                int IDE = Convert.ToInt32(row["IDE"]);

                MailForm mailForm = new MailForm();
                ZamowienieMail.initMailForm(mailForm, IDE);
                mailForm.ShowDialog();
            }
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            if (viewZamowieniaBindingSource.List.Count > 0)
            {
                List<int> lista = new List<int>();
                foreach (DataRowView row in viewZamowieniaBindingSource.List)
                {
                    lista.Add(Convert.ToInt32(row["IDE"]));
                }
                ZamowienieViewer zv = new ZamowienieViewer(lista);
                zv.ShowDialog();
            }
        }

        private void wydrukPojToolStripButton_Click(object sender, EventArgs e)
        {
            if (viewZamowieniaBindingSource.Current != null)
            {
                List<int> lista = new List<int>();
                DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;                

                lista.Add(Convert.ToInt32(row["IDE"]));
                
                ZamowienieViewer zv = new ZamowienieViewer(lista);
                zv.ShowDialog();
            }
        }

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

            ExcelHandler ex = new ExcelHandler();
            ex.exportToExcel(zamowieniaDataGridView);

            this.Cursor = Cursors.Default;
        }
        

        /*
        private void zamowieniaDataGridView_KeyPress(object sender, KeyPressEventArgs e)
        {   
            /*
            if (e.KeyChar == 13)
            {
                /*
                //toolStripButton3.PerformClick();

                /*
                if (viewZamowieniaBindingSource.Current != null)
                {
                    DataRowView row = (DataRowView)viewZamowieniaBindingSource.Current;
                    int IDE = Convert.ToInt32(row["IDE"]);

                    zamowienieForm zf = new zamowienieForm(IDE, false);
                    zf.ShowDialog();
                }
                MessageBox.Show("dupa");
            }
        }*/
        }

    
}