견적서 PDF API 개발
This commit is contained in:
parent
cae5be7af7
commit
dcc5e6818e
@ -19,12 +19,12 @@ import com.interplug.qcast.config.message.Messages;
|
||||
import com.interplug.qcast.util.ExcelUtil;
|
||||
import com.interplug.qcast.util.InterfaceQsp;
|
||||
import com.interplug.qcast.util.PdfUtil;
|
||||
import io.micrometer.common.util.StringUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.beans.BeanInfo;
|
||||
import java.beans.Introspector;
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
@ -33,6 +33,7 @@ import java.util.*;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.jsoup.nodes.Element;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -765,6 +766,14 @@ public class EstimateService {
|
||||
BigDecimal vol =
|
||||
new BigDecimal(StringUtils.isEmpty(roofVol.getVolKw()) ? "0" : roofVol.getVolKw());
|
||||
|
||||
String classTypeName = "";
|
||||
if ("0".equals(roofVol.getClassType())) {
|
||||
classTypeName = roofVol.getSlope() + "寸";
|
||||
} else {
|
||||
classTypeName = roofVol.getAngle() + "º";
|
||||
}
|
||||
roofVol.setClassTypeName(classTypeName);
|
||||
|
||||
moduleTotAmount = moduleTotAmount.add(amount);
|
||||
moduleTotVolKw = moduleTotVolKw.add(vol);
|
||||
}
|
||||
@ -800,7 +809,8 @@ public class EstimateService {
|
||||
String.format("%1$,.0f", Double.parseDouble(itemResponse.getSaleTotPrice())));
|
||||
|
||||
if ("YJSS".equals(estimateResponse.getEstimateType())
|
||||
&& !"1".equals(itemResponse.getPkgMaterialFlg())) {
|
||||
&& (!StringUtils.isEmpty(itemResponse.getPaDispOrder())
|
||||
|| !"1".equals(itemResponse.getPkgMaterialFlg()))) {
|
||||
itemResponse.setSalePrice("");
|
||||
itemResponse.setSaleTotPrice("");
|
||||
}
|
||||
@ -862,19 +872,20 @@ public class EstimateService {
|
||||
iSection++;
|
||||
arrSection[iSection] = "div.section2";
|
||||
iSection++;
|
||||
|
||||
// 견적서 상세 pdf Html 생성
|
||||
doc = this.estimatePdfHtml(doc, estimateResponse, estimateItemList);
|
||||
|
||||
if ("1".equals(estimateRequest.getSchDrawingFlg())) {
|
||||
arrSection[iSection] = "div.section3";
|
||||
iSection++;
|
||||
arrSection[iSection] = "div.section4";
|
||||
iSection++;
|
||||
arrSection[iSection] = "div.section5";
|
||||
iSection++;
|
||||
|
||||
// 발전시뮬레이션 pdf Html 생성
|
||||
if (true) {
|
||||
arrSection[iSection] = "div.section3";
|
||||
iSection++;
|
||||
doc = pwrGnrSimService.pwrGnrSimPdfHtml(doc, pwrGnrSimResponse);
|
||||
} else {
|
||||
elm = doc.getElementsByClass("section3").first();
|
||||
elm.remove();
|
||||
}
|
||||
|
||||
// pdf 다운로드
|
||||
@ -1081,6 +1092,351 @@ public class EstimateService {
|
||||
return quoteList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 견적서 PDF HTML 생성
|
||||
*
|
||||
* @param doc Document
|
||||
* @param data 견적서 상세정보
|
||||
* @param list 견적서 아이템 목록 정보
|
||||
* @return Document Document
|
||||
* @throws IOException
|
||||
* @throws QcastException
|
||||
*/
|
||||
public Document estimatePdfHtml(Document doc, EstimateResponse data, List<ItemResponse> list)
|
||||
throws IOException, QcastException {
|
||||
|
||||
Element elm;
|
||||
|
||||
// 견적서 상세 정보 설정
|
||||
elm = doc.getElementById("custSaleStoreName");
|
||||
elm.text(StringUtils.defaultString(data.getCustSaleStoreName()));
|
||||
|
||||
elm = doc.getElementById("custOmit");
|
||||
elm.text(StringUtils.defaultString(data.getCustOmit()));
|
||||
|
||||
elm = doc.getElementById("estimateValidityTerm");
|
||||
elm.text(StringUtils.defaultString(data.getEstimateValidityTerm()));
|
||||
|
||||
elm = doc.getElementById("objectName1");
|
||||
elm.text(StringUtils.defaultString(data.getObjectName()));
|
||||
|
||||
elm = doc.getElementById("objectNo1");
|
||||
elm.text(StringUtils.defaultString(data.getObjectNo()));
|
||||
|
||||
elm = doc.getElementById("planNo");
|
||||
elm.text(StringUtils.defaultString(data.getPlanNo()));
|
||||
|
||||
elm = doc.getElementById("estimateDate");
|
||||
elm.text(StringUtils.defaultString(data.getEstimateDate()));
|
||||
|
||||
elm = doc.getElementById("bizNo");
|
||||
elm.text(StringUtils.defaultString(data.getBizNo()));
|
||||
|
||||
elm = doc.getElementById("zipNo");
|
||||
elm.text(StringUtils.defaultString(data.getZipNo()));
|
||||
|
||||
elm = doc.getElementById("address");
|
||||
elm.text(StringUtils.defaultString(data.getAddress()));
|
||||
|
||||
elm = doc.getElementById("tel");
|
||||
elm.text(StringUtils.defaultString(data.getTel()));
|
||||
|
||||
elm = doc.getElementById("fax");
|
||||
elm.text(StringUtils.defaultString(data.getFax()));
|
||||
|
||||
elm = doc.getElementById("totVolKw1");
|
||||
elm.text(StringUtils.defaultString(data.getTotVolKw()));
|
||||
|
||||
elm = doc.getElementById("totPrice");
|
||||
elm.text(StringUtils.defaultString(data.getTotPrice()));
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (ItemResponse itemResponse : list) {
|
||||
sb.append("<tr>");
|
||||
sb.append(
|
||||
"<td style='width:60px;'>" + StringUtils.defaultString(itemResponse.getNo()) + "</td>");
|
||||
sb.append(
|
||||
"<td style='width:120px;text-align:left;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getItemName())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='width:120px;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getItemNo())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='width:80px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getSalePrice())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='width:60px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getAmount())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='width:60px;'>" + StringUtils.defaultString(itemResponse.getUnit()) + "</td>");
|
||||
sb.append(
|
||||
"<td style='width:80px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getSaleTotPrice())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
if ("Y".equals(data.getPkgYn())) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td style='width:60px;'>" + StringUtils.defaultString(data.getPkgNo()) + "</td>");
|
||||
sb.append("<td style='width:120px;text-align:left;'>住宅 PKG</td>");
|
||||
sb.append("<td style='width:120px;'>-</td>");
|
||||
sb.append(
|
||||
"<td style='width:80px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(data.getPkgAsp())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='width:60px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(data.getTotVol())
|
||||
+ "</td>");
|
||||
sb.append("<td style='width:60px;'>W</td>");
|
||||
sb.append(
|
||||
"<td style='width:80px;text-align:right;'>"
|
||||
+ StringUtils.defaultString(data.getPkgTotPrice())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("itemList_detail");
|
||||
elm.before(sb.toString());
|
||||
|
||||
elm = doc.getElementById("supplyPrice");
|
||||
elm.text(StringUtils.defaultString(data.getSupplyPrice()));
|
||||
|
||||
elm = doc.getElementById("vatPrice");
|
||||
elm.text(StringUtils.defaultString(data.getVatPrice()));
|
||||
|
||||
elm = doc.getElementById("totPrice1");
|
||||
elm.text(StringUtils.defaultString(data.getTotPrice()));
|
||||
|
||||
elm = doc.getElementById("remarks");
|
||||
elm.text(StringUtils.defaultString(data.getRemarks()));
|
||||
|
||||
// 견적서 특이사항 목록 설정
|
||||
if (data.getNoteList() != null) {
|
||||
sb = new StringBuilder();
|
||||
for (NoteResponse noteResponse : data.getNoteList()) {
|
||||
sb.append("<tr>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(noteResponse.getCodeNm())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(noteResponse.getRemarks())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("noteList_detail");
|
||||
elm.append(sb.toString());
|
||||
}
|
||||
|
||||
// 도면 설정
|
||||
elm = doc.getElementById("objectNo4");
|
||||
elm.text(
|
||||
StringUtils.defaultString(data.getObjectNo())
|
||||
+ " (Plan No : "
|
||||
+ StringUtils.defaultString(data.getPlanNo())
|
||||
+ ")");
|
||||
|
||||
elm = doc.getElementById("objectName");
|
||||
elm.text(StringUtils.defaultString(data.getObjectName()));
|
||||
|
||||
elm = doc.getElementById("totVolKw");
|
||||
elm.text(StringUtils.defaultString(data.getTotVolKw()) + " Kw");
|
||||
|
||||
elm = doc.getElementById("certVolKw");
|
||||
elm.text(StringUtils.defaultString(data.getRoofInfo().getCertVolKw()) + " Kw");
|
||||
|
||||
elm = doc.getElementById("drawingEstimateCreateDate4");
|
||||
elm.text(StringUtils.defaultString(data.getDrawingEstimateCreateDate()));
|
||||
|
||||
elm = doc.getElementById("prefName4");
|
||||
elm.text(StringUtils.defaultString(data.getPrefName()));
|
||||
|
||||
elm = doc.getElementById("areaName4");
|
||||
elm.text(StringUtils.defaultString(data.getAreaName()));
|
||||
|
||||
elm = doc.getElementById("snowfall4");
|
||||
elm.text(StringUtils.defaultString(data.getSnowfall()) + " cm");
|
||||
|
||||
elm = doc.getElementById("standardWindSpeedName4");
|
||||
elm.text(StringUtils.defaultString(data.getStandardWindSpeedName()));
|
||||
|
||||
// 도면(가대제외 이미지) 노출 ???
|
||||
|
||||
int no = 1;
|
||||
sb = new StringBuilder();
|
||||
for (ItemResponse itemResponse : list) {
|
||||
if (!"STAND_".equals(itemResponse.getItemGroup())) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + (no++) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getItemNo())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:right;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getAmount())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
}
|
||||
elm = doc.getElementById("notStandItemList_detail");
|
||||
elm.append(sb.toString());
|
||||
|
||||
if (data.getRoofInfo().getRoofPcList() != null) {
|
||||
no = 1;
|
||||
sb = new StringBuilder();
|
||||
for (RoofResponse roofResponse : data.getRoofInfo().getRoofPcList()) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + (no++) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getItemNo())
|
||||
+ "["
|
||||
+ roofResponse.getPcModuleAmount()
|
||||
+ "]"
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("pcsItemList_detail");
|
||||
elm.append(sb.toString());
|
||||
}
|
||||
|
||||
if (data.getRoofInfo().getRoofVolList() != null) {
|
||||
sb = new StringBuilder();
|
||||
for (RoofResponse roofResponse : data.getRoofInfo().getRoofVolList()) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getRoofSurface()) + "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getClassTypeName()) + "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getAmount()) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:right;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getVolKw())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("surFaceList_detail");
|
||||
elm.before(sb.toString());
|
||||
|
||||
elm = doc.getElementById("moduleTotAmount");
|
||||
elm.text(StringUtils.defaultString(data.getRoofInfo().getModuleTotAmount()));
|
||||
|
||||
elm = doc.getElementById("moduleTotVolKw");
|
||||
elm.text(StringUtils.defaultString(data.getRoofInfo().getModuleTotVolKw()));
|
||||
}
|
||||
|
||||
if (data.getRoofInfo().getRoofList() != null) {
|
||||
sb = new StringBuilder();
|
||||
for (RoofResponse roofResponse : data.getRoofInfo().getRoofList()) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getRoofSurface()) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getRoofMaterialName())
|
||||
+ "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSlope()) + "寸</td>");
|
||||
sb.append(
|
||||
"<td>"
|
||||
+ StringUtils.defaultString(roofResponse.getConstructSpecificationName())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getSupportMethodName())
|
||||
+ "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSurfaceType()) + "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSetupHeight()) + "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("surFaceList_detail2");
|
||||
elm.before(sb.toString());
|
||||
}
|
||||
|
||||
elm = doc.getElementById("objectNo5");
|
||||
elm.text(
|
||||
StringUtils.defaultString(data.getObjectNo())
|
||||
+ " (Plan No : "
|
||||
+ StringUtils.defaultString(data.getPlanNo())
|
||||
+ ")");
|
||||
|
||||
elm = doc.getElementById("objectName5");
|
||||
elm.text(StringUtils.defaultString(data.getObjectName()));
|
||||
|
||||
elm = doc.getElementById("totVolKw5");
|
||||
elm.text(StringUtils.defaultString(data.getTotVolKw()) + " Kw");
|
||||
|
||||
elm = doc.getElementById("certVolKw5");
|
||||
elm.text(StringUtils.defaultString(data.getRoofInfo().getCertVolKw()) + " Kw");
|
||||
|
||||
elm = doc.getElementById("drawingEstimateCreateDate5");
|
||||
elm.text(StringUtils.defaultString(data.getDrawingEstimateCreateDate()));
|
||||
|
||||
elm = doc.getElementById("prefName5");
|
||||
elm.text(StringUtils.defaultString(data.getPrefName()));
|
||||
|
||||
elm = doc.getElementById("areaName5");
|
||||
elm.text(StringUtils.defaultString(data.getAreaName()));
|
||||
|
||||
elm = doc.getElementById("snowfall5");
|
||||
elm.text(StringUtils.defaultString(data.getSnowfall()) + " cm");
|
||||
|
||||
elm = doc.getElementById("standardWindSpeedName5");
|
||||
elm.text(StringUtils.defaultString(data.getStandardWindSpeedName()));
|
||||
|
||||
// 도면(가대 이미지) 노출 ???
|
||||
|
||||
no = 1;
|
||||
sb = new StringBuilder();
|
||||
for (ItemResponse itemResponse : list) {
|
||||
if ("STAND_".equals(itemResponse.getItemGroup())) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + (no++) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getItemNo())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:right;'>"
|
||||
+ StringUtils.defaultString(itemResponse.getAmount())
|
||||
+ "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
}
|
||||
elm = doc.getElementById("standItemList_detail");
|
||||
elm.append(sb.toString());
|
||||
|
||||
if (data.getRoofInfo().getRoofList() != null) {
|
||||
sb = new StringBuilder();
|
||||
for (RoofResponse roofResponse : data.getRoofInfo().getRoofList()) {
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getRoofSurface()) + "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getRoofMaterialName())
|
||||
+ "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSlope()) + "寸</td>");
|
||||
sb.append(
|
||||
"<td>"
|
||||
+ StringUtils.defaultString(roofResponse.getConstructSpecificationName())
|
||||
+ "</td>");
|
||||
sb.append(
|
||||
"<td style='text-align:left;'>"
|
||||
+ StringUtils.defaultString(roofResponse.getSupportMethodName())
|
||||
+ "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSurfaceType()) + "</td>");
|
||||
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSetupHeight()) + "</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
elm = doc.getElementById("roofList_detail");
|
||||
elm.before(sb.toString());
|
||||
}
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Object => Map 변환 함수
|
||||
*
|
||||
|
||||
@ -175,7 +175,7 @@ public class EstimateRequest {
|
||||
@Schema(description = "검색 - 가대중량표 포함 여부")
|
||||
private String schWeightFlg;
|
||||
|
||||
@Schema(description = "검색 - 도면 포함 여부")
|
||||
@Schema(description = "검색 - 도면/시뮬레이션 포함 여부")
|
||||
private String schDrawingFlg;
|
||||
|
||||
@Schema(description = "검색 - 아이템 그룹")
|
||||
|
||||
@ -59,6 +59,12 @@ public class RoofResponse {
|
||||
@Schema(description = "방위각")
|
||||
private String azimuth;
|
||||
|
||||
@Schema(description = "경사각 선택코드")
|
||||
private String classType;
|
||||
|
||||
@Schema(description = "경사각 선택명")
|
||||
private String classTypeName;
|
||||
|
||||
@Schema(description = "면조도구분")
|
||||
private String surfaceType;
|
||||
|
||||
|
||||
@ -298,6 +298,7 @@
|
||||
, ROUND(CAST(RE.SLOPE AS FLOAT), 2) AS SLOPE
|
||||
, RE.ANGLE
|
||||
, RE.AZIMUTH
|
||||
, RE.CLASS_TYPE
|
||||
, ISNULL(C1.CODE_NM, '') AS ROOF_MATERIAL_NAME
|
||||
, ISNULL(C2.CODE_NM, '') AS SUPPORT_METHOD_NAME
|
||||
, ISNULL(C3.CODE_NM, '') AS CONSTRUCT_SPECIFICATION_NAME
|
||||
@ -364,6 +365,8 @@
|
||||
, T.ROOF_NO
|
||||
, T.ROOF_SURFACE
|
||||
, T.SLOPE
|
||||
, T.ANGLE
|
||||
, T.CLASS_TYPE
|
||||
, SUM(T.AMOUNT) AS AMOUNT
|
||||
, ROUND(SUM(T.AMOUNT * T.SPECIFICATION / 1000), 4) AS VOL_KW
|
||||
FROM
|
||||
@ -374,6 +377,8 @@
|
||||
, RE.ROOF_NO
|
||||
, RE.ROOF_SURFACE
|
||||
, ROUND(CAST(RE.SLOPE AS FLOAT), 2) AS SLOPE
|
||||
, ROUND(CAST(RE.ANGLE AS FLOAT), 2) AS ANGLE
|
||||
, RE.CLASS_TYPE
|
||||
, RIE.AMOUNT
|
||||
, CAST(RIE.SPECIFICATION AS FLOAT) SPECIFICATION
|
||||
, I.ITEM_ID
|
||||
@ -394,7 +399,7 @@
|
||||
AND I.ITEM_GROUP = #{schItemGroup}
|
||||
</if>
|
||||
) T
|
||||
GROUP BY T.OBJECT_NO, T.PLAN_NO, T.ROOF_NO, T.ROOF_SURFACE, T.SLOPE
|
||||
GROUP BY T.OBJECT_NO, T.PLAN_NO, T.ROOF_NO, T.ROOF_SURFACE, T.SLOPE, T.ANGLE, T.CLASS_TYPE
|
||||
</select>
|
||||
|
||||
<select id="selectEstimateNoteList" parameterType="com.interplug.qcast.biz.estimate.dto.NoteRequest" resultType="com.interplug.qcast.biz.estimate.dto.NoteResponse">
|
||||
|
||||
Binary file not shown.
@ -490,12 +490,13 @@
|
||||
</div>
|
||||
<div class="section2">
|
||||
<table class="mb20">
|
||||
<tbody>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">項目</th>
|
||||
<th class="col-15">文言</th>
|
||||
</tr>
|
||||
<tr id="noteList_detail"></tr>
|
||||
</thead>
|
||||
<tbody id="noteList_detail">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -588,10 +589,10 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">屋根面</th>
|
||||
<th class="col-15">傾斜角</th>
|
||||
<th class="col-15">傾斜角度</th>
|
||||
<th class="col-15">方位角(度)</th>
|
||||
<th>太陽電池モジュール</th>
|
||||
<th class="col-15">枚数</th>
|
||||
<th class="col-15">枚数(枚)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="roofModuleList_detail">
|
||||
@ -618,37 +619,37 @@
|
||||
<table class="mb20">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-15">물건번호</th>
|
||||
<td id="objectNo4" colspan="3"></td>
|
||||
<th class="col-15">물건명</th>
|
||||
<td id="objectName"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">설치용량</th>
|
||||
<td class="col-12" id="totVolKw"></td>
|
||||
<th class="col-15">인증용량</th>
|
||||
<td class="col-12" id="certVolKw"></td>
|
||||
<th class="col-15">작성일</th>
|
||||
<th class="col-15">物件番号</th>
|
||||
<td class="al-l" id="objectNo4" colspan="3"></td>
|
||||
<th class="col-15">作成日</th>
|
||||
<td id="drawingEstimateCreateDate4"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">도도부현</th>
|
||||
<td id="prefName4" colspan="3"></td>
|
||||
<th class="col-15">일사량 관측지점</th>
|
||||
<td id="areaName4"></td>
|
||||
<th class="col-15">物件名</th>
|
||||
<td class="al-l" id="objectName" colspan="3"></td>
|
||||
<th class="col-15">積雪条件</th>
|
||||
<td id="snowfall4"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">적설량</th>
|
||||
<td id="snowfall4" colspan="3"></td>
|
||||
<th class="col-15">풍속조건</th>
|
||||
<th class="col-15">設備容量</th>
|
||||
<td class="col-12" id="totVolKw"></td>
|
||||
<th class="col-15">認証容量</th>
|
||||
<td class="col-12" id="certVolKw"></td>
|
||||
<th class="col-15">風速条件</th>
|
||||
<td id="standardWindSpeedName4"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">都道府県</th>
|
||||
<td id="prefName4" colspan="3"></td>
|
||||
<th class="col-15">日射量観測地点</th>
|
||||
<td id="areaName4"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="guide-box">
|
||||
<div class="guide-content">
|
||||
<img src="C:\Users\dlsgk\OneDrive\바탕 화면\펭귄부부.jpg" style="width: 100%;height: auto;display: block;"/>
|
||||
<!-- <img src="C:\Users\dlsgk\OneDrive\바탕 화면\펭귄부부.jpg" style="width: 100%;height: auto;display: block;"/> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -656,13 +657,11 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">No</th>
|
||||
<th>부재명(형번)</th>
|
||||
<th class="col-15">매수</th>
|
||||
<th>部材名</th>
|
||||
<th class="col-15">数量</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="notStandItemList_detail">
|
||||
</tr>
|
||||
<tbody id="notStandItemList_detail">
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@ -670,26 +669,27 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">No</th>
|
||||
<th>파워컨디셔너</th>
|
||||
<th>パワーコンディショナ型式</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="pcsItemList_detail">
|
||||
</tr>
|
||||
<tbody id="pcsItemList_detail">
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table class="mb20">
|
||||
<table class="price-table mb20">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">지붕면</th>
|
||||
<th>경사각</th>
|
||||
<th>설치매수</th>
|
||||
<th>용량(kW)</th>
|
||||
<th class="col-15">屋根面</th>
|
||||
<th>勾配</th>
|
||||
<th>設置枚数</th>
|
||||
<th>容量(kW)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="surFaceList_detail">
|
||||
<tbody id="surFaceList_detail">
|
||||
<tr>
|
||||
<th class="end" colspan="2">合計</th>
|
||||
<td id="moduleTotAmount"></td>
|
||||
<td class="al-r" id="moduleTotVolKw"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -714,15 +714,16 @@
|
||||
<table class="mb20">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">지붕명</th>
|
||||
<th class="col-15">지붕재종류</th>
|
||||
<th class="col-15">경사</th>
|
||||
<th class="col-15">시공레벨</th>
|
||||
<th style="width:10%;">屋根面</th>
|
||||
<th style="width:15%;">屋根材種類</th>
|
||||
<th style="width:10%;">勾配</th>
|
||||
<th style="width:10%;">施工レベル</th>
|
||||
<th style="width:30%;">施工方法</th>
|
||||
<th style="width:15%;">面粗度区分</th>
|
||||
<th style="width:10%;">設置高さ</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="surFaceList_detail2">
|
||||
</tr>
|
||||
<tbody id="surFaceList_detail2">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -730,48 +731,49 @@
|
||||
<table class="mb20">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="col-15">물건번호</th>
|
||||
<td id="objectNo5" colspan="3"></td>
|
||||
<th class="col-15">물건명</th>
|
||||
<td id="objectName5"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">설치용량</th>
|
||||
<td class="col-12" id="totVolKw5"></td>
|
||||
<th class="col-15">인증용량</th>
|
||||
<td class="col-12" id="certVolKw5"></td>
|
||||
<th class="col-15">작성일</th>
|
||||
<th class="col-15">物件番号</th>
|
||||
<td class="al-l" id="objectNo5" colspan="3"></td>
|
||||
<th class="col-15">作成日</th>
|
||||
<td id="drawingEstimateCreateDate5"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">도도부현</th>
|
||||
<td id="prefName5" colspan="3"></td>
|
||||
<th class="col-15">일사량 관측지점</th>
|
||||
<td id="areaName5"></td>
|
||||
<th class="col-15">物件名</th>
|
||||
<td class="al-l" id="objectName5" colspan="3"></td>
|
||||
<th class="col-15">積雪条件</th>
|
||||
<td id="snowfall5"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">적설량</th>
|
||||
<td id="snowfall5" colspan="3"></td>
|
||||
<th class="col-15">풍속조건</th>
|
||||
<th class="col-15">設備容量</th>
|
||||
<td class="col-12" id="totVolKw5"></td>
|
||||
<th class="col-15">認証容量</th>
|
||||
<td class="col-12" id="certVolKw5"></td>
|
||||
<th class="col-15">風速条件</th>
|
||||
<td id="standardWindSpeedName5"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="col-15">都道府県</th>
|
||||
<td id="prefName5" colspan="3"></td>
|
||||
<th class="col-15">日射量観測地点</th>
|
||||
<td id="areaName5"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="guide-box">
|
||||
<div class="guide-content">
|
||||
<img src="C:\Users\dlsgk\OneDrive\바탕 화면\펭귄부부.jpg" style="width: 100%;height: auto;display: block;"/>
|
||||
<!-- <img src="C:\Users\dlsgk\OneDrive\바탕 화면\펭귄부부.jpg" style="width: 100%;height: auto;display: block;"/> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table class="mb20">
|
||||
<tbody>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">No</th>
|
||||
<th class="col-15">부재명(형변)</th>
|
||||
<th class="col-15">매수</th>
|
||||
<th class="col-15">部材名</th>
|
||||
<th class="col-15">数量</th>
|
||||
</tr>
|
||||
<tr id="standItemList_detail"></tr>
|
||||
</thead>
|
||||
<tbody id="standItemList_detail">
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@ -795,17 +797,16 @@
|
||||
<table class="mb20">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-15">지붕명</th>
|
||||
<th class="col-15">지붕재종류</th>
|
||||
<th class="col-15">경사</th>
|
||||
<th class="col-15">시공레벨</th>
|
||||
<th class="col-15">시공방법</th>
|
||||
<th class="col-15">면조도구분</th>
|
||||
<th class="col-15">설치높이</th>
|
||||
<th style="width:10%;">屋根面</th>
|
||||
<th style="width:15%;">屋根材種類</th>
|
||||
<th style="width:10%;">勾配</th>
|
||||
<th style="width:10%;">施工レベル</th>
|
||||
<th style="width:30%;">施工方法</th>
|
||||
<th style="width:15%;">面粗度区分</th>
|
||||
<th style="width:10%;">設置高さ</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="roofList_detail">
|
||||
<tbody id="roofList_detail">
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user