(function ($, w, d) {
'use strict';
/**
* 上海駒驛須移除選項
* @param {Object} input jquery 物件;
*/
w.fnKeyUnit = function (input) {
input.value = input.value.toUpperCase();
};
/**
* 上海駒驛須移除選項
* @param {Object} handle jquery 物件;
*/
w.fnSGMod = function (handle) {
var oHandle = handle || $('.shjy-box');
if (parent.OrgID !== 'SG') {
oHandle.remove();
}
};
/**
* 更新帳單信息
* @param {String} servname 服務端類名稱
* @param {String} xbid 當前資料id
* @param {String} billno 帳單號碼
*/
w.fnUpdateBillInfo = function (servname, xbid, billno) {
var oPm = { Guid: xbid };
if (billno) {
oPm.BillNO = billno;
}
g_api.ConnectLite(servname, 'UpdateBillInfo', oPm, function (res) {
if (res.RESULT) {
console.log(res);
}
});
};
/**
* 更新帳單信息
* @param {String} billno 帳單號碼
*/
w.fnDeleteBillInfo = function (billno) {
var oPm = { BillNO: billno };
g_api.ConnectLite('Exhibition', 'DeleteBillInfo', oPm, function (res) {
if (res.RESULT) {
console.log(res);
}
});
};
//取得下拉已選的數值
w.getSelectedValues = function (strSelector) {
let result = [];
let collection = document.querySelectorAll(strSelector + " option");
collection.forEach(function (x) {
if (x.selected) {
result.push(x.value);
}
});
return result;
};
/**
* 驗證是否存在的的有效的帳單資料
* @param {Array} bills 帳單
* @return {Boolean} 是否有效
*/
w.fnCheckBillEffective = function (bills) {
var saBill_Effective = [];
if (bills && bills.length > 0) {
saBill_Effective = $.grep(bills, function (bill) {
return bill.AuditVal !== '6';
});
}
return saBill_Effective.length > 0;
};
/**
* 驗證是否存在的的有效的帳單資料
* @param {Array} bills 退運帳單
* @return {Boolean} 是否有效
*/
w.fnCheckRtnBillEffective = function (bills) {
var saBill_Effective = [];
if (bills && bills.length > 0) {
$.grep(bills, function (_bill) {
if (_bill.Bills && _bill.Bills.length > 0) {
saBill_Effective.push($.grep(_bill.Bills, function (bill) {
return bill.AuditVal !== '6';
}));
}
});
}
return saBill_Effective.length > 0;
};
/**
* 添加費用明細
* @param {Object} option 配置
*/
w.fnStarFeeItems = function (option) {
option = option || {};
var oGrid = null,
saItems = [],
saProfileGets = [],
fnSetProfileDrop = function (handle) {
return CallAjax(ComFn.W_Com, ComFn.GetList, {
Type: '', Params: {
profiles: {
ProfileType: 'FeeClass',
OrgID: parent.OrgID,
UserID: parent.UserID
},
sort: { SN: 'asc' }
}
}, function (res) {
if (res.d) {
saProfileGets = JSON.parse(res.d);
handle.html(createOptions(saProfileGets, 'SN', 'ProfileName'));
}
});
},
fnAddProfile = function (layero) {
var oAddPm = {};
oAddPm.OrgID = parent.OrgID;
oAddPm.UserID = parent.UserID;
oAddPm.ProfileType = 'FeeClass';
oAddPm.ProfileName = layero.find('#ProfileName').val();
oAddPm.ProfileSet = [];
layero.find('#lstRight option').each(function () {
oAddPm.ProfileSet.push(this.value);
});
oAddPm.ProfileSet = JSON.stringify(oAddPm.ProfileSet);
oAddPm = packParams(oAddPm);
if (!oAddPm.ProfileName) {
showMsg(i18next.t("message.ProfileFeesClassName_Required")); //╠message.ProfileFeesClassName_Required⇒請填寫個人化費用類別名稱╣
return false;
}
CallAjax(ComFn.W_Com, ComFn.GetAdd, {
Params: {
profiles: oAddPm
}
}, function (res) {
if (res.d > 0) {
fnSetProfileDrop(layero.find('#ProfileClass')).done(function () {
layero.find('#ProfileClass option').each(function () {
if ($(this).text() === oAddPm.ProfileName) {
layero.find('#ProfileClass').val(this.value);
return false;
}
});
});
showMsg(i18next.t("message.Save_Success"), 'success'); // ╠message.Save_Success⇒新增成功╣
}
else {
showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
}
}, function () {
showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
});
},
fnUpdProfile = function (layero) {
var oUpdPm = {},
sId = layero.find('#ProfileClass').val();
oUpdPm.ProfileName = layero.find('#ProfileName').val();
oUpdPm.ProfileSet = [];
layero.find('#lstRight option').each(function () {
oUpdPm.ProfileSet.push(this.value);
});
oUpdPm.ProfileSet = JSON.stringify(oUpdPm.ProfileSet);
oUpdPm = packParams(oUpdPm, 'upd');
if (!oUpdPm.ProfileName) {
showMsg(i18next.t("message.ProfileFeesClassName_Required")); // 請填寫個人化費用類別名稱
return false;
}
CallAjax(ComFn.W_Com, ComFn.GetUpd, {
Params: {
profiles: {
values: oUpdPm,
keys: { SN: sId }
}
}
}, function (res) {
if (res.d > 0) {
fnSetProfileDrop(layero.find('#ProfileClass')).done(function () {
layero.find('#ProfileClass').val(sId);
});
showMsg(i18next.t("message.Modify_Success"), 'success'); //╠message.Modify_Success⇒修改成功╣
}
else {
showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
}
}, function () {
showMsg(i18next.t("message.Modify_Failed"), 'error');//╠message.Modify_Failed⇒修改失敗╣
});
},
fnDelProfile = function (layero) {
var sId = layero.find('#ProfileClass').val();
if (!sId) {
showMsg(i18next.t("message.DeleteItem_Required")); //╠message.DeleteItem_Required⇒請選擇要刪除的項目╣
return false;
}
CallAjax(ComFn.W_Com, ComFn.GetDel, {
Params: {
profiles: {
SN: sId
}
}
}, function (res) {
if (res.d > 0) {
fnSetProfileDrop(layero.find('#ProfileClass'));
layero.find('#ProfileName').val('');
layero.find('#lstRight').html('');
layero.find('#lstLeft').html(createOptions(saItems, 'id', 'text', true));
layero.find('#lstLeft').find('option:first').remove();
showMsg(i18next.t("message.Delete_Success"), 'success'); // ╠message.Delete_Success⇒刪除成功╣
}
else {
showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
}
}, function () {
showMsg(i18next.t("message.Delete_Failed"), 'error'); // ╠message.Delete_Failed⇒刪除失敗╣
});
};
getHtmlTmp('/Page/Pop/ProfileFees.html').done(function (html) {
layer.open({
type: 1,
title: i18next.t('common.ProfileFees'),// ╠common.ProfileFees⇒個人化費用項目╣
shadeClose: false,
shade: 0.1,
maxmin: true, //开启最大化最小化按钮
area: ['600px', '500px'],
content: html,
success: function (layero, index) {
var elIistLeft = layero.find('#lstLeft'),
elLstRight = layero.find('#lstRight');
fnSetProfileDrop(layero.find('#ProfileClass'));
fnSetArgDrop([
{
ArgClassID: 'FeeClass',
Select: elIistLeft,
ShowId: true,
CallBack: function (data) {
saItems = data;
}
}
]).done(function () {
elIistLeft.find('option:first').remove();
optionListSearch(elIistLeft, elLstRight, layero.find('#ProfileFilter'));
});
layero.find('#ProfileClass').on('change', function () {
var sProfile = this.value,
saProfileSet = [];
if (sProfile) {
var oProfileGet = $.grep(saProfileGets, function (e) { return e.SN.toString() === sProfile; })[0];
saProfileSet = JSON.parse(oProfileGet.ProfileSet || '[]');
layero.find('#ProfileName').val(oProfileGet.ProfileName);
}
else {
layero.find('#ProfileName').val('');
}
elLstRight.html('');
elIistLeft.html(createOptions(saItems, 'id', 'text', true)).find('option:first').remove();
layero.find('#lstLeft option').each(function () {
var sId = $(this).val();
if (saProfileSet.indexOf(sId) > -1) {
$(this).appendTo(elLstRight);
}
});
});
layero.find('.cusclass-add').on('click', function () {
fnAddProfile(layero);
});
layero.find('.cusclass-upd').on('click', function () {
fnUpdProfile(layero);
});
layero.find('.cusclass-del').on('click', function () {
fnDelProfile(layero);
});
layero.find('#btnToRight').on('click', function () {
optionListMove(elIistLeft, elLstRight);
});
layero.find('#btnToLeft').on('click', function () {
optionListMove(elLstRight, elIistLeft);
});
layero.find('#btnToUp').on('click', function () {
optionListOrder(elLstRight, true);
});
layero.find('#btnToDown').on('click', function () {
optionListOrder(elLstRight, false);
});
transLang(layero);
},
btn: [i18next.t('common.Confirm'), i18next.t('common.Cancel')],//╠common.Confirm⇒確定╣╠common.Cancel⇒取消╣
yes: function (index, layero) {
var saRetn = [];
layero.find('#lstRight option').each(function () {
var sId = $(this).val();
saRetn.push({
guid: guid(),
FinancialCode: $(this).val(),
FinancialCostStatement: $(this).text(),
Memo: '',
FinancialCurrency: 'NTD',
FinancialUnitPrice: '0',
FinancialNumber: '',
FinancialUnit: '',
FinancialAmount: '0',
FinancialExchangeRate: '1',
FinancialTWAmount: '0',
FinancialTaxRate: '0',
FinancialTax: '0',
CreateUser: parent.UserID,
CreateDate: newDate()
});
});
if (typeof option.Callback === 'function') option.Callback(saRetn);
layer.close(index);
},
cancel: function () {
if (typeof option.CancelCallback === 'function') option.CancelCallback();
}
});
});
};
/**
* 複製費用項目
* @param {Object} option 配置
*/
w.fnCopyFee = function (option) {
option = option || {};
var oGrid = null,
oBilllist = null,
saLastData = [],
saFeeList = [],
fnGetBillList = function (exhibitionno, billno, flag) {
return g_api.ConnectLite(Service.opm, 'GetBillInfos',
{
ExhibitionNO: exhibitionno || '',
BillNO: billno || ''
},
function (res) {
if (res.RESULT) {
var saData = res.DATA.rel;
if (saData.length > 0) {
saLastData = JSON.parse(saData[0].FeeItems);
}
else {
saLastData = [];
}
if (flag) {
if (saData.length > 0) {
var sBilllistHtml = '';
$.each(saData, function (idx, _data) {
sBilllistHtml += (idx === 0 ? '
' : '') + _data.BillNO + '';
});
oBilllist.html(sBilllistHtml).find('li').click(function () {
oBilllist.find('li').removeClass('active');
var sBillNO = $(this).addClass('active').text(),
sExhibitionNO = $('#ExhibitionName').val();
fnGetBillList(sExhibitionNO, sBillNO, false);
});
}
else {
oBilllist.html('');
}
}
oGrid.jsGrid("loadData");
}
});
}, //╠common.ExhibitionName⇒展覽名稱╣ ╠common.BillNO⇒帳單號碼╣
sContent = '\
\
\
\
\
\
\
\
\
\
\
';
layer.open({
type: 1,
title: i18next.t('common.CopyFeeItems'),//╠common.CopyFeeItems⇒複製費用項目╣
shadeClose: false,
shade: 0.1,
maxmin: true, //开启最大化最小化按钮
area: ['800px', '500px'],
content: sContent,
success: function (layero, index) {
fnSetEpoDrop({
Select: $('#ExhibitionName'),
Select2: true
});
oBilllist = layero.find('.bill-list');
oGrid = $("#jsGrid_Fees").jsGrid({
width: "100%",
height: "320px",
autoload: true,
filtering: false,
pageLoading: true,
pageIndex: 1,
pageSize: 10000,
fields: [
{
name: "OrderBy", title: '#', width: 30, align: "center"
},
{
width: 50, sorting: false, align: "center",
headerTemplate: function () {
return [$("", {
id: 'SelectAll',
type: 'checkbox', click: function () {
if (this.checked) {
$("#jsGrid_Fees").find('[type=checkbox]').each(function () {
this.checked = true;
});
saFeeList = clone(saLastData);
}
else {
$("#jsGrid_Fees").find('[type=checkbox]').each(function () {
this.checked = false;
});
saFeeList = [];
}
}
}), $('', { for: 'SelectAll', 'data-i18n': 'common.SelectAll' })];//╠common.SelectAll⇒全選╣
},
itemTemplate: function (value, item) {
return $("", {
type: 'checkbox', click: function (e) {
e.stopPropagation();
if (this.checked) {
saFeeList.push(item);
}
else {
var saNewList = [];
$.each(saFeeList, function (idx, data) {
if (item.guid !== data.guid) {
saNewList.push(data);
}
});
saFeeList = saNewList;
$('#jsGrid_Fees').find('#SelectAll')[0].checked = false;
}
}
});
}
},
{
name: "FinancialCode", title: 'common.Financial_Code', width: 70, type: "text"
},
{
name: "FinancialCostStatement", title: 'common.Financial_CostStatement', width: 150, type: "text",
itemTemplate: function (val, item) {
return val === '' ? item.Memo : val;
}
},
{
name: "FinancialCurrency", title: 'common.Financial_Currency', width: 60, type: "text", align: "center"
},
{
name: "FinancialUnitPrice", title: 'common.Financial_UnitPrice', width: 80, align: "right", type: "text",
itemTemplate: function (val, item) {
return fMoney(val || 0, 2);
}
},
{
name: "FinancialNumber", title: 'common.Financial_Number', width: 80, type: "text", align: "right"
},
{
name: "FinancialUnit", title: 'common.Financial_Unit', width: 80, type: "text"
},
{
name: "FinancialAmount", title: 'common.Financial_Amount', width: 80, type: "text", align: "right",
itemTemplate: function (val, item) {
return fMoney(val || 0, 2);
}
},
{
name: "FinancialExchangeRate", title: 'common.ExchangeRate', width: 60, type: "text", align: "center"
},
{
name: "FinancialTWAmount", title: 'common.Financial_TWAmount', width: 80, align: "right", type: "text",
itemTemplate: function (val, item) {
return fMoney(val || 0, 2);
}
},
{
name: "FinancialTaxRate", title: 'common.Financial_TaxRate', width: 60, align: "center", type: "text"
},
{
name: "FinancialTax", title: 'common.Financial_Tax', width: 80, align: "right", type: "text",
itemTemplate: function (val, item) {
return fMoney(val || 0, 2);
}
}
],
controller: {
loadData: function (args) {
return {
data: saLastData,
itemsCount: saLastData.length //data.length
};
}
}
});
layero.find('.layui-layer-btn1').css({ 'border-color': '#4898d5', 'background-color': '#1E9FFF', 'color': '#fff' });
},
btn: [i18next.t('common.Toolbar_Qry'), i18next.t('common.Confirm'), i18next.t('common.Cancel')],//╠common.Toolbar_Qry⇒查詢╣ ╠common.Confirm⇒確定╣ ╠common.Cancel⇒取消╣
yes: function (index, layero) {
var sExhibitionNO = layero.find('#ExhibitionName').val(),
sBillNO = layero.find('#BillNO ').val();
fnGetBillList(sExhibitionNO, sBillNO, true);
},
btn2: function (index, layero) {
if (typeof option.Callback === 'function') option.Callback(saFeeList);
layer.close(index);
}
});
};
w.fnGetCurrencyByYear = function (opm) {
return g_api.ConnectLite('CurrencySetup_Qry', 'GetCurrencyByYear', {
year: opm.Year
}, function (res) {
if (res.RESULT) {
var saList = res.DATA.rel;
if (opm.CallBack && typeof opm.CallBack === 'function') {
opm.CallBack(saList);
}
}
}, {}, false);
};
w.roundDecimal = function (val, precision) {
return Math.round(Math.round(val * Math.pow(10, (precision || 0) + 1)) / 10) / Math.pow(10, (precision || 0));
};
/**
* 檢驗單據是否有權限存取
* @param {Object} option 配置
*/
w.ExhibitionBillAuthorize = function (Opm) {
//人員:負責業務、創建人、老闆、部門主管、直屬主管
//角色:財務組、Admin
//BillAutherizedList 例外清單
var BillAutherizedList = parent.SysSet.BillAutherizedList.toLowerCase().indexOf(parent.UserID) > -1;
var AccessAuthorize = false;
var CurrentUserID = parent.UserID;
var ResponsibleToThisExhibition = Opm.ResponsiblePerson === CurrentUserID || Opm.CreateUser === CurrentUserID;
if (!ResponsibleToThisExhibition && !BillAutherizedList) {
var QueryData = {
RuleID: 'Account,Admin',
ResponsiblePerson: Opm.ResponsiblePerson
};
g_api.ConnectLite(Service.opm, 'GetExhibitionBillAuthorize', QueryData, function (res) {
if (res.RESULT) {
AccessAuthorize = res.DATA.rel.indexOf(parent.UserID) > -1
}
else {
AccessAuthorize = false;
}
}, {}, false);
}
return ResponsibleToThisExhibition || AccessAuthorize || BillAutherizedList;
};
/**
* 開放權限可以編輯
*/
w.fnOpenAccountingArea = function (group, userid) {
if (userid.indexOf('Admin') > -1 || userid.indexOf('Account') > -1 && group.length > 0) {
group.find('input').removeAttr('disabled');
group.find('select').removeAttr('disabled');
}
};
/**
* 計算報價費用
*/
w.fnCalcuQuotationFee = function (OriginFeeField, CountFeeField, CurrencyID, ExchangeRate) {
let RoundingPoint = CurrencyID === 'NTD' ? 0 : 2;
$.each(CountFeeField, function (idx, item) {
var OFF = OriginFeeField[idx];
if ('TG,TE'.indexOf(parent.OrgID) > -1)
RoundingPoint = 0;
let prepay = 0;
if ($(OFF).find('.prepay').val())
prepay = roundDecimal(parseFloat($(OFF).find('.prepay').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let subtotal = roundDecimal(parseFloat($(OFF).find('.subtotal').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let taxtotal = roundDecimal(parseFloat($(OFF).find('.taxtotal').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let boxtotal = (subtotal + taxtotal) - prepay;
//let boxtotal = roundDecimal(parseFloat($(OFF).find('.boxtotal').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
$(item).find('.mprepay ').val(fMoney(prepay, RoundingPoint, ''));
$(item).find('.msubtotal').val(fMoney(subtotal, RoundingPoint, ''));
$(item).find('.mtaxtotal').val(fMoney(taxtotal, RoundingPoint, ''));
$(item).find('.mboxtotal').val(fMoney(boxtotal, RoundingPoint, ''));
});
};
w.fnCalcuBillsFee = function (oBillBox, OriginFeeField, CountFeeField, CurrencyID, ExchangeRate) {
let RoundingPoint = CurrencyID === 'NTD' ? 0 : 2;
if ('TG,TE'.indexOf(parent.OrgID) > -1) {
RoundingPoint = 0;
}
let OFF = oBillBox.find(OriginFeeField);
let iAdvance = roundDecimal(parseFloat($(OFF).find('.prepay').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let iSubtotal = roundDecimal(parseFloat($(OFF).find('.subtotal').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let iTaxtotal = roundDecimal(parseFloat($(OFF).find('.taxtotal').val().replaceAll(',', '')) * ExchangeRate, RoundingPoint);
let iTaxSubtotal = iSubtotal + iTaxtotal;
let iPaytotal = iTaxSubtotal - iAdvance;
//let iTaxSubtotal = parseFloat($(OFF).find('.boxtotal').val().replaceAll(',', '')) * ExchangeRate;
//let iPaytotal = parseFloat($(OFF).find('.paytotal').val().replaceAll(',', '')) * ExchangeRate;
oBillBox.find(CountFeeField + ' .mprepay').val(fMoney(iAdvance, RoundingPoint, ''));
oBillBox.find(CountFeeField + ' .msubtotal').val(fMoney(iSubtotal, RoundingPoint, ''));
oBillBox.find(CountFeeField + ' .mtaxtotal').val(fMoney(iTaxtotal, RoundingPoint, ''));
oBillBox.find(CountFeeField + ' .mboxtotal').val(fMoney(iTaxSubtotal, RoundingPoint, ''));
oBillBox.find(CountFeeField + ' .mpaytotal').val(fMoney(iPaytotal, RoundingPoint, ''));
};
/**
* 輸入預收事件
*/
w.SetBillPrepayEvent = function SetBillPrepayEvent(oBillBox, bill) {
oBillBox.find('[data-id="Advance"]').on('keyup blur', function (e) {
//bill.AmountTaxSum紀錄外幣為主
var ExchangeRate = (bill.ExchangeRate || 1.00);
var iAdvance = parseFloat((this.value === '' ? '0' : this.value).replaceAll(',', ''));
var iTotal = bill.AmountTaxSum;
var iTotalReceivable = iTotal - iAdvance;
oBillBox.find('.paytotal').val(fMoney(iTotalReceivable, 2, bill.Currency));
bill.Advance = iAdvance;
bill.TotalReceivable = iTotalReceivable;
var iAdvance_main = iAdvance * ExchangeRate;
var iTotal_main = iTotal * ExchangeRate;
oBillBox.find('[data-id="mAdvance"]').val(fMoney(iAdvance_main, 0, 'NTD'));
oBillBox.find('.mpaytotal').val(fMoney((iTotal_main - iAdvance_main), 0, 'NTD'));
});
oBillBox.find('[data-id="mAdvance"]').on('keyup blur', function (e) {
var ExchangeRate = (bill.ExchangeRate || 1.00);
var iAdvance = parseFloat((this.value === '' ? '0' : this.value).replaceAll(',', ''));
var iTotal = parseFloat((bill.AmountTaxSum || 0) * ExchangeRate);
oBillBox.find('.mpaytotal').val(fMoney((iTotal - iAdvance), 0, 'NTD'));
var iAdvance_foreign = iAdvance / ExchangeRate;
var iTotal_foreign = bill.AmountTaxSum;
var TotalReceivable_foreign = iTotal_foreign - iAdvance_foreign;
oBillBox.find('[data-id="Advance"]').val(fMoney(iAdvance_foreign, 2, bill.Currency));
oBillBox.find('.paytotal').val(fMoney(TotalReceivable_foreign, 2, bill.Currency));
bill.Advance = iAdvance_foreign;
bill.TotalReceivable = TotalReceivable_foreign;
});
}
/**
* 檢查主幣別
*/
w.fnCheckMainOrForeignCurrency = function (chosenCurrency) {
var TWDAsAMainCurrency = 'TE,TG'.indexOf(parent.OrgID) > -1;
var UsingMainCurrency = false;
switch (TWDAsAMainCurrency) {
case true:
{
if (chosenCurrency === 'NTD') {
UsingMainCurrency = true;
}
}
break;
case false:
{
if (chosenCurrency === 'CNY' || chosenCurrency === 'RMB') {
UsingMainCurrency = true;
}
}
break;
default:
break;
}
return UsingMainCurrency;
};
})(jQuery, window, document);