Compare commits

..
7 Commits
Author SHA1 Message Date
Matheus ed2fbc5fa2 fix: update foreign key reference in matheus_medeiros_jogos.xml
davinTI/jogos_matheus/pipeline/head There was a failure building this commit
2026-10-01 15:34:21 -03:00
Matheus 8cf91179c6 fix: update game search field caption and enhance delete functionality in cadastro_jogos desktop XML 2026-10-01 15:31:58 -03:00
Matheus 6561615978 fix: enhance delete functionality and improve UI elements in cadastro_jogos desktop XML
davinTI/jogos_matheus/pipeline/head There was a failure building this commit
2026-09-25 11:54:42 -03:00
Matheus 18602e75d9 fix: add drop tables and sequences changeSets in matheus_medeiros_jogos.xml
davinTI/jogos_matheus/pipeline/head There was a failure building this commit
2026-09-25 11:08:58 -03:00
Matheus 82202e77f0 fix: remove entries from DATABASECHANGELOG for matheus_medeiros_jogos.xml
davinTI/jogos_matheus/pipeline/head There was a failure building this commit
2026-09-25 10:54:40 -03:00
Matheus 655e67a0f9 atual
davinTI/jogos_matheus/pipeline/head There was a failure building this commit
2026-09-25 10:39:38 -03:00
Matheus 461a573145 fix: update search field ID and improve SQL query for game search in cadastro_jogos desktop XML 2026-09-25 09:17:38 -03:00
4 changed files with 515 additions and 279 deletions
Vendored
BIN
View File
Binary file not shown.
+317 -248
View File
@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<panel-form xmlns="http://www.davinti.com.br/vitruvio/form/panel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.davinti.com.br/vitruvio/form/panel https://bitbucket.org/davinTI/vitruvio-xds/raw/master/vitruvio-panel-form.xsd">
<form formKey="formCadastroJogos" width="100%" height="100%">
<name>Cadastro de jogos</name>
<description>Painel para cadastro de jogos</description>
<panel-form xmlns="http://www.davinti.com.br/vitruvio/form/panel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.davinti.com.br/vitruvio/form/panel https://bitbucket.org/davinTI/vitruvio-xds/raw/master/vitruvio-panel-form.xsd">
<form width="100%" height="100%" formKey="formTeste">
<description></description>
<initScript language="JavaScript"> <initScript language="JavaScript">
<![CDATA[ <![CDATA[
var lib_cadastro_padrao = libService.loadScript("lib_cadastro_padrao"); var lib_cadastro_padrao = libService.loadScript("lib_cadastro_padrao");
var config_jogos = { var config_jogos = {
@@ -149,7 +153,7 @@
lib_msg.showNotification({ lib_msg.showNotification({
type: lib_msg.notificationType.tray, type: lib_msg.notificationType.tray,
caption: "Erro!", caption: "Erro!",
msg: "Selecione um jogo para ver as avaliações", msg: "Selecione um jogo para ver as avaliações.",
position: lib_msg.notificationPosition.bottom_right, position: lib_msg.notificationPosition.bottom_right,
}); });
return; return;
@@ -169,10 +173,10 @@
engine.setGlobalVariable("resetPanelGames", resetPanelGames); engine.setGlobalVariable("resetPanelGames", resetPanelGames);
} }
]]> ]]>
</initScript>
</initScript>
<components> <components>
<VerticalLayout width="100%" height="100%" align="MIDDLE_RIGHT"> <VerticalLayout width="100%" height="100%" align="MIDDLE_RIGHT">
<WindowLayout id="wltCriarAvaliacoes" windowModal="true" windowHeight="70%" <WindowLayout id="wltCriarAvaliacoes" windowModal="true" windowHeight="70%"
windowWidth="80%" windowTitle="Nova avaliação"> windowWidth="80%" windowTitle="Nova avaliação">
@@ -210,7 +214,7 @@
if(engine.isValid()){ if(engine.isValid()){
engine.getField("txfCodigoJogo").setValue(engine.getField("dbtJogos").getValue()); engine.getField("txfCodigo").setValue(engine.getField("dbtJogos").getValue());
var config_avaliacoes = engine.getGlobalVariable("config_avaliacoes"); var config_avaliacoes = engine.getGlobalVariable("config_avaliacoes");
var lib = libService.loadScript("lib_cadastro_padrao"); var lib = libService.loadScript("lib_cadastro_padrao");
var id = engine.getField("txfCodigoAvaliacao").getValue(); var id = engine.getField("txfCodigoAvaliacao").getValue();
@@ -240,40 +244,46 @@
</VerticalLayout> </VerticalLayout>
</WindowLayout> </WindowLayout>
<WindowLayout id="wltListaAvaliacoes" windowModal="true" windowHeight="80%"
<WindowLayout id="wltListaAvaliacoes" windowModal="true" windowHeight="80%" windowWidth="80%">
windowWidth="80%">
<VerticalLayout spacing="true" margin="true" height="100%"> <VerticalLayout spacing="true" margin="true" height="100%">
<Label id="lblTitle"><value>Avaliações</value></Label> <Label id="lblTitle">
<DBTable id="dbtAvaliacoes" type="string" width="100%" <value>Avaliações</value>
gridSelectable="true" selectable="true" height="100%" </Label>
expandRatio="0.2" showRowCount="true"> <DBTable id="dbtAvaliacoes" type="string" width="100%"
<datasource> gridSelectable="true" selectable="false" height="100%"
<sqlBuilderDataSource connection-key="vitruvio" language="JavaScript"> expandRatio="0.2" showRowCount="true">
<![CDATA[ <datasource>
function buildSQL(_){ <sqlBuilderDataSource connection-key="vitruvio"
var sqlBase = "SELECT * FROM TB_MATHEUS_MEDEIROS_AVALIACOES ORDER BY CODIGO"; language="JavaScript">
var id_jogo = engine.getField("dbtJogos").getValue(); <![CDATA[
if(id_jogo != null){ function buildSQL(_){
sqlBase = "SELECT * FROM TB_MATHEUS_MEDEIROS_AVALIACOES WHERE ID_JOGO = " + id_jogo + " ORDER BY CODIGO"; var txfPesquisa = engine.getField("txfPesquisaJogo").getValue();
} var sqlBase = "SELECT * FROM TB_MATHEUS_MEDEIROS_AVALIACOES ORDER BY CODIGO";
return sqlBase; var id_jogo = engine.getField("dbtJogos").getValue();
} if(id_jogo != null){
]]> sqlBase = "SELECT * FROM TB_MATHEUS_MEDEIROS_AVALIACOES WHERE ID_JOGO = " + id_jogo + " ORDER BY CODIGO";
</sqlBuilderDataSource> }
</datasource> return sqlBase;
<key-field>CODIGO</key-field> }
<columns> ]]>
<column name="CODIGO" caption="ID" /> </sqlBuilderDataSource>
<column name="NOME" caption="NOME" /> </datasource>
<column name="EMAIL" caption="E-MAIL" /> <key-field>CODIGO</key-field>
<column name="COMENTARIO" caption="COMENTÁRIO" /> <columns>
<column name="NOTA" caption="NOTA" />
<column name="DATA_AVALIACAO" caption="DATA DE AVALIAÇÃO" /> <column name="CODIGO" caption="ID" />
<generated name="EDITAR" caption="EDITAR" align="CENTER"> <column name="NOME" caption="NOME" />
<scriptColumnGenerator language="JavaScript"> <column name="EMAIL" caption="E-MAIL" />
<![CDATA[ <column name="COMENTARIO" caption="COMENTÁRIO" />
function Generator() { <column name="NOTA" caption="NOTA" />
<column name="DATA_AVALIACAO" caption="DATA DE AVALIAÇÃO" />
<generated name="EDITAR" caption="EDITAR" align="CENTER">
<scriptColumnGenerator language="JavaScript">
<![CDATA[
function Generator() {
var comp = libService.loadScript("vaadinComponents"); var comp = libService.loadScript("vaadinComponents");
this.generate = function (itemId, columnId, item, container) { this.generate = function (itemId, columnId, item, container) {
var btn = comp.buttonIcon("Editar", function () { var btn = comp.buttonIcon("Editar", function () {
@@ -292,13 +302,13 @@
} }
} }
var script = new Generator(); var script = new Generator();
]]> ]]>
</scriptColumnGenerator> </scriptColumnGenerator>
</generated> </generated>
<generated name="EXCLUIR" caption="EXCLUIR" align="CENTER"> <generated name="EXCLUIR" caption="EXCLUIR" align="CENTER">
<scriptColumnGenerator language="JavaScript"> <scriptColumnGenerator language="JavaScript">
<![CDATA[ <![CDATA[
function Generator() { function Generator() {
var comp = libService.loadScript("vaadinComponents"); var comp = libService.loadScript("vaadinComponents");
this.generate = function (itemId, columnId, item, container) { this.generate = function (itemId, columnId, item, container) {
var btn = comp.buttonIcon( var btn = comp.buttonIcon(
@@ -318,8 +328,19 @@
}, },
function(action) { function(action) {
if(action.yes()) { if(action.yes()) {
try{
lib.fncDeletarRegistro(config_avaliacoes, itemId); lib.fncDeletarRegistro(config_avaliacoes, itemId);
engine.getField("dbtAvaliacoes").refresh(); engine.getField("dbtAvaliacoes").refresh();
} catch (error) {
engine.getField("dbtAvaliacoes").refresh();
lib_msg.showNotification({
type: lib_msg.notificationType.tray,
caption: "Avaliação apagada!",
msg: "A avaliação foi apagada com sucesso.",
position: lib_msg.notificationPosition.bottom_right,
});
return;
}
} }
} }
); );
@@ -330,75 +351,86 @@
} }
} }
var script = new Generator(); var script = new Generator();
]]>
</scriptColumnGenerator>
</generated>
</columns>
</DBTable>
<HorizontalLayout spacing="true" align="MIDDLE_RIGHT">
<ButtonWidget id="btnVoltarAvaliacoes" style="BLACK" caption="Voltar"
width="20%" align="MIDDLE_RIGHT" defaultIcon="BACK">
<onClickScript language="JavaScript">
<![CDATA[
function run() {
engine.getLayout("wltListaAvaliacoes").closeWindow();
}
]]> ]]>
</scriptColumnGenerator> </onClickScript>
</generated> </ButtonWidget>
</columns> <ButtonWidget id="btnAdicionarAvaliacoes" style="GREEN"
</DBTable> caption="Nova Avaliação"
<HorizontalLayout spacing="true" align="MIDDLE_RIGHT"> width="20%" align="MIDDLE_RIGHT" defaultIcon="ADD">
<ButtonWidget id="btnVoltarAvaliacoes" style="BLACK" caption="Voltar" defaultIcon="BACK"> <onClickScript language="JavaScript">
<onClickScript language="JavaScript"><![CDATA[ <![CDATA[
function run() { function run (){
engine.getLayout("wltListaAvaliacoes").closeWindow(); engine.getGlobalVariable("resetPanelReviews")();
} engine.getLayout("wltCriarAvaliacoes").showWindow();
]]></onClickScript> engine.getLayout("wltListaAvaliacoes").closeWindow();
</ButtonWidget> }
<ButtonWidget id="btnAdicionarAvaliacoes" style="GREEN" caption="Nova Avaliação" defaultIcon="ADD"> ]]>
<onClickScript language="JavaScript"><![CDATA[ </onClickScript>
function run (){ </ButtonWidget>
engine.getGlobalVariable("resetPanelReviews")(); </HorizontalLayout>
engine.getLayout("wltCriarAvaliacoes").showWindow(); </VerticalLayout>
engine.getLayout("wltListaAvaliacoes").closeWindow(); </WindowLayout>
}
]]></onClickScript>
</ButtonWidget>
</HorizontalLayout>
</VerticalLayout>
</WindowLayout>
<CrudPanel id="pnlListaJogos" width="100%" height="100%" visible="true"> <CrudPanel id="pnlListaJogos" width="100%" height="100%" visible="true">
<Header backgroundColor="ORANGE"> <Header backgroundColor="ORANGE">
<Caption>Cadastro de Jogos</Caption> <Caption>Avaliações dos jogos</Caption>
<SubCaption>Cadastro de jogos</SubCaption> <SubCaption>Os melhores jogos já feitos</SubCaption>
</Header> </Header>
<Section height="100%" caption="Jogos" subCaption="Veja todos os jogos" <Section height="100%" caption="Jogos" subCaption="Veja todos os jogos"
id="secDadosJogo"> id="secDadosJogo">
<VerticalLayout width="100%" height="100%" align="MIDDLE_CENTER" <VerticalLayout width="100%" height="100%" align="MIDDLE_CENTER"
spacing="true"> spacing="true">
<HorizontalLayout width="100%" spacing="true"> <HorizontalLayout width="100%" spacing="true">
<TextField expandRatio="0.8" width="100%" id="txfPesquisa" <TextField expandRatio="0.8" width="100%" id="txfPesquisaJogo"
caption="Pesquise pelo nome do jogo" type="string" caption="Pesquise o nome do jogo" type="string"
immediate="true"> immediate="true">
<events>
<valueChange> <events>
<script language="JavaScript"> <valueChange>
<![CDATA[ <script language="JavaScript">
function run() { <![CDATA[
engine.getField("dbtJogos").refresh(); function run(){
engine.getField("dbtJogos").refresh();
} }
]]> ]]>
</script> </script>
</valueChange> </valueChange>
</events> </events>
</TextField> </TextField>
<ButtonWidget id="btnPesquisar" caption="Pesquisar" defaultIcon="SEARCH" style="BLACK"> <ButtonWidget defaultIcon="SEARCH" id="btnPesquisar"
<onClickScript language="JavaScript"> caption="Pesquisar" style="BLUE" expandRatio="0.2">
<![CDATA[ <onClickScript language="JavaScript">
function run() { <![CDATA[
engine.getField("dbtJogos").refresh(); function run() {
} engine.getField("dbtJogos").refresh();
]]> }
]]>
</onClickScript> </onClickScript>
</ButtonWidget> </ButtonWidget>
</HorizontalLayout> </HorizontalLayout>
<DBTable id="dbtJogos" align="MIDDLE_CENTER" width="100%" height="100%" type="string" expandRatio="0.5" showRowCount="true" drawRefreshButton="true" gridSelectable="true" selectable="true"> <DBTable id="dbtJogos" align="MIDDLE_CENTER" type="string" width="100%"
<datasource> gridSelectable="true" height="100%"
<sqlBuilderDataSource connection-key="vitruvio" language="JavaScript"> expandRatio="0.5" showRowCount="true" drawRefreshButton="true">
<![CDATA[ <datasource>
function buildSQL(_){ <sqlBuilderDataSource connection-key="vitruvio"
var txfPesquisa = engine.getField("txfPesquisa").getValue(); language="JavaScript">
<![CDATA[
function buildSQL(_){
var txfPesquisa = engine.getField("txfPesquisaJogo").getValue();
var sqlBase = "SELECT J.CODIGO, J.TITULO, J.GENERO, J.ANO_LANCAMENTO, J.PRODUTORA, COALESCE(ROUND(AVG(A.NOTA), 2), 0) AS NOTA_MEDIA, J.DESCRICAO FROM TB_MATHEUS_MEDEIROS_JOGOS J LEFT JOIN TB_MATHEUS_MEDEIROS_AVALIACOES A ON J.CODIGO = A.ID_JOGO"; var sqlBase = "SELECT J.CODIGO, J.TITULO, J.GENERO, J.ANO_LANCAMENTO, J.PRODUTORA, COALESCE(ROUND(AVG(A.NOTA), 2), 0) AS NOTA_MEDIA, J.DESCRICAO FROM TB_MATHEUS_MEDEIROS_JOGOS J LEFT JOIN TB_MATHEUS_MEDEIROS_AVALIACOES A ON J.CODIGO = A.ID_JOGO";
if (txfPesquisa) { if (txfPesquisa) {
@@ -409,115 +441,132 @@
sqlBase += " ORDER BY J.CODIGO"; sqlBase += " ORDER BY J.CODIGO";
return sqlBase; return sqlBase;
} }
]]> ]]>
</sqlBuilderDataSource> </sqlBuilderDataSource>
</datasource> </datasource>
<key-field> <key-field>CODIGO</key-field>
CODIGO <columns>
</key-field> <column name="CODIGO" caption="ID" />
<columns>
<column name="CODIGO" caption="ID" />
<column name="TITULO" caption="TÍTULO" /> <column name="TITULO" caption="TÍTULO" />
<column name="GENERO" caption="GÊNERO" /> <column name="GENERO" caption="GÊNERO" />
<column name="ANO_LANCAMENTO" caption="ANO DE LANÇAMENTO" /> <column name="ANO_LANCAMENTO" caption="ANO DE LANÇAMENTO" />
<column name="PRODUTORA" caption="PRODUTORA" /> <column name="PRODUTORA" caption="PRODUTORA" />
<column name="NOTA_MEDIA" caption="NOTA MÉDIA" /> <column name="NOTA_MEDIA" caption="NOTA MÉDIA" />
<column name="DESCRICAO" caption="DESCRIÇÃO" /> <column name="DESCRICAO" caption="DESCRIÇÃO" />
<generated name="AVALIACOES" caption="AVALIAÇÕES" align="CENTER">
<generated name="AVALIACOES" caption="AVALIACOES" align="CENTER">
<scriptColumnGenerator language="JavaScript"> <scriptColumnGenerator language="JavaScript">
<![CDATA[ <![CDATA[
function Generator() { function Generator() {
var comp = libService.loadScript("vaadinComponents"); var comp = libService.loadScript("vaadinComponents");
this.generate = function (itemId, columnId, item, container) { this.generate = function (itemId, columnId, item, container) {
var btn = comp.buttonIcon("Avaliações", function () { var btn = comp.buttonIcon("Avaliações", function () {
engine.getField("dbtJogos").setValue(itemId); engine.getField("dbtJogos").setValue(itemId);
engine.getField("dbtAvaliacoes").refresh(); engine.getField("dbtAvaliacoes").refresh();
var idJogoSelecionado = engine.getField("dbtJogos").getValue(); var idJogoSelecionado = engine.getField("dbtJogos").getValue();
engine.getGlobalVariable("showTableReviews")(itemId); engine.getGlobalVariable("showTableReviews")(itemId);
}, "star"); }, "star");
return btn;
} return btn;
} }
var script = new Generator(); }
]]> var script = new Generator();
</scriptColumnGenerator> ]]>
</scriptColumnGenerator>
</generated> </generated>
<generated name="EDITAR" caption="EDITAR" align="CENTER"> <generated name="EDITAR" caption="EDITAR" align="CENTER">
<scriptColumnGenerator language="JavaScript"> <scriptColumnGenerator language="JavaScript">
<![CDATA[ <![CDATA[
function Generator() { function Generator() {
var comp = libService.loadScript("vaadinComponents"); var comp = libService.loadScript("vaadinComponents");
this.generate = function (itemId, columnId, item, container) { this.generate = function (itemId, columnId, item, container) {
var btn = comp.buttonIcon("Editar", function () { var btn = comp.buttonIcon("Editar", function () {
var id = itemId; var id = itemId;
engine.getField("txfCodigo").setValue(id); engine.getField("txfCodigo").setValue(id);
if (id != null) {
engine.getGlobalVariable("changeCrudPanel")("cadastroJogo"); if (id != null) {
var config_jogos = engine.getGlobalVariable('config_jogos'); engine.getGlobalVariable("changeCrudPanel")("cadastroJogo");
var config_jogos = engine.getGlobalVariable('config_jogos');
var lib = libService.loadScript('lib_cadastro_padrao'); var lib = libService.loadScript('lib_cadastro_padrao');
lib.fncCarregarCampos(config_jogos, id); var sql = lib.fncCarregarCampos(config_jogos, id);
} }
}, "pencil"); }, "pencil");
return btn;
} return btn;
} }
var script = new Generator(); }
]]> var script = new Generator();
</scriptColumnGenerator> ]]>
</scriptColumnGenerator>
</generated> </generated>
<generated name="EXCLUIR" caption="EXCLUIR" align="CENTER"> <generated name="EXCLUIR" caption="EXCLUIR" align="CENTER">
<scriptColumnGenerator language="JavaScript"> <scriptColumnGenerator language="JavaScript">
<![CDATA[ <![CDATA[
function Generator() { function Generator() {
var comp = libService.loadScript("vaadinComponents"); var comp = libService.loadScript("vaadinComponents");
this.generate = function (itemId, columnId, item, container) { this.generate = function (itemId, columnId, item, container) {
var btn = comp.buttonIcon( var btn = comp.buttonIcon(
"Excluir", "Excluir",
function () { function () {
var lib = engine.getGlobalVariable("lib_cadastro_padrao"); var lib = engine.getGlobalVariable("lib_cadastro_padrao");
var config_jogos = engine.getGlobalVariable("config_jogos"); var config_jogos = engine.getGlobalVariable("config_jogos");
var registro = itemId + " - " + item.getItemProperty("titulo"); var registro = itemId + " - " + item.getItemProperty("titulo");
var msg = "Tem certeza de que deseja excluir o jogo " + registro + "?"; var msg = "Tem certeza de que deseja excluir o jogo " + registro + "?";
var lib_msg = libService.loadScript("messages"); var lib_msg = libService.loadScript("messages");
lib_msg.confirmationBox( lib_msg.confirmationBox(
{ {
icon: lib_msg.confirmationIcon.question, icon: lib_msg.confirmationIcon.question,
caption: "Confirmar operação", caption: "Confirmar operação",
msg: msg, msg: msg,
actions: lib_msg.confirmationControls.yes_no, actions: lib_msg.confirmationControls.yes_no,
}, },
function(action) { function(action) {
if(action.yes()) { if(action.yes()) {
try {
lib.fncDeletarRegistro(config_jogos, itemId); lib.fncDeletarRegistro(config_jogos, itemId);
engine.getField("dbtJogos").refresh(); engine.getField("dbtJogos").refresh();
} } catch (error) {
} engine.getField("dbtJogos").refresh();
); lib_msg.showNotification({
}, type: lib_msg.notificationType.tray,
"trash", caption: "Apagado!!",
); msg: "O jogo foi apagado com sucesso.",
return btn; position: lib_msg.notificationPosition.bottom_right,
} });
} return;
var script = new Generator(); }
]]> }
</scriptColumnGenerator> }
);
},
"trash",
);
return btn;
}
}
var script = new Generator();
]]>
</scriptColumnGenerator>
</generated> </generated>
</columns> </columns>
</DBTable> </DBTable>
<HorizontalLayout align="MIDDLE_RIGHT" spacing="true"> <HorizontalLayout align="MIDDLE_RIGHT" spacing="true">
<ButtonWidget id="btnNovoJogo" caption="Novo Jogo" defaultIcon="ADD" style="GREEN"> <ButtonWidget defaultIcon="ADD" id="btnAdicionarJogo" style="GREEN"
<onClickScript language="JavaScript"> caption="Novo">
<onClickScript language="JavaScript">
<![CDATA[ <![CDATA[
function run (){ function run (){
engine.getGlobalVariable("changeCrudPanel")("cadastroJogo"); engine.getGlobalVariable("changeCrudPanel")("cadastroJogo");
} }
]]> ]]>
</onClickScript> </onClickScript>
</ButtonWidget> </ButtonWidget>
<ButtonWidget id="btnVerAvaliacoes" caption="Ver Avaliações" defaultIcon="STAR" style="BLUE"> <ButtonWidget defaultIcon="STAR" id="btnVerAvaliacoes" style="ORANGE"
<onClickScript language="JavaScript"> caption="Avaliações">
<onClickScript language="JavaScript">
<![CDATA[ <![CDATA[
function run (){ function run (){
engine.getField("dbtAvaliacoes").refresh(); engine.getField("dbtAvaliacoes").refresh();
@@ -526,34 +575,51 @@
} }
]]> ]]>
</onClickScript> </onClickScript>
</ButtonWidget> </ButtonWidget>
</HorizontalLayout> </HorizontalLayout>
</VerticalLayout> </VerticalLayout>
</Section> </Section>
</CrudPanel> </CrudPanel>
<CrudPanel id="pnlCadastroJogo" width="100%" height="100%" visible="false">
<Header> <CrudPanel id="pnlCadastroJogo" width="100%" height="100%" visible="false">
<Caption> Cadastro de um novo jogo</Caption> <Header backgroundColor="ORANGE">
<SubCaption>Cadastro de jogo</SubCaption> <Caption>Cadastro de jogos</Caption>
</Header> <SubCaption>Dados para cadastro de jogos</SubCaption>
<Section caption="Cadastro de novo Jogo" subCaption="Insira os dados do jogo" width="100%" height="100%" > </Header>
<VerticalLayout width="100%" height="100%" align="MIDDLE_CENTER" spacing="true"> <Section caption="Novo jogo" subCaption="Informe os dados abaixo" width="100%">
<Panel id="pnlDadosJogo" width="100%" height="100%" margin="true" >
<VerticalLayout caption="Dados do Jogo" width="100%" spacing="true"> <VerticalLayout width="100%" height="100%" align="MIDDLE_CENTER"
<TextField id="txfCodigo" caption="Código" type="number" width="100%" enabled="false" visible="false"/> spacing="true">
<NumericField id="txfNotaMedia" caption="Nota Média" type="number" width="100%" enabled="false" visible="false"/> <Panel id="pnlDadosJogos" width="100%" height="100%" caption="Dados do Jogo" margin="true">
<TextField id="txfTitulo" caption="Título" type="string" width="100%" required="true" minLength="3"/> <VerticalLayout caption="Dados do Jogo" width="100%" spacing="true">
<ComboBox id="cbbGenero" type="string" caption="Gênero" updatable="false" allowNullSelection="true" width="100%" required="true">
<entry key="ACAO" value="Ação"/> <TextField id="txfCodigo" caption="Código" type="number"
<entry key="AVENTURA" value="Aventura"/> width="100%" enabled="false" visible="false" />
<entry key="RPG" value="RPG"/> <NumericField id="txfNotaMedia" caption="Nota média"
<entry key="ESPORTES" value="Esportes"/> type="number"
<entry key="ESTRATEGIA" value="Estratégia"/> width="100%" enabled="false" visible="false" />
<entry key="CORRIDA" value="Corrida"/> <TextField id="txfTitulo" caption="Título" type="string"
<entry key="Sobrevivencia" value="Sobrevivência"/> width="100%"
</ComboBox> required="true" minLength="3" maxLength="100" />
<TextField id="txfAnoLancamento" caption="Ano de Lançamento" type="number" width="100%" required="true"> <ComboBox id="cbbGenero" allowNullSelection="false"
<validation> caption="Gênero" description="ComboBox Exemplo"
updatable="false" required="true"
visible="true" type="string" width="100%">
<entry value="Ação" key="Ação" />
<entry value="Aventura" key="Aventura" />
<entry value="Corrida" key="Corrida" />
<entry value="Esporte" key="Esporte" />
<entry value="Estratégia" key="Estratégia" />
<entry value="Luta" key="Luta" />
<entry value="RPG" key="RPG" />
<entry value="Simulação" key="Simulação" />
<entry value="Terror" key="Terror" />
<entry value="Sobrevivência" key="Sobrevivência" />
<entry value="Infântil" key="Infântil" />
</ComboBox>
<TextField id="txfAnoLancamento" caption="Ano de Lançamento"
type="number" width="100%" required="true" maxLength="4">
<validation>
<script language="JavaScript"> <script language="JavaScript">
<![CDATA[ <![CDATA[
function validator(){ function validator(){
@@ -579,23 +645,17 @@
]]> ]]>
</script> </script>
</validation> </validation>
</TextField> </TextField>
<TextField id="txfProdutora" caption="Produtora" type="string" width="100%" required="true" maxLength="50"/> <TextField id="txfProdutora" caption="Produtora" type="string"
<TextArea id="txaDescricao" caption="Descrição" type="string" width="100%" maxLength="500"/> width="100%" required="true" maxLength="50" />
</VerticalLayout> <TextArea id="txaDescricao" caption="Descrição do Jogo"
</Panel> type="string" width="100%" height="" maxLength="500" />
<HorizontalLayout align="MIDDLE_RIGHT" spacing="true" > </VerticalLayout>
<ButtonWidget id="btnVoltar" caption="Voltar" defaultIcon="BACK" style="BLACK"> </Panel>
<onClickScript language="JavaScript"> <HorizontalLayout align="MIDDLE_RIGHT" spacing="true">
<![CDATA[ <ButtonWidget id="btnLimpar" caption="Limpar" defaultIcon="REFRESH"
function run() { style="ORANGE">
engine.getGlobalVariable("changeCrudPanel")("listaJogos"); <onClickScript language="JavaScript">
}
]]>
</onClickScript>
</ButtonWidget>
<ButtonWidget id="btnLimpar" caption="Limpar" defaultIcon="REMOVE" style="BLUE">
<onClickScript language="JavaScript">
<![CDATA[ <![CDATA[
function run(){ function run(){
var config_jogos = engine.getGlobalVariable('config_jogos'); var config_jogos = engine.getGlobalVariable('config_jogos');
@@ -604,9 +664,10 @@
} }
]]> ]]>
</onClickScript> </onClickScript>
</ButtonWidget> </ButtonWidget>
<ButtonWidget id="btnSalvarJogo" caption="Salvar" defaultIcon="SAVE" style="GREEN"> <ButtonWidget id="btnSalvar" caption="Salvar" defaultIcon="SAVE"
<onClickScript language="JavaScript"> style="BLUE">
<onClickScript language="JavaScript">
<![CDATA[ <![CDATA[
function run() { function run() {
engine.getGlobalVariable("organizeRequiredFields")("avaliacoes", false); engine.getGlobalVariable("organizeRequiredFields")("avaliacoes", false);
@@ -623,7 +684,7 @@
lib_msg.showNotification({ lib_msg.showNotification({
type: lib_msg.notificationType.tray, type: lib_msg.notificationType.tray,
caption: "Sucesso!", caption: "Sucesso!",
msg: "O jogo foi gravado com sucesso!", msg: "O jogo foi gravado com sucesso",
position: lib_msg.notificationPosition.bottom_right, position: lib_msg.notificationPosition.bottom_right,
}); });
} }
@@ -631,14 +692,22 @@
} }
]]> ]]>
</onClickScript> </onClickScript>
</ButtonWidget> </ButtonWidget>
</HorizontalLayout> <ButtonWidget id="btnVoltar" caption="Voltar" defaultIcon="BACK"
</VerticalLayout> style="BLACK">
</Section> <onClickScript language="JavaScript">
<![CDATA[
</CrudPanel> function run() {
</VerticalLayout> engine.getGlobalVariable("changeCrudPanel")("listaJogos");
}
</components> ]]>
</form> </onClickScript>
</ButtonWidget>
</HorizontalLayout>
</VerticalLayout>
</Section>
</CrudPanel>
</VerticalLayout>
</components>
</form>
</panel-form> </panel-form>
BIN
View File
Binary file not shown.
+198 -31
View File
@@ -12,20 +12,21 @@
</not> </not>
</preConditions> </preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">CREATE TABLE TB_MATHEUS_MEDEIROS_JOGOS ( <sql endDelimiter=";" splitStatements="true" stripComments="false">
CODIGO NUMERIC(10) NOT NULL, CREATE TABLE TB_MATHEUS_MEDEIROS_JOGOS (
TITULO VARCHAR(150) NOT NULL, CODIGO NUMERIC(10) NOT NULL,
GENERO VARCHAR(30) NOT NULL, TITULO VARCHAR(150) NOT NULL,
ANO_LANCAMENTO NUMERIC(4) NOT NULL, GENERO VARCHAR(30) NOT NULL,
PRODUTORA VARCHAR(50) NOT NULL, ANO_LANCAMENTO NUMERIC(4) NOT NULL,
DESCRICAO VARCHAR(500) NOT NULL, PRODUTORA VARCHAR(50) NOT NULL,
CONSTRAINT PK_MM_JOGOS PRIMARY KEY (CODIGO), DESCRICAO VARCHAR(500) NOT NULL,
CONSTRAINT CK_MM_JOGOS_ANO CONSTRAINT PK_MM_JOGOS PRIMARY KEY (CODIGO),
CHECK (ANO_LANCAMENTO BETWEEN 1970 AND EXTRACT(YEAR FROM CURRENT_DATE)), CONSTRAINT CK_MM_JOGOS_ANO
CONSTRAINT CK_MM_JOGOS_TITULO CHECK (ANO_LANCAMENTO BETWEEN 1970 AND EXTRACT(YEAR FROM CURRENT_DATE)),
CHECK (LENGTH(TITULO) BETWEEN 3 AND 100) CONSTRAINT CK_MM_JOGOS_TITULO
); CHECK (LENGTH(TITULO) BETWEEN 3 AND 100)
</sql> );
</sql>
</changeSet> </changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-2"> <changeSet author="matheus.medeiros" id="matheus.medeiros-2">
@@ -36,7 +37,7 @@
</preConditions> </preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false"> <sql endDelimiter=";" splitStatements="true" stripComments="false">
CREATE SEQUENCE TB_MATHEUS_MEDEIROS_JOGOS_SEQ CREATE SEQUENCE TB_MATHEUS_MEDEIROS_JOGOS_SEQ
START WITH 1 INCREMENT BY 1 CACHE 1 NO CYCLE; START WITH 1 INCREMENT BY 1 CACHE 1 NO CYCLE;
</sql> </sql>
</changeSet> </changeSet>
@@ -47,21 +48,22 @@
</not> </not>
</preConditions> </preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false"> <sql endDelimiter=";" splitStatements="true" stripComments="false">
CREATE TABLE TB_MATHEUS_MEDEIROS_AVALIACOES ( CREATE TABLE TB_MATHEUS_MEDEIROS_AVALIACOES (
CODIGO NUMERIC(10) NOT NULL, CODIGO NUMERIC(10) NOT NULL,
NOME VARCHAR(100) NOT NULL, NOME VARCHAR(100) NOT NULL,
EMAIL VARCHAR(150) NOT NULL, EMAIL VARCHAR(150) NOT NULL,
COMENTARIO VARCHAR(1000) NOT NULL, COMENTARIO VARCHAR(1000) NOT NULL,
NOTA NUMERIC(4,2) NOT NULL, NOTA NUMERIC(4,2) NOT NULL,
DATA_AVALIACAO DATE DEFAULT CURRENT_DATE NOT NULL, DATA_AVALIACAO DATE DEFAULT CURRENT_DATE NOT NULL,
ID_JOGO NUMERIC(10) NOT NULL, ID_JOGO NUMERIC(10) NOT NULL,
CONSTRAINT PK_MM_AVALIACOES PRIMARY KEY (CODIGO), CONSTRAINT PK_MM_AVALIACOES PRIMARY KEY (CODIGO),
CONSTRAINT FK_MM_AVAL_JOGO CONSTRAINT FK_MM_AVAL_JOGO
FOREIGN KEY (ID_JOGO) FOREIGN KEY (ID_JOGO)
REFERENCES TB_MATHEUS_MEDEIROS_JOGOS (CODIGO), REFERENCES TB_MATHEUS_MEDEIROS_JOGOS (CODIGO),
CONSTRAINT CK_MM_AVAL_NOTA CONSTRAINT CK_MM_AVAL_NOTA
CHECK (NOTA BETWEEN 0 AND 10) CHECK (NOTA BETWEEN 0 AND 10)
);</sql> );
</sql>
</changeSet> </changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-3"> <changeSet author="matheus.medeiros" id="matheus.medeiros-3">
@@ -72,8 +74,173 @@
</preConditions> </preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false"> <sql endDelimiter=";" splitStatements="true" stripComments="false">
CREATE SEQUENCE TB_MATHEUS_MEDEIROS_AVALIACOES_SEQ CREATE SEQUENCE TB_MATHEUS_MEDEIROS_AVALIACOES_SEQ
START WITH 1 INCREMENT BY 1 CACHE 1 NO CYCLE; START WITH 1 INCREMENT BY 1 CACHE 1 NO CYCLE;
</sql> </sql>
</changeSet> </changeSet>
<!-- ========================================================= -->
<!-- NOVOS CHANGESETS - SEM ALTERAR OS ANTIGOS -->
<!-- ========================================================= -->
<changeSet author="matheus.medeiros" id="matheus.medeiros-5">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_JOGOS"/>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
ALTER COLUMN TITULO TYPE VARCHAR(100);
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
ALTER COLUMN DESCRICAO DROP NOT NULL;
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
ALTER COLUMN CODIGO SET DEFAULT NEXTVAL('TB_MATHEUS_MEDEIROS_JOGOS_SEQ');
</sql>
</changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-6">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_JOGOS"/>
<not>
<columnExists tableName="TB_MATHEUS_MEDEIROS_JOGOS" columnName="NOTA_MEDIA"/>
</not>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
ADD COLUMN NOTA_MEDIA NUMERIC(3,1);
</sql>
</changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-7">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_JOGOS"/>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="true">
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
DROP CONSTRAINT IF EXISTS CK_MM_JOGOS_NOTA_MEDIA;
ALTER TABLE TB_MATHEUS_MEDEIROS_JOGOS
ADD CONSTRAINT CK_MM_JOGOS_NOTA_MEDIA
CHECK (
NOTA_MEDIA IS NULL
OR NOTA_MEDIA BETWEEN 0 AND 10
);
</sql>
</changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-8">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_AVALIACOES"/>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN COMENTARIO TYPE VARCHAR(300);
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN COMENTARIO DROP NOT NULL;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN NOTA TYPE NUMERIC(3,1);
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN NOTA DROP NOT NULL;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN DATA_AVALIACAO TYPE TIMESTAMP;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN DATA_AVALIACAO SET DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ALTER COLUMN CODIGO SET DEFAULT NEXTVAL('TB_MATHEUS_MEDEIROS_AVALIACOES_SEQ');
</sql>
</changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-9">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_AVALIACOES"/>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="true">
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
DROP CONSTRAINT IF EXISTS CK_MM_AVAL_NOTA;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ADD CONSTRAINT CK_MM_AVAL_NOTA
CHECK (
NOTA IS NULL
OR NOTA BETWEEN 0 AND 10
);
</sql>
</changeSet>
<changeSet author="matheus.medeiros" id="matheus.medeiros-10">
<preConditions onError="WARN" onFail="MARK_RAN">
<tableExists tableName="TB_MATHEUS_MEDEIROS_AVALIACOES"/>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="true">
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
DROP CONSTRAINT IF EXISTS UK_MM_AVAL_EMAIL_JOGO;
ALTER TABLE TB_MATHEUS_MEDEIROS_AVALIACOES
ADD CONSTRAINT UK_MM_AVAL_EMAIL_JOGO
UNIQUE (EMAIL, ID_JOGO);
</sql>
</changeSet>
<!-- Tabela de vendas de jogos -->
<changeSet author="matheus.medeiros" id="matheus.medeiros-11" objectQuotingStrategy="LEGACY">
<preConditions onError="WARN" onFail="MARK_RAN" onSqlOutput="IGNORE">
<not>
<tableExists tableName="TB_MATHEUS_MEDEIROS_VENDAS_JOGOS"/>
</not>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">
CREATE TABLE TB_MATHEUS_MEDEIROS_VENDAS_JOGOS (
ID NUMERIC(10) NOT NULL,
ID_JOGO NUMERIC(10) NOT NULL,
QTD_VENDIDA NUMERIC(10) NOT NULL,
PRECO_UN NUMERIC(12,2) NOT NULL,
VALOR_TOTAL NUMERIC(14,2) NOT NULL,
VENDEDOR VARCHAR(100) NOT NULL,
NOME_CLIENTE VARCHAR(150) NOT NULL,
NOME_LOJA VARCHAR(150) NOT NULL,
DTA_VENDA TIMESTAMP NOT NULL,
CONSTRAINT PK_MM_VENDAS_JOGOS
PRIMARY KEY (ID),
CONSTRAINT FK_MM_VENDAS_JOGO
FOREIGN KEY (ID_JOGO)
REFERENCES TB_MATHEUS_MEDEIROS_JOGOS (CODIGO),
CONSTRAINT CK_MM_VENDAS_QTD
CHECK (QTD_VENDIDA > 0),
CONSTRAINT CK_MM_VENDAS_PRECO
CHECK (PRECO_UN >= 0),
CONSTRAINT CK_MM_VENDAS_TOTAL
CHECK (VALOR_TOTAL >= 0)
);
</sql>
</changeSet>
<!-- Sequência para geração automática do ID -->
<changeSet author="matheus.medeiros" id="matheus.medeiros-12">
<preConditions onError="WARN" onFail="MARK_RAN" onSqlOutput="IGNORE">
<not>
<sequenceExists
sequenceName="TB_MATHEUS_MEDEIROS_VENDAS_JOGOS_SEQ"/>
</not>
</preConditions>
<sql endDelimiter=";" splitStatements="true" stripComments="false">
CREATE SEQUENCE TB_MATHEUS_MEDEIROS_VENDAS_JOGOS_SEQ
START WITH 1
INCREMENT BY 1
CACHE 1
NO CYCLE;
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>