Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ public async Task<ProcessCommandResponse> ProcessReceiptAsync(ProcessCommandRequ

public async Task<ProcessCommandResponse> ProtocolUnspecified0x3000Async(ProcessCommandRequest request)
{
if ((request.ReceiptRequest.ftReceiptCase & 0x0000_0002_0000_0000) != 0)
if ((request.ReceiptRequest.ftReceiptCase & 0x0000_0002_0000_0000) != 0
|| (request.ReceiptRequest.ftReceiptCase & 0x0000_0000_0400_0000) != 0)
{
var (queue, queueIT, receiptRequest, receiptResponse, queueItem) = request;
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public static class ReceiptCaseHelper

public static bool IsReprint(this ReceiptRequest request) => (request.ftReceiptCase & 0x0000_0000_0000_FFFF) == (long) ITReceiptCases.Reprint0x3010;

public static bool IsRebootPrinter(this ReceiptRequest receiptRequest) => (receiptRequest.ftReceiptCase & 0x0000_0000_0400_0000) > 0x0000;

public static bool IsZeroReceipt(this ReceiptRequest request) => (request.ftReceiptCase & 0x0000_0000_0000_FFFF) == (long) ITReceiptCases.ZeroReceipt0x2000;

public static bool IsOutOfOperationReceipt(this ReceiptRequest request) => (request.ftReceiptCase & 0x0000_0000_0000_FFFF) == (long) ITReceiptCases.OutOfOperationReceipt0x4002;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,17 @@ public static SignaturItem[] CreateVoucherSignatures(NonFiscalRequest nonFiscalR
return signs.ToArray();
}

public static SignaturItem[] CreateRebootPrinterCommandSignatures() => new SignaturItem[]
{
new SignaturItem
{
Caption = "reboot-printer-command",
Data = "Printer web server reboot initiated.",
ftSignatureFormat = (long) SignaturItem.Formats.Text,
ftSignatureType = ITConstants.BASE_STATE | (long) SignatureTypesIT.RTCommand
}
};

public static List<SignaturItem> CreateDocumentoCommercialeSignatures(POSReceiptSignatureData data)
{
var signatureItems = new List<SignaturItem>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ public enum SignatureTypesIT

RTReferenceZNumber = 0x20,
RTReferenceDocumentNumber = 0x21,
RTReferenceDocumentMoment = 0x22
RTReferenceDocumentMoment = 0x22,
RTCommand = 0x23
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ public override async Task<ProcessResponse> ProcessReceiptAsync(ProcessRequest r
return await ProcessPerformReprint(request);
}

if (request.ReceiptRequest.IsRebootPrinter())
{
return await ProcessRebootPrinterCommand(request);
}

if (receiptCase == (long) ITReceiptCases.ProtocolUnspecified0x3000 && ((request.ReceiptRequest.ftReceiptCase & 0x0000_0002_0000_0000) != 0))
{
return await ProcessUnspecifiedProtocolReceipt(request);
Expand Down Expand Up @@ -620,6 +625,35 @@ private async Task<ProcessResponse> ProcessVoidReceipt(ProcessRequest request)
}
}

private async Task<ProcessResponse> ProcessRebootPrinterCommand(ProcessRequest request)
{
try
{
await ResetPrinter();
var rebootCommand = new PrinterCommand() { DirectIO = DirectIO.GetRestartPrinterCommand() };
var xml = SoapSerializer.Serialize(rebootCommand);

var response = await _httpClient.SendCommandAsync(xml, noStatus: true);
using var responseContent = await response.Content.ReadAsStreamAsync();
var result = SoapSerializer.DeserializeToSoapEnvelope<PrinterCommandResponse>(responseContent);
if (result?.Success == false)
{
var error = GetErrorInfo(result.Code, result.Status, null);
request.ReceiptResponse.SetReceiptResponseErrored(error.Info);
return new ProcessResponse { ReceiptResponse = request.ReceiptResponse };
}

request.ReceiptResponse.ftSignatures = SignatureFactory.CreateRebootPrinterCommandSignatures();
return new ProcessResponse { ReceiptResponse = request.ReceiptResponse };
}
catch (Exception e)
{
var errorInfo = Helpers.ExceptionInfo(e);
request.ReceiptResponse.SetReceiptResponseErrored(errorInfo.SSCDErrorInfo?.Info ?? "");
return new ProcessResponse { ReceiptResponse = request.ReceiptResponse };
}
}

private async Task<string> GetSerialNumberAsync(string rtType)
{
var serialQuery = new PrinterCommand() { DirectIO = DirectIO.GetSerialNrCommand() };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ namespace fiskaltrust.Middleware.SCU.IT.EpsonRTPrinter;
public interface IEpsonFpMateClient
{
Task<HttpResponseMessage> SendCommandAsync(string payload);
Task<HttpResponseMessage> SendCommandAsync(string payload, bool noStatus);
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,15 @@ public async Task<HttpResponseMessage> SendCommandAsync(string content)
}
return response;
}

public async Task<HttpResponseMessage> SendCommandAsync(string content, bool noStatus)
{
var url = noStatus ? _commandUrl + "&directio_no_status=1" : _commandUrl;
var response = await _httpClient.PostAsync(url, new StringContent(content, Encoding.UTF8, "application/xml"));
if (!response.IsSuccessStatusCode)
{
throw new HttpRequestException($"An error occured while sending a request to the Epson device (StatusCode: {response.StatusCode}, Content: {await response.Content.ReadAsStringAsync()})");
}
return response;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class PrinterCommand

[XmlElement(ElementName = "directIO")]
public DirectIO? DirectIO { get; set; }

}

[XmlType("resetPrinter")]
Expand All @@ -29,6 +30,7 @@ public class DirectIO
public string? Data { get; set; }

public static DirectIO GetSerialNrCommand() => new() { Command = "3217", Data = "00" };
public static DirectIO GetRestartPrinterCommand() => new() { Command = "4034", Data = "0198" };
}

[XmlType("response")]
Expand Down Expand Up @@ -56,4 +58,5 @@ public class CommandResponse
[XmlElement(ElementName = "responseData")]
public string? ResponseData { get; set; }
}

}
Loading