예산통계 세부내역별 현황 수정

예산편성 ajax type 변경.
예산배정, 집행관리 음수 입력 허용
예산통계 총괄표 작업중.
master
강석 최 2023-07-28 18:01:44 +09:00
parent 6c5e968861
commit 5b6a21eb60
24 changed files with 916 additions and 1435 deletions

View File

@ -37,7 +37,7 @@ public class BudgetController {
}
System.out.println(requestDto.getYear());
List<BudgetingList> list = budgetService.selectBudgetingList(loginUser, requestDto);
List<YearResult> yearList = budgetService.selectBudgetingYearList(loginUser);
List<Integer> yearList = budgetService.selectBudgetingYearList(loginUser);
long sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += list.get(i).getAmount();
@ -60,7 +60,7 @@ public class BudgetController {
}
// 예산편성 - 연도 삭제
@DeleteMapping("/budgeting/year")
@PostMapping("/budgeting/deleteYear")
public ResultResponse<?> deleteYearBudgeting(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.BudgetingCopyReqeust requestDto) {
budgetService.deleteBudgetingYear(loginUser, requestDto);
return new ResultResponse().successResponse(ResultResponseCode.SUCCESS);
@ -89,13 +89,13 @@ public class BudgetController {
}
//예산편성 - 항목변경
@PutMapping("/budgeting/code")
@PostMapping("/budgeting/updateCode")
public ResultResponse<?> updateBudgeting(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.BudgetingUpdateReqeust requestDto) {
return new ResultResponse(budgetService.updateBudgetingList(loginUser, requestDto));
}
//예산편성 - 항목삭제
@DeleteMapping("/budgeting/code")
@PostMapping("/budgeting/deleteCode")
public ResultResponse<?> deleteBudgeting(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.BudgetingInsertReqeust requestDto) {
return new ResultResponse(budgetService.deleteBudgetingList(loginUser, requestDto));
}
@ -118,7 +118,7 @@ public class BudgetController {
}
// 예산편성 - 예산삭제 (0원 세팅)
@DeleteMapping("/budgeting") //@AuthenticationPrincipal
@PostMapping("/deleteBudgeting") //@AuthenticationPrincipal
public ResultResponse<?> deleteBudgeting(UserInfo loginUser, BudgetDto.BudgetingSaveReqeust requestDto) {
budgetService.deleteBudgeting(loginUser, requestDto);
return new ResultResponse().successResponse(ResultResponseCode.SUCCESS);
@ -270,33 +270,24 @@ public class BudgetController {
@GetMapping("/stats")
public ModelAndView viewStatsAllList(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.StatsSearchReqeust requestDto, Pageable pageable) {
ModelAndView mav = new ModelAndView("budget/stats");
String userOrgCode;
if (requestDto.getYear() != null) {
userOrgCode = requestDto.getCode();
List<ExpenseResult> list = budgetService.selectSpGetbudgetStatOrg(loginUser, requestDto);
mav.addObject("list", list);
} else {
// 로그인된 해당청 기본선택
userOrgCode = loginUser.getOgCd();
mav.addObject("list");
// 첫해 첫날 ~ 오늘날짜 기본세팅
if(requestDto.getCode()==null){
//기초 검색 데이터 세팅
requestDto.setCode(loginUser.getOgCd());
requestDto.setWon(1);
LocalDate date = LocalDate.now();
String CurrentYear = String.valueOf(date.getYear()) + "-01-01";
requestDto.setStDate(LocalDate.parse(CurrentYear));
requestDto.setStDate(LocalDate.parse(date.getYear()+"-01-01"));
requestDto.setEdDate(date);
}
//하위청 리스트
List<CodeResult> downOrgList = budgetService.selectDownOrg(loginUser.getOgCd());
mav.addObject("downOrgList", downOrgList);
List<CodeResult> codeList = budgetService.selectGetLowerOrgCodeByName(loginUser);
mav.addObject("codeList", codeList);
mav.addObject("budgetCode", budgetService.selectBudgetCodeToYear(requestDto.getStDate().getYear()));
mav.addObject("loginOrgan", loginUser.getOgCd());
if(loginUser.getOgCd().equals("OG001")){
//하위청 리스트
List<CodeResult> downOrgList = budgetService.selectDownOrg(loginUser.getOgCd());
mav.addObject("downOrgList", downOrgList);
}
mav.addObject("searchParams", requestDto);
return mav;
}
@ -352,8 +343,9 @@ public class BudgetController {
@GetMapping("/stats/detail")
public ModelAndView viewStatsDetailList(@AuthenticationPrincipal UserInfo loginUser, BudgetDto.StatsSearchReqeust requestDto, Pageable pageable) {
ModelAndView mav = new ModelAndView("budget/statsDetail");
requestDto.setCode(loginUser.getOgCd());
List<YearResult> yearList = budgetService.selectBudgetingYearList(loginUser);
List<Integer> yearList = budgetService.selectBudgetingYearList(loginUser);
if (requestDto.getStDate() != null) {
// List<StatsItemResult> list = budgetService.selectSpGetbudgetStatDetail(loginUser, requestDto);
List<StatsDetailResult> list = budgetService.selectStatDetailList(requestDto);
@ -363,22 +355,19 @@ public class BudgetController {
} else {
LocalDate date = LocalDate.now();
List<L3CodeResult> codeList = budgetService.selectSpGetL3Code(loginUser, date.getYear());
requestDto.setYear(date.getYear());
requestDto.setYear(requestDto.getYear()==null?date.getYear():requestDto.getYear());
mav.addObject("list");
mav.addObject("codeList", codeList);
requestDto.setCode(loginUser.getOgCd());
// 첫해 첫날 ~ 오늘날짜 기본세팅
String CurrentYear = date.getYear() + "-01-01";
String CurrentYear = requestDto.getYear() + "-01-01";
requestDto.setStDate(LocalDate.parse(CurrentYear));
requestDto.setEdDate(date);
if(requestDto.getYear().equals(date.getYear())){
requestDto.setEdDate(date);
}else{
requestDto.setEdDate(LocalDate.parse(requestDto.getYear()+"-12-31"));
}
}
//하위청 리스트 - 검색용
mav.addObject("downOrgList", budgetService.selectDownOrg(loginUser.getOgCd()));
//하위청 리스트 - 목록용
mav.addObject("downList", budgetService.selectDownOrg(requestDto.getCode()));
mav.addObject("loginOrgan", loginUser.getOgCd());
mav.addObject("yearList", yearList);
mav.addObject("searchParams", requestDto);

View File

@ -9,7 +9,7 @@ import java.util.List;
@Mapper
public interface BudgetMapper {
List<BudgetingList> callSpGetBudgetPlanInfo(BudgetParams param);
List<YearResult> callSpGetBudgetCodeYearList();
List<Integer> callSpGetBudgetCodeYearList();
UpdateResult callSpCopyBudgetItem(BudgetParams param);
UpdateResult callBruteForceDeleteBudgetItem(BudgetParams param);
UpdateResult callSpUpdateBudgetPlanCodeItem(BudgetParams param);
@ -32,4 +32,7 @@ public interface BudgetMapper {
List<AssignAmount> selectBudgetAssignAmountList(BudgetParams params);
List<ExpenseAmount> selectBudgetExpenseAmountList(BudgetParams params);
List<StatsDetailResult> selectStatDetailList(BudgetParams params);
List<TblBudgetCodeL1> selectBudgetCodeL1List(String year);
List<TblBudgetCodeL2> selectBudgetCodeL2List(String l1Code);
}

View File

@ -0,0 +1,14 @@
package com.dbnt.faisp.main.budget.model;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class BudgetCode {
List<TblBudgetCodeL1> codeL1List;
List<TblBudgetCodeL2> codeL2List;
List<TblBudgetCodeL3> codeL3List;
}

View File

@ -34,6 +34,9 @@ public class TblBudgetCodeL1 {
@Column(name = "modi_date")
private LocalDateTime modiDate;
@Transient
private Integer colspan;
public void setData(String l1Code, String l1Name, String l1Year, String useTag, Integer seqOrd, String remark, LocalDateTime modiDate){
this.l1Code = l1Code;
this.l1Name = l1Name;

View File

@ -6,10 +6,7 @@ import lombok.Setter;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
import java.time.LocalDateTime;
@Getter
@ -37,6 +34,8 @@ public class TblBudgetCodeL2 {
@Column(name = "modi_date")
private LocalDateTime modiDate;
@Transient
private Integer colspan;
public void setData(String l2Code, String l2Name, String l1Code, String useTag, Integer seqOrd, String remark, LocalDateTime modiDate){
this.l2Code = l2Code;

View File

@ -6,10 +6,7 @@ import lombok.Setter;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
import java.time.LocalDateTime;
@Getter
@ -37,6 +34,9 @@ public class TblBudgetCodeL3 {
@Column(name = "modi_date")
private LocalDateTime modiDate;
@Transient
private Integer colspan;
public void setData(String l3Code, String l3Name, String l2Code, String useTag, Integer seqOrd, String remark, LocalDateTime modiDate){
this.l3Code = l3Code;
this.l3Name = l3Name;

View File

@ -6,6 +6,7 @@ import lombok.Setter;
@Getter
@Setter
public class StatsDetailResult {
String parentOrgan;
String organCd;
Double planAmount = 0d;
Double assignAmount = 0d;

View File

@ -3,9 +3,11 @@ package com.dbnt.faisp.main.budget.repository;
import com.dbnt.faisp.main.budget.model.TblBudgetCodeL1;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface TblBudgetCodeL1Repository extends JpaRepository<TblBudgetCodeL1, String> {
Optional<TblBudgetCodeL1> findByL1NameAndL1YearAndUseTag(String l1Name, String l1Year, String useTag);
Optional<TblBudgetCodeL1> findTop1ByL1YearOrderByL1CodeDesc(String l1Year);
List<TblBudgetCodeL1> findByL1YearOrderByL1Code(String year);
}

View File

@ -3,10 +3,13 @@ package com.dbnt.faisp.main.budget.repository;
import com.dbnt.faisp.main.budget.model.TblBudgetCodeL2;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface TblBudgetCodeL2Repository extends JpaRepository<TblBudgetCodeL2, String> {
Optional<TblBudgetCodeL2> findByL2NameAndL1CodeAndUseTag(String codeL2Name, String l1Code, String y);
Optional<TblBudgetCodeL2> findTop1ByL1CodeOrderByL2CodeDesc(String l1Code);
List<TblBudgetCodeL2> findByL1CodeOrderByL2Code(String l1Code);
}

View File

@ -3,10 +3,13 @@ package com.dbnt.faisp.main.budget.repository;
import com.dbnt.faisp.main.budget.model.TblBudgetCodeL3;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface TblBudgetCodeL3Repository extends JpaRepository<TblBudgetCodeL3, String> {
Optional<TblBudgetCodeL3> findByL3NameAndL2CodeAndUseTag(String codeL3Name, String l2Code, String useTag);
Optional<TblBudgetCodeL3> findTop1ByL2CodeOrderByL3CodeDesc(String l2Code);
List<TblBudgetCodeL3> findByL2CodeAndUseTagOrderByL3Code(String l2Code, String useTag);
}

View File

@ -43,7 +43,7 @@ public class BudgetService {
return budgetMapper.callSpGetBudgetPlanInfo(param);
}
public List<YearResult> selectBudgetingYearList(UserInfo loginUser){
public List<Integer> selectBudgetingYearList(UserInfo loginUser){
// return budgetRepository.callSpGetBudgetCodeYearList();
return budgetMapper.callSpGetBudgetCodeYearList();
}
@ -572,7 +572,41 @@ public class BudgetService {
params.setStDate(requestDto.getStDate());
params.setEdDate(requestDto.getEdDate());
params.setWon(requestDto.getWon());
List<StatsDetailResult> statsList = budgetMapper.selectStatDetailList(params);
List<StatsDetailResult> statsList = new ArrayList<>();
List<StatsDetailResult> tempList = budgetMapper.selectStatDetailList(params);
if(requestDto.getCode().equals("OG001")){
StatsDetailResult total = new StatsDetailResult();
for(StatsDetailResult stats: tempList){
if(stats.getParentOrgan()!=null){
params.setCode(stats.getOrganCd());
List<StatsDetailResult> subList = budgetMapper.selectStatDetailList(params);
StatsDetailResult subTotal = new StatsDetailResult();
subTotal.setOrganCd(stats.getOrganCd());
subTotal.setParentOrgan(stats.getOrganCd());
for(StatsDetailResult sub: subList){
total.setAssignAmount(total.getAssignAmount()+sub.getAssignAmount());
total.setExpenseAmount(total.getExpenseAmount()+sub.getExpenseAmount());
subTotal.setAssignAmount(subTotal.getAssignAmount()+sub.getAssignAmount());
subTotal.setExpenseAmount(subTotal.getExpenseAmount()+sub.getExpenseAmount());
}
statsList.add(subTotal);
statsList.addAll(subList);
}else{
total.setAssignAmount(total.getAssignAmount()+stats.getAssignAmount());
total.setExpenseAmount(total.getExpenseAmount()+stats.getExpenseAmount());
statsList.add(stats);
}
}
tempList.clear();
tempList.addAll(statsList);
statsList.clear();
statsList.add(total);
statsList.addAll(tempList);
}else{
statsList.addAll(tempList);
}
Double wonUnit = params.getWon().doubleValue();
for(StatsDetailResult stat : statsList){
stat.setPlanAmount(stat.getPlanAmount()/wonUnit);
@ -593,6 +627,29 @@ public class BudgetService {
return budgetMapper.callSpGetBudgetCodeL3(params);
}
public BudgetCode selectBudgetCodeToYear(Integer year) {
BudgetCode budgetCode = new BudgetCode();
List<TblBudgetCodeL1> codeL1List = budgetMapper.selectBudgetCodeL1List(year.toString());
List<TblBudgetCodeL2> codeL2List = new ArrayList<>();
List<TblBudgetCodeL3> codeL3List = new ArrayList<>();
for(TblBudgetCodeL1 codeL1: codeL1List){
List<TblBudgetCodeL2> temp2List = budgetMapper.selectBudgetCodeL2List(codeL1.getL1Code());
int l1Colspan = 0;
for(TblBudgetCodeL2 codeL2: temp2List){
List<TblBudgetCodeL3> temp3List = codeL3Repository.findByL2CodeAndUseTagOrderByL3Code(codeL2.getL2Code(), "Y");
codeL2.setColspan(temp3List.size());
l1Colspan += temp3List.size();
codeL3List.addAll(temp3List);
}
codeL2List.addAll(temp2List);
codeL1.setColspan(l1Colspan);
}
budgetCode.setCodeL1List(codeL1List);
budgetCode.setCodeL2List(codeL2List);
budgetCode.setCodeL3List(codeL3List);
return budgetCode;
}
// public void insertBudgetingYear(UserInfo loginUser, BudgetDto.BudgetingUpdateReqeust requestDto){
// UpdateResult result = budgetRepository.callSpUpdateBudgetPlanCodeName( requestDto.getPrevNameL1(), requestDto.getPrevNameL2(), requestDto.getPrevNameL3(),requestDto.getYear(),requestDto.getNameL1(),requestDto.getNameL2(),requestDto.getNameL3(), "OG001", "admin");

View File

@ -16,7 +16,7 @@
modi_date as modiDate
from sp_get_budget_plan_info(#{code1}, #{code2}, #{code3})
</select>
<select id="callSpGetBudgetCodeYearList" resultType="YearResult">
<select id="callSpGetBudgetCodeYearList" resultType="int">
select l1_year as year
from sp_get_budget_code_year_list( )
</select>
@ -191,43 +191,62 @@
</select>
<select id="selectStatDetailList" resultType="StatsDetailResult" parameterType="BudgetParams">
select og.organ_cd, tba.assign_amount, tbe.expense_amount
select og.parent_organ, og.organ_cd, tba.assign_amount, tbe.expense_amount
from(
select (ROW_NUMBER() OVER()) AS order_seq, *
from (
select organ_cd
from (
select #{code} as organ_cd
union all
select organ_cd
from organ_config
where parent_organ = #{code}
) a
inner join code_mgt b on a.organ_cd = b.item_cd
order by b.order_num
) a
) og
left outer join
(
select l_org_code, sum(amount) as assign_amount
from tbl_budget_assign tba
where h_org_code = #{code}
and assign_date >= #{stDate}::date
and assign_date &lt;= #{edDate}::date+1
and budget_code = #{item}
group by l_org_code
) tba
on og.organ_cd = tba.l_org_code
left outer join
(
select org_code, sum(amount) as expense_amount
from tbl_budget_expense tbe
where expense_date >= #{stDate}::date
and expense_date &lt;= #{edDate}::date+1
and budget_code = #{item}
group by org_code
) tbe
on og.organ_cd = tbe.org_code
select (ROW_NUMBER() OVER()) AS order_seq, *
from (
select parent_organ, organ_cd
from (
select null as parent_organ, #{code} as organ_cd
union all
select parent_organ, organ_cd
from organ_config
where parent_organ = #{code}
) a
inner join code_mgt b on a.organ_cd = b.item_cd
order by b.order_num
) a
) og
left outer join
(
select l_org_code, sum(amount) as assign_amount
from tbl_budget_assign tba
where h_org_code = #{code}
and assign_date >= #{stDate}::date
and assign_date &lt;= #{edDate}::date+1
and budget_code = #{item}
group by l_org_code
) tba
on og.organ_cd = tba.l_org_code
left outer join
(
select org_code, sum(amount) as expense_amount
from tbl_budget_expense tbe
where expense_date >= #{stDate}::date
and expense_date &lt;= #{edDate}::date+1
and budget_code = #{item}
group by org_code
) tbe
on og.organ_cd = tbe.org_code
order by og.order_seq
</select>
<select id="selectBudgetCodeL1List" resultType="TblBudgetCodeL1" parameterType="String">
select distinct c1.*
from tbl_budget_code_l1 c1
inner join tbl_budget_code_l2 c2 on c2.l1_code = c1.l1_code
inner join tbl_budget_code_l3 c3 on c3.l2_code = c2.l2_code
where c3.use_tag = 'Y'
and c1.l1_year = #{year}
order by c1.l1_code
</select>
<select id="selectBudgetCodeL2List" resultType="TblBudgetCodeL2" parameterType="String">
select distinct c2.*
from tbl_budget_code_l1 c1
inner join tbl_budget_code_l2 c2 on c2.l1_code = c1.l1_code
inner join tbl_budget_code_l3 c3 on c3.l2_code = c2.l2_code
where c3.use_tag = 'Y'
and c2.l1_code = #{l1Code}
order by c2.l2_code
</select>
</mapper>

View File

@ -22,6 +22,14 @@ $(document).ready(function(){
}
});
$(document).on('change', '.amountInput', function (){
const pattern = /^[+-]?\d*(\.?\d*)?$/;
if(!pattern.test(this.value)){
this.value = "";
this.focus();
}
})
$(document).on('click', '#assignsearchBtn', function () {
assignSearch();
})
@ -70,10 +78,7 @@ $(document).on('click', '#deleteBtn', function (){
$.ajax({
type : 'DELETE',
data : params,
url : "/budget/budgeting/code",
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},

View File

@ -17,9 +17,9 @@ $(document).on('click', '#deleteBtn', function () {
params.nameL3 = $("input[name='budget']:checked")[0].dataset.name3;
console.dir(params);
$.ajax({
type: 'DELETE',
type: 'POST',
data: params,
url: "/budget/budgeting/code",
url: "/budget/budgeting/deleteCode",
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
@ -88,11 +88,11 @@ $(document).on('click', '#deleteYearBtn', function () {
params.year = selected_year;
console.dir(params);
$.ajax({
type: 'DELETE',
type: 'POST',
data: params,
// data: JSON.stringify(params),
// contentType: 'application/json; charset=utf-8',
url: "/budget/budgeting/year",
url: "/budget/budgeting/deleteYear",
beforeSend: function (xhr) {
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
@ -122,9 +122,9 @@ $(document).on('click', '#budgetDeleteBtn', function () {
params.year = $("#searchYear").val();
// console.dir(params);
$.ajax({
type: 'DELETE',
type: 'POST',
data: params,
url: "/budget/budgeting",
url: "/budget/deleteBudgeting",
beforeSend: function (xhr) {
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
@ -379,9 +379,9 @@ $(document).on('click', '#modifyBtn', function () {
if (confirm("수정하시겠습니까?")) {
const formData = new FormData($("#budgetForm")[0]);
$.ajax({
type: 'PUT',
type: 'POST',
data: formData,
url: "/budget/budgeting/code",
url: "/budget/budgeting/updateCode",
processData: false,
contentType: false,
success: function (data) {

View File

@ -1,333 +1,341 @@
$(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 (){
getEditModal(0)
getEditModal(0)
})
$(document).on('change', '.amountInput', function (){
const pattern = /^[+-]?\d*(\.?\d*)?$/;
if(!pattern.test(this.value)){
this.value = "";
this.focus();
}
})
$(document).ready(function(){
if ($("#ResultRow").text().trim() == "") {
expenseSearch();
} else {
contentFade("out");
}
if ($("#ResultRow").text().trim() == "") {
expenseSearch();
} else {
contentFade("out");
}
});
$(document).on('click', '#searchBtn', function (){
expenseSearch();
expenseSearch();
})
function expenseSearch() {
var stDate = $("#stDate").val()
var edDate = $("#edDate").val()
if($("#stDate").val() ==""){
alert('시작일을 선택해주세요');
return;
}
var stDate = $("#stDate").val()
var 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;
}
$("#year").val(stDate.getFullYear());
if(stDate.getFullYear() != edDate.getFullYear()){
alert('같은 년도의 데이터만 조회가능합니다. ex)2021-01-01 ~ 2021-12-31');
return;
}
$("#year").val(stDate.getFullYear());
contentFade("in");
location.href="/budget/expense?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" +$("#code").val();
contentFade("in");
location.href="/budget/expense?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('삭제하시겠습니까?')){
var 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('삭제하시겠습니까?')){
var 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(){
}
});
});
})
function getList(){
$.ajax({
type : 'GET',
data : {},
url : "/pds/ship/list",
processData: false,
contentType: false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(response) {
console.dir(response)
$.ajax({
type : 'GET',
data : {},
url : "/pds/ship/list",
processData: false,
contentType: false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(response) {
console.dir(response)
},
error : function() {
alert("저장에 실패하였습니다.");
},
complete : function () {
loaddingOff();
}
})
},
error : function() {
alert("저장에 실패하였습니다.");
},
complete : function () {
loaddingOff();
}
})
}
function getViewModal(no){
params = {}
params.no = no;
$.ajax({
url: '/pds/ship/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
params = {}
params.no = no;
$.ajax({
url: '/pds/ship/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
}
});
}
});
}
$(document).on('click', '.grid', function(event) {
const target = event.target;
const no = (Number($(this).find(".key").val()));
const target = event.target;
const no = (Number($(this).find(".key").val()));
})
function getEditModal(v){
params = {}
params = {}
params.year = $("#year").val();
params.nameL1 = v.dataset.name1
params.nameL2 = v.dataset.name2
params.nameL3 = v.dataset.name3
$.ajax({
url: '/budget/expense/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
params.year = $("#year").val();
params.nameL1 = v.dataset.name1
params.nameL2 = v.dataset.name2
params.nameL3 = v.dataset.name3
$.ajax({
url: '/budget/expense/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$("#editModalContent").empty().append(html);
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
$("#editModal").modal('show');
},
error:function(){
},
error:function(){
}
});
}
});
}
$(document).on('click', '#expenseSaveBtn', function (){
if($("#item").val() == ""){
alert('집행내역을 입력해주세요.');
$("#item").focus();
return;
}
if($("#amount").val() == ""){
alert('집행액을 입력해주세요.');
$("#amount").focus();
return;
}
if($("#expenseDate").val() == ""){
alert('등록일을 입력해주세요.');
$("#expenseDate").focus();
return;
}
if($("#item").val() == ""){
alert('집행내역을 입력해주세요.');
$("#item").focus();
return;
}
if($("#amount").val() == ""){
alert('집행액을 입력해주세요.');
$("#amount").focus();
return;
}
if($("#expenseDate").val() == ""){
alert('등록일을 입력해주세요.');
$("#expenseDate").focus();
return;
}
var params = {}
params.item = $("#item").val();
params.amount = $("#amount").val();
params.expenseDate = $("#expenseDate").val();
params.nameL1 = $("#prevNameL1").val();
params.nameL2 = $("#prevNameL2").val();
params.nameL3 = $("#prevNameL3").val();
params.year = $("#prevYear").val();
var params = {}
params.item = $("#item").val();
params.amount = $("#amount").val();
params.expenseDate = $("#expenseDate").val();
params.nameL1 = $("#prevNameL1").val();
params.nameL2 = $("#prevNameL2").val();
params.nameL3 = $("#prevNameL3").val();
params.year = $("#prevYear").val();
if(confirm("저장하시겠습니까?")){
if(confirm("저장하시겠습니까?")){
$.ajax({
type : 'POST',
data : JSON.stringify(params),
url : "/budget/expense",
processData: false,
contentType: 'application/json',
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("저장에 실패하였습니다.");
}
})
}
$.ajax({
type : 'POST',
data : JSON.stringify(params),
url : "/budget/expense",
processData: false,
contentType: 'application/json',
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', '#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("저장에 실패하였습니다.");
}
})
}
});

View File

@ -0,0 +1,17 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#summaryTab', function (){
location.href = "/budget/stats";
})
$(document).on('click', '#orgTab', function (){
location.href = "/budget/stats/org";
})
$(document).on('click', '#detailTab', function (){
location.href = "/budget/stats/detail";
})

View File

@ -1,308 +1,42 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#addBtn', function (){
getEditModal(0)
})
$(document).ready(function(){
if ($("#ResultRow").text().trim() == "") {
statsSearch();
} else {
contentFade("out");
}
if ($("#ResultRow").text().trim() == "") {
statsSearch();
} else {
contentFade("out");
}
});
$(document).on('click', '#searchBtn', function (){
statsSearch();
statsSearch();
})
$(document).on('change', '#year', function (){
location.href="/budget/stats/detail?year="+$("#year").val();
})
function statsSearch () {
var stDate = $("#stDate").val()
var edDate = $("#edDate").val()
if($("#stDate").val() ==""){
alert('시작일을 선택해주세요');
return;
}
var stDate = $("#stDate").val()
var 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;
}
contentFade("in");
//location.href="/budget/stats/detail?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" +$("#code").val() + "&won="+$("#won").val();
location.href="/budget/stats/detail?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code="+$("#code").val()+"&won="+$("#won").val()+"&item="+$("#item").val();
contentFade("in");
//location.href="/budget/stats/detail?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" +$("#code").val() + "&won="+$("#won").val();
location.href="/budget/stats/detail?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code="+$("#code").val()+"&won="+$("#won").val()+"&item="+$("#item").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('삭제하시겠습니까?')){
var 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",
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("삭제에 실패하였습니다.");
}
})
}
})
function changeYear(){
location.href="/budget/stats/detail?year="+$("#year").val();
}
$(document).on('click', '#updateBtn', function (){
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(){
}
});
})
function goAll() {
location.href="/budget/stats/all"
}
function goOrg(){
location.href="/budget/stats/org"
}
function goDetail() {
location.href="/budget/stats/detail"
}
function getViewModal(no){
params = {}
params.no = no;
$.ajax({
url: '/pds/ship/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
}
});
}
$(document).on('click', '.grid', function(event) {
const target = event.target;
const no = (Number($(this).find(".key").val()));
})
function getEditModal(no){
params = {}
params.no = no;
$.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(){
}
});
}
$(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(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(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("저장에 실패하였습니다.");
}
})
}
});

View File

@ -1,14 +1,3 @@
$(function(){
$("#dateSelectorDiv").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
})
$(document).on('click', '#addBtn', function (){
getEditModal(0)
})
$(document).ready(function(){
if ($("#ResultRow").text().trim() == "") {
@ -47,282 +36,3 @@ function statsSearch() {
contentFade("in");
location.href="/budget/stats/org?year="+$("#year").val() + "&stDate=" + $("#stDate").val() + "&edDate=" + $("#edDate").val() + "&code=" +$("#code").val() + "&won="+$("#won").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('삭제하시겠습니까?')){
var 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",
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;
}
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(){
}
});
})
function getList(){
$.ajax({
type : 'GET',
data : {},
url : "/pds/ship/list",
processData: false,
contentType: false,
beforeSend: function (xhr){
xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val());
},
success : function(response) {
console.dir(response)
},
error : function() {
alert("저장에 실패하였습니다.");
},
complete : function () {
loaddingOff();
}
})
}
function goAll() {
location.href="/budget/stats/all"
}
function goOrg() {
location.href="/budget/stats/org"
}
function goDetail(){
location.href="/budget/stats/detail"
}
function getViewModal(no){
params = {}
params.no = no;
$.ajax({
url: '/pds/ship/modal/view',
data: params,
type: 'GET',
dataType:"html",
success: function(html){
$("#editModalContent").empty().append(html);
$(".dateSelector").datepicker({
format: "yyyy-mm-dd",
language: "ko",
autoclose: true
});
$("#editModal").modal('show');
},
error:function(){
}
});
}
$(document).on('click', '.grid', function(event) {
const target = event.target;
const no = (Number($(this).find(".key").val()));
})
function getEditModal(no){
params = {}
params.no = no;
$.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(){
}
});
}
$(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(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(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("저장에 실패하였습니다.");
}
})
}
});

View File

@ -54,80 +54,42 @@
<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>
<input type="text" th:id="'org0Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org0Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount1,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>
<input type="text" th:id="'org1Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org1Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount2,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>
<input type="text" th:id="'org2Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org2Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount3,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>
<input type="text" th:id="'org3Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org3Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount4,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>
<input type="text" th:id="'org4Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org4Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount5,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>
<input type="text" th:id="'org5Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org5Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount6,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>
<input type="text" th:id="'org6Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"
/></td>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org6Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount7,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>
<input type="text" th:id="'org7Amount'+${i.index}" name="year" value="" class="w-100 text-end"
th:data-code="${info?.budgetCodeL3}"
oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"/>
</td>
<td><input type="text" class="w-100 text-end amountInput" th:id="'org7Amount'+${i.index}" name="year" value="" th:data-code="${info?.budgetCodeL3}"/></td>
<td th:text="${#numbers.formatInteger(info.sumAssignAmount8,1,'COMMA')}" class="text-end"></td>
</th:block>
</th:block>

View File

@ -30,9 +30,8 @@
<div class="row justify-content-end">
<div class="col-auto">
<select class="form-select" name="year" id="searchYear">
<th:block th:each="year, i : ${yearList}">
<option th:value="${year.year}" th:text="${year.year}"
th:selected="${searchParams.year eq year.year}"></option>
<th:block th:each="year:${yearList}">
<option th:value="${year}" th:text="${year}" th:selected="${searchParams.year eq year}"></option>
</th:block>
</select>
</div>

View File

@ -21,49 +21,17 @@
<input type="hidden" id="prevNameL1" name="prevNameL1" th:value="${searchParams?.nameL1}" />
<input type="hidden" id="prevNameL2" name="prevNameL2" th:value="${searchParams?.nameL2}" />
<input type="hidden" id="prevNameL3" name="prevNameL3" th:value="${searchParams?.nameL3}" />
<div class="row ">
<div class="row col-10 ">
<div class="col-auto">
<div class="input-group " id="">
사업명:
</div>
<div class="input-group " th:text="${#strings.concat('사업명: ', searchParams.nameL1)}"></div>
</div>
<div class="col-auto">
<div class="input-group " id="" th:text="${searchParams.nameL1}">
</div>
<div class="input-group " th:text="${#strings.concat('구분: ', searchParams.nameL2)}"></div>
</div>
<div class="col-auto">
<div class="input-group " id="">
구분:
</div>
<div class="input-group " th:text="${#strings.concat('세부내역: ', searchParams.nameL3)}"></div>
</div>
<div class="col-auto">
<div class="input-group " id="" th:text="${searchParams.nameL2}">
</div>
</div>
<div class="col-auto">
<div class="input-group " id="">
세부내역:
</div>
</div>
<div class="col-auto">
<div class="input-group " id="" th:text="${searchParams.nameL3}">
</div>
</div>
</div>
</div>
<table id="data-table-default" class="table table-striped table-bordered align-middle" >
@ -83,7 +51,6 @@
<td th:text="${info.amount}"></td>
<td th:text="${info.modiId}"></td>
<td th:text="${#strings.substringBefore(info.modiDate, '.')}"></td>
</tr>
<th:block th:if="${#lists.isEmpty(list)}">
<tr>
@ -101,13 +68,12 @@
<div class="col-md-2">
<input type="text" class="form-control" id="item" name="item">
</div>
<div class="col-md-1 pe-0">
<label class="col-form-label">집행액
</label>
</div>
<div class="col-md-2">
<input type="text" class="form-control" id="amount" name="amount" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');">
<input type="text" class="form-control amountInput" id="amount" name="amount">
</div>
<div class="col-md-1 pe-0">
<label class="col-form-label">등록일

View File

@ -3,113 +3,109 @@
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/statsOrg.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/statsCommon.js}"></script>
</th:block>
<div layout:fragment="content">
<main>
<input type="hidden" id="menuKey" value="1">
<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>
<main>
<input type="hidden" id="menuKey" value="57">
<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>
<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" value=""/>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link ivsgtTab active"
data-bs-toggle="tab" type="button" role="tab">총괄표</button>
</li>
<li class="nav-item" role="presentation" onclick="goOrg()">
<button class="nav-link ivsgtTab"
data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation" onclick="goDetail()">
<button class="nav-link ivsgtTab"
data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<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">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams?.won eq '1'}"></option>
<option value="2" th:selected="${searchParams?.won eq '2'}">백원</option>
<option value="3" th:selected="${searchParams?.won eq '3'}">천원</option>
<option value="4" th:selected="${searchParams?.won eq '4'}">만원</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="code" id="code">
<option value="OG001" th:selected="${searchParams?.code eq 'OG001'}">본청</option>
<option th:each="code, i : ${codeList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}"
th:selected="${searchParams?.code eq code.orgCode}">2023
</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">
<table class="table table-sm table-bordered table-hover">
<thead>
<tr class="table-secondary">
<th rowspan="3">구분</th>
</tr>
<tr class="table-secondary">
<th>프로그램</th>
<th>단위사업</th>
<th>세부사업</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr class="faRptTr" th:each="info, i : ${list}">
</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="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">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation" id="summaryTab">
<button class="nav-link ivsgtTab active" data-bs-toggle="tab" type="button" role="tab">총괄표</button>
</li>
<li class="nav-item" role="presentation" id="orgTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation" id="detailTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<form id="statsForm" method="get" action="/budget/stats">
<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">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams.won eq '1'}"></option>
<option value="2" th:selected="${searchParams.won eq '2'}">백원</option>
<option value="3" th:selected="${searchParams.won eq '3'}">천원</option>
<option value="4" th:selected="${searchParams.won eq '4'}">만원</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="code" id="code">
<th:block th:each="code:${downOrgList}">
<option th:value="${code.orgCode}" th:text="${code.orgName}"
th:selected="${searchParams?.code eq code.orgCode}"></option>
</th:block>
</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 class="align-middle">
<tr class="table-secondary">
<th rowspan="3">구분</th>
<th>프로그램</th>
<th:block th:each="codeL1:${budgetCode.codeL1List}">
<th th:text="${codeL1.l1Name}" th:colspan="${codeL1.colspan}"></th>
</th:block>
<th rowspan="3">합계</th>
<th rowspan="3">집행률</th>
</tr>
<tr class="table-secondary">
<th>단위사업</th>
<th:block th:each="codeL2:${budgetCode.codeL2List}">
<th th:text="${codeL2.l2Name}" th:colspan="${codeL2.colspan}"></th>
</th:block>
</tr>
<tr class="table-secondary">
<th>세부사업</th>
<th:block th:each="codeL3:${budgetCode.codeL3List}">
<th th:text="${codeL3.l3Name}"></th>
</th:block>
</tr>
</thead>
<tbody class="table-group-divider">
<!--<tr class="faRptTr" th:each="info, i : ${list}">
</tr>-->
</tbody>
</table>
</div>
</div>
</div>
</main>
</div>
</div>
</main>
</div>
</html>

View File

@ -3,138 +3,131 @@
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/statsDetail.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/statsCommon.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/statsDetail.js}"></script>
</th:block>
<div layout:fragment="content">
<main>
<input type="hidden" id="menuKey" value="57">
<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>
<main>
<input type="hidden" id="menuKey" value="57">
<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>
<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;">
<ul class="nav nav-tabs" role="tablist">
<!-- <li class="nav-item" role="presentation" onclick="goAll()">-->
<!-- <button class="nav-link ivsgtTab"-->
<!-- data-bs-toggle="tab" type="button" role="tab">총괄표</button>-->
<!-- </li>-->
<li class="nav-item" role="presentation" onclick="goOrg()">
<button class="nav-link ivsgtTab"
data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link ivsgtTab active"
data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<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">
<th:block th:if="${loginOrgan eq 'OG001'}">
<select class="form-select form-select-sm" name="code" id="code">
<option th:each="code : ${downOrgList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}">
</option>
</select>
</th:block>
<th:block th:unless="${loginOrgan eq 'OG001'}">
<input type="hidden" name="code" id="code" th:value="${loginOrgan}">
</th:block>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams?.won eq 1}"></option>
<option value="100" th:selected="${searchParams?.won eq 100}">백원</option>
<option value="1000" th:selected="${searchParams?.won eq 1000}">천원</option>
<option value="10000" th:selected="${searchParams?.won eq 10000}">만원</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="year" id="year" onchange="changeYear()">
<th:block th:each="info, i : ${yearList}">
<option th:value="${info.year}" th:selected="${searchParams?.year eq info.year}" th:text="${info.year}">2023</option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="item" id="item">
<option th:each="code, i : ${codeList}" th:value="${code?.l3Code}" th:text="${code?.l3Name}" th:selected="${searchParams?.item eq code.l3Code}">2023</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">
<table class="table table-sm table-bordered table-hover">
<thead>
<tr class="table-secondary">
</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;">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation" id="summaryTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">총괄표</button>
</li>
<li class="nav-item" role="presentation" id="orgTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation" id="detailTab">
<button class="nav-link ivsgtTab active" data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<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">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams.won eq 1}"></option>
<option value="100" th:selected="${searchParams.won eq 100}">백원</option>
<option value="1000" th:selected="${searchParams.won eq 1000}">천원</option>
<option value="10000" th:selected="${searchParams.won eq 10000}">만원</option>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="year" id="year">
<th:block th:each="year:${yearList}">
<option th:value="${year}" th:text="${year}" th:selected="${searchParams.year eq year}"></option>
</th:block>
</select>
</div>
<div class="col-auto">
<select class="form-select form-select-sm" name="item" id="item">
<option th:each="code, i : ${codeList}" th:value="${code?.l3Code}" th:text="${code?.l3Name}" th:selected="${searchParams?.item eq code.l3Code}">2023</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">
<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">예산배정액<br/>(누적)</th>
<th rowspan="1" colspan="3">집행액(총계)</th>
</tr>
<tr class="table-secondary">
<th>지출액</th>
<th>보유잔액</th>
<th>집행비율</th>
</tr>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}">
<td>
<th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${code.itemCd eq info.organCd}" th:text="${code.itemValue}"></th:block>
</th:block>
</td>
<!--<td th:text="${#numbers.formatInteger(info.planAmount,1,'COMMA')}"></td>-->
<td th:text="${#numbers.formatInteger(info.assignAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.expenseAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.balanceAmount,1,'COMMA')}"></td>
<td th:text="${#strings.concat(info.rate,'%')}"></td>
</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>
<th rowspan="2">재무관서</th>
<!--<th rowspan="2">예산총액</th>-->
<th rowspan="2">예산배정액<br/>(누적)</th>
<th rowspan="1" colspan="3">집행액(총계)</th>
</tr>
<tr class="table-secondary">
<th>지출액</th>
<th>보유잔액</th>
<th>집행비율</th>
</tr>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}">
<td>
<th:block th:if="${info.organCd eq null}" th:text="총계"></th:block>
<th:block th:if="${info.organCd ne null}">
<th:block th:each="code:${session.commonCode.get('OG')}">
<th:block th:if="${code.itemCd eq info.organCd}">
<th:block th:if="${info.organCd eq info.parentOrgan}" th:text="${#strings.concat(code.itemValue, '(소계)')}"></th:block>
<th:block th:if="${info.organCd ne info.parentOrgan}" th:text="${code.itemValue}"></th:block>
</th:block>
</th:block>
</th:block>
</td>
<!--<td th:text="${#numbers.formatInteger(info.planAmount,1,'COMMA')}"></td>-->
<td th:text="${#numbers.formatInteger(info.assignAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.expenseAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.balanceAmount,1,'COMMA')}"></td>
<td th:text="${#strings.concat(info.rate,'%')}"></td>
</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>
</main>
</div>
</div>
</main>
</div>
</html>

View File

@ -3,192 +3,190 @@
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/statsOrg.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/statsCommon.js}"></script>
<script type="text/javascript" th:src="@{/js/budget/statsOrg.js}"></script>
</th:block>
<div layout:fragment="content">
<main>
<input type="hidden" id="menuKey" value="57">
<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="57">
<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" value=""/>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation" id="summaryTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">총괄표</button>
</li>
<li class="nav-item" role="presentation" id="orgTab">
<button class="nav-link ivsgtTab active" data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation" id="detailTab">
<button class="nav-link ivsgtTab" data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<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">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams?.won eq 1}"></option>
<option value="100" th:selected="${searchParams?.won eq 100}">백원</option>
<option value="1000" th:selected="${searchParams?.won eq 1000}">천원</option>
<option value="10000" th:selected="${searchParams?.won eq 10000}">만원</option>
</select>
</div>
<div class="col-auto">
<th:block th:if="${loginOrgan eq 'OG001'}">
<select class="form-select form-select-sm" name="code" id="code">
<option th:each="code : ${downOrgList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}">
</option>
</select>
</th:block>
<th:block th:unless="${loginOrgan eq 'OG001'}">
<input type="hidden" name="code" id="code" th:value="${loginOrgan}">
</th:block>
</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 rowspan="1" colspan="3">집행액(총계)</th>
<th:block th:each="orglist : ${downList}">
<th colspan="4" th:text="${orglist.orgName}"></th>
</th:block>
</tr>
<tr class="table-secondary">
<th>지출총액</th>
<th>보유잔액</th>
<th>진행률</th>
<th:block th:each="orglist : ${downList}">
<th>배정액</th>
<th>지출총액</th>
<th>잔액</th>
<th>집행률</th>
</th:block>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}">
<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')}"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}"></td>
<td th:text="${#strings.concat(info.taRate, '%')}"></td>
<th:block th:each="orglist, j : ${downList}">
<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.balanceAmount1,1,'COMMA')}" class="text-end">11</td>
<td th:text="${#strings.concat(info.expenseRate1,'%')}" 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.balanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate2,'%')}" 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.balanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate3,'%')}" 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.balanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate4,'%')}" 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.balanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate5,'%')}" 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.balanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate6,'%')}" 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.balanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate7,'%')}" 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.balanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate8,'%')}" 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>
</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" value=""/>
<ul class="nav nav-tabs" role="tablist">
<!-- <li class="nav-item" role="presentation" onclick="goAll()">-->
<!-- <button class="nav-link ivsgtTab"-->
<!-- data-bs-toggle="tab" type="button" role="tab">총괄표></button>-->
<!-- </li>-->
<li class="nav-item" role="presentation">
<button class="nav-link ivsgtTab active"
data-bs-toggle="tab" type="button" role="tab">관서별현황</button>
</li>
<li class="nav-item" role="presentation" onclick="goDetail()">
<button class="nav-link ivsgtTab"
data-bs-toggle="tab" type="button" role="tab">세부내역별현황</button>
</li>
</ul>
<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">
<select class="form-select form-select-sm" name="won" id="won">
<option value="1" th:selected="${searchParams?.won eq 1}"></option>
<option value="100" th:selected="${searchParams?.won eq 100}">백원</option>
<option value="1000" th:selected="${searchParams?.won eq 1000}">천원</option>
<option value="10000" th:selected="${searchParams?.won eq 10000}">만원</option>
</select>
</div>
<div class="col-auto">
<th:block th:if="${loginOrgan eq 'OG001'}">
<select class="form-select form-select-sm" name="code" id="code">
<option th:each="code : ${downOrgList}" th:value="${code?.orgCode}"
th:text="${code?.orgName}" th:selected="${searchParams?.code eq code.orgCode}">
</option>
</select>
</th:block>
<th:block th:unless="${loginOrgan eq 'OG001'}">
<input type="hidden" name="code" id="code" th:value="${loginOrgan}">
</th:block>
</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 rowspan="1" colspan="3">집행액(총계)</th>
<th:block th:each="orglist : ${downList}">
<th colspan="4" th:text="${orglist.orgName}"></th>
</th:block>
</tr>
<tr class="table-secondary">
<th>지출총액</th>
<th>보유잔액</th>
<th>진행률</th>
<th:block th:each="orglist : ${downList}">
<th>배정액</th>
<th>지출총액</th>
<th>잔액</th>
<th>집행률</th>
</th:block>
</tr>
</thead>
<tbody class="table-group-divider" id="ResultRow">
<tr class="faRptTr" th:each="info, i : ${list}">
<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')}"></td>
<td th:text="${#numbers.formatInteger(info.totalAssignAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.expenseTAmount,1,'COMMA')}"></td>
<td th:text="${#numbers.formatInteger(info.balanceTAmount,1,'COMMA')}"></td>
<td th:text="${#strings.concat(info.taRate, '%')}"></td>
<th:block th:each="orglist, j : ${downList}">
<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.balanceAmount1,1,'COMMA')}" class="text-end">11</td>
<td th:text="${#strings.concat(info.expenseRate1,'%')}" 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.balanceAmount2,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate2,'%')}" 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.balanceAmount3,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate3,'%')}" 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.balanceAmount4,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate4,'%')}" 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.balanceAmount5,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate5,'%')}" 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.balanceAmount6,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate6,'%')}" 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.balanceAmount7,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate7,'%')}" 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.balanceAmount8,1,'COMMA')}" class="text-end"></td>
<td th:text="${#strings.concat(info.expenseRate8,'%')}" 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>
</div>
</div>
</main>
</div>
</div>
</main>
</div>
</html>