public UpsertCareChargesUseCaseTests() { _coreCost = new CarePackageDetail { Cost = 34.12m, Type = PackageDetailType.CoreCost, StartDate = _today.AddDays(-30), EndDate = _today.AddDays(30) }; _package = new CarePackage { Id = Guid.NewGuid(), PackageType = PackageType.ResidentialCare, Details = { _coreCost }, Settings = new CarePackageSettings() }; _dbManager = new Mock <IDatabaseManager>(); var carePackageGateway = new Mock <ICarePackageGateway>(); carePackageGateway .Setup(g => g.GetPackageAsync(_package.Id, It.IsAny <PackageFields>(), It.IsAny <bool>())) .ReturnsAsync(_package); _useCase = new UpsertCareChargesUseCase(carePackageGateway.Object, _dbManager.Object, Mapper); }
public static bool IsReferenced(this IPackageItem packageItem, InvoiceItem invoiceItem) { return(packageItem switch { CarePackageDetail _ => packageItem.Id == invoiceItem.CarePackageDetailId, CarePackageReclaim _ => packageItem.Id == invoiceItem.CarePackageReclaimId, _ => throw new InvalidOperationException($"Unsupported package item type {packageItem.GetType()}") });
protected static string GetDetailItemName(CarePackageDetail detail) { switch (detail.Type) { case PackageDetailType.CoreCost: return(detail.Package.PackageType switch { PackageType.NursingCare => "Nursing Care Core", PackageType.ResidentialCare => "Residential Care Core", _ => throw new ArgumentException($"Unsupported {detail.Type}") });
public EndCarePackageUseCaseTests() { _package = TestDataHelper .CreateCarePackage() .AddCoreCost(1000.0m, _today.AddDays(-5), _today.AddDays(30)); _coreCost = _package.GetCoreCostDetail(); _dbManager = new Mock <IDatabaseManager>(); var gateway = new Mock <ICarePackageGateway>(); gateway .Setup(g => g.GetPackageAsync(It.IsAny <Guid>(), It.IsAny <PackageFields>(), It.IsAny <bool>())) .ReturnsAsync(_package); _useCase = new EndCarePackageUseCase(gateway.Object, _dbManager.Object); }
public UpdateProvisionalCareChargeUseCaseTests() { _coreCost = new CarePackageDetail { Cost = 34.12m, Type = PackageDetailType.CoreCost, StartDate = _today.AddDays(-10), EndDate = _today.AddDays(300) }; _provisionalCharge = new CarePackageReclaim { Id = Guid.NewGuid(), Cost = 12.34m, StartDate = _coreCost.StartDate, EndDate = _coreCost.EndDate, Type = ReclaimType.CareCharge, SubType = ReclaimSubType.CareChargeProvisional }; _package = new CarePackage { Id = Guid.NewGuid(), PackageType = PackageType.ResidentialCare, Details = new List <CarePackageDetail> { _coreCost }, Reclaims = new List <CarePackageReclaim> { _provisionalCharge } }; var dbManager = new Mock <IDatabaseManager>(); var carePackageGateway = new Mock <ICarePackageGateway>(); carePackageGateway .Setup(g => g.GetPackageAsync(_package.Id, It.IsAny <PackageFields>(), It.IsAny <bool>())) .ReturnsAsync(_package); _useCase = new UpdateProvisionalCareChargeUseCase(carePackageGateway.Object, dbManager.Object, Mapper); }
private static void AddCoreCost(CarePackage package, CarePackageBrokerageDomain brokerageInfo) { var coreCostDetail = package.Details.FirstOrDefault(d => d.Type is PackageDetailType.CoreCost); string subjective = package.PackageType == PackageType.ResidentialCare ? SubjectiveConstants.ResidentialCarePackageSubjectiveCode : SubjectiveConstants.NursingCarePackageSubjectiveCode; if (coreCostDetail is null) { coreCostDetail = new CarePackageDetail() { Subjective = subjective }; package.Details.Add(coreCostDetail); } coreCostDetail.Type = PackageDetailType.CoreCost; coreCostDetail.Cost = brokerageInfo.CoreCost; coreCostDetail.CostPeriod = PaymentPeriod.Weekly; coreCostDetail.StartDate = brokerageInfo.StartDate; coreCostDetail.EndDate = brokerageInfo.EndDate; coreCostDetail.Subjective = subjective; }
public static CarePackageDetailDomain ToDomain(this CarePackageDetail input) { return(_mapper.Map <CarePackageDetailDomain>(input)); }
public async Task Import(string fileName) { ExcelPackage.LicenseContext = LicenseContext.NonCommercial; var file = new FileInfo(fileName); var excelRows = new List <ExcelRowModel>(); using (var excelFile = new ExcelPackage(file)) { ExcelWorksheet worksheet = excelFile.Workbook.Worksheets[0]; for (int i = 2; i <= worksheet.Dimension.End.Row; i++) { if (worksheet.Cells[$"A{i}"].Value == null) { continue; } var excelRow = new ExcelRowModel() { RowNumber = i, HackneyID = worksheet.Cells[$"A{i}"].Value?.ToString(), ServiceTypeGroup = worksheet.Cells[$"G{i}"].Value?.ToString(), ServiceType = worksheet.Cells[$"H{i}"].Value?.ToString(), ElementType = worksheet.Cells[$"I{i}"].Value?.ToString(), CostPer = worksheet.Cells[$"L{i}"].Value?.ToString(), Quantity = worksheet.Cells[$"N{i}"].Value?.ToString(), UnitOfMeasure = worksheet.Cells[$"N{i}"].Value?.ToString(), StartDateOA = worksheet.Cells[$"W{i}"].Value?.ToString(), EndDateOA = worksheet.Cells[$"X{i}"].Value?.ToString(), BudgetCode = worksheet.Cells[$"Y{i}"].Value?.ToString(), SupplierID = worksheet.Cells[$"AB{i}"].Value?.ToString(), SupplierSite = worksheet.Cells[$"AC{i}"].Value?.ToString() }; excelRows.Add(excelRow); } } var serviceUserPackages = excelRows.GroupBy(x => x.HackneyID, x => x).ToList(); List <string> logs = new List <string>(); foreach (var serviceUserPackage in serviceUserPackages) { bool hasError = false; Guid serviceUserID = await CreateOrSkipUser(serviceUserPackage.Key); if (serviceUserID == Guid.Empty) { logs.Add($"{DateTimeOffset.UtcNow}\tRow Number: {serviceUserPackage.FirstOrDefault().RowNumber}\tService user {serviceUserPackage.Key} not found"); hasError = true; } var primarySupportReasonID = GetPrimarySupportReasonID(serviceUserPackage.FirstOrDefault().BudgetCode.Replace("-", "").Substring(0, 5)); if (primarySupportReasonID == 0) { logs.Add($"{DateTimeOffset.UtcNow}\tRow Number: {serviceUserPackage.FirstOrDefault().RowNumber}\tPrimary support reason {serviceUserPackage.FirstOrDefault().BudgetCode.Substring(0, 5)} not found"); hasError = true; } if (!int.TryParse(serviceUserPackage.FirstOrDefault().SupplierID, out int supplierId)) { logs.Add($"{DateTimeOffset.UtcNow}\tRow Number: {serviceUserPackage.FirstOrDefault().RowNumber}\tSupplierID {serviceUserPackage.FirstOrDefault().SupplierID} must be number."); hasError = true; } var supplierID = GetSupplierID(supplierId, serviceUserPackage.FirstOrDefault().SupplierSite); if (supplierID == 0) { logs.Add($"{DateTimeOffset.UtcNow}\tRow Number: {serviceUserPackage.FirstOrDefault().RowNumber}\tService user {serviceUserPackage.Key}\tSupplierID: {supplierId}\tSupplierSite: {serviceUserPackage.FirstOrDefault().SupplierSite} not found."); hasError = true; } if (hasError) { continue; } var carePackage = new CarePackage() { Id = Guid.NewGuid(), PackageType = ExcelPackageModel.GetPackageType(serviceUserPackage.FirstOrDefault().ServiceType), Status = PackageStatus.Approved, PackageScheduling = PackageScheduling.Temporary, DateCreated = DateTimeOffset.UtcNow, CreatorId = _applicationID, Settings = new CarePackageSettings() { Id = Guid.NewGuid(), CreatorId = _applicationID, DateCreated = DateTimeOffset.UtcNow, }, SupplierId = supplierID, ServiceUserId = serviceUserID, PrimarySupportReasonId = primarySupportReasonID, }; foreach (var package in serviceUserPackage) { var excelPackageModel = new ExcelPackageModel(package.ElementType); if (excelPackageModel.SubPackageType == ExcelPackageModel.ExcelPackageType.Detail) { var corePackage = new CarePackageDetail() { CarePackageId = carePackage.Id, CreatorId = _applicationID, Cost = Math.Abs(package.Cost), DateCreated = DateTimeOffset.UtcNow, Id = Guid.NewGuid(), Type = excelPackageModel.PackageDetailType, UnitOfMeasure = package.UnitOfMeasure, StartDate = package.StartDate.UtcDateTime, CostPeriod = excelPackageModel.CostPeriod, EndDate = package.EndDate?.UtcDateTime, Subjective = package.Subjective }; carePackage.Details.Add(corePackage); } else if (excelPackageModel.SubPackageType == ExcelPackageModel.ExcelPackageType.Reclaim) { var reclaim = new CarePackageReclaim() { CarePackageId = carePackage.Id, CreatorId = _applicationID, Cost = excelPackageModel.ReclaimType == ReclaimType.Fnc ? package.Cost : Math.Abs(package.Cost), Description = package.ElementType, DateCreated = DateTimeOffset.UtcNow, Id = Guid.NewGuid(), StartDate = package.StartDate.UtcDateTime, EndDate = package.EndDate?.UtcDateTime, ClaimCollector = excelPackageModel.ClaimCollector, SubType = excelPackageModel.ReclaimSubType, Type = excelPackageModel.ReclaimType, Status = ReclaimStatus.Active, Subjective = package.Subjective }; carePackage.Reclaims.Add(reclaim); } else { logs.Add($"{DateTimeOffset.UtcNow}\tRow Number: {serviceUserPackage.FirstOrDefault().RowNumber}\tService user {serviceUserPackage.Key}\tPackage Type {package.ElementType} is not valid."); } } SyncFncClaimCollector(carePackage.Reclaims); _databaseContext.CarePackages.Add(carePackage); } File.WriteAllLines($"{fileName}_logs.txt", logs); _databaseContext.SaveChanges(); }
private static void ValidateProvisionalCareChargeAsync(CarePackageReclaimCreationDomain reclaimCreationDomain, CarePackage carePackage, CarePackageDetail coreCostDetail) { var validReclaimStatuses = new[] { ReclaimStatus.Active, ReclaimStatus.Pending, ReclaimStatus.Ended }; if (reclaimCreationDomain.SubType != ReclaimSubType.CareChargeProvisional) { throw new ApiException($"Cannot create {reclaimCreationDomain.SubType.GetDisplayName()}. Manage other care charges types in the Care Charges menu", HttpStatusCode.BadRequest); } if (carePackage.Reclaims.Any(cc => cc.Type == ReclaimType.CareCharge && cc.SubType == ReclaimSubType.CareChargeProvisional && cc.Status.In(validReclaimStatuses))) { throw new ApiException($"Provisional Care charge assessment for this package already done", HttpStatusCode.BadRequest); } if (carePackage.Reclaims.Any(cc => cc.Type == ReclaimType.CareCharge && cc.SubType != ReclaimSubType.CareChargeProvisional)) { throw new ApiException($"Care charge assessment for this package already done. Manage care charges for this package in the Care Charges menu", HttpStatusCode.BadRequest); } // Start date of provisional CC cannot be before package start date if (!reclaimCreationDomain.StartDate.IsInRange(coreCostDetail.StartDate, coreCostDetail.EndDate ?? DateTimeOffset.UtcNow.AddYears(10))) { throw new ApiException($"{ReclaimSubType.CareChargeProvisional.GetDisplayName()} start date must be equal or greater than {coreCostDetail.StartDate.Date}", HttpStatusCode.UnprocessableEntity); } // End date of provisional CC cannot be before package end date if (reclaimCreationDomain.EndDate != null) { var provisionalCareChargeEndDate = (DateTimeOffset)reclaimCreationDomain.EndDate; if (coreCostDetail.EndDate != null && !provisionalCareChargeEndDate.IsInRange(coreCostDetail.StartDate, (DateTimeOffset)coreCostDetail.EndDate)) { throw new ApiException( $"{reclaimCreationDomain.SubType} end date is invalid. Must be in the range {coreCostDetail.StartDate} - {coreCostDetail.EndDate}", HttpStatusCode.UnprocessableEntity); } } // If provisional cc is set to be ongoing, force end date to be the end date of the package if (coreCostDetail.EndDate != null && reclaimCreationDomain.EndDate == null) { reclaimCreationDomain.EndDate = coreCostDetail.EndDate; } }