public dynamic Check(string accNo, string json, string phanhe, ClaimsPrincipal principal) { dynamic result = new ExpandoObject(); try { var lstPromotion = new List <PromotionOut>(); var lstCusGift = new List <CustomerGift>(); var cusGift = new CustomerGift(); var userinfo = ContextProvider.GetUserInfo(principal); var infoCusFromCoreBanking = ConvertJson(json); //var infoCusFromCoreBanking = JsonConvert.DeserializeObject<CustomerDTO>(json); SessionManager.DoWork(ss => { var lstUser = ss.Query <User>().ToList(); var now = DateTime.Now; var timeNow = DateTime.ParseExact(new DateTime(now.Year, now.Month, now.Day, 0, 0, 0).ToString("yyyy-MM-dd hh:mm:ss tt"), "yyyy-MM-dd hh:mm:ss tt", CultureInfo.InvariantCulture); var idPromotions = ss.Query <Store>().Where(s => s.DepartmentId == userinfo.Organization.Id && s.Amount > 0).Select(s => s.PromotionId).ToList(); if (idPromotions.Count == 0) { result.MesError = "Hiện không triển khai chương trình khuyến mãi nào."; } var promotions = ss.Query <Promotion>().Where(s => s.StartDate <= timeNow && s.FinishDate >= timeNow && s.Status == 2).ToList(); if (promotions.Count == 0) { result.MesError = "Hiện không triển khai chương trình khuyến mãi nào."; } else { var status = false; foreach (var itm in promotions) { var quaTangKH = new QuaTangKH(); var promotionIdUsed = new Guid(); cusGift = ss.Query <CustomerGift>().SingleOrDefault(s => s.Acctno == accNo && s.Promotion.Id == itm.Id && s.PhanHe == phanhe); if (cusGift != null) { status = true; lstCusGift.Add(cusGift); var gifts = ss.Query <Gift>().Where(s => s.Id == cusGift.Gift.Id).ToList(); promotionIdUsed = cusGift.Promotion.Id; quaTangKH.GiftId = cusGift.Gift.Id.ToString(); quaTangKH.GiftName = ContextProvider.GiftName(gifts, cusGift.Gift.Id); quaTangKH.Num = cusGift.NumGift; var lstQuaTangKH = new List <QuaTangKH>(); lstQuaTangKH.Add(quaTangKH); var promotionOut = new PromotionOut { Id = promotionIdUsed.ToString(), Code = ContextProvider.GetPromotionCode(promotions, promotionIdUsed), Name = ContextProvider.GetPromotionName(promotions, promotionIdUsed), label = ContextProvider.GetPromotionCode(promotions, promotionIdUsed), value = promotionIdUsed.ToString(), FlagTangQua = cusGift.Status, QuaTangKH = lstQuaTangKH }; lstPromotion.Add(promotionOut); } if (idPromotions.Any(a => a == itm.Id)) { var idGP = promotions.Select(s => s.GiftPromotionId).ToList(); var giftIds = ss.Query <GiftPromotion>().Where(s => idGP.Contains(s.GiftPromotionId)).Select(s => s.GiftId).ToList(); var gift = ss.Query <Gift>().Where(s => giftIds.Contains(s.Id)).ToList(); if (promotionIdUsed.ToString() != Constants.GUIDE_TYPE_NULL) { if (itm.Id != promotionIdUsed) { var lstQuaTangKH = new List <QuaTangKH>(); if (infoCusFromCoreBanking.FRDATE >= itm.StartDate && infoCusFromCoreBanking.FRDATE <= itm.FinishDate) { var configPromotion = JsonConvert.DeserializeObject <List <ConfigPromotion> >(itm.ConfigPromotion.ToString()); foreach (var itmConfigPromotion in configPromotion) { if (string.IsNullOrEmpty(phanhe)) { phanhe = "DEFAULT"; } if (infoCusFromCoreBanking.TERM >= decimal.Parse(itmConfigPromotion.kyhantoithieu) && infoCusFromCoreBanking.BALANCE >= decimal.Parse(itmConfigPromotion.sodutoithieu) && itmConfigPromotion.phanhe.ToUpper() == phanhe.ToUpper()) { infoCusFromCoreBanking.PhanHe = phanhe.ToUpper(); var dataGift = itmConfigPromotion.dataKhaiBaoQuaTang; if (dataGift == null) { result.MesError = "Chưa thiết lập nguyên tắc tặng quà."; } else { lstQuaTangKH = CreateLstGift(dataGift, gift, infoCusFromCoreBanking); } } } } if (lstQuaTangKH.Count > 0) { lstPromotion.Add(CreateCardPromotion(itm, lstQuaTangKH)); } } } else { var lstQuaTangKH = new List <QuaTangKH>(); if (infoCusFromCoreBanking.FRDATE >= itm.StartDate && infoCusFromCoreBanking.FRDATE <= itm.FinishDate) { var configPromotion = JsonConvert.DeserializeObject <List <ConfigPromotion> >(itm.ConfigPromotion.ToString()); foreach (var itmConfigPromotion in configPromotion) { if (string.IsNullOrEmpty(phanhe)) { phanhe = "DEFAULT"; } if (infoCusFromCoreBanking.TERM >= decimal.Parse(itmConfigPromotion.kyhantoithieu) && infoCusFromCoreBanking.BALANCE >= decimal.Parse(itmConfigPromotion.sodutoithieu) && itmConfigPromotion.phanhe.ToUpper() == phanhe.ToUpper()) { infoCusFromCoreBanking.PhanHe = phanhe.ToUpper(); var dataGift = itmConfigPromotion.dataKhaiBaoQuaTang; if (dataGift == null) { result.MesError = "Chưa thiết lập nguyên tắc tặng quà."; } else { lstQuaTangKH = CreateLstGift(dataGift, gift, infoCusFromCoreBanking); } } } } if (lstQuaTangKH.Count > 0) { lstPromotion.Add(CreateCardPromotion(itm, lstQuaTangKH)); } } } } if (lstCusGift.Count == 0) { lstCusGift.Add(infoCusFromCoreBanking); } result.InfoCus = LstCustomer(lstCusGift, phanhe, lstUser); result.LstPromotion = lstPromotion.ToList().OrderByDescending(o => o.CountPrice).ToList(); result.Status = status; } }); } catch (Exception ex) { throw; } return(result); }