2026-03-19 13:35:53 +01:00
|
|
|
using CPATapi.Server.Interfaces;
|
|
|
|
|
using CPATapi.Server.Models;
|
|
|
|
|
using Dapper;
|
|
|
|
|
|
|
|
|
|
namespace CPATapi.Server.Repository;
|
|
|
|
|
|
|
|
|
|
internal class ZeitConsensRepository(IConfiguration config) : Repository(config), IZeitConsensRepository
|
|
|
|
|
{
|
2026-04-13 10:42:11 +02:00
|
|
|
private const string SelectStampsQuery = """
|
|
|
|
|
SELECT
|
|
|
|
|
ma.MA_USER_NAME
|
|
|
|
|
,bu.LOGGED_IN
|
|
|
|
|
,us.US_EXTENSION
|
2026-04-13 12:29:43 +02:00
|
|
|
,buLastStamp.LAST_STAMP
|
2026-04-13 10:42:11 +02:00
|
|
|
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
|
|
|
|
|
WHERE bu.BU_MA_NR = ma.MA_NR
|
|
|
|
|
AND
|
|
|
|
|
BU_BU >= @from AND BU_BU < @to
|
|
|
|
|
) bu
|
2026-04-13 12:29:43 +02:00
|
|
|
OUTER APPLY (
|
|
|
|
|
SELECT MAX(BU_BU) AS LAST_STAMP
|
|
|
|
|
FROM dbo.BU
|
|
|
|
|
WHERE bu.BU_MA_NR = ma.MA_NR
|
|
|
|
|
) buLastStamp
|
2026-04-13 10:42:11 +02:00
|
|
|
WHERE
|
|
|
|
|
ma.MA_USER_AKTIV = 1
|
|
|
|
|
""";
|
|
|
|
|
|
|
|
|
|
public async Task<IEnumerable<Availability>> GetUsersAvailabilityAsync(DateTime from, DateTime to)
|
2026-03-19 13:35:53 +01:00
|
|
|
{
|
|
|
|
|
await using var con = await OpenAsync("ZeitConsens");
|
2026-04-13 10:42:11 +02:00
|
|
|
return await con.QueryAsync<Availability>(SelectStampsQuery, new { from, to });
|
2026-03-19 13:35:53 +01:00
|
|
|
}
|
|
|
|
|
|
2026-04-13 10:42:11 +02:00
|
|
|
public async Task<Availability?> GetUserAvailabilityAsync(string user, DateTime from, DateTime to)
|
2026-03-19 13:35:53 +01:00
|
|
|
{
|
|
|
|
|
await using var con = await OpenAsync("ZeitConsens");
|
2026-04-13 10:42:11 +02:00
|
|
|
return await con.QueryFirstOrDefaultAsync<Availability>($"""
|
|
|
|
|
{SelectStampsQuery}
|
|
|
|
|
AND ma.MA_USER_NAME = @user
|
2026-03-19 13:35:53 +01:00
|
|
|
""", new { user, from, to });
|
|
|
|
|
}
|
|
|
|
|
}
|