public ActionResult Index(int id = 0)
        {
            if (!this._nhanvien_permission.Contains("kichthuoc_view"))
            {
                return _fail_permission("kichthuoc_view");
            }
            KichThuocController ctr = new KichThuocController();
            KichThuoc obj = ctr.get_by_id(id);

            if (obj == null)
            {
                //kich thuoc khong ton tai
                return RedirectToAction("Index", "AdminKichThuocs");
            }
            ViewBag.KichThuoc = obj;
            ViewBag.Title += " - View";
            return View();
        }
        public ActionResult ChiTietSP_Submit()
        {
            int sanpham_id = TextLibrary.ToInt(Request["sanpham_id"]);
            //must use same dbcontext neu khong se bao loi (chi can thiet khi co cap nhat thao tac tren doi tuong sanpham trong session)
            SanPhamController ctr = new SanPhamController(this._get_current_dbcontext());

            ChiTietSPController ctr_chitietsp = new ChiTietSPController(ctr._db);
            KichThuocController ctr_kichthuoc = new KichThuocController(ctr._db);
            MauSacController ctr_mausac = new MauSacController(ctr._db);
            SanPham sanpham_obj = ctr.get_by_id(sanpham_id);
            Boolean un_save_mode = false;
            //neu sanpham_id=0, dang o mode chua save
            if (sanpham_obj == null)
            {
                sanpham_obj = (SanPham)Session["sanpham_new_tmp"];
                un_save_mode = true;
            }
            //create new
            ChiTietSP obj;
            int chitietsp_id = TextLibrary.ToInt(Request["chitietsp_id"]);
            Boolean edit_mode;
            if (un_save_mode)
            {
                edit_mode  = sanpham_obj.ds_chitietsp.Where(x=>x.id==chitietsp_id).FirstOrDefault()!=null?true:false;
                if (edit_mode)
                {
                    if (!this._nhanvien_permission.Contains("chitietsp_edit"))
                    {
                        return _fail_permission("chitietsp_edit");
                    }
                    obj = sanpham_obj.ds_chitietsp.Where(x => x.id==chitietsp_id).FirstOrDefault();
                }
                else
                {
                    if (!this._nhanvien_permission.Contains("chitietsp_add"))
                    {
                        return _fail_permission("chitietsp_add");
                    }
                    obj = new ChiTietSP();
                    //kiểm tra phải có ít nhất 1 kích thước
                    if (ctr_kichthuoc.timkiem_count("", "", "", "1") <= 0)
                    {
                        return _show_notification("Yêu cầu phải có ít nhất 1 kích thước active mới thêm được chi tiết sản phẩm");
                    }
                    //kiểm tra phải có ít nhất 1 màu sắc
                    if (ctr_mausac.timkiem_count("", "", "", "1") <= 0)
                    {
                        return _show_notification("Yêu cầu phải có ít nhất 1 màu sắc active mới thêm được chi tiết sản phẩm");
                    }
                }
            }
            //chế dộ đã save rồi
            else
            {
                edit_mode = ctr_chitietsp.get_by_id(chitietsp_id) != null;
                if (edit_mode)
                {
                    if (!this._nhanvien_permission.Contains("chitietsp_edit"))
                    {
                        return _fail_permission("chitietsp_edit");
                    }
                    obj = ctr_chitietsp.get_by_id(chitietsp_id);
                }
                else
                {
                    if (!this._nhanvien_permission.Contains("chitietsp_add"))
                    {
                        return _fail_permission("chitietsp_add");
                    }
                    obj = new ChiTietSP();
                    //kiểm tra phải có ít nhất 1 kích thước
                    if (ctr_kichthuoc.timkiem_count("", "", "", "1") <= 0)
                    {
                        return _show_notification("Yêu cầu phải có ít nhất 1 kích thước active mới thêm được chi tiết sản phẩm");
                    }
                    //kiểm tra phải có ít nhất 1 màu sắc
                    if (ctr_mausac.timkiem_count("", "", "", "1") <= 0)
                    {
                        return _show_notification("Yêu cầu phải có ít nhất 1 màu sắc active mới thêm được chi tiết sản phẩm");
                    }
                }
            }

            //assign data
                obj.soluong = TextLibrary.ToInt(Request["chitietsp_soluong"]);
                //ctr_kichthuoc = new KichThuocController(ctr._db);
                obj.kichthuoc = ctr_kichthuoc.get_by_id(TextLibrary.ToInt(Request["chitietsp_kichthuoc_id"]));

                //ctr_mausac = new MauSacController(ctr._db);
                obj.mausac = ctr_mausac.get_by_id(TextLibrary.ToInt(Request["chitietsp_mausac_id"]));

                obj.active = TextLibrary.ToBoolean(Request["chitietsp_active"]);
            if (un_save_mode)
            {
                if (edit_mode)
                {
                    //do nothing
                }
                else
                {
                    //add to sanpham tmp
                    //must set id
                    try
                    {
                        obj.id = sanpham_obj.ds_chitietsp.Max(x => x.id) + 1;
                    }
                    catch (Exception)
                    {
                        obj.id = 1;
                    }
                    sanpham_obj.ds_chitietsp.Add(obj);
                    //re assign to session
                    Session["sanpham_new_tmp"] = sanpham_obj;
                }
            }
            //chế độ đã save rồi
            else
            {
                if (edit_mode)
                {
                    //nothing
                }
                else
                {
                    sanpham_obj.ds_chitietsp.Add(obj);
                }
                //finally call update
                ctr._db.SaveChanges();
            }
            return Redirect(Url.Action("Index", "AdminSanPham", new { id = sanpham_id }) + "#qd_ds_chitietsp"); //return RedirectToAction("Index", "AdminSanPham", new { id = sanpham_id });
        }
        public ActionResult Submit()
        {
            //get nv id first
            int obj_id = TextLibrary.ToInt(Request["kichthuoc_id"]);
            KichThuocController ctr = new KichThuocController();
            KichThuoc obj;
            //check mode
            Boolean edit_mode = true;
            if (obj_id == 0)
            {
                //add mode
                if (!this._nhanvien_permission.Contains("kichthuoc_add"))
                {
                    return _fail_permission("kichthuoc_add");
                }

                obj = new KichThuoc();
                edit_mode = false;
            }
            else
            {
                //edit mode
                if (!this._nhanvien_permission.Contains("kichthuoc_edit"))
                {
                    return _fail_permission("kichthuoc_edit");
                }

                if (ctr.is_exist(obj_id))
                {
                    //update model
                    //get instance of record of table
                    obj = ctr.get_by_id(obj_id);
                }
                else
                {
                    //nvid khong ton tai
                    return RedirectToAction("Index", "AdminKichThuocs");
                }
            }
            //assign value
            obj.giatri = TextLibrary.ToString(Request["kichthuoc_giatri"]);
            obj.mota = TextLibrary.ToString(Request["kichthuoc_mota"]);
            obj.active = TextLibrary.ToBoolean(Request["kichthuoc_active"]);
            //validate properties
            List<String> validate = ctr.validate(obj);

            //action
            if (validate.Count == 0)
            {
                if (edit_mode)
                {
                    //update properties first
                    ctr._db.SaveChanges();
                    this._state.Add("edit_ok");
                }
                else
                {
                    //call add
                    int maxid = ctr.add(obj);
                    //re assign id
                    obj.id = maxid;
                    this._state.Add("add_ok");
                }
                //successfull redirect
                return RedirectToAction("Index", "AdminKichThuocs");
            }
            //fail redirect
            this._state.AddRange(validate);
            ViewBag.State = this._state;
            ViewBag.KichThuoc = obj;
            ViewBag.Title += " - Submit";
            return View("Index");
        }