wpjr2’s Weblog

Artigos e tutoriais úteis

JavaME: Sistema de Vendas

Escrito por wpjr2 em Julho 4, 2008

Segue abaixo um post que pedi para um de meus ex-alunos (Lerço) do curso de programação em JavaME escrever sobre um projeto que ele está desenvolvendo e eu o ajudei um pouquinho.

Vou fazer um breve relato do projeto num todo para voce entender a explicacao do uso da rotina implementada !
Aqui na empresa, desenvolvemos um projeto J2ME, para aumentar e automatizar a forca de venda dos vendedores de nossos clientes distribuidores que atuam em todo o estado de MG.
Requisitos :
1) Evitar re-trabalho na digitacao dos pedidos ( faziam no bloco no cliente e lancavam pelo portal ) !
2) Ter uma lista com todos os seus clientes da regiao, e informacoes de ultima compra e inadimplencia;
3) Ter uma lista com todos os produtos e precos ( atualizados ! )
4) Obter a informacao rapida se o pedido foi aceito e a confirmacao de estoque dos produtos !
5) Deixar uma copia do pedido com o cliente;
Recursos :
1)Possuimos um ERP interno e um portal na internet para a digitacao dos pedidos pelos vendedores ( interligado com o ERP ).
2)Para este projeto, montamos um web-service em php responsavel por toda a comunicacao com o dispositivo. ( no caso um palm treo 680 ). Ele é quem alimenta todas as tabelas de ( cliente, condicao pagamento, forma pagamento, fornecedores, produtos e precos ) e insere os pedidos feitos no palm !

Case : Na tela de Pedidos, precisa listar num choice.pop_up todas as condicoes e forma de pagamento cadastrados.
Na inclusao do pedido, ira mostrar a lista toda focando na 1a. opcao . Na alteracao do pedido, preciso tambem mostrar toda a lista, mas focando na opcao selecionada anteriomente na inclusao !
Para este problema estava utilizando 2 HashTable’s ( 1 para apontar pelo index - idRegistro e outro para apontar idRegistro - index ). Mas nao estava achando a melhor alternativa. Ai tive a importante ajuda do Waldir com a dica : ” criar uma classe que extenda a classe ChoiceGroup e dentro desta vc ter um arranjo que dado o id da choice”. Entao fui maos a obra :
Seguem abaixo as classes :
Condicao.java - modelo
public class Condicao {
private int codigoCondicao;
private String descricaoCondicao;
private int idRegistro;
private int idPosicao;
– getters and setters
}
// classe sugerida pelo Waldir para resolver o problema das buscas index - codigo e codigo - index
CondicaoChoice.java - extends choicegroup
public class CondicaoPagtoChoice extends ChoiceGroup {
private int [] idEntidades;

public CondicaoPagtoChoice(String label, int choiceType) {
super(label, choiceType);
// criada uma classe que tem um metodo statico que retorna o nr. registros de um recordstore
idEntidades = new int[DadosDao.totalRegistros

(AppMIDlet.BD_CPG)];
}

public void insert(int elementNum, Condicao entidade) {
idEntidades[elementNum] = entidade.getCodigoCondicao();
insert(elementNum, entidade.getDescricaoCondicao(), null);

}

// retorna o id da entidade selecionada
public int getIdEntidadeSelecionada() {
return idEntidades[getSelectedIndex()];
}

// retorna a posicao no list - poderia ter criado um outro array de inteiros para fazer este retorno !
public int getPosicaoSelecionada(int cod) {
int y=0;
for (int i=0;i<idEntidades.length;i++){
if (cod==idEntidades[i]) {
y=i;
break;
}
}
return y;
}
}
// classe responsavel para ler o recordstore da condicao !
CondicaoDao - DAO
public class CondicaoDao extends DadosDao {
// retorna um obj CondicaoPagtoChoice populado e ja com as referencias de index - codigo e codigo - index prontos !
public static CondicaoPagtoChoice choiceCondicao(){
CondicaoPagtoChoice lista=null;
int id;
try {
RecordStore rs=DadosDao.abrirRecordStore(AppMIDlet.BD_CPG);
RecordEnumeration re=rs.enumerateRecords(null, new OrdemAlfabetica(), false);

if (re.numRecords()>0){
Condicao p;
int cont=0;
lista = new CondicaoPagtoChoice(”Cond.Pagto:”,Choice.POPUP);
while (re.hasNextElement()) {
id = re.nextRecordId();
byte[] dados = rs.getRecord(id);
ByteArrayInputStream bain = new ByteArrayInputStream(dados);
DataInputStream dis = new DataInputStream(bain);
p= new Condicao();
p.setCodigoCondicao(dis.readInt());
p.setDescricaoCondicao(dis.readUTF());
p.setIdRegistro(id);
lista.insert(cont, p);
cont++;
}
}
re.destroy();
rs.closeRecordStore();
} catch (Exception e){
System.out.println(e);
}
return lista;
}
}
Agora o mais facil : na tela de pedidos ..
TelaPedido.java - VISAO
public class TelaPedido extends Form implements CommandListener, ItemStateListener {
private Pedido p;
private CondicaoPagtoChoice condicao;
… demais campos e commands

// recebo como parametros o titulo e o objeto do pedido ( para saber se alteracao ou inclusao )
public TelaPedido(String title,Pedido p) {
super(title);
this.p = p;
init(1);
}

private void init(int tp) {
condicao = CondicaoDao.choiceCondicao();
if (p.getIdCondicao()>0 ) {
condicao.setSelectedIndex(condicao.getPosicaoSelecionada(p.getIdCondicao()), true);
}
… demais campos e comands

append(condicao);
}
}

Deixe um comentário

XHTML: Você pode usar estas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>