Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into #207-DE-Fiskaly-Split…
Browse files Browse the repository at this point in the history
…-TAR-export
  • Loading branch information
forsthug committed May 6, 2024
2 parents 85c6850 + 27d8090 commit af09b22
Show file tree
Hide file tree
Showing 111 changed files with 5,003 additions and 288 deletions.
2 changes: 1 addition & 1 deletion queue/src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="fiskaltrust.interface" Version="1.3.50-rc1">
<PackageReference Include="fiskaltrust.interface" Version="1.3.55-rc2">
<NoWarn>NU1605</NoWarn>
<NoWarn>NU5104</NoWarn>
</PackageReference>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using fiskaltrust.ifPOS.v1;
using System.Linq;
using fiskaltrust.ifPOS.v1;

namespace fiskaltrust.Middleware.Localization.QueueAT.Extensions
{
Expand Down Expand Up @@ -39,5 +40,10 @@ public static bool IsOutOfOperationReceipt(this ReceiptRequest receiptRequest)
{
return ((receiptRequest.ftReceiptCase & 0x0000_0000_0000_FFFF) == 0x0000_0000_0000_0004);
}

public static bool HasChargeAndPayItems(this ReceiptRequest receiptRequest)
{
return ((receiptRequest.cbChargeItems != null && receiptRequest.cbChargeItems?.Count() != 0) || (receiptRequest.cbPayItems != null && receiptRequest.cbPayItems?.Count() != 0));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace fiskaltrust.Middleware.Localization.QueueAT.Helpers
{
internal static class ConversionHelper
public static class ConversionHelper
{
public static string ToBase64UrlString(byte[] bytes)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ public class JournalProcessorAT : IJournalProcessor, IMarketSpecificJournalProce
{
private readonly ILogger<JournalProcessorAT> _logger;
private readonly MiddlewareConfiguration _middlewareConfiguration;
private readonly ExportService _exportService;
private readonly IExportService _exportService;
private readonly IReadOnlyConfigurationRepository _configurationRepository;

public JournalProcessorAT(ILogger<JournalProcessorAT> logger, MiddlewareConfiguration middlewareConfiguration, ExportService exportService,
public JournalProcessorAT(ILogger<JournalProcessorAT> logger, MiddlewareConfiguration middlewareConfiguration, IExportService exportService,
IReadOnlyConfigurationRepository configurationRepository)
{
_logger = logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public void ConfigureServices(IServiceCollection services)
services.AddSingleton(sp => QueueATConfiguration.FromMiddlewareConfiguration(sp.GetRequiredService<MiddlewareConfiguration>()));

services.AddScoped<IATSSCDProvider, ATSSCDProvider>();
services.AddScoped<ExportService>();
services.AddScoped<RequestCommandFactory>();
services.AddScoped<IExportService, ExportService>();
services.AddScoped<IRequestCommandFactory, RequestCommandFactory>();

services.AddScoped<IMarketSpecificJournalProcessor, JournalProcessorAT>();
services.AddScoped<IMarketSpecificSignProcessor, SignProcessorAT>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@ internal class DisabledQueueReceiptCommand : RequestCommand
public DisabledQueueReceiptCommand(IATSSCDProvider sscdProvider, MiddlewareConfiguration middlewareConfiguration, QueueATConfiguration queueATConfiguration, ILogger<RequestCommand> logger)
: base(sscdProvider, middlewareConfiguration, queueATConfiguration, logger) { }

public override Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem)
public override Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem, ReceiptResponse response)
{
var response = CreateReceiptResponse(request, queueItem, queueAT, queue);
var actionJournals = new List<ftActionJournal>();

if (!_loggedDisabledQueueReceiptRequest)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,39 +16,50 @@

namespace fiskaltrust.Middleware.Localization.QueueAT.RequestCommands
{
internal class InitialOperationReceiptCommand : RequestCommand
public class InitialOperationReceiptCommand : RequestCommand
{
public override string ReceiptName => "Initial-operation receipt";

public InitialOperationReceiptCommand(IATSSCDProvider sscdProvider, MiddlewareConfiguration middlewareConfiguration, QueueATConfiguration queueATConfiguration, ILogger<RequestCommand> logger)
: base(sscdProvider, middlewareConfiguration, queueATConfiguration, logger) { }

public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem)
public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem, ReceiptResponse response)
{
ThrowIfTraining(request);
var response = CreateReceiptResponse(request, queueItem, queueAT, queue);

if (queue.StartMoment.HasValue)
if(request.HasChargeAndPayItems())
{
var alreadyActiveActionJournal = CreateActionJournal(queue, queueItem, $"Queue {queue.ftQueueId} is already activated, initial-operations-receipt cannot be executed.");
_logger.LogInformation(alreadyActiveActionJournal.Message);
var notZeroReceiptActionJournal = CreateActionJournal(queue, queueItem, $"Tried to activate {queue.ftQueueId}, but the incoming receipt is not a zero receipt.");
_logger.LogInformation(notZeroReceiptActionJournal.Message);

return new RequestCommandResponse
{
ReceiptResponse = response,
ActionJournals = new() { alreadyActiveActionJournal }
ActionJournals = new() { notZeroReceiptActionJournal }
};
}

if (request.cbChargeItems?.Count() != 0 || request.cbPayItems?.Count() != 0)
if (queue.StartMoment.HasValue)
{
var notZeroReceiptActionJournal = CreateActionJournal(queue, queueItem, $"Tried to activate {queue.ftQueueId}, but the incoming receipt is not a zero receipt.");
_logger.LogInformation(notZeroReceiptActionJournal.Message);
var alreadyActiveActionJournal = CreateActionJournal(queue, queueItem, $"Queue {queue.ftQueueId} is already activated.");
_logger.LogInformation(alreadyActiveActionJournal.Message);
var actionJournal = new List<ftActionJournal> { alreadyActiveActionJournal };

var (receiptIdentification, ftStateData, isBackupScuUsed, signatureItems, journalAt) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId, isZeroReceipt: true);
response.ftSignatures = response.ftSignatures.Concat(signatureItems).ToArray();
response.ftReceiptIdentification = receiptIdentification;
response.ftStateData = ftStateData;
if (isBackupScuUsed)
{
response.ftState |= 0x80;
}
response.ftSignatures = signatureItems.ToArray();

return new RequestCommandResponse
{
ReceiptResponse = response,
ActionJournals = new() { notZeroReceiptActionJournal }
ActionJournals = actionJournal,
JournalAT = journalAt
};
}

Expand Down Expand Up @@ -114,7 +125,7 @@ internal async Task<(List<ftActionJournal> actionJournals, ftJournalAT journalAT
actionJournals.Add(aj);


var (receiptIdentification, ftStateData, isBackupScuUsed, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId);
var (receiptIdentification, ftStateData, isBackupScuUsed, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId, isZeroReceipt: true);
response.ftSignatures = response.ftSignatures.Concat(signatureItems).ToArray();
response.ftReceiptIdentification = receiptIdentification;
response.ftStateData = ftStateData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,24 @@

namespace fiskaltrust.Middleware.Localization.QueueAT.RequestCommands
{
internal class MonthlyClosingReceiptCommand : RequestCommand
public class MonthlyClosingReceiptCommand : RequestCommand
{
private readonly ExportService _exportService;
private readonly IExportService _exportService;

public override string ReceiptName => "Monthly-closing receipt";

public MonthlyClosingReceiptCommand(IATSSCDProvider sscdProvider, MiddlewareConfiguration middlewareConfiguration, QueueATConfiguration queueATConfiguration,
ExportService exportService, ILogger<RequestCommand> logger)
IExportService exportService, ILogger<RequestCommand> logger)
: base(sscdProvider, middlewareConfiguration, queueATConfiguration, logger)
{
_exportService = exportService;
}

public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem)
public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem, ReceiptResponse response)
{
ThrowIfTraining(request);
var response = CreateReceiptResponse(request, queueItem, queueAT, queue);

if (request.cbChargeItems?.Count() != 0 || request.cbPayItems?.Count() != 0)
if (request.HasChargeAndPayItems())
{
var notZeroReceiptActionJournal = CreateActionJournal(queue, queueItem, $"Tried to create a monthly receipt for {queue.ftQueueId}, but the incoming receipt is not a zero receipt.");
_logger.LogInformation(notZeroReceiptActionJournal.Message);
Expand Down Expand Up @@ -63,15 +62,14 @@ internal async Task<(List<ftActionJournal> actionJournals, ftJournalAT journalAT
{
var actionJournals = new List<ftActionJournal>();

var (receiptIdentification, ftStateData, _, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId);
var (receiptIdentification, ftStateData, _, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId, isZeroReceipt: true);
response.ftSignatures = response.ftSignatures.Concat(signatureItems).ToArray();
response.ftReceiptIdentification = receiptIdentification;
response.ftStateData = ftStateData;

if (journalAT != null)
{
// Receipt successfully signed, process monthly receipt
queue.StopMoment = DateTime.UtcNow;
response.ftSignatures = response.ftSignatures.Extend(new SignaturItem
{
Caption = $"Monatsbeleg #{queueAT.LastSettlementMonth}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,18 @@

namespace fiskaltrust.Middleware.Localization.QueueAT.RequestCommands
{
internal class OutOfOperationReceiptCommand : RequestCommand
public class OutOfOperationReceiptCommand : RequestCommand
{
public override string ReceiptName => "Out-of-operation receipt";

public OutOfOperationReceiptCommand(IATSSCDProvider sscdProvider, MiddlewareConfiguration middlewareConfiguration, QueueATConfiguration queueATConfiguration, ILogger<RequestCommand> logger)
: base(sscdProvider, middlewareConfiguration, queueATConfiguration, logger) { }

public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem)
public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem, ReceiptResponse response)
{
ThrowIfTraining(request);
var response = CreateReceiptResponse(request, queueItem, queueAT, queue);

if (request.cbChargeItems?.Count() != 0 || request.cbPayItems?.Count() != 0)
if (request.HasChargeAndPayItems())
{
var notZeroReceiptActionJournal = CreateActionJournal(queue, queueItem, $"Tried to deactivate {queue.ftQueueId}, but the incoming receipt is not a zero receipt.");
_logger.LogInformation(notZeroReceiptActionJournal.Message);
Expand Down Expand Up @@ -57,7 +56,7 @@ internal async Task<(List<ftActionJournal> actionJournals, ftJournalAT journalAT
{
var actionJournals = new List<ftActionJournal>();

var (receiptIdentification, ftStateData, _, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId);
var (receiptIdentification, ftStateData, _, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId, isZeroReceipt: true);
response.ftSignatures = response.ftSignatures.Concat(signatureItems).ToArray();
response.ftReceiptIdentification = receiptIdentification;
response.ftStateData = ftStateData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@

namespace fiskaltrust.Middleware.Localization.QueueAT.RequestCommands
{
internal class PosReceiptCommand : RequestCommand
public class PosReceiptCommand : RequestCommand
{
public override string ReceiptName => "POS receipt";

public PosReceiptCommand(IATSSCDProvider sscdProvider, MiddlewareConfiguration middlewareConfiguration, QueueATConfiguration queueATConfiguration, ILogger<RequestCommand> logger)
: base(sscdProvider, middlewareConfiguration, queueATConfiguration, logger) { }

public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem)
public override async Task<RequestCommandResponse> ExecuteAsync(ftQueue queue, ftQueueAT queueAT, ReceiptRequest request, ftQueueItem queueItem, ReceiptResponse response)
{
var response = CreateReceiptResponse(request, queueItem, queueAT, queue);

var (receiptIdentification, ftStateData, _, signatureItems, journalAT) = await SignReceiptAsync(queueAT, request, response.ftReceiptIdentification, response.ftReceiptMoment, queueItem.ftQueueItemId);
response.ftSignatures = response.ftSignatures.Concat(signatureItems).ToArray();
response.ftReceiptIdentification = receiptIdentification;
Expand Down

0 comments on commit af09b22

Please sign in to comment.