private int TinhTonKho(int idKho, int idSanPham, int soLuong, string maVach) { var dmSanPhamInfo = DmSanPhamProvider.Instance.GetSanPhamById(idSanPham); if (String.IsNullOrEmpty(maVach)) { throw new ManagedException(String.Format("Sản phẩm '{0}' không có mã vạch!", dmSanPhamInfo.MaSanPham)); } var hangHoaInfo = TblHangHoaChiTietDataProvider.GetHangHoaChiTietByMaVach(idKho, idSanPham, maVach, IdTrungTam) ?? new HangHoa_ChiTietInfo { IdKho = idKho, IdSanPham = idSanPham, MaVach = maVach, IdTrungTam = IdTrungTam }; if (soLuong > 0 && BusinessType == BusinessType.REAL_IN) { if (dmSanPhamInfo.TrungMaVach == 0) { if (!TblHangHoaChiTietDataProvider.IsUniqueSerial(hangHoaInfo.MaVach)) { throw new ManagedException(String.Format("Mã vạch '{0}' đã tồn tại trong hệ thống!", hangHoaInfo.MaVach)); } if (soLuong > 1) { throw new ManagedException(String.Format("Mã vạch '{0}' không được phép trùng, số lượng không được lớn hơn 1!", hangHoaInfo.MaVach)); } } else { if (!TblHangHoaChiTietDataProvider.IsNotInUniqueSerial(hangHoaInfo.MaVach)) { throw new ManagedException(String.Format("Mã vạch '{0}' đã tồn tại trong hệ thống!", hangHoaInfo.MaVach)); } } //if(Chit) } if (dmSanPhamInfo == null || dmSanPhamInfo.ChietKhau != 0) { return(hangHoaInfo.IdChiTiet); } if (soLuong == 0) { return(hangHoaInfo.IdChiTiet); //MINHPN cần nhập với số lượng = 0 } var soTon = hangHoaInfo.SoLuong; //if (hangHoaInfo.IdChiTiet == 0) //có thể trong hệ thống đã có mã vạch này { //ChungTuInfo.LoaiChungTu == Convert.ToInt32(TransactionType.NHAP_PO) || //ChungTuInfo.LoaiChungTu == Convert.ToInt32(TransactionType.NHAP_NOIBO) if (ThietLapBaoHanhHang()) { hangHoaInfo.BaoHanhHangTu = ChungTuInfo.NgayLap; hangHoaInfo.BaoHanhHangDen = hangHoaInfo.BaoHanhHangTu.AddMonths(dmSanPhamInfo.BaoHanhHang); } else { hangHoaInfo.BaoHanhHangTu = TblHangHoaChiTietDataProvider.GetNgayBaoHanhByMaVach(maVach, idSanPham); hangHoaInfo.BaoHanhHangDen = hangHoaInfo.BaoHanhHangTu.AddMonths(dmSanPhamInfo.BaoHanhHang); } if (BusinessType == BusinessType.REAL_IN) { if (!ThietLapTuoiTon(hangHoaInfo)) { TblHangHoaChiTietDataProvider.UpdateTuoiTonBaseInfo(maVach, ChungTuInfo.IdChungTu, hangHoaInfo); } if (hangHoaInfo.IdPhieuNhap == 0 && hangHoaInfo.NgayNhapKho_DK == DateTime.MinValue) { TblHangHoaChiTietDataProvider.PendingXacDinhNguonGoc(maVach, ChungTuInfo.IdChungTu, ChungTuInfo.SoChungTu, idSanPham); } } } CreateTonMaVachCalc(hangHoaInfo); TonMaVachCalc.Calculate(soLuong); if (hangHoaInfo.SoLuong < 0) { var message = String.Format("Số lượng mã vạch '{0}' {1}, không thể thực hiện được.", maVach, soTon > 0 ? "chỉ còn " + soTon : "đã hết"); message += "\nIdSanPham: " + idSanPham; message += "\nIdKho: " + idKho; message += "\nIdTrungTam: " + IdTrungTam; throw new TinhTonException(message); } if (dmSanPhamInfo.TrungMaVach == 0 && BusinessType == BusinessType.REAL_IN) { if (soLuong > 0 && hangHoaInfo.SoLuong > 1) { var message = String.Format("Mã vạch '{0}' đã tồn tại.", maVach); message += "\nIdSanPham: " + idSanPham; message += "\nIdKho: " + idKho; message += "\nIdTrungTam: " + IdTrungTam; throw new TinhTonException(message); } } return(hangHoaInfo.IdChiTiet); }