fixes bug#24678

qua:
dev:Valdir

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@113559 d1611594-4594-4d17-8e1d-87c2c4800839
master
valdevir 2022-07-28 12:48:43 +00:00
parent 8079f70d59
commit 9268112bc6
7 changed files with 240 additions and 1 deletions

View File

@ -68,6 +68,7 @@ import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Image;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
@ -95,6 +96,7 @@ import com.rjconsultores.ventaboletos.entidad.HistoricoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.InstiFinanceira;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParamRecoleccion;
import com.rjconsultores.ventaboletos.entidad.PerfilFuncion;
@ -111,6 +113,7 @@ import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresa;
import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresaBloqueada;
import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresaContaBancaria;
import com.rjconsultores.ventaboletos.entidad.PtovtaEstoque;
import com.rjconsultores.ventaboletos.entidad.PtovtaExcecaoMultaCanc;
import com.rjconsultores.ventaboletos.entidad.PtovtaHorario;
import com.rjconsultores.ventaboletos.entidad.PtovtaTitular;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
@ -134,6 +137,7 @@ import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.InstiFinanceiraService;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.NodoService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.PtoVtaCheckinService;
import com.rjconsultores.ventaboletos.service.PtoVtaSeguroService;
import com.rjconsultores.ventaboletos.service.PtoVtaUsuarioBancarioService;
@ -143,6 +147,7 @@ import com.rjconsultores.ventaboletos.service.PtovtaComissaoService;
import com.rjconsultores.ventaboletos.service.PtovtaEmpresaBloqueadaService;
import com.rjconsultores.ventaboletos.service.PtovtaEmpresaContaBancariaService;
import com.rjconsultores.ventaboletos.service.PtovtaEmpresaService;
import com.rjconsultores.ventaboletos.service.PtovtaExcecaoMultaCancService;
import com.rjconsultores.ventaboletos.service.PtovtaTitularService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService;
@ -179,6 +184,7 @@ import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtoVtaSeguro;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaAntifraude;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaCatInd;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaComissao;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaExcecaoMultaCanc;
import com.rjconsultores.ws.totvs.service.GeradorTitulosIntegracion;
import com.rjconsultores.ws.totvs.service.GerenciadorEnvioTitulosWS;
import com.rjconsultores.ws.utileria.RetornoTotvs.TipoRetorno;
@ -248,10 +254,15 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
@Autowired
private PtovtaAntifraudeService ptovtaAntifraudeService;
@Autowired
private PtovtaExcecaoMultaCancService ptovtaExcecaoMultaCancService;
@Autowired
private UsuarioUbicacionService usuarioUbicacionService;
@Autowired
private PtovtaTitularService ptovtaTitularService;
@Autowired
private OrgaoConcedenteService orgaoConcedenteService;
private PuntoVenta puntoVenta;
private Textbox txtCP;
private MyListbox categoriaList;
@ -275,6 +286,7 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
private MyListbox empresaContaBancariaList;
private Textbox txtChaveAntifraude;
private MyListbox ptovtaAntifraudeList;
private MyListbox ptovtaExcecaoMultaCancList;
private Bandbox bbCategoria;
private List<Categoria> lsCategoriaBloquear;
@ -333,6 +345,8 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
private Combobox cmbEmpresaPtoVta;
private Combobox cmbEmpresaPtoVtaUsuarioBancario;
private Combobox cmbEmpresaPtoVtaAntifraude;
private Combobox cmbEmpresaPtoVtaExcecaoMultaCanc;
private Combobox cmbOrgaoConcedente;
private Combobox cmbParada;
private Combobox cmbPtoVtaCheckinParada;
private Combobox cmbEmpresaSeguro;
@ -512,6 +526,8 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
@Autowired
private CobrancaAdcPuntoVentaService cobrancaAdcService;
private List<OrgaoConcedente> lsOrgaoConcedentes;
public Button getBtnApagar() {
return btnApagar;
}
@ -561,8 +577,12 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
lsTodasCobrancas = cobrancaAdcService.buscarTodasAsCobrancas(puntoVenta);
lsOrgaoConcedentes = orgaoConcedenteService.obtenerTodos();
super.doAfterCompose(comp);
if(puntoVenta.getIndBloqueiaTipoPassagem()) {
radIndBloquear.setSelected(Boolean.TRUE);
}else {
@ -959,6 +979,10 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
verPtovtaAntifraude(a);
}
});
ptovtaExcecaoMultaCancList.setItemRenderer(new RenderPtovtaExcecaoMultaCanc());
ptovtaExcecaoMultaCancList.setData(puntoVenta.getPtovtaExcecaoMultaCancList() == null ? Collections.emptyList() : puntoVenta.getPtovtaExcecaoMultaCancList());
}
private List<Empresa> obterEmpresasUsuarioLogadoComOpcaoTodas() {
@ -2013,6 +2037,11 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
Labels.getLabel("editarPuntoVentaController.window.title"),
Messagebox.OK, Messagebox.ERROR);
}
//Aba Excecao Multa Cancelamento
cmbOrgaoConcedente.setModel(new ListModelList(lsOrgaoConcedentes));
cmbOrgaoConcedente.setSelectedItem(null);
}
@ -3656,6 +3685,35 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
}
}
public void onClick$btnAddExcecaoMultaCanc(Event event) {
try {
if(verificarCamposAddExcecaoMultaCanc()) {
if (cmbEmpresaPtoVtaExcecaoMultaCanc.getSelectedItem() == null) {
return;
}
if(cmbOrgaoConcedente.getSelectedItem() == null){
return;
}
PtovtaExcecaoMultaCanc ptovtaExcecaoMultaCanc = new PtovtaExcecaoMultaCanc();
ptovtaExcecaoMultaCanc.setEmpresa((Empresa)cmbEmpresaPtoVtaExcecaoMultaCanc.getSelectedItem().getValue());
ptovtaExcecaoMultaCanc.setPuntoventa(puntoVenta);
ptovtaExcecaoMultaCanc.setOrgaoConcedente((OrgaoConcedente)cmbOrgaoConcedente.getSelectedItem().getValue());
ptovtaExcecaoMultaCanc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
if(puntoVenta.getPtovtaExcecaoMultaCancList() ==null) {
puntoVenta.setPtovtaExcecaoMultaCancList(new ArrayList<PtovtaExcecaoMultaCanc>());
}
puntoVenta.getPtovtaExcecaoMultaCancList().add(ptovtaExcecaoMultaCanc);
ptovtaExcecaoMultaCancList.setData(puntoVenta.getPtovtaExcecaoMultaCancList());
}
} catch (Exception e) {
log.error("Erro ao adicionar Exceção Multa Cancelamento", e);
}
}
private boolean verificarCamposAddChaveAntifraude() throws InterruptedException {
if (cmbEmpresaPtoVtaAntifraude.getSelectedItem() == null) {
Messagebox.show(
@ -3689,6 +3747,43 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
return true;
}
private boolean verificarCamposAddExcecaoMultaCanc() throws InterruptedException {
if (cmbEmpresaPtoVtaExcecaoMultaCanc.getSelectedItem() == null) {
Messagebox.show(
Labels.getLabel("editarPuntoVentaController.MSG.empresaExcecaoMultaCancNaoInformada"),
Labels.getLabel("editarPuntoVentaController.window.title"),
Messagebox.OK, Messagebox.EXCLAMATION);
return false;
}
if (cmbOrgaoConcedente.getSelectedItem() == null) {
Messagebox.show(
Labels.getLabel("editarPuntoVentaController.MSG.OrgaoConcedenteExcecaoMultaCancNaoInformada"),
Labels.getLabel("editarPuntoVentaController.window.title"),
Messagebox.OK, Messagebox.EXCLAMATION);
return false;
}
if(puntoVenta.getPtovtaExcecaoMultaCancList() != null) {
Empresa empresa = (Empresa) cmbEmpresaPtoVtaExcecaoMultaCanc.getSelectedItem().getValue();
OrgaoConcedente orgaoConcedente = (OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue();
for (PtovtaExcecaoMultaCanc ptovtaExcecaoMultaCanc : puntoVenta.getPtovtaExcecaoMultaCancList()) {
if(empresa.getEmpresaId().equals(ptovtaExcecaoMultaCanc.getEmpresa().getEmpresaId())
&& orgaoConcedente.getOrgaoConcedenteId().equals(ptovtaExcecaoMultaCanc.getOrgaoConcedente().getOrgaoConcedenteId()) ) {
Messagebox.show(
Labels.getLabel("editarPuntoVentaController.MSG.empresaOrgaoExcecaoMultaCancJaCadastrada"),
Labels.getLabel("editarPuntoVentaController.window.title"),
Messagebox.OK, Messagebox.EXCLAMATION);
return false;
}
}
}
return true;
}
public void onClick$btnRemoveChaveAntifraude(Event event) {
try{
PtovtaAntifraude ptovtaAntifraude = (PtovtaAntifraude)ptovtaAntifraudeList.getSelected();
@ -3712,6 +3807,31 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
}
}
public void onClick$btnRemoveExcecaoMultaCanc(Event event) {
try{
PtovtaExcecaoMultaCanc ptovtaExcecaoMultaCanc = (PtovtaExcecaoMultaCanc)ptovtaExcecaoMultaCancList.getSelected();
if(ptovtaExcecaoMultaCanc != null) {
String nomeEmpresa = ptovtaExcecaoMultaCanc.getEmpresa() != null ? ptovtaExcecaoMultaCanc.getEmpresa().getNombempresa() : "";
String nomeOrgao = ptovtaExcecaoMultaCanc.getOrgaoConcedente() != null ? ptovtaExcecaoMultaCanc.getOrgaoConcedente().getDescOrgao() : "";
int resp = Messagebox.show(
Labels.getLabel("editarPuntoVentaController.MSG.borrarChaveExcecaoMultaCancJaCadastrada", new String[] {nomeEmpresa, nomeOrgao}),
Labels.getLabel("editarPuntoVentaController.window.title"),
Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
if (resp == Messagebox.YES) {
puntoVenta.removePtovtaExcecaoMultaCanc(ptovtaExcecaoMultaCanc);
if(ptovtaExcecaoMultaCanc.getPtovtaExcecaoMultaCancId() != null) {
ptovtaExcecaoMultaCancService.borrar(ptovtaExcecaoMultaCanc);
}
ptovtaExcecaoMultaCancList.setData(puntoVenta.getPtovtaExcecaoMultaCancList());
}
}
} catch (Exception e){
log.error("Erro ao processar remoção Exceção Multa Cancelamento", e);
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void verPtovtaAntifraude(PtovtaAntifraude ptovtaAntifraude) {
Map args = new HashMap();
@ -4255,4 +4375,14 @@ public class EditarPuntoVentaController extends MyGenericForwardComposer {
public void setIntTiempoMaxBoletoEnVenta(Intbox intTiempoMaxBoletoEnVenta) {
this.intTiempoMaxBoletoEnVenta = intTiempoMaxBoletoEnVenta;
}
public List<OrgaoConcedente> getLsOrgaoConcedentes() {
return lsOrgaoConcedentes;
}
public void setLsOrgaoConcedentes(List<OrgaoConcedente> lsOrgaoConcedentes) {
this.lsOrgaoConcedentes = lsOrgaoConcedentes;
}
}

View File

@ -0,0 +1,24 @@
package com.rjconsultores.ventaboletos.web.utilerias.render;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import com.rjconsultores.ventaboletos.entidad.PtovtaExcecaoMultaCanc;
public class RenderPtovtaExcecaoMultaCanc implements ListitemRenderer {
@Override
public void render(Listitem lstm, Object o) throws Exception {
PtovtaExcecaoMultaCanc PtovtaExcecaoMultaCanc = (PtovtaExcecaoMultaCanc) o;
Listcell lc = new Listcell(PtovtaExcecaoMultaCanc.getEmpresa() == null ? " - " : PtovtaExcecaoMultaCanc.getEmpresa().getNombempresa());
lc.setParent(lstm);
lc = new Listcell((PtovtaExcecaoMultaCanc.getOrgaoConcedente()!=null) ? PtovtaExcecaoMultaCanc.getOrgaoConcedente().getDescOrgao() : "");
lc.setParent(lstm);
lstm.setAttribute("data", PtovtaExcecaoMultaCanc);
}
}

View File

@ -515,6 +515,7 @@
<value>com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente</value>
<value>com.rjconsultores.ventaboletos.entidad.ConexionRutaLocalidadeRemovida</value>
<value>com.rjconsultores.ventaboletos.entidad.ConfTotemVentaRapida</value>
<value>com.rjconsultores.ventaboletos.entidad.PtovtaExcecaoMultaCanc</value>
</list>
</property>

View File

@ -1963,6 +1963,13 @@ editarPuntoVentaComissaoController.MSG.jaPossuiItem=Porcentagem da Empresa/Ponto
editarPuntoVentaComissaoController.MSG.borrarPerguntaPtovtaContaMD=Deseja eliminar esta Porcentagem da Empresa/Ponto de Venda?
editarPuntoVentaComissaoController.MSG.borrarOKContaMD=Porcentagem da Empresa/Ponto de Venda excluida com sucesso
editarPuntoVentaController.MSG.empresaOrgaoExcecaoMultaCancJaCadastrada = Empresa e Órgão Condente informados já cadastrados
editarPuntoVentaController.MSG.borrarChaveExcecaoMultaCancJaCadastrada = Deseja eliminar a Exceção de Multa Cancelamento para Empresa: {0} e Órgão Condente: {1} ?
editarPuntoVentaController.lhOrgaoConcedente.label = Orgão Concedente
editarPuntoVentaController.MSG.empresaExcecaoMultaCancNaoInformada = Informe a empresa
editarPuntoVentaController.MSG.OrgaoConcedenteExcecaoMultaCancNaoInformada = Informe o Órgão Concedente
editarPuntoVentaController.OrgaoConcedente.label=Orgão Concedente
# Muestra o TipoVenta Pesquisa
busquedaTipoVentaController.window.title=Modalidade de Venda
busquedaTipoVentaController.btnRefresh.tooltiptext=Atualizar

View File

@ -1891,6 +1891,14 @@ editarPuntoVentaController.tiempoMaxBoletoEnVenta.label = Tempo máx. poltrona e
editarPuntoVentaController.qrcodeCatracaRodEAN13.label = Imprimir na venda o QR Code da catraca da rodoviária
editarPuntoVentaController.checkBloqDevolveReativaOutroPto.label = Bloqueia Devolver e Reativar em outro Ponto de Venda
editarPuntoVentaController.MSG.empresaOrgaoExcecaoMultaCancJaCadastrada = Empresa e Órgão Condente informados já cadastrados
editarPuntoVentaController.MSG.borrarChaveExcecaoMultaCancJaCadastrada = Deseja eliminar a Exceção de Multa Cancelamento para Empresa: {0} e Órgão Condente: {1} ?
editarPuntoVentaController.lhOrgaoConcedente.label = Orgão Concedente
editarPuntoVentaController.MSG.empresaExcecaoMultaCancNaoInformada = Informe a empresa
editarPuntoVentaController.MSG.OrgaoConcedenteExcecaoMultaCancNaoInformada = Informe o Órgão Concedente
editarPuntoVentaController.OrgaoConcedente.label=Orgão Concedente
# Editar comisión ponto de venta
editarPuntoVentaComissaoController.window.title = Comisión empresa/Punto de venta - {0}
editarPuntoVentaComissaoController.MSG.suscribirOK = Comisión de la empresa/Punto de venta se registró exitosamente

View File

@ -2077,6 +2077,7 @@ editarPuntoVentaController.lbCheckBoletoAG.value = Boleto
editarPuntoVentaController.lbCheckDepositoAG.value = Depósito
editarPuntoVentaController.lbCheckAdiantamentoAG.value = Adiantamentos
editarPuntoVentaController.tab.label.antifraude = Antifraude
editarPuntoVentaController.tab.label.excecaoMultaCancelamento = Exceção de Multa Cancelamento
editarPuntoVentaController.btnAddChaveAntifraude.tooltiptext = Adiciona chave de antifraude para a empresa informada
editarPuntoVentaController.btnRemoveChaveAntifraude.tooltiptext = Remove chave de antifraude da empresa selecionada
editarPuntoVentaController.MSG.borrarChaveAntifraude = Deseja eliminar a chave antifraude empresa {0} ?
@ -2087,6 +2088,8 @@ editarPuntoVentaController.lbComportamentoAbaTipoPassagem.value = Comportamento
editarPuntoVentaController.lbComportamentoAbaTipoPassagem.bloquear.value = Bloquear
editarPuntoVentaController.lbComportamentoAbaTipoPassagem.liberar.value = Liberar
editarPuntoVentaController.lbComportamentoAbaTipoPassagem.mensagemAlerta.value=ATENÇÃO: O comportamento de bloqueio/liberação dos tipos de passagem será INVERTIDO para este ponto de venda. Os cadastros DEVERÃO SER REVISADOS. Deseja continuar?
editarPuntoVentaController.MSG.empresaOrgaoExcecaoMultaCancJaCadastrada = Empresa e Órgão Condente informados já cadastrados
editarPuntoVentaController.MSG.borrarChaveExcecaoMultaCancJaCadastrada = Deseja eliminar a Exceção de Multa Cancelamento para Empresa: {0} e Órgão Condente: {1} ?
editarPuntoVentaController.lbCheckDinheiro.value=R$
editarPuntoVentaController.lbCheckCredito.value=CC
@ -9987,6 +9990,10 @@ editarPuntoVentaController.registroLancado.value = Lançado?
editarPuntoVentaController.dicaMensal.value=Essa funcionalidade não faz cobrança retroativa, so o primeiro dia do mês cadastrado já estiver passado a cobrança só será efetuada no próximo mês, sem valor acumulado.
editarPuntoVentaController.dicaTiempoMaxBoletoEnVenta.value = Este campo determinará o tempo máximo em que uma poltrona pode ficar bloqueada (em venda), caso preenchido. Caso não esteja preenchido será respeitado o tempo de venda cadastrado na constante TIEMPO_MAX_BOLETO_EN_VENTA. Essa regra não se aplica ao cliente de vendas que sempre irá respeitar a constante.
editarPuntoVentaController.dicaMaxCancelacion.ajuda = Este campo deterinará o tempo máximo em que um bilhete poderá sofrer o Cancelamento (sem multa), após este tempo o cancelamento sofrerá multa de acordo com com os parâmetros configurados no Órgão Concedente.
editarPuntoVentaController.lhOrgaoConcedente.label = Orgão Concedente
editarPuntoVentaController.MSG.empresaExcecaoMultaCancNaoInformada = Informe a empresa
editarPuntoVentaController.MSG.OrgaoConcedenteExcecaoMultaCancNaoInformada = Informe o Órgão Concedente
editarPuntoVentaController.OrgaoConcedente.label=Orgão Concedente
# Relatório de Venda de Cartão (Integração Cash Monitor)
relatorioVendaCartaoCashMonitorController.window.title = Venda de Cartão

View File

@ -86,6 +86,8 @@
<tab
label="${c:l('editarPuntoVentaController.tab.label.antifraude')}" />
<tab
label="${c:l('editarPuntoVentaController.tab.label.excecaoMultaCancelamento')}" />
</tabs>
<tabpanels>
@ -2265,7 +2267,7 @@
</listhead>
</listbox>
</tabpanel>
<!-- Antifraude -->
<tabpanel height="470px" style="overflow:auto;">
<grid fixedLayout="true">
<columns>
@ -2321,6 +2323,66 @@
</listhead>
</listbox>
</tabpanel>
<!--Exceção multa por cancelamento-->
<tabpanel height="470px" style="overflow:auto;">
<grid fixedLayout="true">
<columns>
<column width="40%" />
<column width="60%" />
</columns>
<rows>
<row>
<label
value="${c:l('editarPuntoVentaController.lbEmpresa.value')}" />
<combobox id="cmbEmpresaPtoVtaExcecaoMultaCanc"
use="com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar"
mold="rounded"
buttonVisible="true"
width="95%"
model="@{winEditarPuntoVenta$composer.lsEmpresasSemTodos}" />
</row>
<row>
<label
value="${c:l('editarPuntoVentaController.OrgaoConcedente.label')}" />
<combobox id="cmbOrgaoConcedente"
use="com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar"
mold="rounded" buttonVisible="true" width="90%"
model="@{winEditarPuntoVenta$composer.lsOrgaoConcedentes}" />
</row>
</rows>
</grid>
<toolbar>
<hbox spacing="5px" style="padding:1px"
align="right">
<button
id="btnAddExcecaoMultaCanc" height="20"
image="/gui/img/add.png" width="35px"
tooltiptext="${c:l('editarPuntoVentaController.btnAddExcecaoMultaCanc.tooltiptext')}" />
<button
id="btnRemoveExcecaoMultaCanc" height="20"
image="/gui/img/remove.png" width="35px"
tooltiptext="${c:l('editarPuntoVentaController.btnRemoveExcecaoMultaCanc.tooltiptext')}" />
</hbox>
</toolbar>
<listbox id="ptovtaExcecaoMultaCancList"
use="com.rjconsultores.ventaboletos.web.utilerias.MyListbox"
vflex="true" multiple="false" style="overflow:auto">
<listhead sizable="true"
style="overflow:auto">
<listheader id="lhEmpresaExcecaoMultaCanc"
image="/gui/img/create_doc.gif"
label="${c:l('editarPuntoVentaController.lbEmpresa.value')}" />
<listheader image="/gui/img/builder.gif"
label="${c:l('editarPuntoVentaController.lhOrgaoConcedente.label')}"
sort="auto(orgaoConcedente.descOrgao)" />
</listhead>
</listbox>
</tabpanel>
</tabpanels>
</tabbox>
</window>