using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;

namespace Baza_Reklam
{
    public partial class ReportsForm : Form
    {
        private static ReportsForm reportsForm;

        private string reportsCatalog = "";

        public static ReportsForm getReportsForm(MDIBazaReklam parent)
        {
            if (reportsForm == null) {
                reportsForm = new ReportsForm(parent);
            }
            return reportsForm;
        }

        private ReportsForm(MDIBazaReklam parent)
        {
            InitializeComponent();

            this.MdiParent = parent;

            if (!ConnString.getConnString().Value.Contains("10.0.0.21"))
            {
                reportViewer1.ServerReport.ReportServerUrl = new Uri(Properties.Settings.Default.reportsServer);
            }
            else
            {
                reportViewer1.ServerReport.ReportServerUrl = new Uri(Properties.Settings.Default.reportsServerLocal);
            }
           
            if (ConnString.getConnString().Value.Contains("truck"))
            {
                reportsCatalog = "ZestawieniaEXPO";
            }
            else
            {
                reportsCatalog = "Zestawienia";
            }

            wczytajRaporty();
        }

        private void ReportsForm_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }

        /// <summary>
        /// Wczytuje raporty do drzewka
        /// </summary>
        private void wczytajRaporty() {

            TreeNode node;

            node = new TreeNode("Wpływy");
            node.Name = "Wpływy";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Sprzedaż");
            node.Name = "Sprzedaż";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Zaległości");
            node.Name = "Zaległości";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Koszty biur");
            node.Name = "Koszty biur";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Rankingi");
            node.Name = "Rankingi";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Analiza sprzedaży");
            node.Name = "Analiza sprzedaży";
            treeView1.Nodes.Add(node);          

            node = new TreeNode("Produkcja");
            node.Name = "Produkcja";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Pozostałe");
            node.Name = "Pozostałe";
            treeView1.Nodes.Add(node);

            node = new TreeNode("Raporty_CT_EXPO");
            node.Name = "Raporty_CT_EXPO";
            treeView1.Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/ListaReklamNaWydanieNr";
            node.Text = "Lista reklam na wydanie";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/zestawienieDTP";
            node.Text = "Zestawienie czasu produkcji";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/zestawienieDTP2";
            node.Text = "Średni czas produkcji DTP";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/zestawienieKOREKTA";
            node.Text = "Średni czas produkcji - KOREKTA";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);
            
            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/PorownanieListReklam";
            node.Text = "Porównanie list reklam";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/ReklamyDoUsuniecia";
            node.Text = "Reklamy do usunięcia";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/ReklamyDoDodania";
            node.Text = "Reklamy do dodania";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);


            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/ReklamaWInternecie";
            node.Text = "Reklama w Internecie";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/ListaReklamA3";
            node.Text = "Lista reklam A3";
            treeView1.Nodes["Produkcja"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/testowyAll";
            node.Text = "Raport testowy";
            treeView1.Nodes["Pozostałe"].Nodes.Add(node);

            node = new TreeNode();
            node.Name = "/" + reportsCatalog + "/testowyAll2";
            node.Text = "Raport testowy 2";
            treeView1.Nodes["Pozostałe"].Nodes.Add(node);

            if (User.getUser().St_handlowiec | User.getUser().St_subhandlowiec  | User.getUser().St_kierownik | User.getUser().St_sekretarka)
            {
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZestawienieMiesieczneFaktur";
                node.Text = "Zestawienie miesięczne faktur";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);
               
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/SprzedazReklam";
                node.Text = "Sprzedaż reklam";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);
              
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/Zaleglosci";
                node.Text = "Zaległości";
                treeView1.Nodes["Zaległości"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RozliczenieProwizjiZaReklame";
                node.Text = "Rozliczenie prowizji za reklamę";
                treeView1.Nodes["Wpływy"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RozliczenieWplywowWgDatyWplaty2";
                node.Text = "Rozliczenie wpływów wg daty wpłaty";
                treeView1.Nodes["Wpływy"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/PowtorzeniaEmisji";
                node.Text = "Powtórzenia emisji";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZestawienieKontaktow";
                node.Text = "Zestawienie kontaktów";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/Logi";
                node.Text = "Logi - zamówienia";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/LogiKlient";
                node.Text = "Logi - klient 1";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/LogiKlient2";
                node.Text = "Logi - klient 2";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/BrakKontaktu";
                node.Text = "Brak kontaktu";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);
            }

            if (User.getUser().St_handlowiec | User.getUser().St_subhandlowiec | User.getUser().St_kierownik)
            {                
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WynikAgenta";
                node.Text = "Wynik agenta";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);
                
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/PodsumowanieRoczneWedlugZamowien";
                node.Text = "Podsumowanie roczne według zamówień";
                treeView1.Nodes["Analiza sprzedaży"].Nodes.Add(node);
                                
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/OcenaAgenta";
                node.Text = "Ocena agentów";
                treeView1.Nodes["Wpływy"].Nodes.Add(node);                               
            }

            if (User.getUser().St_kierownik) {

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/SprzedazReklamWYR";
                node.Text = "Sprzedaż reklam - wyróżnienia";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RozliczenieWplywowWgDatyWplatyWYR";
                node.Text = "Rozliczenie wpływów - wyróżnienia";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZamowieniaVSFaktury";
                node.Text = "Zamówienia VS Faktury";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WynikAgencji";
                node.Text = "Wynik Agencji";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/testowyVIP";
                node.Text = "Raport testowy VIP";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);
 
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/KosztyPrzychodyBiura";
                node.Text = "Przychody i koszty biura";
                treeView1.Nodes["Koszty biur"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/KosztyBiur";
                node.Text = "Koszty biur";
                treeView1.Nodes["Koszty biur"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RankingKlientow";
                node.Text = "Ranking klientów";
                treeView1.Nodes["Rankingi"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RankingAgentow";
                node.Text = "Ranking agentów";
                treeView1.Nodes["Rankingi"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresWplywyNaNumer";
                node.Text = "Wykres wpływy na numer";
                treeView1.Nodes["Analiza sprzedaży"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresPowierzchniReklam";
                node.Text = "Wykres powierzchni reklam";
                treeView1.Nodes["Analiza sprzedaży"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresIloscReklamNaNumer";
                node.Text = "Wykres ilość reklam na numer";
                treeView1.Nodes["Analiza sprzedaży"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZestawienieMiesieczneAgencjeIlosc";
                node.Text = "Zestawienie miesięczne agencje - ilość";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZestawienieMiesieczneAgencje";
                node.Text = "Zestawienie miesięczne - agencje";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykonanieBudzetu";
                node.Text = "Wykonanie budżetu 1";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykonanieBudzetu2";
                node.Text = "Wykonanie budżetu 2";
                treeView1.Nodes["Pozostałe"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/SprzedazNaWydanie";
                node.Text = "Sprzedaż na wydanie";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresNettoIlosc";
                node.Text = "Netto-Ilość - zatwierdzone do druku";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresNettoIlosc2";
                node.Text = "Netto-Ilość - zafakturowane";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresNettoIlosc3";
                node.Text = "Netto-Ilość - zapłacone";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/WykresNettoIlosc4";
                node.Text = "Netto-Ilość - zapłacone i zafakturowane";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/NettoWgPanstw";
                node.Text = "Zestawienie wg państw";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);  
                 
                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/NettoWgPanstwMiesiecznie";
                node.Text = "Zestawienie miesięczne wg państw";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/NettoWgWojewodztwMiesiecznie";
                node.Text = "Zestawienie miesięczne wg województw";
                treeView1.Nodes["Sprzedaż"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/ZestawienieKontaktowCT_EXPO";
                node.Text = "Zestawienie Kontaktow CT_EXPO";
                treeView1.Nodes["Raporty_CT_EXPO"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/SprzedazReklamCT_EXPO";
                node.Text = "Sprzedaz Reklam CT_EXPO";
                treeView1.Nodes["Raporty_CT_EXPO"].Nodes.Add(node);

                node = new TreeNode();
                node.Name = "/" + reportsCatalog + "/RozliczenieWplywowWgDatyWplatyCT_EXPO";
                node.Text = "Rozliczenie Wplywow Wg Daty Wplaty CT_EXPO";
                treeView1.Nodes["Raporty_CT_EXPO"].Nodes.Add(node); 
            }
        }

        private void ReportsForm_Shown(object sender, EventArgs e)
        {
            try
            {
                if (User.getUser().St_handlowiec)
                {
                    /*
                    reportViewer1.ServerReport.ReportPath = treeView1.Nodes["Sprzedaż"].Nodes["/" + reportsCatalog + "/WynikAgenta"].Name;
                    reportViewer1.ProcessingMode = ProcessingMode.Remote;

                    List<ReportParameter> paramList = new List<ReportParameter>();

                    paramList.Add(new ReportParameter("agent", User.getUser().Symbol_agenta, true));

                    this.reportViewer1.ServerReport.SetParameters(paramList);
                    this.reportViewer1.RefreshReport();
                    */
                }

            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
            }
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            switch (e.Node.Level) { 
                case 0:
                    break;
                case 1:
                    this.Cursor = Cursors.WaitCursor;

                    reportViewer1.ServerReport.ReportPath = e.Node.Name;

                    if (reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/ZestawienieMiesieczneFaktur" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/ZestawienieKontaktow" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/RozliczenieWplywowWgDatyWplaty2" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/RozliczenieProwizjiZaReklame")
                    {
                        if (!User.getUser().St_kierownik)
                        { 
                            if (User.getUser().St_sekretarka)
                            {
                                List<ReportParameter> paramList = new List<ReportParameter>();
                                paramList.Add(new ReportParameter("prawa_agencje", User.getUser().IdAgencji.ToString(), true));
                                reportViewer1.ServerReport.SetParameters(paramList);
                            }
                            else if (User.getUser().St_handlowiec | User.getUser().St_subhandlowiec)
                            {
                                List<ReportParameter> paramList = new List<ReportParameter>();
                                paramList.Add(new ReportParameter("prawa_agencje", User.getUser().IdAgencji.ToString(), true));
                                paramList.Add(new ReportParameter("prawa_agent", User.getUser().Symbol_agenta, true));
                                reportViewer1.ServerReport.SetParameters(paramList);

                            }
                        }
                    }

                    if (reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/Zaleglosci" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/WynikAgencji" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/SprzedazReklam" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/RozliczenieProwizjiZaReklame" |
                       reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/OcenaAgenta")
                    {
                        if (!User.getUser().St_kierownik)
                        {
                            List<ReportParameter> paramList = new List<ReportParameter>();
                            paramList.Add(new ReportParameter("prawa_agencje", User.getUser().IdAgencji.ToString(), true));
                            reportViewer1.ServerReport.SetParameters(paramList);
                        }
                    }

                    if (reportViewer1.ServerReport.ReportPath == "/" + reportsCatalog + "/WynikAgenta")                  
                    {
                        if (!User.getUser().St_kierownik)
                        {
                            List<ReportParameter> paramList = new List<ReportParameter>();
                            paramList.Add(new ReportParameter("prawa_agent", User.getUser().Symbol_agenta, true));
                            reportViewer1.ServerReport.SetParameters(paramList);
                        }
                    }

                    reportViewer1.RefreshReport();

                    this.Cursor = Cursors.Default;
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// Ukrywa drzewko z listą raportów.
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            splitContainer1.Panel1Collapsed = splitContainer1.Panel1Collapsed ? false : true;
        }

    }
}