using CPATapi.Server.Interfaces; using CPATapi.Server.Models; using Dapper; namespace CPATapi.Server.Repository; internal class ZeitConsensRepository(IConfiguration config) : Repository(config), IZeitConsensRepository { private const string SelectStampsQuery = """ SELECT ma.MA_USER_NAME ,bu.LOGGED_IN ,us.US_EXTENSION ,buLast.LAST_STAMP ,buLast.AT_COMPANY FROM dbo.MA_DATEN ma INNER JOIN projectmanagement.dbo.CP_USER us ON us.US_LOGINNAME = ma.MA_USER_NAME OUTER APPLY ( SELECT COUNT(*) % 2 AS LOGGED_IN FROM dbo.BU bu WHERE bu.BU_MA_NR = ma.MA_NR AND bu.BU_BU >= @from AND bu.BU_BU < @to ) bu OUTER APPLY ( SELECT TOP 1 bu.BU_BU AS LAST_STAMP ,CASE WHEN bu.BU_TERM = 'Zeiterfassung' THEN 1 ELSE 0 END AS AT_COMPANY FROM dbo.BU bu WHERE bu.BU_MA_NR = ma.MA_NR ORDER BY bu.BU_BU DESC ) buLast WHERE ma.MA_USER_AKTIV = 1 """; public async Task> GetUsersAvailabilityAsync(DateTime from, DateTime to) { await using var con = await OpenAsync("ZeitConsens"); return await con.QueryAsync(SelectStampsQuery, new { from, to }); } public async Task GetUserAvailabilityAsync(string user, DateTime from, DateTime to) { await using var con = await OpenAsync("ZeitConsens"); return await con.QueryFirstOrDefaultAsync($""" {SelectStampsQuery} AND ma.MA_USER_NAME = @user """, new { user, from, to }); } }