0
I am developed an application that aims to register a supplier, in which this supplier is Generico (can be a cafeteria, store building material, a pharmacy... etc) in which he will provide products on the web platform. However, for the end customer to have ease in the search for the product you want, I assign category to the supplier, to specify what type of category the supplier fits, hence my doubt is: how do I link subcategories according to the type of supplier. Ex: If the admin registered the pharmacy supplier, the user responsible for the pharmacy when registering its products on the platform will have to choose only the subcategories linked to pharmacy (hygiene/supplements/other...etc).
Registration screen of the products of each supplier.
In short, if a pharmacy supplier is logged in, the registration of products, in subcategories is to show the sub correpondente the pharmacy, if it is a restaurant logged in, the sub-displayed will correspond to restaurants.
Model Usuario:
package com.bigboss.comprafacil.models;
@Entity
public class Usuario implements UserDetails, Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@NotBlank(message = "Nome é uma informação obrigatória.")
@Size(min = 2, max = 30)
private String nome;
private String nomeFantasia;
@NotBlank(message = "Rua é uma informação obrigatória.")
private String rua;
@NotBlank(message = "Bairro é uma informação obrigatória.")
private String bairro;
private String complemento;
@NotBlank(message = "Estado é uma informação obrigatória.")
private String estado;
@NotBlank(message = "Cidade é uma informação obrigatória.")
private String cidade;
@NotBlank(message = "É uma informação obrigatória.")
private String cnpjCpf;
@NotBlank(message = "Telefone é uma informação obrigatória.")
private String telefone;
public String categoria;
@NotBlank(message = "E-mail é uma informação obrigatória.")
@Email(message = "Não é um e-mail válido")
private String email;
@NotBlank(message = "Senha é uma informação obrigatória.")
private String senha;
@ManyToMany
@JoinTable(
name = "usuarios_roles",
joinColumns = @JoinColumn(
name = "usuario_id", referencedColumnName = "email"),
inverseJoinColumns = @JoinColumn(
name = "role_id", referencedColumnName = "nomeRole"))
private List<Role> roles;
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public String getCategoria() {
return categoria;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public List<Produto> getProdutos() {
return produtos;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
@Enumerated(EnumType.STRING)
public Status status;
public Usuario() {
status = Status.ATIVO;
}
@ManyToMany
@JoinTable(name = "usuarios_produtos", joinColumns = @JoinColumn(name = "usuario_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "produto_id", referencedColumnName = "id"))
private List<Produto> produtos;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNomeFantasia() {
return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getCnpjCpf() {
return cnpjCpf;
}
public void setCnpjCpf(String cnpjCpf) {
this.cnpjCpf = cnpjCpf;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
return (Collection<? extends GrantedAuthority>) this.roles;
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return this.senha;
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return this.email;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
}
Model products:
package com.bigboss.comprafacil.models;
@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, length = 100)
@NotBlank(message = "Nome é uma informação obrigatória.")
public String nome;
@Column(nullable = false, length = 100)
@NotBlank(message = "Descrição é uma informação obrigatória.")
public String descricao;
@Column(nullable = false, length = 100)
@NotBlank(message = "Codigo do produto é uma informação obrigatória.")
public int codigoProduto;
@Column(nullable = false, length = 100)
@NotBlank(message = "Categoria é uma informação obrigatória.")
public String categoria;
@Column(nullable = false, length = 100)
@NotBlank(message = "Unidade de medida é uma informação obrigatória.")
public String unidadeMed;
@Column(nullable = false, length = 100)
@Enumerated(EnumType.STRING)
public Status status;
@NotBlank(message = "Preço é uma informação obrigatória.")
public String preco;
public String getPreco() {
return preco;
}
public void setPreco(String preco) {
this.preco = preco;
}
@ManyToMany(mappedBy = "produtos", cascade = CascadeType.ALL)
private List<Usuario> usuarios;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<Usuario> getUsuarios() {
return usuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
public Produto() {
status = Status.ATIVO;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getCodigoProduto() {
return codigoProduto;
}
public void setCodigoProduto(int codigoProduto) {
this.codigoProduto = codigoProduto;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getUnidadeMed() {
return unidadeMed;
}
public void setUnidadeMed(String unidadeMed) {
this.unidadeMed = unidadeMed;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
Form supplier:
Suppliers Register of suppliers
<section class="forms">
<form th:object="${usuario}" th:action="@{/fornecedor/save}"
method="POST" enctype="multipart/form-data">
<!--Input responsável em guardar o id-->
<div class="container-fluid">
<th:block th:include="/mensagemValidacao :: mensagem"></th:block>
<div class="row">
<input id="id" name="id" type="hidden" th:field="*{id}"
th:value="*{id}">
<div class="col-lg-6">
<div class="form-group">
<label>Nome do empreendimento:</label> <input type="text"
name="nome" th:field="*{nome}" id="inputNome"
class="form-control">
</div>
<div class="form-group">
<label>Nome fantasia:</label> <input type="text"
name="nomeFantasia" th:field="*{nomeFantasia}"
class="form-control" id="inputNomeFantasia">
</div>
<div class="form-group">
<label>Rua:</label> <input type="text" name="rua"
th:field="*{rua}" id="inputRua" class="form-control">
</div>
<div class="form-group">
<label>Bairro:</label> <input type="text" name="bairro"
th:field="*{bairro}" id="inputBairro" class="form-control">
</div>
<div class="form-group">
<label>Complemento:</label> <input type="text" name="complemento"
th:field="*{complemento}" id="inputComplemento"
class="form-control">
</div>
<div class="form-group">
<label>Cidade:</label> <input type="text" name="cidade"
th:field="*{cidade}" id="inputCidade" class="form-control">
</div>
<div class="form-group">
<label>Estado:</label> <select name="estado" class="form-control"
th:field="*{estado}" id="inputEstado">
<option th:value="AC">Acre</option>
<option value="AL">Alagoas</option>
<option value="AP">Amapá</option>
<option value="AM">Amazonas</option>
<option value="BA">Bahia</option>
<option value="CE">Ceará</option>
<option value="DF">Distrito Federal</option>
<option value="ES">Espírito Santo</option>
<option value="GO">Goiás</option>
<option value="MA">Maranhão</option>
<option value="MT">Mato Grosso</option>
<option value="MS">Mato Grosso do Sul</option>
<option value="MG">Minas Gerais</option>
<option value="PA">Pará</option>
<option value="PB">Paraíba</option>
<option value="PR">Paraná</option>
<option value="PE">Pernambuco</option>
<option value="PI">Piauí</option>
<option value="RJ">Rio de Janeiro</option>
<option value="RN">Rio Grande do Norte</option>
<option value="RS">Rio Grande do Sul</option>
<option value="RO">Rondônia</option>
<option value="RR">Roraima</option>
<option value="SC">Santa Catarina</option>
<option value="SP">São Paulo</option>
<option value="SE">Sergipe</option>
<option value="TO">Tocantins</option>
</select>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label>CPF/CNPJ:</label> <input type="text" placeholder=""
th:field="*{cnpjCpf}" id="inputcnpjCpf" name="cnpjCpf"
class="form-control">
</div>
<div class="form-group">
<label>Telefone:</label> <input type="text" placeholder=""
th:field="*{telefone}" id="inputTelefone" name="telefone"
class="form-control">
</div>
<div class="form-group">
<label>Categoria:</label> <select name="categoria"
class="form-control" th:field="*{categoria}" id="inputCategoria">
<option value="Farmarcias">Farmacias</option>
<option value="Lanchonetes">Lanchonetes</option>
<option value="Material de construçao">Material de
Construçao</option>
<option value="Restaurantes">Restaurantes</option>
<option value="Pizzarias">Pizzarias</option>
</select>
</div>
<div class="form-group">
<label>Adicionar foto do perfil:</label> <input type="file"
name="" class="form-control">
</div>
<div class="form-group">
<label>Email:</label> <input type="email" name="email"
th:field="*{email}" id="inputEmail" class="form-control"
placeholder="[email protected]">
</div>
<div class="form-group">
<label>Senha:</label> <input type="password" name="senha"
th:field="*{senha}" id="inputSenha" class="form-control"
placeholder="Mínimo 6 caracteres">
</div>
<div class="form-group">
<label>Confirmar senha:</label> <input type="password"
placeholder="Mínimo 6 caracteres" name="senha"
class="form-control">
</div>
</div>
<div class="col-lg-12">
<button type="submit" class="btn btn-primary">Salvar</button>
<button type="reset" class="btn btn-danger"
onclick="window.location.href='/funcionarios/listar';">
Cancelar</button>
</div>
</div>
</div>
</form>
</section>
<script type="text/javascript">
$(document).ready(function() {
$(".dropdown-toggle").dropdown();
});
</script>
Form products:
Products Product register
<div class="container-fluid">
<th:block th:include="/mensagemValidacao :: mensagem"></th:block>
<div class="row">
<input id="id" name="id" type="hidden" th:field="*{id}"
th:value="*{id}">
<div class="col-lg-6">
<div class="form-group">
<label>Código do produto:</label> <input type="text"
name="codigoProduto" th:field="*{codigoProduto}" id="inputcodigoProduto"
class="form-control">
</div>
<div class="form-group">
<label>Valor:</label> <input type="text"
name="preco" th:field="*{preco}"
class="form-control" id="inputPreco">
</div>
<div class="form-group">
<label>Nome:</label> <input type="text"
name="nome" th:field="*{nome}" id="inputNome"
class="form-control">
</div>
<div class="form-group">
<label>Descrição:</label> <textarea type="text" cols="40" rows="5" name="descricao"
th:field="*{descricao}" id="inputdescricao" class="form-control"></textarea>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label>Unidade de medida:</label> <select name="unidadeMed" class="form-control"
th:field="*{unidadeMed}" id="inputunidadeMed">
<option th:value="UND">UND</option>
<option value="CM">CM</option>
<option value="METRO">METRO</option>
<option value="PCT">PCT</option>
<option value="KG">KG</option>
<option value="LITRO">LITRO</option>
<option value="M²">M²</option>
<option value="M³">M³</option>
<option value="GRAMA">GRAMA</option>
<option value="MILIGRAMA">MILIGRAMA</option>
<option value="CAIXA">CAIXA</option>
<option value="OUTRO">OUTRO</option>
</select>
</div>
<div class="form-group">
<label>Sub-categorias:</label> <select name="categoria"
class="form-control" th:field="*{categoria}" id="inputCategoria">
<option value="Farmarcias">Higiene</option>
<option value="Lanchonetes">Suplementos</option>
<option value="Material de construçao">Remedios</option>
<option value="Restaurantes">Outros</option>
</select>
</div>
<div class="form-group">
<label>Adicionar foto do produto:</label> <input type="file"
name="" class="form-control">
</div>
</div>
<div class="col-lg-12">
<button type="submit" class="btn btn-primary">Salvar</button>
<button type="reset" class="btn btn-danger"
onclick="window.location.href='/funcionarios/listar';">
Cancelar</button>
</div>
</div>
</div>
</form>
</section>
<script type="text/javascript">
$(document).ready(function() {
$(".dropdown-toggle").dropdown();
});
</script>
How to model the bank according to my need?
and how would the relationship subtagoria products or supplier products?
– Carlos Diego
PRODUCT idProduct(PK) idSubcategory(FK) ... This taking into account that the product would relate to a subcategory and not to the vendor, e.g., soap would be linked to subcategory Hygiene and subcategory Hygiene would be linked to category Pharmacy that would have the supplier X.
– Higor Senna
Ah understood, I will try to implement. obgdo
– Carlos Diego
Sena can help me to continue this question here, https://answall.com/questions/306570/invalid-property-categoria-subcategoria-of-bean-class-erro-ao-salvar-usuario-n
– Carlos Diego