edit deadlines
This commit is contained in:
parent
54ea705890
commit
59e2c9b544
@ -2,15 +2,20 @@ package ru.ulstu.deadline.model;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class DeadlineDto {
|
public class DeadlineDto {
|
||||||
private final Integer id;
|
private Integer id;
|
||||||
|
|
||||||
private final String description;
|
private String description;
|
||||||
|
|
||||||
private final Date date;
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
|
private Date date;
|
||||||
|
|
||||||
|
public DeadlineDto() {
|
||||||
|
}
|
||||||
|
|
||||||
@JsonCreator
|
@JsonCreator
|
||||||
public DeadlineDto(@JsonProperty("id") Integer id,
|
public DeadlineDto(@JsonProperty("id") Integer id,
|
||||||
@ -38,4 +43,16 @@ public class DeadlineDto {
|
|||||||
public Date getDate() {
|
public Date getDate() {
|
||||||
return date;
|
return date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(Date date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,19 +7,20 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import ru.ulstu.core.model.response.Response;
|
import ru.ulstu.deadline.model.DeadlineDto;
|
||||||
import ru.ulstu.paper.model.Paper;
|
import ru.ulstu.paper.model.Paper;
|
||||||
import ru.ulstu.paper.model.PaperDto;
|
import ru.ulstu.paper.model.PaperDto;
|
||||||
import ru.ulstu.paper.model.PaperFilterDto;
|
|
||||||
import ru.ulstu.paper.service.PaperService;
|
import ru.ulstu.paper.service.PaperService;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.springframework.util.StringUtils.isEmpty;
|
||||||
|
|
||||||
|
|
||||||
@Controller()
|
@Controller()
|
||||||
@ -45,7 +46,7 @@ public class PaperController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/paper")
|
@PostMapping(value = "/paper", params = "save")
|
||||||
public String save(@Valid PaperDto paperDto, Errors errors) throws IOException {
|
public String save(@Valid PaperDto paperDto, Errors errors) throws IOException {
|
||||||
if (errors.hasErrors()) {
|
if (errors.hasErrors()) {
|
||||||
return "/papers/paper";
|
return "/papers/paper";
|
||||||
@ -54,6 +55,13 @@ public class PaperController {
|
|||||||
return "redirect:/papers/papers";
|
return "redirect:/papers/papers";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/paper", params = "addDeadline")
|
||||||
|
public String addDeadline(@Valid PaperDto paperDto) {
|
||||||
|
filterEmptyDeadlines(paperDto);
|
||||||
|
paperDto.getDeadlines().add(new DeadlineDto());
|
||||||
|
return "/papers/paper";
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/delete/{paper-id}")
|
@GetMapping("/delete/{paper-id}")
|
||||||
public String delete(@PathVariable("paper-id") Integer paperId) throws IOException {
|
public String delete(@PathVariable("paper-id") Integer paperId) throws IOException {
|
||||||
paperService.delete(paperId);
|
paperService.delete(paperId);
|
||||||
@ -70,8 +78,9 @@ public class PaperController {
|
|||||||
return paperService.getPaperAuthors();
|
return paperService.getPaperAuthors();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/filter")
|
private void filterEmptyDeadlines(PaperDto paperDto) {
|
||||||
public Response<List<PaperDto>> filter(@RequestBody @Valid PaperFilterDto paperFilterDto) throws IOException {
|
paperDto.setDeadlines(paperDto.getDeadlines().stream()
|
||||||
return new Response<>(paperService.filter(paperFilterDto));
|
.filter(dto -> dto.getDate() != null || !isEmpty(dto.getDescription()))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.core.model.response.Response;
|
import ru.ulstu.core.model.response.Response;
|
||||||
import ru.ulstu.paper.model.PaperDto;
|
import ru.ulstu.paper.model.PaperDto;
|
||||||
|
import ru.ulstu.paper.model.PaperFilterDto;
|
||||||
import ru.ulstu.paper.service.PaperService;
|
import ru.ulstu.paper.service.PaperService;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
@ -55,4 +56,9 @@ public class PaperRestController {
|
|||||||
paperService.delete(paperId);
|
paperService.delete(paperId);
|
||||||
return new Response<>(true);
|
return new Response<>(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/filter")
|
||||||
|
public Response<List<PaperDto>> filter(@RequestBody @Valid PaperFilterDto paperFilterDto) throws IOException {
|
||||||
|
return new Response<>(paperService.filter(paperFilterDto));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ public class PaperDto {
|
|||||||
private Paper.PaperStatus status;
|
private Paper.PaperStatus status;
|
||||||
private Date createDate;
|
private Date createDate;
|
||||||
private Date updateDate;
|
private Date updateDate;
|
||||||
|
@NotEmpty
|
||||||
private List<DeadlineDto> deadlines;
|
private List<DeadlineDto> deadlines;
|
||||||
private String comment;
|
private String comment;
|
||||||
private Boolean locked;
|
private Boolean locked;
|
||||||
@ -174,4 +175,8 @@ public class PaperDto {
|
|||||||
public void setAuthors(Set<Integer> authors) {
|
public void setAuthors(Set<Integer> authors) {
|
||||||
this.authors = authors;
|
this.authors = authors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDeadlines(List<DeadlineDto> deadlines) {
|
||||||
|
this.deadlines = deadlines;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
||||||
<head>
|
<head>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<form method="post" th:action="@{'/papers/paper?id='+ *{id == null ? '' : id} + ''}"
|
<form id="paper-form" method="post" th:action="@{'/papers/paper?id='+ *{id == null ? '' : id} + ''}"
|
||||||
th:object="${paperDto}">
|
th:object="${paperDto}">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6 col-sm-12">
|
<div class="col-md-6 col-sm-12">
|
||||||
@ -57,11 +57,33 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Дедлайн:</label>
|
<label>Дедлайны:</label>
|
||||||
<input type="date" class="form-control" name="deadline" th:field="*{nextDeadline}"/>
|
<div class="row" th:each="deadline, rowStat : *{deadlines}">
|
||||||
<p th:if="${#fields.hasErrors('nextDeadline')}" th:errors="*{nextDeadline}"
|
<input type="hidden" th:field="*{deadlines[__${rowStat.index}__].id}"/>
|
||||||
|
<div class="col-6">
|
||||||
|
<input type="date" class="form-control" name="deadline"
|
||||||
|
th:field="*{deadlines[__${rowStat.index}__].date}"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-5">
|
||||||
|
<input class="form-control" type="text" placeholder="Описание"
|
||||||
|
th:field="*{deadlines[__${rowStat.index}__].description}"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-1">
|
||||||
|
<a class="btn btn-danger float-right"
|
||||||
|
th:onclick="|$('#deadlines${rowStat.index}\\.description').val('');
|
||||||
|
$('#deadlines${rowStat.index}\\.date').val('');
|
||||||
|
$('#addDeadline').click();|"><span
|
||||||
|
aria-hidden="true"><i class="fa fa-times"/></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p th:if="${#fields.hasErrors('deadlines')}" th:errors="*{deadlines}"
|
||||||
class="alert alert-danger">Incorrect title</p>
|
class="alert alert-danger">Incorrect title</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" id="addDeadline" name="addDeadline" class="btn btn-primary" value="Добавить
|
||||||
|
дедлайн"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input type="checkbox" class="form-check-input" id="locked"
|
<input type="checkbox" class="form-check-input" id="locked"
|
||||||
@ -94,78 +116,6 @@
|
|||||||
<p th:if="${#fields.hasErrors('authors')}" th:errors="*{authors}"
|
<p th:if="${#fields.hasErrors('authors')}" th:errors="*{authors}"
|
||||||
class="alert alert-danger">Incorrect title</p>
|
class="alert alert-danger">Incorrect title</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="myModal1" class="modal fade">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h4 class="modal-title">Авторы статьи</h4>
|
|
||||||
<button type="button" class="close" data-dismiss="modal"
|
|
||||||
aria-hidden="true">×
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<table class="table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Фамилия</th>
|
|
||||||
<th>Имя</th>
|
|
||||||
<th>Отчество</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Иванов</td>
|
|
||||||
<td>Иван</td>
|
|
||||||
<td>Иванович</td>
|
|
||||||
<td>
|
|
||||||
<span class="table-remove"><button type="button"
|
|
||||||
class="btn btn-danger btn-rounded btn-sm my-0">
|
|
||||||
<i class="fa fa-times"/>
|
|
||||||
</button>
|
|
||||||
</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>text</td>
|
|
||||||
<td>text</td>
|
|
||||||
<td>text</td>
|
|
||||||
<td>
|
|
||||||
<span class="table-remove">
|
|
||||||
<button type="button"
|
|
||||||
class="btn btn-danger btn-rounded btn-sm my-0">
|
|
||||||
<i class="fa fa-times"/>
|
|
||||||
</button>
|
|
||||||
</span>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<div class="dropdown">
|
|
||||||
<button class="btn btn-primary dropdown-toggle"
|
|
||||||
type="button" data-toggle="dropdown">Выберите
|
|
||||||
автора
|
|
||||||
<span class="caret"></span></button>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<input class="form-control" id="myInput" type="text"
|
|
||||||
placeholder="Search.."/>
|
|
||||||
<li><a href="#">Иванов</a></li>
|
|
||||||
<li><a href="#">Смирнов</a></li>
|
|
||||||
<li><a href="#">Кузнецов</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-primary">Сохранить изменения
|
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
|
||||||
Отмена
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 offset-md-3 col-sm-12 offset-sm-0">
|
<div class="col-md-3 offset-md-3 col-sm-12 offset-sm-0">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@ -178,7 +128,7 @@
|
|||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button id="sendMessageButton" class="btn btn-success text-uppercase"
|
<button id="sendMessageButton" name="save" class="btn btn-success text-uppercase"
|
||||||
type="submit">
|
type="submit">
|
||||||
Сохранить
|
Сохранить
|
||||||
</button>
|
</button>
|
||||||
|
Loading…
Reference in New Issue
Block a user