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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }