private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            var newCustomer = new AddCustomerWindow();

            if (newCustomer.ShowDialog() == true)
            {
                var customer = new Customer()
                {
                    ID        = IDGenerator.createID("C"),
                    Name      = newCustomer.C_Name,
                    Telephone = newCustomer.C_Telephone,
                    Address   = newCustomer.C_Address,
                    isDeleted = false,
                };

                MainWindow.db.Customers.Add(customer);
                MainWindow.db.SaveChanges();

                customerDataGrid.ItemsSource = MainWindow.db.Customers.ToList();
            }
        }
        private void ImportButton_Click(object sender, RoutedEventArgs e)
        {
            var screen = new OpenFileDialog();

            screen.Filter = "Excel files|*.xls;*.xlsx";

            if (screen.ShowDialog() == true)
            {
                var workbook = new Workbook(screen.FileName);

                //Invoice sheet
                var sheet = workbook.Worksheets[0];

                var col = "A";
                var row = 2;

                var cell = sheet.Cells[$"{col}{row}"];

                while (cell.Value != null)
                {
                    var id    = sheet.Cells[$"A{row}"].StringValue;
                    var newid = IDGenerator.createID("I");

                    var customerid = sheet.Cells[$"B{row}"].StringValue;

                    bool exists = MainWindow.db.Customers.ToList().Any(cus => cus.ID == customerid);
                    if (exists != true)
                    {
                        string message = "The customer with ID \"" + customerid + "\" in invoice #" + id + " does not exist.\nDo you want to add a new customer? You can skip importing this invoice by clicking \"No\".";

                        if (MessageBox.Show(message, "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                        {
                            var newCustomer = new AddCustomerWindow();

                            if (newCustomer.ShowDialog() == true)
                            {
                                if (!string.IsNullOrWhiteSpace(newCustomer.C_Name) && !string.IsNullOrWhiteSpace(newCustomer.C_Telephone) && !string.IsNullOrWhiteSpace(newCustomer.C_Address))
                                {
                                    var customer = new Customer()
                                    {
                                        ID        = customerid,
                                        Name      = newCustomer.C_Name,
                                        Telephone = newCustomer.C_Telephone,
                                        Address   = newCustomer.C_Address,
                                        isDeleted = false,
                                    };

                                    MainWindow.db.Customers.Add(customer);
                                    MainWindow.db.SaveChanges();
                                    CustomerControl.customer_notification.CustomerChange = true;

                                    var date   = sheet.Cells[$"C{row}"].DateTimeValue;
                                    var total  = sheet.Cells[$"D{row}"].DoubleValue;
                                    var status = sheet.Cells[$"E{row}"].StringValue;

                                    var newInvoice = new Invoice()
                                    {
                                        ID         = newid,
                                        CustomerID = customerid,
                                        Date       = date,
                                        Total      = total,
                                        Status     = status,
                                        isDeleted  = false,
                                    };

                                    MainWindow.db.Invoices.Add(newInvoice);
                                    MainWindow.db.SaveChanges();

                                    //Invoice detail sheet
                                    var sheetd = workbook.Worksheets[1];

                                    var cold = "A";
                                    var rowd = 2;

                                    var celld = sheetd.Cells[$"{cold}{rowd}"];

                                    while (celld.Value != null)
                                    {
                                        var invoiceid = sheetd.Cells[$"A{rowd}"].StringValue;

                                        if (invoiceid == id)
                                        {
                                            var  productid     = sheetd.Cells[$"B{rowd}"].StringValue;
                                            bool existsproduct = MainWindow.db.Products.ToList().Any(cus => cus.ID == productid);

                                            if (existsproduct != true)
                                            {
                                                string messaged = "The product with ID \"" + productid + "\" in invoice #" + id + " does not exist.\nDo you want to add a new product? You can skip importing this product by clicking \"No\".";

                                                if (MessageBox.Show(messaged, "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                                                {
                                                    var newProduct = new AddProductWindow();

                                                    if (newProduct.ShowDialog() == true)
                                                    {
                                                        if (!string.IsNullOrWhiteSpace(newProduct.P_Name) && !string.IsNullOrWhiteSpace(newProduct.P_CategoryID) && newProduct.P_Price > 0 && newProduct.P_Weight > 0)
                                                        {
                                                            var product = new Product()
                                                            {
                                                                ID         = productid,
                                                                Name       = newProduct.P_Name,
                                                                CategoryID = newProduct.P_CategoryID,
                                                                Price      = newProduct.P_Price,
                                                                Weight     = newProduct.P_Weight,
                                                                isDeleted  = false,
                                                                Picture    = newProduct.P_Picture,
                                                            };

                                                            MainWindow.db.Products.Add(product);
                                                            MainWindow.db.SaveChanges();

                                                            //maybe notify changed here?

                                                            var weight    = sheetd.Cells[$"C{rowd}"].DoubleValue;
                                                            var unitprice = sheetd.Cells[$"D{rowd}"].DoubleValue;
                                                            var amount    = sheetd.Cells[$"E{rowd}"].DoubleValue;

                                                            var newInvoiceDetail = new InvoiceDetail()
                                                            {
                                                                InvoiceID = newid,
                                                                ProductID = productid,
                                                                Weight    = weight,
                                                                UnitPrice = unitprice,
                                                                Amount    = amount,
                                                                isDeleted = false,
                                                            };

                                                            MainWindow.db.InvoiceDetails.Add(newInvoiceDetail);
                                                            MainWindow.db.SaveChanges();
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                var weight    = sheetd.Cells[$"C{rowd}"].DoubleValue;
                                                var unitprice = sheetd.Cells[$"D{rowd}"].DoubleValue;
                                                var amount    = sheetd.Cells[$"E{rowd}"].DoubleValue;

                                                var newInvoiceDetail = new InvoiceDetail()
                                                {
                                                    InvoiceID = newid,
                                                    ProductID = productid,
                                                    Weight    = weight,
                                                    UnitPrice = unitprice,
                                                    Amount    = amount,
                                                    isDeleted = false,
                                                };

                                                MainWindow.db.InvoiceDetails.Add(newInvoiceDetail);
                                                MainWindow.db.SaveChanges();
                                            }
                                        }

                                        rowd++;
                                        celld = sheetd.Cells[$"{cold}{rowd}"];
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        var date   = sheet.Cells[$"C{row}"].DateTimeValue;
                        var total  = sheet.Cells[$"D{row}"].DoubleValue;
                        var status = sheet.Cells[$"E{row}"].StringValue;

                        var newInvoice = new Invoice()
                        {
                            ID         = newid,
                            CustomerID = customerid,
                            Date       = date,
                            Total      = total,
                            Status     = status,
                            isDeleted  = false,
                        };

                        MainWindow.db.Invoices.Add(newInvoice);
                        MainWindow.db.SaveChanges();

                        //Invoice detail sheet
                        var sheetd = workbook.Worksheets[1];

                        var cold = "A";
                        var rowd = 2;

                        var celld = sheetd.Cells[$"{cold}{rowd}"];

                        while (celld.Value != null)
                        {
                            var invoiceid = sheetd.Cells[$"A{rowd}"].StringValue;

                            if (invoiceid == id)
                            {
                                var  productid     = sheetd.Cells[$"B{rowd}"].StringValue;
                                bool existsproduct = MainWindow.db.Products.ToList().Any(cus => cus.ID == productid);

                                if (existsproduct != true)
                                {
                                    string messaged = "The product with ID \"" + productid + "\" in invoice #" + id + " does not exist.\nDo you want to add a new product? You can skip importing this product by clicking \"No\".";

                                    if (MessageBox.Show(messaged, "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                                    {
                                        var newProduct = new AddProductWindow();

                                        if (newProduct.ShowDialog() == true)
                                        {
                                            if (!string.IsNullOrWhiteSpace(newProduct.P_Name) && !string.IsNullOrWhiteSpace(newProduct.P_CategoryID) && newProduct.P_Price > 0 && newProduct.P_Weight > 0)
                                            {
                                                var product = new Product()
                                                {
                                                    ID         = productid,
                                                    Name       = newProduct.P_Name,
                                                    CategoryID = newProduct.P_CategoryID,
                                                    Price      = newProduct.P_Price,
                                                    Weight     = newProduct.P_Weight,
                                                    isDeleted  = false,
                                                    Picture    = newProduct.P_Picture,
                                                };

                                                MainWindow.db.Products.Add(product);
                                                MainWindow.db.SaveChanges();

                                                //maybe notify changed here?

                                                var weight    = sheetd.Cells[$"C{rowd}"].DoubleValue;
                                                var unitprice = sheetd.Cells[$"D{rowd}"].DoubleValue;
                                                var amount    = sheetd.Cells[$"E{rowd}"].DoubleValue;

                                                var newInvoiceDetail = new InvoiceDetail()
                                                {
                                                    InvoiceID = newid,
                                                    ProductID = productid,
                                                    Weight    = weight,
                                                    UnitPrice = unitprice,
                                                    Amount    = amount,
                                                    isDeleted = false,
                                                };

                                                MainWindow.db.InvoiceDetails.Add(newInvoiceDetail);
                                                MainWindow.db.SaveChanges();
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    var weight    = sheetd.Cells[$"C{rowd}"].DoubleValue;
                                    var unitprice = sheetd.Cells[$"D{rowd}"].DoubleValue;
                                    var amount    = sheetd.Cells[$"E{rowd}"].DoubleValue;

                                    var newInvoiceDetail = new InvoiceDetail()
                                    {
                                        InvoiceID = newid,
                                        ProductID = productid,
                                        Weight    = weight,
                                        UnitPrice = unitprice,
                                        Amount    = amount,
                                        isDeleted = false,
                                    };

                                    MainWindow.db.InvoiceDetails.Add(newInvoiceDetail);
                                    MainWindow.db.SaveChanges();
                                }
                            }

                            rowd++;
                            celld = sheetd.Cells[$"{cold}{rowd}"];
                        }
                    }

                    row++;
                    cell = sheet.Cells[$"{col}{row}"];
                }

                MessageBox.Show("Import completed!", "Message");

                invoiceDataGrid.ItemsSource = MainWindow.db.Invoices.ToList();
            }
        }