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);
            }
        }
Exemplo n.º 2
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.º 3
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;
            }
        }