private void Filter_loaimathang()
 {
     if (List.Count() != 0)
     {
         for (int i = 0; i < List.Count(); i++)
         {
             while (FilterList_loaihang.Where(x => x == List[i].mathang.LOAIHANG).Count() == 0)
             {
                 if (List[i] == List[List.Count() - 1])
                 {
                     List.Remove(List[i]);
                     break;
                 }
                 else
                 {
                     List.Remove(List[i]);
                 }
             }
         }
     }
 }
        public Thongke_ViewModel()
        {
            List       = new ObservableCollection <Model.Thongke>();
            DeleteList = new ObservableCollection <Model.Thongke>();

            List_nhacungcap       = new ObservableCollection <Model.NHACUNGCAP>(Model.DataProvider.Ins.DB.NHACUNGCAPs.Where(x => x.IsDeleted == false));
            FilterList_nhacungcap = new ObservableCollection <Model.NHACUNGCAP>();

            List_loaihang       = new ObservableCollection <Model.LOAIHANG>(Model.DataProvider.Ins.DB.LOAIHANGs.Where(x => x.IsDeleted == false));
            FilterList_loaihang = new ObservableCollection <Model.LOAIHANG>();

            List_donvi       = new ObservableCollection <Model.DONVITINH>(Model.DataProvider.Ins.DB.DONVITINHs.Where(x => x.IsDeleted == false));
            FilterList_donvi = new ObservableCollection <Model.DONVITINH>();

            IscheckAll = true;
            IsOpen     = false;


            CloseDialog_Command = new RelayCommand <MaterialDesignThemes.Wpf.DialogHost>(p =>
            {
                return(true);
            }, p =>
            {
                p.IsOpen = false;
            });

            Load_Command = new RelayCommand <object>(p =>
            {
                return(true);
            }, p =>
            {
                List       = new ObservableCollection <Model.Thongke>();
                DeleteList = new ObservableCollection <Model.Thongke>();

                List_nhacungcap       = new ObservableCollection <Model.NHACUNGCAP>(Model.DataProvider.Ins.DB.NHACUNGCAPs.Where(x => x.IsDeleted == false));
                FilterList_nhacungcap = new ObservableCollection <Model.NHACUNGCAP>();

                List_loaihang       = new ObservableCollection <Model.LOAIHANG>(Model.DataProvider.Ins.DB.LOAIHANGs.Where(x => x.IsDeleted == false));
                FilterList_loaihang = new ObservableCollection <Model.LOAIHANG>();

                List_donvi       = new ObservableCollection <Model.DONVITINH>(Model.DataProvider.Ins.DB.DONVITINHs.Where(x => x.IsDeleted == false));
                FilterList_donvi = new ObservableCollection <Model.DONVITINH>();

                IsOpen = false;
            });

            #region Them / xoa khoi FilterList_nhacungcap

            AddtoFilterNCC_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_nhacungcap.Where(x => x.ma_nhacungcap == id).SingleOrDefault();

                FilterList_nhacungcap.Add(item);
            });

            DeletefromFilterNCC_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_nhacungcap.Where(x => x.ma_nhacungcap == id).SingleOrDefault();

                FilterList_nhacungcap.Remove(item);
            });

            #endregion

            #region Them / xoa khoi FilterList_loaihang

            AddtoFilterLH_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_loaihang.Where(x => x.ma_loaihang == id).SingleOrDefault();

                FilterList_loaihang.Add(item);
            });

            DeletefromFilterLH_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_loaihang.Where(x => x.ma_loaihang == id).SingleOrDefault();

                FilterList_loaihang.Remove(item);
            });

            #endregion

            #region Them / xoa khoi FilterList_donvi

            AddtoFilterDV_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_donvi.Where(x => x.ma_donvi == id).SingleOrDefault();

                FilterList_donvi.Add(item);
            });

            DeletefromFilterDV_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                string id = p.Uid.ToString();
                var item  = List_donvi.Where(x => x.ma_donvi == id).SingleOrDefault();

                FilterList_donvi.Remove(item);
            });

            #endregion

            #region Phan xoa

            AddDeleteList_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                DeleteList.Add(List.Where(x => x.mathang.ma_mathang == p.Uid.ToString()).SingleOrDefault());
            });

            RemoveDeleteList_Command = new RelayCommand <CheckBox>(p =>
            {
                return(true);
            }, p =>
            {
                DeleteList.Remove(List.Where(x => x.mathang.ma_mathang == p.Uid.ToString()).SingleOrDefault());
            });

            DeleteShow_Command = new RelayCommand <object>(p =>
            {
                if (DeleteList.Count() == 0)
                {
                    return(false);
                }

                if (IsOpen == true)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                IsOpen  = true;
                Content = "  Xóa các bản ghi được chọn ???";
            });

            Delete_Command = new RelayCommand <object>(p =>
            {
                if (DeleteList.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                for (int i = 0; i < List.Count(); i++)
                {
                    while (DeleteList.Where(x => x == List[i]).Count() != 0)
                    {
                        if (List[i] == List[List.Count() - 1])
                        {
                            List.Remove(List[i]);
                            break;
                        }
                        else
                        {
                            List.Remove(List[i]);
                        }
                    }
                    ;
                }

                DeleteList = new ObservableCollection <Model.Thongke>();
                IsOpen     = false;
            });

            #endregion

            #region Thong ke
            Statistic_Command = new RelayCommand <object>(p =>
            {
                if (string.IsNullOrEmpty(Date_Start) || string.IsNullOrEmpty(Date_End))
                {
                    return(false);
                }

                DateTime date_start = Convert.ToDateTime(Date_Start);
                DateTime date_end   = Convert.ToDateTime(Date_End);
                if ((date_start > date_end) && DateTime.TryParse(Date_Start, out date_start) && DateTime.TryParse(Date_End, out date_end))
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                List = new ObservableCollection <Model.Thongke>();
                Filter_ngaythang(MyStaticMethods.FormatDateString(Date_Start), MyStaticMethods.FormatDateString(Date_End));

                if (IscheckAll == false)
                {
                    UncheckAll_Filter();
                }

                if (FilterList_nhacungcap.Count() != 0)
                {
                    Filter_nhacungcap();
                }

                if (FilterList_loaihang.Count() != 0)
                {
                    Filter_loaimathang();
                }

                if (FilterList_donvi.Count() != 0)
                {
                    Filter_donvi();
                }
            });
            #endregion

            #region Xuat Excel

            Excel_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                string filePath = "*.xlsx";
                // tạo SaveFileDialog để lưu file excel
                SaveFileDialog dialogs = new SaveFileDialog();

                // chỉ lọc ra các file có định dạng Excel
                dialogs.Filter = "Excel | *.xlsx | Excel 2003 | *.xls";

                // Nếu mở file và chọn nơi lưu file thành công sẽ lưu đường dẫn lại dùng
                if (dialogs.ShowDialog() == true)
                {
                    filePath = dialogs.FileName;
                }

                // nếu đường dẫn null hoặc rỗng thì báo không hợp lệ và return hàm
                if (string.IsNullOrEmpty(filePath))
                {
                    MessageBox.Show("Đường dẫn báo cáo không hợp lệ");
                    return;
                }
                try
                {
                    using (ExcelPackage pk = new ExcelPackage())
                    {
                        // đặt tên người tạo file
                        pk.Workbook.Properties.Author = ViewModel.Taikhoan_ViewModel.getCurrent();

                        // đặt tiêu đề cho file
                        pk.Workbook.Properties.Title = "Báo cáo thống kê";

                        //Tạo một sheet để làm việc trên đó
                        pk.Workbook.Worksheets.Add("BCTK sheet");

                        // lấy sheet vừa add ra để thao tác
                        ExcelWorksheet ws = pk.Workbook.Worksheets[1];

                        // đặt tên cho sheet
                        ws.Name = "BCTK sheet";
                        // fontsize mặc định cho cả sheet
                        ws.Cells.Style.Font.Size = 11;
                        // font family mặc định cho cả sheet
                        ws.Cells.Style.Font.Name = "Calibri";

                        // Tạo danh sách các column header
                        string[] arrColumnHeader =
                        {
                            (Date_Start + " - " + Date_End),
                            "Mã mặt hàng",
                            "Tên mặt hàng",
                            "Loại mặt hàng",
                            "Nhà cung cấp",
                            "Số lượng nhập",
                            "Số lượng xuất",
                            "Số lượng tồn",
                            "Đơn vị tính"
                        };

                        // lấy ra số lượng cột cần dùng dựa vào số lượng header
                        var countColHeader = arrColumnHeader.Count();

                        // merge các column lại từ column 1 đến số column header
                        // gán giá trị cho cell vừa merge là Thống kê thông tni User Kteam
                        ws.Cells[1, 1].Value = "Thống kê hàng hóa";
                        ws.Cells[1, 1, 1, countColHeader].Merge = true;
                        // in đậm
                        ws.Cells[1, 1, 1, countColHeader].Style.Font.Bold = true;
                        // căn giữa
                        ws.Cells[1, 1, 1, countColHeader].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

                        int colIndex = 1;
                        int rowIndex = 2;

                        //tạo các header từ column header đã tạo từ bên trên
                        foreach (var item in arrColumnHeader)
                        {
                            var cell = ws.Cells[rowIndex, colIndex];

                            //set màu thành gray
                            var fill         = cell.Style.Fill;
                            fill.PatternType = ExcelFillStyle.Solid;
                            fill.BackgroundColor.SetColor(System.Drawing.Color.LightBlue);

                            //căn chỉnh các border
                            var border                     = cell.Style.Border;
                            border.Bottom.Style            =
                                border.Top.Style           =
                                    border.Left.Style      =
                                        border.Right.Style = ExcelBorderStyle.Thin;

                            //gán giá trị
                            cell.Value = item;

                            colIndex++;
                        }

                        // lấy ra danh sách UserInfo từ ItemSource của DataGrid
                        List <Model.Thongke> userList = List.Cast <Model.Thongke>().ToList();

                        // với mỗi item trong danh sách sẽ ghi trên 1 dòng
                        foreach (var item in userList)
                        {
                            // bắt đầu ghi từ cột 1. Excel bắt đầu từ 1 không phải từ 0
                            colIndex = 1;

                            // rowIndex tương ứng từng dòng dữ liệu
                            rowIndex++;

                            //gán giá trị cho từng cell
                            ws.Cells[rowIndex, colIndex++].Value = "";

                            ws.Cells[rowIndex, colIndex++].Value = item.mathang.ma_mathang;

                            ws.Cells[rowIndex, colIndex++].Value = item.mathang.ten_mathang;

                            ws.Cells[rowIndex, colIndex++].Value = item.mathang.LOAIHANG.ten_loaihang;

                            ws.Cells[rowIndex, colIndex++].Value = item.mathang.NHACUNGCAP.ten_nhacungcap;

                            ws.Cells[rowIndex, colIndex++].Value = item.soluongnhap;

                            ws.Cells[rowIndex, colIndex++].Value = item.soluongxuat;

                            ws.Cells[rowIndex, colIndex++].Value = item.tonkho;

                            ws.Cells[rowIndex, colIndex++].Value = item.mathang.DONVITINH.ten_donvi;
                        }

                        //Lưu file lại
                        Byte[] bin = pk.GetAsByteArray();
                        File.WriteAllBytes(filePath, bin);
                    }
                    MessageBox.Show("Thành công !!!", "THÔNG BÁO");
                    Process.Start(filePath);
                }
                catch (Exception)
                {
                    MessageBox.Show("Có lỗi khi lưu file !!!", "THÔNG BÁO");
                }
            });

            #endregion

            #region Sap xep

            OrderbyNhap_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.soluongnhap));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.soluongnhap));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            OrderbyXuat_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.soluongxuat));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.soluongxuat));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            OrderbyTon_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.tonkho));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.tonkho));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });


            OrderbyTenMathang_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.mathang.ten_mathang));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.mathang.ten_mathang));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            OrderbyTennhacungcap_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.mathang.NHACUNGCAP.ten_nhacungcap));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.mathang.NHACUNGCAP.ten_nhacungcap));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            OrderbyTenloai_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.mathang.LOAIHANG.ten_loaihang));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.mathang.LOAIHANG.ten_loaihang));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            OrderbyTendonvi_Command = new RelayCommand <object>(p =>
            {
                if (List.Count() == 0)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                ObservableCollection <Model.Thongke> chkList = new ObservableCollection <Model.Thongke>(List.OrderByDescending(x => x.mathang.DONVITINH.ten_donvi));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.Thongke>(List.OrderBy(x => x.mathang.DONVITINH.ten_donvi));
                }
                else
                {
                    List = new ObservableCollection <Model.Thongke>(chkList);
                }
            });

            #endregion
        }