Browse Source

marca y categoria (editar marca)

master
nayelivilchismariscal 7 months ago
parent
commit
8a65130d7e
  1. 58
      Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/bl/CategoriaBL.java
  2. 4
      Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/bl/CategoriaBLLocal.java
  3. 1
      Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/dao/CategoriaDAO.java
  4. 76
      Inventario-war/src/java/mx/edu/tjs/chapala/sistemas/vista/DemoBeanCategoria.java
  5. 102
      Inventario-war/web/categoriaLista.xhtml
  6. 112
      Inventario-war/web/marcaLista.xhtml

58
Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/bl/CategoriaBL.java

@ -25,42 +25,35 @@ public class CategoriaBL implements CategoriaBLLocal {
public void addMessage(FacesMessage.Severity severity, String summary, String detail) {
FacesContext.getCurrentInstance().
addMessage(null, new FacesMessage(severity, summary, detail));
addMessage("categoriaMsj", new FacesMessage(severity, summary, detail));
}
@Override
public Mensaje agregar(Categoria categoria) {
System.out.println("Llegaste al metodo de agregar categoria");
System.out.println("Llegaste al metodo de agregar proveedor");
CategoriaDAO categoriaDAO = new CategoriaDAO();
Mensaje m = null;
//Toda la logica
Optional<Categoria> categoriaEncontradoOptional = categoriaDAO.buscarCategoria(categoria);
Categoria e = categoriaDAO.buscarPorId(categoria);
if(categoria.getNombre().isEmpty() || categoria.getStatus()==0){
if (categoria.getNombre().isEmpty()) {
m = Mensaje.CAMPOS_INCOMPLETOS;
System.out.println("LOS CAMPOS SON INCOMPLETOS");
addMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "Campos incompletos");
}
if(categoria.getNombre().length()>=45 ){
m= Mensaje.DATOS_INCORRECTOS;
System.out.println("DATOS INCORRECTOS");
addMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "Datos incorrectos");
System.out.println("CAMPOS INCOMPLETOS");
return m;
}
Optional<Categoria> categoriaEncontradoOptional = categoriaDAO.buscarCategoria(categoria);
if (categoriaEncontradoOptional.isPresent()) {
categoriaEncontradoOptional.get();
m = Mensaje.ELEMENTO_DUPLICADO;
System.out.println("NO SE PUEDE AGREGAR, YA EXISTE");
addMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "La categoria ya existe");
System.out.println("NO SE PUEDE AGREGAR, EL PROVEEDOR YA EXISTE");
addMessage(FacesMessage.SEVERITY_ERROR, "", "¡Error! El elemento ya existe");
} else {
categoriaDAO.agregar(categoria);
m = Mensaje.SIN_ERROR;
System.out.println("AGREGADO CON EXITO");
addMessage(FacesMessage.SEVERITY_INFO, "", "Se agrego la categoria");
addMessage(FacesMessage.SEVERITY_INFO, "", "¡Elemento agregado con éxito!");
}
return m;
}
@ -114,43 +107,50 @@ public class CategoriaBL implements CategoriaBLLocal {
}
@Override
public void eliminarId(Categoria categoria) {
public Mensaje eliminarId(Categoria categoria) {
CategoriaDAO a = new CategoriaDAO();
Mensaje m = null;
if (a.eliminar(categoria)) {
m = Mensaje.SIN_ERROR;
System.out.println("ELIMINADO CON EXITO");
addMessage(FacesMessage.SEVERITY_INFO, "", "Se ha eliminado correctamente");
addMessage(FacesMessage.SEVERITY_INFO, "", "¡Elemento eliminado correctamente!");
} else {
m = Mensaje.ELEMENTO_NO_ENCONTRADO;
System.out.println("NO SE PUDO ELIMINAR");
addMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "No se pudo eliminar");
}
addMessage(FacesMessage.SEVERITY_WARN, "", "¡Error! No se pudo eliminar el elemento");
}
return m;
}
@Override
public void editar(Categoria categoria) {
public Mensaje editar(Categoria categoria) {
CategoriaDAO ed = new CategoriaDAO();
Mensaje m = null;
Optional<Categoria> categoriaEncontradoOptional = ed.buscarCategoria(categoria);
if (categoriaEncontradoOptional.isPresent()) {
categoriaEncontradoOptional.get();
m = Mensaje.ELEMENTO_DUPLICADO;
System.out.println("NO SE PUEDE AGREGAR, YA EXISTE");
addMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "La categoria ya existe");
System.out.println("NO SE PUEDE EDITAR, EL PROVEEDOR YA EXISTE");
addMessage(FacesMessage.SEVERITY_ERROR, "", "¡Error al editar! El elemento ya existe");
} else {
ed.editar(categoria);
m = Mensaje.SIN_ERROR;
System.out.println("AGREGADO CON EXITO");
addMessage(FacesMessage.SEVERITY_INFO, "", "Categoria editada correctamente");
addMessage(FacesMessage.SEVERITY_INFO, "", "¡Elemento editado correctamente!");
}
return m;
}
public List<Categoria> getAll() {
CategoriaDAO p = new CategoriaDAO();
return p.buscarStatus(true);
}
}

4
Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/bl/CategoriaBLLocal.java

@ -25,7 +25,7 @@ public interface CategoriaBLLocal {
List<Categoria> buscarStatus(boolean b);
void eliminarId(Categoria categoria);
Mensaje eliminarId(Categoria categoria);
public void editar(Categoria p);
Mensaje editar(Categoria p);
}

1
Inventario-ejb/src/java/mx/edu/tjs/chapala/sistemas/dao/CategoriaDAO.java

@ -29,6 +29,7 @@ public class CategoriaDAO {
public void agregar(Categoria p) {
em.getTransaction().begin();
p.setStatus(1);
em.persist(p); //Almacenar en la BD
em.getTransaction().commit();
}

76
Inventario-war/src/java/mx/edu/tjs/chapala/sistemas/vista/DemoBeanCategoria.java

@ -14,6 +14,7 @@ import mx.edu.tjs.chapala.sistemas.bl.CategoriaBLLocal;
import mx.edu.tjs.chapala.sistemas.bl.ProveedorBLLocal;
import mx.edu.tjs.chapala.sistemas.modelo.Categoria;
import mx.edu.tjs.chapala.sistemas.modelo.Proveedor;
import mx.edu.tjs.chapala.sistemas.msg.Mensaje;
import org.primefaces.PrimeFaces;
import org.primefaces.util.LangUtils;
@ -45,22 +46,25 @@ public DemoBeanCategoria (){
return "index.xhtml";
}
public String agregarCategoria() {
categoria.setStatus(1);
categoriaBL.agregar(categoria);
categoria = new Categoria(); //refresca el campo
Mensaje mensaje = categoriaBL.agregar(categoria);
switch (mensaje) {
case SIN_ERROR:
categoria = new Categoria(); //limpiar
PrimeFaces.current().executeScript("PF('dlg').hide()");
PrimeFaces.current().ajax().update("formtabla:growl");
return "categoriaLista.xhtml";
}
public String editar() {
Categoria p = new Categoria();
p.setId(1);
p.setNombre("Carniceria");
p.setStatus(1);
case ELEMENTO_DUPLICADO:
return null;
categoriaBL.editar(p);
return "index.xhtml";
default:
return null;
}
}
public String buscarID() {
Categoria p = new Categoria();
p.setId(20);
@ -106,7 +110,9 @@ public DemoBeanCategoria (){
public Categoria getCategoria() {
return categoria;
}
public void eliminarcategoria() {
categoriaBL.eliminarId(categoria);
}
public void setCategoria(Categoria categoria) {
this.categoria = categoria;
}
@ -115,40 +121,51 @@ public DemoBeanCategoria (){
}
public void preparareditar(Categoria categoria){
titulo="Editanto Categoria";
this.categoria= categoria;
nuevo = false;
titulo = "E D I T A R";
this.categoria = categoria;
}
public void prepararnuevo(){
nuevo= true;
titulo="Agregando Categoria";
categoria=new Categoria();
nuevo = true;
titulo = "A G R E G A R";
categoria = new Categoria();
}
public boolean isNuevo() {
return nuevo;
}
public void editarcategoria(){
nuevo= false;
categoriaBL.editar(categoria);
PrimeFaces.current().executeScript("PF('dlg'.hide()");
public String editarcategoria(){
Mensaje mensaje = categoriaBL.editar(categoria);
switch (mensaje) {
case SIN_ERROR:
categoria = new Categoria();
PrimeFaces.current().executeScript("PF('dlg').hide()");
PrimeFaces.current().ajax().update("formtabla:growl");
return "categoriaLista.xhtml";
case ELEMENTO_DUPLICADO:
return null;
default:
return null;
}
public void preparareliminar(Categoria categoria){
this.categoria= categoria;
}
public void eliminarcategoria(){
categoriaBL.eliminarId(categoria);
PrimeFaces.current().executeScript("PF('dlg2'.hide()");
public void preparareliminar(Categoria categoria){
this.categoria = categoria;
}
public boolean globalFilterFunction(Object value, Object filter, Locale locale) {
String filterText = (filter == null) ? null : filter.toString().trim().toLowerCase();
if (LangUtils.isBlank(filterText)) {
return true;
}
Categoria customer = (Categoria) value;
return customer.getNombre().toLowerCase().contains(filterText)
|| customer.getNombre().toLowerCase().contains(filterText);
return customer.getNombre().toLowerCase().contains(filterText);
}
public List<Categoria> getFilteredCustomers3() {
@ -160,4 +177,3 @@ public DemoBeanCategoria (){
}
}

102
Inventario-war/web/categoriaLista.xhtml

@ -36,10 +36,9 @@
<f:view>
<h:form style="width: 100%">
<h:form id="formtabla">
<p:growl id="growl" showDetail="true" />
<p:dataTable id="tabla" value="#{demoBeanCategoria.categorias}" var="item"
widgetVar="categorias" emptyMessage="No se han encontrado categorias"
filteredValue="#{demoBeanCategoria.filteredCustomers3}"
@ -49,45 +48,116 @@
<f:facet name="header">
<div class="flex justify-content-end" style="height: 30px;" >
<div>
<p:commandButton action="categoriaCrearEditar.xhtml" actionListener="#{demoBeanCategoria.prepararnuevo()}" value="Nuevo" icon="pi pi-plus" />
<p:commandButton ajax="true" oncomplete="PF('dlg').show();" actionListener="#{demoBeanCategoria.prepararnuevo()}"
update=":dialog" value="Nuevo" icon="pi pi-plus" />
<i class="pi pi-search" style="margin-left: 765px; margin-top: 10px;"></i>
<p:inputText id="globalFilter" onkeyup="PF('categorias').filter()" style="width:300px; margin-left: 10px; margin-top: -40px; float: right;"
placeholder="Buscar categoria" />
<p:inputText id="globalFilter" onkeyup="PF('categorias').filter()" placeholder="Buscar categoria"
style="width:300px; margin-left: 10px; float: right; margin-top: -40px;" />
</div>
</div>
</f:facet>
<p:column styleClass="columnaOpc">
<p:column styleClass="columnaId">
<f:facet name="header">
<h:outputText value="Id" style="font-weight:bolder" />
<h:outputText value="Id" style=" font-weight:bolder;"/>
</f:facet>
<h:outputText value="#{item.id}" />
</p:column>
<p:column>
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value="Nombre" style="font-weight:bolder; float:lefth "/>
<h:outputText value="Nombre" style="font-weight:bolder; "/>
</f:facet>
<h:outputText value="#{item.nombre}" style="margin-left: 400px"/>
<h:outputText value="#{item.nombre}"/>
</p:column>
<p:column styleClass="columnaOpc">
<f:facet name="header">
<h:outputText value="Opciones" style="font-weight:bolder"/>
<h:outputText value="Opciones" style=" font-weight:bolder;"/>
</f:facet>
<p:commandButton action="categoriaCrearEditar.xhtml" actionListener="#{demoBeanCategoria.preparareditar(item)}" ajax="false" style="margin-right: 10px; " icon="pi pi-file-edit" />
<p:commandButton action="categoriaEliminar.xhtml" actionListener="#{demoBeanCategoria.preparareliminar(item)}" ajax="false" style="background-color: red; color:white; border-color: red; " icon="pi pi-trash"/>
</p:column>
<p:commandButton ajax="true" oncomplete="PF('dlg').show();" actionListener="#{demoBeanCategoria.preparareditar(item)}"
icon="pi pi-file-edit" update=":dialog" style="margin-right: 10px "/>
<p:commandButton ajax="true" oncomplete="PF('dlg2').show();" actionListener="#{demoBeanCategoria.preparareliminar(item)}"
icon="pi pi-trash" update=":dialog2" style="background-color: red; border-color: red; color:white; "/>
</p:column>
</p:dataTable>
</h:form>
<!-- CREAR/EDITAR -->
<p:dialog id="dialog" widgetVar="dlg" width="700" height="200" modal="true" appendTo="@(body)" >
<h:form >
<p:growl id="growl" for="categoriaMsj" showDetail="true" />
<h3 style="text-align: center; background-color: #036FAB; padding: 20px; color: #FFFFFF; ">
<h:outputText value="#{demoBeanCategoria.titulo}"/></h3>
<h3 style="text-align: center; padding: 10px; ">
</h3>
<h:panelGrid id="grid" columns="3" style="width: 100%">
<p:outputLabel value="Nombre:" for="nombre" />
<p:inputText id="nombre" value="#{demoBeanCategoria.categoria.nombre}" title="Nombre" required="true" requiredMessage="Falta el campo Nombre." styleClass="formulario-elemento" />
<p:message for="nombre"/>
</h:panelGrid>
<div style="margin-top: 30px;">
<p:commandButton action="categoriaLista.xhtml" ajax="false" icon="pi pi-times" immediate="true" update="grid, formtabla:tabla, growl"
style="background-color: red; border-color:red; float: right;"/>
<p:commandButton action="#{demoBeanCategoria.agregarCategoria()}" update="grid, formtabla:tabla, growl" ajax="true"
rendered="#{demoBeanCategoria.nuevo}" icon="pi pi-check"
style="margin-right: 10px; background-color:green; border-color:green; float: right; " />
<p:commandButton action="#{demoBeanCategoria.editarcategoria()}"
update="grid, formtabla:tabla, growl" ajax="true" rendered="#{!demoBeanCategoria.nuevo}" icon="pi pi-check"
style="margin-right: 10px; background-color:green; border-color:green; float: right;" />
</div>
</h:form>
</p:dialog>
<!-- ELIMINAR -->
<p:dialog id="dialog2" widgetVar="dlg2" width="700" height="200" modal="true" >
<h3 style="text-align: center; background-color: #036FAB; padding: 20px; color: #FFFFFF; ">
<h:outputText value="E L I M I N A R"/></h3>
<h:form>
<div>
<h:panelGrid id="grid" columns="2" style="width: 100%;" cellpadding="10" >
<h:outputText value="Id:" style=" font-weight:bolder"/>
<h:outputText value="#{demoBeanCategoria.categoria.id}" title="Id"/>
<h:outputText value="Nombre:" style=" font-weight:bolder"/>
<h:outputText value="#{demoBeanCategoria.categoria.nombre}" title="Nombre"/>
</h:panelGrid>
</div>
<div style="margin-top: 5px;">
<p:commandButton action="categoriaLista.xhtml" icon="pi pi-times" ajax="false" immediate="true"
style="margin-left: 10px; background-color:red; border-color:red; float: right;" />
<p:commandButton action="categoriaLista.xhtml" actionListener="#{demoBeanCategoria.eliminarcategoria()}"
ajax="false" icon="pi pi-check"
style=" background-color:green; border-color:green; float: right;"/>
</div>
</h:form>
</p:dialog>
</f:view>
</ui:define>

112
Inventario-war/web/marcaLista.xhtml

@ -16,7 +16,8 @@
<center><h2>M A R C A S</h2></center>
</ui:define>
<ui:define name="left">
<ui:define name="left" >
<h:form >
<p:menu style="border-color: gray; margin: 1px; width: 163px; height: 600px;">
@ -31,13 +32,16 @@
</h:form>
</ui:define>
<ui:define name="content" >
<ui:define name="content">
<f:view>
<h:form id="formtabla">
<p:growl id="growl" showDetail="true" />
<p:dataTable id="tabla" value="#{demoBeanMarca.marcas}" var="item"
widgetVar="marcas" emptyMessage="No se han encontrado marcas"
widgetVar="categorias" emptyMessage="No se han encontrado categorias"
filteredValue="#{demoBeanMarca.filteredCustomers3}"
globalFilterFunction="#{demoBeanMarca.globalFilterFunction}"
scrollable="true" scrollHeight="480" >
@ -49,92 +53,132 @@
update=":dialog" value="Nuevo" icon="pi pi-plus" />
<i class="pi pi-search" style="margin-left: 765px; margin-top: 10px;"></i>
<p:inputText id="globalFilter" onkeyup="PF('marcas').filter()" style="width:300px; margin-left: 10px; margin-top: -40px; float: right;"
placeholder="Buscar marca" />
<p:inputText id="globalFilter" onkeyup="PF('categorias').filter()" placeholder="Buscar categoria"
style="width:300px; margin-left: 10px; float: right; margin-top: -40px;" />
</div>
</div>
</f:facet>
<p:column styleClass="columnaId">
<f:facet name="header">
<h:outputText value="Id" style="font-weight:bolder" />
<h:outputText value="Id" style=" font-weight:bolder;"/>
</f:facet>
<h:outputText value="#{item.id}" />
</p:column>
<p:column>
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value="Nombre" style="font-weight:bolder"/>
<h:outputText value="Nombre" style="font-weight:bolder; "/>
</f:facet>
<h:outputText value="#{item.nombre}" style="margin-left: 170px"/>
<h:outputText value="#{item.nombre}"/>
</p:column>
<p:column>
<p:column style="text-align: center">
<f:facet name="header">
<h:outputText value="Proveedor" style="font-weight:bolder"/>
<h:outputText value="Proveedor" style="font-weight:bolder; "/>
</f:facet>
<h:outputText value="#{item.proveedorId.nombre} " style="margin-left: 170px"/>
<h:outputText value="#{item.proveedorId.nombre}"/>
</p:column>
<p:column styleClass="columnaOpc">
<f:facet name="header" >
<h:outputText value="Opciones" style="font-weight:bolder; margin-right: 90px"/>
<f:facet name="header">
<h:outputText value="Opciones" style=" font-weight:bolder;"/>
</f:facet>
<p:commandButton ajax="true" oncomplete="PF('dlg').show();" actionListener="#{demoBeanMarca.preparareditar(item)}" update=":dialog" style="margin-right: 10px; " icon="pi pi-file-edit" />
<p:commandButton action="marcaEliminar.xhtml" actionListener="#{demoBeanMarca.preparareliminar(item)}" style="background-color: red; color:white; border-color: red; " icon="pi pi-trash"/></p:column>
<p:commandButton ajax="true" oncomplete="PF('dlg').show();" actionListener="#{demoBeanMarca.preparareditar(item)}"
icon="pi pi-file-edit" update=":dialog" style="margin-right: 10px "/>
<p:commandButton ajax="true" oncomplete="PF('dlg2').show();" actionListener="#{demoBeanMarca.preparareliminar(item)}"
icon="pi pi-trash" update=":dialog2" style="background-color: red; border-color: red; color:white; "/>
</p:column>
</p:dataTable>
</h:form>
<!-- CREAR/EDITAR -->
<p:dialog id="dialog" widgetVar="dlg" width="700" height="250" modal="true" appendTo="@(body)" >
<h:form >
<p:growl id="growl" for="categoriaMsj" showDetail="true" />
<h3 style="text-align: center; background-color: #036FAB; padding: 20px; color: #FFFFFF; ">
<h:outputText value="#{demoBeanMarca.titulo}"/></h3>
<h3 style="text-align: center; padding: 10px; ">
</h3>
<p:dialog id="dialog" widgetVar="dlg" width="400" height="300" modal="true" >
<h:panelGrid id="grid" columns="3" style="width: 100%">
<h:form class="form-container" >
<h1><h:outputText value="#{demoBeanMarca.titulo}"/></h1>
<h:panelGrid id="grid" columns="3" style="width: 100%" >
<p:outputLabel value="Nombre:" for="nombre" />
<p:inputText id="nombre" value="#{demoBeanMarca.marca.nombre}" title="Nombre" required="true" requiredMessage="Falta el campo Nombre." styleClass="formulario-elemento; " />
<p:inputText id="nombre" value="#{demoBeanMarca.marca.nombre}" title="Nombre" required="true" requiredMessage="Falta el campo Nombre." styleClass="formulario-elemento" />
<p:message for="nombre"/>
<p:outputLabel style="font-weight:bolder;" value="Proveedor:" for="proveedorId" />
<p:selectOneMenu id="proveedorId" value="#{demoBeanMarca.marca.proveedorId}" converter="selectOneMenuConverter" >
<f:selectItems value="#{demoBeanProveedor.all}" var="item" itemLabel="#{item.nombre}" itemValue="#{item}" />
</p:selectOneMenu>
</h:panelGrid>
<div>
<p:commandButton style="margin-left: 10px; background-color:green; border-color:green; " icon="pi pi-check" action="#{demoBeanMarca.agregarMarca()}" update="formtabla:tabla" ajax="false" rendered="#{demoBeanMarca.nuevo}"/>
<div style="margin-top: 30px;">
<p:commandButton action="categoriaLista.xhtml" ajax="false" icon="pi pi-times" immediate="true" update="grid, formtabla:tabla, growl"
style="background-color: red; border-color:red; float: right;"/>
<p:commandButton action="marcaLista.xhtml" ajax="false" actionListener="#{demoBeanMarca.editarmarca()}" icon="pi pi-check" style="margin-left: 10px; background-color:green; border-color:green;" update="formtabla:tabla" immediate="true" rendered="#{!demoBeanMarca.nuevo}"/>
<p:commandButton action="#{demoBeanMarca.agregarMarca()}" update="grid, formtabla:tabla, growl" ajax="true"
rendered="#{demoBeanMarca.nuevo}" icon="pi pi-check"
style="margin-right: 10px; background-color:green; border-color:green; float: right; " />
<p:commandButton action="marcaLista.xhtml" ajax="false" icon="pi pi-times" immediate="true" style="background-color: red; border-color:red;"/>
<p:commandButton action="#{demoBeanMarca.editarmarca()}"
update="grid, formtabla:tabla, growl" ajax="true" rendered="#{!demoBeanMarca.nuevo}" icon="pi pi-check"
style="margin-right: 10px; background-color:green; border-color:green; float: right;" />
</div>
</h:form>
</p:dialog>
<!-- ELIMINAR -->
<p:dialog id="dialog2" widgetVar="dlg2" width="700" height="250" modal="true" >
<h3 style="text-align: center; background-color: #036FAB; padding: 20px; color: #FFFFFF; ">
<h:outputText value="E L I M I N A R"/></h3>
<h:form>
<div>
<h:panelGrid id="grid" columns="2" style="width: 100%;" cellpadding="10" >
</div>
<h:outputText value="Id:" style=" font-weight:bolder"/>
<h:outputText value="#{demoBeanMarca.marca.id}" title="Id"/>
<h:outputText value="Nombre:" style=" font-weight:bolder"/>
<h:outputText value="#{demoBeanMarca.marca.nombre}" title="Nombre"/>
<h:outputText value="Proveedor" style=" font-weight:bolder"/>
<h:outputText value="#{demoBeanMarca.marca.proveedorId.nombre}" title="Nombre"/>
</h:form>
</p:dialog>
</f:view>
</h:panelGrid>
</div>
<div style="margin-top: 5px;">
<p:commandButton action="marcaLista.xhtml" icon="pi pi-times" ajax="false" immediate="true"
style="margin-left: 10px; background-color:red; border-color:red; float: right;" />
<p:commandButton action="marcaLista.xhtml" actionListener="#{demoBeanMarca.eliminarmarca()}"
ajax="false" icon="pi pi-check"
style=" background-color:green; border-color:green; float: right;"/>
</div>
</h:form>
</p:dialog>
</ui:define >
</f:view>
</ui:define>
</ui:composition>
</body>
</html>
Loading…
Cancel
Save