diff --git a/.github/workflows/katalon-ci.yaml b/.github/workflows/katalon-ci.yaml
index 15879c74e..e90d1638b 100644
--- a/.github/workflows/katalon-ci.yaml
+++ b/.github/workflows/katalon-ci.yaml
@@ -12,7 +12,7 @@ jobs:
runs-on: windows-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3.0
with:
ref: dev-automationscripts
- name: set screen resolution
@@ -35,7 +35,7 @@ jobs:
dir
shell: cmd
- name: Katalon Studio Github Action
- uses: katalon-studio/katalon-studio-github-action@v2
+ uses: katalon-studio/katalon-studio-github-action@v3.0
with:
version: '8.2.0'
projectPath: '${{ github.workspace }}/testing/foi-qa-automation/foi-qa-automation.prj'
@@ -50,7 +50,7 @@ jobs:
dir
shell: cmd
- name: Setup Node.js
- uses: actions/setup-node@v2
+ uses: actions/setup-node@v3.0
with:
node-version: '14'
- name: Create collection report
@@ -58,7 +58,7 @@ jobs:
npm i -g xunit-viewer
xunit-viewer -r artifacts\JUnit_Report.xml -o artifacts\foi-test.html
- name: Archive Katalon report
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3.0
with:
name: katalon-report
path: artifacts
@@ -67,9 +67,9 @@ jobs:
# runs-on: macos-latest
# steps:
# - name: Checkout
- # uses: actions/checkout@v2
+ # uses: actions/checkout@v3
# - name: Katalon Studio Github Action
- # uses: katalon-studio/katalon-studio-github-action@v2.1
+ # uses: katalon-studio/katalon-studio-github-action@v3.2.0
# with:
# version: '7.5.5'
# projectPath: '${{ github.workspace }}'
diff --git a/.gitignore b/.gitignore
index cc7aa8897..8860508ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,7 @@ request-management-api/request_api/__pycache__/__init__.cpython-38.pyc
request-management-api/request_api/models/__pycache__/*.*
request-management-api/migrations/__pycache__/*.*
request-management-api/.env
+notification-manager/env/*
*.pyc
*/__pycache__/*
@@ -92,3 +93,22 @@ axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegrationWebAPI/*.user
axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegrationWebAPI/Properties/PublishProfiles/FolderProfile.pubxml
axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegrationWebAPI/Properties/PublishProfiles/FolderProfile.pubxml.user
apps/
+datamigrations/FOIMOD.CFD.ETL.DataMigration/.vs/FOIMOD.CFD.ETL.DataMigration/v16/.suo
+
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/*/bin/*
+datamigrations/FOIMOD.CFD.DocMigration.AXIS.DAL/*/bin/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/.vs/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/bin/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/obj/*
+
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/Debug/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/obj/*
+datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/appsettings.dev.json
diff --git a/README.md b/README.md
index e83caf170..908fe8af6 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,59 @@ Freedom of Information modernization.
## Installation
+### For mac
+#### Run the microservices in docker
+1. Clone this repo
+2. Place the appropriate .env file to the root folder of entire repo
+3. Change docker-compose.yml line 152 from windows.Dockerfile to mac.Dockerfile
+4. Make sure you are logged into the VPN if working remotely
+5. Compose up the docker-compose.yml file in the root folder by either right-clicking and selecting 'Compose up' in VS Code or running the command
+```docker compose -f "docker-compose.yml" up -d --build```
+
+#### Add IP address to hosts on local system if accessing remotely
+1. Log into vpn
+2. Click statistics icon (bottom left of AnyConnect, the graph icon)
+3. Note down client address (IPv4)
+4. In your terminal run the command ``` sudo nano /etc/hosts ```
+5. Add the ip address from above to the list, with alias value ``` foiflow.local ```
+6. Save and exit
+
+#### API performance issues
+The app (particularly the API) may run very slowly. Performance can be improved by turning off Redis caching, commenting out the following code in [KeycloakAdminService](https://github.com/bcgov/foi-flow/blob/main/request-management-api/request_api/services/external/keycloakadminservice.py) (at ```foi-flow/request-management-api/request_api/services/external/keycloakadminservice.py```). Make sure that you don't commit these changes.
+
+Comment out the following, and change the _accesstoken value to None
+```diff
+ def get_token(self):
+ _accesstoken=None
+ try:
++ #cache_client = redis.from_url(self.cache_redis_url,decode_responses=True)
+- cache_client = redis.from_url(self.cache_redis_url,decode_responses=True)
++ _accesstoken = None
+- _accesstoken = cache_client.get("foi:kcsrcacnttoken")
+ if _accesstoken is None:
+ url = '{0}/auth/realms/{1}/protocol/openid-connect/token'.format(self.keycloakhost,self.keycloakrealm)
+ params = {
+
+ 'client_id': self.keycloakclientid,
+ 'grant_type': 'password',
+ 'username' : self.keycloakadminserviceaccount,
+ 'password': self.keycloakadminservicepassword,
+ 'client_secret':self.keycloakclientsecret
+ }
+ x = requests.post(url, params, verify=True).content.decode('utf-8')
+ _accesstoken = str(ast.literal_eval(x)['access_token'])
++ #cache_client.set("foi:kcsrcacnttoken",_accesstoken,ex=int(self.kctokenexpiry))
+- cache_client.set("foi:kcsrcacnttoken",_accesstoken,ex=int(self.kctokenexpiry))
+ except BusinessException as exception:
+ print("Error happened while accessing token on KeycloakAdminService {0}".format(exception.message))
++ #finally:
++ #cache_client = None
+- finally:
+- cache_client = None
+ return _accesstoken
+```
+Again, make sure you don't commit these changes.
+
## Project Status
The project is in the very early stages of development. The codebase will be changing frequently.
diff --git a/apps/forms-flow-ai/forms-flow-bpm/mac.Dockerfile b/apps/forms-flow-ai/forms-flow-bpm/mac.Dockerfile
new file mode 100644
index 000000000..bdacbeeae
--- /dev/null
+++ b/apps/forms-flow-ai/forms-flow-bpm/mac.Dockerfile
@@ -0,0 +1,50 @@
+# Modified by Yichun Zhao and Walter Moar
+
+# Maven build
+FROM artifacts.developer.gov.bc.ca/docker-remote/maven:3.6.1-jdk-11-slim AS MAVEN_TOOL_CHAIN
+
+RUN apt-get update \
+ && apt-get install -y git
+
+ARG FORMIO_SOURCE_REPO_BRANCH=v4.0.5-alpha
+ARG FORMIO_SOURCE_REPO_URL=https://github.com/AOT-Technologies/forms-flow-ai.git
+
+RUN git clone -b ${FORMIO_SOURCE_REPO_BRANCH} ${FORMIO_SOURCE_REPO_URL} /bpm/
+
+#RUN cp /bpm/forms-flow-bpm/pom-docker.xml /tmp/pom.xml
+#RUN cp /bpm/forms-flow-bpm/settings-docker.xml /usr/share/maven/ref/
+COPY ./pom-docker.xml /tmp/pom.xml
+COPY ./settings-docker.xml /usr/share/maven/ref/
+
+WORKDIR /tmp/
+
+# This allows Docker to cache most of the maven dependencies
+RUN mvn -s /usr/share/maven/ref/settings-docker.xml dependency:resolve-plugins dependency:resolve dependency:go-offline -B
+RUN rm -rf /bpm/forms-flow-bpm/src/main/resources/processes
+RUN cp -r /bpm/forms-flow-bpm/src/ /tmp/src/
+
+ARG CUSTOM_SRC_DIR=src/main/
+
+# Override these files they have custom changes in the sbc_divapps directory
+COPY ./${CUSTOM_SRC_DIR}/ /tmp/${CUSTOM_SRC_DIR}/
+RUN mvn -s /usr/share/maven/ref/settings-docker.xml package -Dmaven.test.skip
+
+
+
+# Final custom slim java image (for apk command see jdk-11.0.3_7-alpine-slim)
+FROM --platform=amd64 artifacts.developer.gov.bc.ca/docker-remote/adoptopenjdk/openjdk11:jdk-11.0.3_7-alpine
+
+ENV JAVA_VERSION jdk-11.0.3+7
+ENV JAVA_HOME=/opt/java/openjdk \
+ PATH="/opt/java/openjdk/bin:$PATH"
+
+EXPOSE 8080
+# OpenShift has /app in the image, but it's missing when doing local development - Create it when missing
+RUN test ! -d /app && mkdir /app || :
+# Add spring boot application
+RUN mkdir -p /app
+COPY --from=MAVEN_TOOL_CHAIN /tmp/target/forms-flow-bpm.jar ./app
+RUN chmod a+rwx -R /app
+WORKDIR /app
+VOLUME /tmp
+ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/forms-flow-bpm.jar"]
\ No newline at end of file
diff --git a/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DAL/RequestsDA.cs b/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DAL/RequestsDA.cs
index a969735f8..12ce38682 100644
--- a/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DAL/RequestsDA.cs
+++ b/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DAL/RequestsDA.cs
@@ -53,6 +53,7 @@ public AXISRequest GetAXISRequest(string request)
axisRequest.StartDate = RequestsHelper.ConvertDateToString(row, "requestProcessStart", "yyyy-MM-dd");
axisRequest.DueDate = RequestsHelper.ConvertDateToString(row, "dueDate", "yyyy-MM-dd");
axisRequest.CFRDueDate = RequestsHelper.ConvertDateToString(row, "cfrDueDate", "yyyy-MM-dd");
+ axisRequest.OriginalDueDate = RequestsHelper.ConvertDateToString(row, "originalDueDate", "yyyy-MM-dd");
axisRequest.DeliveryMode = RequestsHelper.GetDeliveryMode(Convert.ToString(row["deliveryMode"]));
axisRequest.ReceivedMode = RequestsHelper.GetReceivedMode(Convert.ToString(row["receivedMode"]));
@@ -83,6 +84,7 @@ public AXISRequest GetAXISRequest(string request)
axisRequest.Ispiiredacted = true;
axisRequest.RequestPageCount = Convert.ToInt32(row["requestPageCount"]);
axisRequest.SubjectCode = Convert.ToString(row["subjectCode"]);
+ axisRequest.IdentityVerified = Convert.ToString(row["identityVerified"]);
List ministryList = new()
{
new Ministry(RequestsHelper.GetMinistryCode(Convert.ToString(row["selectedMinistry"])))
@@ -151,6 +153,7 @@ private DataTable GetAxisRequestData(string request)
when requests.IREQUESTID = redaction.IREQUESTID and redaction.IDOCID = ldocuments.IDOCID then ldocuments.SIPAGECOUNT
else 0 end) as requestPageCount,
REPLACE(requestfields.CUSTOMFIELD33, CHAR(160), ' ') as subjectCode,
+ requestfields.CUSTOMFIELD75 as identityVerified,
(SELECT TOP 1 cfr.sdtDueDate FROM tblRequestForDocuments cfr WITH (NOLOCK)
INNER JOIN tblProgramOffices programoffice WITH (NOLOCK) ON programoffice.tiProgramOfficeID = cfr.tiProgramOfficeID
WHERE requests.iRequestID = cfr.iRequestID
@@ -182,7 +185,7 @@ LEFT OUTER JOIN dbo.TBLREQUESTCUSTOMFIELDS requestfields WITH (NOLOCK) ON reques
requesters.vcAddress1, requesters.vcAddress2, requesters.vcCity, requesters.vcZipCode,
requesters.vcHome, requesters.vcMobile, requesters.vcWork1, requesters.vcWork2, requesters.vcFirstName, requesters.vcLastName, requesters.vcMiddleName,
requests.iRequestID, requesters.vcCompany, requesters.vcEmailID, onbehalf.vcFirstName, onbehalf.vcLastName, onbehalf.vcMiddleName,
- requestTypes.iLabelID, requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID,requestorfields.CUSTOMFIELD35, REPLACE(requestfields.CUSTOMFIELD33, CHAR(160), ' ')";
+ requestTypes.iLabelID, requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID,requestorfields.CUSTOMFIELD35, REPLACE(requestfields.CUSTOMFIELD33, CHAR(160), ' '),requestfields.CUSTOMFIELD75";
DataTable dataTable = new();
using (sqlConnection = new SqlConnection(ConnectionString))
{
diff --git a/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DataModels/AXISRequest.cs b/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DataModels/AXISRequest.cs
index 1521c09b4..3c8feb896 100644
--- a/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DataModels/AXISRequest.cs
+++ b/axisintegrationapi/MCS.FOI.AXISIntegration/MCS.FOI.AXISIntegration.DataModels/AXISRequest.cs
@@ -135,6 +135,9 @@ public class AXISRequest
[DataMember(Name = "Extensions")]
public List Extensions { get; set; }
+ [DataMember(Name = "identityVerified")]
+ public string IdentityVerified { get; set; }
+
}
[DataContract]
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.sln b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.sln
new file mode 100644
index 000000000..6e06785c4
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.sln
@@ -0,0 +1,79 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33213.308
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.ConsoleApp.DocMigration", "FOIMOD.CFD.ConsoleApp.DocMigration\FOIMOD.CFD.ConsoleApp.DocMigration.csproj", "{F3EE4F36-2422-4F11-ADEA-8455BA9B7A27}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.AXIS.DAL", "FOIMOD.CFD.DocMigration.DAL\FOIMOD.CFD.DocMigration.AXIS.DAL.csproj", "{F63AE4FE-892B-40EB-8D88-3BC3433A0FF5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.S3Uploader", "FOIMOD.CFD.DocMigration.S3Uploader\FOIMOD.CFD.DocMigration.S3Uploader.csproj", "{59E9C03A-DE05-48ED-8B16-252CC23DB5E6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.FOIFLOW.DAL", "FOIMOD.CFD.DocMigration.FOIFLOW.DAL\FOIMOD.CFD.DocMigration.FOIFLOW.DAL.csproj", "{F2A928AC-15B5-4124-95D1-E7706000EFB4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.BAL", "FOIMOD.CFD.DocMigration.BAL\FOIMOD.CFD.DocMigration.BAL.csproj", "{FF7CB66C-60A6-4130-919A-3DBECB869CAE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.Utils", "FOIMOD.CFD.DocMigration.Utils\FOIMOD.CFD.DocMigration.Utils.csproj", "{68B638B6-9118-48CE-AC5A-A1D00265B653}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.Models", "FOIMOD.CFD.DocMigration.Models\FOIMOD.CFD.DocMigration.Models.csproj", "{AC053E49-6F19-4F5D-AF91-DA6CFD4C4D74}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.Utils.UnitTests", "FOIMOD.CFD.DocMigration.Utils.UnitTests\FOIMOD.CFD.DocMigration.Utils.UnitTests.csproj", "{9D27E50C-7209-4BDB-9379-627A7CD9B2FA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests", "FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests\FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests.csproj", "{4402E37D-BA96-4C9C-9AD2-78A866D9C2E6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests", "FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests\FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests.csproj", "{E964523D-91C1-4E1C-860F-52E57E826E16}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F3EE4F36-2422-4F11-ADEA-8455BA9B7A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F3EE4F36-2422-4F11-ADEA-8455BA9B7A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F3EE4F36-2422-4F11-ADEA-8455BA9B7A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F3EE4F36-2422-4F11-ADEA-8455BA9B7A27}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F63AE4FE-892B-40EB-8D88-3BC3433A0FF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F63AE4FE-892B-40EB-8D88-3BC3433A0FF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F63AE4FE-892B-40EB-8D88-3BC3433A0FF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F63AE4FE-892B-40EB-8D88-3BC3433A0FF5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {59E9C03A-DE05-48ED-8B16-252CC23DB5E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {59E9C03A-DE05-48ED-8B16-252CC23DB5E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {59E9C03A-DE05-48ED-8B16-252CC23DB5E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {59E9C03A-DE05-48ED-8B16-252CC23DB5E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F2A928AC-15B5-4124-95D1-E7706000EFB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F2A928AC-15B5-4124-95D1-E7706000EFB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F2A928AC-15B5-4124-95D1-E7706000EFB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F2A928AC-15B5-4124-95D1-E7706000EFB4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FF7CB66C-60A6-4130-919A-3DBECB869CAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FF7CB66C-60A6-4130-919A-3DBECB869CAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FF7CB66C-60A6-4130-919A-3DBECB869CAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FF7CB66C-60A6-4130-919A-3DBECB869CAE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68B638B6-9118-48CE-AC5A-A1D00265B653}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68B638B6-9118-48CE-AC5A-A1D00265B653}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68B638B6-9118-48CE-AC5A-A1D00265B653}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68B638B6-9118-48CE-AC5A-A1D00265B653}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AC053E49-6F19-4F5D-AF91-DA6CFD4C4D74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AC053E49-6F19-4F5D-AF91-DA6CFD4C4D74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AC053E49-6F19-4F5D-AF91-DA6CFD4C4D74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AC053E49-6F19-4F5D-AF91-DA6CFD4C4D74}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9D27E50C-7209-4BDB-9379-627A7CD9B2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D27E50C-7209-4BDB-9379-627A7CD9B2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9D27E50C-7209-4BDB-9379-627A7CD9B2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9D27E50C-7209-4BDB-9379-627A7CD9B2FA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4402E37D-BA96-4C9C-9AD2-78A866D9C2E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4402E37D-BA96-4C9C-9AD2-78A866D9C2E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4402E37D-BA96-4C9C-9AD2-78A866D9C2E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4402E37D-BA96-4C9C-9AD2-78A866D9C2E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E964523D-91C1-4E1C-860F-52E57E826E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E964523D-91C1-4E1C-860F-52E57E826E16}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E964523D-91C1-4E1C-860F-52E57E826E16}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E964523D-91C1-4E1C-860F-52E57E826E16}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {ED380BD1-F2BB-40F6-A8D3-12308661A924}
+ EndGlobalSection
+EndGlobal
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.csproj
new file mode 100644
index 000000000..fa9ad3da9
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration.csproj
@@ -0,0 +1,29 @@
+
+
+
+ Exe
+ net7.0
+ enable
+ enable
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+ Always
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/Program.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/Program.cs
new file mode 100644
index 000000000..7bd47164a
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/Program.cs
@@ -0,0 +1,57 @@
+// See https://aka.ms/new-console-template for more information
+using Amazon.Runtime;
+using Amazon.S3;
+using FOIMOD.CFD.DocMigration.BAL;
+using FOIMOD.CFD.DocMigration.Models;
+using Microsoft.Data.SqlClient;
+using Microsoft.Extensions.Configuration;
+using System.Data.Odbc;
+using System.Net;
+
+Console.WriteLine("Starting, CFD Document Migration!");
+
+#if DEBUG
+var configurationbuilder = new ConfigurationBuilder()
+ .AddJsonFile($"appsettings.dev.json", true, true)
+ .AddEnvironmentVariables().Build();
+#else
+var configurationbuilder = new ConfigurationBuilder()
+ .AddJsonFile($"appsettings.json", true, true)
+ .AddEnvironmentVariables().Build();
+
+#endif
+
+
+SystemSettings.FileServerRoot = configurationbuilder.GetSection("S3Configuration:FileServerRoot").Value;
+SystemSettings.CorrespondenceLogBaseFolder = configurationbuilder.GetSection("S3Configuration:CorrespondenceLogBaseFolder").Value;
+SystemSettings.RecordsbaseFolder = configurationbuilder.GetSection("S3Configuration:RecordsbaseFolder").Value;
+SystemSettings.S3_AccessKey = configurationbuilder.GetSection("S3Configuration:AWS_accesskey").Value;
+SystemSettings.S3_SecretKey = configurationbuilder.GetSection("S3Configuration:AWS_secret").Value;
+SystemSettings.S3_EndPoint = configurationbuilder.GetSection("S3Configuration:AWS_S3_Url").Value;
+SystemSettings.S3_Attachements_BasePath = configurationbuilder.GetSection("S3Configuration:S3_Attachements_BasePath").Value;
+SystemSettings.S3_Attachements_Bucket = configurationbuilder.GetSection("S3Configuration:S3_Attachements_Bucket").Value;
+SystemSettings.AttachmentTag = configurationbuilder.GetSection("S3Configuration:AttachmentTag").Value;
+
+SystemSettings.AXISConnectionString = configurationbuilder.GetSection("AXISConfiguration:SQLConnectionString").Value;
+SystemSettings.RequestToMigrate = configurationbuilder.GetSection("AXISConfiguration:RequestToMigrate").Value;
+
+SystemSettings.FOIFLOWConnectionString = configurationbuilder.GetSection("FOIFLOWConfiguration:FOIFLOWConnectionString").Value;
+
+
+
+SqlConnection axissqlConnection = new SqlConnection(SystemSettings.AXISConnectionString);
+OdbcConnection odbcConnection = new OdbcConnection(SystemSettings.FOIFLOWConnectionString);
+
+AWSCredentials s3credentials = new BasicAWSCredentials(SystemSettings.S3_AccessKey, SystemSettings.S3_SecretKey);
+
+AmazonS3Config config = new()
+{
+ ServiceURL = SystemSettings.S3_EndPoint
+
+};
+
+AmazonS3Client amazonS3Client = new AmazonS3Client(s3credentials, config);
+
+CorrespondenceLogMigration correspondenceLogMigration = new CorrespondenceLogMigration(axissqlConnection, odbcConnection, amazonS3Client);
+correspondenceLogMigration.RequestsToMigrate = SystemSettings.RequestToMigrate;
+await correspondenceLogMigration.RunMigration();
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/appsettings.json b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/appsettings.json
new file mode 100644
index 000000000..2e9102a54
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.ConsoleApp.DocMigration/appsettings.json
@@ -0,0 +1,23 @@
+{
+ "S3Configuration": {
+ "AWS_accesskey": "",
+ "AWS_secret": "",
+ "AWS_S3_Url": "https://citz-foi-prod.objectstore.gov.bc.ca",
+ "FileServerRoot": "\\\\solis\\ATIPDocs\\",
+ "CorrespondenceLogBaseFolder": "AFXWCORL",
+ "RecordsbaseFolder": "AFXWDOCS",
+ "S3_Attachements_BasePath": "dev-forms-foirequests-e/Misc",
+ "S3_Attachements_Bucket": "dev-forms-foirequests-e",
+ "AttachmentTag": "applicant"
+
+ },
+ "AXISConfiguration": {
+ "SQLConnectionString": "Data Source=.;Initial Catalog=ATIPD;Integrated Security=True;Encrypt=False",
+ "RequestToMigrate": "'CFD-2015-50011','CFD-2014-50119','CLB-2017-70004'"
+ },
+ "FOIFLOWConfiguration": {
+ "FOIFLOWConnectionString": "DSN=FOIFLOWDBdsn"
+ }
+
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/AXISDALTest.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/AXISDALTest.cs
new file mode 100644
index 000000000..d6d289528
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/AXISDALTest.cs
@@ -0,0 +1,50 @@
+using FOIMOD.CFD.DocMigration.DAL;
+using FOIMOD.CFD.DocMigration.Models;
+using Microsoft.Data.SqlClient;
+using Microsoft.Extensions.Configuration;
+namespace FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests
+{
+ [TestClass]
+ public class AXISDALTest
+ {
+ SqlConnection conn = null;
+ string requeststomigrate = String.Empty;
+ [TestInitialize]
+ public void AXISDALTestInit()
+ {
+ var configurationbuilder = new ConfigurationBuilder()
+ .AddJsonFile($"appsettings.json", true, true)
+ .AddEnvironmentVariables().Build();
+
+ SystemSettings.AXISConnectionString = configurationbuilder.GetSection("AXISConfiguration:SQLConnectionString").Value;
+ SystemSettings.RequestToMigrate = configurationbuilder.GetSection("AXISConfiguration:RequestToMigrate").Value;
+
+ conn = new SqlConnection(SystemSettings.AXISConnectionString);
+ requeststomigrate = SystemSettings.RequestToMigrate;
+
+ }
+
+
+
+ [TestMethod]
+ public void GetCorrespondenceLogDocsTest()
+ {
+
+ DocumentsDAL documentsDAL = new DocumentsDAL(conn);
+ var correspondencelogs = documentsDAL.GetCorrespondenceLogDocuments(requeststomigrate);
+ Assert.IsNotNull(correspondencelogs);
+
+ }
+
+
+ [TestMethod]
+ public void GetRecordsTest()
+ {
+
+ DocumentsDAL documentsDAL = new DocumentsDAL(conn);
+ var correspondencelogs = documentsDAL.GetRecordsByRequest("NGD-2015-50137");
+ Assert.IsNotNull(correspondencelogs);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests.csproj
new file mode 100644
index 000000000..a8136f018
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests.csproj
@@ -0,0 +1,32 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/Usings.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/Usings.cs
new file mode 100644
index 000000000..ab67c7ea9
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/Usings.cs
@@ -0,0 +1 @@
+global using Microsoft.VisualStudio.TestTools.UnitTesting;
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/appsettings.json b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/appsettings.json
new file mode 100644
index 000000000..1287cc6f8
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.AXIS.DAL.UnitTests/appsettings.json
@@ -0,0 +1,8 @@
+{
+ "AXISConfiguration": {
+ "SQLConnectionString": "Data Source=.;Initial Catalog=ATIPD;Integrated Security=True;Encrypt=False",
+ "RequestToMigrate": "'CFD-2015-50011','CFD-2014-50119','CLB-2017-70004'"
+ }
+
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/CorrespondenceLogMigration.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/CorrespondenceLogMigration.cs
new file mode 100644
index 000000000..4bfc869ec
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/CorrespondenceLogMigration.cs
@@ -0,0 +1,130 @@
+using Amazon.S3;
+using FOIMOD.CFD.DocMigration.DAL;
+using FOIMOD.CFD.DocMigration.FOIFLOW.DAL;
+using FOIMOD.CFD.DocMigration.Models;
+using FOIMOD.CFD.DocMigration.Models.Document;
+using FOIMOD.CFD.DocMigration.Models.FOIFLOWDestination;
+using FOIMOD.CFD.DocMigration.Utils;
+using Microsoft.Data.SqlClient;
+using System.Data;
+using System.Data.Odbc;
+
+namespace FOIMOD.CFD.DocMigration.BAL
+{
+ public class CorrespondenceLogMigration
+ {
+ private IDbConnection sourceaxisSQLConnection;
+ private IDbConnection destinationfoiflowQLConnection;
+ private IAmazonS3 amazonS3;
+
+ public string RequestsToMigrate { get; set; }
+ public CorrespondenceLogMigration(IDbConnection _sourceAXISConnection, IDbConnection _destinationFOIFLOWDB, IAmazonS3 _amazonS3)
+ {
+ sourceaxisSQLConnection = _sourceAXISConnection;
+ destinationfoiflowQLConnection = _destinationFOIFLOWDB;
+ amazonS3 = _amazonS3;
+ }
+
+ public async Task RunMigration()
+ {
+ DocMigrationS3Client docMigrationS3Client = new DocMigrationS3Client(amazonS3);
+
+ DocumentsDAL documentsDAL = new DocumentsDAL((SqlConnection)sourceaxisSQLConnection);
+ AttachmentsDAL attachmentsDAL = new AttachmentsDAL((OdbcConnection)destinationfoiflowQLConnection);
+ DocMigrationPDFStitcher docMigrationPDFStitcher = new DocMigrationPDFStitcher();
+ List? correspondencelogs = documentsDAL.GetCorrespondenceLogDocuments(this.RequestsToMigrate);
+ foreach (DocumentToMigrate attachment in correspondencelogs)
+ {
+ if (string.IsNullOrEmpty(attachment.EmailTo) && string.IsNullOrEmpty(attachment.EmailContent))
+ {
+ var files = FilePathUtils.GetFileDetailsFromdelimitedstring(attachment.EmailAttachmentDelimitedString);
+ foreach (var file in files)
+ {
+ //NOT AN EMAIL UPLOAD - DIRECT FILE UPLOAD - For e.g. https://citz-foi-prod.objectstore.gov.bc.ca/dev-forms-foirequests-e/Misc/CFD-2023-22081302/applicant/00b8ad71-5d11-4624-9c12-839193cf4a7e.docx
+ //var UNCFileLocation = Path.Combine(SystemSettings.FileServerRoot, SystemSettings.CorrespondenceLogBaseFolder, file.FilePathOnServer);
+ var UNCFileLocation = file.FileExtension == "pdf" ? @"\\DESKTOP-U67UC02\ioashare\db7e84e1-4202-4837-b4dd-49af233ae006.pdf" : @"\\DESKTOP-U67UC02\ioashare\DOCX1.docx";
+
+
+ using (FileStream fs = File.Open(UNCFileLocation, FileMode.Open))
+ {
+ var s3filesubpath = string.Format("{0}/{1}/{2}", SystemSettings.S3_Attachements_BasePath, attachment.AXISRequestNumber, SystemSettings.AttachmentTag);
+ var destinationfilename = string.Format("{0}.{1}", Guid.NewGuid().ToString(), file.FileExtension);
+ var uploadresponse = await docMigrationS3Client.UploadFileAsync(new UploadFile() { AXISRequestID = attachment.AXISRequestNumber.ToUpper(), SubFolderPath = s3filesubpath, DestinationFileName = destinationfilename, FileStream = fs });
+ var fullfileurl = string.Format("{0}/{1}/{2}", SystemSettings.S3_EndPoint, s3filesubpath, destinationfilename);
+ if (uploadresponse.IsSuccessStatusCode)
+ {
+ //INSERT INTO TABLE - FOIMinistryRequestDocuments
+ attachmentsDAL.InsertIntoMinistryRequestDocuments(fullfileurl, file.FileName, attachment.AXISRequestNumber);
+
+ }
+
+ }
+
+ }
+
+ }
+ else
+ {
+ //Create EMAIL MSG PDF and sticth with the attachment documents
+ List documentToMigrateEmail = new List();
+ var attachmentfiles = FilePathUtils.GetFileDetailsFromdelimitedstring(attachment.EmailAttachmentDelimitedString);
+ using var emaildocstream = docMigrationPDFStitcher.CreatePDFDocument(attachment.EmailContent, attachment.EmailSubject, attachment.EmailDate, attachment.EmailTo, attachmentfiles);
+ emaildocstream.Position = 0;
+ documentToMigrateEmail.Add(new DocumentToMigrate() { FileStream = emaildocstream, DocumentType = Models.AXISSource.DocumentTypeFromAXIS.CorrespondenceLog, AXISRequestNumber = attachment.AXISRequestNumber.ToUpper(), PageSequenceNumber = 1, HasStreamForDocument = true });
+
+
+ if (attachmentfiles != null)
+ {
+ foreach (var file in attachmentfiles)
+ {
+ //var UNCFileLocation = Path.Combine(SystemSettings.FileServerRoot, SystemSettings.CorrespondenceLogBaseFolder, file.FilePathOnServer);
+ var UNCFileLocation = file.FileExtension == "pdf" ? @"\\DESKTOP-U67UC02\ioashare\db7e84e1-4202-4837-b4dd-49af233ae006.pdf" : @"\\DESKTOP-U67UC02\ioashare\DOCX1.docx";
+ if (file.FileExtension == "pdf")
+ {
+
+ documentToMigrateEmail.Add(new DocumentToMigrate()
+ { PageFilePath = UNCFileLocation, PageSequenceNumber = 2 });
+
+ }
+ else
+ {
+ using (FileStream fs = File.Open(UNCFileLocation, FileMode.Open))
+ {
+ var s3filesubpath = string.Format("{0}/{1}/{2}", SystemSettings.S3_Attachements_BasePath, attachment.AXISRequestNumber, SystemSettings.AttachmentTag);
+ var destinationfilename = string.Format("{0}.{1}", Guid.NewGuid().ToString(), file.FileExtension);
+ var uploadresponse = await docMigrationS3Client.UploadFileAsync(new UploadFile() { AXISRequestID = attachment.AXISRequestNumber.ToUpper(), SubFolderPath = s3filesubpath, DestinationFileName = destinationfilename, FileStream = fs });
+ var fullfileurl = string.Format("{0}/{1}/{2}", SystemSettings.S3_EndPoint, s3filesubpath, destinationfilename);
+ if (uploadresponse.IsSuccessStatusCode)
+ {
+ //INSERT INTO TABLE - FOIMinistryRequestDocuments
+ attachmentsDAL.InsertIntoMinistryRequestDocuments(fullfileurl, file.FileName, attachment.AXISRequestNumber);
+
+ }
+
+ }
+ }
+ }
+ }
+
+
+ using (Stream emailmessagepdfstream = docMigrationPDFStitcher.MergePDFs(documentToMigrateEmail))
+ {
+ var s3filesubpath = string.Format("{0}/{1}/{2}", SystemSettings.S3_Attachements_BasePath, attachment.AXISRequestNumber, SystemSettings.AttachmentTag);
+ var destinationfilename = string.Format("{0}.pdf", Guid.NewGuid().ToString());
+ var uploadresponse = await docMigrationS3Client.UploadFileAsync(new UploadFile() { AXISRequestID = attachment.AXISRequestNumber.ToUpper(), SubFolderPath = s3filesubpath, DestinationFileName = destinationfilename, FileStream = emailmessagepdfstream });
+ var fullfileurl = string.Format("{0}/{1}/{2}", SystemSettings.S3_EndPoint, s3filesubpath, destinationfilename);
+ if (uploadresponse.IsSuccessStatusCode)
+ {
+ //INSERT INTO TABLE - FOIMinistryRequestDocuments
+ attachmentsDAL.InsertIntoMinistryRequestDocuments(fullfileurl, string.Format("{0}.pdf",attachment.EmailSubject), attachment.AXISRequestNumber);
+
+ }
+ }
+
+ }
+ }
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/FOIMOD.CFD.DocMigration.BAL.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/FOIMOD.CFD.DocMigration.BAL.csproj
new file mode 100644
index 000000000..05fc1d8ec
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.BAL/FOIMOD.CFD.DocMigration.BAL.csproj
@@ -0,0 +1,20 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/DocumentsDAL.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/DocumentsDAL.cs
new file mode 100644
index 000000000..71ab5e1e5
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/DocumentsDAL.cs
@@ -0,0 +1,181 @@
+using Azure.Core;
+using FOIMOD.CFD.DocMigration.Models.AXISSource;
+using FOIMOD.CFD.DocMigration.Models.Document;
+using Microsoft.Data.SqlClient;
+using Microsoft.Identity.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+
+namespace FOIMOD.CFD.DocMigration.DAL
+{
+
+ public class DocumentsDAL
+ {
+
+ private SqlConnection sqlConnection;
+ public DocumentsDAL(SqlConnection _sqlConnection)
+ {
+ sqlConnection = _sqlConnection;
+ }
+
+ private string correspondencelog = @"SELECT
+
+ R.vcVisibleRequestID
+ , C.vcSubject
+ ,C.sdtMailedDate
+ ,C.vcEmail
+ ,C.vcFromEmail
+ , CAST(C.vcBody as NVARCHAR(max)) as emailbody
+ , STRING_AGG(CAST((C.vcFilePath +' * ' +C.vcFileName) as nvarchar(max)),' | ') as attachments
+
+ FROM tblCorrespondence C JOIN tblRequests R on C.iRequestID = R.iRequestID
+ WHERE R.vcVisibleRequestID in ({0})
+
+ GROUP BY R.vcVisibleRequestID,C.vcSubject,C.sdtMailedDate,C.vcEmail,C.vcFromEmail,CAST(C.vcBody as NVARCHAR(max))";
+
+
+ private string recordsbyrequestid = @"
+ DECLARE @SectionList VARCHAR(MAX);
+ DECLARE @irequestid INT
+ SET @irequestid=(SELECT TOP 1 iRequestID FROM tblRequests WHERE vcVisibleRequestID = '{0}')
+ SET @SectionList = NULL;
+ SELECT
+ @SectionList = COALESCE(@SectionList+':', '')+vcSectionList
+ FROM [dbo].[tblDocumentReviewLog] WHERE iRequestID =@irequestid
+
+ SELECT D.iDocID,D.tiSections,vcFileName as FilePath,D.siFolderID,D.siPageCount ,p.siPageNum FROM tblPages P inner join tblDocuments D on P.iDocID=D.iDocID
+
+ WHERE D.iDocID in(
+ --- Review Log Documents
+ SELECT iDocID FROM [dbo].[tblDocumentReviewLog] WHERE iRequestID = @irequestid
+ union
+ SELECT iDocID FROM tblDocuments d with(nolock) where iDocID IN (SELECT Data FROM [dbo].[AFX_Splitter](@SectionList, ':'))
+ union
+ --- Request Folder Documents
+ select iDocID from tblRedactionLayers where irequestid=@irequestid AND iDeliveryID is NULL
+ )";
+
+ private string getQueryByType(DocumentTypeFromAXIS documentTypeFromAXIS, string requestnumber="")
+ {
+ var query = string.Empty;
+ switch (documentTypeFromAXIS) {
+
+ case DocumentTypeFromAXIS.CorrespondenceLog:
+ query =string.Format(correspondencelog,requestnumber);
+ break;
+ case DocumentTypeFromAXIS.RequestRecords:
+ query = string.Format(recordsbyrequestid, requestnumber);
+ break;
+ default:
+ break;
+
+
+ }
+
+ return query;
+ }
+
+ public List? GetCorrespondenceLogDocuments(string cs_requestnumbers)
+ {
+ List documentToMigrates = null;
+ using (SqlDataAdapter sqlSelectCommand = new(getQueryByType(DocumentTypeFromAXIS.CorrespondenceLog, cs_requestnumbers), sqlConnection))
+ {
+ try
+ {
+ sqlConnection.Open();
+ using DataTable dataTable = new();
+ sqlSelectCommand.Fill(dataTable);
+ if (!dataTable.HasErrors && dataTable.Rows.Count > 0)
+ {
+ documentToMigrates = new();
+ foreach (DataRow row in dataTable.Rows)
+ {
+ documentToMigrates.Add(new DocumentToMigrate()
+ {
+ EmailContent = Convert.ToString(row["emailbody"]),
+ EmailSubject= Convert.ToString(row["vcSubject"]),
+ EmailTo = Convert.ToString(row["vcEmail"]),
+ EmailFrom = Convert.ToString(row["vcFromEmail"]),
+ EmailDate = Convert.ToString(row["sdtMailedDate"]),
+ EmailAttachmentDelimitedString = Convert.ToString(row["attachments"]),
+ AXISRequestNumber = Convert.ToString(row["vcVisibleRequestID"]),
+ });
+
+ }
+ }
+ }
+ catch (SqlException ex)
+ {
+
+ throw ex;
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ finally
+ {
+ sqlConnection.Close();
+ }
+
+ }
+ return documentToMigrates;
+ }
+
+
+ public List? GetRecordsByRequest(string requestnumber)
+ {
+ List documentToMigrates = null;
+ using (SqlDataAdapter sqlSelectCommand = new(getQueryByType(DocumentTypeFromAXIS.RequestRecords,requestnumber), sqlConnection))
+ {
+ try
+ {
+ sqlConnection.Open();
+ using DataTable dataTable = new();
+ sqlSelectCommand.Fill(dataTable);
+ if (!dataTable.HasErrors && dataTable.Rows.Count > 0)
+ {
+ documentToMigrates = new();
+ foreach (DataRow row in dataTable.Rows)
+ {
+ documentToMigrates.Add(new DocumentToMigrate()
+ {
+ IDocID= Convert.ToInt32(row["iDocID"]),
+ PageFilePath = Convert.ToString(row["FilePath"]),
+ SiFolderID = Convert.ToString(row["siFolderID"]),
+ TotalPageCount = Convert.ToString(row["siPageCount"]),
+ PageSequenceNumber = Convert.ToInt32(row["siPageNum"]),
+ AXISRequestNumber = requestnumber.ToUpper(),
+ DocumentType = DocumentTypeFromAXIS.RequestRecords
+ });
+
+ }
+ }
+ }
+ catch (SqlException ex)
+ {
+
+ throw ex;
+ }
+ catch (Exception e)
+ {
+ throw;
+ }
+ finally
+ {
+ sqlConnection.Close();
+ }
+
+ }
+ return documentToMigrates;
+ }
+
+
+
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/FOIMOD.CFD.DocMigration.AXIS.DAL.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/FOIMOD.CFD.DocMigration.AXIS.DAL.csproj
new file mode 100644
index 000000000..943ae8c7a
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.DAL/FOIMOD.CFD.DocMigration.AXIS.DAL.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIFLOWDBUnitTests.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIFLOWDBUnitTests.cs
new file mode 100644
index 000000000..2db64ea08
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIFLOWDBUnitTests.cs
@@ -0,0 +1,37 @@
+using FOIMOD.CFD.DocMigration.Models;
+using Microsoft.Extensions.Configuration;
+using System.Data.Odbc;
+using System.Net;
+using FOIMOD.CFD.DocMigration.FOIFLOW.DAL;
+namespace FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests
+{
+ [TestClass]
+ public class FOIFLOWDBUnitTests
+ {
+
+ [TestInitialize]
+ public void FOIFLOWDBUnitTestInit()
+ {
+ var configurationbuilder = new ConfigurationBuilder()
+ .AddJsonFile($"appsettings.json", true, true)
+ .AddEnvironmentVariables().Build();
+
+ SystemSettings.FOIFLOWConnectionString = configurationbuilder.GetSection("FOIFLOWConfiguration:FOIFLOWConnectionString").Value;
+
+
+
+ }
+
+
+ [TestMethod]
+ public void AttachmentInsertTest()
+ {
+ OdbcConnection connection = new OdbcConnection(SystemSettings.FOIFLOWConnectionString);
+ AttachmentsDAL attachmentsDAL = new AttachmentsDAL(connection);
+ var result = attachmentsDAL.InsertIntoMinistryRequestDocuments("https://unittest", "unittestfile.docx", "CFD-2023-22081302");
+ Assert.IsNotNull(result);
+
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests.csproj
new file mode 100644
index 000000000..766edf4eb
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests.csproj
@@ -0,0 +1,35 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/Usings.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/Usings.cs
new file mode 100644
index 000000000..ab67c7ea9
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/Usings.cs
@@ -0,0 +1 @@
+global using Microsoft.VisualStudio.TestTools.UnitTesting;
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/appsettings.json b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/appsettings.json
new file mode 100644
index 000000000..5749679a0
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.Tests/appsettings.json
@@ -0,0 +1,7 @@
+{
+ "FOIFLOWConfiguration": {
+ "FOIFLOWConnectionString": "DSN=FOIFLOWDBdsn"
+ }
+
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/AttachmentsDAL.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/AttachmentsDAL.cs
new file mode 100644
index 000000000..46e71506c
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/AttachmentsDAL.cs
@@ -0,0 +1,43 @@
+using System.Data;
+using System.Data.Common;
+using System.Data.Odbc;
+
+namespace FOIMOD.CFD.DocMigration.FOIFLOW.DAL
+{
+ public class AttachmentsDAL
+ {
+ private IDbConnection dbConnection;
+ public AttachmentsDAL(IDbConnection _dbConnection)
+ {
+ dbConnection = _dbConnection;
+ }
+
+ public bool InsertIntoMinistryRequestDocuments(string s3filepath, string actualfilename, string axisrequestnumber)
+ {
+ bool result = false;
+ try
+ {
+ dbConnection.Open();
+ var cmdString = @"DO $$ DECLARE requestnumber VARCHAR; BEGIN requestnumber := '{0}' ; INSERT INTO public.""FOIMinistryRequestDocuments"" ( documentpath, created_at, createdby, foiministryrequest_id, foiministryrequestversion_id, filename, isactive, category, version) VALUES ('{1}', NOW(), 'cfdmigration', (SELECT foiministryrequestid FROM public.""FOIMinistryRequests"" WHERE axisrequestid=requestnumber ORDER BY created_at DESC LIMIT 1), (SELECT version FROM public.""FOIMinistryRequests"" WHERE axisrequestid=requestnumber ORDER BY created_at DESC LIMIT 1), '{2}', True, 'applicant', 1); END $$";
+ using (OdbcCommand comm = new OdbcCommand())
+ {
+ comm.Connection = (OdbcConnection)dbConnection;
+ comm.CommandText = string.Format(cmdString,axisrequestnumber,s3filepath,actualfilename);
+ comm.CommandType = CommandType.Text;
+ comm.ExecuteNonQuery();
+ dbConnection.Close();
+ result = true;
+ }
+ }
+ catch (Exception ex) {
+ dbConnection.Close();
+ result = false;
+ throw;
+ }
+ return result;
+ }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.csproj
new file mode 100644
index 000000000..b01aaa0fc
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.FOIFLOW.DAL/FOIMOD.CFD.DocMigration.FOIFLOW.DAL.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISFIle.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISFIle.cs
new file mode 100644
index 000000000..6de9154e8
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISFIle.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FOIMOD.CFD.DocMigration.Models
+{
+ public class AXISFIle
+ {
+ public string FilePathOnServer { get; set; }
+
+ public string FileName { get; set;}
+
+ public string FileExtension { get; set;}
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISSource/AXISDocument.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISSource/AXISDocument.cs
new file mode 100644
index 000000000..4fd236ede
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/AXISSource/AXISDocument.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FOIMOD.CFD.DocMigration.Models.AXISSource
+{
+ public class AXISDocument
+ {
+ public string? AXISRequestNumber { get; set; }
+ public string UNCRootFolder { get; set; }
+
+ public int IDocID { get; set; }
+
+ public string SiFolderID { get; set; }
+
+ public string TotalPageCount { get; set; }
+
+ public DocumentTypeFromAXIS DocumentType { get; set; }
+
+ public string? EmailContent { get; set; }
+
+ public string? EmailDate { get; set; }
+
+ public string? EmailTo { get; set; }
+
+ public string? EmailFrom { get; set; }
+ public string? EmailSubject { get; set; }
+ }
+
+ public enum DocumentTypeFromAXIS
+ {
+ CorrespondenceLog = 0,
+ RequestRecords=1,
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/Document/DocumentToMigrate.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/Document/DocumentToMigrate.cs
new file mode 100644
index 000000000..66c77e564
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/Document/DocumentToMigrate.cs
@@ -0,0 +1,18 @@
+using FOIMOD.CFD.DocMigration.Models.AXISSource;
+
+namespace FOIMOD.CFD.DocMigration.Models.Document
+{
+ public class DocumentToMigrate : AXISDocument
+ {
+ public int PageSequenceNumber { get; set; }
+
+ public string? PageFilePath { get; set; }
+
+ public Stream FileStream { get; set; }
+
+ public bool HasStreamForDocument { get; set; }
+
+ public string? EmailAttachmentDelimitedString { get; set; }
+
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadFile.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadFile.cs
new file mode 100644
index 000000000..61a68c177
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadFile.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FOIMOD.CFD.DocMigration.Models.FOIFLOWDestination
+{
+ public class UploadFile
+ {
+
+ public string SourceFileName { get; set; }
+
+ public string DestinationFileName { get; set; }
+
+ public string AXISRequestID { get; set; }
+
+ public string SubFolderPath { get; set; }
+
+ public UploadType UploadType { get; set; }
+
+ public string S3BucketName { get; set; }
+
+
+
+ public Stream FileStream { get; set; }
+ }
+
+ public enum UploadType
+ {
+ Attachments = 1,
+ Records = 2
+
+ }
+
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadType.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadType.cs
new file mode 100644
index 000000000..61dd923f8
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIFLOWDestination/UploadType.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FOIMOD.CFD.DocMigration.Models.FOIFLOWDestination
+{
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIMOD.CFD.DocMigration.Models.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIMOD.CFD.DocMigration.Models.csproj
new file mode 100644
index 000000000..cfadb03dd
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/FOIMOD.CFD.DocMigration.Models.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/SystemSettings.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/SystemSettings.cs
new file mode 100644
index 000000000..5bca03986
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Models/SystemSettings.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FOIMOD.CFD.DocMigration.Models
+{
+ public static class SystemSettings
+ {
+ public static string S3_AccessKey { get; set; }
+
+ public static string S3_SecretKey { get; set; }
+
+ public static string S3_EndPoint { get; set; }
+
+ public static string AXISConnectionString{ get; set; }
+
+ public static string FOIFLOWConnectionString { get; set; }
+
+ public static string RequestToMigrate { get; set; }
+
+ public static string FileServerRoot { get; set; }
+
+ public static string CorrespondenceLogBaseFolder { get; set; }
+
+ public static string RecordsbaseFolder { get; set; }
+
+ public static string S3_Attachements_BasePath { get; set; }
+
+ public static string AttachmentTag { get; set; }
+
+ public static string S3_Attachements_Bucket { get; set; }
+
+
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/Class1.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/Class1.cs
new file mode 100644
index 000000000..72bb4515c
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/Class1.cs
@@ -0,0 +1,7 @@
+namespace FOIMOD.CFD.DocMigration.S3Uploader
+{
+ public class Class1
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/FOIMOD.CFD.DocMigration.S3Uploader.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/FOIMOD.CFD.DocMigration.S3Uploader.csproj
new file mode 100644
index 000000000..cfadb03dd
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.S3Uploader/FOIMOD.CFD.DocMigration.S3Uploader.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/FOIMOD.CFD.DocMigration.Utils.UnitTests.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/FOIMOD.CFD.DocMigration.Utils.UnitTests.csproj
new file mode 100644
index 000000000..26683b729
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/FOIMOD.CFD.DocMigration.Utils.UnitTests.csproj
@@ -0,0 +1,35 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/S3UploadTest.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/S3UploadTest.cs
new file mode 100644
index 000000000..6fa1682cb
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/S3UploadTest.cs
@@ -0,0 +1,147 @@
+
+
+using Amazon.Runtime;
+using Amazon.S3;
+using FOIMOD.CFD.DocMigration.Models;
+using FOIMOD.CFD.DocMigration.Models.Document;
+using Microsoft.Extensions.Configuration;
+
+namespace FOIMOD.CFD.DocMigration.Utils.UnitTests
+{
+ [TestClass]
+ public class S3UploadTest
+ {
+ public AWSCredentials s3credentials = null;
+ public AmazonS3Config config = null;
+ [TestInitialize]
+ public void S3UploadTestInit()
+ {
+ var configurationbuilder = new ConfigurationBuilder()
+ .AddJsonFile($"appsettings.json", true, true)
+ .AddEnvironmentVariables().Build();
+
+ SystemSettings.S3_AccessKey = configurationbuilder.GetSection("S3Configuration:AWS_accesskey").Value;
+ SystemSettings.S3_SecretKey = configurationbuilder.GetSection("S3Configuration:AWS_secret").Value;
+ SystemSettings.S3_EndPoint = configurationbuilder.GetSection("S3Configuration:AWS_S3_Url").Value;
+
+ s3credentials = new BasicAWSCredentials(SystemSettings.S3_AccessKey, SystemSettings.S3_SecretKey);
+
+ config = new()
+ {
+ ServiceURL = SystemSettings.S3_EndPoint
+
+ };
+ }
+
+
+ [TestMethod]
+ public void S3Upload_UploadFileAsync()
+ {
+ AmazonS3Client amazonS3Client = new AmazonS3Client(s3credentials, config);
+ DocMigrationS3Client docMigrationS3Client = new DocMigrationS3Client(amazonS3Client);
+
+ using var client = new HttpClient();
+ using (FileStream fs = File.Open(Path.Combine(getSourceFolder(), "DOCX1.pdf"), FileMode.Open))
+ {
+ fs.Position = 0;
+ var destinationfilename = string.Format("{0}.pdf", Guid.NewGuid().ToString());
+
+ UploadFile uploadFile = new UploadFile() { AXISRequestID = "TEST-10001-12342", DestinationFileName = destinationfilename, S3BucketName = "test123-protected", SubFolderPath = "test123-protected/Abintest/unittestmigration", UploadType = UploadType.Attachments, SourceFileName = "DOC1.pdf", FileStream = fs };
+ var result = docMigrationS3Client.UploadFileAsync(uploadFile).Result;
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.IsSuccessStatusCode);
+ }
+ }
+
+ [TestMethod]
+ public void PDFMerge_UploadTest()
+ {
+ List pDFDocToMerges = new List();
+ pDFDocToMerges.Add(new DocumentToMigrate() { PageFilePath = Path.Combine(getSourceFolder(), "DOCX1.pdf"), PageSequenceNumber = 3 });
+ pDFDocToMerges.Add(new DocumentToMigrate() { PageFilePath = Path.Combine(getSourceFolder(), "cat1.pdf"), PageSequenceNumber = 2 });
+
+
+ using (DocMigrationPDFStitcher docMigrationPDFStitcher = new DocMigrationPDFStitcher())
+ {
+ using Stream fs = docMigrationPDFStitcher.MergePDFs(pDFDocToMerges);
+
+ AmazonS3Client amazonS3Client = new AmazonS3Client(s3credentials, config);
+
+ DocMigrationS3Client docMigrationS3Client = new DocMigrationS3Client(amazonS3Client);
+
+
+ using var client = new HttpClient();
+
+ fs.Position = 0;
+ var destinationfilename = string.Format("{0}.pdf", Guid.NewGuid().ToString());
+
+ UploadFile uploadFile = new UploadFile() { AXISRequestID = "TEST-10001-12342", DestinationFileName = destinationfilename, S3BucketName = "test123-protected", SubFolderPath = "test123-protected/Abintest/unittestmigration", UploadType = UploadType.Attachments, SourceFileName = "DOC1.pdf", FileStream = fs };
+ var result = docMigrationS3Client.UploadFileAsync(uploadFile).Result;
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.IsSuccessStatusCode);
+
+ }
+ }
+ [TestMethod]
+
+ public void CreatePDF_Test()
+ {
+ AmazonS3Client amazonS3Client = new AmazonS3Client(s3credentials, config);
+ DocMigrationS3Client docMigrationS3Client = new DocMigrationS3Client(amazonS3Client);
+ using (DocMigrationPDFStitcher docMigrationPDFStitcher = new DocMigrationPDFStitcher())
+ {
+ using Stream emaildocstream = docMigrationPDFStitcher.CreatePDFDocument("THIS IS AN EMAIL HTML content
", "My email subject line!!!!", DateTime.Now.AddYears(-10).ToLongDateString(), "abinajik@gmail.com");
+ emaildocstream.Position = 0;
+ var destinationfilename = string.Format("{0}.pdf", Guid.NewGuid().ToString());
+ UploadFile uploadFile = new UploadFile() { AXISRequestID = "TEST-10001-12342", DestinationFileName = destinationfilename, S3BucketName = "test123-protected", SubFolderPath = "test123-protected/Abintest/unittestmigration", UploadType = UploadType.Attachments, SourceFileName = "DOC1.pdf", FileStream = emaildocstream };
+ var result = docMigrationS3Client.UploadFileAsync(uploadFile).Result;
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.IsSuccessStatusCode);
+
+
+ }
+
+ }
+
+
+ [TestMethod]
+ public void MergeStreamwithFileAttachmentsTest()
+ {
+ AmazonS3Client amazonS3Client = new AmazonS3Client(s3credentials, config);
+ DocMigrationS3Client docMigrationS3Client = new DocMigrationS3Client(amazonS3Client);
+ using (DocMigrationPDFStitcher docMigrationPDFStitcher = new DocMigrationPDFStitcher())
+ {
+ using Stream emaildocstream = docMigrationPDFStitcher.CreatePDFDocument("THIS IS AN EMAIL HTML content
", "My email subject line!!!!", DateTime.Now.AddYears(-10).ToLongDateString(), "abinajik@gmail.com");
+ emaildocstream.Position = 0;
+
+
+ List pDFDocToMerges = new List();
+ pDFDocToMerges.Add(new DocumentToMigrate() { PageFilePath = Path.Combine(getSourceFolder(), "DOCX1.pdf"), PageSequenceNumber = 3 });
+ pDFDocToMerges.Add(new DocumentToMigrate() { PageFilePath = Path.Combine(getSourceFolder(), "cat1.pdf"), PageSequenceNumber = 2 });
+ pDFDocToMerges.Add(new DocumentToMigrate() { FileStream = emaildocstream, PageSequenceNumber = 1, HasStreamForDocument = true });
+
+ using Stream fs = docMigrationPDFStitcher.MergePDFs(pDFDocToMerges);
+
+ using var client = new HttpClient();
+
+ fs.Position = 0;
+ var destinationfilename = string.Format("{0}.pdf", Guid.NewGuid().ToString());
+
+ UploadFile uploadFile = new UploadFile() { AXISRequestID = "TEST-10001-12342", DestinationFileName = destinationfilename, S3BucketName = "test123-protected", SubFolderPath = "test123-protected/Abintest/unittestmigration", UploadType = UploadType.Attachments, SourceFileName = "DOC1.pdf", FileStream = fs };
+ var result = docMigrationS3Client.UploadFileAsync(uploadFile).Result;
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result.IsSuccessStatusCode);
+
+
+ }
+ }
+
+
+ private string getSourceFolder()
+ {
+ return "C:\\AOT\\FOI\\Source\\foi-flow\\datamigrations\\FOIMOD.CFD.ConsoleApp.DocMigration\\FOIMOD.CFD.DocMigration.Utils.UnitTests\\samples\\";
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/Usings.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/Usings.cs
new file mode 100644
index 000000000..400371e9c
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/Usings.cs
@@ -0,0 +1,4 @@
+global using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+global using FOIMOD.CFD.DocMigration.Utils;
+global using FOIMOD.CFD.DocMigration.Models.FOIFLOWDestination;
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/appsettings.json b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/appsettings.json
new file mode 100644
index 000000000..9a8817608
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/appsettings.json
@@ -0,0 +1,10 @@
+{
+ "S3Configuration": {
+ "AWS_accesskey": "",
+ "AWS_secret": "",
+ "AWS_S3_Url": ""
+
+ }
+
+
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/DOCX1.pdf b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/DOCX1.pdf
new file mode 100644
index 000000000..31d2528d7
Binary files /dev/null and b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/DOCX1.pdf differ
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/cat1.pdf b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/cat1.pdf
new file mode 100644
index 000000000..1b329ca52
Binary files /dev/null and b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils.UnitTests/samples/cat1.pdf differ
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationPDFStitcher.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationPDFStitcher.cs
new file mode 100644
index 000000000..8ab03f55f
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationPDFStitcher.cs
@@ -0,0 +1,114 @@
+using FOIMOD.CFD.DocMigration.Models;
+using FOIMOD.CFD.DocMigration.Models.Document;
+using PdfSharpCore;
+using PdfSharpCore.Pdf;
+using PdfSharpCore.Pdf.IO;
+using TheArtOfDev.HtmlRenderer.PdfSharp;
+
+namespace FOIMOD.CFD.DocMigration.Utils
+{
+ public class DocMigrationPDFStitcher : IDisposable
+ {
+
+ private Stream mergeddocstream = null;
+ private Stream createemailpdfmemorystream = null;
+ public DocMigrationPDFStitcher()
+ {
+
+ }
+
+ public void Dispose()
+ {
+
+ mergeddocstream.Close();
+ mergeddocstream.Dispose();
+ }
+
+ public Stream MergePDFs(List pdfpages)
+ {
+ var _pdfpages = pdfpages.OrderBy(p => p.PageSequenceNumber).ToArray();
+ using (PdfDocument pdfdocument = new PdfDocument())
+ {
+ foreach (DocumentToMigrate pDFDocToMerge in _pdfpages)
+ {
+ using PdfDocument inputPDFDocument = !pDFDocToMerge.HasStreamForDocument ? PdfReader.Open(pDFDocToMerge.PageFilePath, PdfDocumentOpenMode.Import) : PdfReader.Open(pDFDocToMerge.FileStream, PdfDocumentOpenMode.Import);
+
+ pdfdocument.Version = inputPDFDocument.Version;
+ foreach (PdfPage page in inputPDFDocument.Pages)
+ {
+ pdfdocument.AddPage(page);
+ }
+ }
+ mergeddocstream = new MemoryStream();
+ pdfdocument.Save(mergeddocstream);
+ }
+ return mergeddocstream;
+ }
+
+
+
+
+ public Stream CreatePDFDocument(string emailcontent, string emailsubject, string emaildate, string emailTo,List attachementfiles)
+ {
+ try
+ {
+ string attachmentlist = string.Empty;
+ if (attachementfiles!=null)
+ {
+ attachmentlist += "";
+ foreach (var attachment in attachementfiles)
+ {
+ attachmentlist += string.Format("- {0}
", attachment.FileName);
+ }
+
+ attachmentlist += "
";
+ }
+
+ var htmlofpdf = string.Format(@"
+
+
+ Emailed To |
+ {0} |
+
+
+ Date |
+ {1} |
+
+
+ Subject |
+ {2} |
+
+
+ Attachments |
+
+ {3}
+ |
+
+
+ Message |
+ {4} |
+
+
+
", emailTo, emaildate, emailsubject, attachmentlist,emailcontent);
+
+ using (PdfDocument pdfdocument = new PdfDocument())
+ {
+ PdfGenerator.AddPdfPages(pdfdocument, htmlofpdf, PageSize.A4);
+ createemailpdfmemorystream = new MemoryStream();
+ pdfdocument.Save(createemailpdfmemorystream);
+ }
+ }
+ catch (Exception ex)
+ {
+ createemailpdfmemorystream.Close();
+ createemailpdfmemorystream.Dispose();
+ Console.WriteLine(ex.Message);
+ throw;
+ }
+
+
+ return createemailpdfmemorystream;
+
+ }
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationS3Client.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationS3Client.cs
new file mode 100644
index 000000000..8438d47ce
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/DocMigrationS3Client.cs
@@ -0,0 +1,43 @@
+using Amazon;
+using Amazon.S3;
+using Amazon.S3.Model;
+using FOIMOD.CFD.DocMigration.Models.FOIFLOWDestination;
+
+namespace FOIMOD.CFD.DocMigration.Utils
+{
+ public class DocMigrationS3Client
+ {
+ private readonly IAmazonS3 _s3Client;
+
+ public DocMigrationS3Client(IAmazonS3 s3Client)
+ {
+ _s3Client = s3Client;
+ }
+
+ private string GetPresignedURL(IAmazonS3 s3, string fileName, HttpVerb method)
+ {
+ AWSConfigsS3.UseSignatureVersion4 = true;
+ GetPreSignedUrlRequest request = new()
+ {
+ Key = fileName,
+ Verb = method,
+ Expires = DateTime.Now.AddHours(1),
+ Protocol = Protocol.HTTPS,
+ };
+ return s3.GetPreSignedURL(request);
+ }
+
+ public async Task UploadFileAsync(UploadFile file)
+ {
+ var presignedPutURL = this.GetPresignedURL(_s3Client, string.Format("{0}/{1}",file.SubFolderPath,file.DestinationFileName), HttpVerb.PUT);
+ using var client = new HttpClient();
+ file.FileStream.Position = 0;
+ using (StreamContent strm = new(file.FileStream))
+ {
+ strm.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
+ return await client.PutAsync(presignedPutURL, strm);
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FOIMOD.CFD.DocMigration.Utils.csproj b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FOIMOD.CFD.DocMigration.Utils.csproj
new file mode 100644
index 000000000..c41595220
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FOIMOD.CFD.DocMigration.Utils.csproj
@@ -0,0 +1,19 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FillePathUtils.cs b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FillePathUtils.cs
new file mode 100644
index 000000000..9ed84c456
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ConsoleApp.DocMigration/FOIMOD.CFD.DocMigration.Utils/FillePathUtils.cs
@@ -0,0 +1,42 @@
+using FOIMOD.CFD.DocMigration.Models;
+namespace FOIMOD.CFD.DocMigration.Utils
+{
+ public static class FilePathUtils
+ {
+
+ public static List? GetFileDetailsFromdelimitedstring(string delimitedstring)
+ {
+ List? result = null;
+ if (!string.IsNullOrEmpty(delimitedstring))
+ {
+ string[] files = delimitedstring.Split('|');
+ result = new List();
+ if (files != null && files.Length > 0)
+ {
+
+ foreach (string fileinfodelimited in files)
+ {
+ string[] singlefileinfo = fileinfodelimited.Split('*');
+ if (singlefileinfo != null && singlefileinfo.Length > 0)
+ {
+ result.Add(new AXISFIle() { FileName = singlefileinfo[1], FilePathOnServer = singlefileinfo[0], FileExtension = singlefileinfo[1].Split('.')[1] });
+ }
+
+ }
+ }
+ else if(delimitedstring.IndexOf('*') >0 )
+ {
+ string[] singlefileinfo = delimitedstring.Split('*');
+ if (singlefileinfo != null && singlefileinfo.Length > 0)
+ {
+ result.Add(new AXISFIle() { FileName = singlefileinfo[1], FilePathOnServer = singlefileinfo[0], FileExtension = singlefileinfo[1].Split('.')[1] });
+ }
+ }
+
+ }
+
+ return result;
+
+ }
+ }
+}
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.sln b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.sln
new file mode 100644
index 000000000..10d4cc900
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32228.343
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{159641D6-6404-4A2A-AE62-294DE0FE8301}") = "FOIMOD.CFD.ETL.DataMigration", "FOIMOD.CFD.ETL.DataMigration\FOIMOD.CFD.ETL.DataMigration.dtproj", "{7A8CD9B3-2536-4317-A3F6-A6008408442B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Development|Default = Development|Default
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7A8CD9B3-2536-4317-A3F6-A6008408442B}.Development|Default.ActiveCfg = Development
+ {7A8CD9B3-2536-4317-A3F6-A6008408442B}.Development|Default.Build.0 = Development
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C25DF891-25B3-4F39-B2B2-A9B1FC3BA056}
+ EndGlobalSection
+EndGlobal
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/ApplicantRequestMappings.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/ApplicantRequestMappings.dtsx
new file mode 100644
index 000000000..9f0a03d27
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/ApplicantRequestMappings.dtsx
@@ -0,0 +1,648 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE( @[$Project::foirequestsquery] , "@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Applicants.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Applicants.dtsx
new file mode 100644
index 000000000..7573d7e4a
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Applicants.dtsx
@@ -0,0 +1,364 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ SELECT email,firstname,lastname,middleName,birthDate,businessName, STRING_AGG(CAST(requestid as nvarchar(max)),', ') as requests FROM (
+SELECT
+ requesters.vcEmailID as email,
+
+ requesters.vcFirstName as firstName,
+ requesters.vcLastName as lastName,
+ requesters.vcMiddleName as middleName,
+ requestorfields.CUSTOMFIELD35 as birthDate,
+ requesters.vcCompany as businessName,
+ requests.vcVisibleRequestID as requestid
+
+ FROM
+ tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID
+
+ LEFT OUTER JOIN tblRequesters requesters WITH (NOLOCK) ON requests.iRequesterID = requesters.iRequesterID
+
+ LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON requesters.iRequesterID = requestorfields.IREQUESTERID
+
+ WHERE
+ office.OFFICE_CODE = 'CFD' AND requests.iRequestStatusID NOT IN ( SELECT iRequestStatusID FROM tblRequestStatuses WHERE vcRequestStatus in ('Closed','Canceled','CWithheld'))
+
+ ) AS T
+
+ GROUP BY email,firstname,lastname,middleName,birthDate,businessName
+ $Project::applicantsqlquery
+ 1252
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DataSourceViewID
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/CFDApplicantsMigration.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/CFDApplicantsMigration.dtsx
new file mode 100644
index 000000000..6d923521f
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/CFDApplicantsMigration.dtsx
@@ -0,0 +1,604 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+ "public"."FOIRequestApplicants"
+ 1000
+ 1000
+ 32768
+ 0
+ 1252
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+ $Project::applicantsqlquery
+ 1252
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DataSourceViewID
+
+
+ TableInfoObjectType
+ Table
+
+
+
+
+
+
+ DataSourceViewID
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIApplicants.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIApplicants.dtsx
new file mode 100644
index 000000000..eb4ed7987
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIApplicants.dtsx
@@ -0,0 +1,660 @@
+
+
+ 8
+
+
+ SELECT firstname,lastname,middleName,requesterid,CONVERT(varchar(MAX),'01-01-1900',120) as birthDate,businessName, GETDATE() as createdAt, 'cfdmigration' as createdBy,STRING_AGG(CAST(requestid as nvarchar(max)),', ') as requests ,MainApplicant FROM ( SELECT requesters.vcEmailID as email, requesters.iRequesterID as requesterid, requesters.vcFirstName as firstName, requesters.vcLastName as lastName, requesters.vcMiddleName as middleName, requestorfields.CUSTOMFIELD35 as birthDate, requesters.vcCompany as businessName, requests.vcVisibleRequestID as requestid, 1 as MainApplicant FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesters requesters WITH (NOLOCK) ON requests.iRequesterID = requesters.iRequesterID LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON requesters.iRequesterID = requestorfields.IREQUESTERID WHERE office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') AND requests.vcVisibleRequestID IN ('CFD-2021-12651','CFD-2023-30193') UNION ALL SELECT onbehalf.vcEmailID as email, onbehalf.iRequesterID as requesterid, onbehalf.vcFirstName as firstName, onbehalf.vcLastName as lastName, onbehalf.vcMiddleName as middleName, requestorfields.CUSTOMFIELD35 as birthDate, onbehalf.vcCompany as businessName, requests.vcVisibleRequestID as requestid, 0 as MainApplicant FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesters onbehalf WITH (NOLOCK) ON requests.iOnBehalfOf = onbehalf.iRequesterID LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON onbehalf.iRequesterID = requestorfields.IREQUESTERID WHERE office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') AND requests.vcVisibleRequestID IN ('CFD-2021-12651','CFD-2023-30193') and onbehalf.vcFirstName is NOT NULL ) AS T GROUP BY T.email,T.requesterid,T.firstname,T.lastname,T.middleName,T.requesterid,T.birthDate,T.businessName,T.MainApplicant ORDER BY T.firstname ASC
+
+
+
+
+
+
+
+
+
+
+ "public"."FOIRequestApplicants"
+ 1000
+ 1000
+ 32768
+ 0
+ 1252
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+ User::applicantqueryparam
+ 1252
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DataSourceViewID
+
+
+ TableInfoObjectType
+ Table
+
+
+
+
+
+
+ DataSourceViewID
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.database b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.database
new file mode 100644
index 000000000..03617d442
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.database
@@ -0,0 +1,13 @@
+
+ FOIMOD.CFD.ETL.DataMigration
+ FOIMOD.CFD.ETL.DataMigration
+ 0001-01-01T00:00:00Z
+ 0001-01-01T00:00:00Z
+ 0001-01-01T00:00:00Z
+ Unprocessed
+ 0001-01-01T00:00:00Z
+
+ Default
+ Unchanged
+
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj
new file mode 100644
index 000000000..b1b17101b
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj
@@ -0,0 +1,450 @@
+
+
+ Project
+ 15.0.2000.180
+ 9.0.1.0
+ $base64$PFNvdXJjZUNvbnRyb2xJbmZvIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmRkbDI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yIiB4bWxuczpkZGwyXzI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDAzL2VuZ2luZS8yLzIiIHhtbG5zOmRkbDEwMF8xMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDA4L2VuZ2luZS8xMDAvMTAwIiB4bWxuczpkZGwyMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAiIHhtbG5zOmRkbDIwMF8yMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEwL2VuZ2luZS8yMDAvMjAwIiB4bWxuczpkZGwzMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAiIHhtbG5zOmRkbDMwMF8zMDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDExL2VuZ2luZS8zMDAvMzAwIiB4bWxuczpkZGw0MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAiIHhtbG5zOmRkbDQwMF80MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEyL2VuZ2luZS80MDAvNDAwIiB4bWxuczpkZGw1MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAiIHhtbG5zOmRkbDUwMF81MDA9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vYW5hbHlzaXNzZXJ2aWNlcy8yMDEzL2VuZ2luZS81MDAvNTAwIiB4bWxuczpkd2Q9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vRGF0YVdhcmVob3VzZS9EZXNpZ25lci8xLjAiPg0KICA8RW5hYmxlZD5mYWxzZTwvRW5hYmxlZD4NCiAgPFByb2plY3ROYW1lPjwvUHJvamVjdE5hbWU+DQogIDxBdXhQYXRoPjwvQXV4UGF0aD4NCiAgPExvY2FsUGF0aD48L0xvY2FsUGF0aD4NCiAgPFByb3ZpZGVyPjwvUHJvdmlkZXI+DQo8L1NvdXJjZUNvbnRyb2xJbmZvPg==
+
+ FOIMOD.CFD.ETL.DataMigration.database
+ FOIMOD.CFD.ETL.DataMigration.database
+
+
+
+
+
+
+
+ {46811412-61ea-42c7-abaa-4731edc96c50}
+ FOIMOD.CFD.ETL.DataMigration
+ 1
+ 0
+ 0
+
+
+ 2023-07-26T15:32:55.9483598-07:00
+ IDIR\AANTON_A
+ WALTZ
+
+
+ AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAAxNy8IYXQUikuyRHfwqVBQAAAAACAAAAAAADZgAAwAAAABAAAAA0WsvjZzR76ItQUOsvjFPxAAAAAASAAACgAAAAEAAAAB6WqM0e3bF/ytcNb+00Vj+IAAAAbsMnsLvWvIvySgXvXtMoEl3R8G67DLCHIBL3kR/GH2MUqZpdgHf+GA623nwneseHO7/k1WEwNtQKoj3RJSAzVR2kKCBf/WuRo7OE7YHbUgHk4tAJ5+pg9H5AVaFycQMdmyhXf3aH5TbvKirS4dBijjsR1DVko71vw8v5SeKsbxBGdvk7myw8hBQAAABx9sgy9GQ3TLvYi2NH3xvLCs5wfg==
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ Data Source=IXIAS\CIRMOTST , 1435;Initial Catalog=ATIPITEST;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 1
+ 9
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 5
+ 9
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ ATIPITEST
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ IXIAS\CIRMOTST , 1435
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ Dsn=PostgreSQLFOIFLOW;
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ false
+ 3
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 18
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 18
+
+
+
+
+
+
+ {6B1FFF75-7F3F-438B-9C8E-FB5B50CBB326}
+ FOIRequests
+ 1
+ 0
+ 36
+
+
+ {2215EF75-9178-4019-A65C-548BCB848EB3}
+ 8
+
+
+ 1
+
+
+
+
+
+ {2A065F0D-C74A-4625-A968-B48E416F3285}
+ Package1
+ 1
+ 0
+ 49
+
+
+ {959785B0-CF2F-46BD-B18F-F60A275D3B69}
+ 8
+
+
+ 1
+
+
+
+
+
+ {6E7CF625-11EC-4619-ACB0-07C38F8367D2}
+ ApplicantRequestMappings
+ 1
+ 0
+ 64
+
+
+ {E74162C7-CB89-4371-98DA-C1E08F361BDA}
+ 8
+
+
+ 1
+
+
+
+
+
+ {F6BAB303-5655-462B-B60C-AC54FEE248D6}
+ FOIRequestContactInformation
+ 1
+ 0
+ 71
+
+
+ {D8F0E47C-87C0-4352-B380-D36429864036}
+ 8
+
+
+ 1
+
+
+
+
+
+ {E6F29F2B-5CB1-454D-94EE-7BC34A459E92}
+ FOIApplicants
+ 1
+ 0
+ 8
+
+
+ {47713682-1301-458C-9DB7-6F85D70A1E2F}
+ 8
+
+
+ 1
+
+
+
+
+
+ {D96776B2-BF23-4689-A2D2-9CCA44C5DBFC}
+ FOIRequestExtensions
+ 1
+ 0
+ 29
+
+
+ {8B50757C-EDCD-463C-B927-303DF6880258}
+ 8
+
+
+ 1
+
+
+
+
+
+ {15AF90B9-2E9B-4CE0-89C9-DB31763C6BDF}
+ FOIMinistryRequestSubjectCodes
+ 1
+ 0
+ 15
+
+
+ {FECD18DF-8B81-43E0-812E-6647F05F22D6}
+ 8
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ Development
+
+ bin
+
+
+
+
+ SQLServer2019
+ false
+
+
+
+
+
+
+
+ LastModifiedTime
+ LastModifiedTime
+ 2023-07-28T21:54:01.1505194Z
+
+
+
+
+
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj.user b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj.user
new file mode 100644
index 000000000..fb5695dc9
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration.dtproj.user
@@ -0,0 +1,26 @@
+
+
+
+
+ Development
+
+
+ false
+
+
+ false
+
+
+ false
+ true
+
+
+ LastModifiedTime
+ LastModifiedTime
+ 2023-07-28T21:54:01.1525191Z
+
+
+
+
+
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequestSubjectCodes.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequestSubjectCodes.dtsx
new file mode 100644
index 000000000..e92f7f5a1
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequestSubjectCodes.dtsx
@@ -0,0 +1,232 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE( @[$Project::foiministryrequestsubjectcodes] , "@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequests.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequests.dtsx
new file mode 100644
index 000000000..6c371fb3b
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIMinistryRequests.dtsx
@@ -0,0 +1,576 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE(@[$Project::foiministryrequestquery], "@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestContactInformation.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestContactInformation.dtsx
new file mode 100644
index 000000000..2d2bd8da5
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestContactInformation.dtsx
@@ -0,0 +1,1499 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE( @[$Project::foirequestcontactinformation] , "@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestExtensions.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestExtensions.dtsx
new file mode 100644
index 000000000..85fecdb56
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequestExtensions.dtsx
@@ -0,0 +1,1110 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE( @[$Project::foirequestextensionsquery] , "@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+]]>
+
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_251772c76dbb4c2db05ebd5d32199133.Properties.Settings.get_Default():ST_251772c76dbb4c2db05ebd5d32199133.Properties.Sett" +
+ "ings")]
+
+namespace ST_251772c76dbb4c2db05ebd5d32199133.Properties {
+
+
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ private static Settings defaultInstance = new Settings();
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}]]>
+
+ /// ScriptMain is the entry point class of the script. Do not change the name, attributes,
+ /// or parent of this class.
+ ///
+ [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
+ public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
+ {
+ #region Help: Using Integration Services variables and parameters in a script
+ /* To use a variable in this script, first ensure that the variable has been added to
+ * either the list contained in the ReadOnlyVariables property or the list contained in
+ * the ReadWriteVariables property of this script task, according to whether or not your
+ * code needs to write to the variable. To add the variable, save this script, close this instance of
+ * Visual Studio, and update the ReadOnlyVariables and
+ * ReadWriteVariables properties in the Script Transformation Editor window.
+ * To use a parameter in this script, follow the same steps. Parameters are always read-only.
+ *
+ * Example of reading from a variable:
+ * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value;
+ *
+ * Example of writing to a variable:
+ * Dts.Variables["User::myStringVariable"].Value = "new value";
+ *
+ * Example of reading from a package parameter:
+ * int batchId = (int) Dts.Variables["$Package::batchId"].Value;
+ *
+ * Example of reading from a project parameter:
+ * int batchId = (int) Dts.Variables["$Project::batchId"].Value;
+ *
+ * Example of reading from a sensitive project parameter:
+ * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue();
+ * */
+
+ #endregion
+
+ #region Help: Firing Integration Services events from a script
+ /* This script task can fire events for logging purposes.
+ *
+ * Example of firing an error event:
+ * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0);
+ *
+ * Example of firing an information event:
+ * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain)
+ *
+ * Example of firing a warning event:
+ * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0);
+ * */
+ #endregion
+
+ #region Help: Using Integration Services connection managers in a script
+ /* Some types of connection managers can be used in this script task. See the topic
+ * "Working with Connection Managers Programatically" for details.
+ *
+ * Example of using an ADO.Net connection manager:
+ * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction);
+ * SqlConnection myADONETConnection = (SqlConnection)rawConnection;
+ * //Use the connection in some code here, then release the connection
+ * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection);
+ *
+ * Example of using a File connection manager
+ * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction);
+ * string filePath = (string)rawConnection;
+ * //Use the connection in some code here, then release the connection
+ * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection);
+ * */
+ #endregion
+
+
+ ///
+ /// This method is called when this script task executes in the control flow.
+ /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
+ /// To open Help, press F1.
+ ///
+ public void Main()
+ {
+ // TODO: Add your code here
+ // Access the SSIS variable
+ string reason = Dts.Variables["User::reason"].Value.ToString();
+ // Apply conditional checks and assign new values
+
+ switch (reason)
+ {
+ case "OIPC - Applicant Consent":
+ Dts.Variables["User::reason"].Value = "6";
+ break;
+
+ case "OIPC - Consultation":
+ Dts.Variables["User::reason"].Value = "7";
+ break;
+
+ case "OIPC - Fair and Reasonable to do so":
+ Dts.Variables["User::reason"].Value = "11";
+ break;
+
+ case "OIPC - Further Detail from Applicant Needed":
+ Dts.Variables["User::reason"].Value = "8";
+ break;
+
+ case "OIPC - Large Volume and/or Volume of Search":
+ Dts.Variables["User::reason"].Value = "9";
+ break;
+
+ case "OIPC - Large Volume and/or Volume of Search and Consultation":
+ Dts.Variables["User::reason"].Value = "10";
+ break;
+
+ case "PB - Applicant Consent":
+ Dts.Variables["User::reason"].Value = "1";
+ break;
+
+ case "PB - Consultation":
+ Dts.Variables["User::reason"].Value = "2";
+ break;
+
+ case "PB - Further Detail from Applicant Needed":
+ Dts.Variables["User::reason"].Value = "3";
+ break;
+
+ case "PB - Large Volume and/or Volume of Search":
+ Dts.Variables["User::reason"].Value = "4";
+ break;
+
+ case "PB - Large Volume and/or Volume of Search and Consultation":
+ Dts.Variables["User::reason"].Value = "5";
+ break;
+
+ default:
+ // If none of the conditions match, you can set a default value
+ Dts.Variables["User::reason"].Value = "0";
+ break;
+ }
+
+ // Access the SSIS variable
+ string status = Dts.Variables["User::status"].Value.ToString();
+
+ // Apply conditional checks and assign new values
+ switch (status)
+ {
+ case "N":
+ Dts.Variables["User::status"].Value = "1";
+ break;
+
+ case "A":
+ Dts.Variables["User::status"].Value = "2";
+ break;
+
+ case "D":
+ Dts.Variables["User::status"].Value = "3";
+ break;
+
+ default:
+ // If none of the conditions match, you can set a default value
+ Dts.Variables["User::status"].Value = "0";
+ break;
+ }
+
+ Dts.TaskResult = (int)ScriptResults.Success;
+ }
+
+ #region ScriptResults declaration
+ ///
+ /// This enum provides a convenient shorthand within the scope of this class for setting the
+ /// result of the script.
+ ///
+ /// This code was generated automatically.
+ ///
+ enum ScriptResults
+ {
+ Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
+ Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
+ };
+ #endregion
+
+ }
+}]]>
+
+
+
+ msBuild
+ ST_251772c76dbb4c2db05ebd5d32199133
+ ST_251772c76dbb4c2db05ebd5d32199133
+ {BB0EE068-327D-42A4-81E2-BFAD0A3D7849}
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+
+ {30D016F9-3734-4E33-A861-5E7D899E18F3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {78c3f5a7-d913-4fc6-a916-5960b0a7b495}
+ Library
+ Properties
+ ST_251772c76dbb4c2db05ebd5d32199133
+ ST_251772c76dbb4c2db05ebd5d32199133
+ v4.7
+ 512
+ true
+
+
+
+ true
+ full
+ false
+ .\bin\Debug\
+ false
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+
+ false
+ true
+ .\bin\Release\
+ false
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Code
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SSIS_ST150
+
+
+
+
+]]>
+
+
+
+
+
+
+]]>
+
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_251772c76dbb4c2db05ebd5d32199133.Properties.Resources.get_ResourceManager():System.Resources.Resou" +
+ "rceManager")]
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_251772c76dbb4c2db05ebd5d32199133.Properties.Resources.get_Culture():System.Globalization.CultureIn" +
+ "fo")]
+[assembly: global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope="member", Target="ST_251772c76dbb4c2db05ebd5d32199133.Properties.Resources.set_Culture(System.Globalization.CultureInfo" +
+ "):Void")]
+
+namespace ST_251772c76dbb4c2db05ebd5d32199133.Properties {
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if ((resourceMan == null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ST_251772c76dbb4c2db05ebd5d32199133.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}]]>
+ TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
+ZGUuDQ0KJAAAAAAAAABQRQAATAEDACh3ymQAAAAAAAAAAOAAIiALATAAABgAAAAIAAAAAAAACjYA
+AAAgAAAAQAAAAAAAEAAgAAAAAgAABAAAAAAAAAAGAAAAAAAAAACAAAAAAgAAAAAAAAMAYIUAABAA
+ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAALg1AABPAAAAAEAAAHgEAAAAAAAAAAAAAAAAAAAA
+AAAAAGAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAEBYAAAAgAAAAGAAAAAIA
+AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAHgEAAAAQAAAAAYAAAAaAAAAAAAAAAAAAAAAAABAAABA
+LnJlbG9jAAAMAAAAAGAAAAACAAAAIAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADs
+NQAAAAAAAEgAAAACAAUAICUAAOAPAAABAAAAAAAAAAA1AAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAABMwAgAkBAAAAQAAEQIoEAAACm8RAAAKcgEAAHBvEgAACm8T
+AAAKbxQAAAoKBigKAAAGDAggAS2ifDVJCCC1tWFGNRsIIBODox07UwEAAAggtbVhRjsJAQAAONsC
+AAAIICNmg1A7IwEAAAggcsoGVzuFAAAACCABLaJ8O48AAAA4tQIAAAggWDP6rzUjCCDM0yWNO7YA
+AAAIIHJJbZg7gQAAAAggWDP6ry46OIoCAAAIIAzRx+s7vQAAAAggx/uw9y4NCCCs6Xb6Lm44agIA
+AAZyGwAAcCgVAAAKOtcAAAA4VQIAAAZyTQAAcCgVAAAKOuYAAAA4QAIAAAZydQAAcCgVAAAKOvUA
+AAA4KwIAAAZyvQAAcCgVAAAKOgQBAAA4FgIAAAZyFQEAcCgVAAAKOhMBAAA4AQIAAAZybQEAcCgV
+AAAKOiIBAAA47AEAAAZy5wEAcCgVAAAKOjEBAAA41wEAAAZyFQIAcCgVAAAKOkABAAA4wgEAAAZy
+OQIAcCgVAAAKOk8BAAA4rQEAAAZyjQIAcCgVAAAKOlsBAAA4mAEAAAZy4QIAcCgVAAAKOmcBAAA4
+gwEAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJXAwBwbxYAAAo4fgEAAAIoEAAACm8RAAAKcgEAAHBv
+EgAACnJbAwBwbxYAAAo4WgEAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJfAwBwbxYAAAo4NgEAAAIo
+EAAACm8RAAAKcgEAAHBvEgAACnJlAwBwbxYAAAo4EgEAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJp
+AwBwbxYAAAo47gAAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJtAwBwbxYAAAo4ygAAAAIoEAAACm8R
+AAAKcgEAAHBvEgAACnJzAwBwbxYAAAo4pgAAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJ3AwBwbxYA
+AAo4ggAAAAIoEAAACm8RAAAKcgEAAHBvEgAACnJ7AwBwbxYAAAorYQIoEAAACm8RAAAKcgEAAHBv
+EgAACnJ/AwBwbxYAAAorQAIoEAAACm8RAAAKcgEAAHBvEgAACnKDAwBwbxYAAAorHwIoEAAACm8R
+AAAKcgEAAHBvEgAACnKHAwBwbxYAAAoCKBAAAApvEQAACnKLAwBwbxIAAApvEwAACm8UAAAKCwdy
+pQMAcCgVAAAKLRwHcqkDAHAoFQAACi0wB3KtAwBwKBUAAAotRCtjAigQAAAKbxEAAApyiwMAcG8S
+AAAKcnMDAHBvFgAACithAigQAAAKbxEAAApyiwMAcG8SAAAKcncDAHBvFgAACitAAigQAAAKbxEA
+AApyiwMAcG8SAAAKcnsDAHBvFgAACisfAigQAAAKbxEAAApyiwMAcG8SAAAKcocDAHBvFgAACgIo
+EAAAChZvFwAACioeAigYAAAKKh4CKBkAAAoqrn4BAAAELR5ysQMAcNADAAACKBoAAApvGwAACnMc
+AAAKgAEAAAR+AQAABCoafgIAAAQqHgKAAgAABCoafgMAAAQqHgIoHQAACioucwgAAAaAAwAABCoA
+ABMwAgAsAAAAAgAAEQIsJyDFnRyBChYLKxQCB28eAAAKBmEgkwEAAVoKBxdYCwcCbx8AAAoy4wYq
+QlNKQgEAAQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAABAQAACN+AABwBAAAuAUAACNTdHJp
+bmdzAAAAACgKAAAkBAAAI1VTAEwOAAAQAAAAI0dVSUQAAABcDgAAhAEAACNCbG9iAAAAAAAAAAIA
+AAFXHaIBCQMAAAD6ATMAFgAAAQAAAB4AAAAGAAAABgAAAAoAAAACAAAAHwAAAAIAAAARAAAAAgAA
+AAIAAAADAAAABAAAAAEAAAAEAAAAAQAAAAEAAAAAALsDAQAAAAAABgBEAosEBgDTAosEBgCQAXgE
+DwD/BAAABgC9ATkEBgAnAjkEBgAIAjkEBgC6AjkEBgBkAjkEBgB9AjkEBgDUATkEBgDvAQsDCgCY
+AmoDCgAPAWoDBgDzA+wDBgBzAXgEBgB8BewDBgBbBKsEBgBLBCQEDgBDAaUDDgCkAaUDDgArAQ8E
+BgBYAYsECgCTA2oDEgBBBboAEgCNALoABgAnA+wDBgDaAOwDBgCWAOwDBgCiBTkEAAAAACUAAAAA
+AAEAAQABABAABAQBADkAAQABAAAAEACyBA4FRQABAAMAAAEQAEsFDgVZAAMABwAAAQAALgAAAEUA
+BAAKAAMBAABuBQAAPQAEAAsAEQD4A4EAEQD/AIUAEQB9AIkABgZsAI0AVoBeBZAAVoDfAJAAUCAA
+AAAAhgAKBAYAAQCAJAAAAACGGGsEBgABAIgkAAAAAIMYawQGAAEAkCQAAAAAkwhXBJQAAQC8JAAA
+AACTCOcAmQABAMMkAAAAAJMI8wCeAAEAyyQAAAAAlgiDBaQAAgDSJAAAAACGGGsEBgACANokAAAA
+AJEYcQSpAAIA6CQAAAAAkwAuA60AAgAAAAEABQMAAAEAegUJAGsEAQARAGsEBgAZAGsECgApAGsE
+EAAxAGsEEAA5AGsEEABBAGsEEABJAGsEEABRAGsEEABZAGsEEABhAGsEEABpAGsEBgCBAGsEBgCp
+AGsEFQC5AGsEBgBxAGYFIQDBAD0FJgDJAOMDKwDRAPECMQCJACUDNQDZAKsFOQDRAPsCPwDBAI8F
+AQBxAGsEBgCJAGsEBgDhAKgARADhAJ4FSwCRAGsEUACxAGsEBgDZAFQFXADZAEADYQAIABQAdwAI
+ABgAfAApAHMA6QAuAAsAwQAuABMAygAuABsA6QAuACMA8gAuACsAGwEuADMAGwEuADsAGwEuAEMA
+8gAuAEsAIQEuAFMAGwEuAFsAOAFDAGMAfABJAHMA6QBhAHsAfABjAGsAfACjAHsAfAAbAFcAAwAB
+AAQAAwAAAFsEsgAAAAcBtwAAAIcFvAACAAQAAwACAAUABQABAAYABQACAAcABwAEgAAAAQAAAKYh
+GzwAAAAAAAABAAAABAAAAAAAAAAAAAAAZQB0AAAAAAAPAAAAAAAAAAAAAABuAEsDAAAAAAQAAAAA
+AAAAAAAAAGUA7AMAAAAADwAAAAAAAAAAAAAAbgBNAAAAAAAAAAAAAQAAALwEAAAGAAIAAAAAU1Rf
+MjUxNzcyYzc2ZGJiNGMyZGIwNWViZDVkMzIxOTkxMzMAPE1vZHVsZT4APFByaXZhdGVJbXBsZW1l
+bnRhdGlvbkRldGFpbHM+AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERUUwB2YWx1ZV9fAG1z
+Y29ybGliAGRlZmF1bHRJbnN0YW5jZQBWYXJpYWJsZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBl
+RnJvbUhhbmRsZQBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lAFR5cGUARmFpbHVyZQBn
+ZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQByZXNvdXJjZUN1bHR1cmUAVlNUQVJUU2NyaXB0T2JqZWN0
+TW9kZWxCYXNlAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNlAEVkaXRvckJyb3dzYWJsZVN0YXRlAENv
+bXBpbGVyR2VuZXJhdGVkQXR0cmlidXRlAERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUARGVi
+dWdnYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0
+dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0dHJpYnV0ZQBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1
+dGUAQXNzZW1ibHlDb25maWd1cmF0aW9uQXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRpb25BdHRy
+aWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRy
+aWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAU1NJU1NjcmlwdFRhc2tFbnRyeVBvaW50
+QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0
+dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVlAHZhbHVlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25p
+bmcAVG9TdHJpbmcAQ29tcHV0ZVN0cmluZ0hhc2gAZ2V0X0xlbmd0aABNaWNyb3NvZnQuU3FsU2Vy
+dmVyLlNjcmlwdFRhc2sATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuVGFza3MuU2NyaXB0VGFzawBT
+Y3JpcHRPYmplY3RNb2RlbABTeXN0ZW0uQ29tcG9uZW50TW9kZWwAU1RfMjUxNzcyYzc2ZGJiNGMy
+ZGIwNWViZDVkMzIxOTkxMzMuZGxsAGdldF9JdGVtAFN5c3RlbQBFbnVtAHJlc291cmNlTWFuAFNj
+cmlwdE1haW4AU3lzdGVtLkNvbmZpZ3VyYXRpb24AU3lzdGVtLkdsb2JhbGl6YXRpb24AU3lzdGVt
+LlJlZmxlY3Rpb24AQ3VsdHVyZUluZm8AZ2V0X1Jlc291cmNlTWFuYWdlcgAuY3RvcgAuY2N0b3IA
+U3lzdGVtLkRpYWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAU3lzdGVt
+LlJlc291cmNlcwBTVF8yNTE3NzJjNzZkYmI0YzJkYjA1ZWJkNWQzMjE5OTEzMy5Qcm9wZXJ0aWVz
+LlJlc291cmNlcy5yZXNvdXJjZXMARGVidWdnaW5nTW9kZXMAU1RfMjUxNzcyYzc2ZGJiNGMyZGIw
+NWViZDVkMzIxOTkxMzMuUHJvcGVydGllcwBnZXRfVmFyaWFibGVzAFNldHRpbmdzAGdldF9DaGFy
+cwBTdWNjZXNzAGdldF9EdHMAU2NyaXB0UmVzdWx0cwBPYmplY3QAZ2V0X0RlZmF1bHQAc2V0X1Rh
+c2tSZXN1bHQAZ2V0X0Fzc2VtYmx5AG9wX0VxdWFsaXR5AAAAGVUAcwBlAHIAOgA6AHIAZQBhAHMA
+bwBuAAAxTwBJAFAAQwAgAC0AIABBAHAAcABsAGkAYwBhAG4AdAAgAEMAbwBuAHMAZQBuAHQAASdP
+AEkAUABDACAALQAgAEMAbwBuAHMAdQBsAHQAYQB0AGkAbwBuAAFHTwBJAFAAQwAgAC0AIABGAGEA
+aQByACAAYQBuAGQAIABSAGUAYQBzAG8AbgBhAGIAbABlACAAdABvACAAZABvACAAcwBvAAFXTwBJ
+AFAAQwAgAC0AIABGAHUAcgB0AGgAZQByACAARABlAHQAYQBpAGwAIABmAHIAbwBtACAAQQBwAHAA
+bABpAGMAYQBuAHQAIABOAGUAZQBkAGUAZAABV08ASQBQAEMAIAAtACAATABhAHIAZwBlACAAVgBv
+AGwAdQBtAGUAIABhAG4AZAAvAG8AcgAgAFYAbwBsAHUAbQBlACAAbwBmACAAUwBlAGEAcgBjAGgA
+AXlPAEkAUABDACAALQAgAEwAYQByAGcAZQAgAFYAbwBsAHUAbQBlACAAYQBuAGQALwBvAHIAIABW
+AG8AbAB1AG0AZQAgAG8AZgAgAFMAZQBhAHIAYwBoACAAYQBuAGQAIABDAG8AbgBzAHUAbAB0AGEA
+dABpAG8AbgABLVAAQgAgAC0AIABBAHAAcABsAGkAYwBhAG4AdAAgAEMAbwBuAHMAZQBuAHQAASNQ
+AEIAIAAtACAAQwBvAG4AcwB1AGwAdABhAHQAaQBvAG4AAVNQAEIAIAAtACAARgB1AHIAdABoAGUA
+cgAgAEQAZQB0AGEAaQBsACAAZgByAG8AbQAgAEEAcABwAGwAaQBjAGEAbgB0ACAATgBlAGUAZABl
+AGQAAVNQAEIAIAAtACAATABhAHIAZwBlACAAVgBvAGwAdQBtAGUAIABhAG4AZAAvAG8AcgAgAFYA
+bwBsAHUAbQBlACAAbwBmACAAUwBlAGEAcgBjAGgAAXVQAEIAIAAtACAATABhAHIAZwBlACAAVgBv
+AGwAdQBtAGUAIABhAG4AZAAvAG8AcgAgAFYAbwBsAHUAbQBlACAAbwBmACAAUwBlAGEAcgBjAGgA
+IABhAG4AZAAgAEMAbwBuAHMAdQBsAHQAYQB0AGkAbwBuAAEDNgAAAzcAAAUxADEAAAM4AAADOQAA
+BTEAMAAAAzEAAAMyAAADMwAAAzQAAAM1AAADMAAAGVUAcwBlAHIAOgA6AHMAdABhAHQAdQBzAAAD
+TgAAA0EAAANEAABxUwBUAF8AMgA1ADEANwA3ADIAYwA3ADYAZABiAGIANABjADIAZABiADAANQBl
+AGIAZAA1AGQAMwAyADEAOQA5ADEAMwAzAC4AUAByAG8AcABlAHIAdABpAGUAcwAuAFIAZQBzAG8A
+dQByAGMAZQBzAAAAOwZzzwYld0KcWSYggKlkZgAEIAEBCAMgAAEFIAEBEREEIAEBDgUgAQERUQUH
+Aw4OCQQgABJhBCAAEmUFIAESaRwDIAAcAyAADgUAAgIODgQgAQEcBgABEnERdQQgABJ5BiACAQ4S
+eQQHAgkIBCABAwgDIAAICLd6XFYZNOCJCImEXc2AgMyRBAAAAAAEAQAAAAMGEkkDBhJNAwYSEAIG
+CAMGERgEAAASSQQAABJNBQABARJNBAAAEhADAAABBAABCQ4ECAASSQQIABJNBAgAEhAIAQAIAAAA
+AAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBCAEAAgAAAAAAKAEAI1NUXzI1MTc3MmM3
+NmRiYjRjMmRiMDVlYmQ1ZDMyMTk5MTMzAAAFAQAAAAAWAQARQ29weXJpZ2h0IEAgIDIwMjMAAEkB
+ABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuNwEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUSLk5F
+VCBGcmFtZXdvcmsgNC43AAC0AAAAzsrvvgEAAACRAAAAbFN5c3RlbS5SZXNvdXJjZXMuUmVzb3Vy
+Y2VSZWFkZXIsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVi
+bGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OSNTeXN0ZW0uUmVzb3VyY2VzLlJ1bnRpbWVSZXNv
+dXJjZVNldAIAAAAAAAAAAAAAAFBBRFBBRFC0AAAA4DUAAAAAAAAAAAAA+jUAAAAgAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAOw1AAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8l
+ACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAEAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgA
+AABYQAAAGgQAAAAAAAAAAAAAGgQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAA
+AL0E7/4AAAEAAAABABs8piEAAAEAGzymIT8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAA
+AQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAA
+AAAAAACwBHoDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAFYDAAABADAAMAAwADAA
+MAA0AGIAMAAAABoAAQABAEMAbwBtAG0AZQBuAHQAcwAAAAAAAAAiAAEAAQBDAG8AbQBwAGEAbgB5
+AE4AYQBtAGUAAAAAAAAAAABwACQAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAA
+UwBUAF8AMgA1ADEANwA3ADIAYwA3ADYAZABiAGIANABjADIAZABiADAANQBlAGIAZAA1AGQAMwAy
+ADEAOQA5ADEAMwAzAAAAPgAPAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAuADgA
+NgAxADQALgAxADUAMwA4ADcAAAAAAHAAKAABAEkAbgB0AGUAcgBuAGEAbABOAGEAbQBlAAAAUwBU
+AF8AMgA1ADEANwA3ADIAYwA3ADYAZABiAGIANABjADIAZABiADAANQBlAGIAZAA1AGQAMwAyADEA
+OQA5ADEAMwAzAC4AZABsAGwAAABIABIAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAABD
+AG8AcAB5AHIAaQBnAGgAdAAgAEAAIAAgADIAMAAyADMAAAAqAAEAAQBMAGUAZwBhAGwAVAByAGEA
+ZABlAG0AYQByAGsAcwAAAAAAAAAAAHgAKAABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBt
+AGUAAABTAFQAXwAyADUAMQA3ADcAMgBjADcANgBkAGIAYgA0AGMAMgBkAGIAMAA1AGUAYgBkADUA
+ZAAzADIAMQA5ADkAMQAzADMALgBkAGwAbAAAAGgAJAABAFAAcgBvAGQAdQBjAHQATgBhAG0AZQAA
+AAAAUwBUAF8AMgA1ADEANwA3ADIAYwA3ADYAZABiAGIANABjADIAZABiADAANQBlAGIAZAA1AGQA
+MwAyADEAOQA5ADEAMwAzAAAAQgAPAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAu
+ADAALgA4ADYAMQA0AC4AMQA1ADMAOAA3AAAAAABGAA8AAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUA
+cgBzAGkAbwBuAAAAMQAuADAALgA4ADYAMQA0AC4AMQA1ADMAOAA3AAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAADAAAAAw2AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequests.dtsx b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequests.dtsx
new file mode 100644
index 000000000..cbd3779dd
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/FOIRequests.dtsx
@@ -0,0 +1,368 @@
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE( @[$Project::foirequestsquery] ,"@requestids", @[$Project::requestidstomigrate] )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/IXIAS_CIRMOTST , 1435.ATIPITEST.conmgr b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/IXIAS_CIRMOTST , 1435.ATIPITEST.conmgr
new file mode 100644
index 000000000..50afb1bbe
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/IXIAS_CIRMOTST , 1435.ATIPITEST.conmgr
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/PostgreSQLFOIFLOW.conmgr b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/PostgreSQLFOIFLOW.conmgr
new file mode 100644
index 000000000..759192ac1
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/PostgreSQLFOIFLOW.conmgr
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Project.params b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Project.params
new file mode 100644
index 000000000..4d9e8eddd
--- /dev/null
+++ b/datamigrations/FOIMOD.CFD.ETL.DataMigration/FOIMOD.CFD.ETL.DataMigration/Project.params
@@ -0,0 +1,150 @@
+
+
+
+
+ {ed0ced49-9631-4b81-8877-2fbb3b5a9c50}
+
+
+ 0
+ 0
+ 0
+ SELECT firstname,lastname,middleName,requesterid,CONVERT(varchar(MAX),'01-01-1900',120) as birthDate,businessName, GETDATE() as createdAt, 'cfdmigration' as createdBy,STRING_AGG(CAST(requestid as nvarchar(max)),', ') as requests ,MainApplicant FROM ( SELECT requesters.vcEmailID as email, requesters.iRequesterID as requesterid, requesters.vcFirstName as firstName, requesters.vcLastName as lastName, requesters.vcMiddleName as middleName, requestorfields.CUSTOMFIELD35 as birthDate, requesters.vcCompany as businessName, requests.vcVisibleRequestID as requestid, 1 as MainApplicant FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesters requesters WITH (NOLOCK) ON requests.iRequesterID = requesters.iRequesterID LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON requesters.iRequesterID = requestorfields.IREQUESTERID WHERE office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') AND requests.vcVisibleRequestID IN (@requestids) UNION ALL SELECT onbehalf.vcEmailID as email, onbehalf.iRequesterID as requesterid, onbehalf.vcFirstName as firstName, onbehalf.vcLastName as lastName, onbehalf.vcMiddleName as middleName, requestorfields.CUSTOMFIELD35 as birthDate, onbehalf.vcCompany as businessName, requests.vcVisibleRequestID as requestid, 0 as MainApplicant FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesters onbehalf WITH (NOLOCK) ON requests.iOnBehalfOf = onbehalf.iRequesterID LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON onbehalf.iRequesterID = requestorfields.IREQUESTERID WHERE office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') AND requests.vcVisibleRequestID IN (@requestids) and onbehalf.vcFirstName is NOT NULL ) AS T GROUP BY T.email,T.requesterid,T.firstname,T.lastname,T.middleName,T.requesterid,T.birthDate,T.businessName,T.MainApplicant ORDER BY T.firstname ASC
+ 18
+
+
+
+
+ {c1ff4bfe-2ac1-4abf-81a3-c236db112364}
+
+
+ 0
+ 0
+ 0
+ SELECT (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = requestTypes.iLabelID and terminology.tiLocaleID = 1) as requestType, convert(varchar, requests.sdtRequestedDate,120) as receivedDate, requests.vcDescription as requestdescription, convert(varchar,requests.sdtRqtDescFromdate,120) as reqDescriptionFromDate, convert(varchar,requests.sdtRqtDescTodate,120) as reqDescriptionToDate, (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = deliveryModes.iLabelID and terminology.tiLocaleID = 1) as deliveryMode, (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = receivedModes.iLabelID and terminology.tiLocaleID = 1) as receivedMode, requesterTypes.vcDescription as category, requests.vcVisibleRequestID as filenumber FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesterTypes requesterTypes WITH (NOLOCK) ON requests.tiRequesterCategoryID = requesterTypes.tiRequesterTypeID LEFT OUTER JOIN tblRequestStatuses requeststatuses WITH (NOLOCK) on requests.irequeststatusid = requeststatuses.irequeststatusid LEFT OUTER JOIN tblReceivedModes receivedModes WITH (NOLOCK) ON requests.tiReceivedType = receivedModes.tiReceivedModeID LEFT OUTER JOIN tblDeliveryModes deliveryModes WITH (NOLOCK) ON requests.tiDeliveryType = deliveryModes.tiDeliveryModeID LEFT OUTER JOIN tblRequestTypes requestTypes WITH (NOLOCK) ON requests.tiRequestTypeID = requestTypes.tiRequestTypeID WHERE vcVisibleRequestID IN (@requestids) AND office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') GROUP BY requests.vcVisibleRequestID,requests.vcRequestStatus,requeststatuses.vcRequestStatus,requests.sdtReceivedDate, requests.sdtTargetDate, requests.sdtOriginalTargetDate, requests.vcDescription, requests.sdtRqtDescFromdate, requests.sdtRqtDescTodate, requests.sdtRequestedDate, office.OFFICE_CODE, requesterTypes.vcDescription, receivedModes.iLabelID, deliveryModes.iLabelID, requests.iRequestID, requestTypes.iLabelID, requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID
+ 18
+
+
+
+
+ {62e916d5-5bd9-44a8-8b86-1809f18e5780}
+
+
+ 0
+ 0
+ 0
+ SELECT requests.vcVisibleRequestID as filenumber, requests.vcDescription as requestdescription, convert(varchar,requests.sdtRqtDescFromdate,120) as reqDescriptionFromDate, convert(varchar,requests.sdtRqtDescTodate,120) as reqDescriptionToDate, convert(varchar, requests.sdtReceivedDate,120) as requestProcessStart, convert(varchar,requests.sdtTargetDate,120) as dueDate, convert(varchar, (SELECT TOP 1 cfr.sdtDueDate FROM tblRequestForDocuments cfr WITH (NOLOCK) INNER JOIN tblProgramOffices programoffice WITH (NOLOCK) ON programoffice.tiProgramOfficeID = cfr.tiProgramOfficeID WHERE requests.iRequestID = cfr.iRequestID AND requests.tiOfficeID = programoffice.tiOfficeID AND office.OFFICE_ID = programoffice.tiOfficeID AND cfr.sdtDueDate IS NOT NULL ORDER BY cfr.sdtDueDate DESC),120) as cfrDueDate, convert(varchar,sum(distinct case when requests.IREQUESTID = reviewlog.IREQUESTID and reviewlog.IDOCID = documents.IDOCID then documents.SIPAGECOUNT when requests.IREQUESTID = redaction.IREQUESTID and redaction.IDOCID = ldocuments.IDOCID then ldocuments.SIPAGECOUNT else 0 end),120) as requestPageCount , requests.vcRequestStatus, CONVERT(VARCHAR(MAX),(SELECT CONCAT('[',STRING_AGG( CONCAT('{"', destin_vcVisibleRequestID, '":"', ministry, '"}'),','),']') AS linkedRequests FROM( SELECT DISTINCT destin.vcVisibleRequestID AS destin_vcVisibleRequestID, office.OFFICE_CODE AS ministry FROM tblRequests origin JOIN tblRequestLinks link ON(origin.IREQUESTID = link.iRequestIDOrigin OR origin.IREQUESTID = link.iRequestIDDestin) JOIN tblRequests destin ON(link.iRequestIDOrigin = destin.IREQUESTID OR link.iRequestIDDestin = destin.IREQUESTID) JOIN EC_OFFICE office ON destin.tiOfficeID = office.OFFICE_ID WHERE origin.vcVisibleRequestID = requests.vcVisibleRequestID AND destin.vcVisibleRequestID != requests.vcVisibleRequestID ) AS destination_table),120) AS linkedRequests FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequestStatuses requeststatuses WITH (NOLOCK) on requests.irequeststatusid = requeststatuses.irequeststatusid LEFT OUTER JOIN dbo.TBLdocumentreviewlog reviewlog WITH (NOLOCK) ON requests.IREQUESTID = reviewlog.IREQUESTID LEFT OUTER JOIN dbo.TBLRedactionlayers redaction WITH (NOLOCK) ON requests.IREQUESTID = redaction.IREQUESTID LEFT OUTER JOIN dbo.TBLDOCUMENTS documents WITH (NOLOCK) ON reviewlog.IDOCID = documents.IDOCID LEFT OUTER JOIN dbo.TBLDOCUMENTS ldocuments WITH (NOLOCK) ON redaction.IDOCID = ldocuments.IDOCID WHERE vcVisibleRequestID IN (@requestids) AND office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') GROUP BY requests.vcVisibleRequestID,requests.vcRequestStatus,requeststatuses.vcRequestStatus,requests.sdtReceivedDate, requests.sdtTargetDate, requests.sdtOriginalTargetDate, requests.vcDescription, requests.sdtRqtDescFromdate, requests.sdtRqtDescTodate, requests.sdtRequestedDate, office.OFFICE_CODE, requests.iRequestID, requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID,requests.vcRequestStatus
+ 18
+
+
+
+
+ {c8ef50d0-65c0-4b92-98d4-698f3276f13b}
+
+
+ 0
+ 0
+ 0
+ SELECT loc.vcTerminology AS reason, reqextn.cApprovedStatus AS [status], convert(varchar, reqextn.sdtExtendedDate,120) AS extendedduedate, convert(varchar,reqextn.siExtensionDays) AS extensiondays, convert(varchar, reqextn.dtApprovedDate,120) AS decisiondate,req.vcVisibleRequestID as requestid FROM tblRequests req WITH (NOLOCK) INNER JOIN tblRequestExtensions reqextn WITH (NOLOCK) ON req.iRequestID = reqextn.iRequestID AND req.vcVisibleRequestID in (@requestids) INNER JOIN tblExtensions extn WITH (NOLOCK) ON reqextn.tiExtension = extn.tiExtension LEFT OUTER JOIN tblTerminologyLookup loc WITH (NOLOCK) ON loc.iLabelID = extn.iLabelID AND loc.tiLocaleID = 1;
+ 18
+
+
+
+
+ {9e7edcc7-6ea5-4055-a767-fb256bb43c54}
+
+
+ 0
+ 0
+ 0
+ SELECT email,address1,address2, city,zipcode,work1,work2,mobile,home,country,province, STRING_AGG(CAST(requestid as nvarchar(max)),', ') as requests FROM (SELECT 'test@test1.com' as email,requesters.vcAddress1 as address1, requesters.vcAddress2 as address2, requesters.vcCity as city, requesters.vcZipCode as zipcode, requesters.vcWork1 as work1, requesters.vcwork2 as work2, requesters.vcMobile as mobile,requesters.vcHome as home, (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = countries.iLabelID and terminology.tiLocaleID = 1) as country, (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = states.iLabelID and terminology.tiLocaleID = 1) as province, requests.vcVisibleRequestID as requestid FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID LEFT OUTER JOIN tblRequesters requesters WITH (NOLOCK) ON requests.iRequesterID = requesters.iRequesterID LEFT OUTER JOIN tblCountries countries WITH (NOLOCK) ON requesters.siCountryID = countries.siCountryID LEFT OUTER JOIN tblStates states WITH (NOLOCK) ON requesters.siStateID = states.siStateID LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON requesters.iRequesterID = requestorfields.IREQUESTERID WHERE office.OFFICE_CODE = 'CFD' AND requests.vcRequestStatus NOT IN ('Closed') ) AS T WHERE requestid in (@requestids) GROUP BY T.email,T.address1,T.address2, T.city,T.zipcode,T.work1,T.work2,T.mobile,T.home, T.country,T.province
+ 18
+
+
+
+
+ {76cefc53-141a-4628-a42b-8d28087b43ab}
+
+
+ 0
+ 0
+ 0
+ 'CFD-2021-12651','CFD-2023-30193'
+ 18
+
+
+
+
+ {e20fa8c2-6427-496b-ae8b-0ecab48b1687}
+
+
+ 0
+ 0
+ 0
+ SELECT vcVisibleRequestID , REPLACE(requestfields.CUSTOMFIELD33, CHAR(160), ' ') as subjectCode FROM tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN dbo.TBLREQUESTCUSTOMFIELDS requestfields WITH (NOLOCK) ON requests.iRequestID = requestfields.iRequestID WHERE requests.vcVisibleRequestID in (@requestids) GROUP BY requests.vcVisibleRequestID, REPLACE(requestfields.CUSTOMFIELD33, CHAR(160), ' ');
+ 18
+
+
+
\ No newline at end of file
diff --git a/datamigrations/basequeries/FOIMinistryrequests.sql b/datamigrations/basequeries/FOIMinistryrequests.sql
new file mode 100644
index 000000000..8a8678d96
--- /dev/null
+++ b/datamigrations/basequeries/FOIMinistryrequests.sql
@@ -0,0 +1,38 @@
+
+
+SELECT
+ requests.vcVisibleRequestID as filenumber,
+ requests.vcDescription as requestdescription,
+ convert(varchar,requests.sdtRqtDescFromdate,120) as reqDescriptionFromDate,
+ convert(varchar,requests.sdtRqtDescTodate,120) as reqDescriptionToDate,
+ convert(varchar, requests.sdtReceivedDate,120) as requestProcessStart,
+ convert(varchar,requests.sdtTargetDate,120) as dueDate,
+ convert(varchar, (SELECT TOP 1 cfr.sdtDueDate FROM tblRequestForDocuments cfr WITH (NOLOCK)
+ INNER JOIN tblProgramOffices programoffice WITH (NOLOCK) ON programoffice.tiProgramOfficeID = cfr.tiProgramOfficeID
+ WHERE requests.iRequestID = cfr.iRequestID
+ AND requests.tiOfficeID = programoffice.tiOfficeID
+ AND office.OFFICE_ID = programoffice.tiOfficeID
+ AND cfr.sdtDueDate IS NOT NULL
+ ORDER BY cfr.sdtDueDate DESC),120) as cfrDueDate,
+ convert(varchar,sum(distinct case when requests.IREQUESTID = reviewlog.IREQUESTID and reviewlog.IDOCID = documents.IDOCID then documents.SIPAGECOUNT
+ when requests.IREQUESTID = redaction.IREQUESTID and redaction.IDOCID = ldocuments.IDOCID then ldocuments.SIPAGECOUNT
+ else 0 end),120) as requestPageCount
+ FROM
+ tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID
+ LEFT OUTER JOIN tblRequestStatuses requeststatuses WITH (NOLOCK) on requests.irequeststatusid = requeststatuses.irequeststatusid
+ LEFT OUTER JOIN dbo.TBLdocumentreviewlog reviewlog WITH (NOLOCK) ON requests.IREQUESTID = reviewlog.IREQUESTID
+
+ LEFT OUTER JOIN dbo.TBLRedactionlayers redaction WITH (NOLOCK) ON requests.IREQUESTID = redaction.IREQUESTID
+ LEFT OUTER JOIN dbo.TBLDOCUMENTS documents WITH (NOLOCK) ON reviewlog.IDOCID = documents.IDOCID
+ LEFT OUTER JOIN dbo.TBLDOCUMENTS ldocuments WITH (NOLOCK) ON redaction.IDOCID = ldocuments.IDOCID
+ WHERE
+ vcVisibleRequestID IN ('CFD-2022-20261', 'CFD-2021-14313','CFD-2021-12866' , 'CFD-2021-12905', 'CFD-2021-12651') AND
+
+ office.OFFICE_CODE = 'CFD'
+
+ AND requests.vcRequestStatus NOT IN ('Closed')
+ GROUP BY requests.vcVisibleRequestID,requests.vcRequestStatus,requeststatuses.vcRequestStatus,requests.sdtReceivedDate, requests.sdtTargetDate, requests.sdtOriginalTargetDate, requests.vcDescription,
+ requests.sdtRqtDescFromdate, requests.sdtRqtDescTodate, requests.sdtRequestedDate, office.OFFICE_CODE,
+
+ requests.iRequestID,
+ requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID
\ No newline at end of file
diff --git a/datamigrations/basequeries/FOIRequests.sql b/datamigrations/basequeries/FOIRequests.sql
new file mode 100644
index 000000000..1ce5fbede
--- /dev/null
+++ b/datamigrations/basequeries/FOIRequests.sql
@@ -0,0 +1,49 @@
+--DECLARE @vcVisibleRequestID VARCHAR(MAX)
+--SET @vcVisibleRequestID = 'CFD-2021-12651','CFD-2021-12905'
+
+SELECT
+ (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = requestTypes.iLabelID and terminology.tiLocaleID = 1) as requestType,
+ requests.sdtReceivedDate as requestProcessStart,
+ requests.vcDescription as requestdescription,
+ requests.sdtRqtDescFromdate as reqDescriptionFromDate,
+ requests.sdtRqtDescTodate as reqDescriptionToDate,
+ (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = deliveryModes.iLabelID and terminology.tiLocaleID = 1) as deliveryMode,
+ (SELECT terminology.vcTerminology from tblTerminologyLookup terminology WHERE terminology.iLabelID = receivedModes.iLabelID and terminology.tiLocaleID = 1) as receivedMode,
+ requesterTypes.vcDescription as category,
+ requests.vcVisibleRequestID as filenumber,
+
+ requests.sdtTargetDate as dueDate,
+ requests.sdtOriginalTargetDate as originalDueDate,
+ requests.vcRequestStatus,
+ requeststatuses.vcRequestStatus as _requeststatus,
+ (SELECT TOP 1 cfr.sdtDueDate FROM tblRequestForDocuments cfr WITH (NOLOCK)
+ INNER JOIN tblProgramOffices programoffice WITH (NOLOCK) ON programoffice.tiProgramOfficeID = cfr.tiProgramOfficeID
+ WHERE requests.iRequestID = cfr.iRequestID
+ AND requests.tiOfficeID = programoffice.tiOfficeID
+ AND office.OFFICE_ID = programoffice.tiOfficeID
+ AND cfr.sdtDueDate IS NOT NULL
+ ORDER BY cfr.sdtDueDate DESC) as cfrDueDate,
+ requests.sdtRequestedDate as receivedDate,
+ requests.sdtRequestedDate as receivedDateUF
+
+ FROM
+ tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID
+ LEFT OUTER JOIN tblRequesterTypes requesterTypes WITH (NOLOCK) ON requests.tiRequesterCategoryID = requesterTypes.tiRequesterTypeID
+ LEFT OUTER JOIN tblRequestStatuses requeststatuses WITH (NOLOCK) on requests.irequeststatusid = requeststatuses.irequeststatusid
+ LEFT OUTER JOIN tblReceivedModes receivedModes WITH (NOLOCK) ON requests.tiReceivedType = receivedModes.tiReceivedModeID
+ LEFT OUTER JOIN tblDeliveryModes deliveryModes WITH (NOLOCK) ON requests.tiDeliveryType = deliveryModes.tiDeliveryModeID
+
+ LEFT OUTER JOIN tblRequestTypes requestTypes WITH (NOLOCK) ON requests.tiRequestTypeID = requestTypes.tiRequestTypeID
+ LEFT OUTER JOIN dbo.TBLdocumentreviewlog reviewlog WITH (NOLOCK) ON requests.IREQUESTID = reviewlog.IREQUESTID
+
+ WHERE
+ vcVisibleRequestID IN ('CFD-2022-20261', 'CFD-2021-14313','CFD-2021-12866' , 'CFD-2021-12905', 'CFD-2021-12651') AND
+ --vcVisibleRequestID IN ('CFD-2019-92736') AND
+ office.OFFICE_CODE = 'CFD'
+
+ AND requests.vcRequestStatus NOT IN ('Closed')
+ GROUP BY requests.vcVisibleRequestID,requests.vcRequestStatus,requeststatuses.vcRequestStatus,requests.sdtReceivedDate, requests.sdtTargetDate, requests.sdtOriginalTargetDate, requests.vcDescription,
+ requests.sdtRqtDescFromdate, requests.sdtRqtDescTodate, requests.sdtRequestedDate, office.OFFICE_CODE, requesterTypes.vcDescription,
+ receivedModes.iLabelID, deliveryModes.iLabelID,
+ requests.iRequestID,
+ requestTypes.iLabelID, requests.vcVisibleRequestID, requests.tiOfficeID, office.OFFICE_ID
\ No newline at end of file
diff --git a/datamigrations/basequeries/applicants.sql b/datamigrations/basequeries/applicants.sql
new file mode 100644
index 000000000..0769a3217
--- /dev/null
+++ b/datamigrations/basequeries/applicants.sql
@@ -0,0 +1,32 @@
+
+SELECT email,firstname,lastname,middleName,birthDate,businessName, STRING_AGG(CAST(requestid as nvarchar(max)),', ') as requests FROM (
+SELECT
+ requesters.vcEmailID as email,
+
+ requesters.vcFirstName as firstName,
+ requesters.vcLastName as lastName,
+ requesters.vcMiddleName as middleName,
+ requestorfields.CUSTOMFIELD35 as birthDate,
+ requesters.vcCompany as businessName,
+ requests.vcVisibleRequestID as requestid
+
+ FROM
+ tblRequests requests WITH (NOLOCK) LEFT OUTER JOIN EC_OFFICE office WITH (NOLOCK) ON requests.tiOfficeID = office.OFFICE_ID
+
+ LEFT OUTER JOIN tblRequesters requesters WITH (NOLOCK) ON requests.iRequesterID = requesters.iRequesterID
+
+ LEFT OUTER JOIN dbo.TBLREQUESTERCUSTOMFIELDS requestorfields WITH (NOLOCK) ON requesters.iRequesterID = requestorfields.IREQUESTERID
+
+ WHERE
+ office.OFFICE_CODE = 'CFD' AND requests.iRequestStatusID NOT IN ( SELECT iRequestStatusID FROM tblRequestStatuses WHERE vcRequestStatus in ('Closed'))
+
+ ) AS T
+
+ --WHERE requestid in ('CFD-2021-12651')
+
+ GROUP BY email,firstname,lastname,middleName,birthDate,businessName
+
+
+
+
+
\ No newline at end of file
diff --git a/forms-flow-web/public/index.html b/forms-flow-web/public/index.html
index 4a5e866ee..b5c3fe1e9 100644
--- a/forms-flow-web/public/index.html
+++ b/forms-flow-web/public/index.html
@@ -1,27 +1,6 @@
-
(dispatch) => {
payload: data,
});
};
+export const setFOIPersonalDivisionsAndSections = (data) => dispatch => {
+ dispatch({
+ type:FOI_ACTION_CONSTANTS.FOI_PERSONAL_DIVISIONS_SECTIONS,
+ payload:data
+ })
+}
+export const setFOIPersonalSections = (data) => dispatch => {
+ dispatch({
+ type:FOI_ACTION_CONSTANTS.FOI_PERSONAL_SECTIONS,
+ payload:data
+ })
+}
export const setFOIWatcherList = (data) => (dispatch) => {
dispatch({
type: FOI_ACTION_CONSTANTS.FOI_WATCHER_LIST,
diff --git a/forms-flow-web/src/apiManager/endpoints/index.js b/forms-flow-web/src/apiManager/endpoints/index.js
index 42eba95a5..111ee62ec 100644
--- a/forms-flow-web/src/apiManager/endpoints/index.js
+++ b/forms-flow-web/src/apiManager/endpoints/index.js
@@ -29,6 +29,9 @@ const API = {
FOI_RAW_REQUEST_DESCRIPTION: `${FOI_BASE_API_URL}/api/foiaudit/rawrequest//description`,
FOI_MINISTRY_REQUEST_DESCRIPTION: `${FOI_BASE_API_URL}/api/foiaudit/ministryrequest//description`,
FOI_MINISTRY_DIVISIONALSTAGES: `${FOI_BASE_API_URL}/api/foiflow/divisions/`,
+ FOI_PERSONAL_DIVISIONS_SECTIONS: `${FOI_BASE_API_URL}/api/foiflow/divisions//true/divisionsandsections`,
+ FOI_PERSONAL_SECTIONS: `${FOI_BASE_API_URL}/api/foiflow/divisions//true/sections`,
+ FOI_PERSONAL_DIVISIONS: `${FOI_BASE_API_URL}/api/foiflow/divisions//true/divisions`,
FOI_POST_RAW_REQUEST_WATCHERS: `${FOI_BASE_API_URL}/api/foiwatcher/rawrequest`,
FOI_GET_RAW_REQUEST_WATCHERS: `${FOI_BASE_API_URL}/api/foiwatcher/rawrequest/`,
FOI_POST_MINISTRY_REQUEST_WATCHERS: `${FOI_BASE_API_URL}/api/foiwatcher/ministryrequest`,
@@ -56,6 +59,8 @@ const API = {
FOI_RENAME_ATTACHMENTS_RAWREQUEST: `${FOI_BASE_API_URL}/api/foidocument/rawrequest//documentid//rename`,
FOI_RENAME_ATTACHMENTS_MINISTRYREQUEST: `${FOI_BASE_API_URL}/api/foidocument/ministryrequest//documentid//rename`,
+ FOI_RECLASSIFY_CATEGORY_RAWREQUEST: `${FOI_BASE_API_URL}/api/foidocument/rawrequest//documentid//reclassify`,
+ FOI_RECLASSIFY_CATEGORY_MINISTRYREQUEST: `${FOI_BASE_API_URL}/api/foidocument/ministryrequest//documentid//reclassify`,
FOI_REPLACE_ATTACHMENT_RAWREQUEST: `${FOI_BASE_API_URL}/api/foidocument/rawrequest//documentid//replace`,
FOI_REPLACE_ATTACHMENT_MINISTRYREQUEST: `${FOI_BASE_API_URL}/api/foidocument/ministryrequest//documentid//replace`,
FOI_DELETE_ATTACHMENT_RAWREQUEST: `${FOI_BASE_API_URL}/api/foidocument/rawrequest//documentid//delete`,
diff --git a/forms-flow-web/src/apiManager/services/FOI/foiAttachmentServices.js b/forms-flow-web/src/apiManager/services/FOI/foiAttachmentServices.js
index 80f24dda9..759157276 100644
--- a/forms-flow-web/src/apiManager/services/FOI/foiAttachmentServices.js
+++ b/forms-flow-web/src/apiManager/services/FOI/foiAttachmentServices.js
@@ -96,6 +96,34 @@ import {
};
};
+ export const saveNewCategory = (newCategory, documentId, requestId, ministryId, ...rest) => {
+ let apiUrl = "";
+ if (ministryId != null) {
+ apiUrl = replaceUrl(
+ API.FOI_RECLASSIFY_CATEGORY_MINISTRYREQUEST + '',
+ "", ministryId);
+ }
+ else {
+ apiUrl = replaceUrl(
+ API.FOI_RECLASSIFY_CATEGORY_RAWREQUEST,
+ "",
+ requestId
+ );
+ }
+ apiUrl = replaceUrl(
+ apiUrl,
+ "",
+ documentId
+ );
+
+ return (dispatch) => {
+ const data = {
+ category: newCategory
+ };
+ postAttachment(dispatch, apiUrl, data, requestId, ministryId, "Error in reclassifying the file", rest);
+ };
+ };
+
export const replaceFOIRequestAttachment = (requestId, ministryId, documentId, data, ...rest) => {
let apiUrl = "";
if (ministryId && documentId) {
diff --git a/forms-flow-web/src/apiManager/services/FOI/foiMasterDataServices.js b/forms-flow-web/src/apiManager/services/FOI/foiMasterDataServices.js
index 7f602ceaa..b8eb8d385 100644
--- a/forms-flow-web/src/apiManager/services/FOI/foiMasterDataServices.js
+++ b/forms-flow-web/src/apiManager/services/FOI/foiMasterDataServices.js
@@ -16,6 +16,8 @@ import {
setFOIDeliveryModeList,
setFOIReceivedModeList,
setFOIMinistryDivisionalStages,
+ setFOIPersonalDivisionsAndSections,
+ setFOIPersonalSections,
setClosingReasons,
setFOISubjectCodeList,
setCommentTagListLoader,
@@ -361,6 +363,81 @@ import {
};
};
+ export const fetchFOIPersonalDivisionsAndSections = (bcgovcode) => {
+ switch(bcgovcode) {
+ case "MCF":
+ const apiUrlMCF = replaceUrl(API.FOI_PERSONAL_SECTIONS, "", bcgovcode);
+ return (dispatch) => {
+ httpGETRequest(apiUrlMCF, {}, UserService.getToken())
+ .then((res) => {
+ if (res.data) {
+ const foiPersonalSections = res.data;
+ dispatch(setFOIPersonalSections({}));
+ dispatch(setFOIPersonalSections(foiPersonalSections));
+ dispatch(setFOILoader(false));
+ } else {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, res);
+ dispatch(serviceActionError(res));
+ dispatch(setFOILoader(false));
+ }
+ })
+ .catch((error) => {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, error);
+ dispatch(serviceActionError(error));
+ dispatch(setFOILoader(false));
+ });
+ };
+ case "MSD":
+ const apiUrlMSD = replaceUrl(API.FOI_PERSONAL_DIVISIONS_SECTIONS, "", bcgovcode);
+ return (dispatch) => {
+ httpGETRequest(apiUrlMSD, {}, UserService.getToken())
+ .then((res) => {
+ if (res.data) {
+ const foiPersonalDivisionsAndSections = res.data;
+ dispatch(setFOIPersonalDivisionsAndSections({}));
+ dispatch(setFOIPersonalDivisionsAndSections(foiPersonalDivisionsAndSections));
+ dispatch(setFOILoader(false));
+ } else {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, res);
+ dispatch(serviceActionError(res));
+ dispatch(setFOILoader(false));
+ }
+ })
+ .catch((error) => {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, error);
+ dispatch(serviceActionError(error));
+ dispatch(setFOILoader(false));
+ });
+ };
+ default:
+ break;
+ }
+ };
+
+ export const fetchFOIPersonalDivisions = (bcgovcode) => {
+ const apiUrl = replaceUrl(API.FOI_PERSONAL_DIVISIONS, "", bcgovcode);
+ return (dispatch) => {
+ httpGETRequest(apiUrl, {}, UserService.getToken())
+ .then((res) => {
+ if (res.data) {
+ const foiMinistryDivisionalStages = res.data;
+ dispatch(setFOIMinistryDivisionalStages({}));
+ dispatch(setFOIMinistryDivisionalStages(foiMinistryDivisionalStages));
+ dispatch(setFOILoader(false));
+ } else {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, res);
+ dispatch(serviceActionError(res));
+ dispatch(setFOILoader(false));
+ }
+ })
+ .catch((error) => {
+ console.log(`Error while fetching ministry(${bcgovcode}) divisional stage master data`, error);
+ dispatch(serviceActionError(error));
+ dispatch(setFOILoader(false));
+ });
+ };
+ };
+
export const fetchFOISubjectCodeList = () => {
const firstSubjectCode = { "subjectcodeid": 0, "name": "Select Subject Code (if required)" };
return (dispatch) => {
diff --git a/forms-flow-web/src/components/FOI/Admin/Divisions/CreateDivisionModal.jsx b/forms-flow-web/src/components/FOI/Admin/Divisions/CreateDivisionModal.jsx
index 5106c0978..1bf8b2dd1 100644
--- a/forms-flow-web/src/components/FOI/Admin/Divisions/CreateDivisionModal.jsx
+++ b/forms-flow-web/src/components/FOI/Admin/Divisions/CreateDivisionModal.jsx
@@ -8,6 +8,8 @@ import InputLabel from "@material-ui/core/InputLabel";
import MenuItem from "@material-ui/core/MenuItem";
import Select from "@material-ui/core/Select";
import TextField from "@material-ui/core/TextField";
+import FormControlLabel from '@mui/material/FormControlLabel';
+import Checkbox from '@mui/material/Checkbox';
const CreateDivisionModal = ({
@@ -16,7 +18,13 @@ const CreateDivisionModal = ({
showModal,
closeModal,
}) => {
- const [division, setDivision] = useState(null);
+ const [division, setDivision] = useState({
+ name: "",
+ programareaid: null,
+ issection: false,
+ parentid: null,
+ specifictopersonalrequests: false,
+ });
let programAreas = useSelector((state) => state.foiRequests.foiAdminProgramAreaList);
const handleSave = () => {
@@ -29,7 +37,13 @@ const CreateDivisionModal = ({
};
useEffect(() => {
- setDivision(null);
+ setDivision({
+ name: "",
+ programareaid: null,
+ issection: false,
+ parentid: null,
+ specifictopersonalrequests: false,
+ });
}, [showModal]);
return (
@@ -39,6 +53,7 @@ const CreateDivisionModal = ({
-
+
Program Area
+
+ setDivision({...division, specifictopersonalrequests: !division.specifictopersonalrequests})} />} label="Specific to Personal Request" />
+