Files
3cx_tapi/server/src/CPATapi.Server/Repository/ZeitConsensRepository.cs
T

48 lines
1.5 KiB
C#
Raw Normal View History

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
{
private const string SelectStampsQuery = """
SELECT
ma.MA_USER_NAME
,bu.LOGGED_IN
,us.US_EXTENSION
,buLastStamp.LAST_STAMP
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
OUTER APPLY (
SELECT MAX(BU_BU) AS LAST_STAMP
FROM dbo.BU
WHERE bu.BU_MA_NR = ma.MA_NR
) buLastStamp
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");
return await con.QueryAsync<Availability>(SelectStampsQuery, new { from, to });
2026-03-19 13:35:53 +01: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");
return await con.QueryFirstOrDefaultAsync<Availability>($"""
{SelectStampsQuery}
AND ma.MA_USER_NAME = @user
2026-03-19 13:35:53 +01:00
""", new { user, from, to });
}
}