Compare commits
7 Commits
5ca3226dfa
...
714ffba31f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
714ffba31f | ||
|
|
430f456866 | ||
|
|
003e03c0c1 | ||
|
|
060102d2b1 | ||
|
|
f5b88de9e6 | ||
|
|
68bfbc195d | ||
|
|
11a8fbf665 |
@@ -0,0 +1,49 @@
|
|||||||
|
package com.example.demo.app.domain.model;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.demo.app.infra.entity.CategoryEntity;
|
||||||
|
import com.example.demo.app.infra.entity.FixedCostEntity;
|
||||||
|
import com.example.demo.app.infra.entity.UserEntity;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FixedCostModel {
|
||||||
|
|
||||||
|
private Long fixedCostId;
|
||||||
|
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
private Long categoryId;
|
||||||
|
|
||||||
|
private String fixedCostName;
|
||||||
|
|
||||||
|
private Integer amount;
|
||||||
|
|
||||||
|
|
||||||
|
public static FixedCostModel convertFrom(FixedCostEntity fixedCostEntity) {
|
||||||
|
return new FixedCostModel(
|
||||||
|
fixedCostEntity.getFixedCostId(),
|
||||||
|
fixedCostEntity.getUserEntity().getUserId(),
|
||||||
|
fixedCostEntity.getCategoryEntity().getCategoryId(),
|
||||||
|
fixedCostEntity.getFixedCostName(),
|
||||||
|
fixedCostEntity.getAmount());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<FixedCostModel> convertFrom(List<FixedCostEntity> fixedCostEntityList) {
|
||||||
|
return fixedCostEntityList.stream().map(FixedCostModel::convertFrom).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FixedCostEntity convertTo(FixedCostModel fixedCostModel, UserEntity userEntity, CategoryEntity categoryEntity) {
|
||||||
|
return new FixedCostEntity(
|
||||||
|
fixedCostModel.getFixedCostId(),
|
||||||
|
userEntity,
|
||||||
|
categoryEntity,
|
||||||
|
fixedCostModel.getFixedCostName(),
|
||||||
|
fixedCostModel.getAmount());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.example.demo.app.domain.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.demo.app.domain.model.FixedCostModel;
|
||||||
|
|
||||||
|
public interface FixedCostService {
|
||||||
|
|
||||||
|
public List<FixedCostModel> findAllByUserId(Long userId);
|
||||||
|
|
||||||
|
public FixedCostModel save(FixedCostModel fixedCostModel);
|
||||||
|
|
||||||
|
public void delete(Long fixedCostId);
|
||||||
|
|
||||||
|
public FixedCostModel findById(Long fixedCostId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package com.example.demo.app.domain.service.impl;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.example.demo.app.domain.model.FixedCostModel;
|
||||||
|
import com.example.demo.app.domain.service.FixedCostService;
|
||||||
|
import com.example.demo.app.infra.repository.CategoryRepository;
|
||||||
|
import com.example.demo.app.infra.repository.FixedCostRepository;
|
||||||
|
import com.example.demo.app.infra.repository.UserRepository;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class FixedCostServiceImpl implements FixedCostService{
|
||||||
|
|
||||||
|
|
||||||
|
private final FixedCostRepository fixedCostRepository;
|
||||||
|
private final UserRepository userRepository;
|
||||||
|
private final CategoryRepository categoryRepository;
|
||||||
|
|
||||||
|
|
||||||
|
public List<FixedCostModel> findAllByUserId(Long userId) {
|
||||||
|
|
||||||
|
return FixedCostModel.convertFrom(fixedCostRepository.findByUserId(userId));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public FixedCostModel save(FixedCostModel fixedCostModel) {
|
||||||
|
|
||||||
|
return FixedCostModel.convertFrom(fixedCostRepository.save( FixedCostModel.convertTo(fixedCostModel, userRepository.findById(fixedCostModel.getUserId()).get(), categoryRepository.findById(fixedCostModel.getCategoryId()).get())));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(Long fixedCostId) {
|
||||||
|
|
||||||
|
fixedCostRepository.deleteById(fixedCostId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public FixedCostModel findById(Long fixedCostId) {
|
||||||
|
return FixedCostModel.convertFrom(fixedCostRepository.findById(fixedCostId).get());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.example.demo.app.infra.entity;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "fixed_cost_t")
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FixedCostEntity {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
@Column(name = "fixed_cost_id")
|
||||||
|
private Long fixedCostId;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "user_id")
|
||||||
|
private UserEntity userEntity;
|
||||||
|
|
||||||
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "category_id")
|
||||||
|
private CategoryEntity categoryEntity;
|
||||||
|
|
||||||
|
@Column(name = "fixed_cost_name", nullable = false)
|
||||||
|
private String fixedCostName;
|
||||||
|
|
||||||
|
@Column(name = "amount", nullable = false)
|
||||||
|
private Integer amount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.example.demo.app.infra.repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
|
||||||
|
import com.example.demo.app.infra.entity.FixedCostEntity;
|
||||||
|
|
||||||
|
public interface FixedCostRepository extends JpaRepository<FixedCostEntity, Long> {
|
||||||
|
|
||||||
|
@Query("select f from FixedCostEntity f where f.userEntity.userId = :userId")
|
||||||
|
public List<FixedCostEntity> findByUserId(Long userId);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
package com.example.demo.app.presentation.controller;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
|
||||||
|
import com.example.demo.aop.aspect.SessionCheck;
|
||||||
|
import com.example.demo.app.domain.model.LoginModel;
|
||||||
|
import com.example.demo.app.domain.service.CategoryService;
|
||||||
|
import com.example.demo.app.domain.service.FixedCostService;
|
||||||
|
import com.example.demo.app.presentation.form.CategoryForm;
|
||||||
|
import com.example.demo.app.presentation.form.FixedCostForm;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class FixedCostController {
|
||||||
|
|
||||||
|
private final FixedCostService fixedCostService;
|
||||||
|
private final CategoryService categoryService;
|
||||||
|
|
||||||
|
@SessionCheck
|
||||||
|
@GetMapping("/fixed-cost/list")
|
||||||
|
public String getFixedCostList(
|
||||||
|
HttpSession session, Model model, LocalDate today) {
|
||||||
|
|
||||||
|
LoginModel loginUser = (LoginModel) session.getAttribute("loginUser");
|
||||||
|
|
||||||
|
if (today == null) {
|
||||||
|
today = (LocalDate) session.getAttribute("today");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FixedCostForm> fixedCostFormList = FixedCostForm.convertFrom(fixedCostService.findAllByUserId(loginUser.getUserId()));
|
||||||
|
|
||||||
|
fixedCostFormList.forEach(fixedCostForm -> fixedCostForm.setCategoryName(categoryService.findOne(fixedCostForm.getCategoryId()).getCategoryName()));
|
||||||
|
|
||||||
|
model.addAttribute("fixedCostFormList", fixedCostFormList);
|
||||||
|
|
||||||
|
model.addAttribute("today", today);
|
||||||
|
|
||||||
|
return "fixed_cost";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SessionCheck
|
||||||
|
@GetMapping("/fixed-cost/create")
|
||||||
|
public String getFixedCostCreate(
|
||||||
|
HttpSession session, @ModelAttribute FixedCostForm fixedCostForm, Model model, LocalDate today) {
|
||||||
|
|
||||||
|
List<CategoryForm> categoryFormList = CategoryForm.convertFrom(categoryService.findAll());
|
||||||
|
|
||||||
|
List<CategoryForm> expenseList = new ArrayList<CategoryForm>();
|
||||||
|
|
||||||
|
List<CategoryForm> incomeList = new ArrayList<CategoryForm>();
|
||||||
|
|
||||||
|
for (CategoryForm categoryForm : categoryFormList) {
|
||||||
|
|
||||||
|
if (categoryForm.getTransactionType() == 0) {
|
||||||
|
expenseList.add(categoryForm);
|
||||||
|
} else {
|
||||||
|
incomeList.add(categoryForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
model.addAttribute("expenseList", expenseList);
|
||||||
|
model.addAttribute("incomeList", incomeList);
|
||||||
|
model.addAttribute("today", today);
|
||||||
|
|
||||||
|
|
||||||
|
return "fixed_cost_create";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@SessionCheck
|
||||||
|
@PostMapping("/fixed-cost/create")
|
||||||
|
public String postFixedCostCreate(
|
||||||
|
HttpSession session, @ModelAttribute FixedCostForm fixedCostForm, Model model, LocalDate today) {
|
||||||
|
|
||||||
|
LoginModel loginUser = (LoginModel) session.getAttribute("loginUser");
|
||||||
|
|
||||||
|
fixedCostForm.setUserId(loginUser.getUserId());
|
||||||
|
|
||||||
|
fixedCostService.save(FixedCostForm.convertTo(fixedCostForm));
|
||||||
|
|
||||||
|
session.setAttribute("today", today);
|
||||||
|
|
||||||
|
return "redirect:/fixed-cost/list";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SessionCheck
|
||||||
|
@PostMapping("/fixed-cost/delete")
|
||||||
|
public String postFixedCostDelete(Long fixedCostId, LocalDate today, HttpSession session) {
|
||||||
|
|
||||||
|
fixedCostService.delete(fixedCostId);
|
||||||
|
|
||||||
|
session.setAttribute("today", today);
|
||||||
|
|
||||||
|
return "redirect:/fixed-cost/list";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,11 +20,13 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||||||
import com.example.demo.aop.aspect.SessionCheck;
|
import com.example.demo.aop.aspect.SessionCheck;
|
||||||
import com.example.demo.app.domain.model.LoginModel;
|
import com.example.demo.app.domain.model.LoginModel;
|
||||||
import com.example.demo.app.domain.service.CategoryService;
|
import com.example.demo.app.domain.service.CategoryService;
|
||||||
|
import com.example.demo.app.domain.service.FixedCostService;
|
||||||
import com.example.demo.app.domain.service.GoalService;
|
import com.example.demo.app.domain.service.GoalService;
|
||||||
import com.example.demo.app.domain.service.TransactionService;
|
import com.example.demo.app.domain.service.TransactionService;
|
||||||
import com.example.demo.app.domain.service.UserService;
|
import com.example.demo.app.domain.service.UserService;
|
||||||
import com.example.demo.app.presentation.form.CategoryForm;
|
import com.example.demo.app.presentation.form.CategoryForm;
|
||||||
import com.example.demo.app.presentation.form.Expense;
|
import com.example.demo.app.presentation.form.Expense;
|
||||||
|
import com.example.demo.app.presentation.form.FixedCostForm;
|
||||||
import com.example.demo.app.presentation.form.GoalForm;
|
import com.example.demo.app.presentation.form.GoalForm;
|
||||||
import com.example.demo.app.presentation.form.Income;
|
import com.example.demo.app.presentation.form.Income;
|
||||||
import com.example.demo.app.presentation.form.TransactionForm;
|
import com.example.demo.app.presentation.form.TransactionForm;
|
||||||
@@ -40,6 +42,7 @@ public class TransactionController {
|
|||||||
private final CategoryService categoryService;
|
private final CategoryService categoryService;
|
||||||
private final GoalService goalService;
|
private final GoalService goalService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final FixedCostService fixedCostService;
|
||||||
|
|
||||||
// 一覧画面
|
// 一覧画面
|
||||||
@SessionCheck
|
@SessionCheck
|
||||||
@@ -182,16 +185,23 @@ public class TransactionController {
|
|||||||
@SessionCheck
|
@SessionCheck
|
||||||
@GetMapping("/transaction/create")
|
@GetMapping("/transaction/create")
|
||||||
public String createOneGet(@RequestParam(defaultValue = "") LocalDate today,
|
public String createOneGet(@RequestParam(defaultValue = "") LocalDate today,
|
||||||
|
Long fixedCostId,
|
||||||
Model model) {
|
Model model) {
|
||||||
|
|
||||||
if (today == null) {
|
if (today == null) {
|
||||||
today = LocalDate.now();
|
today = LocalDate.now();
|
||||||
}
|
}
|
||||||
|
TransactionForm transactionForm = new TransactionForm();
|
||||||
|
transactionForm.setTransactionDate(today);
|
||||||
|
if (fixedCostId != null) {
|
||||||
|
FixedCostForm fixedCostForm = FixedCostForm.convertFrom(fixedCostService.findById(fixedCostId));
|
||||||
|
transactionForm.setCategoryId(fixedCostForm.getCategoryId());
|
||||||
|
transactionForm.setAmount(fixedCostForm.getAmount());
|
||||||
|
transactionForm.setTransactionType(CategoryForm.convertFrom(categoryService.findOne(fixedCostForm.getCategoryId())).getTransactionType());
|
||||||
|
}
|
||||||
|
|
||||||
List<CategoryForm> categoryFormList = CategoryForm.convertFrom(categoryService.findAll());
|
List<CategoryForm> categoryFormList = CategoryForm.convertFrom(categoryService.findAll());
|
||||||
|
|
||||||
TransactionForm transactionForm = new TransactionForm();
|
|
||||||
transactionForm.setTransactionDate(today);
|
|
||||||
|
|
||||||
System.out.println(transactionForm.getCategoryName() + " " + transactionForm.getAmount());
|
System.out.println(transactionForm.getCategoryName() + " " + transactionForm.getAmount());
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package com.example.demo.app.presentation.form;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.example.demo.app.domain.model.FixedCostModel;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class FixedCostForm {
|
||||||
|
|
||||||
|
private Long fixedCostId;
|
||||||
|
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
private Long categoryId;
|
||||||
|
|
||||||
|
private String fixedCostName;
|
||||||
|
|
||||||
|
private Integer amount;
|
||||||
|
|
||||||
|
private String categoryName;
|
||||||
|
|
||||||
|
|
||||||
|
public static FixedCostForm convertFrom(FixedCostModel fixedCostModel) {
|
||||||
|
return new FixedCostForm(
|
||||||
|
fixedCostModel.getFixedCostId(),
|
||||||
|
fixedCostModel.getUserId(),
|
||||||
|
fixedCostModel.getCategoryId(),
|
||||||
|
fixedCostModel.getFixedCostName(),
|
||||||
|
fixedCostModel.getAmount(),
|
||||||
|
"");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static List<FixedCostForm> convertFrom(List<FixedCostModel> fixedCostModelList) {
|
||||||
|
return fixedCostModelList.stream().map(fixedCostModel -> FixedCostForm.convertFrom(fixedCostModel)).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FixedCostModel convertTo(FixedCostForm fixedCostForm) {
|
||||||
|
return new FixedCostModel(
|
||||||
|
fixedCostForm.getFixedCostId(),
|
||||||
|
fixedCostForm.getUserId(),
|
||||||
|
fixedCostForm.getCategoryId(),
|
||||||
|
fixedCostForm.getFixedCostName(),
|
||||||
|
fixedCostForm.getAmount());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
66
src/main/resources/templates/fixed_cost.html
Normal file
66
src/main/resources/templates/fixed_cost.html
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>固定費詳細</title>
|
||||||
|
<link rel="stylesheet" th:href="@{/css/transaction_detail.css}">
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="pb-5 pt-5">
|
||||||
|
|
||||||
|
<div th:replace="~{header :: header}"></div>
|
||||||
|
<h1 th:text="${today}"></h1>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul>
|
||||||
|
<li th:each="fixedCostForm : ${fixedCostFormList}" class="transaction-item">
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
カテゴリ名:
|
||||||
|
<span th:text="${fixedCostForm.categoryName}"></span>
|
||||||
|
<br>
|
||||||
|
固定費名:
|
||||||
|
<span th:text="${fixedCostForm.fixedCostName}"></span>
|
||||||
|
<br>
|
||||||
|
金額:
|
||||||
|
<span th:text="${fixedCostForm.amount}"></span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="transaction-buttons">
|
||||||
|
|
||||||
|
<form th:action="@{/transaction/create}" method="get">
|
||||||
|
<input type="hidden" name="fixedCostId" th:value="${fixedCostForm.fixedCostId}">
|
||||||
|
<input type="hidden" name="today" th:value="${today}">
|
||||||
|
<button type="submit">登録</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form th:action="@{/fixed-cost/delete}" method="post">
|
||||||
|
<input type="hidden" name="fixedCostId" th:value="${fixedCostForm.fixedCostId}">
|
||||||
|
<input type="hidden" name="today" th:value="${today}">
|
||||||
|
<button type="submit">削除</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<hr>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<form th:action="@{/fixed-cost/create}" method="get">
|
||||||
|
<input type="hidden" name="today" id="today" th:value="${today}">
|
||||||
|
<button type="submit">新規登録</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div th:replace="~{footer :: footer}"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
129
src/main/resources/templates/fixed_cost_create.html
Normal file
129
src/main/resources/templates/fixed_cost_create.html
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Insert title here</title>
|
||||||
|
<link rel="stylesheet" th:href="@{/css/menu.css}">
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="pb-5 pt-5">
|
||||||
|
|
||||||
|
<div th:replace="~{header :: header}"></div>
|
||||||
|
|
||||||
|
<h1>取引登録</h1>
|
||||||
|
|
||||||
|
<form th:action="@{/fixed-cost/create}" th:object="${fixedCostForm}" method="post">
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="fixedCostName">固定費名</label>
|
||||||
|
|
||||||
|
<input type="text" id="fixedCostName" th:field="*{fixedCostName}" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="transactionType">収入・支出</label>
|
||||||
|
|
||||||
|
<select id="transactionType">
|
||||||
|
|
||||||
|
<option value="">選択してください</option>
|
||||||
|
<option value="1">支出</option>
|
||||||
|
<option value="2">収入</option>
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="categoryId">カテゴリ</label>
|
||||||
|
|
||||||
|
<select id="categoryId" th:field="*{categoryId}">
|
||||||
|
<option value="">選択してください</option>
|
||||||
|
|
||||||
|
<option class="expenseListClass" th:each="category : ${expenseList}" th:value="${category.categoryId}"
|
||||||
|
th:text="${category.categoryName}">
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option class="incomeListClass" th:each="category : ${incomeList}" th:value="${category.categoryId}"
|
||||||
|
th:text="${category.categoryName}">
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="amount">金額</label>
|
||||||
|
|
||||||
|
<input type="number" id="amount" th:field="*{amount}" min="0" placeholder="金額を入力してください" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<input type="hidden" name="today" id="today" th:value="${today}">
|
||||||
|
|
||||||
|
<button type="submit">登録</button>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div th:replace="~{footer :: footer}"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const transactionType = document.getElementById("transactionType");
|
||||||
|
const categoryId = document.getElementById("categoryId");
|
||||||
|
|
||||||
|
const expenseList = document.getElementsByClassName("expenseListClass");
|
||||||
|
const incomeList = document.getElementsByClassName("incomeListClass");
|
||||||
|
|
||||||
|
transactionType.addEventListener("change", function () {
|
||||||
|
|
||||||
|
if (this.value === "1") {
|
||||||
|
|
||||||
|
for (let i = 0; i < expenseList.length; i++) {
|
||||||
|
expenseList[i].style.display = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < incomeList.length; i++) {
|
||||||
|
incomeList[i].style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (this.value === "2") {
|
||||||
|
|
||||||
|
for (let i = 0; i < expenseList.length; i++) {
|
||||||
|
expenseList[i].style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < incomeList.length; i++) {
|
||||||
|
incomeList[i].style.display = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for (let i = 0; i < expenseList.length; i++) {
|
||||||
|
expenseList[i].style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < incomeList.length; i++) {
|
||||||
|
incomeList[i].style.display = "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
categoryId.value = "";
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -56,6 +56,10 @@
|
|||||||
<input type="hidden" name="today" id="today" th:value="${today}">
|
<input type="hidden" name="today" id="today" th:value="${today}">
|
||||||
<button type="submit">新規登録</button>
|
<button type="submit">新規登録</button>
|
||||||
</form>
|
</form>
|
||||||
|
<form th:action="@{/fixed-cost/list}" method="get">
|
||||||
|
<input type="hidden" name="today" th:value="${today}">
|
||||||
|
<button type="submit">固定費一覧</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
<div th:replace="~{footer :: footer}"></div>
|
<div th:replace="~{footer :: footer}"></div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user