package tela.editor; import static aplicacao.helper.LayoutHelper.getActiveShell; import static aplicacao.helper.MessageHelper.openError; import static aplicacao.helper.MessageHelper.openInformation; import static aplicacao.helper.MessageHelper.openQuestion; import static aplicacao.helper.MessageHelper.openWarning; import static aplicacao.helper.ValidatorHelper.validar; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.PojoObservables; import org.eclipse.core.databinding.beans.PojoProperties; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.wb.swt.ResourceManager; import tela.contentProvider.ItemServicoContentProvider; import tela.dialog.ConfiguracaoDialog; import tela.dialog.SelecionarItemDialog; import tela.editingSupport.FornecedorItemServicoEditingSupport; import tela.editingSupport.ItemVisivelItemServicoEditingSupport; import tela.editingSupport.QuantidadeItemServicoEditingSupport; import tela.editingSupport.ValorUnitarioItemServico; import tela.editor.editorInput.AbrirOrdemServicoEditorInput; import tela.editor.editorInput.FecharOrdemServicoEditorInput; import aplicacao.exception.ValidationException; import aplicacao.helper.FormatterHelper; import aplicacao.helper.UsuarioHelper; import aplicacao.service.ItemServicoService; import aplicacao.service.MecasoftService; import aplicacao.service.OrcamentoService; import aplicacao.service.PessoaService; import aplicacao.service.ProdutoServicoService; import aplicacao.service.ServicoPrestadoService; import aplicacao.service.VeiculoService; import banco.modelo.ForneceProduto; import banco.modelo.ItemServico; import banco.modelo.Orcamento; import banco.modelo.Pessoa; import banco.modelo.ProdutoServico; import banco.modelo.ServicoPrestado; import banco.modelo.Veiculo; public class AbrirOrdemServicoEditor extends MecasoftEditor { public static final String ID = "tela.editor.AbrirOrdemServicoEditor"; //$NON-NLS-1$ private Logger log = Logger.getLogger(getClass()); private ServicoPrestadoService service = new ServicoPrestadoService(); private ProdutoServicoService prodServService = new ProdutoServicoService(); private OrcamentoService orcamentoService = new OrcamentoService(); private PessoaService pessoaService = new PessoaService(); private ItemServicoService itemService = new ItemServicoService(); private VeiculoService veiculoService = new VeiculoService(); private List<ItemServico> listaProdutoRemovido; private FecharOrdemServicoEditorInput fosei; private Text txtCliente; private Text txtVeiculo; private Button btnSelecionarCliente; private Button btnSelecionarVeiculo; private Button btnAdicionarServio; private Button btnRemoverServio; private Button btnAdicionarItem; private Button btnRemoverItem; private Button btnCancelarOrdem; private Button btnFecharOrdem; private Tree tree; private TreeViewer tvServicoProduto; private TreeColumn trclmnDescrio; private TreeViewerColumn tvcDescricao; private TreeColumn trclmnPrestadorfornecedor; private TreeViewerColumn tvcPrestadorFornecedor; private TreeColumn trclmnValor; private TreeViewerColumn tvcValor; private TreeColumn trclmnQuantidade; private TreeViewerColumn tvcQuantidade; private TreeColumn trclmnTotal; private TreeViewerColumn tvcTotal; private TreeColumn trclmnVisivel; private TreeViewerColumn tvcVisivel; private Label lblOrcamentoN; private Text txtOrcamento; private Button btnSelecionarOrcamento; public AbrirOrdemServicoEditor() { listaProdutoRemovido = new ArrayList<ItemServico>(); } @Override public void salvarRegistro() throws ValidationException { validar(service.getServicoPrestado()); //verifica se o orcamento ja esta salvo e se ainda esta pendente, caso esteja, salva... Orcamento orcamento = service.getServicoPrestado().getOrcamento(); if(orcamento != null && (orcamento.getId() == null || orcamento.isPendente())){ orcamento.setPendente(false); orcamentoService.setModelo(orcamento); orcamentoService.saveOrUpdate(); } //GAMBIARRA for(ItemServico item : listaProdutoRemovido){ itemService.setModelo(item); itemService.delete(); } calcularTotais(); service.saveOrUpdate(); openInformation("Ordem de servi�o registrada com sucesso!"); } @Override public void excluirRegistro() {} @Override public void addComponentes(Composite compositeConteudo) { compositeConteudo.setLayout(new GridLayout(5, false)); lblOrcamentoN = new Label(compositeConteudo, SWT.NONE); lblOrcamentoN.setText("Or\u00E7amento N\u00BA:"); txtOrcamento = new Text(compositeConteudo, SWT.BORDER); txtOrcamento.setEnabled(false); txtOrcamento.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); btnSelecionarOrcamento = new Button(compositeConteudo, SWT.NONE); btnSelecionarOrcamento.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/find16.png")); btnSelecionarOrcamento.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { service.getServicoPrestado().setOrcamento(selecionarOrcamento()); if(service.getServicoPrestado().getOrcamento() != null) atualizarServicoComOrcamento(); initDataBindings(); btnSelecionarOrcamento.setEnabled(service.getServicoPrestado().getOrcamento() == null); } }); btnSelecionarOrcamento.setText("Selecionar"); Label lblCliente = new Label(compositeConteudo, SWT.NONE); lblCliente.setText("Cliente:"); txtCliente = new Text(compositeConteudo, SWT.BORDER); txtCliente.setEnabled(false); txtCliente.setEditable(false); txtCliente.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); btnSelecionarCliente = new Button(compositeConteudo, SWT.NONE); btnSelecionarCliente.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Pessoa p = selecionarCliente(); if(p != null){ service.getServicoPrestado().setCliente(p); txtCliente.setText(p.getNomeFantasia()); //remove o ve�culo para evitar que o ve�culo nao perten�a ao dono service.getServicoPrestado().setVeiculo(null); txtVeiculo.setText(""); }else{ service.getServicoPrestado().setCliente(null); txtCliente.setText(""); //remove o ve�culo service.getServicoPrestado().setVeiculo(null); txtVeiculo.setText(""); } } }); btnSelecionarCliente.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnSelecionarCliente.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/find16.png")); btnSelecionarCliente.setText("Selecionar"); // btnSelecionarCliente.setEnabled(service.getServicoPrestado().getId() == null); Label lblVeculo = new Label(compositeConteudo, SWT.NONE); lblVeculo.setText("Ve\u00EDculo:"); txtVeiculo = new Text(compositeConteudo, SWT.BORDER); txtVeiculo.setEnabled(false); txtVeiculo.setEditable(false); txtVeiculo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); btnSelecionarVeiculo = new Button(compositeConteudo, SWT.NONE); btnSelecionarVeiculo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Veiculo v = selecionarVeiculo(); if(v != null){ txtVeiculo.setText(v.getModelo()); service.getServicoPrestado().setVeiculo(v); }else{ txtVeiculo.setText(""); service.getServicoPrestado().setVeiculo(null); } } }); btnSelecionarVeiculo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnSelecionarVeiculo.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/find16.png")); btnSelecionarVeiculo.setText("Selecionar"); Label lblItemServico = new Label(compositeConteudo, SWT.NONE); lblItemServico.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1)); lblItemServico.setText("Itens do servi\u00E7o:"); tvServicoProduto = new TreeViewer(compositeConteudo, SWT.BORDER | SWT.FULL_SELECTION); tree = tvServicoProduto.getTree(); tree.setLinesVisible(true); tree.setHeaderVisible(true); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 4)); tvServicoProduto.setContentProvider(new ItemServicoContentProvider()); tvcDescricao = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcDescricao.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return ((ItemServico)element).getDescricao(); } }); trclmnDescrio = tvcDescricao.getColumn(); trclmnDescrio.setWidth(158); trclmnDescrio.setText("Descri��o"); tvcPrestadorFornecedor = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcPrestadorFornecedor.setEditingSupport(new FornecedorItemServicoEditingSupport(tvServicoProduto)); tvcPrestadorFornecedor.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { ItemServico item = (ItemServico)element; return item.getFornecedor() == null ? "" : item.getFornecedor().getNome(); } }); trclmnPrestadorfornecedor = tvcPrestadorFornecedor.getColumn(); trclmnPrestadorfornecedor.setWidth(187); trclmnPrestadorfornecedor.setText("Prestador/Fornecedor"); tvcValor = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcValor.setEditingSupport(new ValorUnitarioItemServico(tvServicoProduto)); tvcValor.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return FormatterHelper.getDecimalFormat().format(((ItemServico)element).getValorUnitario()); } }); trclmnValor = tvcValor.getColumn(); trclmnValor.setWidth(75); trclmnValor.setText("Valor"); tvcQuantidade = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcQuantidade.setEditingSupport(new QuantidadeItemServicoEditingSupport(tvServicoProduto)); tvcQuantidade.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return ((ItemServico)element).getQuantidade().toString(); } }); trclmnQuantidade = tvcQuantidade.getColumn(); trclmnQuantidade.setWidth(74); trclmnQuantidade.setText("Quantidade"); tvcTotal = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcTotal.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return FormatterHelper.getDecimalFormat().format(((ItemServico)element).getTotal()); } }); trclmnTotal = tvcTotal.getColumn(); trclmnTotal.setWidth(89); trclmnTotal.setText("Total"); tvcVisivel = new TreeViewerColumn(tvServicoProduto, SWT.NONE); tvcVisivel.setEditingSupport(new ItemVisivelItemServicoEditingSupport(tvServicoProduto)); tvcVisivel.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return null; } @Override public Image getImage(Object element) { ItemServico is = (ItemServico) element; if(is.getItem().getTipo().equals(ProdutoServico.TIPOSERVICO)) return null; if (is.isFornecedorVisivel()) return ResourceManager.getPluginImage("mecasoft", "assents/funcoes/checked16.png"); else return ResourceManager.getPluginImage("mecasoft", "assents/funcoes/unChecked16.png"); } }); trclmnVisivel = tvcVisivel.getColumn(); trclmnVisivel.setWidth(100); trclmnVisivel.setText("Vis\u00EDvel"); btnAdicionarServio = new Button(compositeConteudo, SWT.NONE); btnAdicionarServio.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ProdutoServico ps = selecionarServico(); if(ps != null){ Pessoa prestador = UsuarioHelper.getConfiguracaoPadrao().getRepresentanteEmpresa(); //verifica se o servico possui algum prestador, caso nao possua, //a empresa � a prestadora, caso possua, o usuario seleciona a empresa if(ps.getListaFornecedores().size() > 0) prestador = selecionarFornecedor(ps); //verifica se o servi�o ja nao foi adicionado com mesmo prestador for(ItemServico is : service.getServicoPrestado().getListaServicos()) if((is.getItem().equals(ps) && is.getFornecedor().equals(prestador)) || !is.getItem().getAtivo()) return; ItemServico is = new ItemServico(); is.setDescricao(ps.getDescricao()); is.setTotal(ps.getValorUnitario()); is.setQuantidade(1); is.setItem(ps); is.setFornecedor(prestador); is.setServicoPrestado(service.getServicoPrestado()); is.setValorUnitario(ps.getValorUnitario()); service.getServicoPrestado().getListaServicos().add(is); setEnableButtons(); for(ProdutoServico item : ps.getListaProduto()) if(item.getAtivo()) adicionarItens(item, is, null); tvServicoProduto.refresh(); } } }); btnAdicionarServio.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/servico/plusServico16.png")); btnAdicionarServio.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnAdicionarServio.setText("Adicionar"); new Label(compositeConteudo, SWT.NONE); btnRemoverServio = new Button(compositeConteudo, SWT.NONE); btnRemoverServio.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selecao = (IStructuredSelection)tvServicoProduto.getSelection(); if(selecao.isEmpty()) return; ItemServico is = (ItemServico)selecao.getFirstElement(); if(is.getItem().getTipo().equals(ProdutoServico.TIPOPRODUTO)){ openWarning("O item selecionado � um produto e n�o um servi�o."); return; } if(openQuestion("Deseja realmente remover este servi�o da lista?")){ //GAMBIARRA listaProdutoRemovido.addAll(is.getListaItem()); service.getServicoPrestado().getListaServicos().remove(is); setEnableButtons(); tvServicoProduto.refresh(); } } }); btnRemoverServio.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/servico/lessServico16.png")); btnRemoverServio.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnRemoverServio.setText("Remover"); new Label(compositeConteudo, SWT.NONE); btnAdicionarItem = new Button(compositeConteudo, SWT.NONE); btnAdicionarItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { //pega o servi�o selecionado pelo usu�rio IStructuredSelection selecao = (IStructuredSelection) tvServicoProduto.getSelection(); if(selecao.isEmpty()){ openError("Para adicionar um produto, selecione antes o servi�o ao qual ele pertence"); return; } ItemServico servico = (ItemServico)selecao.getFirstElement(); if(servico.getItem().getTipo().equals(ProdutoServico.TIPOPRODUTO)){ openError("Para adicionar um produto, deve ser selecionado um servi�o e n�o outro produto."); return; } ProdutoServico ps = selecionarProduto(); if(ps != null){ Pessoa fornecedor = selecionarFornecedor(ps); adicionarItens(ps, servico, fornecedor); } } }); btnAdicionarItem.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); btnAdicionarItem.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/product/productAdd16.png")); btnAdicionarItem.setText("Adicionar"); new Label(compositeConteudo, SWT.NONE); btnRemoverItem = new Button(compositeConteudo, SWT.NONE); btnRemoverItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selecao = (IStructuredSelection)tvServicoProduto.getSelection(); if(selecao.isEmpty()) return; ItemServico is = (ItemServico)selecao.getFirstElement(); if(is.getItem().getTipo().equals(ProdutoServico.TIPOSERVICO)){ openWarning("O item selecionado � um servi�o e n�o um produto."); return; } if(openQuestion("Deseja realmente remover este item da lista?")){ //GAMBIARRA listaProdutoRemovido.add(is); is.getServico().getListaItem().remove(is); setEnableButtons(); tvServicoProduto.refresh(); } } }); btnRemoverItem.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/product/productRemove16.png")); btnRemoverItem.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnRemoverItem.setText("Remover"); btnCancelarOrdem = createNewButton(); btnCancelarOrdem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if(openQuestion("Deseja realmente cancelar esta ordem de servi�o?")){ //verifica se o usuario ja configurou os status if(UsuarioHelper.getConfiguracaoPadrao() == null){ openError("Registre nas configura��es os status padr�es para poder cancelar a ordem de servi�o."); ConfiguracaoDialog cd = new ConfiguracaoDialog(getActiveShell()); if(cd.open() != IDialogConstants.OK_ID) return; } service.getServicoPrestado().setAtivo(false); service.getServicoPrestado().setEmExecucao(false); calcularTotais(); service.saveOrUpdate(); //caso o fechar ordem de servi�o esteja aberto IEditorPart iep = getIEPFecharOrdem(); if(iep != null) getSite().getPage().closeEditor(iep, false); openInformation("Ordem de servi�o cancelada com sucesso!"); closeThisEditor(); } } }); btnCancelarOrdem.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/cancel32.png")); btnCancelarOrdem.setText("Cancelar ordem"); if(!getShowSalvar()) btnCancelarOrdem.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); btnFecharOrdem = createNewButton(); btnFecharOrdem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { try { validar(service.getServicoPrestado()); calcularTotais(); //caso o editor de fechar ordem esteja aberto IEditorPart iep = getIEPFecharOrdem(); if(iep != null) return; getSite().getPage().openEditor(fosei, FecharOrdemServicoEditor.ID); } catch (PartInitException e1) { log.error(e1); } catch (ValidationException e2) { setErroMessage(e2.getMessage()); } } }); btnFecharOrdem.setImage(ResourceManager.getPluginImage("mecasoft", "assents/servicoPrestado/closeService32.png")); btnFecharOrdem.setText("Fechar Ordem"); setEnableButtons(); initDataBindings(); } @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { AbrirOrdemServicoEditorInput aosei = (AbrirOrdemServicoEditorInput)input; if(aosei.getServicoPrestado().getId() != null) service.setServicoPrestado(service.find(aosei.getServicoPrestado().getId())); else{ service.setServicoPrestado(aosei.getServicoPrestado()); if(service.getServicoPrestado().getOrcamento() != null) atualizarServicoComOrcamento(); } setShowExcluir(false); fosei = new FecharOrdemServicoEditorInput(service.getServicoPrestado()); //abre os 2 editors de abrir e fechar ordens de servi�o para mostrar a ordem completa if(!service.getServicoPrestado().isEmExecucao()) site.getPage().openEditor(fosei, FecharOrdemServicoEditor.ID); setSite(site); setInput(input); } private Pessoa selecionarCliente(){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((Pessoa)element).getNomeFantasia(); } }); sid.setElements(pessoaService.findAllClientesAtivos().toArray()); return (Pessoa) sid.getElementoSelecionado(); } private Pessoa selecionarFornecedor(ProdutoServico produto){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((ForneceProduto)element).getPessoa().getNome() + " - R$" + FormatterHelper.getDecimalFormat().format(((ForneceProduto)element).getValorUnitario()); } }); sid.setElements(produto.getListaFornecedores().toArray()); ForneceProduto fp = (ForneceProduto)sid.getElementoSelecionado(); return fp == null ? null : fp.getPessoa(); } private Veiculo selecionarVeiculo(){ if(service.getServicoPrestado().getCliente() == null){ openWarning("Selecione primeiro o cliente para selecionar um ve�culo."); return null; } SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((Veiculo)element).getModelo(); } }); sid.setElements(possiveisVeiculos().toArray()); return (Veiculo) sid.getElementoSelecionado(); } private List<Veiculo> possiveisVeiculos(){ List<Veiculo> listaVeiculo = veiculoService.findAllByPessoa(service.getServicoPrestado().getCliente()); List<Veiculo> listaResult = new ArrayList<Veiculo>(); List<ServicoPrestado> listaServico = service.findAllNaoConcluidos(); for(Veiculo v : listaVeiculo){ boolean inConsert = false; for(ServicoPrestado s : listaServico){ if(s.getVeiculo().equals(v)) inConsert = true; } if(!inConsert) listaResult.add(v); } return listaResult; } private ProdutoServico selecionarServico(){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return((ProdutoServico)element).getDescricao(); } }); sid.setElements(prodServService.findAllServicosAtivos().toArray()); return (ProdutoServico)sid.getElementoSelecionado(); } private ProdutoServico selecionarProduto(){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((ProdutoServico)element).getDescricao(); } }); sid.setElements(prodServService.findAllProdutosAtivos().toArray()); return (ProdutoServico)sid.getElementoSelecionado(); } private Orcamento selecionarOrcamento(){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((Orcamento)element).getNumero() + " - " + ((Orcamento)element).getCliente().getNome(); } }); sid.setElements(orcamentoService.findAllPendente().toArray()); return (Orcamento)sid.getElementoSelecionado(); } public BigDecimal calculaTotal(ItemServico is){ return is.getValorUnitario().multiply(new BigDecimal(is.getQuantidade())); } public void adicionarItens(ProdutoServico ps, ItemServico servicoPertence, Pessoa fornecedor){ //verifica se � o mesmo produto, fornecedor e servico for(ItemServico item : service.getServicoPrestado().getListaServicos()){ if(item.getItem().equals(ps) && item.getFornecedor() != null && item.getFornecedor().equals(fornecedor) && item.getServico().equals(servicoPertence)){ item.setQuantidade(item.getQuantidade() + 1); item.setTotal(calculaTotal(item)); tvServicoProduto.refresh(); return; } } //pega o forneceproduto selecionado ForneceProduto fp = null; if(fornecedor != null){ for(int c = 0; c < fornecedor.getListaProduto().size() && fp == null; c++){ ForneceProduto fpFornecedor = fornecedor.getListaProduto().get(c); if(fpFornecedor.getProduto().getId().compareTo(ps.getId()) == 0) fp = fpFornecedor; } } ItemServico is = new ItemServico(); is.setDescricao(ps.getDescricao()); is.setValorUnitario(fp == null ? ps.getValorUnitario() : fp.getValorUnitario()); is.setQuantidade(1); is.setTotal(fp == null ? ps.getValorUnitario() : fp.getValorUnitario()); is.setItem(ps); is.setFornecedor(fornecedor); is.setServico(servicoPertence); // is.setServicoPrestado(service.getServicoPrestado()); // service.getServicoPrestado().getListaServicos().add(is); //adiciona o produto ao servico servicoPertence.getListaItem().add(is); setEnableButtons(); tvServicoProduto.refresh(); } @Override public boolean isDirty() { return service.isDirty(); } @Override public void setFocus() { initDataBindings(); if(!service.getServicoPrestado().isEmExecucao()) disposeSalvar(); setEnableButtons(); btnSelecionarCliente.setEnabled(service.getServicoPrestado().getId() == null); btnSelecionarVeiculo.setEnabled(service.getServicoPrestado().getId() == null); } public void setEnableButtons(){ btnCancelarOrdem.setEnabled(service.getServicoPrestado().isAtivo() && service.getServicoPrestado().isEmExecucao() && service.getServicoPrestado().getId() != null && service.getServicoPrestado().getListaServicos().size() == 0); btnFecharOrdem.setEnabled(service.getServicoPrestado().isEmExecucao()); btnSelecionarOrcamento.setEnabled(service.getServicoPrestado().getOrcamento() == null && service.getServicoPrestado().getId() == null); } private void calcularTotais(){ BigDecimal totalServicos = BigDecimal.ZERO; BigDecimal totalItens = BigDecimal.ZERO; BigDecimal total; for(ItemServico servico : service.getServicoPrestado().getListaServicos()){ totalServicos = totalServicos.add(servico.getTotal()); for(ItemServico produto : servico.getListaItem()) totalItens = totalItens.add(produto.getTotal()); } total = totalServicos.add(totalItens); service.getServicoPrestado().setTotalItens(totalItens); service.getServicoPrestado().setTotalServico(totalServicos); service.getServicoPrestado().setValorTotal(total); } @SuppressWarnings("deprecation") private IEditorPart getIEPFecharOrdem(){ IEditorPart iepResult = null; for(IEditorPart iep : getSite().getPage().getEditors()){ if(iep.getEditorInput().equals(fosei)) iepResult = iep; } return iepResult; } private void atualizarServicoComOrcamento(){ ServicoPrestado servicoPrestado = service.getServicoPrestado(); Orcamento orcamento = service.getServicoPrestado().getOrcamento(); orcamento.setServico(servicoPrestado); servicoPrestado.setCliente(orcamento.getCliente()); servicoPrestado.setVeiculo(orcamento.getVeiculo()); for(ItemServico servico : orcamento.getListaServico()){ servicoPrestado.getListaServicos().add(servico); servico.setServicoPrestado(servicoPrestado); } calcularTotais(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue txtClienteObserveTextObserveWidget = SWTObservables.observeText(txtCliente, SWT.Modify); IObservableValue servicegetServicoPrestadoClientenomeFantasiaObserveValue = PojoObservables.observeValue(service.getServicoPrestado(), "cliente.nomeFantasia"); bindingContext.bindValue(txtClienteObserveTextObserveWidget, servicegetServicoPrestadoClientenomeFantasiaObserveValue, null, null); // IObservableValue txtVeiculoObserveTextObserveWidget = SWTObservables.observeText(txtVeiculo, SWT.Modify); IObservableValue servicegetServicoPrestadoVeiculomodeloObserveValue = PojoObservables.observeValue(service.getServicoPrestado(), "veiculo.modelo"); bindingContext.bindValue(txtVeiculoObserveTextObserveWidget, servicegetServicoPrestadoVeiculomodeloObserveValue, null, null); // IObservableValue observeTextTxtOrcamentoObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtOrcamento); IObservableValue orcamentonumeroServicegetServicoPrestadoObserveValue = PojoProperties.value("orcamento.numero").observe(service.getServicoPrestado()); bindingContext.bindValue(observeTextTxtOrcamentoObserveWidget, orcamentonumeroServicegetServicoPrestadoObserveValue, null, null); // IObservableList listaServicosServicegetServicoPrestadoObserveList = PojoProperties.list("listaServicos").observe(service.getServicoPrestado()); tvServicoProduto.setInput(listaServicosServicegetServicoPrestadoObserveList); // return bindingContext; } @Override public MecasoftService<?> getService() { return service; } }