en el test está la funcion para el servicio

This commit is contained in:
Jaime Jiménez
2025-09-12 14:06:49 +02:00
parent bb6baf96ce
commit cc8b30add6
6 changed files with 389 additions and 0 deletions

View File

@ -0,0 +1,57 @@
package com.imprimelibros.erp.presupuesto.classes;
import static com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas.Papeles;
import static com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas.Acabado;
import static com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas.Tamanios;
import static com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas.Caras_Impresion;
import jakarta.validation.constraints.Min;
public class PresupuestoMarcapaginas {
@Min(value = 100, message = "{validation.min}")
private Integer unidades = 100;
private Tamanios tamanio = Tamanios._50x140_;
private Caras_Impresion carasImpresion = Caras_Impresion.una_cara;
private Papeles papel = Papeles.cartulina_grafica;
private Integer gramaje = 300;
private Acabado acabado = Acabado.ninguno;
public Integer getUnidades() {
return unidades;
}
public void setUnidades(Integer unidades) {
this.unidades = unidades;
}
public Tamanios getTamanio() {
return tamanio;
}
public void setTamanio(Tamanios tamanio) {
this.tamanio = tamanio;
}
public Caras_Impresion getCarasImpresion() {
return carasImpresion;
}
public void setCarasImpresion(Caras_Impresion carasImpresion) {
this.carasImpresion = carasImpresion;
}
public Papeles getPapel() {
return papel;
}
public void setPapel(Papeles papel) {
this.papel = papel;
}
public Integer getGramaje() {
return gramaje;
}
public void setGramaje(Integer gramaje) {
this.gramaje = gramaje;
}
public Acabado getAcabado() {
return acabado;
}
public void setAcabado(Acabado acabado) {
this.acabado = acabado;
}
}

View File

@ -0,0 +1,154 @@
package com.imprimelibros.erp.presupuesto.marcapaginas;
import jakarta.validation.constraints.NotNull;
import jakarta.persistence.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
@Entity
@Table(name = "marcapaginas")
public class Marcapaginas {
public enum Acabado{
ninguno,
plastificado_brillo_1c,
plastificado_brillo_2c,
plastificado_mate_1c,
plastificado_mate_2c
};
public enum Tamanios{
_50x140_, _50x170_, _50x210_
};
public enum Papeles{
cartulina_grafica, estucado_mate
};
public enum Caras_Impresion{
una_cara, dos_caras
};
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull(message = "{validation.required}")
@Enumerated(EnumType.STRING)
private Caras_Impresion carasImpresion = Caras_Impresion.una_cara;
@NotNull(message = "{validation.required}")
@Enumerated(EnumType.STRING)
private Tamanios tamanio = Tamanios._50x140_;
@NotNull(message = "{validation.required}")
@Enumerated(EnumType.STRING)
private Papeles papel = Papeles.cartulina_grafica;
@NotNull(message = "{validation.required}")
private Integer gramaje = 300;
@NotNull(message = "{validation.required}")
@Enumerated(EnumType.STRING)
private Acabado acabado = Acabado.ninguno;
@Min(value = 100, message = "{validation.min}")
@NotNull(message = "{validation.required}")
private Integer unidades_min = 100;
@Min(value = 101, message = "{validation.min}")
@NotNull(message = "{validation.required}")
private Integer unidades_max = 5000;
@NotNull(message = "{validation.required}")
private Double precio_unidades_min;
@NotNull(message = "{validation.required}")
private Double precio_unidades_max;
@NotNull(message = "{validation.required}")
@Min(value = 0, message = "{validation.min}")
@Max(value = 300, message = "{validation.max}")
private Integer margen_unidades_min = 0;
@NotNull(message = "{validation.required}")
@Min(value = 0, message = "{validation.min}")
@Max(value = 300, message = "{validation.max}")
private Integer margen_unidades_max = 0;
/* Getters and Setters */
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Caras_Impresion getCarasImpresion() {
return carasImpresion;
}
public void setCarasImpresion(Caras_Impresion carasImpresion) {
this.carasImpresion = carasImpresion;
}
public Tamanios getTamanio() {
return tamanio;
}
public void setTamanio(Tamanios tamanio) {
this.tamanio = tamanio;
}
public Papeles getPapel() {
return papel;
}
public void setPapel(Papeles papel) {
this.papel = papel;
}
public Integer getGramaje() {
return gramaje;
}
public void setGramaje(Integer gramaje) {
this.gramaje = gramaje;
}
public Acabado getAcabado() {
return acabado;
}
public void setAcabado(Acabado acabado) {
this.acabado = acabado;
}
public Integer getUnidades_min() {
return unidades_min;
}
public void setUnidades_min(Integer unidades_min) {
this.unidades_min = unidades_min;
}
public Integer getUnidades_max() {
return unidades_max;
}
public void setUnidades_max(Integer unidades_max) {
this.unidades_max = unidades_max;
}
public Double getPrecio_unidades_min() {
return precio_unidades_min;
}
public void setPrecio_unidades_min(Double precio_unidades_min) {
this.precio_unidades_min = precio_unidades_min;
}
public Double getPrecio_unidades_max() {
return precio_unidades_max;
}
public void setPrecio_unidades_max(Double precio_unidades_max) {
this.precio_unidades_max = precio_unidades_max;
}
public Integer getMargen_unidades_min() {
return margen_unidades_min;
}
public void setMargen_unidades_min(Integer margen_unidades_min) {
this.margen_unidades_min = margen_unidades_min;
}
public Integer getMargen_unidades_max() {
return margen_unidades_max;
}
public void setMargen_unidades_max(Integer margen_unidades_max) {
this.margen_unidades_max = margen_unidades_max;
}
}

View File

@ -0,0 +1,32 @@
package com.imprimelibros.erp.presupuesto.marcapaginas;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMarcapaginas;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
@Repository
public interface MarcapaginasRepository extends JpaRepository<Marcapaginas, Long> {
@Query("""
SELECT m
FROM Marcapaginas m
WHERE m.tamanio = :#{#p.tamanio}
AND m.carasImpresion = :#{#p.carasImpresion}
AND m.papel = :#{#p.papel}
AND m.gramaje = :#{#p.gramaje}
AND m.acabado = :#{#p.acabado}
AND m.unidades_min <= :#{#p.unidades}
ORDER BY
CASE
WHEN :#{#p.unidades} BETWEEN m.unidades_min AND m.unidades_max THEN 0
ELSE 1
END,
m.unidades_max DESC
""")
List<Marcapaginas> findPrecios(@Param("p") PresupuestoMarcapaginas p);
}