diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationFormView.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationFormView.java
index 0af565bf..e99d43ca 100644
--- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationFormView.java
+++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationFormView.java
@@ -118,4 +118,9 @@ public class ApplicationFormView {
@Column(name = "INSTRUCTOR_NAME")
private String instructorName;
+ @Column(name = "SUBMISSION_DATE")
+ private LocalDate submissionDate;
+
+ @Column(name = "SUBMISSION_TIME")
+ private LocalTime submissionTime;
}
diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml
index ef0f3447..c7f4e41e 100644
--- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml
+++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml
@@ -3004,4 +3004,8 @@
+
+
+
+
diff --git a/src/main/resources/db/dump/update_application_form_view_23_07_2025.sql b/src/main/resources/db/dump/update_application_form_view_23_07_2025.sql
new file mode 100644
index 00000000..eec055ec
--- /dev/null
+++ b/src/main/resources/db/dump/update_application_form_view_23_07_2025.sql
@@ -0,0 +1,108 @@
+
+DROP VIEW IF EXISTS gepafin_schema.application_form_view ;
+
+CREATE OR REPLACE VIEW gepafin_schema.application_form_view AS
+SELECT app_data.id,
+ app_data.call_id,
+ app_data.application_form_id,
+ app_data.form_id,
+ app_data.application_id,
+ field_data.value ->> 'id'::text AS field_id,
+ COALESCE(( SELECT s.value ->> 'value'::text
+ FROM jsonb_array_elements(field_data.value -> 'settings'::text) s(value)
+ WHERE (s.value ->> 'name'::text) = 'label'::text
+ LIMIT 1), field_data.value ->> 'label'::text) AS field_label,
+ ( SELECT (s.value ->> 'value'::text)::boolean AS bool
+ FROM jsonb_array_elements(field_data.value -> 'settings'::text) s(value)
+ WHERE (s.value ->> 'name'::text) = 'reportEnable'::text
+ LIMIT 1) AS report_enable,
+ COALESCE(( SELECT s.value ->> 'value'::text
+ FROM jsonb_array_elements(field_data.value -> 'settings'::text) s(value)
+ WHERE (s.value ->> 'name'::text) = 'reportHeader'::text
+ LIMIT 1), field_data.value ->> 'reportHeader'::text) AS report_header,
+ field_data.value ->> 'name'::text AS field_type,
+ CASE
+ WHEN (field_data.value ->> 'name'::text) = 'fileupload'::text THEN to_jsonb(( SELECT string_agg(d.file_name::text, ', '::text) AS string_agg
+ FROM unnest(string_to_array(app_data.field_value, ','::text)) file_ids(file_id)
+ JOIN gepafin_schema.document d ON d.id::text = file_ids.file_id
+ WHERE d.is_deleted = false))
+ WHEN (field_data.value ->> 'name'::text) = ANY (ARRAY['checkboxes'::text, 'select'::text, 'radio'::text]) THEN
+ CASE
+ WHEN app_data.field_value ~~ '[%'::text THEN to_jsonb(( SELECT string_agg(opt.value ->> 'label'::text, ', '::text) AS string_agg
+ FROM jsonb_array_elements_text(app_data.field_value::jsonb) selected_id(value)
+ CROSS JOIN LATERAL ( SELECT s.value
+ FROM jsonb_array_elements(field_data.value -> 'settings'::text) s(value)
+ WHERE (s.value ->> 'name'::text) = 'options'::text) options_setting,
+ LATERAL jsonb_array_elements(options_setting.value -> 'value'::text) opt(value)
+ WHERE (opt.value ->> 'name'::text) = selected_id.value))
+ ELSE to_jsonb(( SELECT opt.value ->> 'label'::text
+ FROM ( SELECT s.value
+ FROM jsonb_array_elements(field_data.value -> 'settings'::text) s(value)
+ WHERE (s.value ->> 'name'::text) = 'options'::text) options_setting,
+ LATERAL jsonb_array_elements(options_setting.value -> 'value'::text) opt(value)
+ WHERE (opt.value ->> 'name'::text) = app_data.field_value
+ LIMIT 1))
+ END
+ ELSE to_jsonb(app_data.field_value)
+ END AS field_value,
+ app_data.status,
+ app_data.amount_requested,
+ app_data.amount_accepted,
+ app_data.is_deleted,
+ app_data.hub_id,
+ app_data.user_id,
+ app_data.evaluation_version,
+ app_data.company_id,
+ c.company_name,
+ c.vat_number AS company_vat_number,
+ c.codice_ateco,
+ c.codice_fiscale AS company_codice_fiscale,
+ p.protocol_number,
+ DATE(app_data.submission_date) AS submission_date,
+ TO_CHAR(app_data.submission_date, 'HH24:MI:SS') AS submission_time,
+ b.codice_fiscale AS user_codice_fiscale,
+ COALESCE(NULLIF(TRIM(BOTH FROM concat(COALESCE(u.first_name, ''::character varying), ' ', COALESCE(u.last_name, ''::character varying))), ''::text), ''::text) AS user_name,
+ COALESCE( NULLIF(TRIM(BOTH FROM CONCAT(COALESCE(aauser.first_name, ''), ' ', COALESCE(aauser.last_name, ''))),''),'NA') AS instructor_name,
+ uwc.is_legal_representant AS legal_representative,
+ cl.name AS call_title,
+ cl.end_date AS call_end_date,
+ cl.end_time AS call_end_time,
+ cl.start_date AS call_start_date,
+ cl.start_time AS call_start_time
+ FROM ( SELECT a.id AS application_id,
+ a.call_id,
+ a.protocol_number,
+ af.id AS application_form_id,
+ af.form_id,
+ aff.id,
+ aff.field_value,
+ a.status,
+ a.amount_requested,
+ a.amount_accepted,
+ a.is_deleted,
+ a.hub_id,
+ a.user_id,
+ a.evaluation_version,
+ a.created_date,
+ a.company_id,
+ a.submission_date,
+ aff.field_id,
+ f.content
+ FROM gepafin_schema.application a
+ JOIN gepafin_schema.application_form af ON af.application_id = a.id
+ JOIN gepafin_schema.application_form_field aff ON aff.application_form_id = af.id
+ JOIN gepafin_schema.form f ON f.id = af.form_id
+ WHERE a.is_deleted = false) app_data
+ CROSS JOIN LATERAL ( SELECT jsonb_array_elements.value
+ FROM jsonb_array_elements(app_data.content::jsonb) jsonb_array_elements(value)
+ WHERE (jsonb_array_elements.value ->> 'id'::text) = app_data.field_id::text) field_data(value)
+ LEFT JOIN gepafin_schema.call cl ON app_data.call_id = cl.id
+ LEFT JOIN gepafin_schema.company c ON app_data.company_id = c.id
+ LEFT JOIN gepafin_schema.protocol p ON app_data.protocol_number = p.id
+ LEFT JOIN gepafin_schema.gepafin_user u ON app_data.user_id = u.id
+ LEFT JOIN gepafin_schema.user_with_company uwc ON app_data.user_id = uwc.user_id AND app_data.company_id = uwc.company_id AND uwc.is_deleted = false
+ LEFT JOIN gepafin_schema.beneficiary b ON u.beneficiary_id = b.id
+ LEFT JOIN gepafin_schema.assigned_applications aa ON app_data.application_id = aa.application_id
+ LEFT JOIN gepafin_schema.gepafin_user aauser ON aa.user_id = aauser.id
+ WHERE app_data.id IS NOT NULL AND (app_data.status::text <> ALL (ARRAY['DRAFT'::character varying::text, 'AWAITING'::character varying::text, 'READY'::character varying::text]))
+ ORDER BY app_data.id, (field_data.value ->> 'id'::text);
\ No newline at end of file