CREATE TEMPORARY TABLE queryset
ON COMMIT DROP
AS
SELECT DISTINCT
   id_progetto
 , codice_fiscale
 /*, dipartimento*/
FROM beneficiari_progetti bp
LEFT JOIN progetti USING(id_progetto)
LEFT JOIN linee USING(programma,linea)
LEFT JOIN bandi USING(atto_approvazione_bando)
LEFT JOIN gruppi_beneficiari_progetti USING(id_progetto,codice_fiscale/*,dipartimento*/)
LEFT JOIN gruppi USING(gruppo)
LEFT JOIN codici_di_progetto USING(id_progetto)
LEFT JOIN verbali USING(id_progetto)
LEFT JOIN agevolazioni_richieste_e_concesse USING(id_progetto,codice_fiscale/*,dipartimento*/)
LEFT JOIN agevolazioni_erogate_restituite USING(id_progetto,codice_fiscale/*,dipartimento*/)
LEFT JOIN agevolazioni_revocate USING(id_progetto,codice_fiscale/*,dipartimento*/)
WHERE COALESCE(id_progetto = lower(:codiceprogetto) OR :codiceprogetto = codice, :codiceprogetto IS NULL)
  AND COALESCE(codice_fiscale = upper(:cf), :cf IS NULL)
  AND COALESCE(beneficiario_ultimo ILIKE :ben, TRUE)
  AND COALESCE(rs_sign_array(:ben_adv) <@ rs_sign_array(beneficiario_ultimo), TRUE)
  AND COALESCE(titolo_progetto ~* (:titoloprogetto), TRUE)
  AND COALESCE(:comunesl ILIKE comune_sede_legale, :comunesl IS NULL)
  AND COALESCE(:provinciasl ILIKE provincia_sede_legale, :provinciasl IS NULL)
  AND COALESCE(:comuneul ILIKE comune_unita_locale, :comuneul IS NULL)
  AND COALESCE(:provinciaul ILIKE provincia_unita_locale, :provinciaul IS NULL)
  AND COALESCE((:dattobando, :nattobando)::atto == atto_approvazione_bando, (:dattobando, :nattobando)::atto IS NULL)
  AND COALESCE((:dattograd, :nattograd)::atto == atto_concessione_definitiva, (:dattograd, :nattograd)::atto IS NULL)
  AND COALESCE(stato_richiesta = :status, :status IS NULL)
  AND COALESCE(dimensione_impresa = :dim_imp, :dim_imp IS NULL)
  AND COALESCE(programma = :programma, :programma IS NULL)
  AND COALESCE(linea = :linea, :linea IS NULL)
  AND COALESCE(tipologia_aiuto = :tipologiaaiuto, :tipologiaaiuto IS NULL)
  AND (   COALESCE(agevolazioni_richieste_e_concesse.tipo_agevolazione = :formaagevolazione, :formaagevolazione IS NULL)
       OR COALESCE(agevolazioni_erogate_restituite.tipo_agevolazione = :formaagevolazione, :formaagevolazione IS NULL))
  AND COALESCE(data_fine_progetto_effettiva <= :finanziatoa::timestamp, :finanziatoa IS NULL)
  AND COALESCE(:finanziatoil::integer  = extract(year FROM (atto_concessione_definitiva).data)::integer, NULLIF(:finanziatoil, '0') IS NULL)
  AND COALESCE(:finanziatoda::integer <= extract(year FROM (atto_concessione_definitiva).data)::integer, :finanziatoda IS NULL)
  AND (   (COALESCE(codice_ateco = regexp_replace(:ateco, '[^0-9]', '', 'g'), :ateco IS NULL) AND COALESCE(classificazione_ateco = :classateco, :classateco IS NULL))
       OR (COALESCE(codice_ateco_progetto = regexp_replace(:ateco, '[^0-9]', '', 'g'), :ateco IS NULL) AND COALESCE(classificazione_ateco_progetto = :classateco, :classateco IS NULL)))
  AND CASE WHEN :ricerca::text IS NOT NULL THEN tipo_linea = 'Ricerca' ELSE TRUE END
  AND CASE :deminimis::boolean
       WHEN true THEN (importo_definitivo_deminimis <> 0)
       WHEN false THEN (importo_definitivo_deminimis = 0)
       ELSE TRUE
      END
