Artikkeliin on koottu tyypillisiä poissaolojen poimintaan liittyviä esimerkkejä. Esimerkit ovat tehty siirrettäväksi SD Worx poissaolot muodossa. SD Worx on aiemmalta nimeltään Personec W. Muodon kuvauksen löydät täältä. Sympaan siirron paras käytäntö löytyy täältä.
Poissaoloja käsitellään usein palkkajärjestelmissä eri tavoin. Poissaoloja poimiessa tulee tietää, halutaanko poissaolotieto siirtää sen mukaisena kuin se on kirjattu tapahtumaan vai halutaanko poissaolosta siirtää poissaolona tulkitut tunnit tai päivät.
Tyypillisesti erilaiset vapaat siirretään siten, että yksi kirjattu poissaolotapahtuma siirretään yhdellä rivillä. Alkupäiväksi siirretään kirjatun poissaolotapahtuman alkupäivä ja loppupäiväksi kirjatun poissaolotapahtuman loppupäivä. Rivin kestona voidaan siirtää joko kirjatun tapahtuman päivien kokonaismäärä tai tulkittujen työpäivien/työtuntien määrä. Jos poiminnassa halutaan siirtää tieto tapahtumien muokkauksesta ja poistosta, niin voidaan se tehdä esimerkkien sääntöjoukon esimerkit - tapahtumahistoria mukaisena.
Erilaiset vapaat kuten pankkivapaa ja työajan lyhennysvapaa yleensä poimitaan sen mukaisesti, kuinka monta päivää tai tuntia tulkinnan tuloksena on syntynyt. Vapaiden siirrossa päivämääränä poimitaan se päivämäärä, mille päivälle tulkinta on muodostunut. Usein tällaiset vapaat siirretään rivinä per päivä.
Sairauspoissaolot poimitaan yleensä sen mukaisesti, kuinka monta päivää tai tuntia tulkinnan tuloksena on syntynyt. Sairauspoissaolo siirretään yhtenä jaksona, jossa rivin päivämääriksi muodostuu tulkitun jakson ensimmäinen korvattava päivä sekä tulkitun jakson viimeinen korvattava päivä.
Yllä olevat ovat tyypillisiä esimerkkejä kyseisten tietojen siirroista. Palkkajärjestelmäkohtaisesti tietojen poiminta voidaan haluta toteuttaa eri tavalla. Ennen poissaolojen poiminnan määrittämistä tulee olla selvää kuinka tieto halutaan muodostaa.
Löydät tietokantataulujen sarakekuvaukset täältä
Tyypilliset työajan poiminnan esimerkit ovat tässä artikkelissa ja projektirakenteen tai projektien huomioiden poiminta tässä artikkelissa.
Esimerkeissä oleva kenttä CustomData1 on käytettävissä CGI-, Mepco- ja Pegasos-palkkaliittymissä sekä SD Worx - ja Sympa-poissaololiittymissä.
Lisäksi kenttä on käytettävissä Visma L7/LTR -kokonaisratkaisussa.
Poimitaan kokopäivän sairausloma, ja muodostetaan palkkalaji sairausloman lajin perusteella
Esimerkissä poimitaan kokopäivän sairauspoissaolot ulkoiseen järjestelmään. Poiminnassa siirretään tieto siitä, onko kyseessä kokopäivän poissaolo vai ei, sekä tieto hyväksynnästä. Päivämääriksi poimitaan tapahtuman alku- ja loppupäivämäärät. Tapahtumat ryhmitellään per tapahtuma.
Poimintaan sisällytetään tapahtuman tunniste (ActivityId), jolla vastaanottava järjestelmä voi päivittää sairausloman tiedot niissä tilanteissa, kun se muuttuu. Tapahtuman poistoa ei siirretä.
Yhtenä poiminnan ehtona on, että päivällä ei ole sellaisia kirjauksia, joista on muodostunut töitä (AND SalaryRenderingDate NOT IN ). Tällöin kyseessä on kokopäivän poissaolo. Mikäli poimitaan osapäivän poissaolo niin ehto kirjoitetaan muotoon AND SalaryRenderingDate IN. Korvaathan ' '-merkkien välissä olevan tekstin, esim. 'PALKATON_ITSESAIRAS', oikealla palkkalajikoodilla.
SELECT *, SUM(Amount) / 3600 AS OverrideAmount,
MIN(SalaryRenderingDate) As OverrideStartDatetime,
MAX(SalaryRenderingDate) AS OverrideEndDatetime,
IsApproved AS CustomData1, CASE
WHEN SickLeaveTypeId = 1 AND CompensationType = 'UnpaidBasicTime' THEN 'PALKATON_ITSESAIRAS' -- palkaton itse sairas
WHEN SickLeaveTypeId = 2 AND CompensationType = 'UnpaidBasicTime' THEN 'PALKATON_LAPSISAIRAS' -- palkaton lapsi sairas
WHEN SickLeaveTypeId = 3 AND CompensationType = 'UnpaidBasicTime' THEN 'PALKATON_TYOTAPATURMA_TOISSA' -- palkaton työtapaturma työpaikalla
WHEN SickLeaveTypeId = 4 AND CompensationType = 'UnpaidBasicTime' THEN 'PALKATON_TYOTAPATURMA_TYOMATKALLA' -- palkaton työtapaturma työmatkalla
WHEN SickLeaveTypeId = 5 AND CompensationType = 'UnpaidBasicTime' THEN 'PALKATON_TAPATURMA_VAPAALLA' --palkaton vapaa-ajan tapaturma
WHEN SickLeaveTypeId = 1 AND CompensationType = 'BasicTime' THEN 'PALKALLINEN_ITSESAIRAS' -- palkallinen itse sairas WHEN SickLeaveTypeId = 2 AND CompensationType = 'BasicTime' THEN 'PALKALLINEN_LAPSISAIRAS' -- palkallinen lapsi sairas WHEN SickLeaveTypeId = 3 AND CompensationType = 'BasicTime' THEN 'PALKALLINEN_TYOTAPATURMA_TOISSA' -- palkallinen työtapaturma työpaikalla WHEN SickLeaveTypeId = 4 AND CompensationType = 'BasicTime' THEN 'PALKALLINEN_TYOTAPATURMA_TYOMATKALLA' -- palkallinen työtapaturma työmatkalla WHEN SickLeaveTypeId = 5 AND CompensationType = 'BasicTime' THEN 'PALKALLINEN_TAPATURMA_VAPAALLA' --palkallinen vapaa-ajan tapaturma ELSE 'NOT DEFINED' END AS OverrideSalaryCode
FROM UserSalaryData
WHERE ActivityTypeCode = '2' --sick leave
AND CompensationType IN ('BasicTime', 'UnpaidBasicTime', 'ReducedRateTime') -- this row exists to prevent lunch or other events from getting included
AND EventStartDateTime > date(SalaryRenderingDate , '-2 months') -- pick events that are starting less than 60 days ago. This is done as the amount of hours are fetched from the range and if older events are picked then the amount of hours would start to decrease as the 'window' moves over it.
AND SalaryRenderingDate NOT IN (SELECT SalaryRenderingDate FROM UserSalaryData WHERE ActivityTypeCode IN ('1') --Work event type AND CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime', 'AdditionalWork', 'OvertimeDaily50', 'OvertimeDaily100', 'OvertimeWeekly50', 'OvertimeWeekly100', 'OvertimeSunday50', 'OvertimeSunday100', 'PublicHoliday', 'YearLeave')) GROUP BY ActivityId
Poimitaan tulkitut poissaoloina käsiteltävät tapahtumatyypit
SELECT *, SUM(Amount) / 3600 AS OverrideAmount,
MIN(SalaryRenderingDate) As OverrideStartDatetime,
MAX(SalaryRenderingDate) AS OverrideEndDatetime,
IsApproved AS CustomData1, CASE -- put into this list the event types picked by the rule. Also update the list in the WHERE clause WHEN ActivityTypeCode = 'SALDOVAPAA' THEN 'SALDOVAPAA' -- Saldovapaa WHEN ActivityTypeCode = 'YLITYOVAPAA' THEN 'YLITYOVAPAA' -- Ylityövapaa WHEN ActivityTypeCode = 'PALKALLINEN_KOULUTUS' THEN 'PALKALLINEN_KOULUTUS' -- Koulutus WHEN ActivityTypeCode = 'LOMAUTUS' THEN 'LOMAUTUS' -- Lomautus WHEN ActivityTypeCode = 'PANKKIVAPAA' THEN 'PANKKIVAPAA' -- Pankkivapaa ELSE 'NOT DEFINED' END AS OverrideSalaryCode FROM UserSalaryData WHERE ActivityTypeCode IN ('16','278','25','23','102') -- update this list to include the event types to match the list above
AND CompensationType NOT IN ('MarkedTime') AND SalaryRenderingDate NOT IN (SELECT SalaryRenderingDate FROM UserSalaryData WHERE ActivityTypeCode IN ('1') --Work event type AND CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime', 'AdditionalWork', 'OvertimeDaily50', 'OvertimeDaily100', 'OvertimeWeekly50', 'OvertimeWeekly100', 'OvertimeSunday50', 'OvertimeSunday100', 'PublicHoliday', 'YearLeave')) GROUP BY ActivityId
Poimitaan tulkitut kokopäivän poissaolotapahtumatyypin kirjaukset yhdellä säännöllä siten, että eri poissaololajeilla on oma palkkalajin koodinsa.
Kokopäivän poissaolo tunnistetaan siten, että poissaolopäivällä ei ole muuta palkallista tai palkatonta aikaa, eikä päivä ole loma- tai pyhäpäivä. Tulokset ryhmitellään per kirjattu poissaolo ja aineistossa siirtyy tulkittuna poissaolon alku ja loppupäivät. Korvaathan ' '-merkkien välissä olevan tekstin, esim. 'AMMATTIYHDISTYSTOIMINTA', oikealla palkkalajikoodilla.
SELECT *, SUM(Amount) / 3600 AS OverrideAmount,
MIN(SalaryRenderingDate) As OverrideStartDatetime,
MAX(SalaryRenderingDate) AS OverrideEndDatetime,
IsApproved AS CustomData1,
CASE
WHEN AbsenceTypeId = 25 THEN 'AMMATTIYHDISTYSTOIMINTA' -- Ammattiyhdistystoiminta
WHEN AbsenceTypeId = 10 THEN 'ASEPALVELUS' -- Ase- tai siviilipalvelusaika
WHEN AbsenceTypeId = 1 THEN 'ERITYISAITIYSVAPAA' -- Erityisäitiysvapaa
WHEN AbsenceTypeId = 5 THEN 'HOITOVAPAA' -- Hoitovapaa
WHEN AbsenceTypeId = 3 THEN 'ISYYSVAPAA' -- Isyysvapaa
WHEN AbsenceTypeId = 11 THEN 'KERTAUS' -- Kertausharjoitukset
WHEN AbsenceTypeId = 27 THEN 'KUNTOUTUS' -- Kuntoutus
WHEN AbsenceTypeId = 18 THEN 'KUTSUNTA' -- Kutsuntatilaisuus
WHEN AbsenceTypeId = 13 THEN 'MUU_POISSAOLO' -- Muu poissaolo
WHEN AbsenceTypeId = 26 THEN 'MUUTTOVAPAA' -- Muuttovapaa
WHEN AbsenceTypeId = 452 THEN 'OMAISHOITOVAPAA' -- Omaishoitovapaa
WHEN AbsenceTypeId = 17 THEN 'OMAT50_60_JUHLAT' -- Omat 50- tai 60-vuotisjuhlat
WHEN AbsenceTypeId = 16 THEN 'PARISUHTEEN_REKISTEROINTI' -- Omat vihkiäiset / Parisuhteen rekisteröinti
WHEN AbsenceTypeId = 8 THEN 'OPINTOVAPAA' -- Opintovapaa
WHEN AbsenceTypeId = 22 THEN 'OSA_AIKAELAKE' -- Osa-aikaeläke
WHEN AbsenceTypeId = 31 THEN 'OSA-AIKAISUUS' -- Osa-aikaisuus
WHEN AbsenceTypeId = 14 THEN 'PERHEENJASENEN_KUOLEMA' -- Perheenjäsenen kuolema
WHEN AbsenceTypeId = 15 THEN 'HAUTAJAISET' -- Perheenjäsenen tai lähiomaisen hautajaiset
WHEN AbsenceTypeId = 20 THEN 'PERHEENJASENEN_SAIRASTUMINEN' -- Perheenjäsenen äkillinen sairastuminen
WHEN AbsenceTypeId = 7 THEN 'PAKOTTAVAT_PERHESYYT' -- Poissaolo pakottavien perhesyiden takia
WHEN AbsenceTypeId = 450 THEN 'RASKAUSVAPAA' -- Raskausvapaa
WHEN AbsenceTypeId = 6 THEN 'TILAPAINEN_HOITOVAPAA' -- Tilapäinen hoitovapaa
WHEN AbsenceTypeId = 19 THEN 'TOIMIVAPAA' -- Toimivapaa
WHEN AbsenceTypeId = 12 THEN 'TYONTEKIJAN_PYYNTO' -- Työntekijän oma pyyntö
WHEN AbsenceTypeId = 451 THEN 'VANHEMPAINVAPAA' -- Vanhempainvapaa
WHEN AbsenceTypeId = 4 THEN 'VANHEMPAINVAPAA (ENNEN UUDISTUSTA)' -- Vanhempainvapaa (ennen uudistusta)
WHEN AbsenceTypeId = 23 THEN 'VIRKAPAVAA' -- Virkavapaa
WHEN AbsenceTypeId = 9 THEN 'VUOROTTELUVAPAA' -- Vuorotteluvapaa
WHEN AbsenceTypeId = 2 THEN 'AITIYSVAPAA' -- Äitiysvapaa
ELSE
'NOT DEFINED'
END AS OverrideSalaryCode
FROM UserSalaryData
WHERE AbsenceTypeId IS NOT NULL AND
CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime') AND
SalaryRenderingDate NOT IN
(SELECT SalaryRenderingDate
FROM UserSalaryData
WHERE AbsenceTypeId IS NULL
AND CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime', 'AdditionalWork', 'OvertimeDaily50', 'OvertimeDaily100', 'OvertimeWeekly50', 'OvertimeWeekly100', 'OvertimeSunday50', 'OvertimeSunday100', 'PublicHoliday', 'YearLeave'))
GROUP BY ActivityId
Poimitaan tulkitut osapäivän poissaolo-tapahtumat yhdellä säännöllä siten, että eri poissaololajeilla on oma palkkalajin koodinsa.
Poissaolo tunnistetaan siten, että poissaolopäivällä on myös muuta palkallista tai palkatonta aikaa, tai päivä on loma- tai pyhäpäivä. Tulokset ryhmitellään per kirjattu poissaolo ja aineistossa siirtyy tulkitun poissaolon alku ja loppupäivät. Korvaathan ' '-merkkien välissä olevan tekstin, esim. 'AMMATTIYHDISTYSTOIMINTA', oikealla palkkalajikoodilla.
SELECT *, SUM(Amount) / 3600 AS OverrideAmount,
MIN(SalaryRenderingDate) As OverrideStartDatetime,
MAX(SalaryRenderingDate) AS OverrideEndDatetime,
IsApproved AS CustomData1,
CASE
WHEN AbsenceTypeId = 25 THEN 'AMMATTIYHDISTYSTOIMINTA' -- Ammattiyhdistystoiminta
WHEN AbsenceTypeId = 10 THEN 'ASEPALVELUS' -- Ase- tai siviilipalvelusaika
WHEN AbsenceTypeId = 1 THEN 'ERITYISAITIYSVAPAA' -- Erityisäitiysvapaa
WHEN AbsenceTypeId = 15 THEN 'HAUTAJAISET' -- Perheenjäsenen tai lähiomaisen hautajaiset
WHEN AbsenceTypeId = 5 THEN 'HOITOVAPAA' -- Hoitovapaa
WHEN AbsenceTypeId = 3 THEN 'ISYYSVAPAA' -- Isyysvapaa
WHEN AbsenceTypeId = 11 THEN 'KERTAUS' -- Kertausharjoitukset
WHEN AbsenceTypeId = 27 THEN 'KUNTOUTUS' -- Kuntoutus
WHEN AbsenceTypeId = 18 THEN 'KUTSUNTA' -- Kutsuntatilaisuus
WHEN AbsenceTypeId = 13 THEN 'MUU_POISSAOLO' -- Muu poissaolo
WHEN AbsenceTypeId = 26 THEN 'MUUTTOVAPAA' -- Muuttovapaa
WHEN AbsenceTypeId = 452 THEN 'OMAISHOITOVAPAA' -- Omaishoitovapaa
WHEN AbsenceTypeId = 17 THEN 'OMAT50_60_JUHLAT' -- Omat 50- tai 60-vuotisjuhlat
WHEN AbsenceTypeId = 8 THEN 'OPINTOVAPAA' -- Opintovapaa
WHEN AbsenceTypeId = 22 THEN 'OSA_AIKAELAKE' -- Osa-aikaeläke
WHEN AbsenceTypeId = 31 THEN 'OSA-AIKAISUUS' -- Osa-aikaisuus
WHEN AbsenceTypeId = 7 THEN 'PAKOTTAVAT_PERHESYYT' -- Poissaolo pakottavien perhesyiden takia
WHEN AbsenceTypeId = 16 THEN 'PARISUHTEEN_REKISTEROINTI' -- Omat vihkiäiset / Parisuhteen rekisteröinti
WHEN AbsenceTypeId = 14 THEN 'PERHEENJASENEN_KUOLEMA' -- Perheenjäsenen kuolema
WHEN AbsenceTypeId = 20 THEN 'PERHEENJASENEN_SAIRASTUMINEN' -- Perheenjäsenen äkillinen sairastuminen
WHEN AbsenceTypeId = 450 THEN 'RASKAUSVAPAA' -- Raskausvapaa
WHEN AbsenceTypeId = 6 THEN 'TILAPAINEN_HOITOVAPAA' -- Tilapäinen hoitovapaa
WHEN AbsenceTypeId = 19 THEN 'TOIMIVAPAA' -- Toimivapaa
WHEN AbsenceTypeId = 12 THEN 'TYONTEKIJAN_PYYNTO' -- Työntekijän oma pyyntö
WHEN AbsenceTypeId = 451 THEN 'VANHEMPAINVAPAA' -- Vanhempainvapaa
WHEN AbsenceTypeId = 4 THEN 'VANHEMPAINVAPAA (ENNEN UUDISTUSTA)' -- Vanhempainvapaa (ennen uudistusta)
WHEN AbsenceTypeId = 23 THEN 'VIRKAPAVAA' -- Virkavapaa
WHEN AbsenceTypeId = 9 THEN 'VUOROTTELUVAPAA' -- Vuorotteluvapaa
WHEN AbsenceTypeId = 2 THEN 'AITIYSVAPAA' -- Äitiysvapaa
ELSE
'NOT DEFINED'
END AS OverrideSalaryCode
FROM UserSalaryData
WHERE AbsenceTypeId IS NOT NULL AND
CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime')
AND SalaryRenderingDate IN
(SELECT SalaryRenderingDate
FROM UserSalaryData
WHERE AbsenceTypeId IS NULL
AND CompensationType IN ('BasicTime', 'ReducedRateTime', 'UnpaidBasicTime', 'AdditionalWork', 'OvertimeDaily50', 'OvertimeDaily100', 'OvertimeWeekly50', 'OvertimeWeekly100', 'OvertimeSunday50', 'OvertimeSunday100', 'PublicHoliday', 'YearLeave'))
GROUP BY ActivityId
Poimitaan kirjatut, eilen hyväksytyt, poissaolotapahtumat yhdellä säännöllä siten, että eri poissaololajeilla on oma palkkalajin koodinsa.
Tulokset ryhmitellään per kirjattu poissaolo ja aineistossa siirtyy kirjatun poissaolon alku ja loppupäivät. Määränä siirretään kirjatun poissaolon kesto päivinä. Korvaathan ' '-merkkien välissä olevan tekstin, esim. 'AMMATTIYHDISTYSTOIMINTA', oikealla palkkalajikoodilla.
SELECT *,
julianday(date(Enddatetime)) -
julianday(date(StartDatetime)) + 1 AS OverrideAmount, -- tämä laskee poissaolon keston päivinä
MIN(StartDateTime) As OverrideStartDatetime, -- poissaolon alkupäivä
MAX(EndDateTime) AS OverrideEndDatetime, -- poissaolon loppupäivä
CASE
WHEN AbsenceTypeId = 25 THEN 'AMMATTIYHDISTYSTOIMINTA' -- Ammattiyhdistystoiminta
WHEN AbsenceTypeId = 10 THEN 'ASEPALVELUS' -- Ase- tai siviilipalvelusaika
WHEN AbsenceTypeId = 1 THEN 'ERITYISAITIYSVAPAA' -- Erityisäitiysvapaa
WHEN AbsenceTypeId = 15 THEN 'HAUTAJAISET' -- Perheenjäsenen tai lähiomaisen hautajaiset
WHEN AbsenceTypeId = 5 THEN 'HOITOVAPAA' -- Hoitovapaa
WHEN AbsenceTypeId = 3 THEN 'ISYYSVAPAA' -- Isyysvapaa
WHEN AbsenceTypeId = 11 THEN 'KERTAUS' -- Kertausharjoitukset
WHEN AbsenceTypeId = 27 THEN 'KUNTOUTUS' -- Kuntoutus
WHEN AbsenceTypeId = 18 THEN 'KUTSUNTA' -- Kutsuntatilaisuus
WHEN AbsenceTypeId = 13 THEN 'MUU_POISSAOLO' -- Muu poissaolo
WHEN AbsenceTypeId = 26 THEN 'MUUTTOVAPAA' -- Muuttovapaa
WHEN AbsenceTypeId = 452 THEN 'OMAISHOITOVAPAA' -- Omaishoitovapaa
WHEN AbsenceTypeId = 17 THEN 'OMAT50_60_JUHLAT' -- Omat 50- tai 60-vuotisjuhlat
WHEN AbsenceTypeId = 8 THEN 'OPINTOVAPAA' -- Opintovapaa
WHEN AbsenceTypeId = 22 THEN 'OSA_AIKAELAKE' -- Osa-aikaeläke
WHEN AbsenceTypeId = 31 THEN 'OSA-AIKAISUUS' -- Osa-aikaisuus
WHEN AbsenceTypeId = 7 THEN 'PAKOTTAVAT_PERHESYYT' -- Poissaolo pakottavien perhesyiden takia
WHEN AbsenceTypeId = 16 THEN 'PARISUHTEEN_REKISTEROINTI' -- Omat vihkiäiset / Parisuhteen rekisteröinti
WHEN AbsenceTypeId = 14 THEN 'PERHEENJASENEN_KUOLEMA' -- Perheenjäsenen kuolema
WHEN AbsenceTypeId = 20 THEN 'PERHEENJASENEN_SAIRASTUMINEN' -- Perheenjäsenen äkillinen sairastuminen
WHEN AbsenceTypeId = 450 THEN 'RASKAUSVAPAA' -- Raskausvapaa
WHEN AbsenceTypeId = 6 THEN 'TILAPAINEN_HOITOVAPAA' -- Tilapäinen hoitovapaa
WHEN AbsenceTypeId = 19 THEN 'TOIMIVAPAA' -- Toimivapaa
WHEN AbsenceTypeId = 12 THEN 'TYONTEKIJAN_PYYNTO' -- Työntekijän oma pyyntö
WHEN AbsenceTypeId = 451 THEN 'VANHEMPAINVAPAA' -- Vanhempainvapaa
WHEN AbsenceTypeId = 4 THEN 'VANHEMPAINVAPAA (ENNEN UUDISTUSTA)' -- Vanhempainvapaa (ennen uudistusta)
WHEN AbsenceTypeId = 23 THEN 'VIRKAPAVAA' -- Virkavapaa
WHEN AbsenceTypeId = 9 THEN 'VUOROTTELUVAPAA' -- Vuorotteluvapaa
WHEN AbsenceTypeId = 2 THEN 'AITIYSVAPAA' -- Äitiysvapaa
ELSE
'NOT DEFINED'
END AS OverrideSalaryCode
FROM UserEventData
WHERE AbsenceTypeId IS NOT NULL
AND IsApproved = 'Y' -- On hyväksytty
AND DATE(ModifiedDatetime) = DATE(DATETIME(CURDATE(),'-1 DAY')) -- Hyväksymispäivä eilen
GROUP BY ActivityId
Poimitaan juhlapyhän kesto
Poimitaan Juhlapyhän kesto silloin kun henkilö on työsuhteessa kyseisenä päivänä ja hän on tuntipalkkainen. Esimerkin vuoksi itsenäisyyspäivää (6. joulukuuta) ei poimita.
SELECT *, SUM(Amount) AS OverrideAmount
FROM UserSalaryData
WHERE CompensationType = 'PublicHoliday'
AND employeeworkcontractactive = 'Y'
AND employeesalarytype = 'hourly'
AND strftime('%m-%d', salaryrenderingdate ) != '12-06'
GROUP BY SalaryRenderingDate, ProjectCode1, Comment
Poimitaan juhlapyhän kesto vähennettynä tehdyllä työllä
Poimitaan Juhlapyhän kesto silloin kun henkilö on työsuhteessa kyseisenä päivänä ja hän on tuntipalkkainen. Juhlapyhän kestosta vähennetään kyseiselle päivälle kirjattu työaika korvauslajista riippumatta.
SELECT
*,
SUM(Amount) - IFNULL(WorkDoneOnDayAmount, 0) AS OverrideAmount -- Amount of public holiday is reduced by amount of work done on that day
FROM
UserSalaryData
LEFT JOIN ( --In this left join section we fetch the amount of compensation on any of the mentioned types and sum it per day. This information is joined into salaryData table
SELECT
SUM(Amount) As WorkDoneOnDayAmount,
SalaryRenderingDate AS WorkDoneOnDaySalaryRenderingDate
FROM
UserSalaryData
WHERE
CompensationType IN (
'BasicTime', 'ReducedRateTime', 'AdditionalWork',
'OvertimeDaily50', 'OvertimeDaily100',
'OvertimeWeekly50', 'OvertimeWeekly100',
'OvertimeSunday50', 'OvertimeSunday100'
)
GROUP By
SalaryRenderingDate
) AS WorkDonePerDay ON UserSalaryData.SalaryRenderingDate = WorkDonePerDay.WorkDoneOnDaySalaryRenderingDate
WHERE
CompensationType = 'PublicHoliday'
AND employeeworkcontractactive = 'Y'
GROUP BY
SalaryRenderingDate,
ProjectCode1,
Comment
Poimitaan juhlapyhän kesto niiltä päiviltä, jolloin henkilö on työsuhteessa ja työsuhde on kestänyt yli 1kk ajan
SELECT *, SUM(Amount) AS OverrideAmount FROM UserSalaryData WHERE CompensationType = 'PublicHoliday' AND EmployeeWorkContractActive = 'Y' AND SalaryRenderingDate >= date(EmployeeWorkContractStartDate, '+1 month') GROUP BY SalaryRenderingDate, ProjectCode1, ProjectCode2, ProjectCode3, ProjectCode4, ProjectCode5, ProjectCode6, Comment