PlanOperativoAnualInstitucionalService.java
- Se crean las definiciones de las funciones que obtienen los programas presupuestarios
/**
* Retorna el Programa Presupuestario Academico
*
* @author Gustavo Matamoros González
* @issue BTPPI-276 11/09/2023
* @return {@link ProgramaPresupuestario}
*/
public ProgramaPresupuestario findProgramaPresupuestarioAcademico();
/**
* Retorna el Programa Presupuestario Vida Estudiantil
*
* @author Gustavo Matamoros González
* @issue BTPPI-276 11/09/2023
* @return {@link ProgramaPresupuestario}
*/
public ProgramaPresupuestario findProgramaPresupuestarioVidaUniversitaria();
/**
* Retorna el Programa Presupuestario Administrativo
*
* @author Gustavo Matamoros González
* @issue BTPPI-276 11/09/2023
* @return {@link ProgramaPresupuestario}
*/
public ProgramaPresupuestario findProgramaPresupuestarioAdministrativo();
PlanOperativoAnualInstitucionalServiceImpl.java
- Se crean los servicios necesarios
/**
* Ver {@link PlanOperativoAnualInstitucionalService#findProgramaPresupuestarioAcademico()}
*/
@Override
public ProgramaPresupuestario findProgramaPresupuestarioAcademico() {
return programaPresupuestarioService.getProgramaPresupuestarioAcademico();
}
/**
* Ver {@link PlanOperativoAnualInstitucionalService#findProgramaPresupuestarioVidaUniversitaria()}
*/
@Override
public ProgramaPresupuestario findProgramaPresupuestarioVidaUniversitaria() {
return programaPresupuestarioService.getProgramaPresupuestarioVidaEstudiantil();
}
/**
* Ver {@link PlanOperativoAnualInstitucionalService#findProgramaPresupuestarioAdministrativo()}
*/
@Override
public ProgramaPresupuestario findProgramaPresupuestarioAdministrativo() {
return programaPresupuestarioService.getProgramaPresupuestarioAdministrativo();
}
PlanOperativoAnualInstitucionalBean.java
- Primero al final de documento creamos un objeto especial para que sea mostrado en el datatable
/**
* Objeto para almacenar los Totales de los Presupuestos Formulados
*
* @author Gustavo Matamoros González
* @issue BTPPI-276 13/09/2023
* @return {@link ProgramaPresupuestario}
*/
static public class TotalPresupuestoFormuladoModel implements Serializable {
private String titulo;
private BigDecimal colones;
private BigDecimal millones;
private BigDecimal redondeo;
public TotalPresupuestoFormuladoModel() {
}
public TotalPresupuestoFormuladoModel(String titulo, BigDecimal colones) {
this.titulo = titulo;
this.colones = colones;
this.millones = colones.divide(new BigDecimal("1000000"));
this.redondeo = colones.setScale(0, RoundingMode.HALF_UP);
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getTitulo() {
return titulo;
}
public BigDecimal getColones() {
return colones;
}
public void setColones(BigDecimal colones) {
this.colones = colones;
}
public BigDecimal getMillones() {
return millones;
}
public void setMillones(BigDecimal millones) {
this.millones = millones;
}
public BigDecimal getRedondeo() {
return redondeo;
}
public void setRedondeo(BigDecimal redondeo) {
this.redondeo = redondeo;
}
}
- Agregamos los imports necesarios
import java.math.RoundingMode;
- Creamos las variables necesarias
// Programas Presupuestarios
private ProgramaPresupuestario programaPresupuestarioAcademico;
private ProgramaPresupuestario programaPresupuestarioVidaUniversitaria;
private ProgramaPresupuestario programaPresupuestarioAdministrativo;
// Totales de Presupuestos Formulados
private BigDecimal totalPresupuestoFormulado;
private BigDecimal totalPresupuestoFormuladoAcademico;
private BigDecimal totalPresupuestoFormuladoVidaUniversitaria;
private BigDecimal totalPresupuestoFormuladoAdministrativo;
// Lista para desplegar en el data table de presupuestos formulados
private List<TotalPresupuestoFormuladoModel> listaDeTotalesPresupuestosFormulados;
- Y los set y gets necesarios
public List<TotalPresupuestoFormuladoModel> getListaDeTotalesPresupuestosFormulados() {
return listaDeTotalesPresupuestosFormulados;
}
public void setListaDeTotalesPresupuestosFormulados(List<TotalPresupuestoFormuladoModel>listaDeTotalesPresupuestosFormulados) {
this.listaDeTotalesPresupuestosFormulados = listaDeTotalesPresupuestosFormulados;
}
- Ahora en el initDetails en la sección después de isPostBack para que se repita siempre agregamos
/*****************************************************************************/
// Calculo de totales de Presupuestos Formulados
/*****************************************************************************/
// Inicialiar variables
this.programaPresupuestarioAcademico = service.findProgramaPresupuestarioAcademico();
this.programaPresupuestarioVidaUniversitaria = service.findProgramaPresupuestarioVidaUniversitaria();
this.programaPresupuestarioAdministrativo = service.findProgramaPresupuestarioAdministrativo();
this.totalPresupuestoFormuladoAcademico = new BigDecimal(0);
this.totalPresupuestoFormuladoVidaUniversitaria = new BigDecimal(0);
this.totalPresupuestoFormuladoAdministrativo = new BigDecimal(0);
this.totalPresupuestoFormulado = new BigDecimal(0);
// Recorrer las metas para sumar los presupuestos dependiendo del programa presupuestario
for (ObjetivoPoai objetivo : this.getEntity().getListaObjetivosPoai()) {
if (this.getProgramaPresupuestario().getId() != null) {
for (MetaPOAI meta : objetivo.getListaMetasPoai()) {
if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioAcademico) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoAcademico = this.totalPresupuestoFormuladoAcademico.add(meta.getPresupuestoFormulado());
}else if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioVidaUniversitaria) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoVidaUniversitaria = this.totalPresupuestoFormuladoVidaUniversitaria.add(meta.getPresupuestoFormulado());
}else if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioAdministrativo) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoAdministrativo = this.totalPresupuestoFormuladoAdministrativo.add(meta.getPresupuestoFormulado());
}
// Total
if(meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormulado = this.totalPresupuestoFormulado.add(meta.getPresupuestoFormulado());
}
}
}
}
// agregar lso totales a la lista de ListaDeTotalesPresupuestosFormulados
this.setListaDeTotalesPresupuestosFormulados(new ArrayList());
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(this.getI18n("planOperativoAnualInstitucional_presupuestoFormuladoTabla_Total"),this.totalPresupuestoFormulado));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioAcademico.getNombre(),this.totalPresupuestoFormuladoAcademico));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioVidaUniversitaria.getNombre(),this.totalPresupuestoFormuladoVidaUniversitaria));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioAdministrativo.getNombre(),this.totalPresupuestoFormuladoAdministrativo));
public void initDetails() {
if (!isPostBack()) {
this.setListaEscenarioPresupuestarioSeleccionados(new ArrayList());
this.setListaAllEscenarioPresupuestarios(this.obtieneAllEscenarioPresupuestariosByPeriodoAnual());
//QUITAR ESTE SET DE ESTADO CUANDO EXISTA UN FLUJO
EstadoFormulacionPOAI estadoBorrador = service.obtenerEstadoFormulacionPOAIBorrador();
this.getEntity().setEstadoFormulacionPOAI(estadoBorrador);
this.getEntity().setListaPOAIEscenarios(pOAIEscenarioBean.setDetails(this.getEntity().getListaPOAIEscenarios()));
for (POAIEscenario poaiEscenario : this.getEntity().getListaPOAIEscenarios()) {
this.listaEscenarioPresupuestarioSeleccionados.add(poaiEscenario.getEscenarioPresupuestario());
}
pOAIEscenarioBean.init();
}
/*****************************************************************************/
// Calculo de totales de Presupuestos Formulados
/*****************************************************************************/
// Inicialiar variables
this.programaPresupuestarioAcademico = service.findProgramaPresupuestarioAcademico();
this.programaPresupuestarioVidaUniversitaria = service.findProgramaPresupuestarioVidaUniversitaria();
this.programaPresupuestarioAdministrativo = service.findProgramaPresupuestarioAdministrativo();
this.totalPresupuestoFormuladoAcademico = new BigDecimal(0);
this.totalPresupuestoFormuladoVidaUniversitaria = new BigDecimal(0);
this.totalPresupuestoFormuladoAdministrativo = new BigDecimal(0);
this.totalPresupuestoFormulado = new BigDecimal(0);
// Recorrer las metas para sumar los presupuestos dependiendo del programa presupuestario
for (ObjetivoPoai objetivo : this.getEntity().getListaObjetivosPoai()) {
if (this.getProgramaPresupuestario().getId() != null) {
for (MetaPOAI meta : objetivo.getListaMetasPoai()) {
if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioAcademico) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoAcademico = this.totalPresupuestoFormuladoAcademico.add(meta.getPresupuestoFormulado());
}else if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioVidaUniversitaria) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoVidaUniversitaria = this.totalPresupuestoFormuladoVidaUniversitaria.add(meta.getPresupuestoFormulado());
}else if(objetivo.getProgramaPresupuestario().equals(this.programaPresupuestarioAdministrativo) && meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormuladoAdministrativo = this.totalPresupuestoFormuladoAdministrativo.add(meta.getPresupuestoFormulado());
}
// Total
if(meta.getPresupuestoFormulado() != null){
this.totalPresupuestoFormulado = this.totalPresupuestoFormulado.add(meta.getPresupuestoFormulado());
}
}
}
}
// agregar lso totales a la lista de ListaDeTotalesPresupuestosFormulados
this.setListaDeTotalesPresupuestosFormulados(new ArrayList());
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(this.getI18n("planOperativoAnualInstitucional_presupuestoFormuladoTabla_Total"),this.totalPresupuestoFormulado));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioAcademico.getNombre(),this.totalPresupuestoFormuladoAcademico));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioVidaUniversitaria.getNombre(),this.totalPresupuestoFormuladoVidaUniversitaria));
this.getListaDeTotalesPresupuestosFormulados().add(new TotalPresupuestoFormuladoModel(programaPresupuestarioAdministrativo.getNombre(),this.totalPresupuestoFormuladoAdministrativo));
}
planOperativoAnualInstitucionalEditForm.xhtml
- Eliminamos el código anterior de presupuestos
<!-- Presupuesto Formulado-->
<p:outputLabel id="presupuestoFormuladoOutputLabel" for="presupuestoFormuladoInputNumber"
value="#{i18n.planOperativoAnualInstitucional_presupuestoFormulado_label}" />
<p:outputPanel id="presupuestoFormuladoOutputPanel">
<una:inputNumber id="presupuestoFormuladoInputNumber"
value="#{planOperativoAnualInstitucionalBean.entity.presupuestoFormulado}"
maxValue="9223372036854775807" minValue="-9223372036854775807" dir="RTL" maxlength="50"
decimalPlaces="2" overrideProperties="true">
</una:inputNumber>
<p:message id="presupuestoFormuladoMessage" for="presupuestoFormuladoInputNumber" />
</p:outputPanel>
- Y agregamos el nuevo código
!-- Presupuesto Formulado-->
<p:outputPanel id="presupuestoFormulado2OutputPanel" >
<p:fieldset legend="Presupuesto Formulado" toggleable="false" toggleSpeed="500">
<p:ajax event="toggle" />
<p:dataTable var="total" id="presupuestoFormuladoDataTable" value="#{planOperativoAnualInstitucionalBean.listaDeTotalesPresupuestosFormulados}" styleClass="una-dataTablePresupuesto">
<p:column headerText="#{i18n.planOperativoAnualInstitucional_presupuestoFormuladoTabla_descripcion}" >
<h:outputText value="#{total.titulo}"/>
</p:column>
<p:column headerText="#{i18n.planOperativoAnualInstitucional_presupuestoFormuladoTabla_colones}">
<h:outputText value="#{total.colones}">
<f:convertNumber pattern="₡###,###.###"/>
</h:outputText>
</p:column>
<p:column headerText="#{i18n.planOperativoAnualInstitucional_presupuestoFormuladoTabla_millonesColones}">
<h:outputText value="#{total.millones}">
<f:convertNumber pattern="₡###,###.###"/>
</h:outputText>
</p:column>
<p:column headerText="#{i18n.planOperativoAnualInstitucional_presupuestoFormuladoTabla_redondeo}">
<h:outputText value="#{total.redondeo}">
<f:convertNumber pattern="₡#,##0"/>
</h:outputText>
</p:column>
</p:dataTable>
</p:fieldset>
<p:message id="presupuestoFormulado2Message" for="presupuestoFormuladoDataTable" />
</p:outputPanel>
- Finalmente agregamos las siguientes clases para darle el estilo necesario
<style>
.una-selectManyMenu{
width: 600px;
}
.una-dataTablePresupuesto table tr th {
background-color: #cdcdce;
font-weight: 600;
text-align: right;
}
.una-dataTablePresupuesto table tr th:first-child {
text-align: left;
}
.una-dataTablePresupuesto table tr td:first-child {
text-align: left;
}
.una-dataTablePresupuesto table tr td {
text-align: right;
}
</style>