using System;
using System.Data;
using System.Windows.Forms;
using System.Globalization;
using System.Data.SqlClient;

namespace Baza_Reklam
{
    public partial class FakturowaniePoznanKatowice : Form
    {
        private SLOWNIKDataSet.AGENCJERow agencjaPoznan;
        private SLOWNIKDataSet.AGENCJERow agencjaKatowice;
        private SLOWNIKDataSet.AGENCJERow agencjaRedakcja;
        private SLOWNIKDataSet.KONTARow konto;

        private REKLAMADataSet.KLIENCIRow klientPoznan;
        private REKLAMADataSet.KLIENCIRow klientKatowice;

        public FakturowaniePoznanKatowice()
        {
            InitializeComponent();

            fAKTURYTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            fakturA_DETAILSTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            klienciTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            agencjeTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            kontaTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            wplatyTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;

            dtpZmianaDaty.Value = DateTime.Today;
            dtpZmianaDaty.MaxDate = DateTime.Today;

            nrTygodniaUpDown.Minimum = 1;
            nrTygodniaUpDown.Maximum = 53;

            CultureInfo ciCurr = CultureInfo.CurrentCulture;
            int weekNum = ciCurr.Calendar.GetWeekOfYear(DateTime.Today, CalendarWeekRule.FirstFourDayWeek,
                                                        DayOfWeek.Monday);

            nrTygodniaUpDown.Value = weekNum;
        }

        private void FakturowaniePoznanKatowice_Load(object sender, EventArgs e)
        {
            agencjaPoznan = agencjeTableAdapter.GetDataByIdAgencji((int)FakturaHelper.OfficeId.Poznan)[0];
            agencjaKatowice = agencjeTableAdapter.GetDataByIdAgencji((int)FakturaHelper.OfficeId.Katowice)[0];
            agencjaRedakcja = agencjeTableAdapter.GetDataByIdAgencji((int)FakturaHelper.OfficeId.Redakcja)[0];

            konto = kontaTableAdapter.GetDataById((int)FakturaHelper.BankAccount.CentralaPLN)[0];

            klientKatowice = klienciTableAdapter.GetDataByCustomerId((int)FakturaHelper.ClientId.Katowice)[0];
            klientPoznan = klienciTableAdapter.GetDataByCustomerId((int)FakturaHelper.ClientId.Poznan)[0];
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (agencjaListBox.SelectedItem != null)
            {
                fAKTURYTableAdapter.FillByKodAgenta(rEKLAMADataSet.FAKTURY,
                                                    agencjaListBox.SelectedItem.ToString());
            }
        }

        private void fakturaButton_Click(object sender, EventArgs e)
        {
            REKLAMADataSet.FAKTURYRow naglowekFaktury = null;

            Cursor = Cursors.WaitCursor;

            try
            {
                switch (agencjaListBox.SelectedItem.ToString())
                {
                    case "POZ":
                        naglowekFaktury = utworzNaglowekFaktury(klientPoznan, agencjaPoznan);
                        break;
                    case "KAT":
                        naglowekFaktury = utworzNaglowekFaktury(klientKatowice, agencjaKatowice);
                        break;
                }

                rEKLAMADataSet.FAKTURY.AddFAKTURYRow(naglowekFaktury);
                utworzPozycjeFaktury(naglowekFaktury);
                dodajWplate(naglowekFaktury);

                SqlConnection conn = new SqlConnection(ConnString.getConnString().Value);

                fAKTURYTableAdapter.Connection = conn;
                fakturA_DETAILSTableAdapter.Connection = conn;
                wplatyTableAdapter.Connection = conn;

                conn.Open();

                SqlTransaction transaction = conn.BeginTransaction();
                fAKTURYTableAdapter.AttachTransaction(transaction);
                fakturA_DETAILSTableAdapter.AttachTransaction(transaction);
                wplatyTableAdapter.AttachTransaction(transaction);

                try
                {
                    fAKTURYTableAdapter.Update(rEKLAMADataSet.FAKTURY);
                    fakturA_DETAILSTableAdapter.Update(rEKLAMADataSet.FAKTURA_DETAILS);
                    wplatyTableAdapter.Update(rEKLAMADataSet.Wplaty);
                    transaction.Commit();
                    dtpZmianaDaty.Value = DateTime.Today;
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    conn.Close();
                    rEKLAMADataSet.FAKTURA_DETAILS.Clear();
                    rEKLAMADataSet.FAKTURY.RemoveFAKTURYRow(naglowekFaktury);
                    fAKTURYBindingSource.ResetBindings(false);
                    fAKTURYDataGridView.Refresh();
                    throw;
                }
            }
            catch (Exception e2)
            {
                MessageBox.Show("Wystąpił błąd: \n" + e2);
            }
            finally
            {
                rEKLAMADataSet.FAKTURA_DETAILS.Clear();
                rEKLAMADataSet.Wplaty.Clear();
                fAKTURYBindingSource.ResetBindings(false);
                fAKTURYBindingSource.Sort = "NUMER";
                fAKTURYDataGridView.Refresh();
            }

            Cursor = Cursors.Default;
        }

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

                DataRowView row = (DataRowView) fAKTURYBindingSource.Current;
                REKLAMADataSet.FAKTURYRow faktura = (REKLAMADataSet.FAKTURYRow) row.Row;

                if (faktura.KOREKTA)
                {
                    MessageBox.Show("Nie można wystawić korekty do korekty");
                    Cursor = Cursors.Default;
                    return;
                }

                //sprawdzenie czy korekta nie byla juz wystawiona
                if (!faktura.IsID_FK_KORNull())
                {
                    MessageBox.Show("Istnieje już faktura korekta");
                    //   return;
                }

                try
                {
                    REKLAMADataSet.FAKTURYRow naglowekKorekty = utworzNaglowekKorekty(faktura);

                    utworzPozycjeFakturyKorekty(naglowekKorekty);

                    if (!faktura.IsID_FK_KORNull())
                    {
                        naglowekKorekty.idFakturyKorekta = faktura.ID_FK_KOR;
                    }

                    SqlConnection conn = new SqlConnection(ConnString.getConnString().Value);

                    fAKTURYTableAdapter.Connection = conn;
                    fakturA_DETAILSTableAdapter.Connection = conn;

                    conn.Open();

                    SqlTransaction transaction = conn.BeginTransaction();
                    fAKTURYTableAdapter.AttachTransaction(transaction);
                    fakturA_DETAILSTableAdapter.AttachTransaction(transaction);

                    try
                    {
                        fAKTURYTableAdapter.Update(rEKLAMADataSet.FAKTURY);

                        faktura.ID_FK_KOR = naglowekKorekty.ID_FAKTURY;
                        faktura.EndEdit();

                        fAKTURYTableAdapter.Update(rEKLAMADataSet.FAKTURY);

                        fakturA_DETAILSTableAdapter.Update(rEKLAMADataSet.FAKTURA_DETAILS);

                        transaction.Commit();
                    }
                    catch (Exception)
                    {
                        transaction.Rollback();
                        conn.Close();
                        throw;
                    }
                }
                catch (Exception e2)
                {
                    MessageBox.Show("Wystąpił błąd: \n" + e2);
                }
                finally
                {
                    rEKLAMADataSet.FAKTURA_DETAILS.Clear();
                    fAKTURYBindingSource.ResetBindings(false);
                    fAKTURYDataGridView.Refresh();
                }
            }

            Cursor = Cursors.Default;
        }

        private REKLAMADataSet.FAKTURYRow utworzNaglowekKorekty(REKLAMADataSet.FAKTURYRow faktura)
        {
            REKLAMADataSet.FAKTURYRow naglowekKorekty = rEKLAMADataSet.FAKTURY.NewFAKTURYRow();
            naglowekKorekty.KOREKTA = true;
            //  naglowekKorekty.EKSPORT = true;

            naglowekKorekty.idFakturyKorekta = faktura.ID_FAKTURY;
            naglowekKorekty.idFakturyVAT = faktura.ID_FAKTURY;

            naglowekKorekty.NUMER_ROZ = faktura.NUMER_ROZ;
            naglowekKorekty.NUMER = Utils.numerNowejFakturyKorekty(naglowekKorekty.NUMER_ROZ, DateTime.Today.Year);
            naglowekKorekty.NUMER_ROK = DateTime.Today.Year;
            naglowekKorekty.DATA_WYSTAWIENIA = DateTime.Today;

            naglowekKorekty.idZamowienia = faktura.ID_SPRZEDAWCY == (int)FakturaHelper.OfficeId.Poznan ?
                                           (int)FakturaHelper.OrderId.Poznan : (int)FakturaHelper.OrderId.Katowice;

            naglowekKorekty.ID_SPRZEDAWCY = faktura.ID_SPRZEDAWCY;
            naglowekKorekty.MIEJSCOWOSC_WYSTAWIENIA = faktura.MIEJSCOWOSC_WYSTAWIENIA;
            naglowekKorekty.SPRZEDAWCA_ADRES = faktura.SPRZEDAWCA_ADRES;
            naglowekKorekty.SPRZEDAWCA_NIP = faktura.SPRZEDAWCA_NIP;

            naglowekKorekty.PODPIS_WYSTAWIL = faktura.PODPIS_WYSTAWIL;
            naglowekKorekty.DATA_SPRZEDAZY = DateTime.Today;

            naglowekKorekty.ID_NABYWCY = faktura.ID_NABYWCY;
            naglowekKorekty.NABYWCA_ADRES = faktura.NABYWCA_ADRES;
            naglowekKorekty.NABYWCA_NIP = faktura.NABYWCA_NIP;
            naglowekKorekty.TERMIN_ZAPLATY = DateTime.Today.AddDays(14);
            naglowekKorekty.opis = "rezygnacja z emisji reklamy";

            naglowekKorekty.SPOSOB_ZAPLATY = faktura.SPOSOB_ZAPLATY;

            naglowekKorekty.ZAPLACONO = false;

            naglowekKorekty.FAKTURA_TYP = 2;
            naglowekKorekty.FAKTURA_PODTYP = 1;

            naglowekKorekty.ID_KONTA = faktura.ID_KONTA;

            rEKLAMADataSet.FAKTURY.AddFAKTURYRow(naglowekKorekty);

            return naglowekKorekty;
        }


        private REKLAMADataSet.FAKTURYRow utworzNaglowekFaktury(REKLAMADataSet.KLIENCIRow klientAgencja,
                                                                SLOWNIKDataSet.AGENCJERow agencja)
        {
            REKLAMADataSet.FAKTURYRow naglowekFaktury = (REKLAMADataSet.FAKTURYRow) rEKLAMADataSet.FAKTURY.NewRow();

            naglowekFaktury.NUMER_ROZ = agencjaListBox.SelectedItem.ToString();
            naglowekFaktury.NUMER = Utils.numerNowejFaktury(naglowekFaktury.NUMER_ROZ, DateTime.Today.Year);
            naglowekFaktury.NUMER_ROK = DateTime.Today.Year;
            naglowekFaktury.DATA_WYSTAWIENIA = DateTime.Today;

            if (dtpZmianaDaty.Value != DateTime.Today)
            {
                naglowekFaktury.DATA_WYSTAWIENIA = dtpZmianaDaty.Value;
            }

            naglowekFaktury.idZamowienia = agencja.Id_agencji == (int)FakturaHelper.OfficeId.Poznan ? 
                                           (int)FakturaHelper.OrderId.Poznan : (int)FakturaHelper.OrderId.Katowice;

            naglowekFaktury.ID_SPRZEDAWCY = agencja.Id_agencji;

            naglowekFaktury.EKSPORT = false;

            naglowekFaktury.MIEJSCOWOSC_WYSTAWIENIA = agencjaRedakcja.miasto;
            naglowekFaktury.SPRZEDAWCA_ADRES = agencjaRedakcja.Adres_Fk;
            naglowekFaktury.SPRZEDAWCA_NIP = agencjaRedakcja.NIP;

            naglowekFaktury.PODPIS_WYSTAWIL = string.Empty;
            naglowekFaktury.DATA_SPRZEDAZY = naglowekFaktury.DATA_WYSTAWIENIA;

            naglowekFaktury.ID_NABYWCY = klientAgencja.CustomerID;
            naglowekFaktury.NABYWCA_ADRES = klientAgencja.Adres_Fkatura;
            naglowekFaktury.NABYWCA_NIP = klientAgencja.Nip;
            naglowekFaktury.opis = string.Empty;

            naglowekFaktury.SPOSOB_ZAPLATY = "Przelew";

            naglowekFaktury.TERMIN_ZAPLATY = naglowekFaktury.DATA_SPRZEDAZY.AddDays(14);
            naglowekFaktury.ZAPLACONO = false;

            naglowekFaktury.FAKTURA_TYP = 2;
            naglowekFaktury.FAKTURA_PODTYP = 1;

            naglowekFaktury.ID_KONTA = Convert.ToInt16(konto.id);

            naglowekFaktury.EndEdit();
            return naglowekFaktury;
        }

        private void utworzPozycjeFaktury(REKLAMADataSet.FAKTURYRow naglowekFaktury)
        {
            REKLAMADataSet.FAKTURA_DETAILSDataTable pozycjeFakturDlaKlientow =
                fakturA_DETAILSTableAdapter.GetDataByNrTygodniaWRoku(
                    dtpZmianaDaty.Value.Year, nrTygodniaUpDown.Value, naglowekFaktury.ID_SPRZEDAWCY,
                    dtpZmianaDaty.Value.Month);

            REKLAMADataSet.FAKTURYDataTable naglowkiFakturDlaKlientow =
                fAKTURYTableAdapter.GetDataByNrTygodniaWRoku(
                    dtpZmianaDaty.Value.Year, nrTygodniaUpDown.Value, naglowekFaktury.ID_SPRZEDAWCY,
                    dtpZmianaDaty.Value.Month);

            if (pozycjeFakturDlaKlientow.Rows.Count == 0 || naglowkiFakturDlaKlientow.Rows.Count == 0)
            {
                throw new Exception("Nie ma co fakturować");
            }

            foreach (REKLAMADataSet.FAKTURA_DETAILSRow pozycjaFaktury in pozycjeFakturDlaKlientow)
            {
                REKLAMADataSet.FAKTURA_DETAILSRow fakturaDetailsRow =
                    rEKLAMADataSet.FAKTURA_DETAILS.NewFAKTURA_DETAILSRow();
                REKLAMADataSet.FAKTURYRow faktura = naglowkiFakturDlaKlientow.FindByID_FAKTURY(pozycjaFaktury.ID_FAKTURY);

                fakturaDetailsRow.ROK = pozycjaFaktury.ROK;
                fakturaDetailsRow.MIESIAC = pozycjaFaktury.MIESIAC;
                fakturaDetailsRow.TYTUL = pozycjaFaktury.TYTUL;
                fakturaDetailsRow.NAZWA_USLUGI = faktura != null
                                                     ? faktura.NUMER + "/" + faktura.NUMER_ROZ + "/"
                                                       + faktura.NUMER_ROK + " | " + pozycjaFaktury.NAZWA_USLUGI
                                                     : "";
                fakturaDetailsRow.reklamaId = pozycjaFaktury.reklamaId;
                fakturaDetailsRow.NR_WYDANIA = pozycjaFaktury.NR_WYDANIA;

                fakturaDetailsRow.CENA_JEDN = pozycjaFaktury.CENA_JEDN;
                fakturaDetailsRow.ILOSC = 1;
                fakturaDetailsRow.JM = "szt.";

                fakturaDetailsRow.UPUST_NETTO = pozycjaFaktury.UPUST_NETTO;
                fakturaDetailsRow.UPUST_PR = pozycjaFaktury.UPUST_PR;
                decimal netto = (1 - Convert.ToDecimal(pozycjaFaktury.UPUST_PR)) * pozycjaFaktury.CENA_JEDN;
                fakturaDetailsRow.NETTO = netto;
                fakturaDetailsRow.S_VAT = 0.22;
                decimal VAT = Convert.ToDecimal(0.22);
                fakturaDetailsRow.VAT = Convert.ToDecimal(Math.Round(VAT * netto, 2));
                fakturaDetailsRow.BRUTTO = Convert.ToDecimal(Math.Round((1 + VAT)*netto, 2));

                fakturaDetailsRow.TYP = 2;
                fakturaDetailsRow.PODTYP = 1;
                fakturaDetailsRow.ID_FAKTURY = naglowekFaktury.ID_FAKTURY;

                if (!pozycjaFaktury.IswyroznienieNull())
                {
                    if (pozycjaFaktury.wyroznienie)
                    {
                        fakturaDetailsRow.wyroznienie = true;
                    }
                }

                rEKLAMADataSet.FAKTURA_DETAILS.AddFAKTURA_DETAILSRow(fakturaDetailsRow);
            }
        }

        private void utworzPozycjeFakturyKorekty(REKLAMADataSet.FAKTURYRow naglowekFaktury)
        {
            REKLAMADataSet.FAKTURA_DETAILSDataTable pozycjeFakturDlaKlientow =
                fakturA_DETAILSTableAdapter.GetDataByNrTygodniaRokZKorekta(dtpZmianaDaty.Value.Month,
                                                                           dtpZmianaDaty.Value.Year,
                                                                           nrTygodniaUpDown.Value,
                                                                           naglowekFaktury.ID_SPRZEDAWCY);

            REKLAMADataSet.FAKTURYDataTable naglowkiFakturDlaKlientow =
                fAKTURYTableAdapter.GetDataByNrTygodniaWRokuZKorekta(dtpZmianaDaty.Value.Month,
                                                                     dtpZmianaDaty.Value.Year, nrTygodniaUpDown.Value,
                                                                     naglowekFaktury.ID_SPRZEDAWCY);

            if (pozycjeFakturDlaKlientow.Rows.Count == 0 || naglowkiFakturDlaKlientow.Rows.Count == 0)
            {
                throw new Exception("Nie ma co fakturować");
            }

            foreach (REKLAMADataSet.FAKTURA_DETAILSRow pozycjaFaktury in pozycjeFakturDlaKlientow)
            {
                REKLAMADataSet.FAKTURA_DETAILSRow fakturaDetailsRow =
                    rEKLAMADataSet.FAKTURA_DETAILS.NewFAKTURA_DETAILSRow();
                REKLAMADataSet.FAKTURYRow faktura = naglowkiFakturDlaKlientow.FindByID_FAKTURY(pozycjaFaktury.ID_FAKTURY);

                fakturaDetailsRow.ROK = pozycjaFaktury.ROK;
                fakturaDetailsRow.MIESIAC = pozycjaFaktury.MIESIAC;
                fakturaDetailsRow.TYTUL = pozycjaFaktury.TYTUL;
                fakturaDetailsRow.NAZWA_USLUGI = GetNazwaUslugiPozKat(faktura, pozycjaFaktury);
                fakturaDetailsRow.reklamaId = pozycjaFaktury.reklamaId;
                fakturaDetailsRow.NR_WYDANIA = pozycjaFaktury.NR_WYDANIA;

                fakturaDetailsRow.CENA_JEDN = pozycjaFaktury.CENA_JEDN;
                fakturaDetailsRow.ILOSC = 1;
                fakturaDetailsRow.JM = "szt.";

                fakturaDetailsRow.UPUST_NETTO = pozycjaFaktury.UPUST_NETTO;
                fakturaDetailsRow.UPUST_PR = pozycjaFaktury.UPUST_PR;
                decimal netto = (decimal)(1 - pozycjaFaktury.UPUST_PR) * pozycjaFaktury.CENA_JEDN;
                fakturaDetailsRow.NETTO = netto;
                fakturaDetailsRow.S_VAT = VatHelper.PL22;
                fakturaDetailsRow.VAT = (decimal)VatHelper.PL22 * netto;
                fakturaDetailsRow.BRUTTO = (decimal)(1 + VatHelper.PL22) * netto;

                fakturaDetailsRow.TYP = 2;
                fakturaDetailsRow.PODTYP = 1;
                fakturaDetailsRow.ID_FAKTURY = naglowekFaktury.ID_FAKTURY;

                if (!pozycjaFaktury.IswyroznienieNull())
                {
                    if (pozycjaFaktury.wyroznienie)
                    {
                        fakturaDetailsRow.wyroznienie = true;
                    }
                }

                rEKLAMADataSet.FAKTURA_DETAILS.AddFAKTURA_DETAILSRow(fakturaDetailsRow);
            }
        }

        private string GetNazwaUslugiPozKat(REKLAMADataSet.FAKTURYRow faktura, REKLAMADataSet.FAKTURA_DETAILSRow pozycjaFaktury)
        {
            if (faktura == null) return string.Empty;

            return faktura.NUMER + "/" + faktura.NUMER_ROZ + "/" + faktura.NUMER_ROK + " | " + pozycjaFaktury.NAZWA_USLUGI;
        }


        private void dodajWplate(REKLAMADataSet.FAKTURYRow naglowekFaktury)
        {
            REKLAMADataSet.WplatyRow wplata = rEKLAMADataSet.Wplaty.NewWplatyRow();
            wplata.idFaktury = naglowekFaktury.ID_FAKTURY;

            if (naglowekFaktury.ID_SPRZEDAWCY == (int) FakturaHelper.OfficeId.Poznan)
                wplata.idZamowienia = (int) FakturaHelper.OrderId.Poznan;
            else
                wplata.idZamowienia = (int) FakturaHelper.OrderId.Katowice;
        }

        private void wydrukButton_Click(object sender, EventArgs e)
        {
            if (fAKTURYBindingSource.Current != null)
            {
                REKLAMADataSet.FAKTURYRow row =
                    (REKLAMADataSet.FAKTURYRow)
                    ((DataRowView) fAKTURYBindingSource.Current).Row;

                if (row.IsidFakturyKorektaNull())
                {
                    FactureViewer fv = new FactureViewer(row.ID_FAKTURY, false);
                    fv.ShowDialog();
                }
                else
                {
                    FactureViewer fv = new FactureViewer(row.ID_FAKTURY, row.idFakturyVAT, row.idFakturyKorekta);
                    fv.ShowDialog();
                }
            }
        }

        private void usunFaktureButton_Click(object sender, EventArgs e)
        {
            if (fAKTURYBindingSource.Current != null)
            {
                if (
                    MessageBox.Show("Czy na pewno chcesz usunąć fakturę ?",
                                    "",
                                    MessageBoxButtons.OKCancel,
                                    MessageBoxIcon.Question)
                    == DialogResult.OK)
                {
                    Cursor = Cursors.WaitCursor;

                    REKLAMADataSet.FAKTURYRow faktura = (REKLAMADataSet.FAKTURYRow)
                                                        ((DataRowView) fAKTURYBindingSource.Current).Row;

                    string kod = faktura.NUMER_ROZ;

                    if (faktura.KOREKTA)
                    {
                        int i = fAKTURYBindingSource.Find("idFakturyKorekta", faktura.ID_FAKTURY);
                        if (i > -1)
                        {
                            MessageBox.Show("Nie można usunąć faktury");
                        }
                        else
                        {
                            usunKorekte(faktura);
                        }
                    }
                    else
                    {
                        usunFakture(faktura);
                    }

                    fAKTURYTableAdapter.FillByKodAgenta(rEKLAMADataSet.FAKTURY, kod);

                    Cursor = Cursors.Default;
                }
            }
        }

        private void usunKorekte(REKLAMADataSet.FAKTURYRow korekta)
        {
            int idKorekty = korekta.ID_FAKTURY;
            int idKorygowanejFaktury = korekta.idFakturyKorekta;
            int idZam = korekta.idZamowienia;

            int i = fAKTURYBindingSource.Find("ID_FK_KOR", idKorekty);

            REKLAMADataSet.FAKTURYRow korygowanaFaktura = (REKLAMADataSet.FAKTURYRow)
                                                          ((DataRowView) fAKTURYBindingSource.List[i]).Row;

            int j = fAKTURYBindingSource.Find("ID_FAKTURY", idKorygowanejFaktury);

            if (j > -1 && i != j)
            {
                REKLAMADataSet.FAKTURYRow poprzedniaKorekta = (REKLAMADataSet.FAKTURYRow)
                                                              ((DataRowView) fAKTURYBindingSource.List[j]).Row;

                korygowanaFaktura.ID_FK_KOR = poprzedniaKorekta.ID_FAKTURY;
            }
            else
            {
                korygowanaFaktura.SetID_FK_KORNull();
            }

            fAKTURYBindingSource.EndEdit();

            SqlConnection conn = new SqlConnection(ConnString.getConnString().Value);

            fAKTURYTableAdapter.Connection = conn;
            fakturA_DETAILSTableAdapter.Connection = conn;

            conn.Open();
            SqlTransaction transaction = conn.BeginTransaction();

            fAKTURYTableAdapter.AttachTransaction(transaction);
            fakturA_DETAILSTableAdapter.AttachTransaction(transaction);

            try
            {
                fAKTURYTableAdapter.Update(rEKLAMADataSet.FAKTURY);
                fAKTURYTableAdapter.Delete(idKorekty);
                fakturA_DETAILSTableAdapter.Delete(idKorekty);

                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
                throw;
            }
            finally
            {
                fAKTURYTableAdapter.FillByIdZamowienia(rEKLAMADataSet.FAKTURY, idZam);
                conn.Close();
            }
        }

        private void usunFakture(REKLAMADataSet.FAKTURYRow faktura)
        {
            int idFakt = faktura.ID_FAKTURY;

            SqlConnection conn = new SqlConnection(ConnString.getConnString().Value);

            fAKTURYTableAdapter.Connection = conn;
            fakturA_DETAILSTableAdapter.Connection = conn;
            wplatyTableAdapter.Connection = conn;

            conn.Open();
            SqlTransaction transaction = conn.BeginTransaction();

            fAKTURYTableAdapter.AttachTransaction(transaction);
            fakturA_DETAILSTableAdapter.AttachTransaction(transaction);
            wplatyTableAdapter.AttachTransaction(transaction);

            try
            {
                fAKTURYTableAdapter.Delete(idFakt);
                fakturA_DETAILSTableAdapter.Delete(idFakt);
                wplatyTableAdapter.Delete(idFakt);

                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
            }
            finally
            {
                conn.Close();
            }
        }
    }
}