From 640869d4a26e6e66ed19b1e3e596310d894a23e3 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Fri, 14 Mar 2025 21:03:35 +0000 Subject: [PATCH] update dental export --- src/api/routes/dental.ts | 44 ++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/api/routes/dental.ts b/src/api/routes/dental.ts index 42fa1c43..161e8ff6 100644 --- a/src/api/routes/dental.ts +++ b/src/api/routes/dental.ts @@ -471,23 +471,33 @@ dentalRouter.post("/export/", async (req: Request, res: Response) => { let userId = req.user?.db_user.user.id || null; let query = db(`${SCHEMA_DENTAL}.DENTAL_SERVICE_SUBMISSIONS_DETAILS`) - .leftJoin(`${SCHEMA_DENTAL}.DENTAL_SERVICE_INTERNAL_FIELDS`, - "DENTAL_SERVICE_SUBMISSIONS_DETAILS.ID", - "DENTAL_SERVICE_INTERNAL_FIELDS.DENTAL_SERVICE_ID" - ) - .select( - "DENTAL_SERVICE_SUBMISSIONS_DETAILS.*", - "DENTAL_SERVICE_INTERNAL_FIELDS.PROGRAM_YEAR as program_year", - db.raw(`CASE - WHEN COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0) = TRUNC(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0)) - THEN TO_CHAR(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0), 'FM9999999') - ELSE TO_CHAR(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0), 'FM9999999.99') - END AS income_amount`), - db.raw("COALESCE(TO_CHAR(DENTAL_SERVICE_INTERNAL_FIELDS.DATE_ENROLLMENT, 'YYYY-MM-DD'), '') AS date_enrollment"), - "DENTAL_SERVICE_INTERNAL_FIELDS.POLICY_NUMBER as policy_number", - db.raw("COALESCE(TO_CHAR(DENTAL_SERVICE_INTERNAL_FIELDS.CREATED_AT, 'YYYY-MM-DD HH24:MI:SS'), '') AS created_at_if") - ) - .where("DENTAL_SERVICE_SUBMISSIONS_DETAILS.STATUS", "<>", 4); + .leftJoin( + db.raw(`( + SELECT DISTINCT DENTAL_SERVICE_ID, + FIRST_VALUE(ID) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS ID, + FIRST_VALUE(PROGRAM_YEAR) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS PROGRAM_YEAR, + FIRST_VALUE(INCOME_AMOUNT) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS INCOME_AMOUNT, + FIRST_VALUE(DATE_ENROLLMENT) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS DATE_ENROLLMENT, + FIRST_VALUE(POLICY_NUMBER) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS POLICY_NUMBER, + FIRST_VALUE(CREATED_AT) OVER (PARTITION BY DENTAL_SERVICE_ID ORDER BY CREATED_AT ASC) AS CREATED_AT + FROM ${SCHEMA_DENTAL}.DENTAL_SERVICE_INTERNAL_FIELDS + ) DENTAL_SERVICE_INTERNAL_FIELDS`), + "DENTAL_SERVICE_SUBMISSIONS_DETAILS.ID", + "DENTAL_SERVICE_INTERNAL_FIELDS.DENTAL_SERVICE_ID" + ) + .select( + "DENTAL_SERVICE_SUBMISSIONS_DETAILS.*", + "DENTAL_SERVICE_INTERNAL_FIELDS.PROGRAM_YEAR as program_year", + db.raw(`CASE + WHEN COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0) = TRUNC(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0)) + THEN TO_CHAR(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0), 'FM9999999') + ELSE TO_CHAR(COALESCE(DENTAL_SERVICE_INTERNAL_FIELDS.INCOME_AMOUNT, 0), 'FM9999999.99') + END AS income_amount`), + db.raw("COALESCE(TO_CHAR(DENTAL_SERVICE_INTERNAL_FIELDS.DATE_ENROLLMENT, 'YYYY-MM-DD'), '') AS date_enrollment"), + "DENTAL_SERVICE_INTERNAL_FIELDS.POLICY_NUMBER as policy_number", + db.raw("COALESCE(TO_CHAR(DENTAL_SERVICE_INTERNAL_FIELDS.CREATED_AT, 'YYYY-MM-DD HH24:MI:SS'), '') AS created_at_if") + ) + .where("DENTAL_SERVICE_SUBMISSIONS_DETAILS.STATUS", "<>", 4); if (requests.length > 0 && !isAllData) { query.whereIn("DENTAL_SERVICE_SUBMISSIONS_DETAILS.ID", requests);