get_report_lcr (db ddmsh2_cbr)

 avatar
unknown
mysql
10 months ago
8.5 kB
1
Indexable
CREATE OR REPLACE FUNCTION public.get_report_lcr(input_dealerid character varying)
 RETURNS TABLE(unit_name character varying, tahun_motor integer, nomor_mesin character varying, nomor_rangka character varying, dealerid character varying, last_update character varying, not_checked_yet boolean, not_willing_check boolean, reason character varying, lcr_check boolean, lcr_treatment_1 boolean, lcr_treatment_2 boolean, lcr_ganti boolean, done boolean)
 LANGUAGE plpgsql
AS $function$
	begin
		
		begin
			CREATE TEMP table tmp_history_lcr (
                unit_name varchar,
                nomor_mesin varchar,
                nomor_rangka varchar,
                dealerid varchar,
                last_update varchar,
                not_checked_yet boolean,
                not_willing_check boolean,
                alasan varchar,
                lcr_check boolean,
                lcr_treatment_1 boolean,
                lcr_treatment_2 boolean,
                lcr_ganti boolean,
                isdone boolean
            ) ON COMMIT DROP;
		end;
		raise notice 'create temp tmp_history_lcr %',now();

-- NOTES : DIKARENAKAN QUERYNYA AGAK BERAT, SAAT INI NOSIN YANG BELUM PERNAH LCR INSERT KE TABLE tmp_history_lcr JUGA.
-- TUJUANNYA UNTUK MENHINDARI SUB-QUERY UNION ALL.
--		begin
--			CREATE TEMP table lcr_not_in_history (
--				unit_name varchar,
--                nomor_mesin varchar,
--                nomor_rangka varchar,
--                dealerid varchar,
--                last_update varchar,
--                not_checked_yet boolean,
--                not_willing_check boolean,
--                alasan varchar,
--                lcr_check boolean,
--                lcr_treatment_1 boolean,
--                lcr_treatment_2 boolean,
--                lcr_ganti boolean,
--                isdone boolean
--            ) ON COMMIT DROP;
--		end;
--		raise notice 'create temp lcr_not_in_history %',now();
		begin
			INSERT into tmp_history_lcr (
				unit_name,
				nomor_mesin,
                nomor_rangka,
                dealerid,
                last_update,
                not_checked_yet,
                not_willing_check,
                alasan,
                lcr_check,
                lcr_treatment_1,
                lcr_treatment_2,
                lcr_ganti,
                isdone
			)
			SELECT *
			from (
				WITH monitoring_unit_lcr AS (
				    SELECT 
				    	null as unit_name,
				    	replace(hl.nomesin, ' ', '') AS nomor_mesin,
				        hl.norangka AS nomor_rangka,
				        hl.dealerid AS dealerid, 
				        TO_CHAR(DATE_TRUNC('day', MAX(hl.tglvisit)), 'YYYY-MM-DD')::varchar AS last_update,
				        false as not_checked_yet,
				        false as not_willing_check,
				        '' AS alasan,
				        EXISTS (
				            SELECT 1 
				            FROM trx_history_lcr thl 
				            WHERE thl.nomesin = hl.nomesin
				            AND thl.kesediaan LIKE '%01%'
				            AND thl.dealerid = hl.dealerid
				            AND thl.woid != 'CANCEL'
				        ) AS lcr_check,
				        EXISTS (
				            SELECT 1 
				            FROM trx_history_lcr thl 
				            WHERE thl.nomesin = hl.nomesin
				            AND thl.treatment = 1
				            AND thl.isdone
				            AND thl.dealerid = hl.dealerid
				        ) AS lcr_treatment_1,
				        EXISTS (
				            SELECT 1 
				            FROM trx_history_lcr thl 
				            WHERE thl.nomesin = hl.nomesin 
				            AND thl.treatment = 2
				            AND thl.isdone
				            AND thl.dealerid = hl.dealerid
				        ) AS lcr_treatment_2,
				        EXISTS (
				            SELECT 1 
				            FROM trx_history_lcr thl 
				            WHERE thl.nomesin = hl.nomesin
				            AND thl.hasilpengecekan LIKE '%02%'
				            AND thl.isdone = true
				            AND thl.dealerid = hl.dealerid
				        ) AS lcr_ganti,
				        (
					        EXISTS (
					            SELECT 1 
					            FROM trx_history_lcr thl 
					            WHERE thl.nomesin = hl.nomesin
					            AND thl.treatment = 1
					            AND thl.isdone
					            AND thl.dealerid = hl.dealerid
					        )
					        OR EXISTS (
					            SELECT 1 
					            FROM trx_history_lcr thl 
					            WHERE thl.nomesin = hl.nomesin 
					            AND thl.treatment = 2
					            AND thl.isdone
					            AND thl.dealerid = hl.dealerid
					        )
					        OR EXISTS (
					            SELECT 1 
					            FROM trx_history_lcr thl 
					            WHERE thl.nomesin = hl.nomesin
					            AND thl.hasilpengecekan LIKE '%02%'
					            AND thl.isdone = true
					            AND thl.dealerid = hl.dealerid
					        )
					    ) AS isdone
				    FROM 
				        trx_history_lcr hl
				    WHERE 
				        alasan IS NULL 
				    AND 
				    	case when input_dealerid = 'ALL' then 1 = 1
				    	else hl.dealerid = input_dealerid end
				    GROUP BY 
				        nomesin, norangka, hl.dealerid
				), 
				tmp_tdk_bersedia AS (
				    SELECT 
				    	null as unit_name,
				    	replace(thl2.nomesin, ' ', '') AS nomor_mesin,
				        thl2.norangka AS nomor_rangka, 
				        thl2.dealerid AS dealerid, 
				        TO_CHAR(DATE_TRUNC('day', thl2.tglvisit), 'YYYY-MM-DD')::varchar AS last_update,
				        false as not_checked_yet,
				        true as not_willing_check,
				        thl2.alasan AS alasan,
				        false AS lcr_check,
				        false AS lcr_treatment_1,
				        false AS lcr_treatment_2,
				        false AS lcr_ganti,
				        false AS isdone
				    FROM 
				        trx_history_lcr thl2
				    WHERE 
				        thl2.alasan IS NOT null
				    AND 
				    	case when input_dealerid = 'ALL' then 1 = 1
				    	else thl2.dealerid = input_dealerid end
				    GROUP BY
				        thl2.nomesin, thl2.norangka, thl2.dealerid, thl2.alasan, thl2.tglvisit
				)
				SELECT *
				FROM monitoring_unit_lcr
				UNION ALL 
				SELECT *
				FROM tmp_tdk_bersedia
				order by nomor_rangka
			) AS merged_data;
		end;
--		raise notice 'insert into tmp_history_lcr %',now();
-- 		TETAP INSERT KE tmp_history_lcr, UNTUK MENGHINDARI UNION ALL DALAM SUB-QUERY
		begin
			if input_dealerid = 'ALL' then
				INSERT into tmp_history_lcr (
					unit_name,
					nomor_mesin,
	                nomor_rangka,
	                dealerid,
	                last_update,
	                not_checked_yet,
	                not_willing_check,
	                alasan,
	                lcr_check,
	                lcr_treatment_1,
	                lcr_treatment_2,
	                lcr_ganti,
	                isdone
				)
				select
					null as unit_name,
					enginenumber as nomor_mesin,
			        framenumber, 
			        null, 
			        '',
			        true,
			        false,
			        null,
			        false,
			        false,
			        false,
			        false,
			        false
				from mst_lcr ml
	    		WHERE (ml.framenumber) NOT IN (SELECT t1.nomor_rangka FROM tmp_history_lcr t1);
	    	raise notice 'insert into lcr_not_in_history %',now();
	    	end if;
		end;
		
		RETURN QUERY
		select 
--			(
--				select mc.unittypename 
--				from 
--				(
--					select * from mst_unitcustomer mu where replace(mu.machinenumber, ' ', '') = replace(th.nomor_mesin, ' ', '')
--				) as unit
--				join mst_unittypemarketingcode mc on mc.unittypeid = unit.unittypeid limit 1
--			) as unit_name,
			mc.unittypename as unit_name,
			mu.tahunperakitan as tahun_motor,
			th.nomor_mesin,
			th.nomor_rangka,
			th.dealerid,
			th.last_update,
			th.not_checked_yet as not_checked_yet,
			th.not_willing_check as not_willing_check,
			th.alasan as reason,
			th.lcr_check,
			th.lcr_treatment_1,
			th.lcr_treatment_2,
			th.lcr_ganti,
			th.isdone as done
		from 
		tmp_history_lcr th
		left join mst_unitcustomer mu on replace(mu.machinenumber, ' ', '') = replace(th.nomor_mesin, ' ', '')
		left join mst_unittypemarketingcode mc on mc.unittypeid = mu.unittypeid
		order by
			th.dealerid,
		    th.nomor_mesin,
		    th.last_update;
		
--		raise notice 'select all after insert %',now();
	END;


$function$
;
Editor is loading...
Leave a Comment