eventhub/src/main/resources/sql/tachograph/card-specific-condition.sql

109 lines
4.3 KiB
SQL

/*
* CardSpecificCondition SPECIFIC_CONDITION 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
cond.ID,
cond.EntryTime as occurred_at,
sc.Condition as condition_code,
cond.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,
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, cond.ID_FileLog) as source_package_id_raw,
coalesce(fl.ID_Card, cond.ID_Card) as source_package_entity_id_raw,
coalesce(fl.DownloadFrom, cond.EntryTime) as source_package_period_from,
coalesce(fl.DownloadTo, cond.EntryTime) as source_package_period_to,
coalesce(fl.CreationDate, fl.TStamp) as source_package_imported_at
from dbo.CardSpecificConditions cond
join dbo.SpecificCondition sc on sc.ID = cond.ID_SpecificCondition
join dbo.Card c on c.ID = cond.ID_Card
left join dbo.Nation cn on cn.ID = c.ID_Nation
left join dbo.FileLog fl on fl.ID = cond.ID_FileLog
outer apply (
select top 1 used.ID_Vehicle
from dbo.CardVehiclesUsed used
where used.ID_Card = cond.ID_Card
and (used.FirstUse is null or used.FirstUse <= cond.EntryTime)
and (used.LastUse is null or used.LastUse >= cond.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 cond.EntryTime >= :occurredFrom)
and (:occurredTo is null or cond.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_SPECIFIC_CONDITION:', base.ID) as external_source_event_id,
base.occurred_at,
base.received_partner_at,
'SPECIFIC_CONDITION' as event_domain,
case when base.condition_code in (3, 4) then 'FERRY_TRAIN' else 'OUT' end as event_type,
case when base.condition_code in (1, 3) then 'BEGIN' else 'END' end as lifecycle,
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
)
)
)