Punching, Dedupe and CutOff Features Done

This commit is contained in:
2026-08-12 07:46:24 +05:30
parent b862a3f686
commit c835a9deb0
76 changed files with 4720 additions and 3695 deletions

View File

@@ -0,0 +1,45 @@
-- Parameterized, base-table-only queries for /rundedupe.
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT '
'to_char(mo.cutoffon, ''YYYY-MM-DD HH24:MI:SS.US'') AS cutoff_key, '
'to_char(mo.cutoffon, ''DD-Mon-YYYY HH12:MI:SS AM'') AS cutoffon, '
'SUM(c.rv) + SUM(c.ov) + SUM(c.pv) AS totaddr, COUNT(*) AS totcase, '
'CASE WHEN mo.islocked <> ? AND mo.islocked > 0 THEN 1 ELSE 0 END AS islocked, '
'COALESCE(NULLIF(mo.lockedbyuser, ''''), ''None'') AS lockedby, '
'mo.islocked AS lock_owner_id '
'FROM main c JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) AND mo.cutoffby > 0 '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND ((mo.earlierby IS NULL OR mo.earlierby = 0) '
'OR (mo.negativeby IS NULL OR mo.negativeby = 0)) '
'AND c.company_id = ? AND c.branch_id = ? '
'GROUP BY mo.cutoffon, mo.islocked, mo.lockedbyuser '
'ORDER BY mo.cutoffon DESC, mo.islocked',
ismigrated = true
WHERE query_id = 41;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT '
'to_char(mo.cutoffon, ''YYYY-MM-DD HH24:MI:SS.US'') AS cutoff_key, '
'mo.islocked AS lock_owner_id, c.mvcode, c.applno, c.customername, c.apptype, '
'c.rv AS totrv, c.ov AS totov, c.pv AS totpv, '
'CASE WHEN mo.islocked <> ? AND mo.islocked > 0 THEN 1 ELSE 0 END AS islocked, '
'COALESCE(NULLIF(mo.lockedbyuser, ''''), ''None'') AS lockedby, '
'c.uuid::text AS uuid, '
'CASE WHEN mo.negative = 1 AND (mo.negativeby IS NULL OR mo.negativeby = 0) '
'THEN ''Y'' ELSE ''N'' END AS negative, '
'CASE WHEN mo.earlier = 1 AND (mo.earlierby IS NULL OR mo.earlierby = 0) '
'THEN ''Y'' ELSE ''N'' END AS earlier '
'FROM main c JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) AND mo.cutoffby > 0 '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND ((mo.earlierby IS NULL OR mo.earlierby = 0) '
'OR (mo.negativeby IS NULL OR mo.negativeby = 0)) '
'AND c.company_id = ? AND c.branch_id = ? '
'ORDER BY mo.cutoffon DESC, mo.islocked, c.mvcode',
ismigrated = true
WHERE query_id = 42;

View File

@@ -0,0 +1,89 @@
-- Introduce the integer relationship without breaking legacy UUID-based writers.
ALTER TABLE public.main_operations
ADD COLUMN IF NOT EXISTS case_id integer;
UPDATE public.main_operations mo
SET case_id = m.case_id
FROM public.main m
WHERE mo.case_id IS NULL
AND m.uuid::text = mo.uuid::text;
DO $migration$
BEGIN
IF EXISTS (SELECT 1 FROM public.main_operations WHERE case_id IS NULL) THEN
RAISE EXCEPTION 'Cannot migrate main_operations.case_id: unresolved UUID rows exist';
END IF;
END
$migration$;
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS ux_main_operations_case_id
ON public.main_operations (case_id);
CREATE OR REPLACE FUNCTION public.sync_main_operations_case_id()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF NEW.case_id IS NULL
OR (TG_OP = 'UPDATE' AND NEW.uuid IS DISTINCT FROM OLD.uuid) THEN
SELECT m.case_id INTO NEW.case_id
FROM public.main m
WHERE m.uuid::text = NEW.uuid::text;
END IF;
RETURN NEW;
END
$function$;
DROP TRIGGER IF EXISTS trg_main_operations_case_id ON public.main_operations;
CREATE TRIGGER trg_main_operations_case_id
BEFORE INSERT OR UPDATE OF uuid ON public.main_operations
FOR EACH ROW EXECUTE FUNCTION public.sync_main_operations_case_id();
DO $migration$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conrelid = 'public.main_operations'::regclass
AND conname = 'fk_main_operations_case_id'
) THEN
ALTER TABLE public.main_operations
ADD CONSTRAINT fk_main_operations_case_id
FOREIGN KEY (case_id) REFERENCES public.main(case_id)
ON UPDATE CASCADE ON DELETE CASCADE NOT VALID;
END IF;
END
$migration$;
ALTER TABLE public.main_operations
VALIDATE CONSTRAINT fk_main_operations_case_id;
DO $migration$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conrelid = 'public.main_operations'::regclass
AND conname = 'ck_main_operations_case_id_not_null'
) THEN
ALTER TABLE public.main_operations
ADD CONSTRAINT ck_main_operations_case_id_not_null
CHECK (case_id IS NOT NULL) NOT VALID;
END IF;
END
$migration$;
ALTER TABLE public.main_operations
VALIDATE CONSTRAINT ck_main_operations_case_id_not_null;
ALTER TABLE public.main_operations
ALTER COLUMN case_id SET NOT NULL;
ALTER TABLE public.main_operations
DROP CONSTRAINT ck_main_operations_case_id_not_null;
-- Switch /rundedupe from the compatibility UUID relationship to the integer key.
UPDATE platform.application_query
SET query_text = replace(
query_text,
'JOIN main_operations mo ON mo.uuid::text = c.uuid::text',
'JOIN main_operations mo ON mo.case_id = c.case_id')
WHERE query_id IN (41, 42, 53, 446);

View File

@@ -0,0 +1,36 @@
-- Parameterized, tenant-scoped, base-table queries for /dodedupe.
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT DISTINCT c.portfolio_id AS value, p.portname AS label, '
'''portfolio.'' AS "group" '
'FROM main c '
'JOIN main_operations mo ON mo.uuid::text = c.uuid::text '
'JOIN portfolio p ON p.portfolio_id = c.portfolio_id '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) '
'AND ((mo.earlierby > 0 AND mo.earlier = 1) OR mo.earlier = 0) '
'AND ((mo.negativeby > 0 AND mo.negative = 1) OR mo.negative = 0) '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND c.company_id = ? AND c.branch_id = ? '
'ORDER BY p.portname'
WHERE query_id = 446;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT c.uuid::text AS document_case_id, '
'c.portfolio_id, c.mvcode AS mv_code, c.applno AS file_number, '
'c.customername AS customer_name, c.apptype AS application_type, '
'c.rv AS residence_visits, c.ov AS office_visits, c.pv AS property_visits, '
'to_char(c.receivedate, ''DD/MM/YYYY'') AS received_on, '
'CASE WHEN COALESCE(c.rv, 0) + COALESCE(c.ov, 0) + COALESCE(c.pv, 0) = '
'COALESCE(mo.rvdone, 0) + COALESCE(mo.ovdone, 0) + COALESCE(mo.pvdone, 0) '
'THEN ''Y'' ELSE ''N'' END AS done '
'FROM main c JOIN main_operations mo ON mo.uuid::text = c.uuid::text '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 AND c.portfolio_id = ? '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) '
'AND ((mo.earlierby > 0 AND mo.earlier = 1) OR mo.earlier = 0) '
'AND ((mo.negativeby > 0 AND mo.negative = 1) OR mo.negative = 0) '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND c.company_id = ? AND c.branch_id = ? '
'ORDER BY done DESC, c.applno, c.apptype'
WHERE query_id = 53;

View File

@@ -0,0 +1,14 @@
-- Scoped, parameterized query used by POST /checkdedupe.
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT CASE WHEN EXISTS ('
'SELECT 1 FROM main c JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.uuid::text = ? AND c.isdeleted = 0 AND mo.sdone = 0 '
'AND c.company_id = ? AND c.branch_id = ?) '
'THEN dedupebyuuid_with_user(?, ?, ''Y'', ?, ?, ?) ELSE ''failed:Access denied'' END AS result',
ismigrated = true
WHERE query_id = 43;
UPDATE platform.application_query
SET ismigrated = true
WHERE query_id IN (41, 42);

View File

@@ -0,0 +1,170 @@
BEGIN;
ALTER TABLE public.main
ADD COLUMN IF NOT EXISTS addedbyuser text,
ADD COLUMN IF NOT EXISTS lasteditedbyuser text;
ALTER TABLE public.main_operations
ADD COLUMN IF NOT EXISTS cutoffbyuser text,
ADD COLUMN IF NOT EXISTS allocatedbyuser text,
ADD COLUMN IF NOT EXISTS dedcutbyuser text,
ADD COLUMN IF NOT EXISTS earlierbyuser text,
ADD COLUMN IF NOT EXISTS negativebyuser text,
ADD COLUMN IF NOT EXISTS oprsendbyuser text,
ADD COLUMN IF NOT EXISTS lockedbyuser text;
ALTER TABLE public.caseedit_history
ADD COLUMN IF NOT EXISTS operationbyuser text;
CREATE OR REPLACE FUNCTION public.save_application_details_with_user(
p_application jsonb,
p_company_id smallint,
p_branch_id smallint,
p_user_id smallint,
p_user_name text
)
RETURNS TABLE(operation text, application_id integer, mv_code text, internal_uuid text)
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public, pg_temp
AS $function$
DECLARE
v_result record;
BEGIN
SELECT * INTO STRICT v_result
FROM public.save_application_details(
p_application, p_company_id, p_branch_id, p_user_id);
UPDATE public.main
SET addedbyuser = CASE
WHEN v_result.operation = 'INSERT' OR addedbyuser IS NULL THEN p_user_name
ELSE addedbyuser
END,
lasteditedbyuser = CASE
WHEN v_result.operation = 'UPDATE' THEN p_user_name
ELSE lasteditedbyuser
END
WHERE case_id = v_result.application_id
AND company_id = p_company_id
AND branch_id = p_branch_id;
UPDATE public.main_operations
SET cutoffbyuser = CASE WHEN cutoffby = p_user_id THEN p_user_name ELSE cutoffbyuser END,
allocatedbyuser = CASE WHEN allocatedby = p_user_id THEN p_user_name ELSE allocatedbyuser END,
earlierbyuser = CASE WHEN earlierby = p_user_id THEN p_user_name ELSE earlierbyuser END,
negativebyuser = CASE WHEN negativeby = p_user_id THEN p_user_name ELSE negativebyuser END,
oprsendbyuser = CASE WHEN oprsendby = p_user_id THEN p_user_name ELSE oprsendbyuser END,
lockedbyuser = CASE WHEN islocked = p_user_id THEN p_user_name ELSE lockedbyuser END
WHERE case_id = v_result.application_id
AND company_id = p_company_id
AND branch_id = p_branch_id;
UPDATE public.caseedit_history
SET operationbyuser = p_user_name
WHERE uuid = v_result.internal_uuid
AND user_id = p_user_id
AND operationbyuser IS NULL;
RETURN QUERY SELECT v_result.operation::text, v_result.application_id::integer,
v_result.mv_code::text, v_result.internal_uuid::text;
END;
$function$;
CREATE OR REPLACE FUNCTION public.dedupebyuuid_with_user(
p_unique_id text,
p_operation integer,
p_to_be_processed text,
p_dedupe_check_time text,
p_user_id integer,
p_user_name text
)
RETURNS text
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public, pg_temp
AS $function$
DECLARE
v_result text;
BEGIN
v_result := public.dedupebyuuid(
p_unique_id, p_operation, p_to_be_processed, p_dedupe_check_time, p_user_id);
IF v_result LIKE 'success:%' THEN
UPDATE public.main_operations
SET earlierbyuser = CASE WHEN p_operation = 1 THEN p_user_name ELSE earlierbyuser END,
negativebyuser = CASE WHEN p_operation = 2 THEN p_user_name ELSE negativebyuser END
WHERE uuid = p_unique_id;
END IF;
RETURN v_result;
END;
$function$;
UPDATE platform.application_query
SET query_text =
'procedure!C0L!select * from public.save_application_details_with_user('
'?::jsonb,?::smallint,?::smallint,?::smallint,?::text)',
ismigrated = true,
updated_at = clock_timestamp()
WHERE query_key = 'APPLICATION_SAVE';
DELETE FROM platform.application_query
WHERE query_id = 3092
AND query_key IS NULL;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT to_char(mo.cutoffon, ''YYYY-MM-DD HH24:MI:SS.US'') AS cutoff_key, '
'to_char(mo.cutoffon, ''DD-Mon-YYYY HH12:MI:SS AM'') AS cutoffon, '
'SUM(c.rv) + SUM(c.ov) + SUM(c.pv) AS totaddr, COUNT(*) AS totcase, '
'CASE WHEN mo.islocked <> ? AND mo.islocked > 0 THEN 1 ELSE 0 END AS islocked, '
'COALESCE(NULLIF(mo.lockedbyuser, ''''), ''None'') AS lockedby, '
'mo.islocked AS lock_owner_id FROM main c '
'JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) AND mo.cutoffby > 0 '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND ((mo.earlierby IS NULL OR mo.earlierby = 0) '
'OR (mo.negativeby IS NULL OR mo.negativeby = 0)) '
'AND c.company_id = ? AND c.branch_id = ? '
'GROUP BY mo.cutoffon, mo.islocked, mo.lockedbyuser '
'ORDER BY mo.cutoffon DESC, mo.islocked',
ismigrated = true,
updated_at = clock_timestamp()
WHERE query_id = 41;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT to_char(mo.cutoffon, ''YYYY-MM-DD HH24:MI:SS.US'') AS cutoff_key, '
'mo.islocked AS lock_owner_id, c.mvcode, c.applno, c.customername, c.apptype, '
'c.rv AS totrv, c.ov AS totov, c.pv AS totpv, '
'CASE WHEN mo.islocked <> ? AND mo.islocked > 0 THEN 1 ELSE 0 END AS islocked, '
'COALESCE(NULLIF(mo.lockedbyuser, ''''), ''None'') AS lockedby, c.uuid::text AS uuid, '
'CASE WHEN mo.negative = 1 AND (mo.negativeby IS NULL OR mo.negativeby = 0) '
'THEN ''Y'' ELSE ''N'' END AS negative, '
'CASE WHEN mo.earlier = 1 AND (mo.earlierby IS NULL OR mo.earlierby = 0) '
'THEN ''Y'' ELSE ''N'' END AS earlier '
'FROM main c JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.isdeleted = 0 AND mo.sdone = 0 '
'AND (mo.dedcutby IS NULL OR mo.dedcutby = 0) AND mo.cutoffby > 0 '
'AND (mo.earlier = 1 OR mo.negative = 1) '
'AND ((mo.earlierby IS NULL OR mo.earlierby = 0) '
'OR (mo.negativeby IS NULL OR mo.negativeby = 0)) '
'AND c.company_id = ? AND c.branch_id = ? '
'ORDER BY mo.cutoffon DESC, mo.islocked, c.mvcode',
ismigrated = true,
updated_at = clock_timestamp()
WHERE query_id = 42;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT CASE WHEN EXISTS ('
'SELECT 1 FROM main c JOIN main_operations mo ON mo.case_id = c.case_id '
'WHERE c.uuid::text = ? AND c.isdeleted = 0 AND mo.sdone = 0 '
'AND c.company_id = ? AND c.branch_id = ?) '
'THEN dedupebyuuid_with_user(?, ?, ''Y'', ?, ?, ?) '
'ELSE ''failed:Access denied'' END AS result',
ismigrated = true,
updated_at = clock_timestamp()
WHERE query_id = 43;
COMMIT;

View File

@@ -0,0 +1,68 @@
BEGIN;
ALTER TABLE public.main_operations
ADD COLUMN IF NOT EXISTS allocatedbyuser text,
ADD COLUMN IF NOT EXISTS oprsendbyuser text;
ALTER TABLE public.caseedit_history
ADD COLUMN IF NOT EXISTS operationbyuser text;
CREATE OR REPLACE FUNCTION public.save_application_details_with_user(
p_application jsonb,
p_company_id smallint,
p_branch_id smallint,
p_user_id smallint,
p_user_name text
)
RETURNS TABLE(operation text, application_id integer, mv_code text, internal_uuid text)
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public, pg_temp
AS $function$
DECLARE
v_result record;
BEGIN
SELECT * INTO STRICT v_result
FROM public.save_application_details(
p_application, p_company_id, p_branch_id, p_user_id);
UPDATE public.main
SET addedbyuser = CASE
WHEN v_result.operation = 'INSERT' OR addedbyuser IS NULL THEN p_user_name
ELSE addedbyuser
END,
lasteditedbyuser = CASE
WHEN v_result.operation = 'UPDATE' THEN p_user_name
ELSE lasteditedbyuser
END
WHERE case_id = v_result.application_id
AND company_id = p_company_id
AND branch_id = p_branch_id;
UPDATE public.main_operations
SET cutoffbyuser = CASE WHEN cutoffby = p_user_id THEN p_user_name ELSE cutoffbyuser END,
allocatedbyuser = CASE WHEN allocatedby = p_user_id THEN p_user_name ELSE allocatedbyuser END,
earlierbyuser = CASE WHEN earlierby = p_user_id THEN p_user_name ELSE earlierbyuser END,
negativebyuser = CASE WHEN negativeby = p_user_id THEN p_user_name ELSE negativebyuser END,
oprsendbyuser = CASE WHEN oprsendby = p_user_id THEN p_user_name ELSE oprsendbyuser END,
lockedbyuser = CASE WHEN islocked = p_user_id THEN p_user_name ELSE lockedbyuser END
WHERE case_id = v_result.application_id
AND company_id = p_company_id
AND branch_id = p_branch_id;
UPDATE public.caseedit_history
SET operationbyuser = p_user_name
WHERE uuid = v_result.internal_uuid
AND user_id = p_user_id
AND operationbyuser IS NULL;
RETURN QUERY SELECT v_result.operation::text, v_result.application_id::integer,
v_result.mv_code::text, v_result.internal_uuid::text;
END;
$function$;
DELETE FROM platform.application_query
WHERE query_id = 3092
AND query_key IS NULL;
COMMIT;

View File

@@ -0,0 +1,60 @@
-- Parameterized, tenant-scoped Cut-Off workflow queries. Views and app_user joins are intentionally avoided.
UPDATE platform.application_query SET query_text =
'update!C0L!UPDATE main_operations mo SET cutoffon=?::timestamp, islocked=?, lockedbyuser=? FROM main m WHERE m.case_id=mo.case_id AND m.isdeleted=0 AND mo.sdone=0 AND (mo.cutoffby IS NULL OR mo.cutoffby=0) AND m.addedby<>0 AND m.company_id=? AND m.branch_id=? AND (mo.islocked=0 OR mo.islocked=?)', ismigrated=true WHERE query_id=17;
UPDATE platform.application_query SET query_text =
'select!C0L!SELECT m.portfolio_id, p.portname||'' <b>(''||count(*)||'')</b>'' portname, CASE WHEN sum(mo.allocation)<=0 THEN -1 ELSE 1 END allocation, CASE WHEN sum(mo.sms)<=0 THEN -1 ELSE 1 END sms, CASE WHEN sum(mo.telesheet)>=1 THEN 1 ELSE 0 END telesheet, CASE WHEN sum(mo.earlier)<=0 THEN -1 ELSE 1 END earlier, CASE WHEN sum(mo.negative)<=0 THEN -1 ELSE 1 END negative, CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked, coalesce(mo.lockedbyuser,'''') lockedby FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND (mo.cutoffby IS NULL OR mo.cutoffby=0) AND m.addedby<>0 AND m.company_id=? AND m.branch_id=? GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.lockedbyuser ORDER BY p.portname', ismigrated=true WHERE query_id=18;
UPDATE platform.application_query SET query_text =
'update!C0L!UPDATE main_operations mo SET allocation=CASE WHEN x.selected THEN x.allocation ELSE mo.allocation END,sms=CASE WHEN x.selected THEN x.sms ELSE mo.sms END,smsby=CASE WHEN x.selected AND x.sms<0 THEN x.user_id ELSE mo.smsby END,telesheet=CASE WHEN x.selected THEN CASE WHEN mo.telesheet=0 THEN 0 ELSE x.telesheet END ELSE mo.telesheet END,telesheetby=CASE WHEN x.selected AND x.telesheet<0 THEN x.user_id ELSE mo.telesheetby END,earlier=CASE WHEN x.selected THEN x.earlier ELSE mo.earlier END,earlierby=CASE WHEN x.selected AND x.earlier<0 THEN x.user_id ELSE mo.earlierby END,negative=CASE WHEN x.selected THEN x.negative ELSE mo.negative END,negativeby=CASE WHEN x.selected AND x.negative<0 THEN x.user_id ELSE mo.negativeby END,cutoffby=CASE WHEN x.selected THEN x.user_id ELSE mo.cutoffby END,cutoffbyuser=CASE WHEN x.selected THEN x.audit_user ELSE mo.cutoffbyuser END,islocked=0,lockedbyuser=NULL,batch=CASE WHEN x.selected THEN x.batch ELSE mo.batch END,cutoffon=CASE WHEN x.selected THEN mo.cutoffon ELSE NULL END FROM main m,(SELECT ?::boolean selected,?::smallint allocation,?::smallint sms,?::smallint telesheet,?::smallint earlier,?::smallint negative,?::integer user_id,?::text audit_user,?::text batch) x WHERE m.case_id=mo.case_id AND m.company_id=? AND m.branch_id=? AND m.portfolio_id=? AND mo.cutoffon=?::timestamp AND mo.islocked=? AND (mo.cutoffby IS NULL OR mo.cutoffby=0)', ismigrated=true WHERE query_id=26;
UPDATE platform.application_query SET query_text =
'update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=? FROM main m WHERE m.case_id=mo.case_id AND m.isdeleted=0 AND mo.sdone=0 AND mo.cutoffby>0 AND (mo.islocked=0 OR mo.islocked=?) AND coalesce(mo.allocatedby,0)=0 AND m.company_id=? AND m.branch_id=? AND mo.allocation=1', ismigrated=true WHERE query_id=27;
UPDATE platform.application_query SET query_text =
'select!C0L!SELECT m.portfolio_id,p.portname||'' <b>(''||count(*)||'')</b>'' portname,sum(m.rv) rv,sum(m.ov) ov,sum(m.pv) pv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,mo.allocation,coalesce(mo.lockedbyuser,'''') lockedby FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.allocatedby,0)=0 AND mo.cutoffby>0 AND m.company_id=? AND m.branch_id=? AND mo.allocation=1 AND (m.rv=1 OR m.ov=1 OR m.pv=1) GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.allocation,mo.lockedbyuser ORDER BY p.portname', ismigrated=true WHERE query_id=28;
UPDATE platform.application_query SET query_text =
'select!C0L!SELECT m.portfolio_id,m.mvcode,m.applno,m.customername,m.apptype,m.rv,m.ov,m.pv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,coalesce(mo.lockedbyuser,'''') lockedby,mo.allocation,m.rcolony,m.ocolony,m.pcolony,m.uuid,p."group" portgroup FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.allocatedby,0)=0 AND mo.cutoffby>0 AND mo.islocked=? AND m.company_id=? AND m.branch_id=? AND mo.allocation=1 AND (m.rv=1 OR m.ov=1 OR m.pv=1) ORDER BY m.portfolio_id,m.applno,m.apptype', ismigrated=true WHERE query_id=29;
UPDATE platform.application_query SET query_text='procedure!C0L!SELECT CASE WHEN EXISTS (SELECT 1 FROM main m WHERE m.uuid::text=x.uniqueid AND m.company_id=x.companyid AND m.branch_id=x.branchid AND m.portfolio_id=x.portfolioid AND m.isdeleted=0) THEN allocatecase(x.uniqueid,x.selected,x.rv,x.ov,x.pv,x.rcolony,x.ocolony,x.pcolony,x.processedon,x.companyid,x.branchid,x.portfolioid,x.portgroup) ELSE ''error:Access denied'' END FROM (SELECT ?::text uniqueid,?::integer selected,?::integer rv,?::integer ov,?::integer pv,?::integer rcolony,?::integer ocolony,?::integer pcolony,?::text processedon,?::integer companyid,?::integer branchid,?::integer portfolioid,?::text portgroup) x', ismigrated=true WHERE query_id=30;
UPDATE platform.application_query SET query_text=
'update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=? FROM main m WHERE m.case_id=mo.case_id AND m.isdeleted=0 AND mo.sdone=0 AND mo.cutoffby>0 AND (mo.islocked=0 OR mo.islocked=?) AND coalesce(mo.telesheetby,0)=0 AND m.company_id=? AND m.branch_id=? AND mo.telesheet=1', ismigrated=true WHERE query_id=31;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,p.portname||'' <b>(''||count(*)||'')</b>'' portname,sum(m.rtv) rtv,sum(m.otv) otv,sum(m.refv) refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,mo.telesheet,coalesce(mo.lockedbyuser,'''') lockedby,pf.tsformat outputformat,pf.tsfunction outputfunction FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id JOIN process_formats pf ON pf.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.telesheetby,0)=0 AND mo.cutoffby>0 AND m.company_id=? AND m.branch_id=? AND mo.telesheet=1 AND (m.rtv>0 OR m.otv>0) GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.telesheet,mo.lockedbyuser,pf.tsformat,pf.tsfunction ORDER BY p.portname', ismigrated=true WHERE query_id=32;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,m.mvcode,m.applno,m.customername,m.apptype,m.rtv,m.otv,m.refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,coalesce(mo.lockedbyuser,'''') lockedby,mo.telesheet,m.uuid FROM main m JOIN main_operations mo ON mo.case_id=m.case_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.telesheetby,0)=0 AND mo.cutoffby>0 AND mo.islocked=? AND m.company_id=? AND m.branch_id=? AND mo.telesheet=1 AND (m.rtv=1 OR m.otv=1) ORDER BY m.portfolio_id,m.applno,m.apptype', ismigrated=true WHERE query_id=33;
UPDATE platform.application_query SET query_text='update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=CASE WHEN ?>0 THEN ? ELSE NULL END,telesheeton=CASE WHEN ?>0 THEN ?::timestamp ELSE NULL END,telesheetby=? FROM main m WHERE m.case_id=mo.case_id AND m.uuid::text=? AND m.company_id=? AND m.branch_id=?', ismigrated=true WHERE query_id=34;
UPDATE platform.application_query SET query_text=
'update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=? FROM main m WHERE m.case_id=mo.case_id AND m.isdeleted=0 AND mo.sdone=0 AND mo.cutoffby>0 AND (mo.islocked=0 OR mo.islocked=?) AND coalesce(mo.oprsendby,0)=0 AND m.company_id=? AND m.branch_id=? AND mo.oprsend<>1 AND ((mo.allocation=1 AND mo.allocatedby>0) OR mo.allocation<>1) AND ((mo.telesheet=1 AND mo.telesheetby>0) OR mo.telesheet<>1)', ismigrated=true WHERE query_id=44;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,p.portname||'' <b>(''||count(*)||'')</b>'' portname,sum(m.rv) rv,sum(m.ov) ov,sum(m.pv) pv,sum(m.rtv) rtv,sum(m.otv) otv,sum(m.refv) refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,1 oprsend,coalesce(mo.lockedbyuser,'''') lockedby FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.oprsendby,0)=0 AND mo.cutoffby>=0 AND m.company_id=? AND m.branch_id=? AND mo.oprsend<>1 AND ((mo.allocation=1 AND mo.allocatedby>0) OR mo.allocation<>1 OR (m.rv=0 AND m.ov=0 AND m.pv=0 AND mo.allocation=1)) AND ((mo.telesheet=1 AND mo.telesheetby>0) OR mo.telesheet<>1) AND (m.rv=1 OR m.ov=1 OR m.pv=1 OR m.rtv=1 OR m.otv=1) GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.lockedbyuser ORDER BY p.portname', ismigrated=true WHERE query_id=45;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,m.mvcode,m.applno,m.customername,m.apptype,m.rv,m.ov,m.pv,m.rtv,m.otv,m.refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,coalesce(mo.lockedbyuser,'''') lockedby,1 oprsend,m.uuid FROM main m JOIN main_operations mo ON mo.case_id=m.case_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.oprsendby,0)=0 AND mo.cutoffby>0 AND mo.islocked=? AND m.company_id=? AND m.branch_id=? AND mo.oprsend<>1 AND ((mo.allocation=1 AND mo.allocatedby>0) OR mo.allocation<>1 OR (m.rv=0 AND m.ov=0 AND m.pv=0 AND mo.allocation=1)) AND ((mo.telesheet=1 AND mo.telesheetby>0) OR mo.telesheet<>1) AND (m.rv=1 OR m.ov=1 OR m.pv=1 OR m.rtv=1 OR m.otv=1) ORDER BY m.portfolio_id,m.applno,m.apptype', ismigrated=true WHERE query_id=46;
UPDATE platform.application_query SET query_text='procedure!C0L!SELECT CASE WHEN EXISTS (SELECT 1 FROM main m WHERE m.uuid::text=x.uniqueid::text AND m.company_id=x.companyid AND m.branch_id=x.branchid AND m.portfolio_id=x.portfolioid AND m.isdeleted=0) THEN sendtooperation(x.uniqueid,x.selected,x.processedon,x.userid,x.companyid,x.branchid,x.portfolioid) ELSE ''error:Access denied'' END FROM (SELECT ?::bpchar uniqueid,?::integer selected,?::bpchar processedon,?::integer userid,?::integer companyid,?::integer branchid,?::integer portfolioid) x', ismigrated=true WHERE query_id=47;
UPDATE platform.application_query SET query_text='insert!C0L!INSERT INTO app_documents (processtime,process,documenturl,branch_id) VALUES (?::timestamp,?,?,?)', ismigrated=true WHERE query_id=103;
UPDATE platform.application_query SET query_text=
'update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=? FROM main m WHERE m.case_id=mo.case_id AND m.isdeleted=0 AND mo.sdone=0 AND mo.cutoffby>0 AND (mo.islocked=0 OR mo.islocked=?) AND coalesce(mo.refsheetby,0)=0 AND m.company_id=? AND m.branch_id=? AND mo.refsheet=1', ismigrated=true WHERE query_id=216;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,p.portname||'' <b>(''||count(*)||'')</b>'' portname,sum(m.refv) refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,mo.refsheet,coalesce(mo.lockedbyuser,'''') lockedby,pf.refformat outputformat,pf.reffunction outputfunction FROM main m JOIN main_operations mo ON mo.case_id=m.case_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id JOIN process_formats pf ON pf.portfolio_id=m.portfolio_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.refsheetby,0)=0 AND mo.cutoffby>0 AND m.company_id=? AND m.branch_id=? AND mo.refsheet=1 AND m.refv=1 GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.refsheet,mo.lockedbyuser,pf.refformat,pf.reffunction ORDER BY p.portname', ismigrated=true WHERE query_id=217;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT m.portfolio_id,m.mvcode,m.applno,m.customername,m.apptype,m.refv,CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,coalesce(mo.lockedbyuser,'''') lockedby,mo.refsheet telesheet,m.uuid FROM main m JOIN main_operations mo ON mo.case_id=m.case_id WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.refsheetby,0)=0 AND mo.cutoffby>0 AND mo.islocked=? AND m.company_id=? AND m.branch_id=? AND mo.refsheet=1 AND m.refv=1 ORDER BY m.portfolio_id,m.applno,m.apptype', ismigrated=true WHERE query_id=218;
UPDATE platform.application_query SET query_text='update!C0L!UPDATE main_operations mo SET islocked=?, lockedbyuser=CASE WHEN ?>0 THEN ? ELSE NULL END,refsheeton=CASE WHEN ?>0 THEN ?::timestamp ELSE NULL END,refsheetby=? FROM main m WHERE m.case_id=mo.case_id AND m.uuid::text=? AND m.company_id=? AND m.branch_id=?', ismigrated=true WHERE query_id=219;
UPDATE platform.application_query SET query_text='select!C0L!SELECT CASE WHEN EXISTS (SELECT 1 FROM main WHERE uuid::text=? AND company_id=? AND branch_id=? AND isdeleted=0) THEN finalizepcases(?::text,?::text,?::integer,?::text) ELSE ''error:Access denied'' END result', ismigrated=true WHERE query_id=300;
UPDATE platform.application_query SET query_text=
'select!C0L!SELECT x.uuid,x.fmvcode,x.applno,x.customername,x.apptype,x.visit,x.addr,x.city,x.pincode,x.phoneno,x.notes,''ver''||lower(x.verifiercode) verifier,x.portname,x.product,x.contactperson,to_char(x.allocationon,''YYYY/MM/DD HH24:MI:SS'') addedon,x.inittype,x.requiredphoto FROM (SELECT m.uuid,m.applno,m.product,p.portname,m.mvcode::text||''R'' fmvcode,replace(m.customername,''&'',''and'') customername,m.apptype,concat_ws('' '',m.raddr1,m.raddr2,m.raddr3) addr,m.rcity city,m.rpincode pincode,'''' phoneno,m.specialinst notes,v.verifiercode,mo.allocationon,m.branch_id,m.company_id,CASE WHEN mo.resrequiredphoto IN (1,2) THEN 1 WHEN mo.resrequiredphoto=3 THEN 0 ELSE mo.resrequiredphoto END requiredphoto,''R'' visit,CASE WHEN mo.resrequiredphoto>2 THEN ''T'' ELSE ''A'' END inittype,m.contactperson FROM main m JOIN main_operations mo ON mo.case_id=m.case_id LEFT JOIN verifier v ON m.resiverifier=v.verifier_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.rv=1 AND mo.resphotosheetby=0 AND m.resiverifier>1 AND mo.resrequiredphoto<>-1 UNION ALL SELECT m.uuid,m.applno,m.product,p.portname,m.mvcode::text||''O'',replace(m.customername,''&'',''and''),m.apptype,concat_ws('' '',m.companyname,m.oaddr1,m.oaddr2,m.oaddr3),m.ocity,m.opincode,'''',m.specialinst,v.verifiercode,mo.allocationon,m.branch_id,m.company_id,CASE WHEN mo.offrequiredphoto IN (1,2) THEN 1 WHEN mo.offrequiredphoto=3 THEN 0 ELSE mo.offrequiredphoto END,''O'',CASE WHEN mo.offrequiredphoto>2 THEN ''T'' ELSE ''A'' END,m.contactperson FROM main m JOIN main_operations mo ON mo.case_id=m.case_id LEFT JOIN verifier v ON m.offverifier=v.verifier_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.ov=1 AND mo.offphotosheetby=0 AND m.offverifier>1 AND mo.offrequiredphoto<>-1 UNION ALL SELECT m.uuid,m.applno,m.product,p.portname,m.mvcode::text||''P'',replace(m.customername,''&'',''and''),m.apptype,concat_ws('' '',m.paddr1,m.paddr2,m.paddr3),m.pcity,m.ppincode,'''',m.specialinst,v.verifiercode,mo.allocationon,m.branch_id,m.company_id,CASE WHEN mo.prorequiredphoto IN (1,2) THEN 1 WHEN mo.prorequiredphoto=3 THEN 0 ELSE mo.prorequiredphoto END,''P'',CASE WHEN mo.prorequiredphoto>2 THEN ''T'' ELSE ''A'' END,m.contactperson FROM main m JOIN main_operations mo ON mo.case_id=m.case_id LEFT JOIN verifier v ON m.propverifier=v.verifier_id JOIN portfolio p ON p.portfolio_id=m.portfolio_id WHERE m.pv=1 AND mo.prophotosheetby=0 AND m.propverifier>1 AND mo.prorequiredphoto<>-1) x WHERE x.company_id=? AND x.branch_id=? ORDER BY x.fmvcode', ismigrated=true WHERE query_id=303;

View File

@@ -0,0 +1,51 @@
-- Remaining Dedupe endpoints: parameterized, tenant scoped, and free of legacy views.
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT m.uuid::text uuid,m.customername,m.mvcode,m.dob,m.mobileno mobile,'
'upper(concat_ws('' '',m.raddr1,m.raddr2,m.raddr3)) resiaddress,'
'upper(concat_ws('' '',m.companyname,m.oaddr1,m.oaddr2,m.oaddr3)) offaddress,'
'm.rphone resiphone,m.ophone offphone,'
'CASE WHEN m.category=''-1'' THEN ''NA'' ELSE upper(m.category) END category '
'FROM main m WHERE m.uuid::text=? AND m.company_id=? AND m.branch_id=? AND m.isdeleted=0',
ismigrated = true
WHERE query_id = 54;
UPDATE platform.application_query
SET query_text =
'select!C0L!WITH scoped AS ('
'SELECT m.uuid::text uuid,m.case_id FROM main m '
'WHERE m.uuid::text=? AND m.company_id=? AND m.branch_id=? AND m.isdeleted=0),'
'removed AS (DELETE FROM dedupe d USING scoped s WHERE d.uuid=s.uuid),'
'saved AS (INSERT INTO dedupe '
'(uuid,earremarks,negremarks,earlier,negative,deduperunon,deduperunby) '
'SELECT s.uuid,?,?,?,?,?::timestamp,? FROM scoped s RETURNING uuid),'
'audited AS (UPDATE main_operations mo SET dedcutby=?,dedcutbyuser=?,dedcuton=?::timestamp '
'FROM scoped s WHERE mo.case_id=s.case_id RETURNING mo.case_id) '
'SELECT count(*)::integer result FROM saved',
ismigrated = true
WHERE query_id = 58;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT d.uuid,d.mvcode,d.applno,d.customername,d.apptype,d.product,'
'd.earlier,d.negative,to_char(d.deduperunon,''dd/MM/yyyy HH24:MI:SS'') deduperunon,'
'pb.bkbranchname,bm.dedreport::text fid,br.queryid dqid,pb.name portname,pb.portsupervisor supervisor '
'FROM main m JOIN main_operations mo ON mo.case_id=m.case_id '
'JOIN dedupe d ON d.uuid=m.uuid::text '
'JOIN portfolio_bank_branch pb ON pb.portfolio_id=m.portfolio_id AND pb.portbranch_id=m.bank_branch_id '
'JOIN bankreport_mapping bm ON bm.portfolio_id=m.portfolio_id '
'JOIN bankreport br ON br.format_id=bm.dedreport '
'WHERE m.portfolio_id=? AND m.company_id=? AND m.branch_id=? AND m.isdeleted=0 '
'AND mo.fileclosed=0 AND d.dedupesend=0 AND bm.dedreport>0 '
'ORDER BY d.applno,d.apptype',
ismigrated = true
WHERE query_id = 132;
UPDATE platform.application_query
SET query_text =
'select!C0L!SELECT p.portfolio_id value,p.portname label '
'FROM portfolio p WHERE p.company_id=? AND p.branch_id=? '
'AND NOT EXISTS (SELECT 1 FROM denied_process dp WHERE dp.portfolio_id=p.portfolio_id '
'AND dp.process_id=13 AND dp.isdenied=1) ORDER BY p.portname',
ismigrated = true
WHERE query_id = 134;

View File

@@ -0,0 +1,45 @@
-- Structured, tenant-scoped dedupe matches using base tables only.
UPDATE platform.application_query
SET query_text = $query$
select!C0L!
SELECT md.dedupe_type AS dedupe_type,
md.foundon AS found_on,
md.remarks,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.customername ELSE neg.customername END AS customer_name,
CASE WHEN md.dedupe_type = 'EAR' THEN COALESCE(ear.dob, '') ELSE '00/00/00' END AS dob,
upper(concat_ws(' ',
CASE WHEN md.dedupe_type = 'EAR' THEN ear.raddr1 ELSE neg.raddr1 END,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.raddr2 ELSE neg.raddr2 END,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.raddr3 ELSE neg.raddr3 END)) AS residence_address,
upper(concat_ws(' ',
CASE WHEN md.dedupe_type = 'EAR' THEN ear.companyname ELSE neg.companyname END,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.oaddr1 ELSE neg.oaddr1 END,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.oaddr2 ELSE neg.oaddr2 END,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.oaddr3 ELSE neg.oaddr3 END)) AS office_address,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.rphone ELSE neg.rphone END AS residence_phone,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.ophone ELSE neg.ophone END AS office_phone,
CASE WHEN md.dedupe_type = 'EAR' THEN ear.mobileno ELSE neg.mobileno END AS mobile
FROM master_dedupe md
JOIN main source_case
ON source_case.uuid::text = md.source_uuid::text
AND source_case.company_id = ?
AND source_case.branch_id = ?
AND source_case.isdeleted = 0
LEFT JOIN main ear
ON md.dedupe_type = 'EAR'
AND ear.uuid::text = md.target_uuid::text
AND ear.company_id = source_case.company_id
LEFT JOIN negative neg
ON md.dedupe_type <> 'EAR'
AND neg.uid::text = md.target_uuid::text
WHERE md.source_uuid::text = ?
AND md.remarks <> 'NOT FOUND'
ORDER BY md.dedupe_type, md.target_uuid
$query$,
ismigrated = true
WHERE query_id = 56;
-- These queries were already converted to scoped base-table joins.
UPDATE platform.application_query
SET ismigrated = true
WHERE query_id IN (53, 446);

View File

@@ -0,0 +1,121 @@
-- Remove database-view dependencies from migrated Punching, Dedupe and Cutoff queries.
UPDATE platform.application_query
SET query_text = $query$select!C0L!
SELECT m.case_id,m.portfolio_id,m.mvcode,m.bank_branch_id,m.applno,m.product,m.loanamount,
m.customername,m.apptype,m.category,m.dob,m.contactperson,m.mobileno,
m.raddr1,m.raddr2,m.raddr3,m.rlandmark,m.rcolony AS "Rcolony",m.rcity,m.rpincode,m.rphone,
m.companyname,m.oaddr1,m.oaddr2,m.oaddr3,m.olandmark,m.ocolony AS "Ocolony",m.ocity,
m.opincode,m.department,m.designation,m.ophone,m.extension,m.paddr1,m.paddr2,m.paddr3,
m.plandmark,m.pcolony AS "Pcolony",m.pcity,m.ppincode,m.refname1,m.refaddress1,
m.refcontactno1,m.refname2,m.refaddress2,m.refcontactno2,m.rv,m.rtv,m.ov,m.otv,m.pv,
m.refv,m.docv,m.rco,m.rcp,m.ocp,m.specialinst,m.sradd,m.soadd,m.spadd,
rc.location AS colr,oc.location AS colo,pc.location AS colp,m.fathername,m.bankcode,
0 AS status,m.company_id,m.branch_id,m.uuid,
jsonb_strip_nulls(jsonb_build_object(
'field1',m.field1,'field2',m.field2,'field3',m.field3,'field4',m.field4,
'field5',m.field5,'field6',m.field6,'field7',m.field7,'field8',m.field8,
'field9',m.field9,'field10',m.field10,'field11',m.field11,'field12',m.field12,
'dtfield1',to_char(m.dtfield1,'DD/MM/YYYY'),'field150',m.field150,
'field150_2',m.field150_2))::text AS dynamic_fields
FROM main m
JOIN main_operations mo ON mo.case_id=m.case_id
LEFT JOIN colony rc ON rc.colony_id=m.rcolony
LEFT JOIN colony oc ON oc.colony_id=m.ocolony
LEFT JOIN colony pc ON pc.colony_id=m.pcolony
WHERE m.isdeleted=0
AND (((?<>'' AND m.uuid::text=?) OR (?='' AND m.portfolio_id=? AND COALESCE(mo.cutoffby,0)=0))
AND m.company_id=? AND m.branch_id=?)
ORDER BY m.case_id$query$,
ismigrated = true
WHERE query_id = 24;
UPDATE platform.application_query
SET query_text = $query$select!C0L!
SELECT m.portfolio_id,p.portname||' <b>('||count(*)||')</b>' portname,
sum(m.rtv) rtv,sum(m.otv) otv,sum(m.refv) refv,
CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,mo.telesheet,
coalesce(mo.lockedbyuser,'') lockedby,ts.docformat outputformat,ts.docfunction outputfunction
FROM main m
JOIN main_operations mo ON mo.case_id=m.case_id
JOIN portfolio p ON p.portfolio_id=m.portfolio_id
JOIN bankreport_mapping pf ON pf.portfolio_id=m.portfolio_id
JOIN bankreport ts ON ts.format_id=pf.telesheet
WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.telesheetby,0)=0 AND mo.cutoffby>0
AND m.company_id=? AND m.branch_id=? AND mo.telesheet=1 AND (m.rtv>0 OR m.otv>0)
GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.telesheet,mo.lockedbyuser,ts.docformat,ts.docfunction
ORDER BY p.portname$query$,
ismigrated = true
WHERE query_id = 32;
UPDATE platform.application_query
SET query_text = $query$select!C0L!
WITH requested AS (
SELECT ?::smallint AS portfolio_id, ?::smallint AS page_id, ?::varchar AS template_type
)
SELECT f.field_id,f.label,f.controlid,f.cssclass,f.containerid,f.maxlength,f.onclick,f.ondbclick,
f.onfocus,f.onblur,f.onkeypress,f.onkeydown,f.onkeyup,f.onchange,f.ctrltype,f.ctrlwidth,
f.ctrlheight,fm.defaultvalue,fm.fieldorder,fv.fieldvalue,fv.valorder,tm.page_id,
tm.portfolio_id,t.template_id,t.template,t.template_type,fm.isvisible
FROM field f
JOIN field_mapping fm ON fm.field_id=f.field_id
JOIN field_value fv ON fv.field_id=f.field_id
JOIN template_mapping tm ON tm.template_id=fm.template_id
JOIN template t ON t.template_id=tm.template_id
JOIN requested r ON r.portfolio_id=tm.portfolio_id AND r.page_id=tm.page_id
AND r.template_type=t.template_type
WHERE f.ctrltype='select'
UNION ALL
SELECT f.field_id,f.label,f.controlid,f.cssclass,f.containerid,f.maxlength,f.onclick,f.ondbclick,
f.onfocus,f.onblur,f.onkeypress,f.onkeydown,f.onkeyup,f.onchange,f.ctrltype,f.ctrlwidth,
f.ctrlheight,fm.defaultvalue,fm.fieldorder,''::varchar AS fieldvalue,1 AS valorder,tm.page_id,
tm.portfolio_id,t.template_id,t.template,t.template_type,fm.isvisible
FROM field f
JOIN field_mapping fm ON fm.field_id=f.field_id
JOIN template_mapping tm ON tm.template_id=fm.template_id
JOIN template t ON t.template_id=tm.template_id
JOIN requested r ON r.portfolio_id=tm.portfolio_id AND r.page_id=tm.page_id
AND r.template_type=t.template_type
WHERE f.ctrltype<>'select'
ORDER BY fieldorder,field_id,valorder,label,containerid$query$,
ismigrated = true
WHERE query_id = 74;
UPDATE platform.application_query
SET query_text = $query$select!C0L!
SELECT d.uuid,d.mvcode,d.applno,d.customername,d.apptype,d.product,d.earlier,d.negative,
to_char(d.deduperunon,'dd/MM/yyyy HH24:MI:SS') deduperunon,bb.bkbranchname,
bm.dedreport::text fid,br.queryid dqid,b.name portname,
coalesce(u.displayname,'') supervisor
FROM main m
JOIN main_operations mo ON mo.case_id=m.case_id
JOIN dedupe d ON d.uuid=m.uuid::text
JOIN portfolio_branch pb ON pb.portfolio_id=m.portfolio_id AND pb.portbranch_id=m.bank_branch_id
JOIN bank_branch bb ON bb.bank_branch_id=pb.bank_branch_id AND bb.isactive=1
JOIN bank b ON b.bank_id=bb.bank_id
JOIN portfolio p ON p.portfolio_id=pb.portfolio_id AND p.isactive=1
LEFT JOIN app_user u ON u.user_id=p.supervisor
JOIN bankreport_mapping bm ON bm.portfolio_id=m.portfolio_id
JOIN bankreport br ON br.format_id=bm.dedreport
WHERE m.portfolio_id=? AND m.company_id=? AND m.branch_id=? AND m.isdeleted=0
AND mo.fileclosed=0 AND d.dedupesend=0 AND bm.dedreport>0
ORDER BY d.applno,d.apptype$query$,
ismigrated = true
WHERE query_id = 132;
UPDATE platform.application_query
SET query_text = $query$select!C0L!
SELECT m.portfolio_id,p.portname||' <b>('||count(*)||')</b>' portname,sum(m.refv) refv,
CASE WHEN mo.islocked<>? THEN 1 ELSE 0 END islocked,mo.refsheet,
coalesce(mo.lockedbyuser,'') lockedby,rf.docformat outputformat,rf.docfunction outputfunction
FROM main m
JOIN main_operations mo ON mo.case_id=m.case_id
JOIN portfolio p ON p.portfolio_id=m.portfolio_id
JOIN bankreport_mapping pf ON pf.portfolio_id=m.portfolio_id
JOIN bankreport rf ON rf.format_id=pf.refsheet
WHERE m.isdeleted=0 AND mo.sdone=0 AND coalesce(mo.refsheetby,0)=0 AND mo.cutoffby>0
AND m.company_id=? AND m.branch_id=? AND mo.refsheet=1 AND m.refv=1
GROUP BY m.portfolio_id,p.portname,mo.islocked,mo.refsheet,mo.lockedbyuser,rf.docformat,rf.docfunction
ORDER BY p.portname$query$,
ismigrated = true
WHERE query_id = 217;

View File

@@ -0,0 +1,41 @@
-- Remove the indirect colony_allocation view dependency from allocatecase().
DO $migration$
DECLARE
function_oid oid;
original_definition text;
updated_definition text;
BEGIN
SELECT p.oid
INTO function_oid
FROM pg_proc p
JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname = 'public'
AND p.proname = 'allocatecase'
AND pg_get_function_identity_arguments(p.oid) =
'uniqueid text, allocation integer, rvr integer, ovr integer, pvr integer, resiloc integer, offloc integer, proploc integer, alloctime text, companyid integer, branchid integer, portfolioid integer, portgrp text';
IF function_oid IS NULL THEN
RAISE EXCEPTION 'allocatecase function was not found';
END IF;
original_definition := pg_get_functiondef(function_oid);
updated_definition := replace(
original_definition,
'select verifier_id from colony_allocation where colony_id=resiloc and belt_group=portgrp into rverifier;',
'select ba.verifier_id from colony c join belt_allocation ba on ba.belt_id=c.belt_id where c.colony_id=resiloc and ba.belt_group=portgrp and c.branch_id=branchid and exists (select 1 from company_branch cb where cb.branch_id=c.branch_id and cb.company_id=companyid) into rverifier;');
updated_definition := replace(
updated_definition,
'select verifier_id from colony_allocation where colony_id=offloc and belt_group=portgrp into overifier;',
'select ba.verifier_id from colony c join belt_allocation ba on ba.belt_id=c.belt_id where c.colony_id=offloc and ba.belt_group=portgrp and c.branch_id=branchid and exists (select 1 from company_branch cb where cb.branch_id=c.branch_id and cb.company_id=companyid) into overifier;');
updated_definition := replace(
updated_definition,
'select verifier_id from colony_allocation where colony_id=proploc and belt_group=portgrp into pverifier;',
'select ba.verifier_id from colony c join belt_allocation ba on ba.belt_id=c.belt_id where c.colony_id=proploc and ba.belt_group=portgrp and c.branch_id=branchid and exists (select 1 from company_branch cb where cb.branch_id=c.branch_id and cb.company_id=companyid) into pverifier;');
IF updated_definition = original_definition THEN
RAISE EXCEPTION 'allocatecase definition did not contain the expected view lookups';
END IF;
EXECUTE updated_definition;
END
$migration$;