falta precio completo del item del carrito y devolver que ya existe el presupuesto en el carro

This commit is contained in:
2025-10-15 20:05:56 +02:00
parent f20dd9068a
commit f26f96a490
4 changed files with 28 additions and 10 deletions

View File

@ -5,13 +5,20 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.imprimelibros.erp.users.UserDetailsImpl; import com.imprimelibros.erp.users.UserDetailsImpl;
import jakarta.servlet.http.HttpServletRequest;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.imprimelibros.erp.users.User; import com.imprimelibros.erp.users.User;
import org.springframework.boot.autoconfigure.graphql.GraphQlProperties.Http;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import java.security.Principal; import java.security.Principal;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
@Controller @Controller
@RequestMapping("/cart") @RequestMapping("/cart")
@ -62,8 +69,15 @@ public class CartController {
/** Añadir presupuesto con ruta REST (opcional) */ /** Añadir presupuesto con ruta REST (opcional) */
@PostMapping("/add/{presupuestoId}") @PostMapping("/add/{presupuestoId}")
public String addPath(@PathVariable Long presupuestoId, Principal principal) { public Object addPath(@PathVariable Long presupuestoId, Principal principal, HttpServletRequest request) {
service.addPresupuesto(currentUserId(principal), presupuestoId); service.addPresupuesto(currentUserId(principal), presupuestoId);
boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
if (isAjax) {
// Responder 200 con la URL a la que quieres ir
return ResponseEntity.ok(
Map.of("redirect", "/cart"));
}
// Navegación normal: redirección server-side
return "redirect:/cart"; return "redirect:/cart";
} }

View File

@ -70,7 +70,7 @@ public class CartService {
elemento.put("cartItemId", item.getId()); elemento.put("cartItemId", item.getId());
resultados.add(elemento); resultados.add(elemento);
} }
System.out.println("Cart items: " + resultados); //System.out.println("Cart items: " + resultados);
return resultados; return resultados;
} }

View File

@ -274,13 +274,16 @@ export default class PresupuestoWizard {
$('.add-cart-btn').on('click', async () => { $('.add-cart-btn').on('click', async () => {
const success = await this.#guardarPresupuesto(); const success = await this.#guardarPresupuesto();
if (success) { if (success) {
await $.ajax({ const res = await $.ajax({
url: `/cart/add/${this.opts.presupuestoId}`, url: `/cart/add/${this.opts.presupuestoId}`,
method: 'POST', method: 'POST',
headers: { headers: { 'Content-Type': 'application/json' }
'Content-Type': 'application/json'
},
}); });
// Si el backend devuelve { redirect: "/cart" }
if (res?.redirect) {
window.location.assign(res.redirect); // o replace()
}
} }
}); });
} }

View File

@ -53,9 +53,10 @@
<form th:action="@{|/cart/${item.cartItemId}/remove|}" method="post" class="d-inline"> <form th:action="@{|/cart/${item.cartItemId}/remove|}" method="post" class="d-inline">
<input type="hidden" name="_method" value="delete" /> <input type="hidden" name="_method" value="delete" />
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" /> <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<button type="submit" class="btn btn-sm btn-link text-body p-1 px-2"> <a href="#" class="d-block text-body p-1 px-2"
onclick="this.closest('form').submit(); return false;">
<i class="ri-delete-bin-fill text-muted align-bottom me-1"></i> Eliminar <i class="ri-delete-bin-fill text-muted align-bottom me-1"></i> Eliminar
</button> </a>
</form> </form>
</div> </div>
</div> </div>