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:55:51 +02:00
|
|
|
,buLast.LAST_STAMP
|
2026-04-13 13:18:02 +02:00
|
|
|
,buLast.AT_COMPANY
|
2026-04-13 10:42:11 +02:00
|
|
|
FROM dbo.MA_DATEN ma
|
2026-04-13 12:55:51 +02:00
|
|
|
INNER JOIN projectmanagement.dbo.CP_USER us ON us.US_LOGINNAME = ma.MA_USER_NAME
|
2026-04-13 10:42:11 +02:00
|
|
|
OUTER APPLY (
|
2026-04-13 12:55:51 +02:00
|
|
|
SELECT COUNT(*) % 2 AS LOGGED_IN
|
|
|
|
|
FROM dbo.BU bu
|
2026-04-13 10:42:11 +02:00
|
|
|
WHERE bu.BU_MA_NR = ma.MA_NR
|
2026-04-13 12:55:51 +02:00
|
|
|
AND bu.BU_BU >= @from AND bu.BU_BU < @to
|
2026-04-13 10:42:11 +02:00
|
|
|
) bu
|
2026-04-13 12:29:43 +02:00
|
|
|
OUTER APPLY (
|
2026-04-13 12:55:51 +02:00
|
|
|
SELECT TOP 1
|
|
|
|
|
bu.BU_BU AS LAST_STAMP
|
2026-04-13 13:18:02 +02:00
|
|
|
,CASE WHEN bu.BU_TERM = 'Zeiterfassung' THEN 1 ELSE 0 END AS AT_COMPANY
|
2026-04-13 12:55:51 +02:00
|
|
|
FROM dbo.BU bu
|
2026-04-13 12:29:43 +02:00
|
|
|
WHERE bu.BU_MA_NR = ma.MA_NR
|
2026-04-13 12:55:51 +02:00
|
|
|
ORDER BY bu.BU_BU DESC
|
|
|
|
|
) buLast
|
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 });
|
|
|
|
|
}
|
|
|
|
|
}
|