121 lines
4.7 KiB
SQL
121 lines
4.7 KiB
SQL
/*
|
|
* CardPlaces PLACE extraction for the bytebar tachograph schema.
|
|
*/
|
|
with OrgTree as (
|
|
select org.I_90021_OID
|
|
from dbo.GetOrganisationTree(null, :organisationId, 0, null) org
|
|
where :organisationId is not null
|
|
)
|
|
,
|
|
Base as (
|
|
select
|
|
place.ID,
|
|
place.EntryTime as occurred_at,
|
|
cast(place.EntryType as int) as entry_type,
|
|
place.Odo,
|
|
place.ID_FileLog,
|
|
c.ID as card_id,
|
|
c.ID_Driver as driver_id,
|
|
cn.AlphaCode as driver_card_nation,
|
|
c.CardNumber as driver_card_number,
|
|
placeNation.AlphaCode as country,
|
|
coalesce(region.AlphaCode, region.Name) as region,
|
|
gnss.Latitude as latitude,
|
|
gnss.Longitude as longitude,
|
|
v.ID as vehicle_registration_id,
|
|
v.ID_VehicleIdentification as vehicle_identification_id,
|
|
vi.VIN as vehicle_vin,
|
|
vehicleNation.AlphaCode as vehicle_registration_nation,
|
|
v.VRN as vehicle_registration_number,
|
|
coalesce(fl.DownloadDate, fl.OriginalDownloadDate, fl.TStamp, fl.CreationDate) as received_partner_at,
|
|
coalesce(fl.ID, place.ID_FileLog) as source_package_id_raw,
|
|
coalesce(fl.ID_Card, place.ID_Card) as source_package_entity_id_raw,
|
|
coalesce(fl.DownloadFrom, place.EntryTime) as source_package_period_from,
|
|
coalesce(fl.DownloadTo, place.EntryTime) as source_package_period_to,
|
|
coalesce(fl.CreationDate, fl.TStamp) as source_package_imported_at
|
|
from dbo.CardPlaces place
|
|
join dbo.Card c on c.ID = place.ID_Card
|
|
left join dbo.Nation cn on cn.ID = c.ID_Nation
|
|
left join dbo.Nation placeNation on placeNation.ID = place.ID_Nation
|
|
left join dbo.Region region on region.ID = place.ID_Region
|
|
left join dbo.GnssPlace gnss on gnss.ID = place.ID_GnssPlace
|
|
left join dbo.FileLog fl on fl.ID = place.ID_FileLog
|
|
outer apply (
|
|
select top 1 used.ID_Vehicle
|
|
from dbo.CardVehiclesUsed used
|
|
where used.ID_Card = place.ID_Card
|
|
and (used.FirstUse is null or used.FirstUse <= place.EntryTime)
|
|
and (used.LastUse is null or used.LastUse >= place.EntryTime)
|
|
order by
|
|
used.FirstUse desc,
|
|
used.ID desc
|
|
) cvu
|
|
left join dbo.Vehicle v on v.ID = cvu.ID_Vehicle
|
|
left join dbo.VehicleIdentification vi on vi.ID = v.ID_VehicleIdentification
|
|
left join dbo.Nation vehicleNation on vehicleNation.ID = v.ID_Nation
|
|
where (:occurredFrom is null or place.EntryTime >= :occurredFrom)
|
|
and (:occurredTo is null or place.EntryTime < :occurredTo)
|
|
and (
|
|
:organisationId is null
|
|
or exists (
|
|
select 1
|
|
from dbo.Driver_I_90021 rel
|
|
join OrgTree on OrgTree.I_90021_OID = rel.ID_I_90021
|
|
where rel.ID_Driver = c.ID_Driver
|
|
and rel.GILT_BIS is null
|
|
)
|
|
)
|
|
)
|
|
,
|
|
Extracted as (
|
|
select
|
|
cast(base.ID as varchar(128)) as source_row_id,
|
|
concat('TACHOGRAPH:CARD_PLACE:', base.ID) as external_source_event_id,
|
|
|
|
base.occurred_at,
|
|
base.received_partner_at,
|
|
cast(base.Odo as bigint) * 1000 as odometer_m,
|
|
base.latitude,
|
|
base.longitude,
|
|
base.country,
|
|
base.region,
|
|
'WORKING_DAY_PLACE_RECORDED' as event_type,
|
|
case when base.entry_type in (0, 2, 4, 6) then 'START' else 'END' end as lifecycle,
|
|
cast(case when base.entry_type in (2, 3, 4, 5) then 1 else 0 end as bit) as manual_entry,
|
|
|
|
cast(base.driver_id as varchar(128)) as driver_source_entity_id,
|
|
base.driver_card_nation,
|
|
base.driver_card_number,
|
|
|
|
cast(base.vehicle_identification_id as varchar(128)) as vehicle_source_entity_id,
|
|
base.vehicle_vin,
|
|
cast(base.vehicle_registration_id as varchar(128)) as vehicle_registration_source_entity_id,
|
|
base.vehicle_registration_nation,
|
|
base.vehicle_registration_number,
|
|
|
|
'DRIVER_CARD' as source_package_kind,
|
|
cast(base.source_package_id_raw as varchar(128)) as source_package_id,
|
|
base.source_package_id_raw as source_package_sort_id,
|
|
cast(base.source_package_entity_id_raw as varchar(128)) as source_package_entity_id,
|
|
base.source_package_period_from,
|
|
base.source_package_period_to,
|
|
base.source_package_imported_at
|
|
from Base base
|
|
)
|
|
select *
|
|
from Extracted extracted
|
|
where (
|
|
:sourcePackageWatermarkEnabled = 0
|
|
or :lastSourcePackageImportedAt is null
|
|
or extracted.source_package_imported_at is null
|
|
or extracted.source_package_imported_at > :lastSourcePackageImportedAt
|
|
or (
|
|
extracted.source_package_imported_at = :lastSourcePackageImportedAt
|
|
and (
|
|
:lastSourcePackageIdNumeric is null
|
|
or extracted.source_package_sort_id is null
|
|
or extracted.source_package_sort_id > :lastSourcePackageIdNumeric
|
|
)
|
|
)
|
|
)
|