You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

717 lines
38 KiB

'use strict';
var sProgramId = getProgramId(),
sQueryPrgId = getQueryPrgId(),
sAction = getUrlParam('Action') || 'Add',
sDataId = getUrlParam('AppointNO'),
sCheckId = sDataId,
fnPageInit = function () {
var oCurData = {},
oForm = $('#form_main'),
oCostRules = {},
oGrid = null,
oValidator = null,
sExhibitionNO = '',
/**
* 獲取資料
* @return {Object} Ajax 物件
*/
fnGet = function () {
if (sDataId) {
return CallAjax(ComFn.W_Com, ComFn.GetOne, {
Type: '',
Params: {
packingorder: {
AppointNO: sDataId
}
}
}, function (res) {
if (res.d) {
var oRes = $.parseJSON(res.d);
oCurData = oRes;
oCurData.Total = oCurData.Total || 0;
oCurData.PackingInfo = $.parseJSON(oCurData.PackingInfo || '[]');
setFormVal(oForm, oRes);
fnSetImpCusDrop(oCurData.ExhibitionNO, oCurData.CustomerId);
setNameById().done(function () {
getPageVal();//緩存頁面值,用於清除
});
$('#AppointNO').attr('disabled', 'disabled');
moneyInput($('#Total'), 0);
}
});
}
else {
oCurData.Total = 0;
oCurData.PackingInfo = [];
fnSetImpCusDrop();
return $.Deferred().resolve().promise();
}
},
/**
* 新增資料
* @param {String} flag 新增或儲存後新增
* @return {Boolean} 停止標記
*/
fnAdd = function (flag) {
var data = getFormSerialize(oForm),
sDateStr = new Date().formate("yyyyMMdd");
data = packParams(data);
data.OrgID = parent.OrgID;
data.IsKeyMode = true;
data.Total = oCurData.Total;
data.CompName = $('#CustomerId option:selected').text();
data.AppointNO = 'SerialNumber|' + parent.UserInfo.OrgID + '|A' + sExhibitionNO + '|Empty|3|' + sDateStr + '|';
if (oCurData.PackingInfo.length === 0) {
showMsg(i18next.t("message.PackingInfo_required")); // ╠message.PackingInfo_required⇒請添加服務明細╣
return false;
}
data.PackingInfo = JSON.stringify(oCurData.PackingInfo);
CallAjax(ComFn.W_Com, ComFn.GetAdd, {
Params: {
packingorder: data
}
}, function (res) {
if (res.d > 0) {
bRequestStorage = false;
if (flag === 'add') {
showMsgAndGo(i18next.t("message.Save_Success"), sQueryPrgId); // ╠message.Save_Success⇒新增成功╣
}
else {
showMsgAndGo(i18next.t("message.Save_Success"), sProgramId, '?Action=Add'); // ╠message.Save_Success⇒新增成功╣
}
parent.msgs.server.broadcast(data);
}
else {
showMsg(i18next.t("message.Save_Failed"), 'error'); // ╠message.Save_Failed⇒新增失敗╣
}
});
},
/**
* 修改資料
* @return {Boolean} 停止標記
*/
fnUpd = function () {
var data = getFormSerialize(oForm);
data = packParams(data, 'upd');
data.Total = oCurData.Total;
data.CompName = $('#CustomerId option:selected').text();
if (oCurData.PackingInfo.length === 0) {
showMsg(i18next.t("message.PackingInfo_required")); // ╠message.PackingInfo_required⇒請添加服務明細╣
return false;
}
data.PackingInfo = JSON.stringify(oCurData.PackingInfo);
CallAjax(ComFn.W_Com, ComFn.GetUpd, {
Params: {
packingorder: {
values: data,
keys: {
AppointNO: sDataId,
OrgID: parent.OrgID
}
}
}
}, function (res) {
if (res.d > 0) {
bRequestStorage = false;
showMsgAndGo(i18next.t("message.Modify_Success"), sQueryPrgId);//╠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⇒修改失敗╣
});
},
/**
* 資料刪除
*/
fnDel = function () {
CallAjax(ComFn.W_Com, ComFn.GetDel, {
Params: {
packingorder: {
AppointNO: sDataId
}
}
}, function (res) {
if (res.d > 0) {
showMsgAndGo(i18next.t("message.Delete_Success"), sQueryPrgId); // ╠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⇒刪除失敗╣
});
},
/**
* 開啟新增Pop
* @param {String} flag 新增或修改
* @param {Object} curitem 當前編輯資料
*/
fnOpenPackingInfo = function (flag, curitem) {
getHtmlTmp('/Page/Pop/PackingInfo.html').done(function (html) {
layer.open({
type: 1, //0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
title: i18next.t("PackingOrder_Upd.PackingInfo"), // ╠PackingOrder_Upd.PackingInfo⇒服務明細╣
area: '640px;',//寬度
shade: 0.75,//遮罩
closeBtn: 1,
maxmin: true, //开启最大化最小化按钮
id: 'layer_PackingInfo', //设定一个id,防止重复弹出
offset: '10px',//右下角弹出
anim: 0,//彈出動畫
btn: [i18next.t('common.Confirm'), i18next.t('common.Cancel')],//╠common.Confirm⇒確定╣╠common.Cancel⇒取消╣
btnAlign: 'c',//按鈕位置
content: html,
success: function (layero, index) {
var fnSetCheckbox = function (el) {
var ul = $('#form_PackingInfo'),
bCheck = false;
if (el.id === 'ExpoSplit' || el.id === 'ExpoPack') {
ul.find('.packing').each(function () {
if (this.checked) {
bCheck = true;
return false;
}
});
if (bCheck) {
ul.find('.single-packing,#ExpoDays').prop('disabled', true);
ul.find('.textStyle').val('');
}
else {
ul.find('.single-packing,#ExpoDays').prop('disabled', false);
}
}
else if (el.id === 'ExpoFeed' || el.id === 'ExpoStorage') {
ul.find('.single-packing').each(function () {
if (this.checked) {
bCheck = true;
return false;
}
});
if (bCheck) {
ul.find('.packing').prop('disabled', true);
/*** 2019/01/22 Yang Leo 點選「空箱收送」時,已包含「空箱存放」,直接鎖住「空箱存放」欄位 和 點選「空箱存放」時,直接鎖住「空箱收送」欄位 Star ***/
if (oCostRules.IsMerge === 'Y') {
if (el.id.indexOf('ExpoFeed') > -1) {
ul.find("[id^='ExpoStorage'],.textStyle").prop('disabled', true);
} else {
ul.find("[id^='ExpoFeed']").prop('disabled', true);
}
}
/*** 2019/01/22 Yang Leo 點選「空箱收送」時,已包含「空箱存放」,直接鎖住「空箱存放」欄位 和 點選「空箱存放」時,直接鎖住「空箱收送」欄位 End ***/
}
else {
ul.find('.packing').prop('disabled', false);
/*** 2019/01/22 Yang Leo 取消點選「空箱收送」時,已包含「空箱存放」,直接解鎖「空箱存放」欄位 和 取消點選「空箱存放」時,直接解鎖「空箱收送」欄位 Star ***/
if (oCostRules.IsMerge === 'Y') {
if (el.id.indexOf('ExpoFeed') > -1) {
ul.find("[id^='ExpoStorage'],.textStyle").prop('disabled', false);
} else {
ul.find("[id^='ExpoFeed']").prop('disabled', false);
}
}
/*** 2019/01/22 Yang Leo 取消點選「空箱收送」時,已包含「空箱存放」,直接解鎖「空箱存放」欄位 和 取消點選「空箱存放」時,直接解鎖「空箱收送」欄位 End ***/
}
}
};
if (curitem) {
setFormVal($('#form_PackingInfo'), curitem);
var checkBox = layero.find('[type="checkbox"]:not(:first):checked');
if (checkBox.length > 0) {
fnSetCheckbox(checkBox[0]);
}
}
moneyInput($('[data-name="int"]'), 0);
layero.find('[type="checkbox"]').click(function () {
fnSetCheckbox(this);
});
transLang(layero.find('#form_PackingInfo'));
},
yes: function (index, layero) {
var data = getFormSerialize($('#form_PackingInfo')),
oExpoType = {
'01': '裸機',
'02': '木箱',
'03': '散貨',
'04': '打板',
'05': '其他'
},
sError = '';
if (flag === 'add') {
data.Guid = guid();
data.Index = oCurData.PackingInfo.length + 1;
}
else {
data.Guid = curitem.Guid;
data.Index = curitem.Index;
}
data.ExpoLen = fnPackNum(data.ExpoLen);
data.ExpoWidth = fnPackNum(data.ExpoWidth);
data.ExpoHeight = fnPackNum(data.ExpoHeight);
data.TotalCBM = data.ExpoLen * data.ExpoWidth * data.ExpoHeight / 1000000;//CBM
data.ExpoWeight = fnPackNum(data.ExpoWeight);//重量
data.ExpoWeightTon = data.ExpoWeight / 1000;//噸
data.ExpoNumber = fnPackNum(data.ExpoNumber);//件數
data.SubTotal = 0;//小計
data.ExpoDays = fnPackNum(data.ExpoDays);//天數
data.SubText = [];//
data.ExpoStack = data.ExpoStack || false;
data.ExpoSplit = data.ExpoSplit || false;
data.ExpoPack = data.ExpoPack || false;
data.ExpoFeed = data.ExpoFeed || false;
data.ExpoStorage = data.ExpoStorage || false;
data.ExpoTypeText = oExpoType[data.ExpoType];
if (data.ExpoNumber > 0) {//件數
data.SubText.push(data.ExpoNumber.toString().toMoney() + '件');
if (data.TotalCBM > 0) {//CBM
var iTotalCBM = data.TotalCBM * data.ExpoNumber;
if (iTotalCBM < 1) {
iTotalCBM = 1;
}
data.SubText.push(iTotalCBM.toFloat(2).toString().toMoney() + 'CBM');
}
if (data.ExpoWeight > 0) {//KG
var iExpoWeight = data.ExpoWeight * data.ExpoNumber;
if (iExpoWeight < 1) {
iExpoWeight = 1;
}
data.SubText.push(iExpoWeight.toFloat(2).toString().toMoney() + 'KG');
}
}
if (data.ExpoStorage && data.TotalCBM > 0 && data.ExpoNumber > 0 && data.ExpoDays > 0) {//儲存
data.SubTotal += data.TotalCBM * data.ExpoNumber * data.ExpoDays * fnPackNum(oCostRules.StoragePrice);
}
if (data.ExpoFeed && data.TotalCBM > 0 && data.ExpoNumber > 0) {// 空箱收送
data.SubTotal += data.TotalCBM * data.ExpoNumber * fnPackNum(oCostRules.FeedingPrice);
}
if (data.ExpoPack && data.TotalCBM > 0 && data.ExpoNumber > 0) {//裝箱
data.SubTotal += (data.TotalCBM < 1 ? 1 : data.TotalCBM) * data.ExpoNumber * fnPackNum(oCostRules.PackingPrice);
}
if (data.ExpoSplit && data.TotalCBM > 0 && data.ExpoNumber > 0) {//拆箱
data.SubTotal += (data.TotalCBM < 1 ? 1 : data.TotalCBM) * data.ExpoNumber * fnPackNum(oCostRules.PackingPrice);
}
if (data.ExpoStack && data.ExpoWeightTon > 0 && data.ExpoNumber > 0) {//堆高
/*** 2019/01/22 Yang Leo 台北駒驛「線上預約」堆高機價格計算方式調整「材積重」及「重量」擇一個重的去計價 Star ***/
//尺寸:200x200x200cm(換算材積重 = 1,336KGS)
//公式 = 長 寬 高 / 1000000 * 167
//重量:900KGS
//目前系統公式直接以重量900KGS計價 -> $920 / 件
//明年改為以材積重1,336KGS去計價 -> $1,700 / 件
if ((data.TotalCBM * 167) > data.ExpoWeight) { //公式=長*寬*高/1000000*167
data.ExpoWeightTon = (data.TotalCBM * 167) / 1000;
}
/*** 2019/01/22 Yang Leo 台北駒驛「線上預約」堆高機價格計算方式調整「材積重」及「重量」擇一個重的去計價 End ***/
var rule = fnGetCurRule(data.ExpoWeightTon);
if (rule.PricingMode === 'T') {
data.SubTotal += data.ExpoWeightTon * data.ExpoNumber * fnPackNum(rule.Price);
}
else {
data.SubTotal += data.ExpoNumber * fnPackNum(rule.Price);
}
}
if (data.ExpoStack || data.ExpoSplit || data.ExpoPack || data.ExpoFeed || data.ExpoStorage) {
if (data.ExpoNumber === 0) {
sError += '[件數]不能為空<br/>';
}
if (data.ExpoStack) {
if (data.ExpoWeightTon === 0) {
sError += '[堆高機]服務重量不能為空<br/>';
}
if (data.TotalCBM === 0) {
sError += '[堆高機]服務尺寸不能為空<br/>';
}
}
if (data.ExpoSplit) {
if (data.TotalCBM === 0) {
sError += '[裝箱]服務尺寸不能為空<br/>';
}
}
if (data.ExpoPack) {
if (data.TotalCBM === 0) {
sError += '[拆箱(含空箱收送與儲存)]服務尺寸不能為空<br/>';
}
}
if (data.ExpoFeed) {
if (data.TotalCBM === 0) {
sError += '[空箱收送]服務尺寸不能為空 <br />';
}
}
if (data.ExpoStorage) {
if (data.TotalCBM === 0) {
sError += '[空箱存放 / 存放]服務尺寸不能為空 <br />';
}
if (data.ExpoDays === 0) {
sError += '[空箱存放 / 存放]服務天數不能為空 <br /> ';
}
}
}
else {
sError += '請至少選擇一種服務<br/>';
}
if (sError) {
showMsg(sError);
return false;
}
if (flag === 'add') {
oCurData.PackingInfo.push(data);
}
else {
$.grep(oCurData.PackingInfo, function (item) {
if (item.Guid === curitem.Guid) {
$.extend(item, data);
}
});
}
fnTotalSum();
oGrid.loadData();
layer.close(index);
}
});
});
},
/**
* 目的 轉換數字
* @param {String}str 當前input值
* @return {Number} 數字
*/
fnPackNum = function (str) {
return ((str || '') === '' ? '0' : str) * 1;
},
/**
* 目的 轉換數字
* @param {String}str 當前input值
*/
fnTotalSum = function () {
var iTotal = 0;
$.grep(oCurData.PackingInfo, function (item) {
iTotal += item.SubTotal * 1;
});
oCurData.Total = iTotal.toFloat().toMoney();
$('#Total').val(oCurData.Total);
},
/**
* 目的 獲取當前適應費用規則
* @param {Number}weight 當前重量
* @return {Object} 當前規則對象
*/
fnGetCurRule = function (weight) {
var oRule = {};
$.each(oCostRules.CostRules, function (index, item) {
var rule_min = fnPackNum(item.Weight_Min),
rule_max = fnPackNum(item.Weight_Max);
if (weight >= rule_min && weight < rule_max || (weight === 30 && rule_max === 30)) {
oRule = item;
return false;
}
});
return oRule;
},
/**
* 目的 設置匯入廠商下拉單
* @param {String}id 展覽ID
* @param {String}val 客戶值
* @return {Object} Ajax對象
*/
fnSetImpCusDrop = function (id, val) {
if (id) {
return g_api.ConnectLite(sProgramId, 'SetImpCusDrop', {
Id: id
}, function (res) {
if (res.RESULT) {
var saList = res.DATA.rel;
var sOptions = createOptions(saList, 'guid', 'CustomerCName');
$('#CustomerId').html(sOptions).on('change', function () {
g_api.ConnectLite(sProgramId, 'GetImpCusData', {
Id: this.value
}, function (res) {
if (res.RESULT) {
var oRes = res.DATA.rel || {};
$('#MuseumMumber').val(oRes.MuseumMumber || '');
$('#AppointUser').val(oRes.Contactor || '');
$('#AppointTel').val(oRes.Telephone || '');
$('#AppointEmail').val(oRes.Email || '');
$('#Contactor').val(oRes.Contactor || '');
$('#ContactTel').val(oRes.Telephone || '');
}
});
}).select2();
if (val) {
$('#CustomerId').val(val).trigger('change');
}
}
});
}
else {
$('#CustomerId').html(createOptions([]));
return $.Deferred().resolve().promise();
}
},
/**
* ToolBar 按鈕事件 function
* @param {Object}inst 按鈕物件對象
* @param {Object} e 事件對象
* @return {Boolean} 停止標識
*/
fnButtonHandler = function (inst, e) {
var sId = inst.id;
switch (sId) {
case "Toolbar_Qry":
break;
case "Toolbar_Save":
if (!$("#form_main").valid()) {
oValidator.focusInvalid();
return false;
}
if (sAction === 'Add') {
fnAdd('add');
}
else {
fnUpd();
}
break;
case "Toolbar_ReAdd":
if (!$("#form_main").valid()) {
oValidator.focusInvalid();
return false;
}
fnAdd('readd');
break;
case "Toolbar_Clear":
clearPageVal();
break;
case "Toolbar_Leave":
pageLeave();
break;
case "Toolbar_Add":
break;
case "Toolbar_Upd":
break;
case "Toolbar_Copy":
break;
case "Toolbar_Del": // ╠message.ConfirmToDelete⇒確定要刪除嗎 ?╣ ╠common.Tips⇒提示╣
layer.confirm(i18next.t("message.ConfirmToDelete"), { icon: 3, title: i18next.t('common.Tips') }, function (index) {
fnDel();
layer.close(index);
});
break;
default:
alert("No handle '" + sId + "'");
break;
}
},
/**
* 初始化 function
*/
init = function () {
commonInit({
PrgId: sProgramId,
ButtonHandler: fnButtonHandler,
GoTop: true
});
oValidator = $("#form_main").validate({
onfocusout: false,
rules: {
AppointEmail: { email: true }
},
messages: {
AppointEmail: { email: i18next.t("message.IncorrectEmail") }// ╠message.IncorrectEmail⇒郵箱格式不正確╣
}
});
$.whenArray([
fnSetEpoDrop({
Select: $('#ExhibitionNO'),
Select2: true,
CallBack: function () {
}
})
])
.done(function () {
fnGet().done(function () {
$("#jsGrid").jsGrid({
width: "100%",
height: "auto",
autoload: true,
filtering: false,
inserting: true,
editing: false,
pageLoading: true,
confirmDeleting: true,
invalidMessage: i18next.t('common.InvalidData'),// ╠common.InvalidData⇒输入的数据无效!╣
deleteConfirm: i18next.t('message.ConfirmToDelete'),// ╠message.ConfirmToDelete⇒確定要刪除嗎 ?╣
pageIndex: 1,
pageSize: 10000,
fields: [
{ name: "Index", title: 'common.RowNumber', width: 50, align: "center" },
{// ╠common.Packaging⇒包裝類型╣
name: "ExpoType", title: 'common.Packaging', width: 100, align: "center",
itemTemplate: function (val, item) {
var oExpoType = {
'zh-TW': { '01': '裸機', '02': '木箱', '03': '散貨', '04': '打板', '05': '其他' },
'en': { '01': 'Unwrapped', '02': 'Wooden Crate', '03': 'Bulk Cargo', '04': 'Pallet', '05': 'Other' }
},
bEn = 'Unwrapped,Wooden Crate,Bulk Cargo,Pallet,Other'.indexOf(item.ExpoTypeText) > -1;
return val ? oExpoType[bEn ? 'en' : 'zh-TW'][val] : '';
}
},
{// ╠common.Dimensions⇒尺寸╣
name: "ExpoLen", title: 'common.Dimensions', width: 100,
itemTemplate: function (val, item) {
return item.ExpoLen.toMoney() + '*' + item.ExpoWidth.toMoney() + '*' + item.ExpoHeight.toMoney();
}
},
{// ╠common.WeightKG⇒重量╣
name: "ExpoWeight", title: 'common.WeightKG', width: 100, align: "right",
itemTemplate: function (val, item) {
return val.toMoney();
}
},
{
name: "ExpoNumber", title: 'common.Number', width: 100, align: "center",
itemTemplate: function (val, item) {
return val.toMoney();
}
},// ╠common.Number⇒件數╣
{// ╠common.ServiceProject⇒服務項目╣
name: "ExpoStack", title: 'common.ServiceProject', width: 200,
itemTemplate: function (val, item) {
var oService = {
'zh-TW': ['堆高機服務', '拆箱(含空箱收送與儲存)', '裝箱', '空箱收送', '空箱儲存', '天'],
'en': ['Forklift', 'Unpacking (including empty crate transport & storage)', 'Packing', 'Empty Crate Transport', 'Empty Crate Storage', 'Days']
},
saText = [],
bEn = 'Unwrapped,Wooden Crate,Bulk Cargo,Pallet,Other'.indexOf(item.ExpoTypeText) > -1;
oService = oService[bEn ? 'en' : 'zh-TW'];
if (item.ExpoStack) {
saText.push(oService[0]);
}
if (item.ExpoSplit) {
saText.push(oService[1]);
}
if (item.ExpoPack) {
saText.push(oService[2]);
}
if (item.ExpoFeed) {
saText.push(oService[3]);
}
if (item.ExpoStorage) {
saText.push(oService[4] + item.ExpoDays + oService[5]);
}
return saText.join(',');
}
},
{// ╠common.Cost⇒費用╣
name: "SubTotal", title: 'common.Cost', width: 100, align: "right",
itemTemplate: function (val, item) {
return fMoney(val || 0, 0, 'NTD');
}
},
{
type: "control",
modeSwitchButton: false,
editButton: false,
width: 100,
headerTemplate: function () {
return i18next.t('common.Action');
},
itemTemplate: function (val, item) {
var saAction = [$('<a/>', {
html: i18next.t('common.Toolbar_Upd'),// ╠common.Toolbar_Upd⇒修改╣
class: 'a-url',
click: function () {
fnOpenPackingInfo('upd', item);
return false;
}
}), $('<a/>', {
html: i18next.t('common.Toolbar_Del'),// ╠common.Toolbar_Del⇒刪除╣
class: 'a-url delete',
click: function () {
// ╠message.ConfirmToDelete⇒確定要刪除嗎 ?╣ ╠common.Tips⇒提示╣
layer.confirm(i18next.t("message.ConfirmToDelete"), { icon: 3, title: i18next.t('common.Tips') }, function (index) {
oCurData.PackingInfo = Jsonremove(oCurData.PackingInfo, 'Guid', item.Guid);
$.each(oCurData.PackingInfo, function (idx, _item) {
_item.Index = idx + 1;
});
fnTotalSum();
oGrid.loadData();
layer.close(index);
});
}
})];
return $('<div>', { 'style': 'width:100%;text-align: center;' }).append(saAction);
}
}
],
controller: {
loadData: function (args) {
return {
data: oCurData.PackingInfo,
itemsCount: oCurData.PackingInfo.length //data.length
};
},
insertItem: function (args) {
if (oCostRules.CostRules) {
fnOpenPackingInfo('add');
}
else {
showMsg(i18next.t("PackingOrder_Upd.ExhibitionNO_required")); // ╠PackingOrder_Upd.ExhibitionNO_required⇒請選擇展覽名稱╣
}
},
updateItem: function (args) {
},
deleteItem: function (args) {
}
},
onInit: function (args) {
oGrid = args.grid;
}
});
});
});
$('#ExhibitionNO').on('change', function () {
fnSetImpCusDrop(this.value);
return g_api.ConnectLite(sProgramId, 'GetExhibitionRules', {
Id: this.value
}, function (res) {
if (res.RESULT) {
oCostRules = res.DATA.rel;
oCostRules.CostRules = $.parseJSON(oCostRules.CostRules);
sExhibitionNO = oCostRules.ExhibitionCode;
}
});
});
};
init();
};
require(['base', 'timepicker', 'jsgrid', 'select2', 'formatnumber', 'util'], fnPageInit, 'timepicker');