Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2075 - fix(cms): change view to fix download timeout issue #1930

Merged
merged 1 commit into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class UpdateSupportCaseDataToVersion13 < ActiveRecord::Migration[7.1]
def change
update_view :support_case_data, version: 13, revert_to_version: 12
end
end
37 changes: 22 additions & 15 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.1].define(version: 2024_09_11_140017) do
ActiveRecord::Schema[7.1].define(version: 2024_10_01_150600) do
create_sequence "evaluation_refs"
create_sequence "framework_refs"

Expand Down Expand Up @@ -399,6 +399,8 @@
t.string "name", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "archived"
t.datetime "archived_at"
t.index ["la_code"], name: "index_local_authorities_on_la_code", unique: true
t.index ["name"], name: "index_local_authorities_on_name", unique: true
end
Expand Down Expand Up @@ -615,8 +617,8 @@
t.integer "discovery_method"
t.string "discovery_method_other_text"
t.string "project"
t.boolean "is_evaluator", default: false
t.string "other_school_urns", default: [], array: true
t.boolean "is_evaluator", default: false
t.index ["category_id"], name: "index_support_cases_on_category_id"
t.index ["existing_contract_id"], name: "index_support_cases_on_existing_contract_id"
t.index ["new_contract_id"], name: "index_support_cases_on_new_contract_id"
Expand Down Expand Up @@ -773,6 +775,10 @@
t.uuid "establishment_group_type_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "archived"
t.datetime "archived_at"
t.date "opened_date"
t.date "closed_date"
t.index ["establishment_group_type_id"], name: "index_establishment_groups_on_establishment_group_type_id"
t.index ["name"], name: "index_support_establishment_groups_on_name"
t.index ["uid"], name: "index_support_establishment_groups_on_uid", unique: true
Expand Down Expand Up @@ -878,6 +884,11 @@
t.string "federation_name"
t.string "federation_code"
t.uuid "local_authority_id"
t.boolean "archived"
t.datetime "archived_at"
t.date "closed_date"
t.string "reason_establishment_opened"
t.string "reason_establishment_closed"
t.index ["establishment_type_id"], name: "index_support_organisations_on_establishment_type_id"
t.index ["local_authority_id"], name: "index_support_organisations_on_local_authority_id"
t.index ["urn"], name: "index_support_organisations_on_urn", unique: true
Expand Down Expand Up @@ -1253,8 +1264,8 @@
(GREATEST(sc.updated_at, si.created_at))::date AS last_modified_date,
to_char(((GREATEST(sc.updated_at, si.created_at))::date)::timestamp with time zone, 'yyyy'::text) AS last_modified_year,
to_char(((GREATEST(sc.updated_at, si.created_at))::date)::timestamp with time zone, 'mm'::text) AS last_modified_month,
(first_resolved.created_at)::date AS first_resolved_date,
(last_resolved.created_at)::date AS last_resolved_date,
(rl.first_resolved_at)::date AS first_resolved_date,
(rl.last_resolved_at)::date AS last_resolved_date,
sc.source AS case_source,
sc.creation_source AS case_creation_source,
sc.state AS case_state,
Expand Down Expand Up @@ -1318,7 +1329,7 @@
ps.created_at AS participation_survey_date,
es.created_at AS exit_survey_date,
sir.referrer
FROM ((((((((((((((((((support_cases sc
FROM (((((((((((((((((support_cases sc
LEFT JOIN ( SELECT sa_1.id,
sa_1.first_name,
sa_1.last_name
Expand All @@ -1327,16 +1338,12 @@
stc_1.procurement_id,
stc_1.tower_name
FROM support_tower_cases stc_1) stc ON ((sc.procurement_id = stc.procurement_id)))
LEFT JOIN support_activity_log_items first_resolved ON ((first_resolved.id = ( SELECT first_resolved_1.id
FROM support_activity_log_items first_resolved_1
WHERE (((sc.id)::text = (first_resolved_1.support_case_id)::text) AND ((first_resolved_1.action)::text = 'resolve_case'::text))
ORDER BY first_resolved_1.created_at
LIMIT 1))))
LEFT JOIN support_activity_log_items last_resolved ON ((last_resolved.id = ( SELECT last_resolved_1.id
FROM support_activity_log_items last_resolved_1
WHERE (((sc.id)::text = (last_resolved_1.support_case_id)::text) AND ((last_resolved_1.action)::text = 'resolve_case'::text))
ORDER BY last_resolved_1.created_at DESC
LIMIT 1))))
LEFT JOIN ( SELECT log.support_case_id AS case_id,
min(log.created_at) AS first_resolved_at,
max(log.created_at) AS last_resolved_at
FROM support_activity_log_items log
WHERE ((log.action)::text = 'resolve_case'::text)
GROUP BY log.support_case_id) rl ON ((((sc.id)::character varying)::text = (rl.case_id)::text)))
LEFT JOIN ( SELECT fr_1.id,
fr_1.support_case_id,
fr_1.school_urns
Expand Down
252 changes: 252 additions & 0 deletions db/views/support_case_data_v13.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
SELECT
sc.id AS case_id,
sc.ref AS case_ref,
sc.created_at AS created_at,
sc.created_at::DATE AS created_date,
TO_CHAR(sc.created_at::DATE, 'yyyy') AS created_year,
TO_CHAR(sc.created_at::DATE, 'mm') AS created_month,
(CASE
WHEN (DATE_PART('month', sc.created_at)) >= 4 THEN concat('FY', TO_CHAR(sc.created_at::DATE, 'yy'), '/', TO_CHAR((sc.created_at + interval '1 year')::DATE, 'yy'))
WHEN (DATE_PART('month', sc.created_at)) < 4 THEN concat('FY', TO_CHAR((sc.created_at - interval '1 year')::DATE, 'yy'), '/', TO_CHAR(sc.created_at::DATE, 'yy'))
END) as created_financial_year,
GREATEST(sc.updated_at, si.created_at) AS last_modified_at,
GREATEST(sc.updated_at, si.created_at)::DATE AS last_modified_date,
TO_CHAR(GREATEST(sc.updated_at, si.created_at)::DATE, 'yyyy') AS last_modified_year,
TO_CHAR(GREATEST(sc.updated_at, si.created_at)::DATE, 'mm') AS last_modified_month,
rl.first_resolved_at::DATE as first_resolved_date,
rl.last_resolved_at::DATE as last_resolved_date,
sc.source AS case_source,
sc.creation_source AS case_creation_source,
sc.state AS case_state,
sc.closure_reason AS case_closure_reason,
cat.title AS sub_category_title,
sc.other_category AS category_other,
stc.tower_name AS tower_name,
concat(sa.first_name, ' ', sa.last_name) AS agent_name,
sc.savings_actual AS savings_actual,
sc.savings_actual_method AS savings_actual_method,
sc.savings_estimate AS savings_estimate,
sc.savings_estimate_method AS savings_estimate_method,
sc.savings_status AS savings_status,
sc.support_level AS case_support_level,
sc.value AS case_value,
sc.with_school AS with_school_flag,
sc.next_key_date AS next_key_date,
sc.next_key_date_description AS next_key_date_description,
sc.email AS organisation_contact_email,
se.name AS organisation_name,
se.urn AS organisation_urn,
se.ukprn AS organisation_ukprn,
se.rsc_region AS organisation_rsc_region,
se.trust_name as parent_group_name,
se.trust_code as parent_group_ukprn,
se.local_authority_name AS organisation_local_authority_name,
se.local_authority_code AS organisation_local_authority_code,
se.gor_name AS gor_name,
se.uid AS organisation_uid,
se.phase AS organisation_phase,
se.organisation_status AS organisation_status,
se.egroup_status AS establishment_group_status,
se.establishment_type AS establishment_type,
ARRAY_LENGTH(fr.school_urns, 1) AS framework_request_num_schools,
REPLACE(TRIM(fr.school_urns::TEXT, '{}"'),',',', ') AS framework_request_school_urns,
ARRAY_LENGTH(cr.school_urns, 1) AS case_request_num_schools,
REPLACE(TRIM(cr.school_urns::TEXT, '{}"'),',',', ') AS case_request_school_urns,
JSONB_ARRAY_LENGTH(cps.participating_schools) AS case_num_participating_schools,
REPLACE(TRIM(cps.participating_schools::TEXT, '[]'),'"','') as case_participating_school_urns,
sf.name AS framework_name,
sp.reason_for_route_to_market AS reason_for_route_to_market,
sp.required_agreement_type AS required_agreement_type,
sp.route_to_market AS route_to_market,
sp.stage AS procurement_stage_old,
sps.stage AS procurement_stage,
sps.key AS procurement_stage_key,
sp.started_at AS procurement_started_at,
sp.ended_at AS procurement_ended_at,
sp.e_portal_reference AS e_portal_reference,
ec.started_at AS previous_contract_started_at,
ec.ended_at AS previous_contract_ended_at,
ec.duration as previous_contract_duration,
ec.spend AS previous_contract_spend,
ec.supplier AS previous_contract_supplier,
nc.started_at AS new_contract_started_at,
nc.ended_at AS new_contract_ended_at,
nc.duration as new_contract_duration,
nc.spend AS new_contract_spend,
nc.supplier AS new_contract_supplier,
nc.is_supplier_sme AS supplier_is_a_sme,
ps.created_at AS participation_survey_date,
es.created_at AS exit_survey_date,
sir.referrer AS referrer
FROM
support_cases sc
LEFT JOIN (
SELECT
sa.id,
sa.first_name,
sa.last_name
FROM support_agents sa
) AS sa
ON sc.agent_id = sa.id
LEFT JOIN (
SELECT
stc.id,
stc.procurement_id,
stc.tower_name
FROM support_tower_cases stc
) as stc
ON sc.procurement_id = stc.procurement_id

LEFT JOIN (select
log.support_case_id as case_id
,MIN(log.created_at) as first_resolved_at
,MAX(log.created_at) as last_resolved_at
from public.support_activity_log_items as log
WHERE log.action = 'resolve_case'

group by log.support_case_id)

AS rl
ON sc.id::VARCHAR = rl.case_id::VARCHAR

LEFT JOIN (
SELECT
fr.id,
fr.support_case_id,
fr.school_urns
FROM framework_requests fr
) as fr
ON sc.id = fr.support_case_id
LEFT JOIN (
SELECT
cr.id,
cr.support_case_id,
cr.school_urns
FROM case_requests cr
) as cr
ON sc.id = cr.support_case_id
LEFT JOIN (
SELECT sco.support_case_id,
jsonb_agg(so.urn) AS "participating_schools"
FROM support_case_organisations AS sco
LEFT JOIN support_organisations AS so ON so.id = sco.support_organisation_id
GROUP BY sco.support_case_id
) AS cps ON cps.support_case_id = sc.id
LEFT JOIN
support_interactions si
ON si.id =
(
SELECT id
FROM support_interactions i
WHERE i.case_id = sc.id
ORDER BY i.created_at ASC
LIMIT 1
)
LEFT JOIN (
SELECT -- Support::Organisation cases
organisations.id,
organisations.name,
organisations.rsc_region,
local_authorities.name as local_authority_name,
local_authorities.la_code as local_authority_code,
organisations.gor_name as gor_name,
organisations.urn,
organisations.ukprn,
parent.name as trust_name,
parent.ukprn as trust_code,
organisations.status as organisation_status,
null as egroup_status,
null as uid,
organisations.phase,
etypes.name as establishment_type,
'Support::Organisation' as source
FROM support_organisations organisations
JOIN support_establishment_types etypes
ON etypes.id = organisations.establishment_type_id
JOIN local_authorities
ON local_authorities.id = organisations.local_authority_id
LEFT JOIN support_establishment_groups parent
ON parent.uid = COALESCE(NULLIF(organisations.trust_code, ''), organisations.federation_code)
UNION ALL

SELECT -- Support::EstablishmentGroup cases
egroups.id,
egroups.name,
null as rsc_region,
null as local_authority_name,
null as local_authority_code,
null as gor_name,
null as urn,
egroups.ukprn,
egroups.name as trust_name,
egroups.ukprn as trust_code,
null as organisation_status,
egroups.status as egroup_status,
egroups.uid,
null as phase,
egtypes.name as establishment_type,
'Support::EstablishmentGroup' as source
FROM support_establishment_groups egroups
JOIN support_establishment_group_types egtypes
ON egtypes.id = egroups.establishment_group_type_id
UNION ALL

SELECT -- LocalAuthority cases
la.id,
la.name,
null as rsc_region,
la.name as local_authority_name,
la.la_code as local_authority_code,
null as gor_name,
null as urn,
null as ukprn,
null as trust_name,
null as trust_code,
null as organisation_status,
null as egroup_status,
null as uid,
null as phase,
'Local Authority' as establishment_type,
'LocalAuthority' as source
FROM local_authorities la
) AS se
ON sc.organisation_id = se.id AND sc.organisation_type = se.source
LEFT JOIN support_categories cat
ON sc.category_id = cat.id
LEFT JOIN support_procurements sp
ON sc.procurement_id = sp.id
LEFT JOIN support_procurement_stages sps
ON sc.procurement_stage_id = sps.id
LEFT JOIN support_frameworks sf
ON sp.framework_id = sf.id
LEFT JOIN support_contracts ec
ON sc.existing_contract_id = ec.id
LEFT JOIN support_contracts nc
ON sc.new_contract_id = nc.id
LEFT JOIN (
SELECT si.created_at,
si.case_id
FROM support_interactions si
WHERE si.event_type = 3
AND si.additional_data ->>'email_template' = 'fd89b69e-7ff9-4b73-b4c4-d8c1d7b93779'
ORDER BY si.created_at ASC
LIMIT 1
) AS ps
ON si.case_id = ps.case_id
LEFT JOIN (
SELECT si.created_at,
si.case_id
FROM support_interactions si
WHERE si.event_type = 3
AND si.additional_data ->>'email_template' = '134bc268-2c6b-4b74-b6f4-4a58e22d6c8b'
) AS es
ON si.case_id = es.case_id
LEFT JOIN (
SELECT si.additional_data ->>'referrer' AS referrer,
si.case_id
FROM support_interactions si
WHERE si.event_type = 8
ORDER BY si.created_at ASC
LIMIT 1
) AS sir
ON si.case_id = sir.case_id;
2 changes: 1 addition & 1 deletion spec/models/support/case_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
describe "#to_csv" do
it "includes headers" do
expect(described_class.to_csv).to eql(
"id,ref,category_id,request_text,support_level,status,state,created_at,updated_at,agent_id,first_name,last_name,email,phone_number,source,organisation_id,existing_contract_id,new_contract_id,procurement_id,savings_status,savings_estimate_method,savings_actual_method,savings_estimate,savings_actual,action_required,organisation_type,value,closure_reason,extension_number,other_category,other_query,procurement_amount,confidence_level,special_requirements,query_id,exit_survey_sent,detected_category_id,creation_source,user_selected_category,created_by_id,procurement_stage_id,initial_request_text,with_school,next_key_date,next_key_date_description,discovery_method,discovery_method_other_text,project,is_evaluator,other_school_urns\n",
"id,ref,category_id,request_text,support_level,status,state,created_at,updated_at,agent_id,first_name,last_name,email,phone_number,source,organisation_id,existing_contract_id,new_contract_id,procurement_id,savings_status,savings_estimate_method,savings_actual_method,savings_estimate,savings_actual,action_required,organisation_type,value,closure_reason,extension_number,other_category,other_query,procurement_amount,confidence_level,special_requirements,query_id,exit_survey_sent,detected_category_id,creation_source,user_selected_category,created_by_id,procurement_stage_id,initial_request_text,with_school,next_key_date,next_key_date_description,discovery_method,discovery_method_other_text,project,other_school_urns,is_evaluator\n",
serenaabbott11 marked this conversation as resolved.
Show resolved Hide resolved
)
end
end
Expand Down