1
0
Fork 0
master
嘉祥 詹 2024-09-09 01:13:29 +08:00
parent addedd09da
commit 8e62dce8ab
5 changed files with 290 additions and 4 deletions

View File

@ -28,6 +28,87 @@ namespace QuotationMaker.Controllers
} }
[Route("getModelQuotation")]
public ActionResult AddEditDelGetModelQuotation(IFormCollection obj)
{
modelQuotationResult ret = new modelQuotationResult();
authToken token = new authToken(this._httpContextAccessor);
if (token.user_isLogin == false)
{
HttpContext.Response.Cookies.Delete("token_key");
ret.ret = "no";
ret.err_code = "99999";
ret.message = "非登入狀態!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
string method = obj["method"].ToString();
string dept_uid = obj["dept_uid"].ToString();
string modelProj_uid = obj["modelProj_uid"].ToString();
string modelQuotation_uid = obj["modelQuotation_uid"].ToString();
if (method == "")
{
ret.ret = "no";
ret.err_code = "0001";
ret.message = "沒有method!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
if (dept_uid.Trim() == "")
{
ret.ret = "no";
ret.err_code = "0003";
ret.message = "沒有dept_uid!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
if (modelProj_uid.Trim() == "")
{
ret.ret = "no";
ret.err_code = "0003";
ret.message = "沒有modelProj_uid!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
if (modelQuotation_uid.Trim() == "")
{
ret.ret = "no";
ret.err_code = "0002";
ret.message = "沒有modelQuotation_uid!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
modelQuotation modelQuotation = conn.QueryFirstOrDefault<modelQuotation>("select * from modelQuotation where modelQuotation_uid = @modelQuotation_uid ", new { modelQuotation_uid = modelQuotation_uid });
if (method == "get")
{
if (modelQuotation == null)
{
ret.ret = "no";
ret.err_code = "0009";
ret.message = "沒有此modelQuotation_uid資料!";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
ret.modelQuotationDetails.Add(new modelQuotationDetail(modelQuotation));
ret.ret = "yes";
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
}
[Route("modalQuotationList")] [Route("modalQuotationList")]
public ActionResult ModalQuotationList(IFormCollection obj) public ActionResult ModalQuotationList(IFormCollection obj)
{ {

View File

@ -315,7 +315,7 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="form-group"> <div class="form-group">
<label for="modelProject_select">範本</label> <label for="modelQuotation_select">範本</label>
<select class="custom-select custom-select-sm" id="modelQuotation_select" name="modelQuotation_select" required=""> <select class="custom-select custom-select-sm" id="modelQuotation_select" name="modelQuotation_select" required="">
</select> </select>
</div> </div>
@ -366,13 +366,46 @@
<!-- grid row --> <!-- grid row -->
<div id="quotatiion_div" class="row"> <div id="quotatiion_div" class="row">
<div class="card-body border-top"> <div class="card-body border-top">
<button id="addModelMainItemBtn" type="button" class="btn btn-primary btn-lg btn-block">新增主項目</button> <button id="addModelMainItemBtn" type="button" class="btn btn-primary btn-lg btn-block">新增工作主項目</button>
</div> </div>
<div id="modelItem_div" class="col-lg-12"> <div id="modelItem_div" class="col-lg-12">
</div> </div>
</div> </div>
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="quotation_noTaxTotal" class="form-control" value="" placeholder="專案總價" maxlength="16" required="" readonly="readonly" /> <label for="quotation_noTaxTotal">專案總價</label>
<input type="hidden" id="quotation_noTaxTotal_old" />
</div>
</div><!-- /.form-group -->
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="quotation_specTotal" class="form-control" value="" placeholder="專案優惠總價" maxlength="14" required="" /> <label for="quotation_specTotal">專案優惠總價</label>
<input type="hidden" id="quotation_specTotal_old" />
</div>
</div><!-- /.form-group -->
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="quotation_tax" class="form-control" value="" placeholder="加值營業稅 VAT (5%)" maxlength="12" required="" /> <label for="quotation_tax">加值營業稅 VAT (5%)</label>
<input type="hidden" id="quotation_tax_old" />
</div>
</div><!-- /.form-group -->
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="quotation_grandTotal" class="form-control" value="" placeholder="總計 Grand Total" maxlength="15" required="" /> <label for="quotation_grandTotal">總計 Grand Total</label>
<input type="hidden" id="總計 Grand Total_old" />
</div>
</div><!-- /.form-group -->
<div class="form-group">
<label for="quotation_sa">製作及維護服務協議條款 </label>
<textarea class="form-control" id="quotation_sa" rows="6" placeholder="製作及維護服務協議條款"></textarea>
<textarea class="form-control" id="quotation_sa_old" rows="6" style="display:none;" placeholder="製作及維護服務協議條款"></textarea>
</div>
</div><!-- /.modal-body --> </div><!-- /.modal-body -->
<!-- .modal-footer --> <!-- .modal-footer -->
<div class="modal-footer"> <div class="modal-footer">

View File

@ -247,6 +247,9 @@
<script src="~/assets/javascript/custom/globalJS.js" asp-append-version="true"></script> <script src="~/assets/javascript/custom/globalJS.js" asp-append-version="true"></script>
<!-- BEGIN THEME JS --> <!-- BEGIN THEME JS -->
<script src="~/assets/javascript/theme.min.js"></script> <!-- END THEME JS --> <script src="~/assets/javascript/theme.min.js"></script> <!-- END THEME JS -->
<script>
flatpickr.localize(flatpickr.l10ns.zh_tw);
</script>
<!-- BEGIN PAGE LEVEL JS --> <!-- BEGIN PAGE LEVEL JS -->
@RenderSection("Script", required: false) @RenderSection("Script", required: false)
<!-- END PAGE LEVEL JS --> <!-- END PAGE LEVEL JS -->

View File

@ -189,7 +189,7 @@ $(document).ready(function () {
} }
})(jQuery); })(jQuery);
flatpickr.localize(flatpickr.l10ns.zh_tw);
}); });

View File

@ -6,6 +6,7 @@ var quotationTable;
var quotationRowID; var quotationRowID;
var quotationPos; var quotationPos;
var quotation_total;
$(document).ready(function () { $(document).ready(function () {
deptList(); deptList();
companyList(); companyList();
@ -127,7 +128,7 @@ $(document).ready(function () {
$('#QuotationListNewBtn').on('click', function () { $('#QuotationListNewBtn').on('click', function () {
quotation_total = 0;
$('#quotation_method').val('add'); $('#quotation_method').val('add');
@ -187,6 +188,62 @@ $(document).ready(function () {
} }
}); });
//套用範本鈕
$('#applyTemp_btn').on('click', function () {
var modelProj_uid = $('#modelProject_select').val();
var modelQuotation_uid = $('#modelQuotation_select').val();
var dept_uid = $('#dept_select').val();
if (modelProj_uid == '' || modelQuotation_uid == '') {
alert('請選擇要套用的範本!');
return;
}
var formData = {
dept_uid: dept_uid,
modelQuotation_uid: modelQuotation_uid,
modelProj_uid: modelProj_uid,
method: 'get'
}
$.ajax({
url: "/Api/getModelQuotation",
type: "post",
data: formData,
success: function (data, textStatus, jqXHR) {
if (data.ret == "yes") {
var obj = data.modelQuotationDetails[0];
quotation_total = 0;
var htmlCode = '';
$.each(obj.modelMainItemDetails, function (i, item) {
htmlCode += mainItemHtml(item);
});
$('#quotation_noTaxTotal').val(quotation_total).trigger('change');
$('#quotation_tax').val(Math.round(quotation_total * 0.05)).trigger('change');
$('#quotation_grandTotal').val(quotation_total + Math.round(quotation_total * 0.05)).trigger('change');
$('#modelItem_div').html(htmlCode);
} else {
alert(data.message);
if (data.err_code == "99999") {
location.href = "/Root/Login";
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert('網路或伺服器發生錯誤,請稍後重試!');
}
});
});
function loadyearmonth() { function loadyearmonth() {
var actualDate = new Date(); // convert to actual date var actualDate = new Date(); // convert to actual date
@ -753,3 +810,115 @@ function deptList() {
} }
}); });
} }
function mainItemHtml(obj) {
var ac_string = '';
if (obj.modelMainItem_ac == 0) {
ac_string = '無';
} else {
ac_string = obj.modelMainItem_ac + '%'
}
var mainItem_total = 0;
var mainItem_ac = 0.0;
$.each(obj.modelSubItems, function (i, subitem) {
var subitem_val = subitem.modelSubItem_subTotal;
mainItem_total += subitem_val;
if (subitem.modelSubItem_hasAC == 'Y') {
mainItem_ac += (subitem_val * (obj.modelMainItem_ac / 100));
}
});
var mainItem_totalac = Math.round(mainItem_total + mainItem_ac);
quotation_total += mainItem_totalac;
var htmlCode = '';
htmlCode += '<!-- .card -->';
htmlCode += '<div class="card card-fluid" data-uid="' + obj.modelMainItem_uid + '" data-main-uid="' + obj.mainItem_uid + '" data-type="add">';
htmlCode += ' <div class="card-header border-bottom-0 btn-group">';
htmlCode += ' <input type="hidden" data-name="quotationMainItem_name" value="' + obj.modelMainItem_name + '" />';
htmlCode += ' <input type="hidden" data-name="quotationMainItem_ac" value="' + obj.modelMainItem_ac + '" />';
htmlCode += ' <input type="hidden" data-name="quotationMainItem_name_old" value="" />';
htmlCode += ' <input type="hidden" data-name="quotationMainItem_ac_old" value="" />';
htmlCode += ' <span data-span="quotationMainItem_name" style="width: 60%;">' + obj.modelMainItem_name + '&nbsp;</span>';
htmlCode += ' <span data-span="quotationMainItem_name" style="width: 10%;">AC:&nbsp;' + ac_string + '&nbsp;</span>';
htmlCode += ' <span data-span="quotationMainItem_subTotal" style="text-align: right;">項目合計:&nbsp;' + AppendComma(mainItem_totalac) + '</span>';
htmlCode += ' <div class="dd-nodrag btn-group ml-auto">';
htmlCode += ' <button type="button" class="btn btn-sm btn-secondary" onclick="editQuotationMainItem(this);">Edit</button> <button type="button" onclick="delQuotationMainItem(this);" class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>';
htmlCode += ' </div>';
htmlCode += ' ';
htmlCode += ' </div>';
htmlCode += ' <!-- .dd-list -->';
htmlCode += ' <ol class="dd-list">';
$.each(obj.modelSubItems, function (i, subitem) {
htmlCode += subItemHtml(subitem);
});
htmlCode += ' ';
htmlCode += ' </ol><!-- /.dd-list -->';
htmlCode += ' ';
htmlCode += ' <!-- .card-footer -->';
htmlCode += ' <div class="card-footer">';
htmlCode += ' <a href="javascript: void(0);" onclick="addQuotationSubItem(this);" class="card-footer-item justify-content-start"><span><i class="fa fa-plus-circle mr-1"></i> 添加子項目</span></a>';
htmlCode += ' </div><!-- /.card-footer -->';
htmlCode += '</div><!-- /.card -->';
return htmlCode;
}
function subItemHtml(obj) {
var htmlCode = '';
htmlCode += ' <li class="dd-item dd-nodrag" data-model-subitem-uid="' + obj.modelSubItem_uid + '" data-method="edit">';
htmlCode += ' <textarea style="display:none;" data-name="subItem_uid">' + obj.subItem_uid + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_uid">' + obj.modelSubItem_uid + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_name">' + obj.modelSubItem_name + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_price">' + obj.modelSubItem_price + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_unitType">' + obj.modelSubItem_unitType + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_number">' + obj.modelSubItem_number + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_hasAC">' + obj.modelSubItem_hasAC + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_subTotal">' + obj.modelSubItem_subTotal + '</textarea>';
htmlCode += ' <textarea data-name="quotationSubItem_descript" style="display:none;">' + obj.modelSubItem_descript + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="subItem_uid_old">' + obj.subItem_uid + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_uid_old">' + obj.modelSubItem_uid + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_name_old">' + obj.modelSubItem_name + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_price_old">' + obj.modelSubItem_price + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_unitType_old">' + obj.modelSubItem_unitType + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_number_old">' + obj.modelSubItem_number + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_hasAC_old">' + obj.modelSubItem_hasAC + '</textarea>';
htmlCode += ' <textarea style="display:none;" data-name="quotationSubItem_subTotal_old">' + obj.modelSubItem_subTotal + '</textarea>';
htmlCode += ' <textarea data-name="quotationSubItem_descript_old" style="display:none;">' + obj.modelSubItem_descript + '</textarea>';
htmlCode += ' <div class="dd-handle">';
htmlCode += ' <div class="list-group-item">';
htmlCode += ' <div class="list-group-item-figure">';
htmlCode += ' <span class="drag-indicator"></span>';
htmlCode += ' </div>';
htmlCode += ' <div class="list-group-item-body">';
htmlCode += ' <div class="team">';
htmlCode += ' <h4 data-name="subname" class="list-group-item-title">';
htmlCode += ' ' + obj.modelSubItem_name;
htmlCode += ' </h4><br/>';
htmlCode += ' <p class="list-group-item-text" data-name="subdesc" style="white-space: pre-line;font-size: 13px;">';
htmlCode += ' ' + obj.modelSubItem_descript;
htmlCode += ' </p><br/>';
htmlCode += ' <p class="list-group-item-text" data-name="subsummy" style="white-space: pre-line;font-size: 11px;">';
htmlCode += ' 單價 NT$' + AppendComma(obj.modelSubItem_price) + ', 數量 ' + obj.modelSubItem_number + ', 單位 ' + obj.modelSubItem_unitType + '\r\n';
htmlCode += ' 小計 NT$' + AppendComma(obj.modelSubItem_subTotal) + '\r\n';
htmlCode += ' AC(' + obj.modelSubItem_hasAC + ')';
htmlCode += ' </p>';
htmlCode += ' </div>';
htmlCode += ' </div>';
htmlCode += ' </div>';
htmlCode += ' <div class="dd-nodrag btn-group ml-auto">';
htmlCode += ' <button type="button" onclick="editQuotationSubItemButton(this);" class="btn btn-sm btn-secondary">Edit</button> <button type="button" onclick="delQuotationSubItemButton(this);" class="btn btn-sm btn-secondary"><i class="far fa-trash-alt"></i></button>';
htmlCode += ' </div>';
htmlCode += ' </div> ';
htmlCode += ' </li>';
return htmlCode;
}