SQL | Bedrijfsmonitor (Pettrie)

 

 

-- -- ============== Real querys ================== -- Voertuigen verkocht afgelopen 3 maanden with range_values AS ( SELECT date_part('week', $endDate - interval '3 months') as minval, date_part('week', $endDate) as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( SELECT date_part('week', call_date) as weekly, count(*) FROM autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between $endDate - INTERVAL '3 months' and $endDate GROUP BY 1 ) SELECT week_range.week as "label", weekly_counts.count as "value" FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- Morgen in werkplaats -- todayInShop - getOrdersInShop(false) with meta as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select count(planning_start_date ) as "value" , ARRAY[0,(select round(max*1.1 + 0.5,0) from meta)] as "range" , ARRAY[(select round(avg,1) from meta), (select round(avg*1.4 ,1) from meta)] as "delimeters" --, (select round(avg*1.1 ,2) from meta) as avg --, (select round(max*1.1 ,1) from meta) as max from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and (o.planning_start_date <= (current_date + time '23:59:59') and o.planning_ready_date >= (current_date + time '00:00:00')) -- ============== Real querys ================== -- Morgen in werkplaats -- todayInShop - getOrdersInShop(false) with meta as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select 'Werkorder' as "label" , count(planning_start_date ) as "value" , ARRAY[0,(select round(max*1.1 + 0.5,0) from meta)] as "range" , ARRAY[(select round(avg,1) from meta), (select round(avg*1.4 ,1) from meta)] as "delimeters" , ARRAY['Datum','Werkorders'] as "series" --, (select round(avg*1.1 ,2) from meta) as avg --, (select round(max*1.1 ,1) from meta) as max from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date::date = current_date+1 with -- ophalen id voor werkplaats offerte "status" as ( select os.order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Offerte' and os.order_type = 1) , "meta" as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select count(*) value , array[0, ( select round(max * 1.1 + 0.5, 0) from meta)] as "range" , array[( select round(avg, 1) from meta), ( select round(avg * 1.4 , 1) from meta)] as "delimeters" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 1 and o.order_status_id <> ( select * from status) with -- ophalen id voor werkplaats offerte "status" as ( select os.order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Offerte' and os.order_type = 1) , "meta" as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in ('242F127A-7D14-4653-98E5-D5F8E919DA11') and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select count(*) value , array[0, ( select round(max * 1.1 + 0.5, 0) from meta)] as "range" , array[( select round(avg, 1) from meta), ( select round(avg * 1.4 , 1) from meta)] as "delimeters" from autoflex_cloud.orders o where o.organization_id in ('242F127A-7D14-4653-98E5-D5F8E919DA11') and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 1 and o.order_status_id <> ( select * from status) select o.order_number ,planning_start_date , v.license_plate , v.v_display_name , o.description , c.v_display_name --, o.order_status_id , os.status_description from orders o left join vehicles v on v.vehicle_id = o.vehicle_id left join contacts c on c.contact_id = o.contact_id left join order_statuses os on os.order_status_id =o.order_status_id where (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and (o.is_ci_printed = 0 or o.is_ci_printed is null) and (o.is_collect = 0 or o.is_collect is null) and (o.planning_start_date <= '2024-02-09' and o.planning_ready_date >= '2024-02-05') and o.organization_id = '242F127A-7D14-4653-98E5-D5F8E919DA11' order by o.planning_start_date desc /* * APK */ WITH range_values AS ( SELECT date_part('week', $endDate - interval '3 months') as minval, date_part('week', $endDate) as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( SELECT date_part('week', call_date) as weekly, count(*) FROM autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between $endDate - INTERVAL '3 months' and $endDate GROUP BY 1 ) SELECT week_range.week as label, weekly_counts.count FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- APK's nog te doen WITH "meta" as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", vcr.call_date::date as "date" from autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date >= CURRENT_DATE - 60 group by vcr.call_date::date order by vcr.call_date::date desc ) as "range" ) select count(call_date) as "value" , array[0, ( select round(max * 1.1 + 0.5, 0) from meta)] as "range" , array[( select round((round(avg, 1) * 100) / round(max * 1.1 + 0.5, 0),0) from meta), ( select round((round(avg * 1.4, 1) * 100) / round(max * 1.1 + 0.5, 0),0) from meta), ( select round((round(max, 1) * 100) / round(max * 1.1 + 0.5, 0),0) from meta) ] as "delimiters" --, (select round(avg*1.1 ,2) from meta) as avg --, (select round(max*1.1 + 0.5 ,1) from meta) as max from autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off is null and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between date_trunc('week', CURRENT_DATE) and (date_trunc('week', CURRENT_DATE) + '6 days'::interval) -- ============== Real querys ================== -- Status open orders -- ============== Real querys ================== -- Openstaande orders (gauge) -- Orders werkplaats niet offerte, niet gearchiveerd, niet gefactureerd with -- ophalen id voor werkplaats offerte "status" as ( select os.order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Offerte' and os.order_type = 1) , "meta" as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select count(*) value , array[0, ( select round(max * 1.1 + 0.5, 0) from meta)] as "range" , array[( select round(avg, 1) from meta), ( select round(avg * 1.4 , 1) from meta)] as "delimiters" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 1 and o.order_status_id <> ( select * from status) -- ============== Real querys ================== -- Openstaande orders by status on a donut with -- ophalen id voor werkplaats offerte "status" as ( select os.order_status_id, os.status_description, os.column_number, * from autoflex_cloud.order_statuses os order by os.column_number ) select status_description as "label" --,status.column_number , count(*) as "value" from autoflex_cloud.orders o LEFT OUTER JOIN status on status.order_status_id = o.order_status_id where o.organization_id in $organizations and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 1 group by status_description, status.column_number order by status.column_number -- ============== Real querys ================== -- Openstaande orders by status on a donut select to_char(date(delivery_date), 'Day') as label, count(*) as value from autoflex_cloud.orders o where o.organization_id in $organizations and o.order_status_id = (select order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Afgeleverd' and os.order_type = 2) group by to_char(date(delivery_date), 'Day'), extract(isodow from date(o.delivery_date)) order by extract(isodow from date(o.delivery_date)) -- ============== Real querys ================== -- Onderdelen in bestelling (Top 50) select o.order_id, o.order_number as "bi.orderNumber" ,(select v.license_plate from autoflex_cloud.vehicles v where v.vehicle_id = o.vehicle_id) as "bi.licensePlate" , ol.article_number as "Onderdeelnr." , ol.description as "bi.description" , ol.delivery_date as "Verwacht" from order_lines ol join autoflex_cloud.orders o on o.order_id = ol.order_id where ol.organization_id in $organizations and ol.is_ordered = 1 and ol.description is not null -- only active orders and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 1 order by o.order_date desc, ol.delivery_date asc limit 50 -- ============== Real querys ================== -- Insepctie orders (max 50) select o.order_id, o.order_number as "bi.orderNumber" , o.order_date as "Order datum" -- select contacts, fullname ,(select c.v_display_name from autoflex_cloud.contacts c where c.contact_id = o.contact_id) as "bi.contact" -- select vehicle, licenseplage ,(select v.license_plate from autoflex_cloud.vehicles v where v.vehicle_id = o.vehicle_id) as "bi.licensePlate" , o.description as "bi.description" from autoflex_cloud.orders o where (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) -- filter on 'inspectie' and o.order_status_id = 'F62E3B8E-FC41-4893-97F0-4A07ABF1B61A' and o.organization_id in $organizations order by order_date desc, order_id asc limit 50 -- ============== Real querys ================== -- Nog lopende biedingen select vb.bid_on_date as "bi.date" , vb.bid as "bi.price" , vb.brand || ' ' || vb.vehicle_version || ' ' || vb.model as "bi.description" from autoflex_cloud.vehicle_bids vb where vb.organization_id in $organizations and (vb.is_pledged is null or vb.is_pledged=0) order by vb.bid_on_date desc limit 50 -- ============== Real querys ================== -- Wat komt er nog binnen select vb.bid_on_date as "bi.date" , vb.bid as "bi.price" , vb.brand || ' ' || vb.vehicle_version || ' ' || vb.model as "bi.description" from autoflex_cloud.vehicle_bids vb where vb.organization_id in $organizations and (vb.is_pledged = 1) order by vb.bid_on_date desc limit 50 -- ============== Real querys ================== -- Langstaanders, bij aantal with "bidding" as ( select s.dash_long_standing as long , s.dash_just_in as short from autoflex_cloud.settings s where s.organization_id in $organizations ), "stock" as ( select vehicles.vehicle_id --, vehicles.license_plate as "bi.licensePlate" --, vehicles.purchase_date as "bi.date" , case when vehicles.purchase_date::date >= (CURRENT_DATE - (select bidding.short from bidding)) then 'bi.just_in' when vehicles.purchase_date::date >= (CURRENT_DATE - (select bidding.long from bidding)) then 'bi.average' else 'bi.long' end as "langstaander" from autoflex_cloud.vehicles left join purchase_sale_ids purchase_sale_ids on vehicles.vehicle_id=purchase_sale_ids.vehicle_id left join vehicle_purchases vehicle_purchases on purchase_sale_ids.vehicle_purchase_id=vehicle_purchases.vehicle_purchase_id left join purchases purchases on vehicle_purchases.purchase_id=purchases.purchase_id where vehicles.organization_id in $organizations and (vehicles.is_archived is null or vehicles.is_archived = 0) and vehicles.is_company_stock = 1 and purchases.purchase_date is not null order by purchases.purchase_date asc ) select stock.langstaander as label , count(*) as value from stock group by stock.langstaander -- ============== Real querys ================== -- Langstaanders (GRID) with "bidding" as ( select s.dash_long_standing as long , s.dash_just_in as short from autoflex_cloud.settings s where s.organization_id in $organizations ) select vehicles.vehicle_id , vehicles.license_plate as "bi.licensePlate" , purchases.purchase_date as "bi.date" , vehicle_purchases.created_date as "date2" , vehicles.brand || ' ' || vehicles.vehicle_version || ' ' || vehicles.model as "bi.description" , case when vehicles.purchase_date::date >= (CURRENT_DATE - (select bidding.short from bidding)) then 'bi.just_in' when vehicles.purchase_date::date >= (CURRENT_DATE - (select bidding.long from bidding)) then 'bi.average' else 'bi.long' end from autoflex_cloud.vehicles left join purchase_sale_ids purchase_sale_ids on vehicles.vehicle_id=purchase_sale_ids.vehicle_id left join vehicle_purchases vehicle_purchases on purchase_sale_ids.vehicle_purchase_id=vehicle_purchases.vehicle_purchase_id left join purchases purchases on vehicle_purchases.purchase_id=purchases.purchase_id where vehicles.organization_id in $organizations and (vehicles.is_archived is null or vehicles.is_archived = 0) and vehicles.is_company_stock = 1 and purchases.purchase_date is not null order by purchases.purchase_date asc -- ============== Real querys ================== -- Lopende offertes orders (GRID) select o.order_date -- select contacts, fullname ,(select c.v_display_name from autoflex_cloud.contacts c where c.contact_id = o.contact_id) as "bi.contact" -- select vehicle, licenseplage , v.license_plate , o.description from autoflex_cloud.orders o left join order_lines_vehicle_sale olvs on olvs.order_id = o.order_id left join vehicles v on v.vehicle_id =olvs.vehicle_id where o.organization_id in $organizations and (o.is_archived is null or o.is_archived = 0) and (o.is_invoiced is null or o.is_invoiced = 0) and o.order_type = 2 and o.order_status_id = '1D5DC923-EB54-458A-8470-6A50442BC9C3' -- ============== Real querys ================== -- Afleveringen deze week select --to_char(date(o.delivery_date),'Day') as "label" o.delivery_date::date , count(*) as value from autoflex_cloud.orders o where o.organization_id in $organizations and o.delivery_date::date between date_trunc('week', CURRENT_DATE) and (date_trunc('week', CURRENT_DATE) + '6 days'::interval) and o.order_status_id = ( select order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Afgeleverd' and os.order_type = 2) group by o.delivery_date::date order by extract(isodow from date(o.delivery_date)) -- ============== Real querys ================== -- Afleveringen deze week with "date_range" as ( select generate_series( date(date_trunc('week',CURRENT_DATE)::date) ,date(date_trunc('week',CURRENT_DATE)::date +6) , '1 day'::interval)::date as day ), "orders" as ( select --to_char(date(o.delivery_date),'Day') as "label" o.delivery_date::date , count(*) as value from autoflex_cloud.orders o where o.organization_id in $organizations and o.delivery_date::date between date_trunc('week', CURRENT_DATE) and (date_trunc('week', CURRENT_DATE) + '6 days'::interval) and o.order_status_id = ( select order_status_id from autoflex_cloud.order_statuses os where os.status_description = 'Afgeleverd' and os.order_type = 2) group by o.delivery_date::date order by extract(isodow from date(o.delivery_date)) ) select to_char(date(date_range.day),'Day') as "label" --,extract(isodow from date(date_range.day)) --,o.description ,coalesce( o.value, 0) as "value" from date_range left join orders o on o.delivery_date=date_range.day -- ============== Real querys ================== -- APK's in range -- TODO - show all weekdays WITH range_values AS ( SELECT date_part('week', $startDate) as minval, date_part('week', $endDate) as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( SELECT date_part('week', call_date) as weekly, count(*) FROM autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between $startDate and $endDate GROUP BY 1 ) SELECT week_range.week as label, weekly_counts.count as value FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- Totaal aantal orders per periode WITH "range_values" AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval), "week_range" AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), "weekly_counts" AS ( select date_part('week', invoice_date::date) AS weekly ,count(*) from autoflex_cloud.orders o --,sum(o.total_exclusive_tax) where o.organization_id in $organizations and o.is_invoiced = 1 and o.order_type = 1 -- Workshop --and o.order_type = 2 -- Sales and o.invoice_date between $startDate and $endDate GROUP BY 1 ) SELECT week_range.week as "label", coalesce(weekly_counts.count,0) as "value" FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- Werk deze dag voor mij with "meta" as ( select avg(range.count)::decimal as avg, max(range.count) as max --select range.count, range.date from ( select count(*) as "count", o.planning_start_date::date as "date" from autoflex_cloud.orders o where o.organization_id in $organizations and (o.is_invoiced is null or o.is_invoiced = 0) and (o.is_archived is null or o.is_archived = 0) and o.order_type = 1 and o.planning_start_date >= CURRENT_DATE - 60 group by o.planning_start_date::date order by o.planning_start_date::date desc ) as "range" ) select count(distinct o.order_id) as "value" , array[0, ( select round(max * 1.1 + 0.5, 0) from meta)] as "range" , array[( select round((round(avg, 1) * 100) / round(max * 1.1 + 0.5, 0), 0) from meta), ( select round((round(avg * 1.4, 1) * 100) / round(max * 1.1 + 0.5, 0), 0) from meta), ( select round((round(max, 1) * 100) / round(max * 1.1 + 0.5, 0), 0) from meta) ] as "delimiters" from autoflex_cloud.orders o inner join autoflex_cloud.orders_to_employees ote on ote.employee_id = o.employee_id where o.organization_id in $organizations and ((o.employee_id_assigned_to in $employeeIds) or (ote.employee_id in $employeeIds)) and coalesce(o.is_invoiced, 0) = 0 and coalesce(o.is_archived, 0) = 0 and o.order_type = 1 and CURRENT_DATE between o.planning_start_date::date and o.planning_ready_date::date -- weeklyTurnoverTotal - per week WITH range_values AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( select date_part('week', invoice_date::date) AS weekly, count(*) from autoflex_cloud.orders o where o.organization_id in $organizations and o.is_invoiced = 1 and -- workshop o.order_type = 1 and o.invoice_date between $startDate and $endDate -- and -- date_part('year', invoice_date::date) = date_part('year', CURRENT_DATE) GROUP BY 1 ) SELECT week_range.week as label, weekly_counts.count as value FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week --================================ /* * APK */ WITH range_values AS ( SELECT date_part('week', $endDate - interval '3 months') as minval, date_part('week', $endDate) as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( SELECT date_part('week', call_date) as weekly, count(*) FROM autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between $endDate - INTERVAL '3 months' and $endDate GROUP BY 1 ) SELECT week_range.week as label, weekly_counts.count FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- APK's in range WITH range_values AS ( SELECT date_part('week', $startDate) as minval, date_part('week', $endDate) as maxval), week_range AS ( SELECT generate_series(minval::int, maxval::int) as week FROM range_values ), weekly_counts AS ( SELECT date_part('week', call_date) as weekly, count(*) FROM autoflex_cloud.vehicle_check_regulations vcr where vcr.organization_id in $organizations and vcr.is_signed_off = 1 and vcr.is_archived is null or vcr.is_archived = 0 and vcr.call_date is not null and vcr.call_date::date between $startDate and $endDate GROUP BY 1 ) SELECT week_range.week as label, weekly_counts.count as value FROM week_range LEFT OUTER JOIN weekly_counts on week_range.week = weekly_counts.weekly order by week_range.week -- ============== Real querys ================== -- Groei, Voertuigen toegevoegd in Autoflex WITH range_values AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval ), range_week AS ( SELECT generate_series(minval::int, maxval::int) as "week" FROM range_values ), range_data as ( select DATE_PART('week', v.created_date) as "week" , DATE_PART('week', v.created_date) || ' ' || DATE_PART('year', v.created_date) as "label" , count(*) as "value" from autoflex_cloud.vehicles v where v.organization_id in $organizations and v.created_date is not null and v.created_date between $startDate and $endDate group by DATE_PART('year', v.created_date), DATE_PART('week', v.created_date) order by DATE_PART('year', v.created_date) asc, DATE_PART('week', v.created_date) asc ) select range_week.week as "label" , coalesce(range_data.value, 0) as "value" , 123 as "main" , 'Voertuigen' as "title" from range_week left join range_data on range_data.week = range_week.week -- ============== Real querys ================== -- Groei, Contacten/Relaties toegevoegd in Autoflex WITH range_values AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval ), range_week AS ( SELECT generate_series(minval::int, maxval::int) as "week" FROM range_values ), range_data as ( select DATE_PART('week', a.created_date) as "week" , DATE_PART('week', a.created_date) || ' ' || DATE_PART('year', a.created_date) as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.created_date is not null and a.created_date between $startDate and $endDate group by DATE_PART('year', a.created_date), DATE_PART('week', a.created_date) order by DATE_PART('year', a.created_date) asc, DATE_PART('week', a.created_date) asc ) select range_week.week as "label" , coalesce(range_data.value, 0) as "value" , 123 as "main" , 'Contacten' as "title" from range_week left join range_data on range_data.week = range_week.week -- ============== Real querys ================== -- Groei, Werkorders toegevoegd in Autoflex WITH range_values AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval ), range_week AS ( SELECT generate_series(minval::int, maxval::int) as "week" FROM range_values ), range_data as ( select DATE_PART('week', a.created_date) as "week" , DATE_PART('week', a.created_date) || ' ' || DATE_PART('year', a.created_date) as "label" , count(*) as "value" from autoflex_cloud.orders a where a.organization_id in $organizations and a.order_type = 1 --Werkorders and a.created_date is not null and a.created_date between $startDate and $endDate group by DATE_PART('year', a.created_date), DATE_PART('week', a.created_date) order by DATE_PART('year', a.created_date) asc, DATE_PART('week', a.created_date) asc ) select range_week.week as "label" , coalesce(range_data.value, 0) as "value" , 123 as "main" , 'Werkorders' as "title" from range_week left join range_data on range_data.week = range_week.week -- ============== Real querys ================== -- Actieve Relaties / per week in Autoflex WITH range_values AS ( SELECT to_char($startDate, 'ww')::int as minval, to_char($endDate, 'ww')::int as maxval ), range_week AS ( SELECT generate_series(minval::int, maxval::int) as "week" FROM range_values ), range_data as ( select DATE_PART('week', a.last_visit_date) as "week" , DATE_PART('week', a.last_visit_date) || ' ' || DATE_PART('year', a.last_visit_date) as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.last_visit_date is not null and a.last_visit_date between $startDate and $endDate group by DATE_PART('year', a.last_visit_date), DATE_PART('week', a.last_visit_date) order by DATE_PART('year', a.last_visit_date) asc, DATE_PART('week', a.last_visit_date) asc ), range_total as ( select count(*) as "total" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.last_visit_date is not null ) select range_week.week as "label" , coalesce(range_data.value, 0) as "value" , (select * from range_total) as "main" , 'Totaal | per week' as "title" from range_week left join range_data on range_data.week = range_week.week -- ============== Real querys ================== -- Relaties per type -- "Handel": 3, -- "Leverancier": 4, -- "Particulier": 1, -- "Bedrijf": 2 select a.contact_type , case when a.contact_type = 1 then 'Particulier' when a.contact_type = 2 then 'Bedrijf' when a.contact_type = 3 then 'Handel' when a.contact_type = 4 then 'Leverancier' else 'Onbekend' end as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations group by a.contact_type order by a.contact_type asc -- ============== Real querys ================== -- Relaties per gender -- "Man": 3, -- "Vrouw": 4, -- "Onbekend": 1, select a.gender , case when a.gender = 1 then 'Man' when a.gender = 2 then 'Vrouw' when a.gender = 3 then 'Onbekend' else 'Niet ingevuld' end as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations group by a.gender order by a.gender asc -- ============== Real querys ================== -- Realties: Verjaardagen per dag v/d week, aantal with range_dayofweek as ( select generate_series(1, 7) as "dayofweek" ), range_data as ( select extract(isodow from a.date_birth::date) as "dayofweek" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.date_birth is not null group by extract(isodow from a.date_birth::date) order by extract(isodow from a.date_birth::date) asc ) -- select ('{bi.monday,bi.tuesday,bi.wednesday,bi.thursday,bi.friday,bi.saturday,bi.sunday}'::text[])[range_dayofweek.dayofweek] as "label" , coalesce(range_data.value,0) as "value" from range_dayofweek left join range_data on range_data.dayofweek = range_dayofweek.dayofweek order by range_dayofweek.dayofweek -- ============== Real querys ================== -- Relaties niet volledig -- GENDER: "Onbekend": 1, or null (select case when a.gender = 3 then 'Geslacht: Onbekend' else 'Geslacht: Niet ingevuld' end as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and (a.gender=3 or a.gender is null) group by a.gender order by a.gender asc ) UNION -- TOTAL (select 'Totaal relaties' as "label" ,count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations ) union --Archived (select 'Gearchiveerd' as "label" ,count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.is_archived = 1 ) union --Blocked (select 'Geblokkeerd' as "label" ,count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.is_blocked = 1 ) order by "label" -- ============== Real querys ================== -- CONTACT: Wrong address (top 50) select a.contact_id ,a.v_display_name as "bi.contact" , a.contact_number as "Relatienummer" , a.shortname as "Zoeknaam" , case when a.contact_type = 1 then 'Particulier' when a.contact_type = 2 then 'Bedrijf' when a.contact_type = 3 then 'Handel' when a.contact_type = 4 then 'Leverancier' else 'Onbekend' end as "Type" , case when a.postalcode is null then 'Adres: postcode is leeg' when a.city is null then 'Adres: Plaatsnaam is leeg' when a.address is null then 'Adres: Straat is leeg' end as "Probleem" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.v_display_name != '' and ( a.postalcode is null or a.city is null or a.address is null ) order by a.v_display_name asc limit 50 -- ============== Real querys ================== -- CONTACT: Tag's use + count with range_tag as ( select a.description as "label" , a.contact_crm_tag_id as "id" from autoflex_cloud.contact_crm_tags a where a.organization_id in $organizations ), range_data as ( select jsonb_array_elements_text(crm_tags->'tags') as "id" , count(*) as "value" --,a.crm_tags->>'tags' from autoflex_cloud.contacts a left join autoflex_cloud.contact_crm_tags cct on cct.contact_crm_tag_id = a.contact_id where a.organization_id in $organizations -- NO empty CRM_tags and a.crm_tags is not null and a.crm_tags::jsonb <> '{}'::jsonb and a.crm_tags::jsonb <> '{"tags": []}'::jsonb group by jsonb_array_elements_text(crm_tags->'tags') ) select range_tag.label as "label" , range_data.value as "value" from range_data join range_tag on range_tag.id = range_data.id order by range_data.value desc -- ============== Real querys ================== -- CONTACT GRID: contact communication info with "range_type" as ( select a.description as "label" , a.contact_communication_type_id as "id" from autoflex_cloud.contact_communication_types a order by a.description asc ) select a.contact_id , a.v_display_name as "bi.contact" , (select range_type.label from range_type where range_type.id = cc.contact_communication_type_id) as "type" , cc.communication_value as "value" , cc.description as "info" --, cc.sort_order as "order" from autoflex_cloud.contacts a join autoflex_cloud.contact_communications cc on cc.contact_id = a.contact_id where a.organization_id in $organizations order by a.v_display_name asc, cc.sort_order -- ============== Real querys ================== -- CONTACT: contact communication info with "range_type" as ( select a.description as "label" , a.contact_communication_type_id as "id" from autoflex_cloud.contact_communication_types a order by a.description asc ) select t.label as "label" , count(*) as "value" from autoflex_cloud.contacts a join autoflex_cloud.contact_communications cc on cc.contact_id = a.contact_id join range_type t on t.id = cc.contact_communication_type_id where a.organization_id in $organizations group by t.label -- ============== Real querys ================== -- CONTACT: Group by city select initcap(a.city) as "label" , count(*) as "value" from autoflex_cloud.contacts a where a.organization_id in $organizations and a.city is not null and a.city <> '' group by initcap(a.city) order by count(*) desc limit 50 -- ============== Real querys ================== -- CONTACT: Soort role gekoppeld aan voertuig select vr.description as "label" , count(*) as "value" from autoflex_cloud.contacts a left join autoflex_cloud.vehicle_role_lines as vrl on vrl.contact_id = a.contact_id left join autoflex_cloud.vehicles v on v.vehicle_id = vrl.vehicle_id left join autoflex_cloud.vehicle_roles vr on vr.vehicle_role_id = vrl.vehicle_role_id where a.organization_id in $organizations and vrl.vehicle_id is not null group by vr.description order by count(*) desc -- ============== Real querys ================== -- CONTACT GRID: Contact with role connected to vehicle select a.contact_id , a.v_display_name as "bi.contact" , vr.description , v.vehicle_id , v.v_display_name as "bi.vehicle" , v.vehicle_id , v.license_plate as "bi.licensePlate" from autoflex_cloud.contacts a left join autoflex_cloud.vehicle_role_lines as vrl on vrl.contact_id = a.contact_id left join autoflex_cloud.vehicles v on v.vehicle_id = vrl.vehicle_id left join autoflex_cloud.vehicle_roles vr on vr.vehicle_role_id = vrl.vehicle_role_id where a.organization_id in $organizations and vrl.vehicle_id is not null order by a.v_display_name asc, vrl.sort_order asc, v.v_display_name asc -- ============== Real querys ================== -- MANAGEMENT: !@#TODO select a.v_display_name , o.description , o.invoice_status , o.total_inclusive_tax from autoflex_cloud.contacts a join autoflex_cloud.orders o on o.contact_id = a.contact_id and o.invoice_status = 1 and o.total_inclusive_tax > 0 where a.organization_id in $organizations order by a.v_display_name asc -- ============== Real querys ================== -- Customer GRID: show invoice with open value, days open select a.contact_id , a.v_display_name as "bi.contact" , o.description as "Omschrijving" --, o.invoice_status , o.total_inclusive_tax as "bi.price Totaal" --, o.is_invoiced , o.open_amount as "bi.price Open" , o.invoice_date::date as "bi.date Factuur datum" , (CURRENT_DATE - o.invoice_date::date) AS "Dagen open" from autoflex_cloud.contacts a join autoflex_cloud.orders o on o.contact_id = a.contact_id and o.invoice_status = 1 and o.total_inclusive_tax > 0 and o.open_amount > 0 where a.organization_id in $organizations order by (CURRENT_DATE - o.invoice_date::date) desc limit 25 -- ============== Real querys ================== -- Customer GRID: show invoice with open value, days open select a.contact_id , a.v_display_name as "bi.contact" , o.description as "Omschrijving" --, o.invoice_status , o.total_inclusive_tax as "bi.price Totaal" --, o.is_invoiced -- , o.open_amount as "bi.price Open" , o.invoice_date::date as "bi.date Factuur datum" , (CURRENT_DATE - o.invoice_date::date) AS "Dagen open" from autoflex_cloud.contacts a join autoflex_cloud.orders o on o.contact_id = a.contact_id and o.invoice_status = 1 and o.total_inclusive_tax > 0 and (CURRENT_DATE - o.invoice_date::date) < 180 where a.organization_id in $organizations order by (CURRENT_DATE - o.invoice_date::date) desc limit 100 -- ============== Real querys ================== -- Customer GRID: show invoice with open value, days open select a.contact_number as "Relatie#" , a.contact_id , a.v_display_name as "bi.contact" , o.description as "Omschrijving" , o.total_inclusive_tax as "bi.price Totaal" --, o.is_financial_exported --, o.open_amount as "bi.price Open" , case when (CURRENT_DATE - o.invoice_date::date) between 15 and 30 then o.open_amount else 0 end as "1-30" , case when (CURRENT_DATE - o.invoice_date::date) between 31 and 60 then o.open_amount else 0 end as "31-60" , case when (CURRENT_DATE - o.invoice_date::date) between 61 and 90 then o.open_amount else 0 end as "61-90" , case when (CURRENT_DATE - o.invoice_date::date) > 90 then o.open_amount else 0 end as "> 90" , (CURRENT_DATE - o.invoice_date::date) AS "Dagen open" , o.invoice_date::date as "bi.date Factuur datum" from autoflex_cloud.contacts a join autoflex_cloud.orders o on o.contact_id = a.contact_id and o.invoice_status = 1 and o.total_inclusive_tax > 0 and o.is_financial_exported = 1 and o.open_amount > 0 and (CURRENT_DATE - o.invoice_date::date) > 15 --and (CURRENT_DATE - o.invoice_date::date) < 180 where a.organization_id in $organizations --a.organization_id = 'AF5298D4-10EB-4C72-9F5E-C25733FEEDFF' order by --(CURRENT_DATE - o.invoice_date::date) asc o.invoice_date::date desc limit 100