From e3a7a3f94fb6d9d9566d999044db8ff7e6b3b24d Mon Sep 17 00:00:00 2001 From: Adriano Prado Date: Fri, 8 Sep 2023 12:51:15 -0300 Subject: [PATCH] =?UTF-8?q?Manter=20menu=20de=20relat=C3=B3rios=20em=20loo?= =?UTF-8?q?p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++----- cmd/cmd_util.go | 3 ++- cmd/relatorio.go | 32 ++++++++++++++++++++++++++------ cmd/root.go | 18 ++++++++++++------ rapina.yaml | 3 ++- 5 files changed, 54 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 2e11f28..b50a626 100644 --- a/README.md +++ b/README.md @@ -74,16 +74,23 @@ RAIA_DROGASIL_S.A.xlsx ### `rapina.yaml` -Caso deseje mudar o local de gravação do banco de dados e dos arquivos temporários, criar o arquivo `rapina.yaml` no mesmo diretório do executável (`rapinav2` ou `rapinav2.exe`) com os seguintes dados: +Para customizar os parâmetros, crie o arquivo `rapina.yaml` no mesmo diretório do executável (`rapinav2` ou `rapinav2.exe`) com um ou mais dos seguintes parâmetros: + +| Parâmetro | Descrição | +|-----------|-----------| +| `dataSrc` | Arquivo onde serão gravados os dados coletados
Default: ./.dados | +| `tempDir` | Diretório onde os arquivos temporários serão armazernados
Default: ./.dados | +| `reportDir` | Diretório onde os relatórios serão salvos
Default: ./ | + + +Exemplo: ```yaml -dataSrc: "/home/user1/dados/rapinav2.db?cache=shared&mode=rwc&_journal_mode=WAL&_busy_timeout=5000" +dataSrc: "/home/user1/dados/rapinav2.db tempDir: "/home/user1/dados" +reportDir: "/home/user1/relatorios" ``` -* `dataSrc`: arquivo do banco de dados. -* `tempDir`: diretório para arquivos temporários. - ## Build Para compilar o código fonte, basta seguir as instruções deste link: https://go.dev/doc/install diff --git a/cmd/cmd_util.go b/cmd/cmd_util.go index 8bbe66b..cffccfa 100644 --- a/cmd/cmd_util.go +++ b/cmd/cmd_util.go @@ -39,7 +39,8 @@ func escolherEmpresa(empresas []rapina.Empresa) (rapina.Empresa, bool) { templates := &promptui.SelectTemplates{ Help: `{{ "Para navegar:" | faint }} [{{ .NextKey | faint }} ` + `{{ .PrevKey | faint }} {{ .PageUpKey | faint }} {{ .PageDownKey | faint }}]` + - `{{ if .Search }} {{ "Para procurar:" | faint }} [{{ .SearchKey | faint }}]{{ end }}`, + `{{ if .Search }} {{ "Para procurar:" | faint }} [{{ .SearchKey | faint }}]{{ end }}` + + ` Para sair: [Ctrl-c]`, Label: "{{ . }}:", Active: " > {{ .Nome | red }}", Inactive: " {{ .Nome | blue }}", diff --git a/cmd/relatorio.go b/cmd/relatorio.go index 77a6952..41981d1 100644 --- a/cmd/relatorio.go +++ b/cmd/relatorio.go @@ -30,7 +30,7 @@ var relatorioCmd = &cobra.Command{ Aliases: []string{"relat", "report"}, Short: "imprimir relatório", Long: `relatorio das informações financeiras de uma empresa`, - Run: criarRelatório, + Run: menuRelatório, } func init() { @@ -40,7 +40,7 @@ func init() { rootCmd.AddCommand(relatorioCmd) } -func criarRelatório(cmd *cobra.Command, args []string) { +func menuRelatório(cmd *cobra.Command, args []string) { dfp, err := contabil.NovaDemonstraçãoFinanceira(db(), flags.tempDir) if err != nil { progress.Fatal(err) @@ -50,11 +50,19 @@ func criarRelatório(cmd *cobra.Command, args []string) { if err != nil { progress.Fatal(err) } - empresa, ok := escolherEmpresa(empresas) - if !ok { - progress.FatalMsg("Nenhuma empresa foi escolhida") + + for { + empresa, ok := escolherEmpresa(empresas) + if !ok { + progress.Warning("Até logo!") + os.Exit(0) + } + + criarRelatório(empresa, dfp) } +} +func criarRelatório(empresa rapina.Empresa, dfp *contabil.DemonstraçãoFinanceira) { filename, err := prepareFilename(flags.relatorio.outputDir, empresa.Nome) if err != nil { progress.Fatal(err) @@ -102,7 +110,12 @@ func criarRelatório(cmd *cobra.Command, args []string) { progress.Fatal(err) os.Exit(1) } - progress.Status("Relatório salvo como: %s", filename) + + status := fmt.Sprintf("Relatório salvo como: %s", filename) + line := strings.Repeat("-", min(len(status), 80)) + progress.Status(line) + progress.Status(status) + progress.Status(line + "\n\n") } type Excel struct { @@ -317,6 +330,13 @@ func stringWidth(str string) float64 { return width } +func min(a, b int) int { + if a < b { + return a + } + return b +} + // charWidth foi criado com este script em Python: // from PIL import ImageFont // font = ImageFont.truetype("calibri.ttf", 11) diff --git a/cmd/root.go b/cmd/root.go index 67e5caf..10a0009 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -114,8 +114,7 @@ func initConfig() { } progress.Debug("dataSrc = %s", flags.dataSrc) if err := createDir(flags.dataSrc); err != nil { - progress.Error(err) - os.Exit(1) + progress.Fatal(err) } flags.tempDir = tempDirDefault @@ -124,9 +123,17 @@ func initConfig() { } progress.Debug("tempDir = %s", flags.tempDir) if err := createDir(flags.tempDir); err != nil { - progress.Error(err) - os.Exit(1) + progress.Fatal(err) } + + if viper.IsSet("reportDir") { + flags.relatorio.outputDir = viper.GetString("reportDir") + } + progress.Debug("reportDir = %s", flags.relatorio.outputDir) + if err := createDir(flags.relatorio.outputDir); err != nil { + progress.Fatal(err) + } + fmt.Printf("\n\n") } @@ -139,8 +146,7 @@ func db() *sqlx.DB { var err error _db, err := sqlx.Open("sqlite3", flags.dataSrc) if err != nil { - progress.ErrorMsg("Erro ao abrir/criar o banco de dados, verificar se o diretório existe: %s", flags.dataSrc) - os.Exit(1) + progress.FatalMsg("Erro ao abrir/criar o banco de dados, verificar se o diretório existe: %s", flags.dataSrc) } _db.SetMaxOpenConns(1) diff --git a/rapina.yaml b/rapina.yaml index b9300d2..31d8ab5 100644 --- a/rapina.yaml +++ b/rapina.yaml @@ -1,5 +1,6 @@ dataSrc: "/home/adr/var/rapina/rapina.db?cache=shared&mode=rwc&_journal_mode=WAL&_busy_timeout=5000" tempDir: "/home/adr/var/rapina" +reportDir: "/mnt/share" modelos: global: @@ -76,4 +77,4 @@ modelos: relatórios: relatório 1: - - ok \ No newline at end of file + - ok