Skip to content

Commit 7796718

Browse files
committed
fix: 684
Merged PR 246: Query grid with id tipo contratto Related work items: #684
1 parent 659d1c4 commit 7796718

File tree

13 files changed

+304
-102
lines changed

13 files changed

+304
-102
lines changed

src/Infrastructure/PortaleFatture.BE.Infrastructure/Common/SEND/DatiFatturazioni/Dto/DatiFatturazioneEnteDto.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.ComponentModel.DataAnnotations.Schema;
22
using System.Text.Json.Serialization;
3-
using PortaleFatture.BE.Infrastructure.Common.SEND.Documenti.Common;
3+
using PortaleFatture.BE.Infrastructure.Common.SEND.Documenti.Common;
44

55
[Table("DatiFatturazione")]
66
public class DatiFatturazioneEnteDto
@@ -87,4 +87,28 @@ public string? Key
8787
[JsonIgnore]
8888
public string? SDataModifica { get { return DataModifica?.ToString("d"); } }
8989

90+
[Header(caption: "Codice SDI Confermato", Order = 13)]
91+
[JsonPropertyName("codiceSDI")]
92+
public string? CodiceSDI { get; set; }
93+
94+
[Header(caption: "Codice SDI Contratto", Order = 14)]
95+
[JsonPropertyName("contrattoCodiceSDI")]
96+
public string? ContrattoCodiceSDI { get; set; }
97+
98+
[Header(caption: "Tipo Contratto", Order = 15)]
99+
[JsonPropertyName("tipocontratto")]
100+
public string? TipoContratto { get; set; }
101+
}
102+
103+
104+
public class DatiFatturazioneEnteWithCountDto
105+
{
106+
[JsonPropertyOrder(-2)]
107+
[JsonPropertyName("datiFatturazione")]
108+
public IEnumerable<DatiFatturazioneEnteDto>? DatiFatturazioneEnte { get; set; }
109+
110+
[JsonPropertyOrder(-1)]
111+
112+
[JsonPropertyName("count")]
113+
public int Count { get; set; }
90114
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
using MediatR;
1+
using System.Text.Json.Serialization;
2+
using MediatR;
23
using PortaleFatture.BE.Core.Auth;
34

45
namespace PortaleFatture.BE.Infrastructure.Common.SEND.DatiFatturazioni.Queries;
56

6-
public class DatiFatturazioneQueryGetByDescrizione(IAuthenticationInfo? authenticationInfo, string[]? idEnti, string? prodotto, string? profilo, int? top) : IRequest<IEnumerable<DatiFatturazioneEnteDto>>
7+
public class DatiFatturazioneQueryGetByDescrizione(IAuthenticationInfo? authenticationInfo, string[]? idEnti, string? prodotto, string? profilo, int? idTipoContratto, int? page, int? size) : IRequest<DatiFatturazioneEnteWithCountDto>
78
{
89
public IAuthenticationInfo? AuthenticationInfo { get; internal set; } = authenticationInfo;
910
public string[]? IdEnti { get; internal set; } = idEnti;
1011
public string? Prodotto { get; internal set; } = prodotto;
1112
public string? Profilo { get; internal set; } = profilo;
12-
public int? Top { get; internal set; } = top;
13+
public int? IdTipoContratto { get; set; } = idTipoContratto;
14+
public int? PageNumber { get; set; } = page;
15+
public int? PageSize { get; set; } = size;
1316
}

src/Infrastructure/PortaleFatture.BE.Infrastructure/Common/SEND/DatiFatturazioni/Queries/Persistence/Builder/DatiFatturazioneSQLBuilder.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,56 @@ public static string SelectByIdEnte()
6363
return builderTemplate.RawSql;
6464
}
6565

66+
public static string SelectByDescrizioneCount()
67+
{
68+
return $@"
69+
SELECT COUNT(*)
70+
FROM pfd.Enti e
71+
INNER JOIN (
72+
SELECT internalistitutionid, product, FkIdTipoContratto,
73+
ROW_NUMBER() OVER (PARTITION BY internalistitutionid ORDER BY createdat DESC) as rn
74+
FROM pfd.Contratti
75+
) c ON e.InternalIstitutionId = c.internalistitutionid AND c.rn = 1
76+
LEFT JOIN pfw.DatiFatturazione f ON e.InternalIstitutionId = f.FkIdEnte
77+
";
78+
}
79+
public static string SelectByDescrizionev2()
80+
{
81+
return $@"
82+
SELECT
83+
e.description as RagioneSociale,
84+
ISNULL(f.FkIdEnte, e.InternalIstitutionId) AS IdEnte,
85+
ISNULL(f.FkProdotto, c.product) AS Prodotto,
86+
e.institutionType as Profilo,
87+
f.IdDatiFatturazione as Id,
88+
f.Cup,
89+
f.NotaLegale,
90+
f.CodCommessa,
91+
f.DataDocumento,
92+
f.SplitPayment,
93+
f.IdDocumento,
94+
f.Map,
95+
f.FkTipoCommessa,
96+
f.Pec,
97+
f.DataCreazione,
98+
f.DataModifica,
99+
c.FkIdTipoContratto,
100+
tc.Descrizione as TipoContratto,
101+
f.CodiceSDI,
102+
c.codiceSDI as ContrattoCodiceSDI
103+
FROM pfd.Enti e
104+
INNER JOIN (
105+
SELECT internalistitutionid, product, FkIdTipoContratto, codiceSDI,
106+
ROW_NUMBER() OVER (PARTITION BY internalistitutionid ORDER BY createdat DESC) as rn
107+
FROM pfd.Contratti
108+
) c ON e.InternalIstitutionId = c.internalistitutionid AND c.rn = 1
109+
LEFT JOIN pfw.DatiFatturazione f
110+
ON e.InternalIstitutionId = f.FkIdEnte
111+
LEFT JOIN pfw.TipoContratto tc
112+
ON tc.IdTipoContratto = c.FkIdTipoContratto
113+
";
114+
}
115+
66116
public static string SelectByDescrizione(bool all = true)
67117
{
68118
DatiFatturazioneEnteDto? @obj = null;
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,82 @@
11
using System.Data;
2+
using Dapper;
23
using PortaleFatture.BE.Core.Common;
34
using PortaleFatture.BE.Core.Extensions;
5+
using PortaleFatture.BE.Infrastructure.Common.pagoPA.FinancialReports.Dto;
46
using PortaleFatture.BE.Infrastructure.Common.Persistence;
57
using PortaleFatture.BE.Infrastructure.Common.SEND.DatiFatturazioni.Queries.Persistence.Builder;
6-
using PortaleFatture.BE.Infrastructure.Common.SEND.Tipologie.Queries.Persistence.Builder;
78

89
namespace PortaleFatture.BE.Infrastructure.Common.SEND.DatiFatturazioni.Queries.Persistence;
910

10-
public class DatiFatturazioneQueryGetByDescrizionePersistence(IPortaleFattureOptions options, string[]? idEnti, string? prodotto, string? profilo, int? top) : DapperBase, IQuery<IEnumerable<DatiFatturazioneEnteDto>?>
11+
public class DatiFatturazioneQueryGetByDescrizionePersistence(IPortaleFattureOptions options, string[]? idEnti, string? prodotto, string? profilo, int? idTipoContratto, int? page, int? size) : DapperBase, IQuery<DatiFatturazioneEnteWithCountDto?>
1112
{
1213
private readonly IPortaleFattureOptions _options = options;
1314
private readonly string[]? _idEnti = idEnti;
1415
private readonly string? _prodotto = prodotto;
1516
private readonly string? _profilo = profilo;
16-
private readonly int? _top = top;
17-
private static readonly string _sqlSelect = DatiFatturazioneSQLBuilder.SelectByDescrizione(false);
18-
private static readonly string _sqlSelectAll = DatiFatturazioneSQLBuilder.SelectByDescrizione(true);
19-
public async Task<IEnumerable<DatiFatturazioneEnteDto>?> Execute(IDbConnection? connection, string schema, IDbTransaction? transaction, CancellationToken cancellationToken = default)
17+
private readonly int? _idTipoContratto = idTipoContratto;
18+
private readonly int? _pageNumber = page;
19+
private readonly int? _pageSize = size;
20+
21+
private static readonly string _sqlSelect = DatiFatturazioneSQLBuilder.SelectByDescrizionev2();
22+
private static readonly string _sqlCount = DatiFatturazioneSQLBuilder.SelectByDescrizioneCount();
23+
public async Task<DatiFatturazioneEnteWithCountDto?> Execute(IDbConnection? connection, string schema, IDbTransaction? transaction, CancellationToken cancellationToken = default)
2024
{
21-
string? sql;
22-
if (_idEnti!.IsNullNotAny())
23-
sql = _sqlSelectAll.Add(schema);
25+
DatiFatturazioneEnteWithCountDto df = new();
26+
27+
var conditions = new List<string>();
28+
29+
if (!_idEnti!.IsNullNotAny())
30+
conditions.Add("e.InternalIstitutionId IN @idEnti");
31+
32+
if (!string.IsNullOrEmpty(_prodotto))
33+
conditions.Add("c.product = @prodotto");
2434
else
25-
sql = _sqlSelect.Add(schema);
35+
conditions.Add("c.product is not null");
2636

27-
sql = sql.AddJoin(_options.SelfCareSchema!);
28-
sql += EnteSQLBuilder.AddSearch(_prodotto, _profilo);
29-
sql = sql.AddTop(_top);
30-
return await ((IDatabase)this).SelectAsync<DatiFatturazioneEnteDto>(connection!, sql, new
37+
if (!string.IsNullOrEmpty(_profilo))
38+
conditions.Add("e.institutionType = @profilo");
39+
else
40+
conditions.Add("e.institutionType is not null");
41+
42+
if (_idTipoContratto.HasValue)
43+
conditions.Add("c.FkIdTipoContratto = @idTipoContratto");
44+
else
45+
conditions.Add("c.FkIdTipoContratto is not null");
46+
47+
var whereClause = conditions.Count != 0 ? " WHERE " + string.Join(" AND ", conditions) : "";
48+
var sql = _sqlSelect + whereClause;
49+
var sqlCount = _sqlCount + whereClause;
50+
51+
sql += " ORDER BY e.InternalIstitutionId ";
52+
53+
if(_pageNumber.HasValue || _pageSize.HasValue)
3154
{
32-
idEnti = _idEnti,
33-
prodotto = _prodotto,
34-
profilo = _profilo
35-
}, transaction);
55+
sql += " OFFSET (@pageNumber - 1) * @pageSize ROWS ";
56+
sql += " FETCH NEXT @pageSize ROWS ONLY ";
57+
}
58+
59+
var sqlMultiple = String.Join(";", sql, sqlCount);
60+
61+
using var values = await ((IDatabase)this).QueryMultipleAsync<GridFinancialReportDto>(
62+
connection!,
63+
sqlMultiple,
64+
new
65+
{
66+
idEnti = _idEnti,
67+
prodotto = _prodotto,
68+
profilo = _profilo,
69+
idTipoContratto = _idTipoContratto,
70+
pageNumber = _pageNumber,
71+
pageSize = _pageSize
72+
},
73+
transaction,
74+
CommandType.Text,
75+
null,
76+
CommandFlags.NoCache);
77+
df.DatiFatturazioneEnte = await values.ReadAsync<DatiFatturazioneEnteDto>();
78+
df.Count = await values.ReadFirstAsync<int>();
79+
80+
return df;
3681
}
3782
}

src/Infrastructure/PortaleFatture.BE.Infrastructure/Common/SEND/DatiFatturazioni/QueryHandlers/DatiFatturazioneQueryGetByDescrizioneHandler.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace PortaleFatture.BE.Infrastructure.Common.SEND.DatiFatturazioni.QueryHandlers;
1313

14-
public class DatiFatturazioneQueryGetByDescrizioneHandler : IRequestHandler<DatiFatturazioneQueryGetByDescrizione, IEnumerable<DatiFatturazioneEnteDto>?>
14+
public class DatiFatturazioneQueryGetByDescrizioneHandler : IRequestHandler<DatiFatturazioneQueryGetByDescrizione, DatiFatturazioneEnteWithCountDto?>
1515
{
1616
private readonly IFattureDbContextFactory _factory;
1717
private readonly ILogger<DatiFatturazioneQueryGetByDescrizioneHandler> _logger;
@@ -29,16 +29,20 @@ public DatiFatturazioneQueryGetByDescrizioneHandler(
2929
_options = options;
3030
}
3131

32-
public async Task<IEnumerable<DatiFatturazioneEnteDto>?> Handle(DatiFatturazioneQueryGetByDescrizione command, CancellationToken ct)
32+
public async Task<DatiFatturazioneEnteWithCountDto?> Handle(DatiFatturazioneQueryGetByDescrizione command, CancellationToken ct)
3333
{
3434
if (command.AuthenticationInfo!.Auth! != AuthType.PAGOPA)
35-
throw new SecurityException();
36-
35+
throw new SecurityException();
36+
3737
using var uow = await _factory.Create(cancellationToken: ct);
38-
return await uow.Query(new DatiFatturazioneQueryGetByDescrizionePersistence(_options,
38+
return await uow.Query(new DatiFatturazioneQueryGetByDescrizionePersistence(
39+
_options,
3940
command.IdEnti,
4041
command.Prodotto,
4142
command.Profilo,
42-
command.Top), ct);
43+
command.IdTipoContratto,
44+
command.PageNumber,
45+
command.PageSize),
46+
ct);
4347
}
4448
}

src/Infrastructure/PortaleFatture.BE.Infrastructure/Common/SEND/DatiModuloCommesse/Dto/ModuloCommessaPrevisionaleDownloadDto.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,31 @@ public class ModuloCommessaPrevisionaleDownloadDto
2424
public string? Stato { get; set; }
2525
public string? Prodotto { get; set; }
2626

27-
[Header(caption: "Totale", Order = 9)]
27+
[Header(caption: "Totale Euro", Order = 11)]
2828
public decimal? Totale { get; set; }
2929

30-
[Header(caption: "Data Inserimento", Order = 10)]
30+
[Header(caption: "Data Inserimento", Order = 9)]
3131
public DateTime? DataInserimento { get; set; }
3232

33-
[Header(caption: "Data Chiusura", Order = 11)]
33+
[Header(caption: "Data Chiusura", Order = 10)]
3434
public DateTime? DataChiusura { get; set; }
3535

3636
//[Header(caption: "Data Chiusura Legale", Order = 12)]
3737
public DateTime? DataChiusuraLegale { get; set; }
3838

39-
[Header(caption: "Totale Digitale Naz", Order = 13)]
39+
[Header(caption: "Totale Euro Digitale Naz", Order = 13)]
4040
public decimal? TotaleDigitaleNaz { get; set; }
4141

42-
[Header(caption: "Totale Digitale Internaz", Order = 14)]
42+
[Header(caption: "Totale Euro Digitale Internaz", Order = 14)]
4343
public decimal? TotaleDigitaleInternaz { get; set; }
4444

45-
[Header(caption: "Totale Analogico AR Naz", Order = 15)]
45+
[Header(caption: "Totale Euro Analogico AR Naz", Order = 15)]
4646
public decimal? TotaleAnalogicoARNaz { get; set; }
4747

48-
[Header(caption: "Totale Analogico AR Internaz", Order = 16)]
48+
[Header(caption: "Totale Euro Analogico AR Internaz", Order = 16)]
4949
public decimal? TotaleAnalogicoARInternaz { get; set; }
5050

51-
[Header(caption: "Totale Analogico 890 Naz", Order = 17)]
51+
[Header(caption: "Totale Euro Analogico 890 Naz", Order = 17)]
5252
public decimal? TotaleAnalogico890Naz { get; set; }
5353

5454
[Header(caption: "Totale Notifiche Digitale Naz", Order = 18)]
@@ -75,15 +75,15 @@ public class ModuloCommessaPrevisionaleDownloadDto
7575
[Header(caption: "Totale Notifiche", Order = 25)]
7676
public int? TotaleNotifiche { get; set; }
7777

78-
[Header(caption: "Source", Order = 26)]
78+
[Header(caption: "Stato", Order = 26)]
7979
public string? Source { get; set; }
8080

81-
[Header(caption: "Quarter", Order = 27)]
81+
[Header(caption: "Trimestre", Order = 27)]
8282
public string? Quarter { get; set; }
8383

8484
public List<ValoriRegioneDto>? ValoriRegione { get; set; }
8585

86-
[Header(caption: "Tipologia Contratto", Order = 29)]
86+
[Header(caption: "Tipo Contratto", Order = 29)]
8787
public string? TipologiaContratto { get; set; }
8888

8989
[Header(caption: "Data Contratto", Order = 30)]

0 commit comments

Comments
 (0)