|
|
@@ -4,7 +4,7 @@ let divideObj = {
|
|
|
{headerName: "类别", headerWidth: 60, dataCode: "itemType", hAlign:'center', dataType: "String"},
|
|
|
{headerName: "清单编号", headerWidth: 130, dataCode: "code", hAlign:'left', dataType: "String", formatter: "@"},
|
|
|
{headerName: "名称", headerWidth: 250, dataCode: "name", dataType: "String",formatter: "@"},
|
|
|
- {headerName: "单位", headerWidth: 50, dataCode: "unit", dataType: "String",cellType:'comboBox',editable:true,options:['m', 'm2', 'm3', 'km', 't', 'kg', '台班', '工日', '昼夜', '元', '项', '处', '个', '件',
|
|
|
+ {headerName: "单位", headerWidth: 50, dataCode: "unit", hAlign:'center',dataType: "String",cellType:'comboBox',editable:true,options:['m', 'm2', 'm3', 'km', 't', 'kg', '台班', '工日', '昼夜', '元', '项', '处', '个', '件',
|
|
|
'根', '组', '系统', '台', '套', '株', '丛', '缸', '支', '只', '块', '座', '对', '份', '樘', '攒', '榀']},
|
|
|
{headerName: "工程量", headerWidth: 80, dataCode: "quantity", dataType: "Number",validator:"number",getText:"notZero"},
|
|
|
{headerName: "单价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number",validator:"number",getText:"notZero"},
|
|
|
@@ -14,6 +14,7 @@ let divideObj = {
|
|
|
],
|
|
|
view:{
|
|
|
lockColumns: [0],
|
|
|
+ rowHeaderWidth:25,
|
|
|
colHeaderHeight:30
|
|
|
},
|
|
|
getText:{
|
|
|
@@ -54,7 +55,7 @@ let divideObj = {
|
|
|
billsSetting:{
|
|
|
header: [
|
|
|
{headerName: "编号", headerWidth: 100, dataCode: "code", hAlign:'left', dataType: "String"},
|
|
|
- {headerName: "名称", headerWidth: 250, dataCode: "name", dataType: "String"},
|
|
|
+ {headerName: "名称", headerWidth: 230, dataCode: "name", dataType: "String"},
|
|
|
{headerName: "分摊比例", headerWidth: 70, dataCode: "divideRate", dataType: "Number",validator:"number"},
|
|
|
{headerName: "分摊金额", headerWidth: 80, dataCode: "dividePrice", dataType: "Number",validator:"number"},
|
|
|
{headerName: "原始金额", headerWidth: 80, dataCode: "originalPrice", dataType: "Number",validator:"number"},
|
|
|
@@ -63,6 +64,7 @@ let divideObj = {
|
|
|
],
|
|
|
view:{
|
|
|
lockColumns: [0,1,2,3,4,5,6],
|
|
|
+ rowHeaderWidth:25,
|
|
|
colHeaderHeight:30
|
|
|
}
|
|
|
},
|
|
|
@@ -162,6 +164,9 @@ let divideObj = {
|
|
|
if (commonFee){
|
|
|
item.marketPrice = commonFee.unitFee;
|
|
|
item.marketTotalFee = commonFee.totalFee;
|
|
|
+ }else{
|
|
|
+ delete item.marketPrice;
|
|
|
+ delete item.marketTotalFee;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -197,7 +202,8 @@ let divideObj = {
|
|
|
}
|
|
|
for(let b of this.selectedBillsDatas){
|
|
|
if(b.selected == 1 && !parentMap[b.ID]){
|
|
|
- let e = {ID:b.ID,code:b.code,name:b.name,divideRate:0,totalFee:b.totalFee};
|
|
|
+ let newCode = this.getExeBillCode(b.ID);
|
|
|
+ let e = {ID:b.ID,code:newCode,name:b.name,divideRate:0,totalFee:b.totalFee};
|
|
|
if(b.totalFee != "") total = scMathUtil.roundForObj(total + parseFloat(b.totalFee),getDecimal("process"))
|
|
|
if(divideType == 1 && billsRationGLJMap[b.ID]){
|
|
|
let btotal = 0;
|
|
|
@@ -242,8 +248,38 @@ let divideObj = {
|
|
|
this.execBillsSheet.setRowCount(this.execBillsDatas.length);
|
|
|
},
|
|
|
|
|
|
-
|
|
|
+ getExeBillCode:function(ID){
|
|
|
+ let bNode = projectObj.project.mainTree.findNode(ID);
|
|
|
+ if(!bNode) return "";
|
|
|
+ let nodes= [];
|
|
|
+ getNodes(bNode);
|
|
|
+ let newCode = "";
|
|
|
+ for(let n of nodes){
|
|
|
+ if(n.data.code && n.data.code !=""){
|
|
|
+ if(newCode == ""){
|
|
|
+ newCode = n.data.code;
|
|
|
+ }else{
|
|
|
+ let exp = new RegExp("^"+newCode);
|
|
|
+ if(exp.test(n.data.code)){
|
|
|
+ newCode = n.data.code
|
|
|
+ }else{
|
|
|
+ let mid = "-"
|
|
|
+ if(newCode.substr(-1,1) == "-" ||n.data.code.substr(0,1)=="-")mid="";
|
|
|
+ newCode = newCode+mid+n.data.code
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return newCode;
|
|
|
|
|
|
+
|
|
|
+ function getNodes (node){
|
|
|
+ nodes.unshift(node);
|
|
|
+ if(node.parent) getNodes(node.parent);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
showSelectedBillsDatas:function(datas){
|
|
|
if(!datas)this.selectedBillsDatas = getSelectedBillsDatas();
|
|
|
this.billsSelectedSheet.setRowCount(this.selectedBillsDatas.length);
|
|
|
@@ -279,7 +315,8 @@ let divideObj = {
|
|
|
if(d.calcBase&&d.calcBase!="") t.unDivide = 1;
|
|
|
//数量*单价的(判断金额列是否有值),不可选择
|
|
|
if(d.calcFlag == treeNodeCalcFlag.customUnitPrice && t.totalFee !="") t.unDivide = 1;
|
|
|
-
|
|
|
+ //不属于100-700章的,不可选择
|
|
|
+ if(!projectObj.project.Bills.isBelongOneToSeven(node)) t.unDivide = 1;
|
|
|
datas.push(t);
|
|
|
if(!node.children) return;
|
|
|
for(let c of node.children){
|
|
|
@@ -500,10 +537,46 @@ let divideObj = {
|
|
|
let me = this;
|
|
|
let data = me.rationGLJDatas[row],setting = gljCol.ration_glj_setting;
|
|
|
let dataCode = setting.header[col].dataCode;
|
|
|
- if(data.isMixRatio == true && (dataCode=="customQuantity"||dataCode=="basePrice")) return false;
|
|
|
+ if(dataCode=="basePrice") return false;
|
|
|
+ if(data.isMixRatio == true && dataCode=="customQuantity") return false;
|
|
|
+ for(let r of me.rationGLJDatas){
|
|
|
+ if(r.ParentID == data.ID) return false;
|
|
|
+ }
|
|
|
return true;
|
|
|
},
|
|
|
|
|
|
+ calcExecBillsData:function(){
|
|
|
+ let item = divideObj.getSelectedItem();
|
|
|
+ for(let b of this.execBillsDatas){
|
|
|
+ let bNode = projectObj.project.mainTree.findNode(b.ID);
|
|
|
+ if (!bNode) continue;
|
|
|
+ if(!b.divideRate) continue;
|
|
|
+ b.dividePrice =0;
|
|
|
+ b.originalPrice=0;
|
|
|
+ b.totalPrice =0;
|
|
|
+ b.price=0;
|
|
|
+ b.divideRate = scMathUtil.roundForObj(b.divideRate * 0.01,3);
|
|
|
+ b.dividePrice = scMathUtil.roundForObj(item.marketTotalFee * b.divideRate,getDecimal("bills.totalPrice"));
|
|
|
+ b.originalPrice = calcOriginalPrice(bNode);
|
|
|
+ b.totalPrice = scMathUtil.roundForObj(b.dividePrice + b.originalPrice,getDecimal("bills.totalPrice"));
|
|
|
+ }
|
|
|
+
|
|
|
+ function calcOriginalPrice(node){//计算原始金额,清单下的除分摊下的所有定额的值汇总
|
|
|
+ let sum = 0;
|
|
|
+ if(node.children){
|
|
|
+ for(let c of node.children){
|
|
|
+ if(c.data.divideID && c.data.divideID!="") continue;
|
|
|
+ if(c.data.feesIndex && c.data.feesIndex.common){
|
|
|
+ let totalFee = scMathUtil.roundForObj(c.data.feesIndex.common.totalFee,getDecimal("bills.totalPrice"))
|
|
|
+ sum = scMathUtil.roundForObj(sum + totalFee,getDecimal("process"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return scMathUtil.roundForObj(sum,getDecimal("bills.totalPrice"));
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
showBillsDatas:function(){
|
|
|
if(!$('#divide_bills_sheet').is(':visible')) return;
|
|
|
this.billsDatas = getBillsDatas();
|
|
|
@@ -515,29 +588,7 @@ let divideObj = {
|
|
|
let item = divideObj.getSelectedItem();
|
|
|
if(item.bills){
|
|
|
for(let b of item.bills){
|
|
|
- let bNode = projectObj.project.mainTree.findNode(b.ID);
|
|
|
- if (!bNode) continue;
|
|
|
- let t = {
|
|
|
- ID:b.ID,
|
|
|
- divideRate:b.divideRate,
|
|
|
- name:bNode.data.name,
|
|
|
- code:bNode.data.code,
|
|
|
- dividePrice:0,
|
|
|
- originalPrice:0,
|
|
|
- totalPrice:0,
|
|
|
- price:0
|
|
|
- }
|
|
|
- if(bNode.data.feesIndex.common.totalFee){
|
|
|
- let totalFee = scMathUtil.roundForObj(bNode.data.feesIndex.common.totalFee,getDecimal("bills.totalPrice"));
|
|
|
- t.price = totalFee;
|
|
|
- t.divideRate = scMathUtil.roundForObj(t.divideRate * 0.01,3);
|
|
|
- t.dividePrice = scMathUtil.roundForObj(item.marketTotalFee * t.divideRate,getDecimal("bills.totalPrice"));
|
|
|
- }
|
|
|
- if(bNode.data.feesIndex.rationCommon && bNode.data.feesIndex.rationCommon.totalFee){
|
|
|
- t.originalPrice = scMathUtil.roundForObj(bNode.data.feesIndex.rationCommon.totalFee,getDecimal("bills.totalPrice"));
|
|
|
- }
|
|
|
- t.totalPrice = scMathUtil.roundForObj(t.dividePrice + t.originalPrice,getDecimal("bills.totalPrice"));
|
|
|
- datas.push(t);
|
|
|
+ datas.push(b);
|
|
|
}
|
|
|
}
|
|
|
return datas;
|
|
|
@@ -589,12 +640,11 @@ let divideObj = {
|
|
|
}
|
|
|
if(c.ID == bills.ID) item = c;
|
|
|
}
|
|
|
- item.fees=[];
|
|
|
- item.feesIndex={};
|
|
|
- if(subNodes.length > 0) projectObj.project.calcProgram.innerCalcBill({data:item, sourceType:"bills", updateData:[],children:subNodes},3);
|
|
|
- if(subNodes.length == 0){
|
|
|
+ this.initFeeIndexs(item);
|
|
|
+ if(subNodes.length > 0||deleteMap){
|
|
|
+ projectObj.project.calcProgram.innerCalcBill({data:item, sourceType:"bills", updateData:[],children:subNodes},3);
|
|
|
+ }else if(subNodes.length == 0){
|
|
|
item.calcFlag = 2;
|
|
|
- this.initFeeIndexs(item);
|
|
|
projectObj.project.calcProgram.innerCalcBillCustom({data:item, sourceType:"bills", updateData:[],children:[]},3);
|
|
|
}
|
|
|
return item;
|
|
|
@@ -925,6 +975,7 @@ let divideObj = {
|
|
|
let checkboxValue = args.sheet.getCell(args.row, args.col).value();
|
|
|
let newval = checkboxValue? 0:1;
|
|
|
let data = divideObj.selectedBillsDatas[args.row];
|
|
|
+ if(data.unDivide == 1) return;
|
|
|
let parentMap = {};
|
|
|
parentMap[data.ID]=true;
|
|
|
data.selected=newval;
|
|
|
@@ -1179,11 +1230,11 @@ let divideObj = {
|
|
|
let divideResizeEles = {};
|
|
|
divideResizeEles.eleObj = {
|
|
|
module: 'divide',
|
|
|
- resize: $('#divide_rgResize'),
|
|
|
+ resize: $('#divideResize'),
|
|
|
top: $('#divide_top'),
|
|
|
topSpread: $('#divide_main_sheet'),
|
|
|
- bottom: $('#divideBottom').children().find('.main-data-bottom'),
|
|
|
- bottomSpread: [$('#divide_subSpread')]
|
|
|
+ bottom: $('#divideBottom'),
|
|
|
+ bottomSpread: [$('#divide_subSpread'),$('#divide_itemTextDiv'),$('#divide_gljSubDiv'),$('#divide_gljItemTab')]
|
|
|
};
|
|
|
|
|
|
divideResizeEles.limit = {
|
|
|
@@ -1196,15 +1247,15 @@ let divideObj = {
|
|
|
};
|
|
|
return divideResizeEles;
|
|
|
},
|
|
|
- calcDivideNodes : async function(item){
|
|
|
+ calcDivideNodes : async function(item,bills,callback){
|
|
|
if(!item.marketTotalFee) return;
|
|
|
let changeNode=[];
|
|
|
let datas = [];
|
|
|
let usedIDMap={};
|
|
|
- for(let b of item.bills){
|
|
|
+ for(let b of bills){
|
|
|
let bNode = projectObj.project.mainTree.findNode(b.ID);
|
|
|
if(!bNode) continue;
|
|
|
- let divideRate = scMathUtil.roundForObj(b.divideRate * 0.01,3);
|
|
|
+ let divideRate = scMathUtil.roundForObj(b.divideRate,3);
|
|
|
let marketUnitFee = item.marketPrice?scMathUtil.roundForObj(item.marketPrice,getDecimal("bills.unitPrice")):0;
|
|
|
let quantity = item.quantity?scMathUtil.roundForObj(item.quantity,3):0;
|
|
|
quantity = scMathUtil.roundForObj(quantity*divideRate,getDecimal("ration.quantity"))//量价数量为分摊项的数量*分摊比例
|
|
|
@@ -1259,7 +1310,18 @@ let divideObj = {
|
|
|
let nodes = await projectObj.project.syncUpdateNodesAndRefresh(datas);
|
|
|
//重新计算
|
|
|
cbTools.refreshFormulaNodes();
|
|
|
- projectObj.project.calcProgram.calcNodesAndSave(changeNode.concat(nodes));
|
|
|
+ projectObj.project.calcProgram.calcNodesAndSave(changeNode.concat(nodes),function(){
|
|
|
+ //反算分摊右边表中的金额
|
|
|
+ for(let b of bills){
|
|
|
+ let bNode = projectObj.project.mainTree.findNode(b.ID);
|
|
|
+ if(bNode.data.feesIndex&&bNode.data.feesIndex.common){
|
|
|
+ let totalFee = scMathUtil.roundForObj(bNode.data.feesIndex.common.totalFee,getDecimal("bills.totalPrice"));
|
|
|
+ b.price = totalFee;
|
|
|
+ }
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
},
|
|
|
cancelDivide:async function(divideID){//如果不传ID,相当于取消所有
|
|
|
let changeNode=[],datas=[],itemDatas=[];
|
|
|
@@ -1291,6 +1353,7 @@ let divideObj = {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
function loadDivideHeight(){
|
|
|
if(!$('#divide_main').is(':visible')) return;
|
|
|
let me = divideObj;
|
|
|
@@ -1299,15 +1362,22 @@ function loadDivideHeight(){
|
|
|
me.refreshViews();
|
|
|
zmhs_obj.refresh();
|
|
|
});
|
|
|
+
|
|
|
+ SlideResize.verticalSlide(divideResizeEles.eleObj, divideResizeEles.limit, function(){
|
|
|
+ me.refreshViews();
|
|
|
+ zmhs_obj.refresh();
|
|
|
+ });
|
|
|
if($('#divide_de').is(':visible')) showDivideSide($($("#divide_stdRationTab").attr('relaPanel')), true, $("#divide_stdRationTab").attr('id'));
|
|
|
}
|
|
|
|
|
|
$('#tab_divide').on('shown.bs.tab', function (e) {
|
|
|
sessionStorage.setItem('mainTab', '#tab_divide');
|
|
|
+ $('#divide_bills_sheet').width($('#divide_bills_div').width()-$('#divideMiddleResize').width());
|
|
|
loadDivideHeight();
|
|
|
divideObj.initSpread();
|
|
|
divideObj.showDatas();
|
|
|
divideObj.initNavItem();
|
|
|
+
|
|
|
})
|
|
|
|
|
|
$('.divide-nav-link').bind('click', function () {//$('.side-tabs ul li a').bind 2018-11-23 使用更多标签,所以不能这样绑定事件了
|
|
|
@@ -1373,6 +1443,26 @@ SlideResize.horizontalSlide(dSideResizeEles.eleObj, dSideResizeEles.limit, funct
|
|
|
divideObj.refreshViews();
|
|
|
});
|
|
|
|
|
|
+//分摊左和右表水平拖动
|
|
|
+let divideLeftAndRight={
|
|
|
+ eleObj:{
|
|
|
+ module: 'divideLeftRight',
|
|
|
+ resize: $('#divideMiddleResize'),
|
|
|
+ parent: $('#divide_top'),
|
|
|
+ left: $('#divide_main_sheet'),
|
|
|
+ right: $('#divide_bills_div')
|
|
|
+ },
|
|
|
+ limit:{
|
|
|
+ min: 150,
|
|
|
+ max: `$('#divide_top').width()-150`
|
|
|
+ }
|
|
|
+}
|
|
|
+SlideResize.horizontalSlide(divideLeftAndRight.eleObj, divideLeftAndRight.limit, function(){
|
|
|
+ if(divideObj.divideSpread) divideObj.divideSpread.refresh();
|
|
|
+ if(divideObj.billsSpread) divideObj.billsSpread.refresh();
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
function showDivideSide(tabPanel, show, id){
|
|
|
let divideSideResizeEles = getDivideSideResizeEles();
|
|
|
divideSideResizeEles.eleObj.module = id;
|
|
|
@@ -1458,7 +1548,8 @@ $('#exec_divide_btn').bind('click',function (){
|
|
|
if(projectReadOnly) return;
|
|
|
let selected = divideObj.getSelectedItem();
|
|
|
if(selected.itemType !="分摊项") return;
|
|
|
- $("#exec_divide_div").modal('show');
|
|
|
+ $("#exec_divide_label").html(`${selected.name}<br>分摊到:`)
|
|
|
+ $("#exec_divide_div").modal('show');
|
|
|
});
|
|
|
|
|
|
$('#cancel_divide_btn').bind('click',function (){
|
|
|
@@ -1492,9 +1583,12 @@ $('#exec_divide_div').on('shown.bs.modal',function () {
|
|
|
$("#divide_confirm").bind('click',async function (){
|
|
|
let divideType = parseInt($("input[name='divide_type']:checked").val());
|
|
|
let item = divideObj.getSelectedItem();
|
|
|
- let updateData = {ID:item.ID,type:'update',doc:{bills:divideObj.execBillsDatas,divideType:divideType}}
|
|
|
- await divideObj.updateItem([updateData]);
|
|
|
- await divideObj.calcDivideNodes(item);
|
|
|
+ divideObj.calcExecBillsData();
|
|
|
+ await divideObj.calcDivideNodes(item,divideObj.execBillsDatas,async function(){
|
|
|
+ let updateData = {ID:item.ID,type:'update',doc:{bills:divideObj.execBillsDatas,divideType:divideType}}
|
|
|
+ await divideObj.updateItem([updateData]);
|
|
|
+ divideObj.showDatas();
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
|