protected ChungTuKhoBusinessBase(T chungTuBaseInfo) : base(chungTuBaseInfo) { if (ChungTuInfo.IdChungTu > 0) { ListChiTietHangHoa = BusinessKhoProvider.GetListChiTietHangHoaByIdChungTu(ChungTuInfo.IdChungTu); } else { ListChiTietHangHoa = new List <TL>(); } IsThuKho = true; }
/// <summary> /// Kiểm tra có cập nhật mới lưu. /// </summary> protected internal override void SaveChungTuInstance() { TL[] arrBackupChiTietHangHoa = new TL[ListChiTietHangHoa.Count]; ListChiTietHangHoa.CopyTo(arrBackupChiTietHangHoa); try { if (ListChiTietHangHoa.Count == 0) { throw new ManagedException("Không có line hàng!"); } string sMaSanPham = String.Empty; foreach (var k in ListChiTietChungTu) { if (String.IsNullOrEmpty(ToBaseInfo(k).MaSanPham)) { throw new ManagedException("Không xác định được mã sản phẩm!"); } if (!(sMaSanPham + ",").Contains("," + ToBaseInfo(k).MaSanPham + ",")) { sMaSanPham += "," + ToBaseInfo(k).MaSanPham; } } List <DMSanPhamInfo> listSanPham = DmSanPhamProvider.Instance.GetListSanPhamByCode(sMaSanPham); if (listSanPham.Count == 0) { throw new ManagedException("Không xác định được mã sản phẩm!"); } string message; ListChiTietHangHoa.Sort( delegate(TL cthh1, TL cthh2) { return(ToBaseInfo(cthh1).IdSanPham.CompareTo(ToBaseInfo(cthh2).IdSanPham)); }); for (int i = 0; i < ListChiTietHangHoa.Count; i++) { message = String.Empty; if (ListChiTietChungTu.Find(delegate(TK match) { message = ToBaseInfo(match).MaSanPham; return(Conjunction(match, ListChiTietHangHoa[i])); //return (match as ChungTuChiTietBaseInfo).IdSanPham == ToBaseInfo(ListChiTietHangHoa[i]).IdSanPham; }) == null) { DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(ListChiTietHangHoa[i]).IdSanPham); }); if (item == null || item.ChietKhau == 0) { throw new ManagedException(String.Format("Sản phẩm '{0}' không tìm thấy mã vạch '{1}' tương ứng.", message, ToBaseInfo(ListChiTietHangHoa[i]).MaVach)); } //ListChiTietHangHoa.RemoveAt(i); //i--; } } for (int i = 0; i < ListChiTietChungTu.Count; i++) { if (ToBaseInfo(ListChiTietChungTu[i]).IdSanPham == 0) { throw new ManagedException(String.Format("Mã sản phẩm '{0}' chưa tồn tại trên hệ thống!", ToBaseInfo(ListChiTietChungTu[i]).MaSanPham)); } DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(ListChiTietChungTu[i]).IdSanPham); }); if (item.ChietKhau == 1) { continue; } message = String.Empty; if (ListChiTietHangHoa.Find(delegate(TL match) { message = ToBaseInfo(match).MaVach; return(Conjunction(ListChiTietChungTu[i], match)); //return (match as ChungTuChiTietBaseInfo).IdSanPham == ToBaseInfo(ListChiTietChungTu[i]).IdSanPham; }) == null) { throw new ManagedException(String.Format("Mã vạch '{0}' không tìm thấy sản phẩm '{1}' tương ứng.", message, ToBaseInfo(ListChiTietChungTu[i]).MaSanPham)); //ListChiTietChungTu.RemoveAt(i); //i--; } } int slChiTietChungTu = 0; foreach (TK k in ListChiTietChungTu) { DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(k).IdSanPham); }); if (item.ChietKhau == 1) { continue; } List <TL> listTmp = ListChiTietHangHoa.FindAll(delegate(TL match) { return(Conjunction(k, match)); }); slChiTietChungTu = 0; foreach (TL l in listTmp) { slChiTietChungTu += ToBaseInfo(l).SoLuong; } if (slChiTietChungTu != ToBaseInfo(k).SoLuong) { throw new ManagedException( String.Format("Số lượng hàng '{0}' trong phiếu không khớp với số lượng mã vạch.", ToBaseInfo(k).MaSanPham) ); } } slChiTietChungTu = 0; foreach (TK k in ListChiTietChungTu) { DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(k).IdSanPham); }); if (item.ChietKhau == 1) { continue; } slChiTietChungTu += ToBaseInfo(k).SoLuong; } int slChiTietMaVach = 0; foreach (TL l in ListChiTietHangHoa) { DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(l).IdSanPham); }); if (item.ChietKhau == 1) { continue; } slChiTietMaVach += ToBaseInfo(l).SoLuong; } if (slChiTietChungTu != slChiTietMaVach) { throw new ManagedException("Số lượng hàng trong phiếu không khớp với số lượng mã vạch."); } slChiTietMaVach = 0; foreach (TL l in ListChiTietHangHoa) { DMSanPhamInfo item = listSanPham.Find(delegate(DMSanPhamInfo match) { return(match.IdSanPham == ToBaseInfo(l).IdSanPham); }); if (item.ChietKhau == 1 || item.TrungMaVach == 1) { continue; } slChiTietMaVach = 0; ListChiTietHangHoa.ForEach( delegate(TL match) { if (ToBaseInfo(l).MaVach == ToBaseInfo(match).MaVach) { slChiTietMaVach += ToBaseInfo(match).SoLuong; } }); if (item.TrungMaVach == 0 && slChiTietMaVach > 1) { throw new ManagedException(String.Format("Mã vạch {0} đã bị nhập trùng.", ToBaseInfo(l).MaVach)); } } base.SaveChungTuInstance(); List <TL> listOrigin = BusinessKhoProvider.GetListChiTietHangHoaByIdChungTu(ChungTuInfo.IdChungTu); SaveChiTietHangHoa(listOrigin, ListChiTietHangHoa); } catch (Exception ex) { ListChiTietHangHoa.Clear(); ListChiTietHangHoa.AddRange(arrBackupChiTietHangHoa); var description = String.Empty; ListChiTietHangHoa.ForEach(delegate(TL ctct) { description += ToBaseInfo(ctct).IdSanPham + " " + ToBaseInfo(ctct).MaVach + " " + ToBaseInfo(ctct).SoLuong + "\r\n"; }); description += ex.ToString(); EventLogProvider.Instance.WriteOfflineLog(String.Format("{0}\r\n{1}", ChungTuInfo.SoChungTu, description), "Loi luu chung tu"); throw; } }
protected internal override void Prepare() { base.Prepare(); ListChiTietHangHoa = BusinessKhoProvider.GetListChiTietHangHoaByIdChungTu(ChungTuInfo.IdChungTu); }