Exemplo n.º 1
0
        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);
            }
        }
        public override ChungTuBusinessBase Clone()
        {
            TK[] arrClonedChiTietChungTu = new TK[ListChiTietChungTu.Count];
            ListChiTietChungTu.CopyTo(arrClonedChiTietChungTu);

            ChungTuKeToanKhoBusinessBase <T, TK> tmpBusiness = (ChungTuKeToanKhoBusinessBase <T, TK>)base.Clone();

            tmpBusiness.ListChiTietChungTu.Clear();
            tmpBusiness.ListChiTietChungTu.AddRange(arrClonedChiTietChungTu);
            return(tmpBusiness);
        }
        private void SaveChungTuDetails()
        {
            List <ChungTuBanHangChiTietInfor> listOrigin =
                BanHangDataProvider.Instance.GetListChiTietChungTuByIdChungTu(ChungTu.IdChungTu);

            //xoa nhung cai cu
            foreach (ChungTuBanHangChiTietInfor originInfo in listOrigin)
            {
                if (!ListChiTietChungTu.Exists(delegate(ChungTuBanHangChiTietInfor match)
                {
                    return(match.IdChungTuChiTiet == originInfo.IdChungTuChiTiet);
                }))
                {
                    BanHangDataProvider.Instance.DeleteChiTietChungTu(originInfo);
                }
            }

            //them hoac cap nhat cai moi
            foreach (ChungTuBanHangChiTietInfor newInfo in ListChiTietChungTu)
            {
                ChungTuBanHangChiTietInfor originInfo = listOrigin.Find(
                    delegate(ChungTuBanHangChiTietInfor match)
                {
                    return(match.IdChungTuChiTiet == newInfo.IdChungTuChiTiet);
                });

                if (originInfo != null)
                {
                    if (!newInfo.IsOrigin)
                    {
                        BanHangDataProvider.Instance.UpdateChiTietChungTu(newInfo);
                    }
                }
                else
                {
                    newInfo.IdChungTu        = ChungTu.IdChungTu;
                    newInfo.IdChungTuChiTiet = BanHangDataProvider.Instance.InsertChiTietChungTu(newInfo);
                }
            }
        }
        /// <summary>
        /// Kiểm tra có cập nhật thì mới lưu.
        /// </summary>
        protected internal override void SaveChungTuInstance()
        {
            TK[] arrBackupChiTietChungTu = new TK[ListChiTietChungTu.Count];
            ListChiTietChungTu.CopyTo(arrBackupChiTietChungTu);
            int backupChungTu = ChungTuInfo.IdChungTu;

            try
            {
                if (ListChiTietChungTu.Count == 0)
                {
                    throw new ManagedException("Không có line chi tiết!");
                }

                if (!IsOnTheSameAccountBook)
                {
                    throw new ManagedException("Không được ghi nhận trong cùng bộ sổ.");
                }

                if (IsEditMode)
                {
                    if (!ChungTuInfo.IsOrigin)
                    {
                        if ((ChungTuOriginInfo as ChungTuBaseInfo).IdKho != ChungTuInfo.IdKho)
                        {
                            throw new ManagedException("Chứng từ đã được tạo, không thể thay đổi thông tin kho!");
                        }

                        if ((ChungTuOriginInfo as ChungTuBaseInfo).SoChungTu != ChungTuInfo.SoChungTu)
                        {
                            throw new ManagedException("Chứng từ đã được tạo, không thể thay đổi số chứng từ!");
                        }

                        CheckInvalidLock();

                        BusinessProvider.UpdateChungTu(ChungTu);
                    }
                }
                else
                {
                    ChungTuInfo.IdChungTu = BusinessProvider.InsertChungTu(ChungTu);
                }

                //if ((((BusinessProviderBase)BusinessProvider).GetChungTuBySoChungTu<T>(ChungTuInfo.SoChungTu) as ChungTuBaseInfo).TrangThai == TrangThaiHuy)
                //{
                //    throw new ManagedException("Chứng từ này đã bị hủy!");
                //}

                //check so chung tu bi lap
                if (BusinessProvider is BusinessProviderBase)
                {
                    if (((BusinessProviderBase)BusinessProvider).
                        DuplicateSoChungTu(ChungTuInfo.SoChungTu, ChungTuInfo.IdChungTu))
                    {
                        throw new ManagedException("Số chứng từ này đã được sử dụng!");
                    }
                }


                List <TK> listOrigin = BusinessProvider.GetListChiTietChungTuByIdChungTu(ChungTuInfo.IdChungTu);

                if (!IsKeToan && listOrigin.Count == 0)
                {
                    throw new Exception("Nghiệp vụ này không làm phát sinh nội dung chứng từ");
                }

                ListChiTietChungTu.Sort(
                    delegate(TK cthh1, TK cthh2)
                {
                    return(ToBaseInfo(cthh1).IdSanPham.CompareTo(ToBaseInfo(cthh2).IdSanPham));
                });

                SaveChiTietChungTu(listOrigin, ListChiTietChungTu);

                if (ChungTuInfo.IdKho == 0)
                {
                    return;
                }

                ((BusinessProviderBase)BusinessProvider).ChungTuSyncPushORC(this);
            }
            catch (Exception ex)
            {
                ChungTuInfo.IdChungTu = backupChungTu;
                ListChiTietChungTu.Clear();
                ListChiTietChungTu.AddRange(arrBackupChiTietChungTu);
                var description = String.Empty;
                ListChiTietChungTu.ForEach(delegate(TK ctct)
                {
                    description += ToBaseInfo(ctct).IdSanPham + " " + 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;
            }
        }
Exemplo n.º 5
0
        /// <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;
            }
        }
Exemplo n.º 6
0
        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;
            }
        }