using FrameworkDAL.DTO.MessageHubService.UpdateHandleStatus; using FrameworkDAL.Query.MessageHubService.TemplateApproval; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Microsoft.Extensions.Logging; using System; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.MessageHubService.TemplateApproval { /// /// Data Access Layer for Template Approval and Call Ticket Assignment operations. /// Handles Accept, Reject, and Forward actions on TCALL. /// Supports CallId-based approvals. /// public class TemplateApprovalDAL : ITemplateApprovalDAL { private readonly IQueryExecutor _queryExecutor; private readonly ILogger _logger; public TemplateApprovalDAL(IQueryExecutor queryExecutor, ILogger logger) { _queryExecutor = queryExecutor ?? throw new ArgumentNullException(nameof(queryExecutor)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } /// /// Accepts a call approval ticket. /// Sets TCALL.STATUS = 1, ACTIONTAKEN = 'ACCEPT'. /// public async Task AcceptTemplateApproval(TemplateApprovalDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); if (loginDTO == null) throw new ArgumentNullException(nameof(loginDTO)); _logger.LogInformation("AcceptTemplateApproval called | CallId={CallId} | DTO={@DTO}", dto.TicketNumber, dto); try { var sql = TemplateApprovalQB.ACCEPT_TEMPLATE_APPROVAL; var result = await _queryExecutor.ExecuteAsync(loginDTO, sql, dto); _logger.LogInformation("AcceptTemplateApproval executed. Rows affected: {Result}", result); return result; } catch (Exception ex) { _logger.LogError(ex, "Error in AcceptTemplateApproval | CallId={CallId}", dto.TicketNumber); throw; } } /// /// Rejects a call approval ticket. /// Sets TCALL.STATUS = 2, ACTIONTAKEN = 'REJECT'. /// public async Task RejectTemplateApproval(TemplateApprovalDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); if (loginDTO == null) throw new ArgumentNullException(nameof(loginDTO)); _logger.LogInformation("RejectTemplateApproval called | CallId={CallId} | DTO={@DTO}", dto.TicketNumber, dto); try { var sql = TemplateApprovalQB.REJECT_TEMPLATE_APPROVAL; var result = await _queryExecutor.ExecuteAsync(loginDTO, sql, dto); _logger.LogInformation("RejectTemplateApproval executed. Rows affected: {Result}", result); return result; } catch (Exception ex) { _logger.LogError(ex, "Error in RejectTemplateApproval | CallId={CallId}", dto.TicketNumber); throw; } } /// /// Forwards a call approval ticket. /// Sets TCALL.STATUS = 3, ACTIONTAKEN = 'FORWARD', updates CUSTOMERREMARKS. /// public async Task ForwardTemplate(TemplateApprovalDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); if (loginDTO == null) throw new ArgumentNullException(nameof(loginDTO)); _logger.LogInformation("ForwardTemplate called | CallId={CallId} | Remarks={Remarks}", dto.TicketNumber, dto.Remarks); try { var sql = TemplateApprovalQB.FORWARD_TEMPLATE; var result = await _queryExecutor.ExecuteAsync(loginDTO, sql, dto); _logger.LogInformation("ForwardTemplate executed. Rows affected: {Result}", result); return result; } catch (Exception ex) { _logger.LogError(ex, "Error in ForwardTemplate | CallId={CallId}", dto.TicketNumber); throw; } } } }