14 KiB
Story 2.1: Exibir Campo de Acréscimo na Tela do Pedido
Status: done
Story
Como representante de vendas, quero ver um campo de acréscimo sempre visível na tela do pedido, para que eu saiba em todo momento se há acréscimo aplicado, mesmo que seja zero.
Acceptance Criteria
-
Dado que estou na tela de edição do pedido (
UpdatePedidoActivity) Quando a tela for exibida (qualquer aba) Então um campo "Acréscimo" é visível mostrando R$ 0,00 por padrão -
Dado que nenhuma forma de pagamento foi selecionada ou a selecionada tem
tx_acrescimo = 0Quando o campo acréscimo for exibido Então mostra "R$ 0,00" — nunca fica oculto ou em branco
Escopo desta história
Esta história cobre exclusivamente a adição do widget "Acréscimo" na UI, sempre visível, com valor estático R$ 0,00.
- NÃO faz cálculo — cálculo automático ao selecionar forma de pagamento é escopo da Story 2.2
- NÃO persiste valor no pedido — persistência é escopo da Story 2.3
- NÃO lê
tx_acrescimodo banco nesta história — a Story 2.2 usará o campo criado aqui para exibir o valor calculado
Tasks / Subtasks
-
Task 1: Adicionar campo Acréscimo no layout da aba Total (AC: 1, 2)
- 1.1 - Em
res/layout/fragment_total_pedido.xml: alterarandroid:layout_height="271dp"doLinearLayoutinterno parawrap_content(necessário para acomodar a nova linha sem cortar conteúdo) - 1.2 - Inserir novo
LinearLayoutde linha entre a linha de "Total ICMS-ST (+)" e a linha de "Total (=)", seguindo exatamente o mesmo padrão das linhas existentes:Atenção: usar "Acrescimo" sem acento no atributo<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="12dp" > <TextView android:id="@+id/tvLabelAcrescimoPedido" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:paddingLeft="12dp" android:text="Acrescimo (+)" /> <TextView android:id="@+id/tvAcrescimoPedido" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:paddingRight="12dp" android:text="0,00" /> </LinearLayout>android:textdo label pois strings com acento em XML de layout podem funcionar, mas verificar se o projeto usa arquivostrings.xmlpara textos — se sim, adicionar entrada lá. Verificar padrão existente: "Peso Líquido" usa diretamente no XML, então manter padrão do projeto. - 1.3 - Em
TotalPedidoFragment.java: declararprivate TextView tvAcrescimo;junto com os outros campos de texto (linha ~22) - 1.4 - Em
onCreateView(): vinculartvAcrescimo = (TextView) rootView.findViewById(R.id.tvAcrescimoPedido); - 1.5 - Em
FillFields(): apóstvTotalIcmsST.setText(...), adicionartvAcrescimo.setText(Util.formataValorMonetario(0.0));— sempre R$ 0,00 nesta história
- 1.1 - Em
-
Task 2: Adicionar campo Acréscimo no resumo da aba Dados (AC: 1, 2)
- 2.1 - Em
res/layout/fragment_main_pedido.xml: inserir novoTableRowpara acréscimo dentro doTableLayoutexistente (linhas 235-314), entretableRowQtdTotaletableRowTotalGeral:<TableRow android:id="@+id/tableRowAcrescimo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="12dp" android:paddingLeft="12dp" android:paddingRight="12dp" > <TextView android:id="@+id/tvLabelAcrescimo_pedido" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Acrescimo" /> <TextView android:id="@+id/tvAcrescimo_pedido" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="right" android:text="R$ 0,00" /> </TableRow> - 2.2 - Em
MainPedidoFragment.java: declararprivate TextView tvAcrescimoPedido;junto com os outros campos (linha ~67) - 2.3 - Em
onCreateView(): vinculartvAcrescimoPedido = (TextView) rootView.findViewById(R.id.tvAcrescimo_pedido); - 2.4 - Em
fillFields(): adicionartvAcrescimoPedido.setText(Util.formataValorMonetario(0.0));após o bloco de cálculo detotalGeral - 2.5 - Em
atualizarResumoPedido(): adicionartvAcrescimoPedido.setText(Util.formataValorMonetario(0.0));após o cálculo detotalGeral(este método é chamado ao selecionar forma de pagamento — Story 2.2 vai atualizar aqui com o valor real)
- 2.1 - Em
Dev Notes
Estrutura de fragmentos do pedido
UpdatePedidoActivity usa ViewPager com PedidoTabAdapter (4 tabs):
- Posição 0:
MainPedidoFragment— aba "Dados" — layoutfragment_main_pedido.xml - Posição 1:
ItensPedidoFragment— aba "Itens" - Posição 2:
TotalPedidoFragment— aba "Total" — layoutfragment_total_pedido.xml - Posição 3:
FlexPedidoFragment— aba "Flex"
O campo Acréscimo deve aparecer em ambos: aba Dados (resumo) e aba Total (detalhado).
Padrão de nomeação de IDs existente
| Fragment | Padrão de ID | Exemplos |
|---|---|---|
TotalPedidoFragment |
tvXxxPedido |
tvTotalGeralPedido, tvTotalIcmsSTPedido |
MainPedidoFragment |
tvXxx_pedido (com underscore) |
tvTotal_pedido_geral, tvCodLiberacao_pedido |
Manter este padrão para os novos IDs:
- Total fragment:
tvAcrescimoPedido - Main fragment:
tvAcrescimo_pedido
Posicionamento visual na aba Total
Ordem atual das linhas em fragment_total_pedido.xml:
- Quantidade Total
- Peso Líquido
- Total Produtos (+)
- Total Desconto (-)
- Total IPI:
- Total ICMS-ST (+)
- ← Acréscimo (+) [INSERIR AQUI]
- Total (=)
Posicionamento visual na aba Dados
Ordem atual na TableLayout de fragment_main_pedido.xml (linhas 235-314):
tableRowPedidoMinimo— Valor Pedido MínimotableRowQtdTotal— Quantidade Total- ←
tableRowAcrescimo[INSERIR AQUI] tableRowTotalGeral— Total Geral
Problema de altura fixa em fragment_total_pedido.xml
O LinearLayout interno em fragment_total_pedido.xml tem android:layout_height="271dp" (linha 14). Essa altura fixa foi calculada para 6 linhas. Com a nova linha de Acréscimo (+), o conteúdo será cortado se não ajustar. Alterar para wrap_content — o ScrollView pai garante que o conteúdo seja acessível.
Método Util.formataValorMonetario()
Já usado extensivamente no projeto para formatação monetária. Chamadas de exemplo em TotalPedidoFragment.FillFields():
tvTotalProdutos.setText(Util.formataValorMonetario(vlTotalProduto));
tvTotalGeral.setText(Util.formataValorMonetario(vlTotalGeral));
Usar Util.formataValorMonetario(0.0) para garantir "R$ 0,00" no padrão do projeto.
Método atualizarResumoPedido() em MainPedidoFragment
Este método (linha 953) é chamado no onItemSelected do spFormaPag (linha 785) — ou seja, toda vez que o usuário seleciona uma forma de pagamento. A Story 2.2 vai modificar este método para calcular e exibir o acréscimo real. Esta história apenas garante que tvAcrescimoPedido está vinculado e inicializado — a Story 2.2 vai atualizá-lo com o valor calculado.
Padrão a seguir para facilitar Story 2.2 — declarar a variável de acréscimo localmente já calculada (mesmo que zero) antes de setar no TextView:
// Task 2.5 em atualizarResumoPedido():
double vlAcrescimo = 0.0; // Story 2.2 vai calcular: subtotal * (tx_acrescimo/100)
tvAcrescimoPedido.setText(Util.formataValorMonetario(vlAcrescimo));
Strings com acentos
O projeto usa strings com acento diretamente nos atributos android:text dos layouts XML (ex: "Peso Líquido", "Forma de pagamento", "Observação"). Este padrão é aceitável — usar "Acréscimo (+)" diretamente no XML.
Em código Java: NÃO usar strings com acentos em logs ou mensagens (regra do projeto). Não há logs necessários nesta história.
Regras críticas do projeto (aplicáveis a esta história)
- Sem testes automatizados — validação manual via emulador/dispositivo
- Sem Kotlin — somente Java puro
- Sem Gradle — projeto Eclipse ADT
- Sem JARs novos — nenhuma dependência adicional necessária
- Leituras SQLite em thread background — esta história NÃO faz leituras de banco, não se aplica
Arquivos a modificar
| Arquivo | Caminho | O que muda |
|---|---|---|
fragment_total_pedido.xml |
res/layout/ |
Corrigir altura fixa + inserir linha Acréscimo (+) |
TotalPedidoFragment.java |
src/br/com/jcsinformatica/sarandroid/pedido/ |
Vincular tvAcrescimo + setar R$ 0,00 em FillFields() |
fragment_main_pedido.xml |
res/layout/ |
Inserir tableRowAcrescimo antes de tableRowTotalGeral |
MainPedidoFragment.java |
src/br/com/jcsinformatica/sarandroid/pedido/ |
Vincular tvAcrescimoPedido + setar R$ 0,00 em fillFields() e atualizarResumoPedido() |
NÃO modificar nesta história:
UpdatePedidoActivity.java— nenhuma mudança necessária- Qualquer VO (
Pedido.java,FormaPagamento.java) — já têm tudo que precisam PedidoDB.java,FormaPagamentoDB.java— sem mudança de banco nesta históriaDatabaseHelper.java— sem migração de schema nesta história- Qualquer arquivo do Epic 1 — já concluído
Inteligência da história anterior (Story 1.2)
FormaPagamento.getTxAcrescimo()já existe e retornadouble— disponível para Story 2.2- Padrão de separação de lógica de background e UI thread estabelecido em
MainPedidoFragment.onStart()(Thread +runOnUiThread) — Story 2.2 seguirá este padrão ao lertx_acrescimose necessário - Review da Story 1.2 sinalizou que catch muito abrangente (
Exception) deve serSQLException— nesta história não há JDBC, irrelevante
Verificação manual após implementação
- Abrir
UpdatePedidoActivitycriando novo pedido → verificar que aba "Total" mostra linha "Acréscimo (+) R$ 0,00" - Verificar que aba "Dados" (MainPedidoFragment) mostra linha "Acréscimo R$ 0,00" acima de "Total Geral"
- Selecionar e trocar formas de pagamento → campo permanece R$ 0,00 (cálculo virá na Story 2.2)
- Pedido com status enviado (somente leitura) → campo acréscimo ainda deve aparecer
- Rolar a aba Total → verificar que a linha Acréscimo não foi cortada (confirmar que
wrap_contentresolveu o271dp)
Review Findings (2026-04-16)
- [Review][Defer]
layout_weight="1"comlayout_width="wrap_content"nos novos rows de layout — deveria ser0dppara distribuição correta de peso, mas padrão pré-existente em todos os rows do projeto [res/layout/fragment_total_pedido.xml, res/layout/fragment_main_pedido.xml] — deferred, pre-existing - [Review][Defer]
atualizarResumoPedido()sem null-guard nem try/catch —tvAcrescimoPedidopode NPE se chamado antes deonCreateView()ou apósGlobal.pedido = null; risco compartilhado comtvQtdTotal/tvTotalGeralpré-existentes [MainPedidoFragment.java:953] — deferred, pre-existing - [Review][Defer]
setUserVisibleHint()pode dispararFillFields()antes deonCreateView()—tvAcrescimonull silenciosamente engolido porcatch(Exception e){}sem log; mesmo risco pré-existente dos demais TextViews [TotalPedidoFragment.java:62] — deferred, pre-existing - [Review][Defer] Strings hardcoded no XML (
"Acréscimo","Acréscimo (+)") em vez de@string/resources — padrão pré-existente em todo o projeto [res/layout/fragment_main_pedido.xml, res/layout/fragment_total_pedido.xml] — deferred, pre-existing - [Review][Defer]
new UpdatePedItemActivity().precoComIpi()instancia Activity fora do ciclo de vida — anti-padrão pré-existente; não introduzido por esta story [MainPedidoFragment.java:434, TotalPedidoFragment.java:101] — deferred, pre-existing
Dev Agent Record
Agent Model Used
claude-sonnet-4-6 (dev-story workflow)
Debug Log References
Completion Notes List
- Story 2.1 implementada em 2026-04-16.
fragment_total_pedido.xml: altura fixa271dpcorrigida parawrap_content; nova linha "Acrescimo (+)" inserida comtvAcrescimoPedidoentre ICMS-ST e Total Geral.TotalPedidoFragment.java: campotvAcrescimodeclarado, vinculado emonCreateView(), e inicializado comUtil.formataValorMonetario(0.0)emFillFields().fragment_main_pedido.xml:tableRowAcrescimoinserido comtvAcrescimo_pedidoentretableRowQtdTotaletableRowTotalGeral.MainPedidoFragment.java: campotvAcrescimoPedidodeclarado, vinculado emonCreateView(), e inicializado comUtil.formataValorMonetario(0.0)emfillFields()eatualizarResumoPedido().- Variavel local
vlAcrescimo = 0.0declarada explicitamente em ambos os metodos deMainPedidoFragmentcom comentario indicando ponto de expansao para Story 2.2. - Sem testes automatizados (projeto nao possui infraestrutura de testes). Validacao e manual via dispositivo/emulador.
- AC1 satisfeito: campo "Acrescimo" visivel em ambas as abas (Dados e Total) ao abrir
UpdatePedidoActivity. - AC2 satisfeito: campo sempre visivel, nunca oculto ou em branco — valor padrao R$ 0,00 via
Util.formataValorMonetario(0.0).
File List
res/layout/fragment_total_pedido.xmlsrc/br/com/jcsinformatica/sarandroid/pedido/TotalPedidoFragment.javares/layout/fragment_main_pedido.xmlsrc/br/com/jcsinformatica/sarandroid/pedido/MainPedidoFragment.java