private void InsertChiTietHangHoa(TL info) { var chiTietHangHoaInfo = ToBaseInfo(info); //if (chiTietHangHoaInfo.IdChungTuChiTiet == 0) //{ //chiTietHangHoaInfo.IdChungTuChiTiet = // (ListChiTietChungTu.Find(delegate(TK match) // { // return ToBaseInfo(match).IdSanPham == chiTietHangHoaInfo.IdSanPham; // }) as ChungTuChiTietBaseInfo).IdChungTuChiTiet; chiTietHangHoaInfo.IdChungTuChiTiet = (ListChiTietChungTu.Find(delegate(TK match) { return(Conjunction(match, info)); }) as ChungTuChiTietBaseInfo).IdChungTuChiTiet; //} BusinessKhoProvider.InsertChiTietHangHoa(info); if (chiTietHangHoaInfo.IsAuto && chiTietHangHoaInfo.SoLuong > 0) { AutoGenSerialProvider.Instance.UseSerial(chiTietHangHoaInfo.MaVach); } }
/// <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 void SaveChiTietHangHoa(List <TL> listOrigin, List <TL> listNew) { ChungTuChiTietHangHoaBaseInfo chiTietHangHoaInfo = null; try { foreach (TL originInfo in listOrigin) { chiTietHangHoaInfo = ToBaseInfo(originInfo); if (chiTietHangHoaInfo == null) { throw new Exception("Không đúng kiểu " + typeof(ChungTuChiTietHangHoaBaseInfo)); } if (!listNew.Exists(delegate(TL match) { return(ToBaseInfo(match).IdChiTietHangHoa == chiTietHangHoaInfo.IdChiTietHangHoa && ToBaseInfo(match).IdChungTuChiTiet == chiTietHangHoaInfo.IdChungTuChiTiet); })) { DeleteChiTietHangHoa(originInfo); //+ ton cu //if(TrangThaiOrigin != CancelState) TinhTonKho(ChungTuInfo.IdKho, chiTietHangHoaInfo.IdSanPham, -chiTietHangHoaInfo.SoLuong, chiTietHangHoaInfo.MaVach); } } foreach (TL newInfo in listNew) { chiTietHangHoaInfo = ToBaseInfo(newInfo); if (chiTietHangHoaInfo == null) { throw new Exception("Không đúng kiểu " + typeof(ChungTuChiTietHangHoaBaseInfo)); } if (!chiTietHangHoaInfo.IsOrigin) { TL originInfo = listOrigin.Find( delegate(TL match) { return(ToBaseInfo(match).IdChiTietHangHoa == chiTietHangHoaInfo.IdChiTietHangHoa && ToBaseInfo(match).IdChungTuChiTiet == chiTietHangHoaInfo.IdChungTuChiTiet); }); if (originInfo != null) { UpdateChiTietHangHoa(newInfo); //+ ton cu - ton moi //TinhTonKho(ChungTuInfo.IdKho, chiTietHangHoaInfo.IdSanPham, // TrangThaiOrigin != CancelState // ? chiTietHangHoaInfo.SoLuong - ToBaseInfo(originInfo).SoLuong // : chiTietHangHoaInfo.SoLuong, // chiTietHangHoaInfo.MaVach); TinhTonKho(ChungTuInfo.IdKho, chiTietHangHoaInfo.IdSanPham, chiTietHangHoaInfo.SoLuong - ToBaseInfo(originInfo).SoLuong, chiTietHangHoaInfo.MaVach); } else { //if (chiTietHangHoaInfo.SoLuong > 0) //{ //- ton moi; int idChiTietHangHoa = TinhTonKho(ChungTuInfo.IdKho, chiTietHangHoaInfo.IdSanPham, chiTietHangHoaInfo.SoLuong, chiTietHangHoaInfo.MaVach); //need to set idchitiethanghoa before insert if (chiTietHangHoaInfo.IdChiTietHangHoa != idChiTietHangHoa && idChiTietHangHoa != 0) { chiTietHangHoaInfo.IdChiTietHangHoa = idChiTietHangHoa; //if not discountable - TuanLM bo ra ngoai 20/04/2013 //InsertChiTietHangHoa(newInfo); } //if not discountable InsertChiTietHangHoa(newInfo); //} } } } } catch (TinhTonException ex) { if (chiTietHangHoaInfo != null) { string message = String.Empty; ChungTuChiTietBaseInfo chungTuChiTietInfo = ToBaseInfo(ListChiTietChungTu.Find(delegate(TK match) { return(ToBaseInfo(match).IdSanPham == chiTietHangHoaInfo.IdSanPham); })); if (chungTuChiTietInfo != null) { message = "\nMã sản phẩm: " + chungTuChiTietInfo.MaSanPham; message += "\nTên sản phẩm: " + chungTuChiTietInfo.TenSanPham; } message += "\nIdSanPham: " + chiTietHangHoaInfo.IdSanPham; throw new TinhTonException(ex.Message + message); } throw; } }