예산 배정 오류 수정.

master
강석 최 2023-07-24 18:02:08 +09:00
parent b2fccdd946
commit e52dbd5498
7 changed files with 442 additions and 493 deletions

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@ -205,9 +206,12 @@ public class BudgetController {
// 예산배정 - 등록(저장버튼)
@PostMapping("/assign/save")
public ResultResponse<?> saveAssign(@AuthenticationPrincipal UserInfo loginUser, @RequestBody BudgetDto.AssignSaveReqeust requestDto) {
budgetService.updateAssignList(loginUser, requestDto);
return new ResultResponse().successResponse(ResultResponseCode.SUCCESS);
public List<ResultResponse<?>> saveAssign(@AuthenticationPrincipal UserInfo loginUser, @RequestBody List<BudgetDto.AssignSaveReqeust> requestList) {
List<ResultResponse<?>> responseList = new ArrayList<>();
for(BudgetDto.AssignSaveReqeust requestDto : requestList){
responseList.add(new ResultResponse(budgetService.updateAssignList(loginUser, requestDto)));
}
return responseList;
}
// 집행관리

View File

@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -330,38 +331,25 @@ public class BudgetService {
// 예산배정 - 등록(저장버튼)
@Transactional
public void updateAssignList(UserInfo loginUser, BudgetDto.AssignSaveReqeust requestDto){
public ResultResponseCode updateAssignList(UserInfo loginUser, BudgetDto.AssignSaveReqeust requestDto){
// System.out.println(requestDto.getCode());
// System.out.println(requestDto.getOrg());
// System.out.println(requestDto.getYear());
// System.out.println(requestDto.getAmount());
// UpdateResult result = budgetRepository.callSpAddBudgetAssign(requestDto.getCode(),requestDto.getOrg(),requestDto.getOrg1(), requestDto.getAmount(), "2023-03-15");
BudgetParams params = new BudgetParams();
params.setCode(requestDto.getCode());
params.setOrg(requestDto.getOrg());
params.setOrg1(requestDto.getOrg1());
params.setAmount(requestDto.getAmount());
params.setDt("2023-03-15");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
params.setDt(LocalDate.now().format(formatter));
UpdateResult result = budgetMapper.callSpAddBudgetAssign(params);
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
if(result.getResultCode().equals("100")) {
return;
return ResultResponseCode.SUCCESS;
}else if(result.getResultCode().equals("72")) {
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
throw new BaseException(ResultResponseCode.EXPENSE_OVER_VALUE);
return ResultResponseCode.EXPENSE_OVER_VALUE;
} else {
// System.out.println(result.getErrorMessage());
// System.out.println(result.getResultCode());
// System.out.println(result.getResultCount());
throw new BaseException(ResultResponseCode.DUPLICATE_CODE);
return ResultResponseCode.DUPLICATE_CODE;
}
// return ResultResponseCode.ERROR;
}
//집행관리

View File

@ -51,7 +51,7 @@
from sp_get_high_org_code(#{org})
</select>
<select id="callSpAddBudgetAssign" resultType="UpdateResult" parameterType="BudgetParams">
call sp_add_budget_assign(#{code}, #{org}, #{org}1, #{amount}::int, #{dt}::date, 'admin', NULL,NULL,NULL)
call sp_add_budget_assign(#{code}, #{org}, #{org1}, #{amount}::int, #{dt}::date, 'admin', NULL,NULL,NULL)
</select>
<select id="callSpGetBudgetExpenseInfo" resultType="ExpenseResult" parameterType="BudgetParams">
select *

View File

@ -1,130 +1,130 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#addBtn', function (){
if($("#assignlistcnt").val() == 0){
alert('조회된 내역이 없습니다.');
return;
}
getEditModal(0)
if($("#assignlistcnt").val() == 0){
alert('조회된 내역이 없습니다.');
return;
}
getEditModal(0)
})
$(document).ready(function(){
if ($("#ResultRow").text().trim() == "") {
assignSearch();
} else {
contentFade("out");
}
if ($("#ResultRow").text().trim() == "") {
assignSearch();
} else {
contentFade("out");
}
});
$(document).on('click', '#assignsearchBtn', function () {
assignSearch();
assignSearch();
})
function assignSearch() {
let stDate = $("#stDate").val()
let edDate = $("#edDate").val()
if ($("#stDate").val() == "") {
alert('시작일을 선택해주세요');
return;
}
let stDate = $("#stDate").val()
let edDate = $("#edDate").val()
if ($("#stDate").val() == "") {
alert('시작일을 선택해주세요');
return;
}
if ($("#edDate").val() == "") {
alert('종료일을 선택해주세요');
return;
}
if ($("#edDate").val() == "") {
alert('종료일을 선택해주세요');
return;
}
stDate = new Date(stDate);
edDate = new Date(edDate);
stDate = new Date(stDate);
edDate = new Date(edDate);
if (stDate.getFullYear() != edDate.getFullYear()) {
alert('같은 년도의 데이터만 조회가능합니다. ex)2021-01-01 ~ 2021-12-31');
return;
}
if (stDate.getFullYear() != edDate.getFullYear()) {
alert('같은 년도의 데이터만 조회가능합니다. ex)2021-01-01 ~ 2021-12-31');
return;
}
$("#year").val(stDate.getFullYear());
$("#year").val(stDate.getFullYear());
contentFade("in");
location.href = "/budget/assign?year=" + $("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" + $("#code").val();
contentFade("in");
location.href = "/budget/assign?year=" + $("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" + $("#code").val();
}
$(document).on('click', '#deleteBtn', function (){
if($("input[name='budget']:checked").val() == undefined || $("input[name='budget']:checked").val()==null){
alert('삭제할 항목을 선택해주세요');
return;
}
console.dir($("input[name='budget']:checked")[0].dataset.name1);
console.dir($("input[name='budget']:checked")[0].dataset.name2);
console.dir($("input[name='budget']:checked")[0].dataset.name3);
if(confirm('삭제하시겠습니까?')){
let params = {};
params.year = $("#searchYear").val();
params.nameL1 = $("input[name='budget']:checked")[0].dataset.name1;
params.nameL2 = $("input[name='budget']:checked")[0].dataset.name2;
params.nameL3 = $("input[name='budget']:checked")[0].dataset.name3;
console.dir(params);
$.ajax({
type : 'DELETE',
data : params,
if($("input[name='budget']:checked").val() == undefined || $("input[name='budget']:checked").val()==null){
alert('삭제할 항목을 선택해주세요');
return;
}
console.dir($("input[name='budget']:checked")[0].dataset.name1);
console.dir($("input[name='budget']:checked")[0].dataset.name2);
console.dir($("input[name='budget']:checked")[0].dataset.name3);
if(confirm('삭제하시겠습니까?')){
let params = {};
params.year = $("#searchYear").val();
params.nameL1 = $("input[name='budget']:checked")[0].dataset.name1;
params.nameL2 = $("input[name='budget']:checked")[0].dataset.name2;
params.nameL3 = $("input[name='budget']:checked")[0].dataset.name3;
console.dir(params);
$.ajax({
type : 'DELETE',
data : params,
url : "/budget/budgeting/code",
url : "/budget/budgeting/code",
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(data) {
if(data.code == "200"){
alert("삭제되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("삭제에 실패하였습니다.");
}
})
}
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(data) {
if(data.code == "200"){
alert("삭제되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("삭제에 실패하였습니다.");
}
})
}
})
$(document).on('click', '#updateBtn', function (){
if($("input[name='budget']:checked").val() == undefined || $("input[name='budget']:checked").val()==null){
alert('수정할 항목을 선택해주세요');
return;
if($("input[name='budget']:checked").val() == undefined || $("input[name='budget']:checked").val()==null){
alert('수정할 항목을 선택해주세요');
return;
}
params = {}
params.year = $("#searchYear").val()
params.nameL1 = $("input[name='budget']:checked")[0].dataset.name1;
params.nameL2 = $("input[name='budget']:checked")[0].dataset.name2;
params.nameL3 = $("input[name='budget']:checked")[0].dataset.name3;
$.ajax({
url: '/budget/budgeting/modal/edit',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$("#year").val($("#searchYear").val())
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
}
params = {}
params.year = $("#searchYear").val()
params.nameL1 = $("input[name='budget']:checked")[0].dataset.name1;
params.nameL2 = $("input[name='budget']:checked")[0].dataset.name2;
params.nameL3 = $("input[name='budget']:checked")[0].dataset.name3;
$.ajax({
url: '/budget/budgeting/modal/edit',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$("#year").val($("#searchYear").val())
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
}
});
});
})
@ -182,207 +182,201 @@ $(document).on('click', '#updateBtn', function (){
function getEditModal(no){
params = {}
params.stDate = $("#stDate").val();
params.edDate = $("#edDate").val();
params = {}
params.stDate = $("#stDate").val();
params.edDate = $("#edDate").val();
let stDate = new Date($("#stDate").val());
params.year = stDate.getFullYear();
params.code = $("#code").val();
let stDate = new Date($("#stDate").val());
params.year = stDate.getFullYear();
params.code = $("#code").val();
$.ajax({
url: '/budget/assign/modal/edit',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$.ajax({
url: '/budget/assign/modal/edit',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$("#year").val($("#searchYear").val())
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModalContent").empty().append(html);
$("#year").val($("#searchYear").val())
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
$("#editModal").modal('show');
},
error:function(){
},
error:function(){
}
});
}
});
}
$(document).on('click', '#saveBtn', function (){
if($("#nameL1").val() == ""){
alert('사업명을 입력해주세요.');
$("#position").focus();
return;
}
if($("#nameL2").val() == ""){
alert('구분을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL3").val() == ""){
alert('세부내역을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL1").val() == ""){
alert('사업명을 입력해주세요.');
$("#position").focus();
return;
}
if($("#nameL2").val() == ""){
alert('구분을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL3").val() == ""){
alert('세부내역을 입력해주세요.');
$("#name").focus();
return;
}
if(confirm("저장하시겠습니까?")){
const formData = new FormData($("#budgetForm")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/budget/budgeting/code",
processData: false,
contentType: false,
success : function(data) {
if(data.code == "200"){
alert("저장되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
if(confirm("저장하시겠습니까?")){
const formData = new FormData($("#budgetForm")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/budget/budgeting/code",
processData: false,
contentType: false,
success : function(data) {
if(data.code == "200"){
alert("저장되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
});
$(document).on('click', '#modifyBtn', function (){
if($("#nameL1").val() == ""){
alert('사업명을 입력해주세요.');
$("#position").focus();
return;
}
if($("#nameL2").val() == ""){
alert('구분을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL3").val() == ""){
alert('세부내역을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL1").val() == ""){
alert('사업명을 입력해주세요.');
$("#position").focus();
return;
}
if($("#nameL2").val() == ""){
alert('구분을 입력해주세요.');
$("#name").focus();
return;
}
if($("#nameL3").val() == ""){
alert('세부내역을 입력해주세요.');
$("#name").focus();
return;
}
if(confirm("수정하시겠습니까?")){
const formData = new FormData($("#budgetForm")[0]);
$.ajax({
type : 'PUT',
data : formData,
url : "/budget/budgeting/code",
processData: false,
contentType: false,
success : function(data) {
if(data.code == "200"){
alert("저장되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
if(confirm("수정하시겠습니까?")){
const formData = new FormData($("#budgetForm")[0]);
$.ajax({
type : 'PUT',
data : formData,
url : "/budget/budgeting/code",
processData: false,
contentType: false,
success : function(data) {
if(data.code == "200"){
alert("저장되었습니다.");
location.reload();
}else{
alert(data.message);
}
//location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
});
$(document).on('click', '#tempBtn', function (){
if(confirm("임시 저장하시겠습니까?")){
$("#status").val("TEMP");
const formData = new FormData($("#investigationEditForm")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/pds/ship",
processData: false,
contentType: false,
success : function(data) {
alert("저장되었습니다.");
location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
if(confirm("임시 저장하시겠습니까?")){
$("#status").val("TEMP");
const formData = new FormData($("#investigationEditForm")[0]);
$.ajax({
type : 'POST',
data : formData,
url : "/pds/ship",
processData: false,
contentType: false,
success : function(data) {
alert("저장되었습니다.");
location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
})
}
});
$(document).on('click', '#assignSaveBtn', function (){
let success = 0;
let fail =0;
let fail1 =0;
if($("#assignCount").val()==0){
alert('저장할 내역이 없습니다.');
let success = 0;
let fail =0;
let fail1 =0;
if($("#assignCount").val()==0){
alert('저장할 내역이 없습니다.');
}
const paramList = [];
for(let i =0 ; i < $("#assignCount").val() ; i ++){
for(let j=0 ; j < $("#orgCount").val() ; j ++){
const amount = $("#org"+j+"Amount"+i)
if(amount.val() !== "" && amount.val() !== 0){
const params = {}
params.year = $("#assignYear").val();
params.code = amount[0].dataset.code;
params.amount = amount.val()
params.org = $("#code").val();
params.org1 = $("#orgSave"+j).text();
paramList.push(params);
}
}
for(let i =0 ; i < $("#assignCount").val() ; i ++){
for(let j=0 ; j < $("#orgCount").val() ; j ++){
params = {}
params.year = $("#orgYear").val();
// console.dir($("#org"+j+"_amount"+i)[0].dataset.code);
params.code = $("#org"+j+"Amount"+i)[0].dataset.code;
params.amount = $("#org"+j+"Amount"+i).val() == "" ? 0 :$("#org"+j+"Amount"+i).val()
params.org = $("#code").val();
params.org1 = $("#orgSave"+j).text();
// console.dir(params.org);
$.ajax({
type : 'POST',
data : JSON.stringify(params),
url : "/budget/assign/save",
processData: false,
contentType: 'application/json',
async : false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(data) {
// console.log(data.code);
if(data.code == "200"){
success ++;
}else if(data.code == "911"){
fail1 ++;
}else{
fail++;
}
//location.reload();
},
error : function(xhr) {
//alert("저장에 실패하였습니다.");
fail++;
}
})
}
$.ajax({
type : 'POST',
data : JSON.stringify(paramList),
url : "/budget/assign/save",
contentType: 'application/json',
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(result) {
for(const data of result){
if(data.code == "200"){
success ++;
}else if(data.code == "911"){
fail1 ++;
}else{
fail++;
}
}
// console.dir("success: "+ success +", fail:" + fail+fail1);
if (fail1 > 0 || fail > 0) {
}
if (fail1 > 0 || fail > 0) {
alert("저장에 성공하였습니다. \n일부는 저장에 실패 (금액 초과 [" + fail1 + "건], 에러 [" + fail + "건]) 하였습니다.");
} else {
} else {
alert("저장에 성공하였습니다.");
}
location.reload();
},
error : function(xhr) {
alert("저장에 실패하였습니다.");
}
location.reload();
})
});

View File

@ -4,8 +4,8 @@
<h4 class="modal-title" th:text="${info eq null?'예산항목 추가':'예산항목 수정'}"></h4>
<button type="button" class="btn btn-danger" data-bs-dismiss="modal" aria-hidden="true">x</button>
</div>
<div class="modal-body">
<form id="budgetForm" action="#">
<form id="budgetForm" action="#">
<div class="modal-body">
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<input type="hidden" id="assignYear" name="assignYear" th:value="${searchParams.year}"/>
@ -133,13 +133,13 @@
</th:block>
</tr>
</tbody>
<!-- </table>-->
</table>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<a href="javascript:;" class="btn btn-primary" id="assignSaveBtn">저장</a>
<a href="javascript:;" class="btn btn-primary" id="modifyBtn" th:if="${cmd eq 'update'}">수정</a>
</div>
</div>
<div class="modal-footer">
<a href="javascript:;" class="btn btn-primary" id="assignSaveBtn">저장</a>
<a href="javascript:;" class="btn btn-primary" id="modifyBtn" th:if="${cmd eq 'update'}">수정</a>
</div>
</form>
</html>

View File

@ -3,205 +3,168 @@
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/layout}">
<th:block layout:fragment="script">
<script type="text/javascript" th:src="@{/js/budget/expense.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/expense.js}"></script>
</th:block>
<div layout:fragment="content">
<main>
<input type="hidden" id="menuKey" value="56">
<div class="row justify-content-between">
<div class="col-auto">
<div class="mb-2">
<div class="d-inline align-middle"><i class="bi bi-square-fill"></i></div>
<h5 class="d-inline align-middle"> 집행관리</h5>
<main>
<input type="hidden" id="menuKey" value="56">
<div class="row justify-content-between">
<div class="col-auto">
<div class="mb-2">
<div class="d-inline align-middle"><i class="bi bi-square-fill"></i></div>
<h5 class="d-inline align-middle"> 집행관리</h5>
</div>
</div>
<div class="col-auto">
<p class="mb-0 mt-2">정보예산관리 > 집행관리</p>
</div>
</div>
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row mx-0">
<div class="col-12 card bg-light text-center">
<div class="card-body">
<form id="assginForm" method="get" action="/budget/assign" onsubmit="return false;">
<input type="hidden" name="year" id="year" th:value="${param.year}"/>
<div class="row justify-content-between py-1">
<div class="col-auto">
</div>
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">
</div>
<div class="col-auto">
</div>
<div class="col-auto">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="code" id="code">
<option value="OG001" th:selected="${searchParams?.code eq '본청'}">본청</option>
<option th:each="code, i : ${codeList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}">
</option>
</select>
</div>
<div class="col-auto">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="stDate" name="stDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.stDate}">
<input type="text" class="form-control form-control-sm" id="edDate" name="edDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.edDate}">
</div>
</div>
<div class=" col-auto">
<input type="submit" class="btn btn-sm btn-primary" id="searchBtn" value="검색">
</div>
</div>
</div>
</div>
</form>
<div class="row">
<div class="col-12 overflow-auto">
<table class="table table-sm table-bordered table-hover text-nowrap">
<thead>
<tr class="table-secondary">
<th rowspan="2">사업명</th>
<th rowspan="2">구분</th>
<th rowspan="2">세부내역</th>
<th rowspan="2">예산총액</th>
<th rowspan="2">예산총배정액<br>(누적)</th>
<th colspan="2">집행액(총계)</th>
<th colspan="4" class="w-400px" th:each="orglist : ${downOrgList}" th:text="${orglist.orgName}"></th>
</tr>
<tr class="table-secondary">
<th>지출총액</th>
<th>보유잔액</th>
<th:block th:each="orglist : ${downOrgList}">
<th class="w-100px">배정액</th>
<th class="w-100px">지출총액</th>
<th class="w-100px">잔액</th>
<th class="w-100px">집행률</th>
</th:block>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}" onclick="getEditModal(this)"
th:data-name1="${info.budgetNameL1}"
th:data-name2="${info.budgetNameL2}"
th:data-name3="${info.budgetNameL3}">
<td th:text="${info.budgetNameL1}"></td>
<td th:text="${info.budgetNameL2}"></td>
<td th:text="${info.budgetNameL3}"></td>
<td th:text="${#numbers.formatInteger(info.planAmount,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}" class="text-end"></td>
<th:block th:each="orglist, j : ${downOrgList}">
<th:block th:if="${j.index} == '0'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount1,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate1,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '1'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate2,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '2'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate3,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '3'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate4,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '4'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate5,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '5'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate6,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '6'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate7,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '7'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(#numbers.formatInteger(info.expenseRate8,1,'COMMA'), '%')}" class="text-end"></td>
</th:block>
</th:block>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between">
<div class="col-auto"></div>
<div class="col-auto">
</div>
<div class="col-auto">
<p class="mb-0 mt-2">정보예산관리 > 집행관리</p>
<!--<input type="button" class="btn btn-success" value="등록" id="addFaRptBtn">-->
</div>
</div>
<input type="hidden" name="_csrf_header" th:value="${_csrf.headerName}"/>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
<div class="row mx-0">
<div class="col-12 card bg-light text-center">
<div class="card-body">
<form id="assginForm" method="get" action="/budget/assign" onsubmit="return false;">
<input type="hidden" name="year" id="year" th:value="${param.year}"/>
<div class="row justify-content-between py-1">
<div class="col-auto">
</div>
<div class="col-auto">
<div class="row justify-content-end">
<div class="col-auto">
</div>
<div class="col-auto">
</div>
<div class="col-auto">
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="code" id="code">
<option value="OG001" th:selected="${searchParams?.code eq '본청'}">본청</option>
<option th:each="code, i : ${codeList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}"
th:selected="${searchParams?.code eq code.orgCode}">
</option>
</select>
</div>
<div class="col-auto">
<div class="input-group w-auto input-daterange" id="dateSelectorDiv">
<input type="text" class="form-control form-control-sm" id="stDate" name="stDate" placeholder="시작일" autocomplete="off" readonly th:value="${searchParams.stDate}">
<input type="text" class="form-control form-control-sm" id="edDate" name="edDate" placeholder="종료일" autocomplete="off" readonly th:value="${searchParams.edDate}">
</div>
</div>
<div class=" col-auto">
<input type="submit" class="btn btn-sm btn-primary" id="searchBtn" value="검색">
</div>
</div>
</div>
</div>
</form>
<div class="row">
<div class="table-responsive col-12">
<table class="table table-sm table-bordered table-hover">
<thead>
<tr class="table-secondary">
<th rowspan="2">사업명</th>
<th rowspan="2">구분</th>
<th rowspan="2">세부내역</th>
<th rowspan="2">예산총액</th>
<th rowspan="2">예산총배정액<br>(누적)</th>
<th colspan="2">집행액(총계)</th>
<th colspan="4" class="w-400px" th:each="orglist : ${downOrgList}" th:text="${orglist.orgName}"></th>
</tr>
<tr class="table-secondary">
<td>지출총액</td>
<td>보유잔액</td>
<th:block th:each="orglist : ${downOrgList}">
<th class="w-100px">배정액</th>
<th class="w-100px">지출총액</th>
<th class="w-100px">잔액</th>
<th class="w-100px">집행률</th>
</th:block>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}" onclick="getEditModal(this)"
th:data-name1="${info.budgetNameL1}"
th:data-name2="${info.budgetNameL2}"
th:data-name3="${info.budgetNameL3}">
<td th:text="${info.budgetNameL1}"></td>
<td th:text="${info.budgetNameL2}"></td>
<td th:text="${info.budgetNameL3}"></td>
<td th:text="${#numbers.formatInteger(info.planAmount,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}"
class="text-end"></td>
<th:block th:each="orglist, j : ${downOrgList}">
<th:block th:if="${j.index} == '0'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount1,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount1,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount1,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate1,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '1'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount2,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount2,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount2,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate2,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '2'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount3,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount3,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount3,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate3,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '3'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount4,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount4,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount4,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate4,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '4'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount5,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount5,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount5,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate5,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '5'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount6,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount6,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount6,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate6,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '6'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount7,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount7,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount7,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate7,1,'COMMA')}"
class="text-end"></td>
</th:block>
<th:block th:if="${j.index} == '7'">
<td th:text="${#numbers.formatInteger(info.periodAssignAmount8,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expensePAmount8,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.blanceAmount8,1,'COMMA')}"
class="text-end"></td>
<td th:text="${#numbers.formatInteger(info.expenseRate8,1,'COMMA')}"
class="text-end"></td>
</th:block>
</th:block>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row justify-content-between">
<div class="col-auto"></div>
<div class="col-auto">
</div>
<div class="col-auto">
<!--<input type="button" class="btn btn-success" value="등록" id="addFaRptBtn">-->
</div>
</div>
<div class="modal fade" id="editModal">
<div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content" id="editModalContent"></div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="editModal">
<div class="modal-dialog modal-lg modal-dialog-scrollable">
<div class="modal-content" id="editModalContent"></div>
</div>
</div>
</div>
</main>
</div>
</div>
</main>
</div>
</html>

View File

@ -78,11 +78,11 @@
</thead>
<tbody>
<tr class="odd gradeX reporterTr grid" th:each="info, i : ${list}">
<td th:text="${info.expenseDate}"></td>
<td th:text="${#strings.substringBefore(info.expenseDate, ' ')}"></td>
<td th:text="${info.expenseItem}"></td>
<td th:text="${info.amount}"></td>
<td th:text="${info.modiId}"></td>
<td th:text="${info.modiDate}"></td>
<td th:text="${#strings.substringBefore(info.modiDate, '.')}"></td>
</tr>
<th:block th:if="${#lists.isEmpty(list)}">