diff --git a/src/SFA.DAS.Commitments.Database/AdhocScripts/Support/ApprenticeshipStopFixUpScript.sql b/src/SFA.DAS.Commitments.Database/AdhocScripts/Support/ApprenticeshipStopFixUpScript.sql new file mode 100644 index 0000000000..5da393f0c5 --- /dev/null +++ b/src/SFA.DAS.Commitments.Database/AdhocScripts/Support/ApprenticeshipStopFixUpScript.sql @@ -0,0 +1,187 @@ +/* +Apprenticeship Stop fix-up script +This script stops a specific apprenticeship as at a given date. If the apprenticeship is already stopped, the stop date will be amended accordingly. +IMPORTANT: Also generates a SQL statement to be run against the Events DB to keep things in sync. +*/ + +--Set the target record here: +declare @ApprenticeshipId bigint = 0 -- This is the specific apprenticeship record you want to stop or correct +declare @Uln varchar(max) = 'xxxxxxxxxx' -- For extra protection against errors, also specify the ULN for the apprenticeship +declare @StopDate DATETIME = 'yyyy-mm-dd' /* YYYY-MM-DD */ --This is the date you want to stop the apprenticeship (or correct to) + +/* ========================================================================== */ +/* =================== DO NOT MODIFY BELOW THIS LINE ======================== */ +/* ========================================================================== */ + +BEGIN TRAN + + --Just some vars here + DECLARE @error INT + declare @originalApprenticeId BIGINT + declare @originalUln VARCHAR(10) + declare @originalPaymentStatus BIGINT + declare @originalStartDate DATETIME + declare @originalStopDate DATETIME + declare @originalHistoryId BIGINT + declare @originalHistoryJson NVARCHAR(MAX) + declare @historyJson NVARCHAR(MAX) + + /* Read some data */ + + select @originalApprenticeId = Id, @originalUln = Uln, @originalPaymentStatus = PaymentStatus, @originalStopDate = StopDate, @originalStartDate = StartDate + from Apprenticeship where Id = @ApprenticeshipId + + select top 1 @originalHistoryId = Id, @originalHistoryJson = UpdatedState from History where ApprenticeshipId = @originalApprenticeId order by Id desc + + /* End data read */ + + /* Validation checks - */ + IF(@originalApprenticeId is null) BEGIN SET @error=50001 PRINT 'ERROR - Apprenticeship record not found' GOTO batch_abort END + IF(@originalUln <> @Uln) BEGIN SET @error=50002 PRINT 'ERROR - Apprenticeship ULN does not match' GOTO batch_abort END + IF(@originalPaymentStatus = 0) BEGIN SET @error=50003 PRINT 'ERROR - Apprenticeship is not approved so cannot be stopped' GOTO batch_abort END + IF(@StopDate < @originalStartDate) BEGIN SET @error=50004 PRINT 'ERROR - Stop date cannot be before start date' GOTO batch_abort END + /* End Validation */ + + print 'Original Apprenticeship Id: ' + convert(varchar, @originalApprenticeId) + print 'Original Start Date:' + convert(varchar, @originalStartDate, 126) + print 'Original Stop Date:' + convert(varchar, @originalStopDate, 126) + + /* Backdate the original apprenticeship Stop Date */ + update Apprenticeship set PaymentStatus=3, StopDate = @StopDate where Id = @originalApprenticeId + + if(@@ERROR != 0) BEGIN SET @error = @@ERROR GOTO batch_abort END + print 'New apprenticeship stop date:' + convert(varchar, @StopDate, 126) + print '' + + /* History */ + + if(@originalHistoryId is null) begin + print 'No History record found - history will not be written' + end else begin + + set @historyJson = JSON_MODIFY(@originalHistoryJson,'$.PaymentStatus', 3) + set @historyJson = JSON_MODIFY(@historyJson,'$.StopDate',CONVERT(varchar(50),@stopDate,126)) + + insert into History (ApprenticeshipId, UserId, UpdatedByRole, ChangeType, CreatedOn, ProviderId, EmployerAccountId, UpdatedByName, OriginalState, UpdatedState) + select + ApprenticeshipId, 'DataFix', 'Employer', 'Updated', GETDATE(), ProviderId, EmployerAccountId, 'DataFix', @originalHistoryJson, @historyJson + from History + where Id = @originalHistoryId + + end + + /* End History */ + + /* Generate statement to run against Events DB */ + declare @eventsInsertSql VARCHAR(MAX); + + WITH TargetApprenticeship ( + ApprenticeshipId, ULN, ProviderId, EmployerAccountId, LegalEntityId, LegalEntityName, LegalEntityOrganisationType, + NewPaymentOrder, PaymentStatus, AgreementStatus, TrainingType, TrainingCode, StartDate, EndDate, Cost, DateOfBirth, + TransferSenderId, TransferSenderName, TransferApprovalStatus, TransferApprovalActionedOn, StopDate, PauseDate, + AccountLegalEntityPublicHashedId + ) + AS ( + SELECT + CAST(a.Id as varchar(20)) AS ApprenticeshipId, + a.ULN AS ULN, + CAST(c.ProviderId AS varchar(20)) AS ProviderId, + CAST(c.EmployerAccountId AS varchar(20)) AS EmployerAccountId, + CAST(c.LegalEntityId AS varchar(40)) AS LegalEntityId, + REPLACE(c.LegalEntityName,'''', '''''' ) AS LegalEntityName, + CASE LegalEntityOrganisationType + WHEN 1 THEN 'CompaniesHouse' + WHEN 2 THEN 'Charities' + WHEN 3 THEN 'PublicBodies' + WHEN 4 THEN 'Other' + END AS LegalEntityOrganisationType, + CAST(a.PaymentOrder AS varchar(10)) AS PaymentOrder, + CAST(PaymentStatus AS varchar(10)) AS PaymentStatus, + CAST(AgreementStatus AS varchar(10)) AS AgreementStatus, + CASE TrainingType WHEN 1 THEN '0' ELSE '1' END, + CAST(TrainingCode AS varchar(10)) AS TrainingCode, + CONVERT(varchar(50),StartDate,126) AS StartDate, + CONVERT(varchar(50),EndDate,126) AS EndDate, + CAST(Cost AS varchar(20)) AS Cost, + CONVERT(varchar(50),DateOfBirth,126) AS DateOfBirth, + CAST(TransferSenderId as varchar(20)) as TransferSenderId, + TransferSenderName, + CAST(TransferApprovalStatus as varchar(10)) as TransferApprovalStatus, + CONVERT(varchar(50),TransferApprovalActionedOn,126) as TransferApprovalActionedOn, + CONVERT(varchar(50),StopDate,126) as StopDate, + CONVERT(varchar(50),PauseDate,126) as PauseDate, + AccountLegalEntityPublicHashedId + FROM Commitment c + INNER JOIN Apprenticeship a + on c.Id = a.CommitmentId + WHERE a.Id = @originalApprenticeId + ) + SELECT @eventsInsertSql = + 'INSERT INTO [dbo].[ApprenticeshipEvents] ([Event],[CreatedOn],[ApprenticeshipId],[PaymentOrder],[PaymentStatus],[AgreementStatus],[ProviderId],[LearnerId],[EmployerAccountId],[TrainingType],[TrainingId],[TrainingStartDate],[TrainingEndDate],[TrainingTotalCost],[LegalEntityId],[LegalEntityName],[LegalEntityOrganisationType],[EffectiveFrom],[EffectiveTo],[DateOfBirth],TransferSenderId, TransferSenderName, TransferApprovalStatus,TransferApprovalActionedOn,StoppedOnDate,PausedOnDate,AccountLegalEntityPublicHashedId) + VALUES (''APPRENTICESHIP-UPDATED'',''' + convert(varchar(50),getdate(),126) + ''',' + + ApprenticeshipId + ',' + + NewPaymentOrder + ',' + + PaymentStatus + ',' + + AgreementStatus + ',' + + ProviderId + ',' + + ULN + ',' + + EmployerAccountId + ',' + + TrainingType + ',''' + + TrainingCode + ''',''' + + StartDate + ''',''' + + EndDate + ''',' + + Cost +',''' + + LegalEntityId + ''',''' + + LegalEntityName + ''',''' + + LegalEntityOrganisationType + ''',''' + + convert(varchar, @StopDate, 126) + + ''',NULL,''' + + DateOfBirth + ''',' + + CASE WHEN TransferSenderId is null then 'NULL' else '''' + TransferSenderId + '''' END + ',' + + CASE WHEN TransferSenderName is null then 'NULL' else '''' + TransferSenderName + '''' END + ',' + + CASE WHEN TransferApprovalStatus is null then 'NULL' else '''' + TransferApprovalStatus + '''' END + ',' + + CASE WHEN TransferApprovalActionedOn is null then 'NULL' else '''' + TransferApprovalActionedOn + '''' END + ',' + + CASE WHEN StopDate is null then 'NULL' else '''' + StopDate + '''' END + ',' + + CASE WHEN PauseDate is null then 'NULL' else '''' + PauseDate + '''' END + ',' + + CASE WHEN AccountLegalEntityPublicHashedId is null then 'NULL' else '''' + AccountLegalEntityPublicHashedId + '''' END + + ')' + FROM TargetApprenticeship + + + declare @eventsPriceHistoryInsertSql nvarchar(max) + set @eventsPriceHistoryInsertSql = 'declare @eventId bigint = SCOPE_IDENTITY();' + CHAR(13) + CHAR(13) + + select + @eventsPriceHistoryInsertSql += + 'INSERT INTO PriceHistory(ApprenticeshipEventsId, TotalCost, EffectiveFrom, EffectiveTo)' + CHAR(13) + + 'VALUES (@eventId,' + convert(varchar,Cost) + + ',''' + convert(varchar,FromDate,120) + ''',' + + COALESCE('''' + (CONVERT(varchar,ToDate,120) + ''''), 'NULL') + ');' + + CHAR(13) + CHAR(13) + from PriceHistory where ApprenticeshipId = @originalApprenticeId + + + print 'Generated Sql statements to be run against Events DB:' + print '' + print @eventsInsertSql + print'' + print @eventsPriceHistoryInsertSql + + /* End Events DB insert statement generation */ + + batch_abort: + + IF @error != 0 + BEGIN + ROLLBACK; + print 'Rollback performed' + RAISERROR ('Error(s) occurred', 11, 1); + END + ELSE + BEGIN + + print 'Committing transaction' + COMMIT + print 'Completed' + + END diff --git a/src/SFA.DAS.Commitments.Database/SFA.DAS.Commitments.Database.sqlproj b/src/SFA.DAS.Commitments.Database/SFA.DAS.Commitments.Database.sqlproj index fc5459a748..14efe69c1c 100644 --- a/src/SFA.DAS.Commitments.Database/SFA.DAS.Commitments.Database.sqlproj +++ b/src/SFA.DAS.Commitments.Database/SFA.DAS.Commitments.Database.sqlproj @@ -65,6 +65,8 @@ + + @@ -133,6 +135,7 @@ +