Files
wace_plm/WebContent/WEB-INF/view/protoDevMng/protoDevMngStatus.jsp
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

644 lines
23 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<script>
$(document).ready(function(){
fn_setOEMList();
fn_setProductGroupList();
var oemObjId = ${protoTestBaseParamMap.OEM_OBJID};
var carObjId = ${protoTestBaseParamMap.CAR_OBJID};
var prodGroupObjId = ${protoTestBaseParamMap.PRODUCT_GROUP_OBJID};
var oemObjId2 = ${protoStockBaseParamMap.OEM_OBJID};
var carObjId2 = ${protoStockBaseParamMap.CAR_OBJID};
var prodGroupObjId2 = ${protoStockBaseParamMap.PRODUCT_GROUP_OBJID};
fn_setCarTypeList("carObjId1",oemObjId);
fn_setCarTypeList("carObjId2",oemObjId2);
fn_getProtoTestTypeCompleteRatioPie(oemObjId, carObjId,prodGroupObjId,"");
fn_getProtoTestProductCompleteRatioList(oemObjId,carObjId,prodGroupObjId,"");
fn_getProtoStockProductReceiveRatioList(oemObjId2,carObjId2,prodGroupObjId2);
fn_getProtoStockTotalReceiveRatioPie(oemObjId2,carObjId2,prodGroupObjId2);
$("#oemObjId1").trigger("change");
$("#oemObjId2").trigger("change");
$("#oemObjId1").change(function(){
fn_setCarTypeList("carObjId1",$(this).val());
});
$("#oemObjId2").change(function(){
fn_setCarTypeList("carObjId2",$(this).val());
});
});
</script>
<script>
//시작품 검사 전체 합격률
function fn_getProtoTestTypeCompleteRatioPie(oemObjId,carObjId,productGroupObjId,userName){
$.ajax({
url:"/dashboard/getProtoTestTypeCompleteRatioPie.do",
type:"POST",
data:{"oemObjId":oemObjId,"carObjId":carObjId,"productGroupObjId":productGroupObjId,"userName":userName},
dataType:"json",
async:false,
success:function(data){
if(0 == fnc_checkNullDefaultValue(data.FRAME_COMPLETE_AVG,0) && 0 == fnc_checkNullDefaultValue(data.FRAME_FAIL_AVG,0)){
var noData = "<div style=\"width:100%;height:50%;padding-top:10%;text-align:center;\">조회된 정보가 없습니다.</div>";
$("#protoTestTypeFrameCompleteRatioPie").html(noData);
}else{
$('#protoTestTypeFrameCompleteRatioPie').highcharts({
colors: ['#558ed5', '#ff6d6d'],
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: {
text: ''
},
tooltip: {
pointFormat: '{series.name}</br>{point.percentage:.1f}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}, point:{
events:{
click:function(){
console.log(this);
fn_openProtoTestResultPopUp(this,this.resultType);
}
}
}
}
},
series: [{
name: '비율',
colorByPoint: true,
oemObjId:oemObjId,
carObjId:carObjId,
productGroupObjId:productGroupObjId,
data: [{
name: '합격',
y: Number(data.FRAME_COMPLETE_AVG),
resultType:"frame_pass"
}, {
name: '불합격',
y: Number(data.FRAME_FAIL_AVG),
resultType:"frame_fail"
}]
}]
});
}
if(0 == fnc_checkNullDefaultValue(data.WELD_COMPLETE_AVG,0) && 0 == fnc_checkNullDefaultValue(data.WELD_FAIL_AVG,0)){
var noData = "<div style=\"width:100%;height:50%;padding-top:10%;text-align:center;\">조회된 정보가 없습니다.</div>";
$("#protoTestTypeWeldCompleteRatioPie").html(noData);
}else{
$('#protoTestTypeWeldCompleteRatioPie').highcharts({
colors: ['#558ed5', '#ff6d6d'],
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: {
text: ''
},
tooltip: {
pointFormat: '{series.name}</br>{point.y} %</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.y} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}, point:{
events:{
click:function(){
console.log(this);
fn_openProtoTestResultPopUp(this,this.resultType);
}
}
}
}
},
series: [{
oemObjId:oemObjId,
carObjId:carObjId,
productGroupObjId:productGroupObjId,
name: '비율',
colorByPoint: true,
data: [{
name: '합격',
y: Number(data.WELD_COMPLETE_AVG),
resultType:"weld_pass"
}, {
name: '불합격',
y: Number(data.WELD_FAIL_AVG),
resultType:"weld_fail"
}]
}]
});
}
},
error: function(jqxhr, status, error){
}
});
}
//시작품 검사 고객사,차종,제품별 합격률
function fn_getProtoTestProductCompleteRatioList(oemObjId,carObjId,productGroupObjId,userName){
$("#protoTestProductCompleteRatioList").empty();
$.ajax({
url:"/dashboard/getProtoTestProductCompleteRatioList.do",
type:"POST",
data:{"oemObjId":oemObjId,"carObjId":carObjId,"productGroupObjId":productGroupObjId,"userName":userName},
dataType:"json",
async:false,
success:function(data){
var appendText = "";
$.each(data , function(i){
var oemName = fnc_checkNull(data[i].OEM_NAME);
var carCode = fnc_checkNull(data[i].CAR_CODE);
var productName = fnc_checkNull(data[i].PRODUCT_GROUP_NAME);
var maxWeldRound = fnc_checkNull(data[i].MAX_WELD_ROUND);
var weldRatio = fnc_checkNull(data[i].WELD_AVG);
var maxFrameRound = fnc_checkNull(data[i].MAX_FRAME_ROUND);
var frameRatio = fnc_checkNull(data[i].FRAME_AVG);
var oemObjId = fnc_checkNull(data[i].OEM_OBJID);
var carObjId = fnc_checkNull(data[i].CAR_OBJID);
var prodGroupObjId = fnc_checkNull(data[i].PROD_GROUP_OBJID);
appendText+="<tr>";
appendText+=" <td title='"+oemName+"'>"+oemName+"</td>";
appendText+=" <td title='"+carCode+"'>"+carCode+"</td>";
appendText+=" <td title='"+productName+"'>"+productName+"</td>";
appendText+=" <td title='"+maxWeldRound+"'>"+maxWeldRound+"</td>";
appendText+=" <td title='"+weldRatio+"'><a href='#' onclick=\"fn_openProtoTestResultPopUp(this,'weld');\" data-OEM_OBJID='"+oemObjId+"' data-CAR_OBJID='"+carObjId+"' data-PROD_GROUP_OBJID='"+prodGroupObjId+"'>"+weldRatio+"</a></td>";
appendText+=" <td title='"+maxFrameRound+"'>"+maxFrameRound+"</td>";
appendText+=" <td title='"+frameRatio+"'><a href='#' onclick=\"fn_openProtoTestResultPopUp(this,'frame');\" data-OEM_OBJID='"+oemObjId+"' data-CAR_OBJID='"+carObjId+"' data-PROD_GROUP_OBJID='"+prodGroupObjId+"'>"+frameRatio+"</a></td>";
appendText+="</tr>";
});
if(0 == data.length){
appendText+="<tr>";
appendText+=" <td colspan='7'>조회된 내용이 없습니다.</td>";
appendText+="</tr>";
}
$("#protoTestProductCompleteRatioList").append(appendText);
},
error: function(jqxhr, status, error){
}
});
}
//시작제품검사결과 PopUp
function fn_openProtoTestResultPopUp(obj,type){
var oemObjId = fnc_checkNull($(obj).attr("data-OEM_OBJID"));
var carObjId = fnc_checkNull($(obj).attr("data-CAR_OBJID"));
var prodGroupObjId = fnc_checkNull($(obj).attr("data-PROD_GROUP_OBJID"));
var userName = fnc_checkNull($("#userName").val());
if(oemObjId == ""){
oemObjId = obj.series.options.oemObjId;
carObjId = obj.series.options.carObjId;
prodGroupObjId = obj.series.options.productGroupObjId;
}
var param = "?search_oem="+oemObjId;
param+= "&search_carType="+carObjId;
param+= "&search_productGroup="+prodGroupObjId
param+= "&search_writer="+userName;
window.open("/protoDevMng/protoTestMngList.do"+param,"","width=1600, height=670");
}
//시작제품입고현황 PopUp
function fn_openProtoStockResultPopUp(obj,type){
var oemObjId = fnc_checkNull($(obj).attr("data-OEM_OBJID"));
var carObjId = fnc_checkNull($(obj).attr("data-CAR_OBJID"));
var prodGroupObjId = fnc_checkNull($(obj).attr("data-PROD_GROUP_OBJID"));
if(oemObjId == ""){
oemObjId = obj.series.options.oemObjId;
carObjId = obj.series.options.carObjId;
prodGroupObjId = obj.series.options.productGroupObjId;
}
var param = "?search_oem="+oemObjId;
param+= "&search_carType="+carObjId;
param+= "&search_productGroup="+prodGroupObjId
window.open("/protoDevMng/protoStockMngList.do"+param,"","width=1600, height=670");
}
//시작품 입고현황 전체 입고율
function fn_getProtoStockTotalReceiveRatioPie(oemObjId,carObjId,productGroupObjId){
$.ajax({
url:"/dashboard/getProtoStockTotalReceiveRatioPie.do",
type:"POST",
data:{"oemObjId":oemObjId,"carObjId":carObjId,"productGroupObjId":productGroupObjId},
dataType:"json",
async:false,
success:function(data){
var stock_ratio = Number(fnc_checkNull(data.STOCK_RATIO));
var un_stock_ratio = Number(fnc_checkNull(data.UN_STOCK_RATIO));
if(0 == stock_ratio && 0 == un_stock_ratio){
var noData = "<div style=\"width:100%;height:50%;padding-top:10%;text-align:center;\">조회된 정보가 없습니다.</div>";
$("#protoStockTotalReceiveRatioPie").html(noData);
}else{
$('#protoStockTotalReceiveRatioPie').highcharts({
colors: ['#7cb5ec', '#ff6d6d'],
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: {
text: ''
},
tooltip: {
pointFormat: '{series.name}</br>{point.y}%</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.y} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}, point:{
events:{
click:function(){
console.log(this);
fn_openProtoStockResultPopUp(this,this.resultType);
}
}
}
}
},
series: [{
oemObjId:oemObjId,
carObjId:carObjId,
productGroupObjId:productGroupObjId,
name: '비율',
colorByPoint: true,
data: [{
name: '입고',
y: Number(data.STOCK_RATIO),
}, {
name: '입고대기',
y: Number(data.READY_STOCK_RATIO),
}, {
name: '미입고',
y: Number(data.UN_STOCK_RATIO),
}]
}]
});
}
},
error: function(jqxhr, status, error){
}
});
}
//시작품 입고현황 고객사,차종,제품별 입고율
function fn_getProtoStockProductReceiveRatioList(oemObjId,carObjId,productGroupObjId){
$("#protoStockProductReceiveRatioList").empty();
$.ajax({
url:"/dashboard/getProtoStockProductReceiveRatioList.do",
type:"POST",
data:{"oemObjId":oemObjId,"carObjId":carObjId,"productGroupObjId":productGroupObjId},
dataType:"json",
async:false,
success:function(data){
var appendText = "";
$.each(data , function(i){
var oemName = fnc_checkNull(data[i].OEM_NAME);
var carCode = fnc_checkNull(data[i].CAR_CODE);
var prodGroupName = fnc_checkNull(data[i].PRODUCT_GROUP_NAME);
var prodGroupObjId = fnc_checkNull(data[i].PROD_GROUP_OBJID);
var totalReqCount = fnc_checkNull(data[i].SUM_TOTAL_REQUIRED);
var receiveCount = fnc_checkNull(data[i].SUM_RECEIVE_COUNT);
var readyReceiveCount = fnc_checkNull(data[i].SUM_READY_RECEIVE_COUNT);
var delayReceiveCount = fnc_checkNull(data[i].SUM_DELAY_RECEIVE_COUNT);
var stockRatio = fnc_checkNull(data[i].STOCK_RATIO);
appendText+="<tr>";
appendText+=" <td title='"+oemName+"'>"+oemName+"</td>";
appendText+=" <td title='"+carCode+"'>"+carCode+"</td>";
appendText+=" <td title='"+prodGroupName+"'><a href='#' onclick='fn_openProtoStockResultPopUp(this);' data-OEM_OBJID='"+oemObjId+"' data-CAR_OBJID='"+carObjId+"' data-PROD_GROUP_OBJID='"+prodGroupObjId+"'>"+prodGroupName+"</a></td>";
appendText+=" <td title='"+totalReqCount+"'>"+totalReqCount+"</td>";
appendText+=" <td title='"+receiveCount+"'>"+receiveCount+"</td>";
appendText+=" <td title='"+readyReceiveCount+"'>"+readyReceiveCount+"</td>";
appendText+=" <td title='"+delayReceiveCount+"'>"+delayReceiveCount+"</td>";
appendText+=" <td title='"+stockRatio+"'>"+stockRatio+"</td>";
appendText+="</tr>";
});
if(0 == data.length){
appendText+="<tr>";
appendText+=" <td colspan='8'>조회된 내용이 없습니다.</td>";
appendText+="</tr>";
}
$("#protoStockProductReceiveRatioList").append(appendText);
},
error: function(jqxhr, status, error){
}
});
}
//oem 목록 조회
function fn_setOEMList(){
$.ajax({
url:"/common/getOEMList.do",
type:"POST",
data:{"isJson":true},
dataType:"json",
async:false,
success:function(data){
var appendCode = "";
appendCode += "<option value=''>전체</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].OEM_NAME+"("+data[i].OEM_CODE+")</option>";
});
$("#oemObjId1").children().remove();
$("#oemObjId1").append(appendCode);
$("#oemObjId2").children().remove();
$("#oemObjId2").append(appendCode);
var paramValue = "${empty param.oemObjId1?protoTestBaseParamMap.OEM_OBJID:param.oemObjId1}";
var paramValue2 = "${empty param.oemObjId2?protoStockBaseParamMap.OEM_OBJID:param.oemObjId2}";
if(paramValue != ""){
$("#oemObjId1 > option[value="+paramValue+"]").attr("selected", "true");
}
if(paramValue2 != ""){
$("#oemObjId2 > option[value="+paramValue2+"]").attr("selected", "true");
}
},
error: function(jqxhr, status, error){
}
});
}
//car 목록 조회
function fn_setCarTypeList(target,oemObjId){
$.ajax({
url:"/common/getCarTypeList.do",
type:"POST",
data:{"isJson":true, "search_oemObjId":oemObjId},
dataType:"json",
success:function(data){
var appendCode = "";
appendCode += "<option value=''>전체</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].CAR_CODE+"("+data[i].CAR_NAME+")</option>";
});
$("#"+target).children().remove();
$("#"+target).append(appendCode);
var paramValue = "${empty param.carObjId1?protoTestBaseParamMap.CAR_OBJID:param.carObjId1}";
var paramValue2 = "${empty param.carObjId2?protoStockBaseParamMap.CAR_OBJID:param.carObjId2}";
if(paramValue != ""){
$("#carObjId1 > option[value="+paramValue+"]").attr("selected", "true");
}
if(paramValue2 != ""){
$("#carObjId2 > option[value="+paramValue2+"]").attr("selected", "true");
}
},
error: function(jqxhr, status, error){
}
});
}
//제품군 목록 조회
function fn_setProductGroupList(){
$.ajax({
url:"/common/getProductGroupList.do",
type:"POST",
data:{"isJson":true},
dataType:"json",
success:function(data){
var appendCode = "";
appendCode += "<option value=''>전체</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].PRODUCT_GROUP_NAME+"</option>";
});
$("#productGroupObjId").children().remove();
$("#productGroupObjId").append(appendCode);
$("#productGroupObjId2").children().remove();
$("#productGroupObjId2").append(appendCode);
var paramValue = "${empty param.productGroupObjId?protoTestBaseParamMap.PRODUCT_GROUP_OBJID:param.productGroupObjId}";
var paramValue2 = "${empty param.productGroupObjId2?protoStockBaseParamMap.PRODUCT_GROUP_OBJID:param.productGroupObjId2}";
if(paramValue != ""){
$("#productGroupObjId > option[value="+paramValue+"]").attr("selected", "true");
}
if(paramValue2 != ""){
$("#productGroupObjId2 > option[value="+paramValue2+"]").attr("selected", "true");
}
},
error: function(jqxhr, status, error){
}
});
}
function fn_searchProductTest(){
var oemObjId = $("#oemObjId1").val();
var carObjId = $("#carObjId1").val();
var productGroupObjId = $("#productGroupObjId").val();
var userName = $("#userName").val();
fn_getProtoTestTypeCompleteRatioPie(oemObjId,carObjId,productGroupObjId,userName);
fn_getProtoTestProductCompleteRatioList(oemObjId,carObjId,productGroupObjId,userName);
}
function fn_searchProtoStock(){
var oemObjId = $("#oemObjId2").val();
var carObjId = $("#carObjId2").val();
var productGroupObjId = $("#productGroupObjId2").val();
fn_getProtoStockTotalReceiveRatioPie(oemObjId,carObjId,productGroupObjId);
fn_getProtoStockProductReceiveRatioList(oemObjId,carObjId,productGroupObjId);
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<div style="">
<div class="plm_menu_name">
<h2>
<span>시작개발관리</span>
</h2>
</div>
<div id="plmSearchZon">
<table>
<tr>
<td><label for="" class="orangeTitleDot" style="font-size:13px;">고객사</label></td>
<td><select name="oemObjId1" id="oemObjId1" style="width:100px;"></select></td>
<td><lable for="" class="orangeTitleDot" style="font-size:13px;">차종</lable></td>
<td><select id="carObjId1" name="carObjId1" style="width:180px;"></select></td>
<td><lable for="" class="orangeTitleDot" style="font-size:13px;">제품군</lable></td>
<td><select id="productGroupObjId" name="productGroupObjId" style="width:100px;"></select></td>
<td><lable for="" class="orangeTitleDot" style="font-size:13px;">등록자</lable></td>
<td><input type="text" name="userName" id="userName"></td>
<td><input type="button" value="조회" class="btnSearch blue_btn" style="float:none;" onclick="fn_searchProductTest();"></td>
</tr>
</table>
</div>
<div class="contents_page_basic_margin">
<div class="title_div" style="margin-top:20px;">시작제품검사결과 관리지표</div>
<div class="plm_table_wrap" style="float:left; width:40%; margin: 0;">
<div style="overflow-y:scroll;">
<table class="plm_table" style="width:100%;">
<colgroup>
<col width="13%">
<col width="14%">
<col width="10%">
<col width="10%">
<col width="10%">
<col width="10%">
<col width="10%">
</colgroup>
<thead>
<tr class="plm_thead">
<td rowspan="2">고객사</td>
<td rowspan="2">차종</td>
<td rowspan="2">제품군</td>
<td colspan="2">용접검사</td>
<td colspan="2">골격검사</td>
</tr>
<tr class="plm_sub_thead">
<td>차수</td>
<td>합격률(%)</td>
<td>차수</td>
<td>합격률(%)</td>
</tr>
</thead>
</table>
</div>
<div class="plm_scroll_table" style="width:100%; height:250px;">
<table class="plm_table">
<colgroup>
<col width="13%">
<col width="14%">
<col width="10%">
<col width="10%">
<col width="10%">
<col width="10%">
<col width="10%">
</colgroup>
<tbody id="protoTestProductCompleteRatioList"></tbody>
</table>
</div>
</div>
<div style="width:25%; float:left; margin:0 0 0 40px;">
<div class="plm_thead" style="width:100%; height:26px; text-align:center; line-height:26px; font-size:13px;">시작품 용접검사 합격률</div>
<div id="protoTestTypeWeldCompleteRatioPie" style="height:230px;"></div>
</div>
<div style="width:25%; float:left; margin:0 0 0 40px;">
<div class="plm_thead" style="width:100%; height:26px; text-align:center; line-height:26px; font-size:13px;">시작품 골격검사 합격률</div>
<div id="protoTestTypeFrameCompleteRatioPie" style="height:230px;"></div>
</div>
</div>
<div id="plmSearchZon" style="clear:both; border-top: 1px solid #d4d4d4; margin-top:30px;">
<table>
<tr>
<td><label for="" class="orangeTitleDot" style="font-size:13px;">고객사</label></td>
<td><select name="oemObjId2" id="oemObjId2" style="width:100px;"></select></td>
<td><lable for="" class="orangeTitleDot" style="font-size:13px;">차종</lable></td>
<td><select id="carObjId2" name="carObjId2" style="width:180px;"></select></td>
<td><lable for="" class="orangeTitleDot" style="font-size:13px;">제품군</lable></td>
<td><select id="productGroupObjId2" name="productGroupObjId2" style="width:100px;"></select></td>
<td><input type="button" value="조회" class="btnSearch blue_btn" style="float:none;" onclick="fn_searchProtoStock();"></td>
</tr>
</table>
</div>
<div class="contents_page_basic_margin">
<div class="title_div" style="margin-top:20px;">시작제품 입고현황 관리</div>
<div class="plm_table_wrap" style="float:left; width:40%; margin: 0;">
<div style="overflow-y:scroll;">
<table class="plm_table" style="width:100%;">
<colgroup>
<col width="15%">
<col width="15%">
<col width="*">
<col width="11%">
<col width="11%">
<col width="11%">
<col width="11%">
<col width="11%">
</colgroup>
<thead>
<tr class="plm_thead">
<td rowspan="2">고객사</td>
<td rowspan="2">차종</td>
<td rowspan="2">제품군</td>
<td colspan="5">입고현황</td>
</tr>
<tr class="plm_sub_thead">
<td>총소요</td>
<td>입고수량</td>
<td>입고대기</td>
<td>입고지연</td>
<td>납입률(%)</td>
</tr>
</thead>
</table>
</div>
<div class="plm_scroll_table" style="width:100%; height:250px;">
<table class="plm_table">
<colgroup>
<col width="15%">
<col width="15%">
<col width="*">
<col width="11%">
<col width="11%">
<col width="11%">
<col width="11%">
<col width="11%">
</colgroup>
<tbody id="protoStockProductReceiveRatioList"></tbody>
</table>
</div>
</div>
<div style="width:25%; float:left; margin:0 0 0 40px;">
<div class="plm_thead" style="width:100%; height:26px; text-align:center; line-height:26px; font-size:13px;">시작품 입고율</div>
<div id="protoStockTotalReceiveRatioPie" style="height:230px; margin:0;"></div>
</div>
</div>
</div>
</form>
</body>
</html>