Advertisement
Guest User

Untitled

a guest
Nov 11th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {% autoescape off %}
  2. with min_date as (
  3.   select sess.company, min(sess."startTime"::timestamp::date) min_date
  4.   from contact_session sess
  5.   where 1 = 1
  6. {% if activities %}
  7.   and sess."startedWithActivity_id" in ({{ activities }})
  8. {% endif %}
  9.   group by sess.company
  10. )
  11. ,weeks as (
  12. SELECT company,
  13.        ROW_NUMBER() OVER(PARTITION BY company ORDER BY d) week_number,
  14.        d as week_start,
  15.        d+6 AS week_end
  16. FROM  (
  17.   SELECT company, generate_series(d1
  18.                         ,d2
  19.                         ,interval '1 week')::date AS d
  20.   FROM  ( SELECT company
  21.                , date_trunc('week', min_date.min_date) d1
  22.                , date_trunc('week', CURRENT_DATE) d2
  23.           from min_date) sub1
  24.   ) sub2
  25. )
  26. , session_info as (
  27.   SELECT sess.id
  28.   , COALESCE(part.id, 0) part_id
  29.   , sess."isMulti"
  30.   , sess.company
  31.   , sess.spot_id
  32.   , sess."startTime"::timestamp::DATE DATE
  33.   , sess."hourCount"
  34.   , sess.consultant_id
  35.   , sess.coordinator_id
  36.   , weeks.week_number
  37.   , CASE WHEN sess."contactAttempts" IS NULL THEN '' ELSE to_char(sess."contactAttempts", '99999') END attempts
  38.   , consultant."lastName" || ' ' ||  consultant."firstName" consultant
  39.   , consultant.agency_id
  40.   , spot.raw->>'City' city
  41.   , spot.raw->>'Region' region
  42.   , spot.raw->>'Business Unit' unit
  43.   , spot.raw->>'outlet legal name' legal_name
  44.   , spot.raw->>'outlet name' outlet_name
  45.   , spot.raw->>'RKA' rka
  46.   , spot.raw->>'Trade Channel Name' channel
  47.   , spot.raw->>'Territory Name' territory
  48.   , spot.customer_number
  49.   , spot.address
  50.   , agency.title agency
  51.   , coordinator."lastName" || ' ' ||  coordinator."firstName" coordinator
  52.   , CASE
  53.        WHEN sess."stopTime" IS null or EXTRACT(YEAR from sess."stopTime") < 2000 THEN 0
  54.        ELSE LEAST(EXTRACT(EPOCH FROM sess."stopTime"-sess."startTime")/3600, coalesce(DATE_PART('hour', "plannedEndTime" - "plannedStartTime" ), sess."hourCount"))
  55.     END total_session_length
  56. , CASE WHEN part.id IS NULL THEN
  57.     CASE
  58.       WHEN sess."stopTime" IS null or EXTRACT(YEAR from sess."stopTime") < 2000  THEN 0
  59.       ELSE LEAST(EXTRACT(EPOCH FROM sess."stopTime"-sess."startTime")/3600, coalesce(DATE_PART('hour', "plannedEndTime" - "plannedStartTime" ), sess."hourCount"))
  60.     END
  61.     ELSE
  62.         case when part."stopTimeStr" is null or part."stopTimeStr" = '' then 0
  63.         ELSE
  64.             (EXTRACT(EPOCH FROM to_timestamp(part."stopTimeStr", 'MM/DD/YYYY HH24:MI:SS'))-
  65.             EXTRACT(EPOCH FROM to_timestamp(part."startTimeStr", 'MM/DD/YYYY HH24:MI:SS')))/3600
  66.         END
  67.     END session_length
  68.   , coalesce(DATE_PART('hour', "plannedEndTime" - "plannedStartTime" ), sess."hourCount") hour_count
  69.   , CASE WHEN part.id IS NULL
  70.        THEN to_timestamp(sess."startTimeStr", 'MM/DD/YYYY HH24:MI:SS')::TIMESTAMP WITHOUT TIME zone
  71.        ELSE to_timestamp(part."startTimeStr", 'MM/DD/YYYY HH24:MI:SS')::TIMESTAMP WITHOUT TIME zone
  72.     END "startTime"
  73.   , CASE WHEN part.id IS NULL
  74.      THEN to_timestamp(sess."stopTimeStr", 'MM/DD/YYYY HH24:MI:SS')::TIMESTAMP WITHOUT TIME zone
  75.      ELSE
  76.         case
  77.             when part."stopTimeStr" is null or part."stopTimeStr" = ''
  78.                 then to_timestamp(sess."stopTimeStr", 'MM/DD/YYYY HH24:MI:SS')::TIMESTAMP WITHOUT TIME zone
  79.             ELSE
  80.                 to_timestamp(part."stopTimeStr", 'MM/DD/YYYY HH24:MI:SS')::TIMESTAMP WITHOUT TIME zone
  81.         END
  82.     END "stopTime"
  83. FROM contact_session sess
  84. inner join weeks
  85.     on sess."startTime"::timestamp::date >= weeks.week_start
  86.    and sess."startTime"::timestamp::date <= weeks.week_end
  87. left join contact_sessionpart part
  88. ON part.session_id = sess.id
  89. left join points_spot spot
  90.   on spot.id = coalesce(part.spot_id, sess.spot_id)
  91. left join users_user coordinator
  92.    on coordinator.id = sess.coordinator_id
  93. inner join users_user consultant
  94.    on consultant.id = sess.consultant_id
  95. {% if agencies %}
  96.   and consultant.agency_id in ({{ agencies }})
  97. {% endif %}
  98. {% if agency %}
  99.   and consultant.agency_id = {{ agency}}
  100. {% endif %}
  101. left join company_agency agency
  102.    on agency.id = sess.agency_id
  103. where 1 = 1
  104. {% if units %}
  105.   and spot."businessUnit_id" in ({{ units }})
  106. {% endif %}
  107. {% if activities %}
  108.   and sess."startedWithActivity_id" in ({{ activities }})
  109. {% endif %}
  110.   and EXTRACT(YEAR FROM to_timestamp(sess."startTimeStr", 'MM/DD/YYYY HH24:MI:SS')::timestamp without time zone) > 1900
  111. {% if coordinator %}
  112.   and sess.coordinator_id = {{ coordinator }}
  113. {% endif %}
  114. {% if date_start %}
  115.   and sess."plannedStartTime" >= to_date('{{ date_start }}', 'YYYY-MM-DD')
  116. {% endif %}
  117. {% if date_end %}
  118.   and sess."plannedStartTime" <= to_date('{{ date_end}}', 'YYYY-MM-DD')+ INTERVAL '1 day'
  119. {% endif %}
  120. )
  121. select si.id as session
  122.      , max(si.unit) unit
  123.      , max(si.week_number) week_number
  124.      , max(si.region) region
  125.      , max(si.agency) agency
  126.      , max(si.city) city
  127.      , max(si.coordinator) coordinator
  128.      , max(si.consultant) consultant
  129.      , '' s3
  130.      , max(si.date) session_date
  131.      , max(si.hour_count) hour_count
  132.      , max(si.total_session_length)/24 total_sessionlength
  133.      , max(si.session_length)/24 session_length
  134.      , max(si."startTime") start_time
  135.      , max(si."stopTime") stop_time
  136.      , max(si.customer_number) customer_number
  137.      , max(si.legal_name)
  138.      , max(si.outlet_name) outlet_name
  139.      , max(si.address) address
  140.      , max(si.rka) rka
  141.      , max(si.channel) channel
  142.      , max(si.territory) territory
  143.      , max(si.attempts) attempts
  144.      , count(cnt."contactEventId") contacts_count
  145. from session_info si
  146.  
  147. left join contact_contacteventcontact cnt
  148.    on si.id=cnt.session_id
  149. group by si.id
  150. order by 10, 8, 1 -- session_date, consultant, session_id
  151. {% endautoescape %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement