示例#1
0
        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);
        }