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