public void GenerateDrugExpiredDateWarning(string drugStoreCode, DrugStoreSetting setting, bool notify = false) { var notifiService = IoC.Container.Resolve <INotificationService>(); var ultilService = IoC.Container.Resolve <IUtilitiesService>(); var candiates = ultilService.GetRemainQuantityReceiptDrugItems(drugStoreCode, setting); var expiredDrugsCount = candiates.Count(i => i.IsExpired); var litleDrugsCount = candiates.Count(i => i.IsLittleTrans); IBaseRepository <SystemMessage> systemMessageRepo = null; var systemMessages = _dataFilterService.GetValidSystemMessages(drugStoreCode, null, out systemMessageRepo); if (litleDrugsCount > 0 || expiredDrugsCount > 0) { var messageLink = GetWarningMessageLink("/Utilities/NearExpiredDrugWarning"); string message = string.Empty; if (litleDrugsCount > 0 && expiredDrugsCount > 0) { message = string.Format("Tổng số mặt hàng ít giao dịch: {0}. Tổng số mặt hàng hết hạn: {1}.", litleDrugsCount, expiredDrugsCount); } else { if (litleDrugsCount > 0) { message = string.Format("Tổng số mặt hàng ít giao dịch: {0}.", litleDrugsCount); } else { message = string.Format("Tổng số mặt hàng hết hạn: {0}.", expiredDrugsCount); } } if (systemMessages.Any(i => i.SystemMessageTypeId == (int)SystemMessageType.DrugExpiredDateWarning)) { systemMessageRepo.UpdateMany(i => i.DrugStoreCode == drugStoreCode && i.SystemMessageTypeId == (int)SystemMessageType.DrugExpiredDateWarning, i => new SystemMessage() { MessageContent = message, IsSolved = false, MessageLink = messageLink }); } else { systemMessageRepo.Add(new SystemMessage() { CreatedDate = DateTime.Now, DrugStoreCode = drugStoreCode, RecordStatusId = (int)RecordStatus.Activated, SystemMessageLevelId = (int)SystemMessageLevel.ByDrugStore, SystemMessageTypeId = (int)SystemMessageType.DrugExpiredDateWarning, MessageContent = message, MessageLink = messageLink }); } notifiService.SendNotificationWarning(drugStoreCode, message, "/Utilities/NearExpiredDrugWarning", (int)HttpActionEnum.ExpiredDateWarningScreen); } else { systemMessageRepo.UpdateMany(i => i.DrugStoreCode == drugStoreCode && i.SystemMessageTypeId == (int)SystemMessageType.DrugExpiredDateWarning, i => new SystemMessage() { RecordStatusId = (int)RecordStatus.Archived }); notifiService.DeleteNotificationByResourceId(drugStoreCode, (int)HttpActionEnum.ExpiredDateWarningScreen); } if (notify) { var serviceNotifi = IoC.Container.Resolve <Service.Common.INotificationBaseService>(); serviceNotifi.NotifyToUsers("loadNotification", null, null); } }
public void UpdateExpiredDateDrug(int noteItemId, string batchNumber, DateTime?expiredDate, string drugStoreCode, DrugStoreSetting setting) { ValidateUpdateRequest(null, null); var receiptItemRepo = IoC.Container.Resolve <BaseRepositoryV2 <MedDbContext, PhieuNhapChiTiet> >(); receiptItemRepo.UpdateMany(i => i.MaPhieuNhapCt == noteItemId, i => new PhieuNhapChiTiet() { SoLo = batchNumber, HanDung = expiredDate }); var sysService = IoC.Container.Resolve <ISystemService>(); sysService.GenerateDrugExpiredDateWarning(drugStoreCode, setting); }
public NearExpiredDrugResponse GetNearExpiredDrugWarningData(string drugStoreCode, DrugStoreSetting setting, FilterObject filter, int expiredOption = (int)ExpiredFilterType.OnlyExpired) { GenerateReportData(drugStoreCode); var result = new NearExpiredDrugResponse(); using (var trans = TransactionScopeHelper.CreateReadUncommitted()) { var resultItems = GetRemainQuantityReceiptDrugItems(drugStoreCode, setting); var totalCount = resultItems.Count; if (totalCount < 1) { trans.Complete(); result.PagingResultModel = new PagingResultModel <RemainQuantityReceiptDrugItem>(resultItems, totalCount); return(result); } var drugIds = resultItems.Select(i => i.ItemId).Distinct().ToArray(); var drugService = IoC.Container.Resolve <IDrugManagementService>(); var drugsDict = drugService.GetCacheDrugs(drugStoreCode, drugIds).ToDictionary(i => i.DrugId, i => i); trans.Complete(); resultItems.ForEach(i => { if (drugsDict.ContainsKey(i.ItemId)) { var drugItem = drugsDict[i.ItemId]; var retailUnit = drugItem.Units.Where(u => u.UnitId == drugItem.RetailUnitId).FirstOrDefault(); if (retailUnit != null) { i.UnitName = retailUnit.UnitName; } if (i.NoteTypeID == (int)NoteInOutType.InitialInventory) { i.ItemDate = drugItem.CreatedDateTime; } } }); if (expiredOption == (int)ExpiredFilterType.OnlyExpired) { resultItems = resultItems.Where(i => i.IsExpired || i.IsLittleTrans).ToList(); } else if (expiredOption == (int)ExpiredFilterType.All) { resultItems = resultItems.Where(i => i.ExpiredDate.HasValue).ToList(); } totalCount = resultItems.Count(); result.PagingResultModel = new PagingResultModel <RemainQuantityReceiptDrugItem>(resultItems, totalCount); } return(result); }
public DrugStoreSetting GetDrugStoreSetting(string drugStoreCode) { var retVal = new DrugStoreSetting(); var settings = _dataFilterService.GetValidSetting(drugStoreCode).ToList(); var oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.AutoCreateBarcodeKey); if (oneSetting != null) { var autoCreateBarcode = false; if (oneSetting.Value.ToUpper() == MedConstants.YesValue) { autoCreateBarcode = true; } //bool.TryParse(oneSetting.Value, out autoCreateBarcode); retVal.AutoCreateBarcode = autoCreateBarcode; } oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.AutoCreateDrugCodeKey); if (oneSetting != null) { var autoCreateDrugCode = false; if (oneSetting.Value.ToUpper() == MedConstants.YesValue) { autoCreateDrugCode = true; } // bool.TryParse(oneSetting.Value, out autoCreateDrugCode); retVal.AutoCreateDrugCode = autoCreateDrugCode; } oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.AutoUpdateInOutPriceOnNoteKey); if (oneSetting != null) { var autoUpdateInOutPriceOnNote = false; if (oneSetting.Value.ToUpper() == MedConstants.YesValue) { autoUpdateInOutPriceOnNote = true; } //bool.TryParse(oneSetting.Value, out autoUpdateInOutPriceOnNote); retVal.AutoUpdateInOutPriceOnNote = autoUpdateInOutPriceOnNote; } oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.NumberDaysNearExpiredDateKey); if (oneSetting != null) { var numberDaysNearExpiredDate = 0; int.TryParse(oneSetting.Value, out numberDaysNearExpiredDate); retVal.NumberDaysNearExpiredDate = numberDaysNearExpiredDate; } oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.NumberDaysNoTransactionKey); if (oneSetting != null) { var numberDaysNoTransaction = 0; int.TryParse(oneSetting.Value, out numberDaysNoTransaction); retVal.NumberDaysNoTransaction = numberDaysNoTransaction; } oneSetting = settings.FirstOrDefault(i => i.Key == MedSettingKey.AllowToChangeTotalAmountInDeliveryNoteKey); if (oneSetting != null) { bool allowToChangeTotalAmount = false; if (oneSetting.Value.ToUpper() == MedConstants.YesValue) { allowToChangeTotalAmount = true; } //bool.TryParse(oneSetting.Value, out allowToChangeTotalAmount); retVal.AllowToChangeTotalAmount = allowToChangeTotalAmount; } return(retVal); }
public List <RemainQuantityReceiptDrugItem> GetRemainQuantityReceiptDrugItems(string drugStoreCode, DrugStoreSetting setting) { var noteTypeIds = new int[] { (int)NoteInOutType.Receipt, (int)NoteInOutType.InitialInventory }; var receiptItems = _dataFilterService.GetValidReceiptNoteItems(drugStoreCode, null, noteTypeIds); var drugs = _dataFilterService.GetValidDrugs(drugStoreCode, null, false); var remainQuantityReceiptItems = (from ri in receiptItems join d in drugs on ri.DrugId equals d.ThuocId where ri.RemainRefQuantity > MedConstants.EspQuantity select new { ri, d.Created }); var receiptNoteTypeId = (int)NoteInOutType.Receipt; var candidates = (from ri in remainQuantityReceiptItems select new RemainQuantityReceiptDrugItem { NoteId = ri.ri.NoteType == receiptNoteTypeId ? ri.ri.NoteId : 0, NoteItemId = ri.ri.NoteItemId, SerialNumber = ri.ri.SerialNumber ?? string.Empty, ItemId = ri.ri.DrugId, ItemName = ri.ri.DrugName, ItemCode = ri.ri.DrugCode, ItemDate = ri.ri.NoteDate == MedConstants.MinProductionDataDate ? ri.Created : ri.ri.NoteDate, ItemNumber = ri.ri.NoteNumber.ToString(), Quantity = ri.ri.RemainRefQuantity, ExpiredDate = ri.ri.ExpiredDate, UnitName = ri.ri.UnitName, NoteTypeID = ri.ri.NoteType }).ToList(); var currDate = DateTime.Now; var numDaysNoTrans = setting.NumberDaysNoTransaction; var numExpiredDays = setting.NumberDaysNearExpiredDate; candidates.ForEach(i => { i.NonTransNumDays = Math.Abs((currDate - i.ItemDate.Value.Date).TotalDays); if (i.NonTransNumDays >= numDaysNoTrans && !i.ExpiredDate.HasValue) { i.IsLittleTrans = true; } if (i.ExpiredDate.HasValue) { i.ExpiredNumDays = (i.ExpiredDate.Value.Date - currDate).TotalDays; i.IsExpired = (i.ExpiredDate.Value.Date - currDate).TotalDays < numExpiredDays; } }); return(candidates); }