cldscchttn

Filiera diretta

Nov 11th, 2025
140
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- public.filiera_diretta source
  2.  
  3. CREATE OR REPLACE VIEW public.filiera_diretta
  4. AS SELECT timezone('Europe/Rome'::text, 'now'::text::timestamp with time zone) AS data_ultimo_aggiornamento, dati.company, upper(dati.category::text) AS fonte, upper(dati.categoria_lead_d) AS categoria, upper(dati.treatment::text) AS treatment, upper(dati.pricing2::text) AS pricing, upper(dati.campagna::text) AS campagna, regexp_substr(dati.id_italia::text, '[0-9]+'::text) AS id_italia, to_char(dati.first_assign_at, 'YYYY-MM-DD'::text) AS giorno, to_char(dati.created_at_l, 'YYYY-MM-DD'::text) AS giorno_c, upper(dati.first_user_id::text) AS operatore, lower(dati.lastname::text) AS cognome, lower(dati.firstname::text) AS nome, dati.bot, dati.stato_bot, dati.dettaglio_stato_bot, sum(
  5.         CASE
  6.             WHEN dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL THEN 1
  7.             ELSE 0
  8.         END) AS num_lead_comm_ass, sum(
  9.         CASE
  10.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 THEN 1
  11.             ELSE 0
  12.         END) AS num_app, sum(
  13.         CASE
  14.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 AND NOT (dati.recalled = 3 AND dati.cancelled_at::date = dati.created_at_a::date) THEN date_diff('day'::text, dati.created_at_a, dati.date_start)
  15.             ELSE NULL::bigint
  16.         END) AS delay_agendati, sum(
  17.         CASE
  18.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN 1
  19.             ELSE 0
  20.         END) AS num_app_past, sum(
  21.         CASE
  22.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled < 4 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN 1
  23.             ELSE 0
  24.         END) AS num_app_inagdisd, sum(
  25.         CASE
  26.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled = 3 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN 1
  27.             ELSE 0
  28.         END) AS num_app_disd, sum(
  29.         CASE
  30.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled = 4 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN 1
  31.             ELSE 0
  32.         END) AS num_app_spost, sum(
  33.         CASE
  34.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled < 3 AND dati.paid = 1 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN 1
  35.             ELSE 0
  36.         END) AS num_app_pres, sum(
  37.         CASE
  38.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled < 3 AND dati.paid = 1 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN dati.price
  39.             ELSE 0::numeric
  40.         END) AS incasso, sum(
  41.         CASE
  42.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled < 3 AND dati.paid = 1 AND dati.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND dati.date_end < 'now'::text::date THEN dati.incasso_succ_tot
  43.             ELSE 0::numeric
  44.         END) AS incasso_succ, sum(
  45.         CASE
  46.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.call_state::text <> 'da chiamare'::text THEN 1
  47.             ELSE 0
  48.         END) AS num_lead_lav, sum(
  49.         CASE
  50.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND (dati.call_state::text = 'fake'::text OR dati.call_state::text = 'fuori zona'::text OR dati.call_state::text = 'non interessato'::text OR dati.call_state::text = 'no download'::text) THEN 1
  51.             ELSE 0
  52.         END) AS num_lead_scarto, sum(
  53.         CASE
  54.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.call_state::text = 'fake'::text THEN 1
  55.             ELSE 0
  56.         END) AS num_lead_scarto_fak, sum(
  57.         CASE
  58.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.call_state::text = 'fuori zona'::text THEN 1
  59.             ELSE 0
  60.         END) AS num_lead_scarto_fz, sum(
  61.         CASE
  62.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.call_state::text = 'non interessato'::text THEN 1
  63.             ELSE 0
  64.         END) AS num_lead_scarto_ni, sum(
  65.         CASE
  66.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.call_state::text = 'no download'::text THEN 1
  67.             ELSE 0
  68.         END) AS num_lead_scarto_nd, sum(
  69.         CASE
  70.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND (dati.call_state::text = 'NR'::text OR dati.call_state::text = 'NR 2'::text OR dati.call_state::text = 'NR 3'::text OR dati.call_state::text = 'NR 4'::text OR dati.call_state::text = 'NR 5'::text OR dati.call_state::text = 'NR 6'::text OR dati.call_state::text = 'NR 7'::text OR dati.call_state::text = 'NR 8'::text OR dati.call_state::text = 'NR 9'::text OR dati.call_state::text = 'NR 10'::text) THEN 1
  71.             ELSE 0
  72.         END) AS num_lead_nr,
  73.         CASE
  74.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 THEN dati.alias
  75.             ELSE NULL::character varying
  76.         END AS store,
  77.         CASE
  78.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 THEN dati.name
  79.             ELSE NULL::character varying
  80.         END AS categoria_lead,
  81.         conversation_analysis_results.has_price_request,
  82.         conversation_analysis_results.appointment_taken_after_price,
  83.         rimpalli_per_sessione.ai_rimpalli,
  84.         rimpalli_per_sessione.human_rimpalli,
  85.         rimpalli_per_sessione.has_preferred_call_time
  86.    FROM ( SELECT l.id, l.f_oper, l.f_dup, l.f_dup_wrk, l.f_dup_regen, l.f_dup_mkt, l.customer_id AS id_customer, l.call_state,
  87.                 CASE
  88.                     WHEN l.chatbot_process_state IS NOT NULL THEN 'Valeria'::text
  89.                     ELSE 'No Valeria'::text
  90.                 END AS bot,
  91.                 CASE
  92.                     WHEN l.chatbot_process_state IS NOT NULL AND l.chatbot_call_state::text = 'da_richiamare'::text THEN 'richiamo fissato'::text
  93.                     WHEN l.chatbot_process_state IS NOT NULL AND (l.chatbot_call_state::text <> 'da_richiamare'::text OR l.chatbot_call_state IS NULL) THEN 'richiamo non fissato'::text
  94.                     ELSE 'No Valeria'::text
  95.                 END AS stato_bot,
  96.                 CASE
  97.                     WHEN l.chatbot_process_state IS NOT NULL AND l.chatbot_call_state::text = 'da_richiamare'::text THEN 'richiamo fissato'::text
  98.                     WHEN l.chatbot_process_state IS NOT NULL AND l.chatbot_call_state::text = 'da_chiamare'::text THEN 'interagisce ma no app'::text
  99.                     WHEN l.chatbot_process_state IS NOT NULL AND l.chatbot_call_state::text = 'non_risposto'::text THEN 'no interagisce'::text
  100.                     WHEN l.chatbot_process_state IS NOT NULL AND l.chatbot_call_state::text <> 'non_risposto'::text AND l.chatbot_call_state::text <> 'da_chiamare'::text AND l.chatbot_call_state::text <> 'da_richiamare'::text THEN 'scarto'::text
  101.                     ELSE 'No Valeria'::text
  102.                 END AS dettaglio_stato_bot, a.f_ref, a.paid, tc.name,
  103.                 CASE
  104.                     WHEN l.f_dup = 0 AND l.f_oper = 0 AND a.recalled < 3 AND a.paid = 1 AND a.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND a.date_end < 'now'::text::date THEN 1
  105.                     ELSE 0
  106.                 END AS num_app_paid, a.price, a.customer_id, a.date_start, a.date_end, a.recalled, a.cancelled_at, a.created_at AS created_at_a, s.alias, l.company, l.first_user_id, l.uid AS id_italia, l.tenant, l."region", l.category,
  107.                 CASE
  108.                     WHEN lower(l.campagna::text) ~~* '%corpo%'::text THEN 'corpo'::text
  109.                     WHEN lower(l.campagna::text) ~~* '%laser%'::text THEN 'laser'::text
  110.                     ELSE 'altro'::text
  111.                 END AS categoria_lead_d, l.treatment, l.pricing2, l.campagna, l.first_assign_at, l.created_at AS created_at_l, users.firstname, users.lastname, l.created_at, ( SELECT sum(
  112.                         CASE
  113.                             WHEN appointments_tmp.paid = 1 THEN 1
  114.                             ELSE NULL::integer
  115.                         END) AS sum
  116.                    FROM appointments appointments_tmp
  117.                   WHERE appointments_tmp.customer_id = a.customer_id AND appointments_tmp.company::text = a.company::text AND appointments_tmp.tenant::text = a.tenant::text AND appointments_tmp.paid = 1 AND appointments_tmp.date_end > a.date_end AND appointments_tmp.date_end < add_months(a.date_end, 3::bigint) AND l.f_dup = 0 AND l.f_oper = 0 AND a.recalled IS NOT NULL AND a.recalled < 3 AND a.paid = 1 AND a.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND a.date_end < 'now'::text::date) AS app_succ_tot, ( SELECT sum(appointments_tmp.price) AS sum
  118.                    FROM appointments appointments_tmp
  119.                   WHERE appointments_tmp.customer_id = a.customer_id AND appointments_tmp.company::text = a.company::text AND appointments_tmp.tenant::text = a.tenant::text AND appointments_tmp.paid = 1 AND appointments_tmp.id <> a.id AND date(appointments_tmp.date_end) = date(a.date_end) AND l.f_dup_mkt = 0 AND a.recalled IS NOT NULL AND a.recalled < 3 AND a.paid = 1 AND a.date_end >= '2022-01-01 00:00:00'::timestamp without time zone AND a.date_end < 'now'::text::date) AS incasso_succ_tot
  120.            FROM leads l
  121.       JOIN customers c ON l.customer_id = c.id AND l.company::text = c.company::text AND l.tenant::text = c.tenant::text
  122.    LEFT JOIN appointments a ON l.id = a.lead_id AND l.company::text = a.company::text AND (l.tenant::text = a.tenant::text OR l.tenant::text = 'Italia'::text)
  123.    LEFT JOIN users ON l.first_user_id = users.id AND l.company::text = users.company::text AND l.tenant::text = users.tenant::text
  124.    LEFT JOIN stores s ON s.id = a.store_id AND s.company::text = a.company::text AND s.tenant::text = a.tenant::text
  125.    LEFT JOIN treatments t ON t.id = a.treatment_id AND t.company::text = a.company::text AND t.tenant::text = a.tenant::text
  126.    LEFT JOIN treatment_categories tc ON t.treatment_category_id = tc.id AND t.company::text = tc.company::text AND t.tenant::text = tc.tenant::text
  127.   WHERE l.first_assign_at >= '2025-04-01 00:00:00'::timestamp without time zone AND l.first_assign_at < 'now'::text::date AND lower(l.category::text) <> 'confermacomm'::text AND lower(l.category::text) <> 'confermaop'::text AND (l.f_dup_mkt = 0 OR l.f_dup_mkt IS NULL) AND NOT (EXISTS ( SELECT a4.id
  128.    FROM appointments a4
  129.   WHERE a4.recalled < 4 AND a4.id < a.id AND a4.lead_id = a.lead_id AND a4.company::text = a.company::text AND a4.tenant::text = a.tenant::text AND a4.deleted_at IS NULL)) AND users.active IS TRUE AND l.deleted_at IS NULL AND a.deleted_at IS NULL AND (a.recalled IS NULL OR a.recalled < 4) AND (l.company::text = 'Biolaser'::text OR l.company::text = 'Biosmed'::text)) dati
  130.    LEFT JOIN conversation_analysis_results ON dati.id_italia=conversation_analysis_results.lead_id
  131.    LEFT JOIN rimpalli_per_sessione ON dati.id_italia=rimpalli_per_sessione.lead_id
  132.   GROUP BY dati.company, dati.bot, upper(dati.category::text), to_char(dati.first_assign_at, 'YYYY-MM-DD'::text), to_char(dati.created_at_l, 'YYYY-MM-DD'::text), upper(dati.first_user_id::text), dati.firstname, dati.lastname, dati.treatment, upper(dati.pricing2::text), dati.campagna,
  133.         CASE
  134.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 THEN dati.alias
  135.             ELSE NULL::character varying
  136.         END,
  137.         CASE
  138.             WHEN (dati.f_dup_mkt = 0 OR dati.f_dup_mkt IS NULL) AND dati.recalled IS NOT NULL AND dati.recalled <= 3 THEN dati.name
  139.             ELSE NULL::character varying
  140.         END, dati.stato_bot, dati.dettaglio_stato_bot, dati.id_italia, upper(dati.categoria_lead_d),
  141.         conversation_analysis_results.has_price_request,
  142.         conversation_analysis_results.appointment_taken_after_price,
  143.         rimpalli_per_sessione.ai_rimpalli,
  144.         rimpalli_per_sessione.human_rimpalli,
  145.         rimpalli_per_sessione.has_preferred_call_time
  146.   ORDER BY dati.company, to_char(dati.first_assign_at, 'YYYY-MM-DD'::text) DESC, upper(dati.first_user_id::text), lower(dati.lastname::text), lower(dati.firstname::text);
  147.  
  148.  
  149.  
  150.  
Advertisement
Comments
  • cldscchttn
    1 hour
    # text 0.24 KB | 0 0
    1. Query con i risultati della filiera diretta uniti ai dati provenienti dalle tabelle:
    2. - conversation_analysis_results (has_price_request, appointment_taken_after_price)
    3. - rimpalli_per_sessione (ai_rimpalli, human_rimpalli, has_preferred_call_time)
Add Comment
Please, Sign In to add comment