Skip to content

Commit

Permalink
Merge branch 'local-pdf-printing-support'
Browse files Browse the repository at this point in the history
  • Loading branch information
toudi committed Dec 29, 2023
2 parents 24172ed + 0fc4db4 commit 60e1944
Show file tree
Hide file tree
Showing 79 changed files with 4,503 additions and 655 deletions.
1 change: 1 addition & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ archives:
files:
- przykladowe-pliki-wejsciowe
- klucze
- examples
- src: docs/ksef-dokumentacja-uzytkownika.pdf
dst: ksef-dokumentacja-uzytkownika.pdf

Expand Down
42 changes: 34 additions & 8 deletions cmd/ksef/commands/download-pdf.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package commands
import (
"flag"
"fmt"
"ksef/internal/pdf"
"ksef/internal/registry"
"ksef/internal/sei/api/client"
"ksef/internal/sei/api/upload/interactive"
"ksef/internal/sei/api/session/interactive"
"path/filepath"
"strings"
)
Expand All @@ -14,7 +15,7 @@ type downloadPDFCommand struct {
Command
}
type downloadPDFArgsType struct {
internalArgs registry.DownloadPDFArgs
internalArgs pdf.DownloadPDFArgs
path string
}

Expand All @@ -32,12 +33,37 @@ func init() {
},
}

DownloadPDFCommand.FlagSet.StringVar(&downloadPDFArgs.path, "p", "", "ścieżka do pliku rejestru")
DownloadPDFCommand.FlagSet.StringVar(&downloadPDFArgs.internalArgs.Output, "o", "", "ścieżka do zapisu PDF (domyślnie katalog pliku statusu + {nrRef}.pdf)")
DownloadPDFCommand.FlagSet.StringVar(&downloadPDFArgs.internalArgs.Invoice, "i", "", "numer faktury do pobrania. Wartość * oznacza pobranie wszystkich faktur z rejestru")
DownloadPDFCommand.FlagSet.StringVar(&downloadPDFArgs.internalArgs.IssuerToken, "token", "", "Token sesji interaktywnej lub nazwa zmiennej środowiskowej która go zawiera")
DownloadPDFCommand.FlagSet.StringVar(
&downloadPDFArgs.path,
"p",
"",
"ścieżka do pliku rejestru",
)
DownloadPDFCommand.FlagSet.StringVar(
&downloadPDFArgs.internalArgs.Output,
"o",
"",
"ścieżka do zapisu PDF (domyślnie katalog pliku statusu + {nrRef}.pdf)",
)
DownloadPDFCommand.FlagSet.StringVar(
&downloadPDFArgs.internalArgs.Invoice,
"i",
"",
"numer faktury do pobrania. Wartość * oznacza pobranie wszystkich faktur z rejestru",
)
DownloadPDFCommand.FlagSet.StringVar(
&downloadPDFArgs.internalArgs.IssuerToken,
"token",
"",
"Token sesji interaktywnej lub nazwa zmiennej środowiskowej która go zawiera",
)
// DownloadPDFCommand.FlagSet.StringVar(&downloadPDFArgs.internalArgs.Token, "token", "", "token sesji")
DownloadPDFCommand.FlagSet.BoolVar(&downloadPDFArgs.internalArgs.SaveXml, "xml", false, "zapisz źródłowy plik XML")
DownloadPDFCommand.FlagSet.BoolVar(
&downloadPDFArgs.internalArgs.SaveXml,
"xml",
false,
"zapisz źródłowy plik XML",
)

registerCommand(&DownloadPDFCommand.Command)
}
Expand Down Expand Up @@ -67,7 +93,7 @@ func downloadPDFRun(c *Command) error {
}

if strings.HasSuffix(strings.ToLower(downloadPDFArgs.internalArgs.Invoice), ".xml") {
return registry.DownloadPDF(gateway, &downloadPDFArgs.internalArgs)
return pdf.DownloadPDFFromLocalFile(gateway, registry, &downloadPDFArgs.internalArgs)
}

return interactive.DownloadPDFFromAPI(gateway, &downloadPDFArgs.internalArgs, registry)
Expand Down
23 changes: 20 additions & 3 deletions cmd/ksef/commands/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package commands
import (
"flag"
"fmt"
"ksef/internal/logging"
"ksef/internal/sei"
inputprocessors "ksef/internal/sei/input_processors"
)
Expand Down Expand Up @@ -36,15 +37,31 @@ func init() {

GenerateCmd.FlagSet.StringVar(&generateArgs.FileName, "f", "", "nazwa pliku do przetworzenia")
GenerateCmd.FlagSet.StringVar(&generateArgs.Output, "o", "", "nazwa katalogu wyjściowego")
GenerateCmd.FlagSet.StringVar(&generateArgs.Delimiter, "d", ",", "łańcuch znaków rozdzielający pola (tylko dla CSV)")
GenerateCmd.FlagSet.StringVar(&generateArgs.SheetName, "s", "", "Nazwa skoroszytu do przetworzenia (tylko dla XLSX)")
GenerateCmd.FlagSet.StringVar(
&generateArgs.Delimiter,
"d",
",",
"łańcuch znaków rozdzielający pola (tylko dla CSV)",
)
GenerateCmd.FlagSet.StringVar(
&generateArgs.SheetName,
"s",
"",
"Nazwa skoroszytu do przetworzenia (tylko dla XLSX)",
)
GenerateCmd.FlagSet.StringVar(&generateArgs.GeneratorName, "g", "fa-2", "nazwa generatora")
GenerateCmd.FlagSet.StringVar(&generateArgs.EncodingConversionFile, "e", "", "użyj pliku z konwersją znaków (tylko dla CSV)")
GenerateCmd.FlagSet.StringVar(
&generateArgs.EncodingConversionFile,
"e",
"",
"użyj pliku z konwersją znaków (tylko dla CSV)",
)

registerCommand(&GenerateCmd.Command)
}

func generateRun(c *Command) error {
logging.GenerateLogger.Info("generate")
if generateArgs.FileName == "" || generateArgs.Output == "" {
GenerateCmd.FlagSet.Usage()
return nil
Expand Down
4 changes: 2 additions & 2 deletions cmd/ksef/commands/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"fmt"
"ksef/internal/logging"
"ksef/internal/sei/api/client"
"ksef/internal/sei/api/upload/batch"
"ksef/internal/sei/api/session/batch"
)

type metadataCommand struct {
Expand Down Expand Up @@ -43,7 +43,7 @@ func metadataRun(c *Command) error {
return nil
}

logging.SeiLogger.Info().Msg("generowanie metadanych")
logging.SeiLogger.Info("generowanie metadanych")

var environment = client.ProductionEnvironment
if metadataArgs.testGateway {
Expand Down
43 changes: 35 additions & 8 deletions cmd/ksef/commands/payment-id.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"io"
"ksef/internal/registry"
"ksef/internal/sei/api/client"
"ksef/internal/sei/api/upload/interactive"
"ksef/internal/sei/api/session/interactive"
"os"

"gopkg.in/yaml.v3"
Expand Down Expand Up @@ -39,11 +39,36 @@ func init() {
},
}

GeneratePaymentIdCommand.FlagSet.StringVar(&generatePaymentIdArgs.path, "p", "", "ścieżka do pliku rejestru")
GeneratePaymentIdCommand.FlagSet.StringVar(&generatePaymentIdArgs.output, "o", "", "Plik do zapisania wyjścia")
GeneratePaymentIdCommand.FlagSet.BoolVar(&generatePaymentIdArgs.yaml, "yaml", false, "Użyj formatu YAML do zapisania wyjścia")
GeneratePaymentIdCommand.FlagSet.BoolVar(&generatePaymentIdArgs.json, "json", false, "Użyj formatu JSON do zapisania wyjścia")
GeneratePaymentIdCommand.FlagSet.StringVar(&generatePaymentIdArgs.issuerToken, "token", "", "Token sesji interaktywnej lub nazwa zmiennej środowiskowej która go zawiera")
GeneratePaymentIdCommand.FlagSet.StringVar(
&generatePaymentIdArgs.path,
"p",
"",
"ścieżka do pliku rejestru",
)
GeneratePaymentIdCommand.FlagSet.StringVar(
&generatePaymentIdArgs.output,
"o",
"",
"Plik do zapisania wyjścia",
)
GeneratePaymentIdCommand.FlagSet.BoolVar(
&generatePaymentIdArgs.yaml,
"yaml",
false,
"Użyj formatu YAML do zapisania wyjścia",
)
GeneratePaymentIdCommand.FlagSet.BoolVar(
&generatePaymentIdArgs.json,
"json",
false,
"Użyj formatu JSON do zapisania wyjścia",
)
GeneratePaymentIdCommand.FlagSet.StringVar(
&generatePaymentIdArgs.issuerToken,
"token",
"",
"Token sesji interaktywnej lub nazwa zmiennej środowiskowej która go zawiera",
)

registerCommand(&GeneratePaymentIdCommand.Command)
}
Expand Down Expand Up @@ -100,7 +125,9 @@ func generatePaymentIdRun(c *Command) error {

// we are in the generation mode.
if len(invoiceIds) < 2 {
return fmt.Errorf("stworzenie identyfikatora płatności wymaga co najmniej dwóch numerów faktur")
return fmt.Errorf(
"stworzenie identyfikatora płatności wymaga co najmniej dwóch numerów faktur",
)
}

seiRefNumbers, err := _registry.GetSEIRefNoFromArray(invoiceIds)
Expand All @@ -119,7 +146,7 @@ func generatePaymentIdRun(c *Command) error {
session.SetIssuerToken(generatePaymentIdArgs.issuerToken)
}

if err = session.Login(_registry.Issuer); err != nil {
if err = session.Login(_registry.Issuer, true); err != nil {
return fmt.Errorf("błąd logowania do KSeF: %v", err)
}

Expand Down
117 changes: 117 additions & 0 deletions cmd/ksef/commands/render-pdf.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package commands

import (
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"flag"
"fmt"
"ksef/internal/logging"
"ksef/internal/pdf"
"ksef/internal/registry"
"ksef/internal/utils"
"os"
)

type renderPDFCommand struct {
Command
}
type renderPDFArgsType struct {
path string
resolverConfig utils.FilepathResolverConfig
invoice string
}

var RenderPDFCommand *renderPDFCommand
var renderPDFArgs renderPDFArgsType

func init() {
RenderPDFCommand = &renderPDFCommand{
Command: Command{
Name: "render-pdf",
FlagSet: flag.NewFlagSet("render-pdf", flag.ExitOnError),
Description: "drukuje PDF dla wskazanej faktury używając lokalnego szablonu",
Run: renderPDFRun,
Args: renderPDFArgs,
},
}

RenderPDFCommand.FlagSet.StringVar(
&renderPDFArgs.path,
"p",
"",
"ścieżka do pliku rejestru",
)
RenderPDFCommand.FlagSet.StringVar(
&renderPDFArgs.resolverConfig.Path,
"o",
"",
"ścieżka do zapisu PDF (domyślnie katalog pliku statusu + {nrRef}.pdf)",
)
RenderPDFCommand.FlagSet.BoolVar(
&renderPDFArgs.resolverConfig.Mkdir,
"m",
false,
"stwórz katalog, jeśli wskazany do zapisu nie istnieje",
)
RenderPDFCommand.FlagSet.StringVar(
&renderPDFArgs.invoice,
"i",
"",
"plik XML do wizualizacji",
)

registerCommand(&RenderPDFCommand.Command)
}

func renderPDFRun(c *Command) error {
if renderPDFArgs.path == "" || renderPDFArgs.invoice == "" {
RenderPDFCommand.FlagSet.Usage()
return nil
}

registry, err := registry.LoadRegistry(renderPDFArgs.path)
if err != nil {
return fmt.Errorf("unable to load registry from file: %v", err)
}

if registry.Environment == "" {
return fmt.Errorf("file deserialized correctly, but environment is empty")
}

fileContent, err := os.ReadFile(renderPDFArgs.invoice)
if err != nil {
return fmt.Errorf("nie udało się odczytać pliku źródłowego")
}

hasher := sha256.New()
hasher.Write(fileContent)
fileChecksum := hex.EncodeToString(hasher.Sum(nil))
fileBase64 := base64.StdEncoding.EncodeToString(fileContent)

logging.PDFRendererLogger.Debug("calculated checksum", "checksum", fileChecksum)

invoiceMeta := registry.GetInvoiceByChecksum(fileChecksum)
if invoiceMeta.Checksum != fileChecksum {
return fmt.Errorf("nie udało się znaleźć faktury na podstawie kryteriów wejściowych")
}

renderPDFArgs.resolverConfig.DefaultFilename = fmt.Sprintf(
"%s.pdf",
invoiceMeta.SEIReferenceNumber,
)

outputPath, err := utils.ResolveFilepath(renderPDFArgs.resolverConfig)
if err == utils.ErrDoesNotExistAndMkdirNotSpecified {
return fmt.Errorf("wskazany katalog nie istnieje a nie użyłeś opcji `-m`")
}
if err != nil {
return fmt.Errorf("błąd tworzenia katalogu wyjściowego: %v", err)
}

printingEngine, err := pdf.GetLocalPrintingEngine()
if err != nil {
return fmt.Errorf("nie udało się zainicjować silnika drukowania: %v", err)
}
return printingEngine.Print(fileBase64, invoiceMeta, outputPath)
}
2 changes: 1 addition & 1 deletion cmd/ksef/commands/save-token.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"flag"
"fmt"
"ksef/internal/sei/api/client"
"ksef/internal/sei/api/upload/interactive"
"ksef/internal/sei/api/session/interactive"
)

type saveTokenCommand struct {
Expand Down
Loading

0 comments on commit 60e1944

Please sign in to comment.