wpjr2’s Weblog

Artigos e tutoriais úteis

JavaME: Sistema de Vendas

Posted by 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 uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: