public static TheoKhoHangItemViewModel CalculateTongNhapXuatTon(TheoKhoHangItemViewModel result, Thuoc thuoc, List <PhieuNhapChiTiet> listPhieuNhapChiTiet, List <PhieuXuatChiTiet> listPhieuXuatChiTiet, DateTime?fromDate) { var tmpNhap = fromDate.HasValue ? listPhieuNhapChiTiet.Where(c => c.Thuoc.ThuocId == thuoc.ThuocId && c.PhieuNhap.NgayNhap > fromDate.Value.AddDays(-1)).ToList() : listPhieuNhapChiTiet.Where(c => c.Thuoc.ThuocId == thuoc.ThuocId).ToList(); var tmpXuat = fromDate.HasValue ? listPhieuXuatChiTiet.Where(c => c.Thuoc.ThuocId == thuoc.ThuocId && c.PhieuXuat.NgayXuat > fromDate.Value.AddDays(-1)).ToList() : listPhieuXuatChiTiet.Where(c => c.Thuoc.ThuocId == thuoc.ThuocId).ToList(); decimal tmpSoLuong = 0; decimal tmpGiaNhap = 0; for (int i = 0; i < tmpNhap.Count; i++) { if (tmpNhap[i].PhieuNhap.NgayNhap != DateTime.MinValue) { //var nhap = tmpNhap[i]; tmpSoLuong = tmpNhap[i].SoLuong; tmpGiaNhap = tmpNhap[i].GiaNhap; if (thuoc.DonViThuNguyen != null && tmpNhap[i].DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { tmpSoLuong = tmpSoLuong * thuoc.HeSo; tmpGiaNhap = tmpGiaNhap / thuoc.HeSo; } result.Nhap += tmpSoLuong; result.TongGiaTriNhap += tmpSoLuong * tmpGiaNhap * (1 + tmpNhap[i].PhieuNhap.VAT / 100) * (1 - tmpNhap[i].ChietKhau / 100); } } // tinh toan tong xuat var soluongXuat = 0M; foreach (var xuat in tmpXuat) { if (thuoc.DonViThuNguyen != null && xuat.DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { xuat.SoLuong = xuat.SoLuong * thuoc.HeSo; } soluongXuat += xuat.SoLuong; result.Xuat += xuat.SoLuong; if (tmpNhap.Count > 0) { foreach (var nhap in tmpNhap) { if (thuoc.DonViThuNguyen != null && nhap.DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { nhap.SoLuong = nhap.SoLuong * thuoc.HeSo; nhap.GiaNhap = nhap.GiaNhap / thuoc.HeSo; nhap.DonViTinh = thuoc.DonViXuatLe; } if (nhap.SoLuong > soluongXuat) { nhap.SoLuong = nhap.SoLuong - soluongXuat; result.TongGiaTriXuat += soluongXuat * nhap.GiaNhap; soluongXuat = 0; listPhieuXuatChiTiet.Remove(xuat); break; } else if (nhap.SoLuong == soluongXuat) { soluongXuat = 0; result.TongGiaTriXuat += nhap.SoLuong * nhap.GiaNhap; nhap.SoLuong = 0; listPhieuXuatChiTiet.Remove(xuat); listPhieuNhapChiTiet.Remove(nhap); } else { soluongXuat = soluongXuat - nhap.SoLuong; result.TongGiaTriXuat += nhap.SoLuong * nhap.GiaNhap; nhap.SoLuong = 0; listPhieuNhapChiTiet.Remove(nhap); } } } else { if (result.TonDau != 0) { result.TongGiaTriXuat += xuat.SoLuong * result.TongGiaTriTonDau / result.TonDau; } else { result.TongGiaTriXuat += xuat.SoLuong * thuoc.GiaNhap; } } } result.TonCuoi = result.TonDau + result.Nhap - result.Xuat; result.TongGiaTriTonCuoi = result.TongGiaTriTonDau + result.TongGiaTriNhap - result.TongGiaTriXuat; return(result); }
public static TheoKhoHangItemViewModel CalculateKho(Thuoc thuoc, List <PhieuNhapChiTiet> listPhieuNhapChiTiet, List <PhieuXuatChiTiet> listPhieuXuatChiTiet, DateTime?fromDate) { TheoKhoHangItemViewModel result = new TheoKhoHangItemViewModel() { MaThuoc = thuoc.MaThuoc, TenThuoc = thuoc.TenThuoc }; if (fromDate.HasValue) { var tmpNhap = listPhieuNhapChiTiet.Where(c => c.PhieuNhap.NgayNhap < fromDate && c.Thuoc.ThuocId == thuoc.ThuocId).ToList(); var tmpXuat = listPhieuXuatChiTiet.Where(c => c.PhieuXuat.NgayXuat < fromDate && c.Thuoc.ThuocId == thuoc.ThuocId).ToList(); decimal soluongXuat = 0; if (tmpNhap.Count > 0) { var lastItem = new { GiaNhap = tmpNhap.LastOrDefault().GiaNhap, VAT = tmpNhap.LastOrDefault().PhieuNhap.VAT, ChietKhau = tmpNhap.LastOrDefault().ChietKhau }; foreach (var xuat in tmpXuat) { if (thuoc.DonViThuNguyen != null && xuat.DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { xuat.SoLuong = xuat.SoLuong * thuoc.HeSo; } soluongXuat += xuat.SoLuong; foreach (var nhap in tmpNhap) { if (thuoc.DonViThuNguyen != null && nhap.DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { nhap.SoLuong = nhap.SoLuong * thuoc.HeSo; nhap.GiaNhap = nhap.GiaNhap / thuoc.HeSo; nhap.DonViTinh = thuoc.DonViXuatLe; } if (nhap.SoLuong > soluongXuat) { nhap.SoLuong = nhap.SoLuong - soluongXuat; soluongXuat = 0; listPhieuXuatChiTiet.Remove(xuat); break; } else if (nhap.SoLuong == soluongXuat) { nhap.SoLuong = 0; soluongXuat = 0; listPhieuXuatChiTiet.Remove(xuat); listPhieuNhapChiTiet.Remove(nhap); } else { soluongXuat = soluongXuat - nhap.SoLuong; nhap.SoLuong = 0; listPhieuNhapChiTiet.Remove(nhap); } } } if (soluongXuat > 0) { result.TonDau = -1 * soluongXuat; result.TongGiaTriTonDau = result.TonDau * lastItem.GiaNhap; } else { tmpNhap = tmpNhap.Where(c => c.SoLuong > 0).ToList(); foreach (var item in tmpNhap) { if (thuoc.DonViThuNguyen != null && item.DonViTinh.MaDonViTinh == thuoc.DonViThuNguyen.MaDonViTinh && thuoc.HeSo > 0) { item.SoLuong = item.SoLuong * thuoc.HeSo; item.GiaNhap = item.GiaNhap / thuoc.HeSo; } result.TonDau += item.SoLuong; result.TongGiaTriTonDau += item.SoLuong * item.GiaNhap; //listPhieuNhapChiTiet.Remove(item); } } } else { //result.TonDau = thuoc.SoDuDauKy; //result.TongGiaTriTonDau = thuoc.SoDuDauKy * thuoc.GiaDauKy; //Da tru het ca ton dau ky result.TonDau = 0; result.TongGiaTriTonDau = 0; } } else { var tmpNhap = listPhieuNhapChiTiet.Where(c => c.Thuoc.ThuocId == thuoc.ThuocId).ToList(); if (tmpNhap.Count > 0) { result.TonDau = tmpNhap.FirstOrDefault().SoLuong; result.TongGiaTriTonDau = tmpNhap.FirstOrDefault().SoLuong *tmpNhap.FirstOrDefault().GiaNhap; } else { result.TonDau = 0; result.TongGiaTriTonDau = 0; } } return(CalculateTongNhapXuatTon(result, thuoc, listPhieuNhapChiTiet, listPhieuXuatChiTiet, fromDate)); }