Skip to content

Commit

Permalink
Storico contratti quarter
Browse files Browse the repository at this point in the history
Related work items: #513
  • Loading branch information
mg-dgsspa committed Dec 4, 2024
1 parent d629d7d commit f4f96be
Show file tree
Hide file tree
Showing 20 changed files with 290 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Dto;
public sealed class ContractIdPSP
{
public string? ContractId { get; set; }
public string? Name { get; set; }
public string? Name { get; set; }
public string? YearQuarter { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,7 @@ public sealed class PSP

[HeaderPagoPA(caption: "YearMonth", Order = 18)]
public string? YearMonth { get; set; }

[HeaderPagoPA(caption: "YearQuarter", Order = 19)]
public string? YearQuarter { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries;
public class PSPQueryGetByName(IAuthenticationInfo authenticationInfo) : IRequest<IEnumerable<ContractIdPSP>>
{
public IAuthenticationInfo AuthenticationInfo { get; internal set; } = authenticationInfo;
public string? Name { get; set; }
public string? Name { get; set; }
public string[]? YearQuarter { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ public class PSPQueryGetByRicerca(IAuthenticationInfo authenticationInfo) : IReq
public string[]? ContractIds { get; set; }
public string? MembershipId { get; set; }
public string? RecipientId { get; set; }
public string? ABI { get; set; }
public string? ABI { get; set; }
public string[]? YearQuarter { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using MediatR;
using PortaleFatture.BE.Core.Auth;

namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries;

public class PSPsQuartersRequestQuery(IAuthenticationInfo authenticationInfo) : IRequest<IEnumerable<string>>
{
public IAuthenticationInfo AuthenticationInfo { get; internal set; } = authenticationInfo;
public string? Year { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

internal static class PSPSQLBuilder
{
private static string _sqlQuarters = @"
SELECT distinct(year_quarter)
FROM [ppa].[Contracts]
";


private static string _sqlCount = @"
SELECT count(*)
FROM [ppa].[Contracts]
Expand All @@ -25,10 +31,11 @@ SELECT [contract_id] as ContractId
,[membership_id] as MembershipId
,[recipient_id] as RecipientId
,[year_month] as YearMonth
,[year_quarter] as YearQuarter
FROM [ppa].[Contracts]
";
private static string _sqlContractsId = @"
SELECT [contract_id] as contractId, [name] FROM [ppa].[Contracts]
SELECT [contract_id] as contractId, [name], [year_quarter] as YearQuarter FROM [ppa].[Contracts]
";
private static string _offSet = " OFFSET (@page-1)*@size ROWS FETCH NEXT @size ROWS ONLY";
public static string OffSet()
Expand Down Expand Up @@ -60,4 +67,13 @@ public static string SelectAllCount()
{
return _sqlCount;
}
public static string SelectQuarters()
{
return _sqlQuarters;
}

public static string OrderByQuarters()
{
return " order by year_quarter desc";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Data;
using System.Dynamic;
using PortaleFatture.BE.Core.Extensions;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Dto;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries.Persistence.Builder;
using PortaleFatture.BE.Infrastructure.Common.Persistence;
Expand All @@ -8,24 +9,32 @@ namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries.P

public sealed class PSPQueryGetByNamePersistence(PSPQueryGetByName command) : DapperBase, IQuery<IEnumerable<ContractIdPSP>>
{
private readonly PSPQueryGetByName _command = command;
private static readonly string _sql = PSPSQLBuilder.SelectContractsId();
private readonly PSPQueryGetByName _command = command;
private static readonly string _sql = PSPSQLBuilder.SelectContractsId();
private static readonly string _orderBy = PSPSQLBuilder.OrderBy();
public async Task<IEnumerable<ContractIdPSP>> Execute(IDbConnection? connection, string schema, IDbTransaction? transaction, CancellationToken cancellationToken = default)
{
dynamic parameters = new ExpandoObject();

var where = " WHERE name like '%' + @name + '%'";
if (_command.YearQuarter.IsNullNotAny())
where += " AND year_quarter = (SELECT MAX(year_quarter) FROM [ppa].[Contracts])";
else
{
where += " AND year_quarter IN @YearQuarter";
parameters.YearQuarter = _command.YearQuarter;
}

var orderBy = _orderBy;
var name = _command.Name;
parameters.Name = name;

var sql = _sql + where + orderBy;

dynamic parameters = new ExpandoObject();
parameters.Name = name;

return await ((IDatabase)this).SelectAsync<ContractIdPSP>(
connection!,
sql,
parameters,
transaction);
return await ((IDatabase)this).SelectAsync<ContractIdPSP>(
connection!,
sql,
parameters,
transaction);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ public async Task<PSPListDto> Execute(IDbConnection? connection, string schema,
else
offset = string.Empty;

if (_command.YearQuarter.IsNullNotAny())
where.AddInOrder(" year_quarter = (SELECT MAX(year_quarter) FROM [ppa].[Contracts])");
else
{
where.AddInOrder(" year_quarter IN @YearQuarter");
parameters.YearQuarter = _command.YearQuarter;
}

if (!_command.ContractIds.IsNullNotAny())
{
where.AddInOrder(" contract_id IN @ContractIds");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Data;
using System.Dynamic;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries.Persistence.Builder;
using PortaleFatture.BE.Infrastructure.Common.Persistence;

namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries.Persistence;

public sealed class PSPsQuartersRequestQueryPersistence(PSPsQuartersRequestQuery command) : DapperBase, IQuery<IEnumerable<string>>
{
private readonly PSPsQuartersRequestQuery _command = command;


private static readonly string _sql = PSPSQLBuilder.SelectQuarters();
private static readonly string _orderBy = PSPSQLBuilder.OrderByQuarters();
public async Task<IEnumerable<string>> Execute(IDbConnection? connection, string schema, IDbTransaction? transaction, CancellationToken cancellationToken = default)
{
var where = string.Empty;
dynamic parameters = new ExpandoObject();

if (!string.IsNullOrEmpty(_command.Year))
{
where = " WHERE year_quarter like '%' + @year + '%'";
parameters.Year = _command.Year;
}

var orderBy = _orderBy;
var sql = _sql + where + orderBy;


return await ((IDatabase)this).SelectAsync<string>(
connection!,
sql,
parameters,
transaction);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using MediatR;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using PortaleFatture.BE.Core.Resources;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Queries.Persistence;
using PortaleFatture.BE.Infrastructure.Common.Persistence.Schemas;

namespace PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.QueryHandlers;

public sealed class PSPsQuartersRequestQueryHandler : IRequestHandler<PSPsQuartersRequestQuery, IEnumerable<string>>
{
private readonly IFattureDbContextFactory _factory;
private readonly ILogger<PSPsQuartersRequestQueryHandler> _logger;
private readonly IStringLocalizer<Localization> _localizer;

public PSPsQuartersRequestQueryHandler(
IFattureDbContextFactory factory,
IStringLocalizer<Localization> localizer,
ILogger<PSPsQuartersRequestQueryHandler> logger)
{
_factory = factory;
_localizer = localizer;
_logger = logger;
}

public async Task<IEnumerable<string>> Handle(PSPsQuartersRequestQuery command, CancellationToken ct)
{
using var uow = await _factory.Create(cancellationToken: ct);
return await uow.Query(new PSPsQuartersRequestQueryPersistence(command), ct);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ SELECT r.[abi] as ABI
FROM [ppa].[FinancialReports] r
left outer join ppa.Contracts c
on r.[recipient_id] = c.contract_id
AND r.[year_quarter] = c.year_quarter
left outer join [ppa].[KPMG] k
ON k.contract_id = c.contract_id
and k.year_quarter = r.year_quarter
Expand All @@ -95,6 +96,7 @@ left outer join [ppa].[FinancialReports] r
and k.codice_articolo = r.codice_articolo
left outer join ppa.Contracts c
on k.contract_id = c.contract_id
AND k.year_quarter = c.year_quarter
";
private static string _sql = @"
SELECT
Expand Down Expand Up @@ -127,6 +129,7 @@ left outer join [ppa].[FinancialReports] r
and k.codice_articolo = r.codice_articolo
left outer join ppa.Contracts c
on k.contract_id = c.contract_id
AND k.year_quarter = c.year_quarter
";

private static string _offSet = " OFFSET (@page-1)*@size ROWS FETCH NEXT @size ROWS ONLY";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,23 @@ namespace PortaleFatture.BE.Api.Modules.pagoPA.AnagraficaPSP.Extensions;

public static class AnagraficaPSPExtensions
{
public static PSPsQuartersRequestQuery Map(this PSPsQuartersRequest req, AuthenticationInfo authInfo)
{
return new PSPsQuartersRequestQuery(authInfo)
{
Year = req.Year
};
}

public static PSPQueryGetByRicerca Map(this PSPRequest req, AuthenticationInfo authInfo)
{
return new PSPQueryGetByRicerca(authInfo)
{
ContractIds = req.ContractIds.IsNullNotAny() ? null : req.ContractIds,
MembershipId = req.MembershipId,
RecipientId = req.RecipientId,
ABI = req.ABI
ABI = req.ABI,
YearQuarter = req.Quarters,
};
}

Expand All @@ -29,15 +38,17 @@ public static PSPQueryGetByRicerca Map(this PSPRequest req, AuthenticationInfo a
ContractIds = req.ContractIds.IsNullNotAny() ? null : req.ContractIds,
MembershipId = req.MembershipId,
RecipientId = req.RecipientId,
ABI = req.ABI
ABI = req.ABI,
YearQuarter = req.Quarters,
};
}

public static PSPQueryGetByName Map(this PSPRequestName req, AuthenticationInfo authInfo)
{
return new PSPQueryGetByName(authInfo)
{
Name = req.Name,
Name = req.Name,
YearQuarter = req.Quarters,
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,17 @@ public void RegisterEndpoints(IEndpointRouteBuilder endpointRouteBuilder)
.WithName("Permette di scaricare il file excel relativo ai PSP per ricerca con nome.")
.SetOpenApi(Module.PSP)
.WithMetadata(new EnableCorsAttribute(policyName: Module.CORSLabel));

endpointRouteBuilder
.MapPost("api/v2/pagopa/psps/quarters", PostPSPsQuarters)
.WithName("Permette di visualizzare i quarter per year psps")
.SetOpenApi(Module.PSP)
.WithMetadata(new EnableCorsAttribute(policyName: Module.CORSLabel));

endpointRouteBuilder
.MapGet("api/v2/pagopa/psps/years", GetPSPsYears)
.WithName("Permette di visualizzare tutti gli anni dove ho psps")
.SetOpenApi(Module.PSP)
.WithMetadata(new EnableCorsAttribute(policyName: Module.CORSLabel));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
using PortaleFatture.BE.Api.Infrastructure;
using PortaleFatture.BE.Api.Modules.pagoPA.AnagraficaPSP.Extensions;
using PortaleFatture.BE.Api.Modules.pagoPA.AnagraficaPSP.Request;
using PortaleFatture.BE.Api.Modules.pagoPA.FinancialReports.Extensions;
using PortaleFatture.BE.Api.Modules.pagoPA.FinancialReports.Request;
using PortaleFatture.BE.Core.Auth;
using PortaleFatture.BE.Core.Extensions;
using PortaleFatture.BE.Core.Resources;
using PortaleFatture.BE.Infrastructure.Common.Identity;
using PortaleFatture.BE.Infrastructure.Common.pagoPA.AnagraficaPSP.Dto;
Expand All @@ -19,6 +22,55 @@ namespace PortaleFatture.BE.Api.Modules.pagoPA.Auth;

public partial class PSPModule : Module, IRegistrableModule
{
[Authorize(Roles = $"{Ruolo.OPERATOR}, {Ruolo.ADMIN}", Policy = Module.PagoPAPolicy)]
[EnableCors(CORSLabel)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
private async Task<Results<Ok<List<string>>, NotFound>> GetPSPsYears(
HttpContext context,
[FromServices] IMediator handler,
[FromServices] IStringLocalizer<Localization> localizer)
{
var authInfo = context.GetAuthInfo();
var request = new PSPsQuartersRequest();
var quarters = await handler.Send(request.Map(authInfo));
if (quarters.IsNullNotAny())
return NotFound();

var values = quarters.Select(x => x.Split("_")[0]).Distinct().OrderByDescending(y => y).ToList();

return Ok(values);
}


[Authorize(Roles = $"{Ruolo.OPERATOR}, {Ruolo.ADMIN}", Policy = Module.PagoPAPolicy)]
[EnableCors(CORSLabel)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
private async Task<Results<Ok<List<FinancialReportsQuartersResponse>>, NotFound>> PostPSPsQuarters(
HttpContext context,
[FromBody] PSPsQuartersRequest request,
[FromServices] IMediator handler,
[FromServices] IStringLocalizer<Localization> localizer)
{
var authInfo = context.GetAuthInfo();
var quarters = await handler.Send(request.Map(authInfo));
if (quarters.IsNullNotAny())
return NotFound();
var values = quarters.Select(x => new FinancialReportsQuartersResponse()
{
Quarter = "Q" + x.Replace(request.Year + "_", string.Empty),
Value = x
}).OrderBy(y => y.Value).ToList();

return Ok(values);
}

[Authorize(Roles = $"{Ruolo.OPERATOR}, {Ruolo.ADMIN}", Policy = Module.PagoPAPolicy)]
[EnableCors(CORSLabel)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ public class PSPRequest
public string? MembershipId { get; set; }
public string? RecipientId { get; set; }
public string? ABI { get; set; }

public string[]? Quarters { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@

public class PSPRequestName
{
public string? Name { get; set; }
public string? Name { get; set; }
public string[]? Quarters { get; set; }
}
Loading

0 comments on commit f4f96be

Please sign in to comment.