updates
parent
addedd09da
commit
8e62dce8ab
|
|
@ -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")]
|
||||
public ActionResult ModalQuotationList(IFormCollection obj)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -315,7 +315,7 @@
|
|||
</div>
|
||||
<div class="col-md-6">
|
||||
<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>
|
||||
</div>
|
||||
|
|
@ -366,13 +366,46 @@
|
|||
<!-- grid row -->
|
||||
<div id="quotatiion_div" class="row">
|
||||
<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 id="modelItem_div" class="col-lg-12">
|
||||
</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 -->
|
||||
<!-- .modal-footer -->
|
||||
<div class="modal-footer">
|
||||
|
|
|
|||
|
|
@ -247,6 +247,9 @@
|
|||
<script src="~/assets/javascript/custom/globalJS.js" asp-append-version="true"></script>
|
||||
<!-- BEGIN 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 -->
|
||||
@RenderSection("Script", required: false)
|
||||
<!-- END PAGE LEVEL JS -->
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ $(document).ready(function () {
|
|||
}
|
||||
})(jQuery);
|
||||
|
||||
flatpickr.localize(flatpickr.l10ns.zh_tw);
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ var quotationTable;
|
|||
var quotationRowID;
|
||||
var quotationPos;
|
||||
|
||||
var quotation_total;
|
||||
$(document).ready(function () {
|
||||
deptList();
|
||||
companyList();
|
||||
|
|
@ -127,7 +128,7 @@ $(document).ready(function () {
|
|||
|
||||
$('#QuotationListNewBtn').on('click', function () {
|
||||
|
||||
|
||||
quotation_total = 0;
|
||||
|
||||
|
||||
$('#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() {
|
||||
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 + ' </span>';
|
||||
htmlCode += ' <span data-span="quotationMainItem_name" style="width: 10%;">AC: ' + ac_string + ' </span>';
|
||||
htmlCode += ' <span data-span="quotationMainItem_subTotal" style="text-align: right;">項目合計: ' + 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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue