Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
BackEnd-V2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Joel Andres Molina Velez
BackEnd-V2
Commits
ccaec483
Commit
ccaec483
authored
Jun 26, 2023
by
Joel Andres Molina Velez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Se corrigen los servicios de ModelUzyTavClasPre
parent
1cf4ef36
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
114 additions
and
62 deletions
+114
-62
UzyTavClasPreController.java
...lidad/MovilidadWS/Controller/UzyTavClasPreController.java
+25
-16
DaoUzyTavClasPre.java
.../edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTavClasPre.java
+2
-0
UzyTavClasPreMapper.java
...ilidadWS/Mapper/Components_Class/UzyTavClasPreMapper.java
+32
-3
ModelUzyTavClasPre.java
.../espe/movilidad/MovilidadWS/Model/ModelUzyTavClasPre.java
+6
-4
IServiceUzyTavClasPre.java
...ilidadWS/Service/UzyTavClasPre/IServiceUzyTavClasPre.java
+6
-7
ServiceUzyTavClasPre.java
...vilidadWS/Service/UzyTavClasPre/ServiceUzyTavClasPre.java
+43
-32
No files found.
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Controller/UzyTavClasPreController.java
View file @
ccaec483
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Controller
;
import
ec.edu.espe.movilidad.MovilidadWS.
Model.Model
UzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.
Dto.Dto
UzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavClasPre.IServiceUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Service.UzyTavClasPre.IServiceUzyTavClasPre
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.List
;
import
java.util.List
;
import
static
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Constant
.
GlobalConstants
.
V1_API_VERSION
;
import
static
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Constant
.
GlobalConstants
.
V1_API_VERSION
;
...
@@ -16,44 +16,53 @@ import static ec.edu.espe.movilidad.MovilidadWS.Constant.GlobalConstants.V1_API_
...
@@ -16,44 +16,53 @@ import static ec.edu.espe.movilidad.MovilidadWS.Constant.GlobalConstants.V1_API_
@RequestMapping
(
V1_API_VERSION
+
"/claspre"
)
@RequestMapping
(
V1_API_VERSION
+
"/claspre"
)
public
class
UzyTavClasPreController
{
public
class
UzyTavClasPreController
{
@Autowired
IServiceUzyTavClasPre
serviceUzyTavClasPre
;
private
final
IServiceUzyTavClasPre
serviceUzyTavClasPre
;
public
UzyTavClasPreController
(
IServiceUzyTavClasPre
serviceUzyTavClasPre
)
{
this
.
serviceUzyTavClasPre
=
serviceUzyTavClasPre
;
}
@GetMapping
(
"/exampleFindId/{id}"
)
@GetMapping
(
"/exampleFindId/{id}"
)
public
ResponseEntity
<
Model
UzyTavClasPre
>
ListarPorID
(
@PathVariable
Long
id
)
{
public
ResponseEntity
<
Dto
UzyTavClasPre
>
ListarPorID
(
@PathVariable
Long
id
)
{
return
new
ResponseEntity
<>(
serviceUzyTavClasPre
.
ListarPorID
(
id
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>(
serviceUzyTavClasPre
.
ListarPorID
(
id
),
HttpStatus
.
OK
);
}
}
@GetMapping
(
"/getAll"
)
@GetMapping
(
"/getAll"
)
public
ResponseEntity
<
List
<
ModelUzyTavClasPre
>>
findAllWithClasificadorPresup
()
{
public
ResponseEntity
<
List
<
DtoUzyTavClasPre
>>
ListarRegistros
()
{
List
<
ModelUzyTavClasPre
>
registros
=
serviceUzyTavClasPre
.
findAllWithClasificadorPresup
(
);
return
new
ResponseEntity
<>(
serviceUzyTavClasPre
.
ListarRegistros
(),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>(
registros
,
HttpStatus
.
OK
);
}
}
@PostMapping
(
"/guardar"
)
@PostMapping
(
"/guardar"
)
public
ResponseEntity
<
ModelUzyTavClasPre
>
guardar
(
@RequestBody
ModelUzyTavClasPre
modelUzyTavClasPre
,
@RequestParam
(
"uzytclasificador_presup_id"
)
Long
uzytclasificador_presup_id
)
{
public
ResponseEntity
<
DtoUzyTavClasPre
>
guardar
(
@Valid
@RequestBody
DtoUzyTavClasPre
dtoUzyTavClasPre
)
{
ModelUzyTavClasPre
creado
=
serviceUzyTavClasPre
.
guardar
(
uzytclasificador_presup_id
,
model
UzyTavClasPre
);
DtoUzyTavClasPre
savedDto
=
serviceUzyTavClasPre
.
guardar
(
dto
UzyTavClasPre
);
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
body
(
cread
o
);
return
ResponseEntity
.
ok
(
savedDt
o
);
}
}
@PutMapping
(
"/editar/{id}"
)
@PutMapping
(
"/editar/{id}"
)
public
ResponseEntity
<
ModelUzyTavClasPre
>
editar
(
@PathVariable
Long
id
,
@RequestBody
ModelUzyTavClasPre
model
UzyTavClasPre
)
{
public
ResponseEntity
<
DtoUzyTavClasPre
>
editar
(
@PathVariable
Long
id
,
@RequestBody
DtoUzyTavClasPre
dto
UzyTavClasPre
)
{
return
new
ResponseEntity
<>(
serviceUzyTavClasPre
.
editar
(
id
,
model
UzyTavClasPre
),
HttpStatus
.
OK
);
return
new
ResponseEntity
<>(
serviceUzyTavClasPre
.
editar
(
id
,
dto
UzyTavClasPre
),
HttpStatus
.
OK
);
}
}
@DeleteMapping
(
"/eliminar/{id}"
)
@DeleteMapping
(
"/eliminar/{id}"
)
public
ResponseEntity
<
Void
>
eliminar
(
@PathVariable
Long
id
)
{
public
ResponseEntity
<
String
>
eliminar
(
@PathVariable
Long
id
){
serviceUzyTavClasPre
.
eliminar
(
id
);
boolean
eliminado
=
serviceUzyTavClasPre
.
eliminar
(
id
);
return
ResponseEntity
.
ok
().
build
();
if
(
eliminado
)
{
return
ResponseEntity
.
ok
(
"El registro se eliminó exitosamente."
);
}
else
{
return
ResponseEntity
.
notFound
().
build
();
}
}
}
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Dao/DaoUzyTavClasPre.java
View file @
ccaec483
...
@@ -2,7 +2,9 @@ package ec.edu.espe.movilidad.MovilidadWS.Dao;
...
@@ -2,7 +2,9 @@ package ec.edu.espe.movilidad.MovilidadWS.Dao;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.stereotype.Repository
;
@Repository
public
interface
DaoUzyTavClasPre
extends
JpaRepository
<
ModelUzyTavClasPre
,
Long
>
{
public
interface
DaoUzyTavClasPre
extends
JpaRepository
<
ModelUzyTavClasPre
,
Long
>
{
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Mapper/Components_Class/UzyTavClasPreMapper.java
View file @
ccaec483
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Mapper
.
Components_Class
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Mapper
.
Components_Class
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTClasificadorPresup
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
org.modelmapper.ModelMapper
;
import
org.modelmapper.ModelMapper
;
import
org.modelmapper.PropertyMap
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.persistence.EntityManager
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Component
@Component
public
class
UzyTavClasPreMapper
{
public
class
UzyTavClasPreMapper
{
private
final
ModelMapper
modelMapper
;
private
final
ModelMapper
modelMapper
;
private
final
EntityManager
entityManager
;
public
UzyTavClasPreMapper
(
ModelMapper
modelMapper
)
{
public
UzyTavClasPreMapper
(
ModelMapper
modelMapper
,
EntityManager
entityManager
)
{
this
.
modelMapper
=
modelMapper
;
this
.
modelMapper
=
modelMapper
;
this
.
entityManager
=
entityManager
;
configureMappings
();
}
}
public
DtoUzyTavClasPre
entityToDto
(
ModelUzyTavClasPre
entity
)
{
public
DtoUzyTavClasPre
entityToDto
(
ModelUzyTavClasPre
entity
)
{
...
@@ -18,6 +25,28 @@ public class UzyTavClasPreMapper {
...
@@ -18,6 +25,28 @@ public class UzyTavClasPreMapper {
}
}
public
ModelUzyTavClasPre
dtoToEntity
(
DtoUzyTavClasPre
dto
)
{
public
ModelUzyTavClasPre
dtoToEntity
(
DtoUzyTavClasPre
dto
)
{
return
modelMapper
.
map
(
dto
,
ModelUzyTavClasPre
.
class
);
ModelUzyTavClasPre
entity
=
modelMapper
.
map
(
dto
,
ModelUzyTavClasPre
.
class
);
Long
clasificacorPrID
=
dto
.
getUzytclasificador_presup_id
();
ModelUzyTClasificadorPresup
clasificadorPresup
=
entityManager
.
find
(
ModelUzyTClasificadorPresup
.
class
,
clasificacorPrID
);
entity
.
setUzytclasificador_presup
(
clasificadorPresup
);
return
entity
;
}
}
public
List
<
DtoUzyTavClasPre
>
entitiesToDtos
(
List
<
ModelUzyTavClasPre
>
entities
)
{
return
entities
.
stream
()
.
map
(
this
::
entityToDto
)
.
collect
(
Collectors
.
toList
());
}
private
void
configureMappings
()
{
modelMapper
.
addMappings
(
new
PropertyMap
<
ModelUzyTavClasPre
,
DtoUzyTavClasPre
>()
{
@Override
protected
void
configure
()
{
map
().
setUzytavclaspre_id
(
source
.
getUzytavclaspre_id
());
map
().
setUzytclasificador_presup_id
(
source
.
getUzytclasificador_presup
().
getUzytclasificador_presup_id
());
}
});
}
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Model/ModelUzyTavClasPre.java
View file @
ccaec483
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Model
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Model
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
lombok.Data
;
import
lombok.Getter
;
import
lombok.Setter
;
import
javax.persistence.*
;
import
javax.persistence.*
;
import
java.util.Set
;
import
java.util.Set
;
@Data
@Getter
@Setter
@Entity
@Entity
@Table
(
name
=
"uzytavclaspre"
,
schema
=
"UTIC1"
)
@Table
(
name
=
"uzytavclaspre"
,
schema
=
"UTIC1"
)
public
class
ModelUzyTavClasPre
{
public
class
ModelUzyTavClasPre
{
...
@@ -14,7 +16,7 @@ public class ModelUzyTavClasPre {
...
@@ -14,7 +16,7 @@ public class ModelUzyTavClasPre {
@Id
@Id
@SequenceGenerator
(
name
=
"uzytavclaspre_seq"
,
sequenceName
=
"SEQ_UZYTAVCLASPRE"
,
allocationSize
=
1
)
@SequenceGenerator
(
name
=
"uzytavclaspre_seq"
,
sequenceName
=
"SEQ_UZYTAVCLASPRE"
,
allocationSize
=
1
)
@GeneratedValue
(
strategy
=
GenerationType
.
SEQUENCE
,
generator
=
"uzytavclaspre_seq"
)
@GeneratedValue
(
strategy
=
GenerationType
.
SEQUENCE
,
generator
=
"uzytavclaspre_seq"
)
@Column
(
name
=
"uzytavclaspre_id"
,
nullable
=
false
)
@Column
(
name
=
"uzytavclaspre_id"
)
private
Long
uzytavclaspre_id
;
private
Long
uzytavclaspre_id
;
@Column
(
name
=
"uzytavclaspre_estado"
,
length
=
1
)
@Column
(
name
=
"uzytavclaspre_estado"
,
length
=
1
)
...
@@ -26,7 +28,7 @@ public class ModelUzyTavClasPre {
...
@@ -26,7 +28,7 @@ public class ModelUzyTavClasPre {
//RELACIÓN CON CLASIFICADOR_PRESUP-TABLA PADRE
//RELACIÓN CON CLASIFICADOR_PRESUP-TABLA PADRE
@ManyToOne
@ManyToOne
(
fetch
=
FetchType
.
LAZY
)
@JoinColumn
(
name
=
"uzytclasificador_presup_id"
,
referencedColumnName
=
"uzytclasificador_presup_id"
)
@JoinColumn
(
name
=
"uzytclasificador_presup_id"
,
referencedColumnName
=
"uzytclasificador_presup_id"
)
private
ModelUzyTClasificadorPresup
uzytclasificador_presup
;
private
ModelUzyTClasificadorPresup
uzytclasificador_presup
;
...
...
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTavClasPre/IServiceUzyTavClasPre.java
View file @
ccaec483
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTavClasPre
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.
Model.Model
UzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.
Dto.Dto
UzyTavClasPre
;
import
java.util.List
;
import
java.util.List
;
public
interface
IServiceUzyTavClasPre
{
public
interface
IServiceUzyTavClasPre
{
public
Model
UzyTavClasPre
ListarPorID
(
Long
id
);
Dto
UzyTavClasPre
ListarPorID
(
Long
id
);
public
List
<
Model
UzyTavClasPre
>
ListarRegistros
();
List
<
Dto
UzyTavClasPre
>
ListarRegistros
();
public
List
<
ModelUzyTavClasPre
>
findAllWithClasificadorPresup
();
public
ModelUzyTavClasPre
guardar
(
Long
uzytclasificador_presup_id
,
ModelUzyTavClasPre
model
UzyTavClasPre
);
DtoUzyTavClasPre
guardar
(
DtoUzyTavClasPre
dto
UzyTavClasPre
);
public
ModelUzyTavClasPre
editar
(
Long
id
,
ModelUzyTavClasPre
model
UzyTavClasPre
);
DtoUzyTavClasPre
editar
(
Long
id
,
DtoUzyTavClasPre
dto
UzyTavClasPre
);
void
eliminar
(
Long
id
);
boolean
eliminar
(
Long
id
);
}
}
src/main/java/ec/edu/espe/movilidad/MovilidadWS/Service/UzyTavClasPre/ServiceUzyTavClasPre.java
View file @
ccaec483
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTavClasPre
;
package
ec
.
edu
.
espe
.
movilidad
.
MovilidadWS
.
Service
.
UzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTClasificadorPresup
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Dao.DaoUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTClasificadorPresup
;
import
ec.edu.espe.movilidad.MovilidadWS.Dto.DtoUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Exceptions.ResourceNotFoundException
;
import
ec.edu.espe.movilidad.MovilidadWS.Mapper.Components_Class.UzyTavClasPreMapper
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
ec.edu.espe.movilidad.MovilidadWS.Model.ModelUzyTavClasPre
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.persistence.EntityNotFoundException
;
import
java.util.List
;
import
java.util.List
;
@Service
@Service
public
class
ServiceUzyTavClasPre
implements
IServiceUzyTavClasPre
{
public
class
ServiceUzyTavClasPre
implements
IServiceUzyTavClasPre
{
@Autowired
DaoUzyTavClasPre
daoUzyTavClasPre
;
@Autowired
DaoUzyTClasificadorPresup
daoUzyTClasificadorPresup
;
@Override
private
final
DaoUzyTavClasPre
daoUzyTavClasPre
;
public
ModelUzyTavClasPre
ListarPorID
(
Long
id
)
{
private
final
UzyTavClasPreMapper
mapper
;
return
daoUzyTavClasPre
.
findById
(
id
).
get
();
}
public
ServiceUzyTavClasPre
(
DaoUzyTavClasPre
daoUzyTavClasPre
,
UzyTavClasPreMapper
mapper
)
{
this
.
daoUzyTavClasPre
=
daoUzyTavClasPre
;
this
.
mapper
=
mapper
;
}
@Override
@Override
public
List
<
ModelUzyTavClasPre
>
ListarRegistros
()
{
public
DtoUzyTavClasPre
ListarPorID
(
Long
id
)
{
return
daoUzyTavClasPre
.
findAll
();
ModelUzyTavClasPre
entity
=
daoUzyTavClasPre
.
findById
(
id
)
.
orElseThrow
(()
->
new
ResourceNotFoundException
(
"No se encontró el registro con ID: "
+
id
));
return
mapper
.
entityToDto
(
entity
);
}
}
@Override
@Override
public
List
<
ModelUzyTavClasPre
>
findAllWithClasificadorPresup
()
{
public
List
<
DtoUzyTavClasPre
>
ListarRegistros
()
{
return
daoUzyTavClasPre
.
findAll
();
List
<
ModelUzyTavClasPre
>
entities
=
daoUzyTavClasPre
.
findAll
();
return
mapper
.
entitiesToDtos
(
entities
);
}
}
@Override
public
ModelUzyTavClasPre
guardar
(
Long
uzytclasificador_presup_id
,
ModelUzyTavClasPre
modelUzyTavClasPre
)
{
ModelUzyTClasificadorPresup
uzyTClasificadorPresup
=
daoUzyTClasificadorPresup
.
findById
(
uzytclasificador_presup_id
)
@Override
public
DtoUzyTavClasPre
guardar
(
DtoUzyTavClasPre
dtoUzyTavClasPre
)
{
.
orElseThrow
(()
->
new
EntityNotFoundException
(
"No se encontró la entidad ModelUzyTClasificadorPresup con el ID proporcionado"
)
);
ModelUzyTavClasPre
entity
=
mapper
.
dtoToEntity
(
dtoUzyTavClasPre
);
modelUzyTavClasPre
.
setUzytclasificador_presup
((
uzyTClasificadorPresup
)
);
ModelUzyTavClasPre
nuevoEntity
=
daoUzyTavClasPre
.
save
(
entity
);
return
daoUzyTavClasPre
.
save
(
modelUzyTavClasPre
);
return
mapper
.
entityToDto
(
nuevoEntity
);
}
}
@Override
@Override
public
ModelUzyTavClasPre
editar
(
Long
id
,
ModelUzyTavClasPre
modelUzyTavClasPre
)
{
public
DtoUzyTavClasPre
editar
(
Long
id
,
DtoUzyTavClasPre
dtoUzyTavClasPre
)
{
ModelUzyTavClasPre
dato
=
daoUzyTavClasPre
.
findById
(
id
).
get
();
try
{
dato
.
setUzytavclaspre_estado
(
modelUzyTavClasPre
.
getUzytavclaspre_estado
());
ModelUzyTavClasPre
entity
=
daoUzyTavClasPre
.
findById
(
id
).
get
();
ModelUzyTavClasPre
datoActualizado
=
daoUzyTavClasPre
.
save
(
dato
);
if
(
entity
!=
null
)
{
return
datoActualizado
;
entity
.
setUzytavclaspre_estado
(
dtoUzyTavClasPre
.
getUzytavclaspre_estado
());
entity
.
setUzytavclaspre_tipo
(
dtoUzyTavClasPre
.
getUzytavclaspre_tipo
());
ModelUzyTavClasPre
updatedEntity
=
daoUzyTavClasPre
.
save
(
entity
);
return
mapper
.
entityToDto
(
updatedEntity
);
}
else
{
throw
new
ResourceNotFoundException
(
"No se encontró el registro con ID: "
+
id
);
}
}
catch
(
Exception
e
)
{
throw
new
ResourceNotFoundException
(
"Error al editar el registro: "
+
e
.
getMessage
());
}
}
}
@Override
@Override
public
void
eliminar
(
Long
id
)
{
public
boolean
eliminar
(
Long
id
)
{
ModelUzyTavClasPre
dato
=
daoUzyTavClasPre
.
findById
(
id
).
get
();
ModelUzyTavClasPre
entity
=
daoUzyTavClasPre
.
findById
(
id
).
orElse
(
null
);
//.orElseThrow(() -> new ControlExcepciones("No existe el registro con el ID : " + id));
if
(
entity
!=
null
)
{
daoUzyTavClasPre
.
delete
(
dato
);
daoUzyTavClasPre
.
delete
(
entity
);
return
true
;
}
return
false
;
}
}
}
}
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