Creacion de iconos al lado de los nombres para editar y borar. Otro icono para crear empresa. Creacion de formulario de crear una empresa nueva con comprobacion de que si ya existe ete empresa en la lista(basica, por nombre), con un aviso al usuario y devolucion a la lista.
parent
89b8d8d427
commit
47bfe9c8e0
@ -1,30 +1,81 @@
|
||||
package com.example.proyectofinal.controllers.modelControllers;
|
||||
|
||||
import com.example.proyectofinal.models.empresas.Contacto;
|
||||
import com.example.proyectofinal.models.empresas.Empresa;
|
||||
import com.example.proyectofinal.models.empresas.Sector;
|
||||
import com.example.proyectofinal.repositories.empresas.ContactoRepository;
|
||||
import com.example.proyectofinal.repositories.empresas.EmpressaRepository;
|
||||
import com.example.proyectofinal.servicios.EmpresaService;
|
||||
import com.example.proyectofinal.servicios.SectorService;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/empresas")
|
||||
public class EmpressaController {
|
||||
@Autowired
|
||||
private ContactoRepository contactoRepository;
|
||||
|
||||
|
||||
@Autowired
|
||||
private EmpressaRepository empressaRepository;
|
||||
EmpresaService empresaService;
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public String getEmpressaBySector(@PathVariable Long id, Model model) {
|
||||
@Autowired
|
||||
SectorService sectorService;
|
||||
|
||||
@GetMapping("/empresas/{id}")
|
||||
public String getEmpressaContacts(@PathVariable Long id, Model model) {
|
||||
Set<Contacto> contactoSet = new HashSet<>(contactoRepository.findBySector(id));
|
||||
model.addAttribute("contactos", contactoSet);
|
||||
return "contactos";
|
||||
}
|
||||
|
||||
@GetMapping("/admin/empresa/create")
|
||||
public String showCreateForm(Model model) {
|
||||
Empresa empresa = new Empresa();
|
||||
Sector sector = new Sector();
|
||||
List<Sector> sectores = sectorService.findAll();
|
||||
model.addAttribute("empresa", empresa);
|
||||
model.addAttribute("sector", sector);
|
||||
model.addAttribute("sectores", sectores);
|
||||
return "admin/empresa/create";
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/empresa/save")
|
||||
public String guardarCurso(Empresa empresa, @RequestParam("sector.id") Long sectorId, RedirectAttributes redirectAttributes){
|
||||
try{
|
||||
Sector existingSector = sectorService.findById(sectorId);
|
||||
if(existingSector != null) {
|
||||
empresa.setSector(existingSector);
|
||||
} else {
|
||||
redirectAttributes.addFlashAttribute("message", "Sector no encontrado");
|
||||
return "redirect:/admin/empresa/create";
|
||||
}
|
||||
if(empresaService.exists(empresa) != null){
|
||||
redirectAttributes.addFlashAttribute("message", "Este empresa ya existe en la base de datos");
|
||||
return "redirect:/admin/empresa/create";
|
||||
}else {
|
||||
empresaService.save(empresa);
|
||||
redirectAttributes.addFlashAttribute("message", "La empresa fue guardado con exito");
|
||||
return "redirect:/admin/empresa/create";
|
||||
}
|
||||
}catch (Exception e) {
|
||||
redirectAttributes.addFlashAttribute("message", e.getMessage());
|
||||
return "redirect:/admin/empresa/create";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
package com.example.proyectofinal.servicios;
|
||||
|
||||
import com.example.proyectofinal.models.empresas.Empresa;
|
||||
import com.example.proyectofinal.models.empresas.Sector;
|
||||
import org.springframework.data.domain.Page;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SectorService {
|
||||
List<Sector> findAll();
|
||||
|
||||
Page<Sector> finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir);
|
||||
|
||||
Sector findById(Long id);
|
||||
|
||||
Sector findByName(String name);
|
||||
|
||||
Sector save(Sector sector);
|
||||
|
||||
void deleteById(Long id);
|
||||
|
||||
List<Sector> search(String query);
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.example.proyectofinal.servicios.implemetations;
|
||||
|
||||
import com.example.proyectofinal.models.empresas.Empresa;
|
||||
import com.example.proyectofinal.models.empresas.Sector;
|
||||
import com.example.proyectofinal.repositories.empresas.SectorRepository;
|
||||
import com.example.proyectofinal.servicios.SectorService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
@Service
|
||||
public class SectorSerImp implements SectorService {
|
||||
|
||||
@Autowired
|
||||
private SectorRepository sectorRepository;
|
||||
|
||||
@Override
|
||||
public List<Sector> findAll() {
|
||||
return sectorRepository.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Sector> finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sector findById(Long id) {
|
||||
return sectorRepository.findById(id).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sector findByName(String name) {
|
||||
return sectorRepository.findByNombre(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sector save(Sector sector) {
|
||||
return sectorRepository.save(sector);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteById(Long id) {
|
||||
sectorRepository.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Sector> search(String query) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
@ -1,23 +1,34 @@
|
||||
function dynamicSearch() {
|
||||
var input, filter, table, tbody, tr, td, i, j, txtValue;
|
||||
input = document.getElementById("myInput");
|
||||
filter = input.value.toUpperCase();
|
||||
table = document.getElementById("table");
|
||||
tbody = table.getElementsByTagName("tbody")[0];
|
||||
tr = tbody.getElementsByTagName("tr");
|
||||
$(document).ready(function() {
|
||||
$("#modal-container").load("/empresas/createEmpresaModal");
|
||||
});
|
||||
|
||||
for (i = 0; i < tr.length; i++) {
|
||||
for (j = 0; j < tr[i].cells.length; j++) {
|
||||
td = tr[i].cells[j];
|
||||
if (td) {
|
||||
txtValue = td.textContent || td.innerText;
|
||||
if (txtValue.toUpperCase().indexOf(filter) > -1) {
|
||||
tr[i].style.display = "";
|
||||
break;
|
||||
} else {
|
||||
tr[i].style.display = "none";
|
||||
}
|
||||
$(document).ready(function() {
|
||||
// Load the modal HTML into #modal-container
|
||||
$("#modal-container").load("/empresas/createEmpresaModal", function() {
|
||||
// Get the modal
|
||||
var modal = document.getElementById("empresaCreateModal");
|
||||
|
||||
// Get the button that opens the modal
|
||||
var btn = document.getElementById("create-icon");
|
||||
|
||||
// Get the <span> element that closes the modal
|
||||
var span = document.getElementsByClassName("close")[0];
|
||||
|
||||
// When the user clicks the button, open the modal
|
||||
btn.onclick = function() {
|
||||
modal.style.display = "block";
|
||||
}
|
||||
|
||||
// When the user clicks on <span> (x), close the modal
|
||||
span.onclick = function() {
|
||||
modal.style.display = "none";
|
||||
}
|
||||
|
||||
// When the user clicks anywhere outside of the modal, close it
|
||||
window.onclick = function(event) {
|
||||
if (event.target == modal) {
|
||||
modal.style.display = "none";
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
@ -0,0 +1,154 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Creacion: Familia</title>
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" th:href="@{/top.css}">
|
||||
<style>
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
margin: auto;
|
||||
padding: 25px;
|
||||
margin-top: 100px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
margin-top: 25px;
|
||||
margin-right: 5px;
|
||||
width: 120px;
|
||||
height: 40px;
|
||||
font-family: Verdana;
|
||||
}
|
||||
form input[type="submit"], form input[type="button"] {
|
||||
width: 100px;
|
||||
}
|
||||
form input[type="text"]{
|
||||
width: 75%;
|
||||
}
|
||||
form label{
|
||||
font-size: 20px;
|
||||
margin-bottom: 10px;
|
||||
font-family: Verdana, Geneva, Tahoma, sans-serif;
|
||||
}
|
||||
|
||||
body, h1 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Añadir Empresa<a href="/logout" class="logout-button"><i class="fas fa-door-open"></i></a></h1>
|
||||
|
||||
<form th:action="@{/empresa/save}" method="post" enctype="multipart/form-data" th:object="${empresa}">
|
||||
<input type="hidden" th:field="*{id}"/>
|
||||
<div class="p-3">
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="nombre">Nombre</label>
|
||||
<div class = "col-sm-9">
|
||||
<input type="text" th:field="*{nombre}" required minlength="2" maxlength="128" class="form-control" id="nombre">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="cif">Cif</label>
|
||||
<div class = "col-sm-9">
|
||||
<input type="text" th:field="*{cif}" required minlength="2" maxlength="128" class="form-control" id="cif">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="correo">Correo</label>
|
||||
<div class = "col-sm-9">
|
||||
<input type="text" th:field="*{correo}" required min="2" class="form-control" id="correo">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="telefono">Telefono</label>
|
||||
<div class = "col-sm-9">
|
||||
<input type="text" th:field="*{telefono}" required min="2" class="form-control" id="telefono">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="keywords">Keywords</label>
|
||||
<div class = "col-sm-9">
|
||||
<input type="text" th:field="*{keywords}" required min="2" class="form-control" id="keywords">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="form-group row">
|
||||
<label class="col-sm-3 col-form-label" for="sector">Sector</label>
|
||||
<div class = "col-sm-9">
|
||||
<select th:field="*{sector.id}" class="form-control" id="sector">
|
||||
<option th:each="sector : ${sectores}" th:value="${sector.id}" th:text="${sector.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<input type="submit" value="Guardar" class="btn"/>
|
||||
<input type="button" value="Cancelar" id="btnCancelar" class="btn" onclick="goBack()"/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function goBack() {
|
||||
console.log("goBack function called");
|
||||
window.history.back();
|
||||
}
|
||||
$(document).ready(function () {
|
||||
$("form").on("submit", function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
var formData = $(this).serialize();
|
||||
var sectorId = $('#sector').val();
|
||||
formData += '§or=' + encodeURIComponent(sectorId);
|
||||
|
||||
$(document).ready(function () {
|
||||
$("form").on("submit", function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
var formData = $(this).serialize();
|
||||
var sectorId = $('#sector').val();
|
||||
formData += '§or=' + encodeURIComponent(sectorId);
|
||||
|
||||
$.ajax({
|
||||
url: '/empresa/save',
|
||||
type: 'post',
|
||||
data: formData,
|
||||
success: function (response) {
|
||||
if(response === "La empresa fue guardado con exito") {
|
||||
window.history.go(-2); // Go back two pages
|
||||
} else {
|
||||
alert("Hubo un error al guardar la empresa");
|
||||
window.history.go(-2);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
alert("Hubo un error al guardar la empresa");
|
||||
window.history.back();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in new issue