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

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

        public FakturowaniePoznanKatowice()
        {
            InitializeComponent();

            txtYear.Text = DateTime.Now.Year.ToString();
            txtMonth.Text = DateTime.Now.Month.ToString();

            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;

            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 - 1;
        }

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

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

        private SLOWNIKDataSet.AGENCJERow GetAgency(string numer_roz)
        {
            switch (numer_roz)
            {
                case "POZ":
                    return agencjeTableAdapter.GetDataByIdAgencji((int) FakturaHelper.OfficeId.Poznan)[0];
                case "KAT":
                    return agencjeTableAdapter.GetDataByIdAgencji((int) FakturaHelper.OfficeId.Katowice)[0];
                default:
                    return null;
            }
        }

        private REKLAMADataSet.KLIENCIRow GetClient(string numer_roz)
        {
            switch (numer_roz)
            {
                case "POZ":
                    return klienciTableAdapter.GetDataByCustomerId((int)FakturaHelper.ClientId.Poznan)[0];
                case "KAT":
                    return klienciTableAdapter.GetDataByCustomerId((int)FakturaHelper.ClientId.Katowice)[0];
                default:
                    return null;
            }
        }

        private string ValidateSearch()
        {
            int year;
            int month;

            StringBuilder errorMsg = new StringBuilder();

            if (string.IsNullOrEmpty(txtYear.Text) || !Int32.TryParse(txtYear.Text, out year))
                errorMsg.Append("- Proszę podać poprawny rok \n");
            if (string.IsNullOrEmpty(txtMonth.Text) || !Int32.TryParse(txtMonth.Text, out month))
                errorMsg.Append("- Proszę podać poprawny miesiąc \n");
            if (agencjaListBox.SelectedItem == null)
                errorMsg.Append("- Proszę wybrać agencję");

            if (!string.IsNullOrEmpty(errorMsg.ToString()))
                errorMsg.Insert(0, "Proszę poprawić:\n");

            return errorMsg.ToString();
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            string errorMsg = ValidateSearch();
            if (!string.IsNullOrEmpty(errorMsg))
            {
                MessageBox.Show(errorMsg, "Wyszukiwanie");
                return;
            }

            Cursor = Cursors.WaitCursor;

            fAKTURYTableAdapter.FillInvoicesByAgencyYearMonth(rEKLAMADataSet.FAKTURY, 
                                                              agencjaListBox.SelectedItem.ToString(),
                                                              decimal.Parse(txtYear.Text),
                                                              decimal.Parse(txtMonth.Text));

            Cursor = Cursors.Default;
        }

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

            SLOWNIKDataSet.AGENCJERow agencja = GetAgency(agencjaListBox.SelectedItem.ToString());

            REKLAMADataSet.FAKTURYDataTable fakturyDataTable = GetInvoices(dtpZmianaDaty.Value.Year,
                                                                           dtpZmianaDaty.Value.Month,
                                                                           (int) nrTygodniaUpDown.Value,
                                                                           agencja.Id_agencji,
                                                                           false);
            if (fakturyDataTable.Rows.Count <= 0)
            {
                Cursor = Cursors.Default;
                MessageBox.Show("Nie ma co fakturować lub faktura już wystawiona na wybrany tydzień!",
                                "Faktury - Poznań i Katowice");

                CreateBarterInvoices();
                return;
            }
            
            try
            {
                REKLAMADataSet.FAKTURA_DETAILSDataTable fakturaDetailsDataTable =
                    GetInvoiceDetails(dtpZmianaDaty.Value.Year,
                                      dtpZmianaDaty.Value.Month,
                                      (int) nrTygodniaUpDown.Value,
                                      agencja.Id_agencji,
                                      false);

                REKLAMADataSet.FAKTURYRow naglowekFaktury = FakturaHelper.GetInvoice(rEKLAMADataSet.FAKTURY,
                                                                                     GetClient(agencjaListBox.SelectedItem.ToString()),
                                                                                     agencja,
                                                                                     agencjaRedakcja,
                                                                                     konto,
                                                                                     agencjaListBox.SelectedItem.ToString(),
                                                                                     FakturaHelper.PaymentType.Transfer,
                                                                                     dtpZmianaDaty.Value);

                rEKLAMADataSet.FAKTURY.AddFAKTURYRow(naglowekFaktury);
                utworzPozycjeFaktury(naglowekFaktury, fakturyDataTable, fakturaDetailsDataTable);
                dodajWplate(naglowekFaktury);

                FakturaHelper.AddInvoice(rEKLAMADataSet,
                                         fAKTURYTableAdapter,
                                         fakturA_DETAILSTableAdapter,
                                         wplatyTableAdapter,
                                         naglowekFaktury);


                dtpZmianaDaty.Value = DateTime.Today;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Wystąpił błąd: \n" + ex);
            }
            finally
            {
                Cursor = Cursors.Default;
                rEKLAMADataSet.FAKTURA_DETAILS.Clear();
                rEKLAMADataSet.Wplaty.Clear();
                fAKTURYBindingSource.ResetBindings(false);
                fAKTURYBindingSource.Sort = "NUMER";
                fAKTURYTableAdapter.FillInvoicesByAgencyYearMonth(rEKLAMADataSet.FAKTURY,
                                                                  agencjaListBox.SelectedItem.ToString(),
                                                                  decimal.Parse(txtYear.Text),
                                                                  decimal.Parse(txtMonth.Text));
                fAKTURYDataGridView.Refresh();

                if (fAKTURYTableAdapter.Connection != null &&
                    fAKTURYTableAdapter.Connection.State == ConnectionState.Open)
                {
                    fAKTURYTableAdapter.Connection.Close();
                    fAKTURYTableAdapter.Connection.Dispose();
                }
            }

            CreateBarterInvoices();
        }


        private void CreateBarterInvoices()
        {
            Cursor = Cursors.WaitCursor;
            SLOWNIKDataSet.AGENCJERow agencja = GetAgency(agencjaListBox.SelectedItem.ToString());
            REKLAMADataSet.FAKTURYDataTable barters = GetInvoices(dtpZmianaDaty.Value.Year,
                                                                 dtpZmianaDaty.Value.Month,
                                                                 (int) nrTygodniaUpDown.Value,
                                                                 agencja.Id_agencji,
                                                                 true);
            Cursor = Cursors.Default;
            if (barters.Rows.Count <= 0) return;

            DialogResult dialogResult = MessageBox.Show("Czy chcesz wystawić faktury dla barterów?",
                                                        "Faktura - Poznań i Katowice",
                                                        MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult != DialogResult.Yes) return;

            Cursor = Cursors.WaitCursor;

            REKLAMADataSet.FAKTURA_DETAILSDataTable barterDetails = GetInvoiceDetails(dtpZmianaDaty.Value.Year,
                                                                                     dtpZmianaDaty.Value.Month,
                                                                                     (int) nrTygodniaUpDown.Value,
                                                                                     agencja.Id_agencji,
                                                                                     true);

            foreach (REKLAMADataSet.FAKTURYRow row in barters)
            {
                REKLAMADataSet.FAKTURYRow barterInvoice = FakturaHelper.GetInvoice(rEKLAMADataSet.FAKTURY,
                                                                                   GetClient(agencjaListBox.SelectedItem.ToString()),
                                                                                   agencja,
                                                                                   agencjaRedakcja,
                                                                                   konto,
                                                                                   agencjaListBox.SelectedItem.ToString(),
                                                                                   FakturaHelper.PaymentType.Barter,
                                                                                   dtpZmianaDaty.Value);

                rEKLAMADataSet.FAKTURY.AddFAKTURYRow(barterInvoice);
                foreach (REKLAMADataSet.FAKTURA_DETAILSRow barterDetail in barterDetails.Select("ID_FAKTURY=" + row.ID_FAKTURY))
                {
                    FakturaHelper.AddInvoiceDetails(barterInvoice, row, barterDetail, rEKLAMADataSet.FAKTURA_DETAILS);
                }

                dodajWplate(barterInvoice);

                FakturaHelper.AddInvoice(rEKLAMADataSet,
                                         fAKTURYTableAdapter,
                                         fakturA_DETAILSTableAdapter,
                                         wplatyTableAdapter,
                                         barterInvoice);
            }

            rEKLAMADataSet.FAKTURA_DETAILS.Clear();
            rEKLAMADataSet.Wplaty.Clear();
            fAKTURYBindingSource.ResetBindings(false);
            fAKTURYBindingSource.Sort = "NUMER";
            fAKTURYTableAdapter.FillInvoicesByAgencyYearMonth(rEKLAMADataSet.FAKTURY,
                                                  agencjaListBox.SelectedItem.ToString(),
                                                  decimal.Parse(txtYear.Text),
                                                  decimal.Parse(txtMonth.Text));
            fAKTURYDataGridView.Refresh();

            if (fAKTURYTableAdapter.Connection != null &&
                fAKTURYTableAdapter.Connection.State == ConnectionState.Open)
            {
                fAKTURYTableAdapter.Connection.Close();
                fAKTURYTableAdapter.Connection.Dispose();
            }
            Cursor = Cursors.Default;

        }

        private void utworzPozycjeFaktury(REKLAMADataSet.FAKTURYRow naglowekFaktury, REKLAMADataSet.FAKTURYDataTable naglowkiFakturDlaKlientow, REKLAMADataSet.FAKTURA_DETAILSDataTable pozycjeFakturDlaKlientow)
        {

            foreach (REKLAMADataSet.FAKTURA_DETAILSRow pozycjaFaktury in pozycjeFakturDlaKlientow)
            {

                REKLAMADataSet.FAKTURYRow faktura = naglowkiFakturDlaKlientow.FindByID_FAKTURY(pozycjaFaktury.ID_FAKTURY);

                FakturaHelper.AddInvoiceDetails(naglowekFaktury, faktura, pozycjaFaktury, rEKLAMADataSet.FAKTURA_DETAILS);
            }
        }

        private REKLAMADataSet.FAKTURYDataTable GetInvoices(int year, int month, int week, int sellerId, bool barters)
        {

            if (fAKTURYTableAdapter.Connection != null &&
                string.IsNullOrEmpty(fAKTURYTableAdapter.Connection.ConnectionString))
                fAKTURYTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;

            if (barters)
                return fAKTURYTableAdapter.GetBartersByWeekNumber(year, week, sellerId, month);

            return fAKTURYTableAdapter.GetDataByNrTygodniaWRoku(year, week, sellerId, month);
        }



        private REKLAMADataSet.FAKTURA_DETAILSDataTable GetInvoiceDetails(int year, int month, int week, int sellerId, bool barters)
        {
            if (fakturA_DETAILSTableAdapter.Connection != null && string.IsNullOrEmpty(fakturA_DETAILSTableAdapter.Connection.ConnectionString))
                fakturA_DETAILSTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;

            if (barters)
                return fakturA_DETAILSTableAdapter.GetBartersByWeekNumber(year, week, sellerId, month);

            return fakturA_DETAILSTableAdapter.GetDataByNrTygodniaWRoku(year, week, sellerId, month);
        }

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

            wplata.idZamowienia = naglowekFaktury.ID_SPRZEDAWCY == (int) FakturaHelper.OfficeId.Poznan
                                      ? (int) FakturaHelper.OrderId.Poznan
                                      : (int) FakturaHelper.OrderId.Katowice;
            wplata.EndEdit();
            rEKLAMADataSet.Wplaty.AddWplatyRow(wplata);
        }

        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) return;

            DialogResult dialogResult = MessageBox.Show("Czy na pewno chcesz usunąć fakturę?",
                                                        "Faktura - usuwanie",
                                                        MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult != DialogResult.Yes) return;

            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.FillInvoicesByAgencyYearMonth(rEKLAMADataSet.FAKTURY,
                                                  agencjaListBox.SelectedItem.ToString(),
                                                  decimal.Parse(txtYear.Text),
                                                  decimal.Parse(txtMonth.Text));
            fAKTURYDataGridView.Refresh();

            Cursor = Cursors.Default;
        }


        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();
            }
        }


        #region Korekta

        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(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 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 = FakturaHelper.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 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();
            }
        }

        #endregion

    }
}