using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace СУБД_Швейная_фабрика
{
    public partial class FormSpisokMaterial : Form
    {
        public FormSpisokMaterial()
        {
            InitializeComponent();
        }

        private void tkaniBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.tkaniBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.fabricDeryugoDataSet);

        }

        private void FormSpisokMaterial_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'fabricDeryugoDataSet.Furnitura' table. You can move, or remove it, as needed.
            this.furnituraTableAdapter.Fill(this.fabricDeryugoDataSet.Furnitura);
            // TODO: This line of code loads data into the 'fabricDeryugoDataSet.Tkani' table. You can move, or remove it, as needed.
            this.tkaniTableAdapter.Fill(this.fabricDeryugoDataSet.Tkani);

        }

        private void BtnToExcel_Click(object sender, EventArgs e)
        {
            Excel.Application exapp = new Excel.Application();
            // сделать приложение Excel видимым
            exapp.Visible = true;
            // открыть в Excel шаблон, находящийся в папке с exe-файлом в режиме только для чтения
            exapp.Workbooks.Open(Application.StartupPath + "\\Списание.xlsx", Type.Missing, true);
            // создать переменную list1 для связи с первым листом рабочей книги
            Excel.Worksheet list1 = (exapp.Worksheets.get_Item(1));

            int RowExcel = 24;  // в Excel начинать выводить с 24 строки
            // перебор тканей в DataGridView
            for (int i = 0; i <= DgvTkan.RowCount - 1; i++)
            {
                int CountSpis = 0;
                try
                {
                    // сколько списать i-й ткани
                    CountSpis = Convert.ToInt32(DgvTkan.Rows[i].Cells[3].Value);
                }
                catch { }
                // если человек указал 0, или не указал ничего, 
                // перейти к следующей ткани
                if (CountSpis == 0)
                    continue;

                // если человек ввел ненулевое кол-во для списания, 
                // добавить i-ю ткань в документ
                list1.get_Range("A" + RowExcel).Value = DgvTkan.Rows[i].Cells[0].Value;
                list1.get_Range("H" + RowExcel).Value = "см";
                list1.get_Range("J" + RowExcel).Value = "ткань";
                // количество ткани для списания
                list1.get_Range("L" + RowExcel).Value = CountSpis;
                int WidthTkan = Convert.ToInt32(DgvTkan.Rows[i].Cells[1].Value);
                // площадь ткани для списания
                list1.get_Range("N" + RowExcel).Value = CountSpis * WidthTkan;
                // причина списания
                list1.get_Range("R" + RowExcel).Value = DgvTkan.Rows[i].Cells[4].Value;
                RowExcel++;  // перейти в Excel к следующей строке
            }

            // перебор фурнитур в DataGridView
            for (int i = 0; i <= DgvFurnitura.RowCount - 1; i++)
            {
                int CountSpis = 0;
                try
                {
                    // сколько списать i-й фурнитуры
                    CountSpis = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[2].Value);
                }
                catch { }
                // если человек указал 0, или не указал ничего, 
                // перейти к следующей фурнитуре
                if (CountSpis == 0)
                    continue;

                // если человек ввел ненулевое кол-во для списания, 
                // добавить i-ю фурнитуру в документ
                list1.get_Range("A" + RowExcel).Value = DgvFurnitura.Rows[i].Cells[0].Value;
                list1.get_Range("H" + RowExcel).Value = "шт";
                list1.get_Range("J" + RowExcel).Value = "фурнитура";
                // количество фурнитуры для списания
                list1.get_Range("L" + RowExcel).Value = CountSpis;
                // причина списания
                list1.get_Range("R" + RowExcel).Value = DgvFurnitura.Rows[i].Cells[3].Value;
                RowExcel++;  // перейти в Excel к следующей строке
            }
        }

        private void BtnSpisMaterial_Click(object sender, EventArgs e)
        {
            DialogResult rez = MessageBox.Show("Вы уверены, что нужно выбранные материалы?",
               "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            // если пользователь отказался списать, то выйти из процедуры
            if (rez == DialogResult.No)
                return;

            // перебор тканей в DataGridView
            for (int i = 0; i <= DgvTkan.RowCount - 1; i++)
            {
                int CountSpis = 0;
                try
                {
                    // сколько списать i-й ткани
                    CountSpis = Convert.ToInt32(DgvTkan.Rows[i].Cells[3].Value);
                }
                catch { }
                // если человек указал 0, или не указал ничего, 
                // перейти к следующей ткани
                if (CountSpis == 0)
                    continue;

                // если человек ввел ненулевое кол-во для списания, 
                // списать ткань
                int LengthTkan = Convert.ToInt32(DgvTkan.Rows[i].Cells[2].Value);
                // уменьшить кол-во ткани на складе на кол-во списываемой ткани
                LengthTkan -= CountSpis;
                // записать в столбец с длиной рулона ткани на складе новое значение
                DgvTkan.Rows[i].Cells[2].Value = LengthTkan;
            }

            tkaniBindingSource.EndEdit();
            this.tkaniTableAdapter.Update(this.fabricDeryugoDataSet.Tkani);


            // перебор фурнитур в DataGridView
            for (int i = 0; i <= DgvFurnitura.RowCount - 1; i++)
            {
                int CountSpis = 0;
                try
                {
                    // сколько списать i-й фурнитуры
                    CountSpis = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[2].Value);
                }
                catch { }
                // если человек указал 0, или не указал ничего, 
                // перейти к следующей фурнитуре
                if (CountSpis == 0)
                    continue;

                // если человек ввел ненулевое кол-во для списания, 
                // списать фурнитуру
                // если человек ввел ненулевое кол-во для списания, 
                // списать ткань
                int CountFur = Convert.ToInt32(DgvFurnitura.Rows[i].Cells[1].Value);
                // уменьшить кол-во фурнитур на складе на кол-во списываемых фурнитур
                CountFur -= CountSpis;
                // записать в столбец с кол-вом фурнитур на складе новое значение
                DgvFurnitura.Rows[i].Cells[1].Value = CountFur;
            }

            furnituraBindingSource.EndEdit();
            this.furnituraTableAdapter.Update(this.fabricDeryugoDataSet.Furnitura);
        }
    }
}
