Merge pull request 'V20260210' (#193) from V20260210 into main

Reviewed-on: #193
This commit was merged in pull request #193.
This commit is contained in:
2026-03-31 02:32:53 +00:00
2 changed files with 49 additions and 8 deletions

View File

@@ -41,6 +41,14 @@
width: 100%;
box-sizing: border-box;
}
#itemListTable .item-quantity,
#itemListTable .item-unit-price,
#itemListTable .item-supply-price,
#itemListTable .item-vat,
#itemListTable .item-total-amount {
text-align: right;
}
</style>
<script type="text/javascript">
// 품목 관리 변수
@@ -166,7 +174,10 @@
// 번호 재정렬
fn_reorderItems();
// 합계 재계산
fn_calculateTotal();
// 품목이 없으면 메시지 표시
if($("#itemListBody tr.item-row").length == 0) {
$("#itemListBody").html('<tr id="noItemRow"><td colspan="11" style="text-align:center; padding:30px; color:#999;">품목 추가 버튼을 클릭하여 품목을 등록하세요.</td></tr>');
@@ -200,16 +211,33 @@
// 총액 계산
var totalAmount = supplyPrice + vat;
$("#" + itemId + " .item-total-amount").val(addComma(totalAmount));
fn_calculateTotal();
}
// 부가세 직접 입력 시 총액만 재계산
function fn_calculateTotalFromVat(itemId) {
var supplyPrice = parseFloat(removeComma($("#" + itemId + " .item-supply-price").val())) || 0;
var vat = parseFloat(removeComma($("#" + itemId + " .item-vat").val())) || 0;
// 총액 계산
var totalAmount = supplyPrice + vat;
$("#" + itemId + " .item-total-amount").val(addComma(totalAmount));
fn_calculateTotal();
}
// 품목 합계 계산
function fn_calculateTotal() {
var totalQty = 0, totalSupply = 0, totalVat = 0, totalAmount = 0;
$(".item-row").each(function() {
totalQty += parseFloat(removeComma($(this).find(".item-quantity").val())) || 0;
totalSupply += parseFloat(removeComma($(this).find(".item-supply-price").val())) || 0;
totalVat += parseFloat(removeComma($(this).find(".item-vat").val())) || 0;
totalAmount += parseFloat(removeComma($(this).find(".item-total-amount").val())) || 0;
});
$("#totalQuantity").text(addCommaInt(totalQty));
$("#totalSupplyPrice").text(addComma(totalSupply));
$("#totalVat").text(addComma(totalVat));
$("#totalTotalAmount").text(addComma(totalAmount));
}
// 기존 품목 데이터 로드 (결재완료 시 ESTIMATE_TEMPLATE_ITEM, 아니면 CONTRACT_ITEM)
@@ -335,6 +363,8 @@
id: itemId
});
}
// 품목 로드 완료 후 합계 계산
fn_calculateTotal();
}
},
error: function() {
@@ -537,6 +567,17 @@
</td>
</tr>
</tbody>
<tfoot>
<tr id="totalRow" style="background:#f5f5f5; font-weight:bold;">
<td colspan="5" style="text-align:center; padding:8px; border:1px solid #ddd;">Total</td>
<td style="text-align:right; padding:8px; border:1px solid #ddd;" id="totalQuantity">0</td>
<td style="padding:8px; border:1px solid #ddd;"></td>
<td style="text-align:right; padding:8px; border:1px solid #ddd;" id="totalSupplyPrice">0.00</td>
<td style="text-align:right; padding:8px; border:1px solid #ddd;" id="totalVat">0.00</td>
<td style="text-align:right; padding:8px; border:1px solid #ddd;" id="totalTotalAmount">0.00</td>
<td style="padding:8px; border:1px solid #ddd;"></td>
</tr>
</tfoot>
</table>
</div>
</td>

View File

@@ -2770,13 +2770,13 @@ public class ApprovalService {
for(Map item : itemList){
item = CommonUtils.toUpperCaseMapKey(item);
html.append("<tr>");
html.append("<td ").append(TD_ITEM).append(" style='border:1px solid #333;text-align:center;font-size:9pt;padding:4px;'>").append(no++).append("</td>");
html.append("<td style='border:1px solid #333;text-align:center;font-size:9pt;padding:4px;'>").append(no++).append("</td>");
html.append("<td ").append(TD_ITEM).append(">").append(escapeHtml(CommonUtils.checkNull(item.get("DESCRIPTION")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(">").append(escapeHtml(CommonUtils.checkNull(item.get("SPECIFICATION")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(" style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatNumber(CommonUtils.checkNull(item.get("QUANTITY")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(" style='border:1px solid #333;text-align:center;font-size:9pt;padding:4px;'>").append(escapeHtml(CommonUtils.checkNull(item.get("UNIT")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(" style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatDecimalNumber(CommonUtils.checkNull(item.get("UNIT_PRICE")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(" style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatDecimalNumber(CommonUtils.checkNull(item.get("AMOUNT")))).append("</td>");
html.append("<td style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatNumber(CommonUtils.checkNull(item.get("QUANTITY")))).append("</td>");
html.append("<td style='border:1px solid #333;text-align:center;font-size:9pt;padding:4px;'>").append(escapeHtml(CommonUtils.checkNull(item.get("UNIT")))).append("</td>");
html.append("<td style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatDecimalNumber(CommonUtils.checkNull(item.get("UNIT_PRICE")))).append("</td>");
html.append("<td style='border:1px solid #333;text-align:right;font-size:9pt;padding:4px;'>").append(formatDecimalNumber(CommonUtils.checkNull(item.get("AMOUNT")))).append("</td>");
html.append("<td ").append(TD_ITEM).append(">").append(escapeHtml(CommonUtils.checkNull(item.get("REMARK")))).append("</td>");
html.append("</tr>");
}