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
e7f75029
Commit
e7f75029
authored
3 years ago
by
Nelson Ruiz
Browse files
Options
Browse Files
Download
Plain Diff
se agrego query para obtener postulantes por carrera
parents
2868948b
b2a47f91
Hide whitespace changes
Inline
Side-by-side
Showing
57 changed files
with
1776 additions
and
276 deletions
+1776
-276
curriculumsearch/pom.xml
+11
-0
curriculumsearch/src/main/java/com/roshka/CurriculumsearchApplication.java
+69
-11
curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java
+71
-0
curriculumsearch/src/main/java/com/roshka/configuration/CustomUserDetails.java
+57
-0
curriculumsearch/src/main/java/com/roshka/configuration/CustomUserDetailsService.java
+24
-0
curriculumsearch/src/main/java/com/roshka/configuration/WebSecurityConfig.java
+76
-0
curriculumsearch/src/main/java/com/roshka/controller/CargoController.java
+16
-37
curriculumsearch/src/main/java/com/roshka/controller/ConvocatoriaController.java
+72
-0
curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java
+99
-15
curriculumsearch/src/main/java/com/roshka/controller/RRHHUserController.java
+57
-0
curriculumsearch/src/main/java/com/roshka/controller/TecnologiaController.java
+59
-0
curriculumsearch/src/main/java/com/roshka/modelo/Cargo.java
+7
-4
curriculumsearch/src/main/java/com/roshka/modelo/Ciudad.java
+2
-1
curriculumsearch/src/main/java/com/roshka/modelo/ConvocatoriaCargo.java
+7
-4
curriculumsearch/src/main/java/com/roshka/modelo/Departamento.java
+1
-0
curriculumsearch/src/main/java/com/roshka/modelo/DisponibilidadConverter.java
+6
-1
curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java
+1
-1
curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java
+1
-1
curriculumsearch/src/main/java/com/roshka/modelo/Institucion.java
+1
-1
curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java
+19
-17
curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java
+4
-3
curriculumsearch/src/main/java/com/roshka/modelo/RRHHUser.java
+63
-0
curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java
+3
-10
curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java
+2
-2
curriculumsearch/src/main/java/com/roshka/modelo/TipoDocumento.java
+27
-0
curriculumsearch/src/main/java/com/roshka/modelo/TipoDocumentoConverter.java
+31
-0
curriculumsearch/src/main/java/com/roshka/repositorio/CargoRepository.java
+3
-1
curriculumsearch/src/main/java/com/roshka/repositorio/ConvocatoriaRepository.java
+2
-1
curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java
+4
-0
curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java
+3
-0
curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java
+28
-1
curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java
+4
-1
curriculumsearch/src/main/java/com/roshka/repositorio/RRHHUserRepository.java
+8
-0
curriculumsearch/src/main/java/com/roshka/repositorio/TecnologiaRepository.java
+3
-1
curriculumsearch/src/main/java/com/roshka/utils/Helper.java
+11
-1
curriculumsearch/src/main/resources/application.properties
+3
-3
curriculumsearch/src/main/resources/json/cargo.json
+11
-0
curriculumsearch/src/main/resources/json/convocatoria.json
+17
-0
curriculumsearch/src/main/resources/json/postulante.json
+59
-54
curriculumsearch/src/main/resources/static/main.js
+119
-16
curriculumsearch/src/main/webapp/jsp/alerts.jsp
+19
-0
curriculumsearch/src/main/webapp/jsp/cargo-form.jsp
+1
-1
curriculumsearch/src/main/webapp/jsp/cargos.jsp
+50
-0
curriculumsearch/src/main/webapp/jsp/convocatoria-form.jsp
+1
-5
curriculumsearch/src/main/webapp/jsp/convocatorias.jsp
+2
-1
curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp
+82
-0
curriculumsearch/src/main/webapp/jsp/exitoRegistro.jsp
+52
-0
curriculumsearch/src/main/webapp/jsp/header.jsp
+10
-0
curriculumsearch/src/main/webapp/jsp/index.jsp
+17
-4
curriculumsearch/src/main/webapp/jsp/listapostulantes.jsp
+45
-0
curriculumsearch/src/main/webapp/jsp/login.jsp
+51
-0
curriculumsearch/src/main/webapp/jsp/postulante-form.jsp
+114
-48
curriculumsearch/src/main/webapp/jsp/postulantes.jsp
+90
-30
curriculumsearch/src/main/webapp/jsp/register_success.jsp
+16
-0
curriculumsearch/src/main/webapp/jsp/registration.jsp
+75
-0
curriculumsearch/src/main/webapp/jsp/tecnologia-form.jsp
+40
-0
curriculumsearch/src/main/webapp/jsp/tecnologias.jsp
+50
-0
No files found.
curriculumsearch/pom.xml
View file @
e7f75029
...
...
@@ -63,6 +63,17 @@
<artifactId>
jstl
</artifactId>
<version>
1.2
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-security
</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <version>1.18.22</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
</dependencies>
<build>
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/CurriculumsearchApplication.java
View file @
e7f75029
...
...
@@ -2,26 +2,23 @@ package com.roshka;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.roshka.modelo.Ciudad
;
import
com.roshka.modelo.Departamento
;
import
com.roshka.modelo.Postulante
;
import
com.roshka.modelo.PostulanteTecnologia
;
import
com.roshka.modelo.Tecnologia
;
import
com.roshka.repositorio.CiudadRepository
;
import
com.roshka.repositorio.DepartamentoRepository
;
import
com.roshka.repositorio.PostulanteRepository
;
import
com.roshka.repositorio.TecnologiaRepository
;
import
com.roshka.modelo.*
;
import
com.roshka.repositorio.*
;
import
org.hibernate.PersistentObjectException
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.domain.EntityScan
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
@SpringBootApplication
@EnableJpaRepositories
(
"com.roshka.repositorio"
)
...
...
@@ -33,7 +30,8 @@ public class CurriculumsearchApplication {
}
@Bean
CommandLineRunner
runner
(
PostulanteRepository
postRepo
,
TecnologiaRepository
tecRepo
,
DepartamentoRepository
depR
,
CiudadRepository
ciudR
)
{
CommandLineRunner
runner
(
PostulanteRepository
postRepo
,
TecnologiaRepository
tecRepo
,
DepartamentoRepository
depR
,
CiudadRepository
ciudR
,
RRHHUserRepository
rrhhUserRepository
,
CargoRepository
cargoR
,
ConvocatoriaRepository
convR
)
{
return
args
->
{
try
{
// read json and write to db
...
...
@@ -48,14 +46,58 @@ public class CurriculumsearchApplication {
List
<
Ciudad
>
ciudades
=
mapper
.
readValue
(
inputStream
,
typeReference2
);
ciudR
.
saveAll
(
ciudades
);
System
.
out
.
println
(
"Cuidad Saved!"
);
TypeReference
<
List
<
Cargo
>>
typeReference3
=
new
TypeReference
<
List
<
Cargo
>>(){};
inputStream
=
TypeReference
.
class
.
getResourceAsStream
(
"/json/cargo.json"
);
List
<
Cargo
>
cargos
=
mapper
.
readValue
(
inputStream
,
typeReference3
);
cargoR
.
saveAll
(
cargos
);
cargoR
.
flush
();
System
.
out
.
println
(
"Cargos Saved!"
);
/* TypeReference<List<Tecnologia>> typeReference5 = new TypeReference<List<Tecnologia>>(){};
inputStream = TypeReference.class.getResourceAsStream("/json/tecnologia.json");
List<Tecnologia> tecnologias= mapper.readValue(inputStream,typeReference5);
tecRepo.saveAll(tecnologias);
tecRepo.flush();
System.out.println("Cargos Saved!"); */
TypeReference
<
List
<
ConvocatoriaCargo
>>
typeReference4
=
new
TypeReference
<
List
<
ConvocatoriaCargo
>>(){};
inputStream
=
TypeReference
.
class
.
getResourceAsStream
(
"/json/convocatoria.json"
);
List
<
ConvocatoriaCargo
>
convocatorias
=
mapper
.
readValue
(
inputStream
,
typeReference4
);
convocatorias
=
convR
.
saveAll
(
convocatorias
);
convR
.
flush
();
System
.
out
.
println
(
"convocatorias Saved!"
);
TypeReference
<
List
<
Postulante
>>
typeReference
=
new
TypeReference
<
List
<
Postulante
>>(){};
inputStream
=
TypeReference
.
class
.
getResourceAsStream
(
"/json/postulante.json"
);
List
<
Postulante
>
postulantes
=
mapper
.
readValue
(
inputStream
,
typeReference
);
/* for (Postulante postulante : postulantes) {
for (int i = 0; i < postulante.getPostulaciones().size(); i++) {
postulante.getPostulaciones().set(i, convR.getById(postulante.getPostulaciones().get(i).getId()));
}
} */
postRepo
.
saveAll
(
postulantes
);
System
.
out
.
println
(
"postulantes Saved!"
);
String
password
=
new
BCryptPasswordEncoder
().
encode
(
"test"
);
RRHHUser
testuser
=
new
RRHHUser
();
testuser
.
setEmail
(
"test@test.com"
);
testuser
.
setFirstName
(
"test"
);
testuser
.
setLastName
(
"test"
);
testuser
.
setPassword
(
password
);
rrhhUserRepository
.
save
(
testuser
);
System
.
out
.
println
(
"Usuario Test: \nEmail: test@test.com\nPassword: test"
);
}
catch
(
IOException
e
){
System
.
out
.
println
(
"Unable to save tecnologias: "
+
e
.
getMessage
());
System
.
out
.
println
(
"Unable to save: "
+
e
.
getMessage
());
}
catch
(
PersistentObjectException
ex
){
System
.
out
.
println
(
"Unable to save: "
+
ex
.
getMessage
());
ex
.
printStackTrace
();
}
catch
(
Exception
ex
){
System
.
out
.
println
(
"Unable to save: "
+
ex
.
getMessage
());
ex
.
printStackTrace
();
}
...
...
@@ -64,5 +106,21 @@ public class CurriculumsearchApplication {
};
}
public
static
<
Q
,
T
extends
JpaRepository
<
Q
,
Long
>>
void
guardarJson
(
T
repo
,
String
srcJson
)
{
ObjectMapper
mapper
=
new
ObjectMapper
();
TypeReference
<
List
<
Q
>>
typeReference1
=
new
TypeReference
<
List
<
Q
>>(){};
InputStream
inputStream
=
TypeReference
.
class
.
getResourceAsStream
(
srcJson
);
List
<
Q
>
listaAguardar
;
try
{
listaAguardar
=
mapper
.
readValue
(
inputStream
,
typeReference1
);
repo
.
saveAll
(
listaAguardar
);
repo
.
flush
();
System
.
out
.
println
(
srcJson
+
" Saved!"
);
}
catch
(
IOException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
DTO
;
import
java.util.List
;
import
com.roshka.modelo.Disponibilidad
;
import
com.roshka.modelo.PostulanteTecnologia
;
public
class
PostulanteListaDTO
{
private
Long
id
;
private
String
nombre
;
private
String
apellido
;
private
Disponibilidad
disponibilidad
;
private
Long
nivelIngles
;
private
Long
experienciaMeses
;
private
List
<
PostulanteTecnologia
>
tecnologias
;
public
PostulanteListaDTO
(
Long
id
,
String
nombre
,
String
apellido
,
Disponibilidad
disponibilidad
,
Long
nivelIngles
,
Long
experienciaMeses
,
List
<
PostulanteTecnologia
>
tecnologias
)
{
this
.
id
=
id
;
this
.
nombre
=
nombre
;
this
.
apellido
=
apellido
;
this
.
disponibilidad
=
disponibilidad
;
this
.
nivelIngles
=
nivelIngles
;
this
.
experienciaMeses
=
experienciaMeses
;
this
.
tecnologias
=
tecnologias
;
}
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getNombre
()
{
return
nombre
;
}
public
void
setNombre
(
String
nombre
)
{
this
.
nombre
=
nombre
;
}
public
String
getApellido
()
{
return
apellido
;
}
public
void
setApellido
(
String
apellido
)
{
this
.
apellido
=
apellido
;
}
public
Disponibilidad
getDisponibilidad
()
{
return
disponibilidad
;
}
public
void
setDisponibilidad
(
Disponibilidad
disponibilidad
)
{
this
.
disponibilidad
=
disponibilidad
;
}
public
Long
getNivelIngles
()
{
return
nivelIngles
;
}
public
void
setNivelIngles
(
Long
nivelIngles
)
{
this
.
nivelIngles
=
nivelIngles
;
}
public
Long
getExperienciaMeses
()
{
return
experienciaMeses
;
}
public
void
setExperienciaMeses
(
Long
experienciaMeses
)
{
this
.
experienciaMeses
=
experienciaMeses
;
}
public
List
<
PostulanteTecnologia
>
getTecnologias
()
{
return
tecnologias
;
}
public
void
setTecnologias
(
List
<
PostulanteTecnologia
>
tecnologias
)
{
this
.
tecnologias
=
tecnologias
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/configuration/CustomUserDetails.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
configuration
;
import
java.util.Collection
;
import
com.roshka.modelo.RRHHUser
;
import
org.springframework.security.core.GrantedAuthority
;
import
org.springframework.security.core.userdetails.UserDetails
;
public
class
CustomUserDetails
implements
UserDetails
{
private
RRHHUser
user
;
public
CustomUserDetails
(
RRHHUser
user
)
{
this
.
user
=
user
;
}
@Override
public
Collection
<?
extends
GrantedAuthority
>
getAuthorities
()
{
return
null
;
}
@Override
public
String
getPassword
()
{
return
user
.
getPassword
();
}
@Override
public
String
getUsername
()
{
return
user
.
getEmail
();
}
@Override
public
boolean
isAccountNonExpired
()
{
return
true
;
}
@Override
public
boolean
isAccountNonLocked
()
{
return
true
;
}
@Override
public
boolean
isCredentialsNonExpired
()
{
return
true
;
}
@Override
public
boolean
isEnabled
()
{
return
true
;
}
public
String
getFullName
()
{
return
user
.
getFirstName
()
+
" "
+
user
.
getLastName
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/configuration/CustomUserDetailsService.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
configuration
;
import
com.roshka.modelo.RRHHUser
;
import
com.roshka.repositorio.RRHHUserRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.core.userdetails.UsernameNotFoundException
;
public
class
CustomUserDetailsService
implements
UserDetailsService
{
@Autowired
private
RRHHUserRepository
userRepo
;
@Override
public
UserDetails
loadUserByUsername
(
String
username
)
throws
UsernameNotFoundException
{
RRHHUser
user
=
userRepo
.
findByEmail
(
username
);
if
(
user
==
null
)
{
throw
new
UsernameNotFoundException
(
"User not found"
);
}
return
new
CustomUserDetails
(
user
);
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/configuration/WebSecurityConfig.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
configuration
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.security.authentication.dao.DaoAuthenticationProvider
;
import
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity
;
import
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
;
import
org.springframework.security.core.userdetails.UserDetailsService
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.security.web.util.matcher.AntPathRequestMatcher
;
import
javax.sql.DataSource
;
@Configuration
@EnableWebSecurity
public
class
WebSecurityConfig
extends
WebSecurityConfigurerAdapter
{
@Autowired
private
DataSource
dataSource
;
@Bean
public
UserDetailsService
userDetailsService
()
{
return
new
CustomUserDetailsService
();
}
@Bean
public
BCryptPasswordEncoder
passwordEncoder
()
{
return
new
BCryptPasswordEncoder
();
}
@Bean
public
DaoAuthenticationProvider
authenticationProvider
()
{
DaoAuthenticationProvider
authProvider
=
new
DaoAuthenticationProvider
();
authProvider
.
setUserDetailsService
(
userDetailsService
());
authProvider
.
setPasswordEncoder
(
passwordEncoder
());
return
authProvider
;
}
@Override
protected
void
configure
(
AuthenticationManagerBuilder
auth
)
throws
Exception
{
auth
.
authenticationProvider
(
authenticationProvider
());
}
@Override
protected
void
configure
(
HttpSecurity
http
)
throws
Exception
{
http
// .csrf().disable()
.
authorizeRequests
()
.
antMatchers
(
"/"
).
authenticated
()
.
antMatchers
(
"/home"
).
authenticated
()
.
antMatchers
(
"/cargo*"
).
authenticated
()
.
antMatchers
(
"/convocatoria*"
).
authenticated
()
.
antMatchers
(
"/tecnologia*"
).
authenticated
()
.
antMatchers
(
"/postulantes"
).
authenticated
()
.
anyRequest
().
permitAll
()
.
and
()
.
formLogin
()
.
loginPage
(
"/login"
)
.
usernameParameter
(
"email"
)
.
defaultSuccessUrl
(
"/home"
)
.
permitAll
()
.
and
()
.
logout
()
.
logoutUrl
(
"/logout"
)
.
logoutRequestMatcher
(
new
AntPathRequestMatcher
(
"/logout"
,
"GET"
))
.
clearAuthentication
(
true
)
.
invalidateHttpSession
(
true
)
.
deleteCookies
(
"JSESSIONID"
,
"remember-me"
)
.
logoutSuccessUrl
(
"/login"
);
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/controller/CargoController.java
View file @
e7f75029
package
com
.
roshka
.
controller
;
import
java.util.Date
;
import
com.roshka.modelo.Cargo
;
import
com.roshka.modelo.ConvocatoriaCargo
;
import
com.roshka.repositorio.CargoRepository
;
import
com.roshka.repositorio.ConvocatoriaRepository
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.hibernate.type.IntegerType
;
import
org.hibernate.type.LongType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
@Controller
public
class
CargoController
{
CargoRepository
cargoRepo
;
ConvocatoriaRepository
convoRepo
;
@Autowired
public
CargoController
(
CargoRepository
cargoRepo
,
ConvocatoriaRepository
convoRepo
)
{
public
CargoController
(
CargoRepository
cargoRepo
)
{
this
.
cargoRepo
=
cargoRepo
;
this
.
convoRepo
=
convoRepo
;
}
@RequestMapping
(
"/c
onvocatoria
s"
)
@RequestMapping
(
"/c
argo
s"
)
public
String
menuCargos
(
Model
model
,
@RequestParam
(
required
=
false
)
Long
cargoId
,
@RequestParam
(
required
=
false
)
Integer
isOpen
//1: true, 0: false
@RequestParam
(
required
=
false
)
String
nombre
)
{
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findAll
());
model
.
addAttribute
(
"convocatorias"
,
convoRepo
.
f1ndByCargoAndEstado
(
new
TypedParameterValue
(
LongType
.
INSTANCE
,
cargoId
),
new
Date
(),
new
TypedParameterValue
(
IntegerType
.
INSTANCE
,
isOpen
)));
//model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId));
return
"convocatorias"
;
if
(
nombre
==
null
||
nombre
.
trim
().
isEmpty
())
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findAll
());
else
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findByNombreContainingIgnoreCase
(
nombre
));
return
"cargos"
;
}
@RequestMapping
(
"/cargo"
)
public
String
formCargo
(
Model
model
)
{
model
.
addAttribute
(
"cargo"
,
new
Cargo
());
@RequestMapping
(
path
=
{
"/cargo"
,
"/cargo/{id}"
},
method
=
RequestMethod
.
GET
)
public
String
formCargo
(
Model
model
,
@PathVariable
(
required
=
false
)
Long
id
)
{
if
(
id
==
null
)
model
.
addAttribute
(
"cargo"
,
new
Cargo
());
else
model
.
addAttribute
(
"cargo"
,
cargoRepo
.
getById
(
id
));
return
"cargo-form"
;
}
@PostMapping
(
"/cargo"
)
public
String
guardarCargo
(
@ModelAttribute
Cargo
cargo
,
BindingResult
result
)
{
@PostMapping
(
path
=
{
"/cargo"
,
"/cargo/{id}"
}
)
public
String
guardarCargo
(
@ModelAttribute
Cargo
cargo
,
BindingResult
result
,
@PathVariable
(
required
=
false
)
Long
id
)
{
if
(
result
.
hasErrors
());
if
(
id
!=
null
)
cargo
.
setId
(
id
);
cargoRepo
.
save
(
cargo
);
System
.
out
.
println
(
cargo
.
getNombre
());
return
"redirect:/cargos"
;
}
@RequestMapping
(
"/convocatoria"
)
public
String
formConvocatoria
(
Model
model
)
{
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findAll
());
model
.
addAttribute
(
"convocatoria"
,
new
ConvocatoriaCargo
());
return
"convocatoria-form"
;
}
@PostMapping
(
"/convocatoria"
)
public
String
guardarConvocatoria
(
@ModelAttribute
ConvocatoriaCargo
convocatoria
,
BindingResult
result
)
{
if
(
result
.
hasErrors
());
convoRepo
.
save
(
convocatoria
);
System
.
out
.
println
(
convocatoria
.
getFechaInicio
());
return
"redirect:/cargos"
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/controller/ConvocatoriaController.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
controller
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
com.roshka.modelo.ConvocatoriaCargo
;
import
com.roshka.repositorio.CargoRepository
;
import
com.roshka.repositorio.ConvocatoriaRepository
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.hibernate.type.IntegerType
;
import
org.hibernate.type.LongType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
@Controller
public
class
ConvocatoriaController
{
CargoRepository
cargoRepo
;
ConvocatoriaRepository
convoRepo
;
@Autowired
public
ConvocatoriaController
(
CargoRepository
cargoRepo
,
ConvocatoriaRepository
convoRepo
)
{
this
.
cargoRepo
=
cargoRepo
;
this
.
convoRepo
=
convoRepo
;
}
@RequestMapping
(
"/convocatorias"
)
public
String
menuConvocatorias
(
Model
model
,
@RequestParam
(
required
=
false
)
Long
cargoId
,
@RequestParam
(
required
=
false
)
Integer
isOpen
//1: true, 0: false
)
{
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findAll
());
model
.
addAttribute
(
"convocatorias"
,
convoRepo
.
f1ndByCargoAndEstado
(
new
TypedParameterValue
(
LongType
.
INSTANCE
,
cargoId
),
new
Date
(),
new
TypedParameterValue
(
IntegerType
.
INSTANCE
,
isOpen
)));
//model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId));
return
"convocatorias"
;
}
@RequestMapping
(
path
=
{
"/convocatoria"
,
"/convocatoria/{id}"
})
public
String
formConvocatoria
(
Model
model
,
@PathVariable
(
required
=
false
)
Long
id
)
{
model
.
addAttribute
(
"cargos"
,
cargoRepo
.
findAll
());
if
(
id
==
null
)
model
.
addAttribute
(
"convocatoria"
,
new
ConvocatoriaCargo
());
else
{
ConvocatoriaCargo
cc
=
convoRepo
.
getById
(
id
);
cc
.
setFechaFinS
(
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
((
cc
.
getFechaFin
())));
cc
.
setFechaInicioS
(
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
((
cc
.
getFechaInicio
())));
model
.
addAttribute
(
"convocatoria"
,
cc
);
}
return
"convocatoria-form"
;
}
@PostMapping
(
path
=
{
"/convocatoria"
,
"/convocatoria/{id}"
})
public
String
guardarConvocatoria
(
@ModelAttribute
ConvocatoriaCargo
convocatoria
,
BindingResult
result
,
@PathVariable
(
required
=
false
)
Long
id
)
{
if
(
result
.
hasErrors
());
if
(
id
!=
null
)
convocatoria
.
setId
(
id
);
convoRepo
.
save
(
convocatoria
);
System
.
out
.
println
(
convocatoria
.
getFechaInicio
());
return
"redirect:/convocatorias"
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java
View file @
e7f75029
package
com
.
roshka
.
controller
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Locale
;
import
javax.validation.ConstraintViolationException
;
import
com.roshka.DTO.PostulanteListaDTO
;
import
com.roshka.modelo.*
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
...
...
@@ -13,14 +18,26 @@ import com.roshka.modelo.EstadoCivil;
import
com.roshka.modelo.Nacionalidad
;
import
com.roshka.modelo.Postulante
;
import
com.roshka.modelo.TipoExperiencia
;
import
com.roshka.repositorio.*
;
import
com.roshka.repositorio.CiudadRepository
;
import
com.roshka.repositorio.ConvocatoriaRepository
;
import
com.roshka.repositorio.DepartamentoRepository
;
import
com.roshka.repositorio.ExperienciaRepository
;
import
com.roshka.repositorio.InstitucionRepository
;
import
com.roshka.repositorio.PostulanteRepository
;
import
com.roshka.repositorio.TecnologiaRepository
;
import
com.roshka.utils.Helper
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.hibernate.type.StringType
;
import
org.hibernate.type.IntegerType
;
import
org.hibernate.type.LongType
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.stereotype.Controller
;
...
...
@@ -38,19 +55,31 @@ public class PostulanteController {
InstitucionRepository
institucionRepository
;
DepartamentoRepository
depRepo
;
CiudadRepository
ciuRepo
;
EstudioRepository
estudioRepository
;
PostulanteTecnologiaRepository
postulanteTecnologiaRepository
;
ConvocatoriaRepository
cargoRepo
;
CargoRepository
carRepo
;
@Autowired
public
PostulanteController
(
PostulanteRepository
post
,
TecnologiaRepository
tecRepo
,
ExperienciaRepository
expRepo
,
InstitucionRepository
institucionRepository
,
DepartamentoRepository
depRepo
,
CiudadRepository
ciuRepo
)
{
public
PostulanteController
(
PostulanteRepository
post
,
TecnologiaRepository
tecRepo
,
ExperienciaRepository
expRepo
,
InstitucionRepository
institucionRepository
,
DepartamentoRepository
depRepo
,
CiudadRepository
ciuRepo
,
EstudioRepository
estudioRepository
,
PostulanteTecnologiaRepository
postulanteTecnologiaRepository
,
ConvocatoriaRepository
cargoRepo
,
CargoRepository
carRepo
)
{
this
.
post
=
post
;
this
.
tecRepo
=
tecRepo
;
this
.
expRepo
=
expRepo
;
this
.
institucionRepository
=
institucionRepository
;
this
.
depRepo
=
depRepo
;
this
.
ciuRepo
=
ciuRepo
;
this
.
estudioRepository
=
estudioRepository
;
this
.
postulanteTecnologiaRepository
=
postulanteTecnologiaRepository
;
this
.
cargoRepo
=
cargoRepo
;
this
.
carRepo
=
carRepo
;
}
@RequestMapping
(
"/"
)
@RequestMapping
(
"home"
)
public
String
index
()
{
...
...
@@ -59,10 +88,38 @@ public class PostulanteController {
@RequestMapping
(
"/postulantes"
)
public
String
postulantes
(
Model
model
,
@RequestParam
(
required
=
false
,
name
=
"tec"
)
Long
tecnologidaId
)
{
@RequestParam
(
required
=
false
)
Long
tecId
,
@RequestParam
(
required
=
false
)
String
nombre
,
@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
(
defaultValue
=
"0"
)
Integer
nroPagina
)
{
final
Integer
CANTIDAD_POR_PAGINA
=
5
;
Pageable
page
=
PageRequest
.
of
(
nroPagina
,
CANTIDAD_POR_PAGINA
,
Sort
.
by
(
"id"
));
model
.
addAttribute
(
"tecnologias"
,
tecRepo
.
findAll
());
if
(
tecnologidaId
==
null
)
model
.
addAttribute
(
"postulantes"
,
post
.
findAll
());
else
model
.
addAttribute
(
"postulantes"
,
post
.
buscarPostulantesPorTecnologia
(
tecnologidaId
));
model
.
addAttribute
(
"disponibilidades"
,
Disponibilidad
.
values
());
model
.
addAttribute
(
"institucionesEducativas"
,
institucionRepository
.
findAll
());
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
);
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
()));
}
model
.
addAttribute
(
"pages"
,
postulantesPag
.
getTotalPages
());
model
.
addAttribute
(
"postulantes"
,
postulantesDTO
);
return
"postulantes"
;
}
...
...
@@ -75,11 +132,12 @@ public class PostulanteController {
model
.
addAttribute
(
"estadosCiviles"
,
EstadoCivil
.
values
());
model
.
addAttribute
(
"nacionalidades"
,
Nacionalidad
.
values
());
model
.
addAttribute
(
"tiposExperencia"
,
TipoExperiencia
.
values
());
model
.
addAttribute
(
"CargosDisponibles"
,
cargoRepo
.
f1ndByCargoAndEstado
(
new
TypedParameterValue
(
LongType
.
INSTANCE
,
null
),
new
Date
(),
new
TypedParameterValue
(
IntegerType
.
INSTANCE
,
1
)));
try
{
model
.
addAttribute
(
"ciudades"
,
new
ObjectMapper
().
writeValueAsString
(
ciuRepo
.
findAll
()));
}
catch
(
JsonProcessingException
e
)
{
}
catch
(
JsonProcessingException
e
r
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
e
r
.
printStackTrace
();
}
model
.
addAttribute
(
"departamentos"
,
depRepo
.
findAll
());
...
...
@@ -88,23 +146,43 @@ public class PostulanteController {
@PostMapping
(
value
=
"/postulante"
,
consumes
=
"application/json"
)
public
String
guardarPostulante
(
@RequestBody
Postulante
postulante
){
System
.
out
.
println
(
"hola"
);
//Codigo encargado de modificar postulacion si se envia mismo CI
Postulante
postulantex
=
post
.
findByNroDocument
(
postulante
.
getnroDocument
());
if
(
postulantex
!=
null
){
estudioRepository
.
findByPostulante
(
postulantex
).
forEach
(
x
->
estudioRepository
.
delete
(
x
));
expRepo
.
findByPostulante
(
postulantex
).
forEach
(
x
->
expRepo
.
delete
(
x
));
postulanteTecnologiaRepository
.
findByPostulante
(
postulantex
).
forEach
(
x
->
postulanteTecnologiaRepository
.
delete
(
x
));
postulante
.
setId
(
postulantex
.
getId
());
}
postulante
.
getTecnologias
().
stream
().
filter
(
tec
->
tec
.
getTecnologia
().
getId
()
!=
0
).
forEach
(
tec
->
tec
.
setTecnologia
(
tecRepo
.
getById
(
tec
.
getTecnologia
().
getId
()))
);
);
/* for (int i = 0; i < postulante.getPostulaciones().size(); i++) {
postulante.getPostulaciones().set(i, cargoRepo.getById(postulante.getPostulaciones().get(i).getId()));
}
*/
for
(
Estudio
estudio:
postulante
.
getEstudios
()){
Institucion
institucion
=
institucionRepository
.
findByNombre
(
estudio
.
getInstitucion
().
getNombre
());
String
nombreIns
=
""
;
nombreIns
=
estudio
.
getInstitucion
().
getNombre
().
toLowerCase
();
Institucion
institucion
=
institucionRepository
.
findByNombre
(
nombreIns
);
if
(
institucion
==
null
){
institucionRepository
.
save
(
estudio
.
getInstitucion
());
}
else
{
estudio
.
setInstitucion
(
institucion
);
}
}
System
.
out
.
println
(
"hola"
);
post
.
save
(
postulante
);
return
"redirect:/"
;
return
"redirect:/postulacion-correcta"
;
}
@GetMapping
(
"/postulacion-correcta"
)
public
String
successPostulation
(
Model
model
){
model
.
addAttribute
(
"mensaje1"
,
"Tu informacion se ha recibido correctamente!"
);
model
.
addAttribute
(
"mensaje2"
,
" espera por que nos pongamos en contacto!"
);
return
"exitoRegistro"
;
}
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
...
...
@@ -125,5 +203,11 @@ public class PostulanteController {
}
@GetMapping
({
"/postulante/{postulanteId}"
})
public
String
getPostulanteDetalle
(
Model
model
,
@PathVariable
(
"postulanteId"
)
Long
postulanteId
)
{
Postulante
p
=
post
.
findById
(
postulanteId
).
orElse
(
null
);
model
.
addAttribute
(
"postulante"
,
p
);
return
"detallepostulante"
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/controller/RRHHUserController.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
controller
;
import
com.roshka.modelo.RRHHUser
;
import
com.roshka.repositorio.RRHHUserRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
javax.servlet.http.HttpServletRequest
;
@Controller
public
class
RRHHUserController
{
private
static
final
long
REGISTER_CODE
=
1234
;
RRHHUserRepository
rrhhUserRepository
;
@Autowired
public
RRHHUserController
(
RRHHUserRepository
rrhhUserRepository
){
this
.
rrhhUserRepository
=
rrhhUserRepository
;
}
@GetMapping
(
"/"
)
public
String
redirectOnHome
(){
return
"redirect:/home"
;
}
@GetMapping
(
"/register"
)
public
String
showRegistrationForm
(
Model
model
)
{
model
.
addAttribute
(
"user"
,
new
RRHHUser
());
return
"registration"
;
}
@GetMapping
(
"/login"
)
public
String
getLogin
(
Model
model
,
HttpServletRequest
request
)
{
if
(
request
.
getParameter
(
"error"
)!=
null
){
model
.
addAttribute
(
"error"
,
"Credenciales Incorrectas"
);
}
return
"login"
;
}
@PostMapping
(
"/process_register"
)
public
String
processRegister
(
HttpServletRequest
request
,
RRHHUser
user
)
{
if
(
Long
.
parseLong
(
request
.
getParameter
(
"registrationCode"
))
!=
REGISTER_CODE
){
return
"redirect:/register"
;
}
BCryptPasswordEncoder
passwordEncoder
=
new
BCryptPasswordEncoder
();
String
encodedPassword
=
passwordEncoder
.
encode
(
user
.
getPassword
());
user
.
setPassword
(
encodedPassword
);
rrhhUserRepository
.
save
(
user
);
return
"register_success"
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/controller/TecnologiaController.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
controller
;
import
com.roshka.modelo.Tecnologia
;
import
com.roshka.repositorio.TecnologiaRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
@Controller
public
class
TecnologiaController
{
TecnologiaRepository
tecRepo
;
@Autowired
public
TecnologiaController
(
TecnologiaRepository
tecRepo
){
this
.
tecRepo
=
tecRepo
;
}
@GetMapping
(
path
=
{
"/tecnologia"
,
"/tecnologia/{id}"
})
public
String
addtecnologiaView
(
Model
model
,
@PathVariable
(
required
=
false
)
Long
id
)
{
if
(
id
==
null
)
model
.
addAttribute
(
"tecnologia"
,
new
Tecnologia
());
else
model
.
addAttribute
(
"tecnologia"
,
tecRepo
.
getById
(
id
));
return
"tecnologia-form"
;
}
@RequestMapping
(
"/tecnologias"
)
public
String
menuTecnologias
(
Model
model
,
@RequestParam
(
required
=
false
)
String
nombre
)
{
if
(
nombre
==
null
||
nombre
.
trim
().
isEmpty
())
model
.
addAttribute
(
"tecnologias"
,
tecRepo
.
findAll
());
else
model
.
addAttribute
(
"tecnologias"
,
tecRepo
.
findByNombreContainingIgnoreCase
(
nombre
));
return
"tecnologias"
;
}
@PostMapping
(
path
=
{
"/tecnologia"
,
"/tecnologia/{id}"
})
public
String
addtecnologia
(
@ModelAttribute
Tecnologia
tecnologia
,
BindingResult
result
,
@PathVariable
(
required
=
false
)
Long
id
)
{
if
(
result
.
hasErrors
());
if
(
id
!=
null
)
tecnologia
.
setId
(
id
);
tecRepo
.
save
(
tecnologia
);
System
.
out
.
println
(
tecnologia
.
getNombre
());
return
"redirect:/tecnologias"
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Cargo.java
View file @
e7f75029
...
...
@@ -17,8 +17,8 @@ import com.fasterxml.jackson.annotation.JsonManagedReference;
@Table
(
name
=
"cargo"
)
public
class
Cargo
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
l
ong
id
;
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
L
ong
id
;
@NotBlank
@Column
(
name
=
"nombre"
)
...
...
@@ -28,13 +28,13 @@ public class Cargo {
@JsonManagedReference
private
List
<
ConvocatoriaCargo
>
convocatorias
;
public
l
ong
getId
()
{
public
L
ong
getId
()
{
return
id
;
}
public
String
getNombre
()
{
return
nombre
;
}
public
void
setId
(
l
ong
id
)
{
public
void
setId
(
L
ong
id
)
{
this
.
id
=
id
;
}
public
void
setNombre
(
String
nombre
)
{
...
...
@@ -47,4 +47,7 @@ public class Cargo {
public
void
setConvocatorias
(
List
<
ConvocatoriaCargo
>
convocatorias
)
{
this
.
convocatorias
=
convocatorias
;
}
public
static
Object
values
()
{
return
null
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Ciudad.java
View file @
e7f75029
...
...
@@ -14,6 +14,7 @@ import javax.persistence.Table;
import
com.fasterxml.jackson.annotation.JsonBackReference
;
@Entity
@Table
(
name
=
"ciudad"
)
public
class
Ciudad
{
...
...
@@ -66,6 +67,6 @@ public class Ciudad{
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/ConvocatoriaCargo.java
View file @
e7f75029
...
...
@@ -15,14 +15,17 @@ import javax.persistence.Table;
import
javax.persistence.Transient
;
import
com.fasterxml.jackson.annotation.JsonBackReference
;
import
com.fasterxml.jackson.annotation.JsonIdentityInfo
;
import
com.fasterxml.jackson.annotation.ObjectIdGenerators
;
import
com.roshka.utils.Helper
;
@Entity
@Table
(
name
=
"convocatoria_cargo"
)
@JsonIdentityInfo
(
generator
=
ObjectIdGenerators
.
UUIDGenerator
.
class
,
property
=
"@UUID"
)
public
class
ConvocatoriaCargo
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
private
l
ong
id
;
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
L
ong
id
;
@ManyToOne
()
@JoinColumn
(
name
=
"cargo_id"
,
insertable
=
false
,
updatable
=
false
)
...
...
@@ -52,7 +55,7 @@ public class ConvocatoriaCargo {
@ManyToMany
(
mappedBy
=
"postulaciones"
)
private
List
<
Postulante
>
postulantes
;
public
l
ong
getId
()
{
public
L
ong
getId
()
{
return
id
;
}
public
Cargo
getCargo
()
{
...
...
@@ -67,7 +70,7 @@ public class ConvocatoriaCargo {
public
Date
getFechaInicio
()
{
return
fechaInicio
;
}
public
void
setId
(
l
ong
id
)
{
public
void
setId
(
L
ong
id
)
{
this
.
id
=
id
;
}
public
void
setCargo
(
Cargo
cargo
)
{
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Departamento.java
View file @
e7f75029
...
...
@@ -16,6 +16,7 @@ import com.fasterxml.jackson.annotation.JsonManagedReference;
public
class
Departamento
{
@Id
private
Long
id
;
@Column
(
name
=
"nombre"
)
private
String
nombre
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/DisponibilidadConverter.java
View file @
e7f75029
...
...
@@ -6,7 +6,7 @@ import javax.persistence.AttributeConverter;
import
javax.persistence.Converter
;
@Converter
(
autoApply
=
true
)
public
class
DisponibilidadConverter
implements
AttributeConverter
<
Disponibilidad
,
String
>
{
public
class
DisponibilidadConverter
implements
AttributeConverter
<
Disponibilidad
,
String
>
,
org
.
springframework
.
core
.
convert
.
converter
.
Converter
<
String
,
Disponibilidad
>
{
@Override
public
String
convertToDatabaseColumn
(
Disponibilidad
modalidad
)
{
...
...
@@ -27,4 +27,9 @@ public class DisponibilidadConverter implements AttributeConverter<Disponibilida
.
findFirst
()
.
orElseThrow
(
IllegalArgumentException:
:
new
);
}
@Override
public
Disponibilidad
convert
(
String
arg0
)
{
return
convertToEntityAttribute
(
arg0
);
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java
View file @
e7f75029
...
...
@@ -15,7 +15,7 @@ import com.roshka.utils.Helper;
@Table
(
name
=
"estudio"
)
public
class
Estudio
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
)
private
long
id
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java
View file @
e7f75029
...
...
@@ -23,7 +23,7 @@ import javax.validation.constraints.Past;
@Table
(
name
=
"experiencia"
)
public
class
Experiencia
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
long
id
;
@Column
(
name
=
"institucion"
)
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Institucion.java
View file @
e7f75029
...
...
@@ -10,7 +10,7 @@ import java.util.List;
@Table
(
name
=
"institucion"
)
public
class
Institucion
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
)
private
long
id
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java
View file @
e7f75029
...
...
@@ -3,8 +3,10 @@ package com.roshka.modelo;
import
javax.persistence.*
;
import
javax.validation.constraints.*
;
import
com.fasterxml.jackson.annotation.JsonIdentityInfo
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonManagedReference
;
import
com.fasterxml.jackson.annotation.ObjectIdGenerators
;
import
com.roshka.utils.Helper
;
import
java.util.ArrayList
;
...
...
@@ -14,9 +16,10 @@ import java.util.List;
@Entity
@Table
(
name
=
"postulante"
)
@JsonIdentityInfo
(
generator
=
ObjectIdGenerators
.
UUIDGenerator
.
class
,
property
=
"@UUID"
)
public
class
Postulante
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
)
private
long
id
;
...
...
@@ -30,10 +33,10 @@ public class Postulante {
@Size
(
max
=
255
)
private
String
apellido
;
@Column
(
name
=
"
ci
"
)
@Column
(
name
=
"
nro_document
"
)
@NotBlank
(
message
=
"Este campo no puede estar vacio"
)
@Size
(
max
=
120
)
private
String
ci
;
private
String
nroDocument
;
@Column
(
name
=
"correo"
)
@NotBlank
(
message
=
"Este campo no puede estar vacio"
)
...
...
@@ -61,7 +64,7 @@ public class Postulante {
@Column
(
name
=
"nivel_ingles"
)
@Min
(
value
=
1
)
@Max
(
value
=
5
)
private
l
ong
nivelIngles
;
private
L
ong
nivelIngles
;
@Column
(
name
=
"curriculum"
)
private
String
curriculum
;
...
...
@@ -74,9 +77,9 @@ public class Postulante {
@NotNull
private
Nacionalidad
nacionalidad
;
@Column
(
name
=
"tipo_documento"
,
length
=
2
)
@Not
Blank
(
message
=
"este campo debe estar completo"
)
private
String
tipoDocumento
;
@Column
(
name
=
"tipo_documento"
,
length
=
3
)
@Not
Null
private
TipoDocumento
tipoDocumento
;
@Column
(
name
=
"disponibilidad"
,
length
=
2
)
...
...
@@ -98,12 +101,11 @@ public class Postulante {
@OneToMany
(
mappedBy
=
"postulante"
,
cascade
=
CascadeType
.
ALL
)
private
List
<
ReferenciaPersonal
>
referencias
;
@ManyToMany
(
cascade
=
CascadeType
.
ALL
)
@ManyToMany
()
@JoinTable
(
uniqueConstraints
=
@UniqueConstraint
(
columnNames
=
{
"postulante_id"
,
"convocatoria_cargo_id"
}),
joinColumns
=
@JoinColumn
(
name
=
"postulante_id"
,
referencedColumnName
=
"id"
),
inverseJoinColumns
=
@JoinColumn
(
name
=
"convocatoria_cargo_id"
,
referencedColumnName
=
"id"
)
)
@JsonIgnore
private
List
<
ConvocatoriaCargo
>
postulaciones
;
...
...
@@ -131,12 +133,12 @@ public class Postulante {
this
.
apellido
=
apellido
;
}
public
String
get
Ci
()
{
return
ci
;
public
String
get
nroDocument
()
{
return
nroDocument
;
}
public
void
set
Ci
(
String
ci
)
{
this
.
ci
=
ci
;
public
void
set
nroDocument
(
String
nroDocument
)
{
this
.
nroDocument
=
nroDocument
;
}
public
String
getCorreo
()
{
...
...
@@ -175,11 +177,11 @@ public class Postulante {
this
.
resumen
=
resumen
;
}
public
l
ong
getNivelIngles
()
{
public
L
ong
getNivelIngles
()
{
return
nivelIngles
;
}
public
void
setNivelIngles
(
l
ong
nivelIngles
)
{
public
void
setNivelIngles
(
L
ong
nivelIngles
)
{
this
.
nivelIngles
=
nivelIngles
;
}
...
...
@@ -215,13 +217,13 @@ public class Postulante {
public
void
setEstadoCivil
(
EstadoCivil
estadoCivil
)
{
this
.
estadoCivil
=
estadoCivil
;
}
public
void
setTipoDocumento
(
String
tipoDocumento
)
{
public
void
setTipoDocumento
(
TipoDocumento
tipoDocumento
)
{
this
.
tipoDocumento
=
tipoDocumento
;
}
public
EstadoCivil
getEstadoCivil
()
{
return
estadoCivil
;
}
public
String
getTipoDocumento
()
{
public
TipoDocumento
getTipoDocumento
()
{
return
tipoDocumento
;
}
public
Nacionalidad
getNacionalidad
()
{
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java
View file @
e7f75029
...
...
@@ -21,7 +21,7 @@ uniqueConstraints=@UniqueConstraint(columnNames={"postulante_id", "tecnologia_id
public
class
PostulanteTecnologia
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"id"
)
private
long
id
;
...
...
@@ -29,12 +29,13 @@ public class PostulanteTecnologia {
@Min
(
value
=
1
)
@Max
(
value
=
5
)
private
Long
nivel
;
@ManyToOne
(
cascade
=
{
CascadeType
.
PERSIST
,
CascadeType
.
MERGE
},
optional
=
false
)
@ManyToOne
(
cascade
=
{
CascadeType
.
PERSIST
},
optional
=
false
)
@JoinColumn
private
Tecnologia
tecnologia
;
@ManyToOne
()
@JoinColumn
@JoinColumn
@JsonBackReference
(
value
=
"postulantetecnologia-postulante"
)
private
Postulante
postulante
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/RRHHUser.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
modelo
;
import
javax.persistence.*
;
@Entity
@Table
(
name
=
"recursos_humanos_user"
)
public
class
RRHHUser
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
@Column
(
nullable
=
false
,
unique
=
true
,
length
=
45
)
private
String
email
;
@Column
(
nullable
=
false
,
length
=
64
)
private
String
password
;
@Column
(
name
=
"first_name"
,
nullable
=
false
,
length
=
20
)
private
String
firstName
;
@Column
(
name
=
"last_name"
,
nullable
=
false
,
length
=
20
)
private
String
lastName
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getEmail
()
{
return
email
;
}
public
void
setEmail
(
String
email
)
{
this
.
email
=
email
;
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
String
getFirstName
()
{
return
firstName
;
}
public
void
setFirstName
(
String
firstName
)
{
this
.
firstName
=
firstName
;
}
public
String
getLastName
()
{
return
lastName
;
}
public
void
setLastName
(
String
lastName
)
{
this
.
lastName
=
lastName
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java
View file @
e7f75029
package
com
.
roshka
.
modelo
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.JoinColumn
;
import
javax.persistence.ManyToOne
;
import
javax.persistence.Table
;
import
javax.persistence.*
;
import
javax.validation.constraints.NotBlank
;
import
com.fasterxml.jackson.annotation.JsonBackReference
;
...
...
@@ -16,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
@Table
(
name
=
"referencia_personal"
)
public
class
ReferenciaPersonal
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
@NotBlank
...
...
@@ -31,7 +24,7 @@ public class ReferenciaPersonal {
@Column
(
name
=
"relacion"
)
private
String
relacion
;
@ManyToOne
(
optional
=
false
)
@ManyToOne
(
cascade
=
CascadeType
.
ALL
,
optional
=
false
)
@JoinColumn
@JsonBackReference
private
Postulante
postulante
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java
View file @
e7f75029
...
...
@@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank;
@Entity
@Table
(
name
=
"tecnologia"
)
public
class
Tecnologia
{
@GeneratedValue
(
strategy
=
GenerationType
.
AUTO
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Id
@Column
(
name
=
"id"
)
private
long
id
;
...
...
@@ -29,7 +29,7 @@ public class Tecnologia {
this
.
id
=
id
;
}
public
String
getNombre
()
{
return
nombre
.
toLowerCase
()
;
return
nombre
;
}
public
void
setNombre
(
String
nombre
)
{
this
.
nombre
=
nombre
;
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/TipoDocumento.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
modelo
;
import
com.fasterxml.jackson.annotation.JsonValue
;
public
enum
TipoDocumento
{
CI
(
"CI"
,
"Cedula de identidad"
),
DNI
(
"PAS"
,
"Pasaporte"
),
Otro
(
"Otro"
,
"Otro"
);
private
String
code
;
private
String
descripcion
;
private
TipoDocumento
(
String
code
,
String
descripcion
)
{
this
.
code
=
code
;
this
.
descripcion
=
descripcion
;
}
public
void
setDescripcion
(
String
descripcion
){
this
.
descripcion
=
descripcion
;
}
@JsonValue
public
String
getCode
()
{
return
code
;
}
public
String
getDescripcion
()
{
return
descripcion
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/modelo/TipoDocumentoConverter.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
modelo
;
import
java.util.Arrays
;
import
javax.persistence.AttributeConverter
;
import
javax.persistence.Converter
;
@Converter
(
autoApply
=
true
)
public
class
TipoDocumentoConverter
implements
AttributeConverter
<
TipoDocumento
,
String
>
{
@Override
public
String
convertToDatabaseColumn
(
TipoDocumento
modalidad
)
{
if
(
modalidad
==
null
)
{
return
null
;
}
return
modalidad
.
getCode
();
}
@Override
public
TipoDocumento
convertToEntityAttribute
(
String
code
)
{
if
(
code
==
null
)
{
return
null
;
}
return
Arrays
.
stream
(
TipoDocumento
.
values
())
.
filter
(
c
->
c
.
getCode
().
equals
(
code
))
.
findFirst
()
.
orElseThrow
(
IllegalArgumentException:
:
new
);
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/CargoRepository.java
View file @
e7f75029
package
com
.
roshka
.
repositorio
;
import
java.util.List
;
import
com.roshka.modelo.Cargo
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
CargoRepository
extends
JpaRepository
<
Cargo
,
Long
>{
public
List
<
Cargo
>
findByNombreContainingIgnoreCase
(
String
nombre
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/ConvocatoriaRepository.java
View file @
e7f75029
...
...
@@ -11,7 +11,8 @@ import org.springframework.data.jpa.repository.Query;
public
interface
ConvocatoriaRepository
extends
JpaRepository
<
ConvocatoriaCargo
,
Long
>
{
public
List
<
ConvocatoriaCargo
>
findByCargoId
(
Long
cargoId
);
//@Query(value="selec x from ConvocatoriaCargo x where (x.fechaFinal > ?1)",nativeQuery = true)
//public List<ConvocatoriaCargo> findConvocatoriaCargoByCargo(Date fechaFinal);
@Query
(
"select c from ConvocatoriaCargo c where ( ?1 is null and ?3 is null) or ( ( ( (c.fechaFin > ?2 and ?3 = 1) or (c.fechaFin < ?2 and ?3 = 0)) or ?3 is null ) and (c.cargoId = ?1 or ?1 is null) )"
)
public
List
<
ConvocatoriaCargo
>
f1ndByCargoAndEstado
(
TypedParameterValue
cargoId
,
Date
fecha
,
TypedParameterValue
isOpen
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java
View file @
e7f75029
package
com
.
roshka
.
repositorio
;
import
com.roshka.modelo.Postulante
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
com.roshka.modelo.Estudio
;
import
java.util.List
;
public
interface
EstudioRepository
extends
JpaRepository
<
Estudio
,
Long
>{
public
List
<
Estudio
>
findByPostulante
(
Postulante
postulante
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java
View file @
e7f75029
package
com
.
roshka
.
repositorio
;
import
com.roshka.modelo.Postulante
;
import
org.springframework.data.jpa.repository.JpaRepository
;
...
...
@@ -9,4 +10,6 @@ import com.roshka.modelo.Experiencia;
public
interface
ExperienciaRepository
extends
JpaRepository
<
Experiencia
,
Long
>
{
public
List
<
Experiencia
>
findByCargoLike
(
String
cargo
);
public
List
<
Experiencia
>
findByPostulante
(
Postulante
postulante
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java
View file @
e7f75029
...
...
@@ -2,15 +2,21 @@ package com.roshka.repositorio;
import
java.util.List
;
import
org.hibernate.jpa.TypedParameterValue
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
com.roshka.modelo.Disponibilidad
;
import
com.roshka.modelo.Postulante
;
public
interface
PostulanteRepository
extends
JpaRepository
<
Postulante
,
Long
>
{
@Query
(
"select p from Postulante p join p.estudios e on e.institucion LIKE %?1%"
)
public
Postulante
findByNroDocument
(
String
ci
);
@Query
(
"select p from Postulante p join p.estudios e on e.institucion.nombre LIKE %?1%"
)
public
List
<
Postulante
>
findByInstitucionEstudio
(
String
institucion
);
@Query
(
"select p from Postulante p "
+
...
...
@@ -31,8 +37,29 @@ public interface PostulanteRepository extends JpaRepository<Postulante,Long> {
"having sum(fecha_hasta-fecha_desde)>?1 * INTERVAL '1' month"
,
nativeQuery
=
true
)
public
List
<
Postulante
>
personasConExperienciaMayor
(
long
meses
);
@Query
(
"select pos from Postulante pos join PostulanteTecnologia pt on pt.postulante.id=pos.id "
+
"join Tecnologia tec on pt.tecnologia.id=tec.id "
+
"where tec.nombre=?1 and pt.nivel=?2"
)
public
List
<
Postulante
>
findByPostulanteTecnologiaM
(
String
tecno
,
long
idt
);
@Query
(
value
=
"select DISTINCT p "
+
"from Postulante p left join p.experiencias x "
+
"left join p.estudios e "
+
"left join p.tecnologias pt "
+
"left join p.postulaciones conv "
+
"where (?1 is null or lower(p.nombre) LIKE lower(?1) or lower(p.apellido) LIKE lower(?1) ) "
+
"and (p.disponibilidad = ?2 or ?2 is null) "
+
"and (p.nivelIngles >= ?3 or ?3 is null) "
+
"and (pt.nivel >= ?4 or ?4 is null) "
+
"and (pt.tecnologia.id = ?5 or ?5 is null) "
+
" and (e.institucion.id = ?6 or ?6 is null ) "
+
" and (conv.cargoId = ?7 or ?7 is null ) "
)
public
Page
<
Postulante
>
postulantesMultiFiltro
(
TypedParameterValue
nombre
,
Disponibilidad
disponibilidad
,
Long
nivelInges
,
Long
nivel
,
Long
tecnoId
,
Long
instId
,
Long
cargoId
,
Pageable
pageable
);
@Query
(
"SELECT p FROM Postulante p JOIN Estudio e ON p.id=e.postulante.id "
+
"where e.temaDeEstudio=?1"
)
public
List
<
Postulante
>
obtenerPostulantesPorCarrera
(
String
carrera
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java
View file @
e7f75029
package
com
.
roshka
.
repositorio
;
import
com.roshka.modelo.Postulante
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
com.roshka.modelo.PostulanteTecnologia
;
public
interface
PostulanteTecnologiaRepository
extends
JpaRepository
<
PostulanteTecnologia
,
Long
>{
import
java.util.List
;
public
interface
PostulanteTecnologiaRepository
extends
JpaRepository
<
PostulanteTecnologia
,
Long
>{
public
List
<
PostulanteTecnologia
>
findByPostulante
(
Postulante
postulante
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/RRHHUserRepository.java
0 → 100644
View file @
e7f75029
package
com
.
roshka
.
repositorio
;
import
com.roshka.modelo.RRHHUser
;
import
org.springframework.data.jpa.repository.JpaRepository
;
public
interface
RRHHUserRepository
extends
JpaRepository
<
RRHHUser
,
Long
>
{
RRHHUser
findByEmail
(
String
username
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/repositorio/TecnologiaRepository.java
View file @
e7f75029
...
...
@@ -2,9 +2,11 @@ package com.roshka.repositorio;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
java.util.List
;
import
com.roshka.modelo.Tecnologia
;
public
interface
TecnologiaRepository
extends
JpaRepository
<
Tecnologia
,
Long
>
{
public
List
<
Tecnologia
>
findByNombreContainingIgnoreCase
(
String
nombre
);
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/java/com/roshka/utils/Helper.java
View file @
e7f75029
...
...
@@ -2,6 +2,9 @@ package com.roshka.utils;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.YearMonth
;
import
java.time.ZoneOffset
;
import
java.time.temporal.ChronoUnit
;
import
java.util.Date
;
public
class
Helper
{
...
...
@@ -12,7 +15,7 @@ public class Helper {
*/
public
static
Date
convertirFecha
(
String
fecha
)
{
try
{
if
(
fecha
==
null
||
fecha
.
trim
().
equals
(
""
))
return
null
;
return
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
parse
(
fecha
);
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
...
...
@@ -21,4 +24,11 @@ public class Helper {
return
null
;
}
}
public
static
final
long
getMonthsDifference
(
Date
date1
,
Date
date2
)
{
YearMonth
m1
=
YearMonth
.
from
(
date1
.
toInstant
().
atZone
(
ZoneOffset
.
UTC
));
YearMonth
m2
=
YearMonth
.
from
(
date2
.
toInstant
().
atZone
(
ZoneOffset
.
UTC
));
return
m1
.
until
(
m2
,
ChronoUnit
.
MONTHS
)
+
1
;
}
}
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/resources/application.properties
View file @
e7f75029
spring.jpa.hibernate.ddl-auto
=
create-drop
spring.jpa.database-platform
=
org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql
=
true
#
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql
=
true
logging.level.org.hibernate.SQL
=
DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder
=
TRACE
#
logging.level.org.hibernate.SQL=DEBUG
#
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
spring.sql.init.mode
=
always
spring.sql.init.platform
=
postgres
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/resources/json/cargo.json
0 → 100644
View file @
e7f75029
[
{
"id"
:
1
,
"nombre"
:
"dev java"
},
{
"id"
:
2
,
"nombre"
:
"dev php"
}
]
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/resources/json/convocatoria.json
0 → 100644
View file @
e7f75029
[
{
"id"
:
1
,
"cargoId"
:
1
,
"fechaInicio"
:
"2021-11-01"
,
"fechaFin"
:
"2021-11-30"
,
"cupos"
:
20
},
{
"id"
:
2
,
"cargoId"
:
2
,
"fechaInicio"
:
"2021-11-01"
,
"fechaFin"
:
"2021-11-30"
,
"cupos"
:
20
}
]
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/resources/json/postulante.json
View file @
e7f75029
[
{
"resumen"
:
"In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"resumen"
:
"In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit."
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Taylor"
,
"apellido"
:
"Obrien"
,
"correo"
:
"gladysalexander@dadabase.com"
,
"
ci
"
:
5821432
,
"
nroDocument
"
:
5821432
,
"ciudadId"
:
238
,
"telefono"
:
"(950) 417-3681"
,
"fechaNacimiento"
:
"2021-08-16"
,
"nivelIngles"
:
1
,
"disponibilidad"
:
"C"
,
"experiencias"
:
[
{
"institucion"
:
"Fanfare"
,
"fechaDesde"
:
"2014-09-10"
,
"fechaHasta"
:
"2016-01-01"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"cargo"
:
"dba"
,
"descripcion"
:
"Enim qui Lorem ut magna."
,
"nombreReferencia"
:
"Marissa"
,
...
...
@@ -29,8 +30,8 @@
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-08-28"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"analista"
...
...
@@ -59,13 +60,14 @@
},
{
"resumen"
:
"Do nostrud aliqua adipisicing in sunt aute id do elit ut dolor ad aliquip."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Hopkins"
,
"apellido"
:
"Parks"
,
"correo"
:
"grahamgriffith@zilidium.com"
,
"
ci
"
:
4213361
,
"
nroDocument
"
:
4213361
,
"ciudadId"
:
96
,
"telefono"
:
"(866) 560-2541"
,
"fechaNacimiento"
:
"2021-09-04"
,
...
...
@@ -80,15 +82,15 @@
"cargo"
:
"developer frontend"
,
"descripcion"
:
"Consequat fugiat qui sint deserunt ullamco."
,
"nombreReferencia"
:
"Iva"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"telefonoReferencia"
:
"(947) 580-2363"
}
],
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-07-08"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"lic inf"
...
...
@@ -105,13 +107,14 @@
},
{
"resumen"
:
"Occaecat non cupidatat amet reprehenderit consectetur ullamco et."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Alejandra"
,
"apellido"
:
"Riggs"
,
"correo"
:
"ruthrobertson@homelux.com"
,
"
ci
"
:
4605787
,
"
nroDocument
"
:
4605787
,
"ciudadId"
:
30
,
"telefono"
:
"(876) 580-2411"
,
"fechaNacimiento"
:
"2021-01-28"
,
...
...
@@ -124,7 +127,7 @@
"fechaDesde"
:
"2014-08-26"
,
"fechaHasta"
:
"2016-01-01"
,
"cargo"
:
"dba"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"tipoExperiencia"
:
"Trabajo Normal"
,
"descripcion"
:
"Aute culpa ea mollit adipisicing dolore dolore amet adipisicing occaecat commodo enim cillum."
,
"nombreReferencia"
:
"Rose"
,
"telefonoReferencia"
:
"(853) 471-2006"
...
...
@@ -133,8 +136,8 @@
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-02-13"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"lic inf"
...
...
@@ -151,13 +154,14 @@
},
{
"resumen"
:
"Qui ullamco excepteur velit ad ullamco id id nisi irure dolore cupidatat mollit ullamco veniam."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Angelina"
,
"apellido"
:
"Wallace"
,
"correo"
:
"christiwalls@capscreen.com"
,
"
ci
"
:
4591352
,
"
nroDocument
"
:
4591352
,
"ciudadId"
:
65
,
"telefono"
:
"(931) 499-3122"
,
"fechaNacimiento"
:
"2021-06-05"
,
...
...
@@ -173,14 +177,14 @@
"descripcion"
:
"Aliquip occaecat minim dolor enim commodo."
,
"nombreReferencia"
:
"Elba"
,
"telefonoReferencia"
:
"(881) 568-2597"
,
"tipoExperiencia"
:
"Trabajo Normal"
"tipoExperiencia"
:
"Trabajo Normal"
}
],
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-12-22"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"ing inf"
...
...
@@ -197,13 +201,14 @@
},
{
"resumen"
:
"Deserunt tempor ut et eiusmod et labore Lorem."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Rivas"
,
"apellido"
:
"Owens"
,
"correo"
:
"shirleyguzman@equitox.com"
,
"
ci
"
:
3969318
,
"
nroDocument
"
:
3969318
,
"ciudadId"
:
143
,
"telefono"
:
"(972) 524-2610"
,
"fechaNacimiento"
:
"2021-09-09"
,
...
...
@@ -219,14 +224,14 @@
"descripcion"
:
"Dolore nulla deserunt fugiat est reprehenderit tempor qui excepteur."
,
"nombreReferencia"
:
"Crawford"
,
"telefonoReferencia"
:
"(903) 568-2045"
,
"tipoExperiencia"
:
"Trabajo Normal"
"tipoExperiencia"
:
"Trabajo Normal"
}
],
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-08-03"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"lic inf"
...
...
@@ -243,13 +248,14 @@
},
{
"resumen"
:
"Aliqua est adipisicing do exercitation sit laborum aliquip aliqua adipisicing enim aute."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Estelle"
,
"apellido"
:
"Gamble"
,
"correo"
:
"mclaughlinpate@enomen.com"
,
"
ci
"
:
2329745
,
"
nroDocument
"
:
2329745
,
"ciudadId"
:
248
,
"telefono"
:
"(933) 501-3525"
,
"fechaNacimiento"
:
"2021-03-24"
,
...
...
@@ -265,14 +271,14 @@
"descripcion"
:
"Do do est ad ea pariatur aliquip sit ipsum in duis laborum velit magna."
,
"nombreReferencia"
:
"Schultz"
,
"telefonoReferencia"
:
"(903) 420-3902"
,
"tipoExperiencia"
:
"Trabajo Normal"
"tipoExperiencia"
:
"Trabajo Normal"
}
],
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-07-13"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"ing inf"
...
...
@@ -289,13 +295,14 @@
},
{
"resumen"
:
"Officia eiusmod ut reprehenderit tempor consequat elit amet ex voluptate aute anim do."
,
"nacionalidad"
:
"Paraguayo"
,
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"ci"
,
"nacionalidad"
:
"Paraguayo"
,
"postulaciones"
:
[{
"id"
:
1
}],
"estadoCivil"
:
"Soltero"
,
"tipoDocumento"
:
"CI"
,
"nombre"
:
"Mariana"
,
"apellido"
:
"Ratliff"
,
"correo"
:
"loramiddleton@musanpoly.com"
,
"
ci
"
:
4519594
,
"
nroDocument
"
:
4519594
,
"ciudadId"
:
104
,
"telefono"
:
"(817) 492-2493"
,
"fechaNacimiento"
:
"2021-07-30"
,
...
...
@@ -311,15 +318,14 @@
"descripcion"
:
"Anim labore anim veniam deserunt ex aute."
,
"nombreReferencia"
:
"Francesca"
,
"telefonoReferencia"
:
"(961) 420-2150"
,
"tipoExperiencia"
:
"Trabajo Normal"
"tipoExperiencia"
:
"Trabajo Normal"
}
],
"estudios"
:
[
{
"tipoDeEstudio"
:
"TERCIARIO"
,
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"estado"
:
"SUSPENDIDO"
,
"institucion"
:
{
"nombre"
:
"UNA"
},
"fechaDesde"
:
"2014-10-03"
,
"fechaHasta"
:
"2016-01-01"
,
"temaDeEstudio"
:
"ing inf"
...
...
@@ -334,4 +340,4 @@
}
]
}
]
\ No newline at end of file
]
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/resources/static/main.js
View file @
e7f75029
var
cont_experiencia
=
0
;
let
cont_estudios
=
0
;
let
cont_tecnologia
=
0
;
var
cont_referencias
=
0
;
let
cont_cargo
=
0
;
const
experiencias
=
[];
const
estudios
=
[];
const
tecnologias
=
[];
let
noValidateFlag
=
false
;
const
postulaciones
=
[];
var
cont_referencias
=
0
;
const
referencias
=
[];
const
formValidator
=
function
()
{
'use strict'
...
...
@@ -23,13 +30,21 @@ const formValidator = function () {
if
(
!
form
.
checkValidity
())
{
event
.
preventDefault
()
event
.
stopPropagation
()
noValidateFlag
=
true
;
}
form
.
classList
.
add
(
'was-validated'
)
},
false
)
})
}
function
carg
(
elemento
)
{
var
element
=
document
.
getElementById
(
'descripcion'
);
if
(
elemento
==
"otro"
){
element
.
style
.
display
=
'block'
;
}
else
{
element
.
style
.
display
=
'none'
;
}
}
function
agregarFieldExpierncia
(
event
){
//recoger del form
const
pairs
=
{};
...
...
@@ -82,7 +97,7 @@ function agregarFieldExpierncia(event){
content
+=
`
<li id="exp-
${
index
}
">
${
exp
.
institucion
}
<button type="button" onclick="eliminarExperiencia(event)"> <span class="glyphicon glyphicon-trash"></span>
Tras
</button>
<button type="button" onclick="eliminarExperiencia(event)"> <span class="glyphicon glyphicon-trash"></span>
Eliminar
</button>
</li>
`
...
...
@@ -176,6 +191,7 @@ function serializeJSON (form) {
// Create a new FormData object
const
formData
=
new
FormData
(
form
);
// Create an object to hold the name/value pairs
const
pairs
=
{};
...
...
@@ -186,27 +202,33 @@ function serializeJSON (form) {
pairs
[
"experiencias"
]
=
experiencias
.
filter
(
exp
=>
exp
)
//eliminacion de nulos
pairs
[
"estudios"
]
=
estudios
.
filter
(
est
=>
est
)
//eliminacion de nulos
pairs
[
"tecnologias"
]
=
tecnologias
.
filter
(
tec
=>
tec
)
//eliminacion de nulos
pairs
[
"postulaciones"
]
=
postulaciones
.
filter
(
car
=>
car
)
//eliminacion de nulos
pairs
[
"referencias"
]
=
referencias
.
filter
(
tec
=>
tec
)
// Return the JSON string
return
JSON
.
stringify
(
pairs
,
null
,
2
);
}
async
function
postData
(
url
=
''
,
data
=
{})
{
var
token
=
document
.
querySelector
(
"meta[name='_csrf']"
).
content
;
var
headerxs
=
document
.
querySelector
(
"meta[name='_csrf_header']"
).
content
;
// Default options are marked with *
const
response
=
await
fetch
(
url
,
{
let
senddata
=
{
method
:
'POST'
,
// *GET, POST, PUT, DELETE, etc.
mode
:
'cors'
,
// no-cors, *cors, same-origin
cache
:
'no-cache'
,
// *default, no-cache, reload, force-cache, only-if-cached
credentials
:
'same-origin'
,
// include, *same-origin, omit
headers
:
{
'Content-Type'
:
'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
'Content-Type'
:
'application/json'
,
// 'Content-Type': 'application/x-www-form-urlencoded',
},
redirect
:
'follow'
,
// manual, *follow, error
referrerPolicy
:
'no-referrer'
,
// no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
body
:
data
// body data type must match "Content-Type" header
});
}
senddata
[
"headers"
][
headerxs
]
=
token
;
const
response
=
await
fetch
(
url
,
senddata
);
return
response
;
// parses JSON response into native JavaScript objects
}
formValidator
()
...
...
@@ -217,15 +239,18 @@ form.addEventListener("submit",(evt)=>{
// evt.stopPropagation()
// }
// form.classList.add('was-validated')
postData
(
'postulante'
,
serializeJSON
(
form
))
.
then
(
response
=>
{
if
(
response
.
status
==
200
||
response
.
status
==
302
){
location
.
replace
(
response
.
url
);
}
else
{
console
.
log
(
response
.
text
().
then
(
value
=>
console
.
log
(
value
)))
}
});
evt
.
preventDefault
();
if
(
!
noValidateFlag
){
postData
(
'postulante'
,
serializeJSON
(
form
))
.
then
(
response
=>
{
if
(
response
.
status
==
200
||
response
.
status
==
302
){
location
.
replace
(
response
.
url
);
}
else
{
console
.
log
(
response
.
text
().
then
(
value
=>
console
.
log
(
value
)))
}
});
evt
.
preventDefault
();
}
noValidateFlag
=
false
}
);
document
.
querySelector
(
"#btn-new-tech"
).
addEventListener
(
'click'
,()
=>
{
document
.
querySelector
(
"#tecnologia-nombre"
).
classList
.
remove
(
'd-none'
)})
...
...
@@ -320,7 +345,85 @@ function eliminarEstudio(event) {
//eliminar en html
event
.
target
.
parentElement
.
remove
()
}
/*--------------------------------------------------------------------*/
function
agregarFieldCargo
(){
//recoger del form
const
pairs
=
{};
const
formcar
=
document
.
querySelector
(
"[name=cargo-form]"
);
const
formData
=
new
FormData
(
formcar
);
//Validacion
let
returnFlag
=
false
;
let
requiredValues
=
[
"nombre"
]
formData
.
forEach
((
value
,
key
)
=>
{
if
(
requiredValues
.
includes
(
key
)
&&
value
===
""
&&
returnFlag
==
false
){
console
.
log
(
key
,
value
)
returnFlag
=
true
;
}
});
if
(
returnFlag
===
true
){
let
message
=
"Rellene "
for
(
let
i
=
0
;
i
<
requiredValues
.
length
;
i
++
){
message
+=
", "
+
requiredValues
[
i
];
}
message
+=
" como minimo."
alert
(
message
);
return
;
}
for
(
const
[
name
,
value
]
of
formData
){
pairs
[
name
]
=
value
}
console
.
log
(
pairs
)
for
(
let
i
=
0
;
i
<
cont_cargo
;
i
++
){
if
(
postulaciones
[
i
]
!==
null
){
if
(
postulaciones
[
i
][
"id"
]
===
pairs
[
"cargo-id"
]){
alert
(
"Ya has agregado ese cargo!"
)
cont_cargo
--
;
return
;
}
}
}
postulaciones
[
cont_cargo
]
=
{}
postulaciones
[
cont_cargo
][
"id"
]
=
pairs
[
"cargo-id"
]
//postulaciones[cont_cargo]["cargo"]=pairs["cargo-id"]=="-1"?{nombre: pairs["cargo-nombre"]}:{id: pairs["cargo-id"],nombre:document.querySelector('[name=cargo-id] > option[value="'+pairs["cargo-id"]+'"]').innerHTML}
console
.
log
(
postulaciones
)
formcar
.
reset
();
//imprimir lista actualizada
const
div
=
document
.
querySelector
(
"#cargos"
)
const
div1
=
document
.
createElement
(
'div'
);
let
content1
=
'<ul>'
for
(
let
index
=
0
;
index
<
postulaciones
.
length
;
index
++
)
{
const
car
=
postulaciones
[
index
];
if
(
car
==
null
)
continue
;
content1
+=
`
<li id="car-
${
index
}
">
${
document
.
querySelector
(
'[name=cargo-id] > option[value="'
+
car
.
id
+
'"]'
).
innerHTML
}
<button type="button" onclick="eliminarCargoPostulante(event)">Eliminar</button>
</li>
`
}
content1
+=
"</ul>"
div1
.
innerHTML
=
content1
div
.
innerHTML
=
''
;
div
.
appendChild
(
div1
);
cont_cargo
++
;
}
/*---------------------------------------------------------------------------------------------------*/
function
eliminarCargoPostulante
(
event
)
{
//eliminar del array
postulaciones
[
event
.
target
.
parentElement
.
id
.
split
(
"-"
)[
1
]]
=
null
//eliminar en html
event
.
target
.
parentElement
.
remove
()
}
/*--------------------------------------------------------------------*/
//evento para cambio de ciudad segun departamento
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/alerts.jsp
0 → 100644
View file @
e7f75029
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="container">
<c:if test="${not empty error}">
<div class="alert alert-danger alert-dismissible fade show" role="alert">
${error}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</c:if>
<c:if test="${not empty success}">
<div class="alert alert-success alert-dismissible fade show" role="alert">
${success}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</c:if>
</div>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/cargo-form.jsp
View file @
e7f75029
...
...
@@ -13,7 +13,7 @@
</head>
<body>
<div
class=
"container"
>
<form:form
action=
"/cargo"
method=
"post"
modelAttribute=
"cargo"
class=
"row row-cols-lg-auto g-3 align-items-center"
>
<form:form
action=
"/cargo
/${cargo.id == null ? '' : cargo.id}
"
method=
"post"
modelAttribute=
"cargo"
class=
"row row-cols-lg-auto g-3 align-items-center"
>
<div
class=
"col-12"
>
<form:label
class=
"form-label visually-hidden"
path=
"nombre"
>
Nombre del cargo
</form:label>
<form:input
type=
"text"
path=
"nombre"
class=
"form-control"
placeholder=
"Nombre del cargo"
/>
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/cargos.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<title>
Cargo
</title>
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin=
"anonymous"
>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity=
"sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin=
"anonymous"
></script>
</head>
<body
class=
"container"
>
<div>
<form>
<label
for=
"cargos"
>
Nombre:
</label>
<input
type=
"text"
name=
"nombre"
id=
"nombre"
value=
"${param.nombre}"
/>
<input
type=
"submit"
value=
"Buscar"
>
</form>
<a
href=
"/cargo"
>
Agregar Nuevo Cargo
</a>
</div>
<div>
<table
class=
"table"
>
<thead>
<tr>
<th
scope=
"col"
>
#
</th>
<th
scope=
"col"
>
Cargo
</th>
</tr>
</thead>
<tbody>
<c:forEach
items=
"${cargos}"
var=
"cargo"
varStatus=
"sta"
>
<tr>
<th
scope=
"row"
>
${sta.index+1}
</th>
<td>
${cargo.getNombre()}
</td>
<td><a
href=
"/convocatorias?cargoId=${cargo.id}"
>
Ver Convocatorias
</a></td>
<td><a
href=
"/cargo/${cargo.id}"
>
Editar cargo
</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/convocatoria-form.jsp
View file @
e7f75029
...
...
@@ -13,7 +13,7 @@
</head>
<body>
<div
class=
"container"
>
<form:form
action=
"/convocatoria"
method=
"post"
modelAttribute=
"convocatoria"
>
<form:form
action=
"/convocatoria
/${convocatoria.id == null ? '' : convocatoria.id}
"
method=
"post"
modelAttribute=
"convocatoria"
>
<div
class=
"mb-3"
>
<form:label
path=
"fechaInicioS"
class=
"form-label"
>
Fecha inicial
</form:label>
<form:input
type=
"date"
class=
"form-control"
path=
"fechaInicioS"
/>
...
...
@@ -37,9 +37,6 @@
</div>
<button
type=
"submit"
class=
"btn btn-primary"
>
Guardar
</button>
</form:form>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/convocatorias.jsp
View file @
e7f75029
...
...
@@ -30,7 +30,6 @@
<label
for=
"cerrado"
>
Cerrado
</label><br>
<input
type=
"submit"
value=
"Buscar"
>
</form>
<a
href=
"/cargo"
>
Agregar Nuevo Cargo
</a>
</div>
<div>
<a
href=
"/convocatoria"
>
Agregar Nueva Convocatoria
</a>
...
...
@@ -54,6 +53,7 @@
<td>
${convocatoria.getFechaFin().toString().split(" ")[0]}
</td>
<td>
${convocatoria.getCupos()}
</td>
<td>
Ver Postulantes
</td>
<td><a
href=
"/convocatoria/${convocatoria.id}"
>
Editar
</a></td>
</tr>
</c:forEach>
...
...
@@ -61,6 +61,7 @@
</tbody>
</table>
</div>
</body>
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp
0 → 100644
View file @
e7f75029
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<html>
<head>
</head>
<body>
<h2
style=
"text-align: center;"
>
DETALLE POSTULANTE
</h2>
<div
style=
"padding: 10px;margin: 3px;border: 1px solid black;"
>
<br><label>
INFORMACION GENERAL
</label><br>
<label>
Id: ${postulante.id}
</label><br>
<label>
Nombre: ${postulante.nombre}
</label><br>
<label>
Apellido ${postulante.apellido}
</label><br>
<label>
Tipo de documento: ${postulante.tipoDocumento}
</label><br>
<label>
Cedula: ${postulante.nroDocument}
</label><br>
<label>
Correo: ${postulante.correo}
</label><br>
<label>
Departamento: ${postulante.getCiudad().getDepartamento().getNombre()}
</label><br>
<label>
Ciudad: ${postulante.getCiudad().getNombre()}
</label><br>
<label>
Telefono: ${postulante.telefono}
</label><br><label>
<label>
Fecha de nacimiento: ${postulante.fechaNacimiento}
</label><br>
<label>
Resumen: ${postulante.resumen}
</label><br>
<label>
Nivel de ingles: ${postulante.nivelIngles}
</label><br>
<label>
Curriculum: ${postulante.curriculum}
</label><br>
<label>
Estado civil: ${postulante.estadoCivil}
</label><br>
<label>
Nacionalidad: ${postulante.nacionalidad}
</label><br>
<label>
Disponibilidad: ${postulante.disponibilidad}
</label><br>
<br><label>
TECNOLOGIAS
</label><br>
<c:forEach
items=
"${postulante.tecnologias}"
var=
"detalle_tecnologia"
>
<label>
Tecnologias: ${detalle_tecnologia.getTecnologia().getNombre()} -
</label>
<label>
Nivel de Tecnologia: ${detalle_tecnologia.getNivel()}
</label><br>
</c:forEach>
<br><label>
EXPERIENCIAS
</label><br>
<c:forEach
items=
"${postulante.experiencias}"
var=
"detalle_experiencia"
>
<label>
Institucion: ${detalle_experiencia.getInstitucion()}
</label><br>
<label>
Fecha Inicio: ${detalle_experiencia.getFechaDesde()}
</label><br>
<label>
Fecha Fin: ${detalle_experiencia.getFechaHasta()}
</label><br>
<label>
Referencia: ${detalle_experiencia.getNombreReferencia()}
</label><br>
<label>
Telefono de la referencia: ${detalle_experiencia.getTelefonoReferencia()}
</label><br>
<label>
Cargo: ${detalle_experiencia.getCargo()}
</label><br>
<label>
Motivo de salida: ${detalle_experiencia.getMotivoSalida()}
</label><br>
</c:forEach>
<br><label>
ESTUDIOS
</label><br>
<c:forEach
items=
"${postulante.estudios}"
var=
"detalle_estudios"
>
<label>
Institucion: ${detalle_estudios.getInstitucion().getNombre()}
</label><br>
<label>
SubNombre: ${detalle_estudios.getInstitucion().getSubNombre()}
</label><br>
<label>
Tipo de estudio: ${detalle_estudios.getTipoDeEstudio()}
</label><br>
<label>
Tema de estudio: ${detalle_estudios.getTemaDeEstudio()}
</label><br>
<label>
Fecha Inicio: ${detalle_estudios.getFechaDesde()}
</label><br>
<label>
Fecha Fin: ${detalle_estudios.getFechaHasta()}
</label><br>
<label>
Estado: ${detalle_estudios.getEstado()}
</label><br>
</c:forEach>
<br><label>
REFERENCIA PERSONAL
</label><br>
<c:forEach
items=
"${postulante.referencias}"
var=
"detalle_referencias"
>
<label>
Nombre: ${detalle_referencias.getNombre()}
</label>
<label>
Relacion: ${detalle_referencias.getRelacion()}
</label><br>
<label>
Telefono: ${detalle_referencias.getTelefono()}
</label><br>
</c:forEach>
<br><label>
CARGOS AL CUAL POSTULA
</label><br>
<c:forEach
items=
"${postulante.postulaciones}"
var=
"convocatoria"
>
<label>
Nombre: ${convocatoria.getCargo().getNombre()}
</label><br>
</c:forEach>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/exitoRegistro.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<html>
<head>
<link
href=
"https://fonts.googleapis.com/css?family=Nunito+Sans:400,400i,700,900&display=swap"
rel=
"stylesheet"
>
</head>
<style>
body
{
text-align
:
center
;
padding
:
40px
0
;
background
:
#EBF0F5
;
}
h1
{
color
:
#506BEE
;
font-family
:
"Nunito Sans"
,
"Helvetica Neue"
,
sans-serif
;
font-weight
:
900
;
font-size
:
40px
;
margin-bottom
:
10px
;
}
p
{
color
:
#404F5E
;
font-family
:
"Nunito Sans"
,
"Helvetica Neue"
,
sans-serif
;
font-size
:
20px
;
margin
:
0
;
}
i
{
color
:
#506BEE
;
font-size
:
100px
;
line-height
:
200px
;
margin-left
:
-15px
;
}
.card
{
background
:
white
;
padding
:
60px
;
border-radius
:
4px
;
box-shadow
:
0
2px
3px
#C8D0D8
;
display
:
inline-block
;
margin
:
0
auto
;
}
</style>
<body>
<div
class=
"card"
>
<div
style=
"border-radius:200px; height:200px; width:200px; background: #F8FAF5; margin:0 auto;"
>
<i
class=
"checkmark"
>
✓
</i>
</div>
<h1>
Genial!
</h1>
<p>
${mensaje1}
<br/>
${mensaje2}
</p>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/header.jsp
0 → 100644
View file @
e7f75029
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<header>
<div class="d-flex">
<div class="ml-auto">
<a href="/logout" class="btn btn-dark">Salir</a></div>
</div>
</header>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/index.jsp
View file @
e7f75029
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<link
href=
"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M"
crossorigin=
"anonymous"
>
<link
href=
"https://getbootstrap.com/docs/4.0/examples/signin/signin.css"
rel=
"stylesheet"
crossorigin=
"anonymous"
>
<title>
Document
</title>
</head>
<body>
<a
href=
"postulante"
>
Form postulante
</a>
<a
href=
"postulantes"
>
Lista de postulantes
</a>
<a
href=
"#"
>
Tecnologias
</a>
<a
href=
"convocatorias"
>
Lista de convocatorias
</a>
<div
class=
"container"
>
<jsp:include
page=
"header.jsp"
/>
<jsp:include
page=
"alerts.jsp"
/>
<a
href=
"postulante"
>
Form postulante
</a>
<a
href=
"postulantes"
>
Lista de postulantes
</a>
<a
href=
"/tecnologias"
>
Tecnologias
</a>
<a
href=
"convocatorias"
>
Lista de convocatorias
</a>
<a
href=
"cargos"
>
Lista de cargos
</a>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/listapostulantes.jsp
0 → 100644
View file @
e7f75029
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<html>
<head>
</head>
<body>
<div>
${postulante.id}
<br>
${postulante.nombre}
<br>
${postulante.apellido}
<br>
${postulante.ci}
<br>
${postulante.correo}
<br>
${postulante.ciudadId}
<br>
${postulante.telefono}
<br>
${postulante.fechaNacimiento}
<br>
${postulante.resumen}
<br>
${postulante.nivelIngles}
<br>
${postulante.curriculum}
<br>
${postulante.estadoCivil}
<br>
${postulante.nacionalidad}
<br>
${postulante.tipoDocumento}
<br>
${postulante.disponibilidad}
<br><br><br>
${postulante.getCiudad().getNombre()}
<br>
<c:forEach
items=
"${postulante.tecnologias}"
var=
"detalle_tecnologia"
>
${detalle_tecnologia.getTecnologia().getNombre()}
</c:forEach>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/login.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1, shrink-to-fit=no"
>
<meta
name=
"description"
content=
""
>
<meta
name=
"author"
content=
""
>
<title>
Login
</title>
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin=
"anonymous"
>
<link
href=
"https://getbootstrap.com/docs/4.0/examples/signin/signin.css"
rel=
"stylesheet"
crossorigin=
"anonymous"
>
</head>
<body>
<jsp:include
page=
"alerts.jsp"
/>
<section
class=
"vh-100"
style=
"background-color: #508bfc;"
>
<div
class=
"container py-5 h-100"
>
<div
class=
"row d-flex justify-content-center align-items-center h-100"
>
<div
class=
"col-12 col-md-8 col-lg-6 col-xl-5"
>
<div
class=
"card shadow-2-strong"
style=
"border-radius: 1rem;"
>
<div
class=
"card-body p-5 text-center"
>
<form:form
method=
"post"
action=
"/login"
>
<h3
class=
"mb-5"
>
Ingresar
</h3>
<div
class=
"form-outline mb-4"
>
<input
type=
"email"
id=
"typeEmailX-2"
class=
"form-control form-control-lg"
name=
"email"
placeholder=
"example@example.com"
/>
<label
class=
"form-label"
for=
"typeEmailX-2"
>
Email
</label>
</div>
<div
class=
"form-outline mb-4"
>
<input
type=
"password"
id=
"typePasswordX-2"
class=
"form-control form-control-lg"
name=
"password"
/>
<label
class=
"form-label"
for=
"typePasswordX-2"
>
Password
</label>
</div>
<button
class=
"btn btn-primary btn-lg btn-block"
type=
"submit"
>
Ingresar
</button>
</form:form>
<hr
class=
"my-4"
>
</div>
</div>
</div>
</div>
</div>
</section>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity=
"sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin=
"anonymous"
></script>
</body>
</html>
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/postulante-form.jsp
View file @
e7f75029
...
...
@@ -15,7 +15,7 @@
<style
type=
"text/css"
media=
"screen"
>
body
{
background-color
:
blue
background-color
:
#506BEE
}
.card
{
...
...
@@ -27,7 +27,7 @@
}
.image
span
{
background-color
:
blue
;
background-color
:
#506BEE
;
color
:
#fff
;
padding
:
6px
;
height
:
30px
;
...
...
@@ -43,7 +43,7 @@
}
.user-details
h4
{
color
:
blue
color
:
#506BEE
}
.ratings
{
...
...
@@ -75,7 +75,7 @@
.inputs
input
:focus
{
box-shadow
:
none
;
border
:
2px
solid
blue
border
:
2px
solid
#506BEE
}
.about-inputs
label
{
...
...
@@ -119,14 +119,12 @@
}
.add-experience
:hover
{
background
:
blue
;
background
:
#506BEE
;
color
:
#fff
;
cursor
:
pointer
;
border
:
solid
1px
blue
;
display
:
inline-block
;
border
:
solid
1px
#506BEE
}
#outer
{
...
...
@@ -193,18 +191,19 @@
</c:forEach>
</select>
</div>
<div
class=
"inputs mb-3 col-md-6"
>
<label
for=
"tipoDocumento"
class=
"form-label"
>
Tipo de documento
</label>
<input
type=
"text"
name=
"tipoDocumento"
class=
"form-control "
id=
"tipoDocumento"
required
>
<div
class=
"valid-feedback"
>
Luce Bien!
</div>
<div
class=
"inputs mb-3 col-md-6"
>
<label
for=
"tipoDocumento"
class=
"form-label"
>
Tipo de documento
</label>
<select
name=
"tipoDocumento"
id=
"tipoDocumento"
class=
"bg-light"
required
onchange=
'carg(this.value);'
>
<option
value=
'CI'
selected
>
C.I
</option>
<option
value=
'PAS'
>
Pasport
</option>
<option
value=
'Otro'
>
Otro
</option>
</select>
</div>
<div
class=
"inputs mb-3 col-md-6"
>
<label
for=
"
ci"
class=
"form-label"
>
Cedula de identidad
</label>
<input
type=
"number"
name=
"
ci"
class=
"form-control "
id=
"ci
"
required
>
<label
for=
"
nroDocument"
class=
"form-label"
>
Numero de Documento
</label>
<input
type=
"number"
name=
"
nroDocument"
class=
"form-control "
id=
"nroDocument
"
required
>
<div
class=
"valid-feedback"
>
Luce Bien!
</div>
...
...
@@ -246,11 +245,11 @@
<div
class=
"inputs col-md-6"
>
<label
for=
"nivelIngles"
class=
"form-label"
>
Nivel de ingles
</label>
<select
name=
"nivelIngles"
id=
"nivelIngles"
class=
"bg-light"
>
<option
value=
"1"
selected
>
1
</option>
<option
value=
"2"
>
2
</option>
<option
value=
"3"
>
3
</option>
<option
value=
"4"
>
4
</option>
<option
value=
"5"
>
5
</option>
<option
value=
"1"
selected
>
Ingles muy basico
</option>
<option
value=
"2"
>
Comprendo algunas cosas y puedo leer con la ayuda del traductor
</option>
<option
value=
"3"
>
Puedo leer tranquilamente
</option>
<option
value=
"4"
>
Puedo escribir documentacion
</option>
<option
value=
"5"
>
Puedo escribir y hablar tranquilamente
</option>
</select>
</div>
...
...
@@ -272,12 +271,17 @@
</select>
</div>
<div
class=
" p-3 py-5"
>
<div
class=
" d-flex justify-content-between align-items-center experience"
>
<span
class=
"border px-3 p-1 add-experience"
data-toggle=
"modal"
data-target=
"#experienciaForm"
>
<i
class=
"fa fa-plus"
></i>
Agregar Experiencia
</span>
</div><br>
<div
class=
"inputs p-3 py-5"
>
<div
class=
" inputs d-flex justify-content-between align-items-center experience"
><span
class=
"border px-3 p-1 add-experience"
data-toggle=
"modal"
data-target=
"#cargoForm"
><i
class=
"fa fa-plus"
></i>
Cargo al que postulas
</span></div><br>
</div>
<div
class=
"mt-3 gap-2 d-flex justify-content-between"
id=
"cargos"
>
</div>
<div
class=
"inputs p-3 py-5"
>
<div
class=
" inputs d-flex justify-content-between align-items-center experience"
><span
class=
"border px-3 p-1 add-experience"
data-toggle=
"modal"
data-target=
"#experienciaForm"
><i
class=
"fa fa-plus"
></i>
Agregar Experiencia
</span></div><br>
</div>
<div
class=
"mt-3 gap-2 d-flex justify-content-between"
id=
"experiencias"
>
...
...
@@ -310,14 +314,44 @@
<div
class=
"mt-3 gap-2 d-flex justify-content-end"
>
<
button
class=
"px-3 btn btn-sm btn-outline-primary"
>
Cancelar
</button>
<
a
class=
"px-3 btn btn-sm btn-outline-primary"
href=
"/postulante"
>
Cancelar
</a>
<button
class=
"px-3 btn btn-sm btn-primary"
type=
"submit"
>
Guardar
</button>
</div>
</div>
</div>
</div>
</form>
<!---------------------------------------Modal de Cargos disponibles---------------------------------------------------------------->
<div
class=
"modal fade"
id=
"cargoForm"
tabindex=
"-2"
role=
"dialog"
aria-labelledby=
"cargoForm"
aria-hidden=
"true"
>
<div
class=
"modal-dialog"
role=
"document"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h5
class=
"modal-title"
id=
"exampleModalLabel"
>
CargosDisponibles
</h5>
<button
type=
"button"
class=
"close"
data-dismiss=
"modal"
aria-label=
"Close"
>
<span
aria-hidden=
"true"
>
×
</span>
</button>
</div>
<div
class=
"modal-body"
>
<form
name=
"cargo-form"
class=
"needs-validation"
novalidate
>
<label
for=
"cargo-nombre"
class=
"form-label"
>
Cargo
</label>
<div
class=
"input-group mb-3"
>
<select
class=
"form-select"
name=
"cargo-id"
aria-label=
"Default select example"
required
>
<option
value=
"-1"
selected
>
Open this select menu
</option>
<c:forEach
items=
"${CargosDisponibles}"
var=
"convocatoria"
>
<option
value=
"${convocatoria.getId()}"
>
${convocatoria.getCargo().getNombre()}
</option>
</c:forEach>
>
</select>
</div>
</form>
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-dismiss=
"modal"
>
Close
</button>
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"agregarFieldCargo()"
data-dismiss=
"modal"
>
Agregar
</button>
</div>
</div>
</div>
</div>
<!-------------------------------------------------------------------------------------------------------------------------->
<!--Modal de Experiencia-->
<div
class=
"modal fade"
id=
"experienciaForm"
tabindex=
"-1"
role=
"dialog"
aria-labelledby=
"experienciaForm"
aria-hidden=
"true"
>
...
...
@@ -333,22 +367,22 @@
<form
name=
"experiencia-form"
class=
"needs-validation"
novalidate
>
<div
class=
"inputs"
>
<label
for=
"institucion"
class=
"inputs form-label"
>
Institucion
</label>
<input
type=
"text"
class=
"inputs form-control "
name=
"institucion"
id=
"institucion"
required
>
<label
for=
"institucion
Experiencia
"
class=
"inputs form-label"
>
Institucion
</label>
<input
type=
"text"
class=
"inputs form-control "
name=
"institucion"
id=
"institucion
Experiencia
"
required
>
</div>
<div
class=
"inputs"
>
<label
for=
"fechaDesde"
class=
"form-label"
>
Fecha Desde
</label>
<input
type=
"date"
class=
"form-control
"
name=
"fechaDesde"
id=
"fechaDesde
"
required
>
<label
for=
"fechaDesde
Experiencia
"
class=
"form-label"
>
Fecha Desde
</label>
<input
type=
"date"
class=
"form-control
"
name=
"fechaDesde"
id=
"fechaDesdeExperiencia
"
required
>
</div>
<div
class=
"inputs"
>
<label
for=
"fechaHasta"
class=
"form-label"
>
Fecha Hasta
</label>
<input
type=
"date"
class=
"form-control
"
name=
"fechaHasta"
id=
"fechaHast
a"
>
<label
for=
"fechaHasta
Experiencia
"
class=
"form-label"
>
Fecha Hasta
</label>
<input
type=
"date"
class=
"form-control
"
name=
"fechaHasta"
id=
"fechaHastaExperienci
a"
>
</div>
<div
class=
"inputs"
>
<label
for=
"cargo"
class=
"form-label"
>
Cargo
</label>
<input
type=
"text"
class=
"form-control
"
name=
"cargo"
id=
"cargo"
required
>
<input
type=
"text"
class=
"form-control "
name=
"cargo"
id=
"cargo"
required
>
</div>
<div
class=
"inputs"
>
...
...
@@ -416,7 +450,7 @@
<input
type=
"text"
class=
"form-control d-none"
name=
"tecnologia-nombre"
id=
"tecnologia-nombre"
>
<label
for=
"nivel"
class=
"form-label"
>
Nivel
</label>
<input
type=
"
number"
class=
"form-control"
name=
"nivel"
id=
"nivel
"
required
>
<input
type=
"
range"
class=
"form-range"
name=
"nivel"
id=
"nivel"
min=
"1"
max=
"5
"
required
>
</form>
</div>
<div
class=
"modal-footer"
>
...
...
@@ -455,8 +489,8 @@
<
%
--
<
label
for=
"tipoDeEstudio"
class=
"form-label"
>
Tipo De Estudio
</label>
--%>
<
%
--
<
input
type=
"text"
class=
"form-control "
name=
"tipoDeEstudio"
id=
"tipoDeEstudio"
>
--%>
<div
class=
"form-group"
>
<label
for=
"institucion"
class=
"form-label"
>
Institucion
</label>
<input
type=
"text"
class=
"form-control"
name=
"institucion"
id=
"institucion"
required
>
<label
for=
"institucion
Estudio
"
class=
"form-label"
>
Institucion
</label>
<input
type=
"text"
class=
"form-control"
name=
"institucion"
id=
"institucion
Estudio
"
required
>
</div>
<div
class=
"form-group"
>
<label
for=
"temaDeEstudio"
class=
"form-label"
>
Carrera/Bachiller/Tema de Curso
</label>
...
...
@@ -472,12 +506,12 @@
</select>
</div>
<div
class=
"form-group"
>
<label
for=
"fechaDesde"
class=
"form-label"
>
Fecha Desde
</label>
<input
type=
"date"
class=
"form-control "
name=
"fechaDesde"
id=
"fechaDesde"
required
>
<label
for=
"fechaDesde
Estudio
"
class=
"form-label"
>
Fecha Desde
</label>
<input
type=
"date"
class=
"form-control "
name=
"fechaDesde"
id=
"fechaDesde
Estudio
"
required
>
</div>
<div
class=
"form-group"
>
<label
for=
"fechaHasta"
class=
"form-label"
>
Fecha Hasta
</label>
<input
type=
"date"
class=
"form-control "
name=
"fechaHasta"
id=
"fechaHasta"
>
<label
for=
"fechaHasta
Estudio
"
class=
"form-label"
>
Fecha Hasta
</label>
<input
type=
"date"
class=
"form-control "
name=
"fechaHasta"
id=
"fechaHasta
Estudio
"
>
</div>
...
...
@@ -490,6 +524,8 @@
</div>
</div>
</div>
<meta
name=
"_csrf"
content=
"${_csrf.token}"
/>
<meta
name=
"_csrf_header"
content=
"${_csrf.headerName}"
/>
<!--Modal de referencias-->
<div
class=
"modal fade"
id=
"referenciaForm"
tabindex=
"-1"
role=
"dialog"
aria-labelledby=
"referenciaForm"
aria-hidden=
"true"
>
<div
class=
"modal-dialog"
role=
"document"
>
...
...
@@ -530,7 +566,6 @@
</div>
<!-- Optional JavaScript; choose one of the two! -->
<script
src=
"https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity=
"sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin=
"anonymous"
></script>
...
...
@@ -538,7 +573,38 @@
<script
src=
"https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
integrity=
"sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
crossorigin=
"anonymous"
></script>
<script>
var
ciudades
=
$
{
ciudades
};
(
function
(){
var
today
=
new
Date
();
var
dd
=
today
.
getDate
();
var
mm
=
today
.
getMonth
()
+
1
;
//January is 0!
var
yyyy
=
today
.
getFullYear
();
if
(
dd
<
10
)
{
dd
=
'0'
+
dd
;
}
if
(
mm
<
10
)
{
mm
=
'0'
+
mm
;
}
today
=
yyyy
+
'-'
+
mm
+
'-'
+
dd
;
let
fechaDesdeEstudio
=
document
.
querySelector
(
"#fechaDesdeEstudio"
);
let
fechaDesdeExperiencia
=
document
.
querySelector
(
"#fechaDesdeExperiencia"
);
let
fechaHastaEstudio
=
document
.
querySelector
(
"#fechaHastaEstudio"
);
let
fechaHastaExperiencia
=
document
.
querySelector
(
"#fechaHastaExperiencia"
);
fechaDesdeEstudio
.
setAttribute
(
"max"
,
today
);
fechaDesdeExperiencia
.
setAttribute
(
"max"
,
today
);
fechaDesdeExperiencia
.
addEventListener
(
"change"
,
()
=>
{
fechaHastaExperiencia
.
setAttribute
(
"min"
,
fechaDesdeExperiencia
.
value
)
})
fechaDesdeEstudio
.
addEventListener
(
"change"
,
()
=>
{
fechaHastaEstudio
.
setAttribute
(
"min"
,
fechaDesdeEstudio
.
value
)
})
})()
</script>
<script
src=
"./main.js"
></script>
</body>
...
...
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/postulantes.jsp
View file @
e7f75029
...
...
@@ -13,28 +13,57 @@
</head>
<body
class=
"container"
>
<div
id=
"buscador"
>
<div
class=
"dropdown"
id=
"experiencia"
>
<a
class=
"btn btn-secondary dropdown-toggle"
href=
"#"
role=
"button"
id=
"dropdownMenuLink"
data-bs-toggle=
"dropdown"
aria-expanded=
"false"
>
Experiencia
</a>
<ul
class=
"dropdown-menu"
aria-labelledby=
"dropdownMenuLink"
>
<li><a
class=
"dropdown-item"
href=
"#"
>
Junior
</a></li>
<li><a
class=
"dropdown-item"
href=
"#"
>
Semisenior
</a></li>
<li><a
class=
"dropdown-item"
href=
"#"
>
Senior
</a></li>
</ul>
</div>
<div
class=
"dropdown"
id=
"tecnologia"
>
<a
class=
"btn btn-secondary dropdown-toggle"
href=
"#"
role=
"button"
id=
"dropdownMenuLink"
data-bs-toggle=
"dropdown"
aria-expanded=
"false"
>
Tecnologia
</a>
<form
name=
"buscador"
>
<label
for=
"nombre"
>
Nombre
</label>
<input
type=
"text"
name=
"nombre"
id=
"nombre"
value=
"${param.nombre}"
>
<button>
Buscar
</button>
<br>
<label
for=
"dispo"
>
Disponbilidad
</label>
<select
name=
"dispo"
id=
"dispo"
>
<option
value=
""
>
Seleccione una opcion
</option>
<c:forEach
items=
"${disponibilidades}"
var=
"disponibilidad"
>
<option
value=
"${disponibilidad}"
${
param
.
dispo =
=
disponibilidad
?
"
selected
"
:
""}
>
${disponibilidad.getDescripcion()}
</option>
</c:forEach>
</select>
<label
for=
"tecId"
>
Tecnologias
</label>
<select
name=
"tecId"
id=
"tecId"
>
<option
value=
""
>
Seleccione una opcion
</option>
<c:forEach
items=
"${tecnologias}"
var=
"tecnologia"
>
<option
value=
"${tecnologia.id}"
${
param
.
tecId =
=
tecnologia
.
id
?
"
selected
"
:
""}
>
${tecnologia.nombre}
</option>
</c:forEach>
</select>
<label
for=
"instId"
>
Institucion Educativa
</label>
<select
name=
"instId"
id=
"instId"
>
<option
value=
""
>
Seleccione una opcion
</option>
<c:forEach
items=
"${institucionesEducativas}"
var=
"inst"
>
<option
value=
"${inst.id}"
${
param
.
instId =
=
inst
.
id
?
"
selected
"
:
""}
>
${inst.nombre}
</option>
</c:forEach>
</select>
<br>
<label
for=
"lvlEng"
>
Nivel de Ingles
</label>
<select
name=
"lvlEng"
id=
"lvlEng"
>
<option
value=
""
>
Seleccione una opcion
</option>
<c:forEach
var =
"lvl"
begin =
"1"
end =
"5"
>
<option
value=
"${lvl}"
${
param
.
lvlEng =
=
lvl
?
"
selected
"
:
""}
>
${lvl}
</option>
</c:forEach>
</select>
<label
for=
"lvlTec"
>
Nivel de Tecnologia
</label>
<select
name=
"lvlTec"
id=
"lvlTec"
>
<option
value=
""
>
Seleccione una opcion
</option>
<c:forEach
var =
"lvl"
begin =
"1"
end =
"5"
>
<option
value=
"${lvl}"
${
param
.
lvlTec =
=
lvl
?
"
selected
"
:
""}
>
${lvl}
</option>
</c:forEach>
</select>
<label
for=
"expInMonths"
>
Experiencia en general
</label>
<select
name=
"expInMonths"
id=
"expInMonths"
>
<option
value=
""
>
Seleccione una opcion
</option>
<option
value=
"6"
>
Mayor a 6 meses
</option>
<option
value=
"12"
>
Mayor a 1 año
</option>
<option
value=
"36"
>
Mayor a 3 años
</option>
<option
value=
"60"
>
Mayor a 5 años
</option>
</select>
<ul
class=
"dropdown-menu"
aria-labelledby=
"dropdownMenuLink"
>
<c:forEach
items=
"${tecnologias}"
var=
"tecnologia"
>
<li><a
class=
"dropdown-item"
href=
"?tec=${tecnologia.id}"
>
${tecnologia.nombre}
</a></li>
</c:forEach>
</ul>
</div>
</form>
</div>
<table
class=
"table"
>
<thead>
...
...
@@ -54,21 +83,51 @@
<td>
${postulante.nombre} ${postulante.apellido}
</td>
<td>
${postulante.disponibilidad.getDescripcion()}
</td>
<td>
${postulante.nivelIngles}
</td>
<td>
0
</td>
<td>
${postulante.experienciaMeses}
</td>
<td>
<c:forEach
items=
"${postulante.tecnologias}"
var=
"detalle_tecnologia"
varStatus=
"staTec"
>
${detalle_tecnologia.getTecnologia().getNombre()}${not staTec.last ? "," : ""}
${detalle_tecnologia.getTecnologia().getNombre()}${not staTec.last ? "," : ""}
</c:forEach>
</td>
</tr>
<td><a
href=
"/postulante/${postulante.id}"
>
Ver
</a></td>
</tr>
</c:forEach>
</tbody>
</table>
<div
id=
"paginator"
>
</tbody>
</table>
<div>
<nav
aria-label=
"Page navigation example"
>
<ul
class=
"pagination"
>
<c:forEach
begin=
"1"
end=
"${pages}"
var=
"nro"
>
<li
class=
"page-item ${(param.nroPagina == null and nro == 1) or param.nroPagina == nro-1 ? 'active' : ''}"
><a
class=
"page-link"
href=
"javascript:buscarPagina(${nro})"
>
${nro}
</a></li>
</c:forEach>
</ul>
</nav>
</div>
<script>
function
habilitarLvlTec
(){
//si se selecciono una tecnologia entonces permitir seleccionar un nivel
lvlTec
.
disabled
=
tecId
.
value
==
false
if
(
lvlTec
.
disabled
){
lvlTec
.
firstElementChild
.
selected
=
true
;
}
}
function
buscarPagina
(
nro
){
nro
--
const
aBuscar
=
'nroPagina='
+
nro
if
(
!
location
.
search
)
location
.
search
=
"?"
+
aBuscar
const
inicial
=
location
.
search
.
search
(
aBuscar
);
if
(
inicial
==-
1
){
//si no se encuentra y hay otros queries
location
.
search
=
"&"
+
aBuscar
}
location
.
search
.
replace
(
'nroPagina='
,
aBuscar
)
}
const
tecId
=
document
.
querySelector
(
"#tecId"
);
const
lvlTec
=
document
.
querySelector
(
"#lvlTec"
);
tecId
.
addEventListener
(
'change'
,
habilitarLvlTec
);
habilitarLvlTec
()
</script>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/register_success.jsp
0 → 100644
View file @
e7f75029
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"ISO-8859-1"
>
<title>
Registration Success
</title>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"/webjars/bootstrap/css/bootstrap.min.css"
/>
</head>
<body>
<div
class=
"container text-center"
>
<h3>
You have signed up successfully!
</h3>
<h4><a
href=
"${pageContext.request.contextPath}/login"
>
Click here to Login
</a></h4>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/registration.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<html>
<head>
<meta
charset=
"ISO-8859-1"
>
<title>
Registration Success
</title>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin=
"anonymous"
>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity=
"sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin=
"anonymous"
></script>
</head>
<style>
@media
(
min-width
:
1025px
)
{
.h-custom
{
height
:
100vh
!important
;
}
}
</style>
<body>
<section
class=
"h-100 h-custom"
>
<div
class=
"container py-5 h-100"
>
<div
class=
"row d-flex justify-content-center align-items-center h-100"
>
<div
class=
"col-lg-8 col-xl-6"
>
<div
class=
"card rounded-3"
>
<img
src=
"https://cdn.pixabay.com/photo/2013/08/09/05/54/layer-170971_960_720.jpg"
class=
"w-100"
style=
"border-top-left-radius: .3rem; border-top-right-radius: .3rem;height: 250px;"
alt=
"Sample photo"
;
>
<div
class=
"card-body p-4 p-md-5"
>
<h3
class=
"mb-4 pb-2 pb-md-0 mb-md-5 px-md-2"
>
Informacion de Registro
</h3>
<form:form
action=
"/process_register"
class=
"px-md-2"
method=
"POST"
modelAttribute=
"user"
>
<div
class=
"form-outline mb-4"
>
<form:label
path=
"email"
class=
"form-label"
>
Email
</form:label>
<form:input
path=
"email"
type=
"email"
class=
"form-control"
required=
"required"
></form:input>
</div>
<div
class=
"row"
>
<div
class=
"col-md-6 mb-4"
>
<div
class=
"form-outline"
>
<form:label
path=
"firstName"
class=
"form-label"
>
Nombre
</form:label>
<form:input
path=
"firstName"
class=
"form-control"
></form:input>
</div>
</div>
<div
class=
"col-md-6 mb-4"
>
<div
class=
"form-outline"
>
<form:label
path=
"lastName"
class=
"form-label"
>
Apellido
</form:label>
<form:input
path=
"lastName"
class=
"form-control"
></form:input>
</div>
</div>
</div>
<div
class=
"mb-4"
>
<form:label
path=
"password"
class=
"form-label"
>
Contrasena
</form:label>
<form:input
type=
"password"
path=
"password"
class=
"form-control"
required=
"required"
></form:input>
</div>
<div
class=
"row mb-4 pb-2 pb-md-0 mb-md-5"
>
<div
class=
"col-md-6"
>
<div
class=
"form-outline"
>
<input
type=
"text"
id=
"form3Example1w"
class=
"form-control"
name=
"registrationCode"
required
/>
<label
class=
"form-label"
for=
"form3Example1w"
>
Registration code
</label>
</div>
</div>
</div>
<button
type=
"submit"
class=
"btn btn-success btn-lg mb-1"
>
Submit
</button>
</form:form>
</div>
</div>
</div>
</div>
</div>
</section>
</body>
</html>
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/tecnologia-form.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<!-- Bootstrap CSS -->
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin=
"anonymous"
>
<title>
Hello, world!
</title>
<style
type=
"text/css"
media=
"screen"
>
body
{
background-color
:
rgba
(
98
,
0
,
255
,
0
)
}
</style>
</head>
<body>
<form:form
action=
"/tecnologia/${tecnologia.id == null ? '' : tecnologia.id}"
method=
"post"
modelAttribute=
"tecnologia"
>
<form:label
path=
"nombre"
>
name:
</form:label>
<form:input
type=
"text"
path=
"nombre"
/>
<input
type=
"submit"
value=
"submit"
/>
</form:form>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
curriculumsearch/src/main/webapp/jsp/tecnologias.jsp
0 → 100644
View file @
e7f75029
<
%@
taglib
prefix=
"c"
uri=
"http://java.sun.com/jsp/jstl/core"
%
>
<
%@
taglib
prefix=
"form"
uri=
"http://www.springframework.org/tags/form"
%
>
<
%@
page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%
>
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<title>
Tecnologia
</title>
<link
href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
rel=
"stylesheet"
integrity=
"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
crossorigin=
"anonymous"
>
<script
src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity=
"sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin=
"anonymous"
></script>
</head>
<body
class=
"container"
>
<div>
<form>
<label
for=
"tecnologias"
>
Nombre:
</label>
<input
type=
"text"
name=
"nombre"
id=
"nombre"
value=
"${param.nombre}"
/>
<input
type=
"submit"
value=
"Buscar"
>
</form>
<a
href=
"/tecnologia"
>
Agregar Nueva Tecnologia
</a>
</div>
<div>
<table
class=
"table"
>
<thead>
<tr>
<th
scope=
"col"
>
#
</th>
<th
scope=
"col"
>
Tecnologia
</th>
</tr>
</thead>
<tbody>
<c:forEach
items=
"${tecnologias}"
var=
"tecnologia"
varStatus=
"sta"
>
<tr>
<th
scope=
"row"
>
${sta.index+1}
</th>
<td>
${tecnologia.getNombre()}
</td>
<td><a
href=
"/tecnologia/${tecnologia.id}"
>
Editar tecnologia
</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
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