Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
th-app-java
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Oscar Enrique Gonzalez Escurra
th-app-java
Commits
532441cf
Commit
532441cf
authored
Nov 23, 2021
by
Cesar Giulano Gonzalez Maqueda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Generacion de excel con lista de postulantes
parent
909d4b96
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
228 additions
and
2 deletions
+228
-2
curriculumsearch/pom.xml
+6
-0
curriculumsearch/src/main/java/com/roshka/controller/PostulanteRRHHController.java
+69
-2
curriculumsearch/src/main/java/com/roshka/utils/PostulantesExcelExporter.java
+143
-0
curriculumsearch/src/main/webapp/jsp/postulantes.jsp
+10
-0
No files found.
curriculumsearch/pom.xml
View file @
532441cf
...
@@ -111,6 +111,12 @@
...
@@ -111,6 +111,12 @@
<!-- <version>2.6.0</version>-->
<!-- <version>2.6.0</version>-->
<!-- </dependency>-->
<!-- </dependency>-->
<dependency>
<groupId>
org.apache.poi
</groupId>
<artifactId>
poi-ooxml
</artifactId>
<version>
4.1.0
</version>
</dependency>
</dependencies>
</dependencies>
...
...
curriculumsearch/src/main/java/com/roshka/controller/PostulanteRRHHController.java
View file @
532441cf
package
com
.
roshka
.
controller
;
package
com
.
roshka
.
controller
;
import
java.io.IOException
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -24,6 +29,7 @@ import com.roshka.repositorio.TecnologiaRepository;
...
@@ -24,6 +29,7 @@ import com.roshka.repositorio.TecnologiaRepository;
import
com.roshka.utils.Helper
;
import
com.roshka.utils.Helper
;
import
com.roshka.utils.PostulantesExcelExporter
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.hibernate.type.StringType
;
import
org.hibernate.type.StringType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -80,7 +86,7 @@ public class PostulanteRRHHController {
...
@@ -80,7 +86,7 @@ public class PostulanteRRHHController {
}
}
@RequestMapping
(
"/postulantes"
)
@RequestMapping
(
"/postulantes"
)
public
String
postulantes
(
Model
model
,
public
String
postulantes
(
HttpServletRequest
request
,
Model
model
,
@RequestParam
(
required
=
false
)
Long
tecId
,
@RequestParam
(
required
=
false
)
Long
tecId
,
@RequestParam
(
required
=
false
)
String
nombre
,
@RequestParam
(
required
=
false
)
String
nombre
,
@RequestParam
(
required
=
false
)
EstadoPostulante
estado
,
@RequestParam
(
required
=
false
)
EstadoPostulante
estado
,
...
@@ -92,7 +98,7 @@ public class PostulanteRRHHController {
...
@@ -92,7 +98,7 @@ public class PostulanteRRHHController {
@RequestParam
(
required
=
false
)
Long
cargoId
,
@RequestParam
(
required
=
false
)
Long
cargoId
,
@RequestParam
(
required
=
false
)
Long
convId
,
@RequestParam
(
required
=
false
)
Long
convId
,
@RequestParam
(
defaultValue
=
"0"
)
Integer
nroPagina
@RequestParam
(
defaultValue
=
"0"
)
Integer
nroPagina
)
{
)
throws
IOException
{
final
Integer
CANTIDAD_POR_PAGINA
=
5
;
final
Integer
CANTIDAD_POR_PAGINA
=
5
;
Pageable
page
=
PageRequest
.
of
(
nroPagina
,
CANTIDAD_POR_PAGINA
,
Sort
.
by
(
"id"
));
Pageable
page
=
PageRequest
.
of
(
nroPagina
,
CANTIDAD_POR_PAGINA
,
Sort
.
by
(
"id"
));
model
.
addAttribute
(
"tecnologias"
,
tecRepo
.
findAll
());
model
.
addAttribute
(
"tecnologias"
,
tecRepo
.
findAll
());
...
@@ -122,10 +128,71 @@ public class PostulanteRRHHController {
...
@@ -122,10 +128,71 @@ public class PostulanteRRHHController {
model
.
addAttribute
(
"pages"
,
postulantesPag
.
getTotalPages
());
model
.
addAttribute
(
"pages"
,
postulantesPag
.
getTotalPages
());
model
.
addAttribute
(
"postulantes"
,
postulantesDTO
);
model
.
addAttribute
(
"postulantes"
,
postulantesDTO
);
String
query
=
request
.
getQueryString
();
model
.
addAttribute
(
"query"
,
query
);
return
"postulantes"
;
return
"postulantes"
;
}
}
@RequestMapping
(
"/postulantesExcel"
)
public
void
exportPostulantesExcel
(
HttpServletResponse
response
,
Model
model
,
@RequestParam
(
required
=
false
)
Long
tecId
,
@RequestParam
(
required
=
false
)
String
nombre
,
@RequestParam
(
required
=
false
)
EstadoPostulante
estado
,
@RequestParam
(
required
=
false
)
Disponibilidad
dispo
,
@RequestParam
(
required
=
false
)
Long
lvlEng
,
@RequestParam
(
required
=
false
)
Long
lvlTec
,
@RequestParam
(
required
=
false
)
Long
instId
,
@RequestParam
(
required
=
false
)
Long
expInMonths
,
@RequestParam
(
required
=
false
)
Long
cargoId
,
@RequestParam
(
required
=
false
)
Long
convId
,
@RequestParam
(
defaultValue
=
"0"
)
Integer
nroPagina
)
throws
IOException
{
Pageable
page
=
PageRequest
.
of
(
0
,
Integer
.
MAX_VALUE
,
Sort
.
by
(
"id"
));
Page
<
Postulante
>
postulantesPag
=
post
.
postulantesMultiFiltro
(
nombre
==
null
||
nombre
.
trim
().
isEmpty
()
?
new
TypedParameterValue
(
StringType
.
INSTANCE
,
null
)
:
new
TypedParameterValue
(
StringType
.
INSTANCE
,
"%"
+
nombre
+
"%"
),
dispo
,
lvlEng
,
lvlTec
,
tecId
,
instId
,
cargoId
,
page
,
estado
,
convId
);
List
<
Postulante
>
postulantes
=
postulantesPag
.
getContent
();
List
<
PostulanteListaDTO
>
postulantesDTO
=
new
ArrayList
<>();
for
(
Postulante
postulante
:
postulantes
)
{
long
expTotal
=
0
;
//Sumamos el tiempo de experiencia total en meses de cada postulante
//expTotal = postulante.getExperiencias().stream().mapToLong(e -> Helper.getMonthsDifference(e.getFechaDesde(), e.getFechaHasta())).sum();
for
(
Experiencia
experiencia
:
postulante
.
getExperiencias
())
{
expTotal
+=
Helper
.
getMonthsDifference
(
experiencia
.
getFechaDesde
(),
experiencia
.
getFechaHasta
());
}
if
(
expInMonths
!=
null
&&
expInMonths
>
expTotal
)
continue
;
postulantesDTO
.
add
(
new
PostulanteListaDTO
(
postulante
.
getId
(),
postulante
.
getNombre
(),
postulante
.
getApellido
(),
postulante
.
getDisponibilidad
(),
postulante
.
getNivelIngles
(),
expTotal
,
postulante
.
getTecnologias
(),
postulante
.
getEstadoPostulante
(),
postulante
.
getPostulaciones
()));
}
response
.
setContentType
(
"application/octet-stream"
);
DateFormat
dateFormatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd_HH:mm:ss"
);
String
currentDateTime
=
dateFormatter
.
format
(
new
Date
());
String
headerKey
=
"Content-Disposition"
;
String
headerValue
=
"attachment; filename=postulantes_"
+
currentDateTime
+
".xlsx"
;
response
.
setHeader
(
headerKey
,
headerValue
);
HashMap
<
String
,
String
>
filtros
=
new
HashMap
<
String
,
String
>();
filtros
.
put
(
"nombre"
,
nombre
.
equals
(
""
)
?
"-"
:
nombre
);
filtros
.
put
(
"nivelIngles"
,
lvlEng
==
null
?
"-"
:
lvlEng
.
toString
());
filtros
.
put
(
"tecnologia"
,
tecId
==
null
?
"-"
:
tecRepo
.
findById
(
tecId
).
get
().
getNombre
());
filtros
.
put
(
"nivelTecnologia"
,
lvlTec
==
null
?
"-"
:
lvlTec
.
toString
());
filtros
.
put
(
"institucion"
,
instId
==
null
?
"-"
:
institucionRepository
.
findById
(
instId
).
get
().
getNombre
());
filtros
.
put
(
"estado"
,
estado
==
null
?
"-"
:
estado
.
getEstado
());
filtros
.
put
(
"experienciaEnMeses"
,
expInMonths
==
null
?
"-"
:
expInMonths
.
toString
());
filtros
.
put
(
"convocatoria"
,
convId
==
null
?
"-"
:
cargoRepo
.
findById
(
convId
).
get
().
getCargo
().
getNombre
());
PostulantesExcelExporter
excelExporter
=
new
PostulantesExcelExporter
(
postulantesDTO
,
filtros
);
excelExporter
.
export
(
response
);
}
@GetMapping
({
"/postulantes/{postulanteId}"
})
@GetMapping
({
"/postulantes/{postulanteId}"
})
public
String
getPostulanteDetalle
(
Model
model
,
@PathVariable
(
"postulanteId"
)
Long
postulanteId
)
{
public
String
getPostulanteDetalle
(
Model
model
,
@PathVariable
(
"postulanteId"
)
Long
postulanteId
)
{
...
...
curriculumsearch/src/main/java/com/roshka/utils/PostulantesExcelExporter.java
0 → 100644
View file @
532441cf
package
com
.
roshka
.
utils
;
import
java.io.IOException
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletResponse
;
import
com.roshka.DTO.PostulanteListaDTO
;
import
com.roshka.modelo.PostulanteTecnologia
;
import
com.roshka.modelo.Tecnologia
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.xssf.usermodel.XSSFFont
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
public
class
PostulantesExcelExporter
{
private
XSSFWorkbook
workbook
;
private
XSSFSheet
sheet
;
private
List
<
PostulanteListaDTO
>
listUsers
;
private
HashMap
<
String
,
String
>
filtros
;
public
PostulantesExcelExporter
(
List
<
PostulanteListaDTO
>
listUsers
,
HashMap
<
String
,
String
>
filtros
)
{
this
.
listUsers
=
listUsers
;
workbook
=
new
XSSFWorkbook
();
this
.
filtros
=
filtros
;
}
private
void
writeHeaderLine
()
{
sheet
=
workbook
.
createSheet
(
"Postulantes"
);
DateFormat
dateFormatter
=
new
SimpleDateFormat
(
"yyyy-MM-dd_HH:mm:ss"
);
String
currentDateTime
=
dateFormatter
.
format
(
new
Date
());
Row
row
=
sheet
.
createRow
(
0
);
CellStyle
style
=
workbook
.
createCellStyle
();
XSSFFont
font
=
workbook
.
createFont
();
font
.
setBold
(
true
);
font
.
setFontHeight
(
14
);
style
.
setFont
(
font
);
createCell
(
row
,
0
,
"Postulantes "
+
currentDateTime
,
style
);
row
=
sheet
.
createRow
(
2
);
createCell
(
row
,
0
,
"Filtros"
,
style
);
row
=
sheet
.
createRow
(
3
);
createCell
(
row
,
0
,
"Nombre"
,
style
);
createCell
(
row
,
1
,
"Nivel de Ingles"
,
style
);
createCell
(
row
,
2
,
"Experiencia (Meses)"
,
style
);
createCell
(
row
,
3
,
"Tecnologias"
,
style
);
createCell
(
row
,
4
,
"Nivel Tecnologia"
,
style
);
createCell
(
row
,
5
,
"Institucion"
,
style
);
createCell
(
row
,
6
,
"Estado"
,
style
);
createCell
(
row
,
7
,
"Convocatoria"
,
style
);
row
=
sheet
.
createRow
(
6
);
style
=
workbook
.
createCellStyle
();
font
=
workbook
.
createFont
();
font
.
setBold
(
true
);
font
.
setFontHeight
(
14
);
style
.
setFont
(
font
);
createCell
(
row
,
0
,
"Nombre"
,
style
);
createCell
(
row
,
1
,
"Nivel de Ingles"
,
style
);
createCell
(
row
,
2
,
"Experiencia"
,
style
);
createCell
(
row
,
3
,
"Tecnologias"
,
style
);
createCell
(
row
,
4
,
"Estado"
,
style
);
row
=
sheet
.
createRow
(
4
);
font
.
setBold
(
false
);
font
.
setFontHeight
(
12
);
style
.
setFont
(
font
);
createCell
(
row
,
0
,
filtros
.
get
(
"nombre"
),
style
);
createCell
(
row
,
1
,
filtros
.
get
(
"nivelIngles"
),
style
);
createCell
(
row
,
2
,
filtros
.
get
(
"experienciaEnMeses"
),
style
);
createCell
(
row
,
3
,
filtros
.
get
(
"tecnologia"
),
style
);
createCell
(
row
,
4
,
filtros
.
get
(
"nivelTecnologia"
),
style
);
createCell
(
row
,
5
,
filtros
.
get
(
"institucion"
),
style
);
createCell
(
row
,
6
,
filtros
.
get
(
"estado"
),
style
);
createCell
(
row
,
7
,
filtros
.
get
(
"convocatoria"
),
style
);
}
private
void
createCell
(
Row
row
,
int
columnCount
,
Object
value
,
CellStyle
style
)
{
sheet
.
autoSizeColumn
(
columnCount
);
Cell
cell
=
row
.
createCell
(
columnCount
);
if
(
value
instanceof
Integer
)
{
cell
.
setCellValue
((
Integer
)
value
);
}
else
if
(
value
instanceof
Boolean
)
{
cell
.
setCellValue
((
Boolean
)
value
);
}
else
{
cell
.
setCellValue
((
String
)
value
);
}
cell
.
setCellStyle
(
style
);
}
private
void
writeDataLines
()
{
int
rowCount
=
7
;
CellStyle
style
=
workbook
.
createCellStyle
();
XSSFFont
font
=
workbook
.
createFont
();
font
.
setFontHeight
(
12
);
style
.
setFont
(
font
);
for
(
PostulanteListaDTO
user
:
listUsers
)
{
Row
row
=
sheet
.
createRow
(
rowCount
++);
int
columnCount
=
0
;
StringBuilder
tecno
=
new
StringBuilder
();
for
(
PostulanteTecnologia
tecnologia:
user
.
getTecnologias
()){
tecno
.
append
(
tecnologia
.
getTecnologia
().
getNombre
()).
append
(
" "
);
}
createCell
(
row
,
columnCount
++,
user
.
getNombre
()
+
" "
+
user
.
getApellido
(),
style
);
createCell
(
row
,
columnCount
++,
user
.
getNivelIngles
().
intValue
(),
style
);
createCell
(
row
,
columnCount
++,
user
.
getExperienciaMeses
().
intValue
(),
style
);
createCell
(
row
,
columnCount
++,
tecno
.
toString
(),
style
);
createCell
(
row
,
columnCount
++,
user
.
getEstado
().
getEstado
(),
style
);
tecno
.
delete
(
0
,
tecno
.
length
()-
1
);
}
}
public
void
export
(
HttpServletResponse
response
)
throws
IOException
{
writeHeaderLine
();
writeDataLines
();
ServletOutputStream
outputStream
=
response
.
getOutputStream
();
workbook
.
write
(
outputStream
);
workbook
.
close
();
outputStream
.
close
();
}
}
\ No newline at end of file
curriculumsearch/src/main/webapp/jsp/postulantes.jsp
View file @
532441cf
...
@@ -165,6 +165,16 @@
...
@@ -165,6 +165,16 @@
</div>
</div>
</div>
</div>
</form>
</form>
<div class="row">
<div class="col-md-12">
<a href="/postulantesExcel?${query}" type="button" class="btn btn-light float-end">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-excel-fill" viewBox="0 0 16 16">
<path d="M9.293 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.707A1 1 0 0 0 13.707 4L10 .293A1 1 0 0 0 9.293 0zM9.5 3.5v-2l3 3h-2a1 1 0 0 1-1-1zM5.884 6.68 8 9.219l2.116-2.54a.5.5 0 1 1 .768.641L8.651 10l2.233 2.68a.5.5 0 0 1-.768.64L8 10.781l-2.116 2.54a.5.5 0 0 1-.768-.641L7.349 10 5.116 7.32a.5.5 0 1 1 .768-.64z"></path>
</svg>
Excel
</a>
</div>
</div>
</div>
</div>
<div class="card text-dark bg-light mt-3">
<div class="card text-dark bg-light mt-3">
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment