private Model.PHIEUNHAP CheckPhieunhap(string str)
        {
            Model.PHIEUNHAP result = Model.DataProvider.Ins.DB.PHIEUNHAPs.Where(x => x.ngaynhap == str).SingleOrDefault();
            if (result == null)
            {
                Model.PHIEUNHAP newItem = new Model.PHIEUNHAP()
                {
                    ma_phieunhap = Guid.NewGuid().ToString(),
                    ngaynhap     = MyStaticMethods.ConvertDate2Vn_Today(),
                };

                Model.DataProvider.Ins.DB.PHIEUNHAPs.Add(newItem);
                Model.DataProvider.Ins.DB.SaveChanges();

                return(newItem);
            }

            return(result);
        }
        public Nhaphang_ViewModel()
        {
            TaoDS_nhap();
            DeleteList  = new ObservableCollection <Model.CHITIETPHIEUNHAP>();
            ListMathang = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));

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

            Active        = false;
            IsOpen        = false;
            IsOpen_insert = false;
            IsOpen_Filter = false;
            IsOpen_prt    = false;

            Active_Command = new RelayCommand <object>(p =>
            {
                if (Active == false)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                Active = false;
            });

            CloseDialog_Command = new RelayCommand <object>(p =>
            {
                return(true);
            }, p =>
            {
                IsOpen_prt = false;
            });

            Load_Command = new RelayCommand <object>(p =>
            {
                return(true);
            }, p =>
            {
                TaoDS_nhap();
                DeleteList  = new ObservableCollection <Model.CHITIETPHIEUNHAP>();
                ListMathang = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));

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

                ListLoai_Filter       = new ObservableCollection <Model.LOAIHANG>(Model.DataProvider.Ins.DB.LOAIHANGs.Where(x => x.IsDeleted == false));
                ListMathang_Filter    = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));
                ListNhacungcap_Filter = new ObservableCollection <Model.NHACUNGCAP>(Model.DataProvider.Ins.DB.NHACUNGCAPs.Where(x => x.IsDeleted == false));

                Active        = false;
                IsOpen        = false;
                IsOpen_insert = false;
                IsOpen_Filter = false;
                IsOpen_prt    = false;
            });

            #region Tao moi
            Reset_Command = new RelayCommand <object>(p =>
            {
                return(true);
            }, p =>
            {
                SMathang        = null;
                Soluongnhap     = "";
                Soluongthucnhap = "";
                Dongianhap      = "";
                Dongiaxuat      = "";
                Phantram        = "";
                SelectedItem    = null;
            });
            #endregion

            #region Phan them

            GetvalueTextbox_Command = new RelayCommand <TextBox>(p =>
            {
                double d;
                if (!double.TryParse((p.Text), out d))
                {
                    return(false);
                }

                if (string.IsNullOrEmpty(p.Text))
                {
                    return(false);
                }

                if (SMathang == null)
                {
                    return(false);
                }

                if (string.IsNullOrEmpty(Soluongnhap) || string.IsNullOrEmpty(Soluongthucnhap) || string.IsNullOrEmpty(Dongianhap))
                {
                    return(false);
                }

                int dongianhap = 0;
                if (!int.TryParse(Dongianhap.Replace(" ", String.Empty), out dongianhap))
                {
                    return(false);
                }

                int soluongnhap = 0;
                if (!int.TryParse(Soluongnhap.Replace(" ", String.Empty), out soluongnhap))
                {
                    return(false);
                }

                int soluongthucnhap = 0;
                if (!int.TryParse(Soluongthucnhap.Replace(" ", String.Empty), out soluongthucnhap))
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                Dongiaxuat = String.Empty;

                double phantram   = Convert.ToDouble(Phantram) / 100;
                double dongianhap = Convert.ToDouble(Dongianhap.Replace(" ", String.Empty));
                double dongiaxuat = ((phantram * dongianhap) + dongianhap);

                Dongiaxuat = dongiaxuat.ToString();
            });

            InsertShow_Command = new RelayCommand <object>(p =>
            {
                if (SMathang == null)
                {
                    return(false);
                }

                if (string.IsNullOrEmpty(Soluongnhap) || string.IsNullOrEmpty(Soluongthucnhap) ||
                    string.IsNullOrEmpty(Dongiaxuat) || string.IsNullOrEmpty(Dongianhap) || string.IsNullOrEmpty(Phantram))
                {
                    return(false);
                }

                int dongianhap = 0;
                if (!int.TryParse(Dongianhap.Replace(" ", String.Empty), out dongianhap))
                {
                    return(false);
                }

                int soluongnhap = 0;
                if (!int.TryParse(Soluongnhap.Replace(" ", String.Empty), out soluongnhap))
                {
                    return(false);
                }

                int soluongthucnhap = 0;
                if (!int.TryParse(Soluongthucnhap.Replace(" ", String.Empty), out soluongthucnhap))
                {
                    return(false);
                }

                try
                {
                    if (Convert.ToInt32(Soluongnhap) <= 0 || Convert.ToInt32(Soluongthucnhap) <= 0)
                    {
                        return(false);
                    }

                    if (Convert.ToInt32(Dongianhap) <= 0 || Convert.ToDouble(Phantram) < 0)
                    {
                        return(false);
                    }

                    if (Convert.ToInt32(Dongiaxuat) <= 0)
                    {
                        return(false);
                    }
                }
                catch (Exception) { /*Try catch de sua loi FormatException*/ }


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

                return(true);
            }, p =>
            {
                IsOpen_insert = true;

                string date_str = MyStaticMethods.ConvertDate2Vn_Today();
                Ngay            = date_str;
            });

            Insert_Command = new RelayCommand <object>(p =>
            {
                if (SMathang == null)
                {
                    return(false);
                }

                if (string.IsNullOrEmpty(Soluongnhap) || string.IsNullOrEmpty(Soluongthucnhap) ||
                    string.IsNullOrEmpty(Dongiaxuat) || string.IsNullOrEmpty(Dongianhap) || string.IsNullOrEmpty(Phantram))
                {
                    return(false);
                }

                int dongianhap = 0;
                if (!int.TryParse(Dongianhap.Replace(" ", String.Empty), out dongianhap))
                {
                    return(false);
                }

                int soluongnhap = 0;
                if (!int.TryParse(Soluongnhap.Replace(" ", String.Empty), out soluongnhap))
                {
                    return(false);
                }

                int soluongthucnhap = 0;
                if (!int.TryParse(Soluongthucnhap.Replace(" ", String.Empty), out soluongthucnhap))
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                string date_str       = MyStaticMethods.ConvertDate2Vn_Today();
                Model.PHIEUNHAP Phieu = CheckPhieunhap(date_str);

                Model.CHITIETPHIEUNHAP newPhieu = new Model.CHITIETPHIEUNHAP()
                {
                    ma_ctphieunhap = MyStaticMethods.RandomInt(5) + "-" + SMathang.ma_mathang,
                    MATHANG        = SMathang,
                    ma_phieunhap   = Phieu.ma_phieunhap,

                    soluongnhap = Convert.ToInt32(Soluongnhap.Replace(" ", String.Empty)),
                    soluongthuc = Convert.ToInt32(Soluongthucnhap.Replace(" ", String.Empty)),
                    soluongton  = Convert.ToInt32(Soluongthucnhap.Replace(" ", String.Empty)),

                    gianhap = Convert.ToDouble(Dongianhap.Replace(" ", String.Empty)),
                    giaxuat = Convert.ToDouble(Dongiaxuat.Replace(" ", String.Empty)),

                    nguoitao  = getCurrentUser(),
                    ghichu    = Ghichu != "" ? Ghichu : null,
                    IsDeleted = false,
                };

                Model.Nhaphang_Service.Insert(newPhieu);

                List.Insert(0, newPhieu);
                SelectedItem = newPhieu;

                Active        = true;
                Message       = "Thêm mới thành công !!!";
                IsOpen_insert = false;
            });

            #endregion

            #region Phan xoa

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

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

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

                if (IsOpen_insert == true || 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 =>
            {
                RemoveIteminDb();
                RemoveIteminList();


                DeleteList   = new ObservableCollection <Model.CHITIETPHIEUNHAP>();
                IsOpen       = false;
                SelectedItem = null;
            });
            #endregion

            #region Phan loc

            ListLoai_Filter       = new ObservableCollection <Model.LOAIHANG>(Model.DataProvider.Ins.DB.LOAIHANGs.Where(x => x.IsDeleted == false));
            ListMathang_Filter    = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));
            ListNhacungcap_Filter = new ObservableCollection <Model.NHACUNGCAP>(Model.DataProvider.Ins.DB.NHACUNGCAPs.Where(x => x.IsDeleted == false));

            FilterLoai_Command = new RelayCommand <ComboBox>(p =>
            {
                return(true);
            }, p =>
            {
                if (SLoai_Filter != null)
                {
                    string ma = SLoai_Filter.ma_loaihang;
                    FilterMathangby_Loai(ma);
                }
                else
                {
                    ListMathang_Filter = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));
                }
            });

            OpenFilter_Command = new RelayCommand <object>(p =>
            {
                if (IsOpen_Filter == true || IsOpen == true || IsOpen_insert == true || IsOpen_prt == true)
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                IsOpen_Filter = true;
            });

            ResetFilter_Command = new RelayCommand <Button>(p =>
            {
                return(true);
            }, p =>
            {
                ListLoai_Filter       = new ObservableCollection <Model.LOAIHANG>(Model.DataProvider.Ins.DB.LOAIHANGs.Where(x => x.IsDeleted == false));
                ListMathang_Filter    = new ObservableCollection <Model.MATHANG>(Model.DataProvider.Ins.DB.MATHANGs.Where(x => x.IsDeleted == false));
                ListNhacungcap_Filter = new ObservableCollection <Model.NHACUNGCAP>(Model.DataProvider.Ins.DB.NHACUNGCAPs.Where(x => x.IsDeleted == false));

                SNhacungcap_Filter = null;
                SMathang_Filter    = null;
                SLoai_Filter       = null;
                Date_Start         = String.Empty;
                Date_End           = String.Empty;

                TaoDS_nhap();

                IsOpen_Filter = false;
            });

            Filter_Command = new RelayCommand <Button>(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.CHITIETPHIEUNHAP>(Model.DataProvider.Ins.DB.CHITIETPHIEUNHAPs.Where(x => x.IsDeleted == false).OrderByDescending(x => x.ma_phieunhap));

                DateTime date_start = Convert.ToDateTime(Date_Start);
                DateTime date_end   = Convert.ToDateTime(Date_End);

                FindByDate(date_start, date_end);

                if (SMathang_Filter != null)
                {
                    FindByMH(SMathang_Filter.ma_mathang);
                }

                if (SNhacungcap_Filter != null)
                {
                    FindByNCC(SNhacungcap_Filter.ma_nhacungcap);
                }

                if (SLoai_Filter != null)
                {
                    FindByLOAI(SLoai_Filter.ma_loaihang);
                }

                IsOpen_Filter = false;
            });
            #endregion

            #region Phan sap xep

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

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

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

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

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

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

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

                return(true);
            }, p =>
            {
                ObservableCollection <Model.CHITIETPHIEUNHAP> chkList = new ObservableCollection <Model.CHITIETPHIEUNHAP>(List.OrderByDescending(x => MyStaticMethods.ConvertStringtoDate(x.PHIEUNHAP.ngaynhap)));

                if (List[0] == chkList[0])
                {
                    List = new ObservableCollection <Model.CHITIETPHIEUNHAP>(List.OrderBy(x => MyStaticMethods.ConvertStringtoDate(x.PHIEUNHAP.ngaynhap)));
                }
                else
                {
                    List = new ObservableCollection <Model.CHITIETPHIEUNHAP>(chkList);
                }
            });

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

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

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

            #endregion

            #region Printer

            PrinterOpen_Command = new RelayCommand <object>(p =>
            {
                if (SNhacungcapPrint == null)
                {
                    return(false);
                }

                if (string.IsNullOrEmpty(DayPrint))
                {
                    return(false);
                }

                return(true);
            }, p =>
            {
                List_Print = new ObservableCollection <Model.CHITIETPHIEUNHAP>(List.Where(x => x.MATHANG.NHACUNGCAP == SNhacungcapPrint &&
                                                                                          x.PHIEUNHAP.ngaynhap == MyStaticMethods.FormatDateString(DayPrint)));

                var list_chk = new ObservableCollection <Model.CHITIETPHIEUNHAP>();

                ItemsCount = 0;
                Tongtien   = 0;

                foreach (var item in List_Print)
                {
                    Tongtien += (double)(item.gianhap * item.soluongthuc);

                    if (list_chk.Where(x => x.MATHANG == item.MATHANG).Count() == 0)
                    {
                        list_chk.Add(item);
                    }
                }

                ItemsCount = list_chk.Count();


                DayPrintVN = MyStaticMethods.FormatDateString(DayPrint);

                View.View_Thukho.In_Nhap w = new View.View_Thukho.In_Nhap();
                w.ShowDialog();
            });

            OpenPrintDialog_Command = new RelayCommand <object>(p =>
            {
                if (IsOpen == true)
                {
                    return(false);
                }

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

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

                return(true);
            }, p =>
            {
                IsOpen_prt = true;
            });

            Print_Command = new RelayCommand <Grid>(p =>
            {
                return(true);
            }, p =>
            {
                try
                {
                    PrintDialog printDialog = new PrintDialog();
                    if (printDialog.ShowDialog() == true)
                    {
                        printDialog.PrintVisual(p, "invoice");
                    }

                    MessageBox.Show("Thành công !!!", "THÔNG BÁO");
                }
                catch (Exception) { MessageBox.Show("Có lỗi xảy ra !!!", "THÔNG BÁO"); };
            });

            PrinterFormClose_Command = new RelayCommand <Window>(p =>
            {
                return(true);
            }, p =>
            {
                if (p != null)
                {
                    p.Close();
                    IsOpen_prt = false;
                }
            });

            #endregion
        }