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

51 lines
1.7 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
,buLast.LAST_STAMP
,buLast.FIRMA
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 FIRMA
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<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 });
}
}