zhangweicheng 8 years ago
parent
commit
c4a0784e3e

+ 16 - 3
modules/ration_glj/facade/glj_calculate_facade.js

@@ -9,9 +9,12 @@ let ration_glj = mongoose.model('ration_glj');
 let ration = mongoose.model('ration');
 let ration_coe = mongoose.model('ration_coe');
 let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
+let glj_type_util = require('../../../public/cache/std_glj_type_util');
+
 
 module.exports={
-    calculateQuantity:calculateQuantity
+    calculateQuantity:calculateQuantity,
+    getGLJTypeByID:getGLJTypeByID
 }
 //辅助定额调整、替换工料机、标准附注条件调整、添加工料机、自定义消耗量(包括删除工料机)、自定义乘系数、市场单价调整
 let stateSeq ={
@@ -197,7 +200,7 @@ function everyCoe(quantity,coe,glj) {
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
             } else if(coe.coes[i].coeType=='定额'){
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
-            }else if(coe.coes[i].coeType==glj.gljDistType){
+            }else if(coe.coes[i].coeType==getGLJTypeByID(glj.type)){
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
             }
         }
@@ -212,7 +215,7 @@ function calculateQuantityByCustomerCoes(quantify,coe,glj) {
         return getCalculateResult(quantify, coe.coes[0])
     }else {
         for(let i=1;i<coe.coes.length;i++){
-            if(coe.coes[i].coeType.search(glj.gljDistType)!=-1){
+            if(coe.coes[i].coeType.search(getGLJTypeByID(glj.type))!=-1){
                 return getCalculateResult(quantify,coe.coes[i])
             }
         }
@@ -240,5 +243,15 @@ function getCalculateResult(quantify,c) {
             break;
     }
     return q;
+}
 
+function getGLJTypeByID(id) {
+    let glj_type_object = glj_type_util.getStdGljTypeCacheObj();
+    let topTypeId = glj_type_object.getTopParentIdByItemId(id);
+    let type = glj_type_object.getItemById(topTypeId);
+    if(type!=undefined){
+        return type.fullName;
+    }else {
+        return '';
+    }
 }

+ 73 - 16
modules/ration_glj/facade/quantity_detail_facade.js

@@ -18,7 +18,9 @@ let bill_model=mongoose.model("bills");
 
 module.exports={
     save:save,
-    getData:getData
+    getData:getData,
+    deleteByRation:deleteByRation,
+    deleteByBill:deleteByBill
 };
 
 let operationMap={
@@ -62,7 +64,7 @@ function insertRecode(user_id,datas) {
         let doc = datas.doc;
         doc.ID = uuidV1();
         doInsertRecode(doc).then(function (result) {
-            console.log(result);
+            //console.log(result);
             if(result.err){
                 callback(result.err,'')
             }else {
@@ -508,23 +510,12 @@ function updateRecored(query,doc,callback) {
     })
 }
 
-function checkingRegex(datas) {
-    try{
-        if(datas.doc.hasOwnProperty('regex')){
-           // datas.doc.result=eval(datas.doc.regex);
-        }
-        return null;
-    }catch (error){
-        console.log(error.message);
-        return error
-    }
-
-}
 
 function update_quantity_detail(user_id,datas) {
     if(datas.updateFunction){
         return updateFunctionMap[datas.updateFunction](user_id,datas);
     }else {
+        console.log(datas);
         return normalUpdate(user_id,datas);
     }
 }
@@ -532,14 +523,56 @@ function update_quantity_detail(user_id,datas) {
 function delete_quantity_detail(user_id,datas) {
     return function (callback) {
         doQuantityDelete(datas.doc).then(function (result) {
-
+            console.log(result);
+            if(result.err){
+                callback(result.err,'')
+            }else {
+                callback(null,result.returndata)
+            }
         });
-        callback(null,'');
     }
 }
 
 async function doQuantityDelete(doc) {
    console.log(doc) ;
+    let result={
+        err:null
+    }
+    try{
+        let query = {
+            projectID:doc.projectID,
+            seq : { $gt: doc.seq }
+        }
+        if(doc.hasOwnProperty('rationID')){
+            query.rationID = doc.rationID;
+        }else {
+            query.billID = doc.billID;
+        }
+        let quantity_detail_List = await getDatailList(doc,{data:{}});
+        let update_task = getUpdateReferenceTask(quantity_detail_List,doc.seq,-1);
+        await quantity_detail_model.update(query,{$inc:{seq:-1}},{multi: true});
+        if(update_task.length>0){
+            await quantity_detail_model.bulkWrite(generateUpdateTaks(update_task));
+        }
+        await quantity_detail_model.deleteOne({ID:doc.ID,projectID:doc.projectID});
+        let returndata ={
+            moduleName:consts.projectConst.QUANTITY_DETAIL,
+            data:{
+                doc:doc,
+                resort:true,
+                update_task:update_task,
+                updateTpye:commonConsts.UT_DELETE
+            }
+        };
+        result.returndata =returndata
+        return result;
+    }catch (error){
+        console.log(error)
+        result.err;
+        return result
+    }
+
+
 }
 
 
@@ -573,4 +606,28 @@ function save (user_id, datas, callback) {
             }
         }
     })
+}
+
+function deleteByRation(data) {
+    return function (callback) {
+        quantity_detail_model.deleteMany({projectID: data.projectID, rationID: data.ID},(err,result)=>{
+            commonCallback(callback,result,err);
+        });
+    }
+}
+function deleteByBill(data) {
+    return function (callback) {
+        console.log({projectID: data.projectID, billID: data.ID});
+        quantity_detail_model.deleteMany({projectID: data.projectID, billID: data.ID},(err,result)=>{
+            commonCallback(callback,result,err);
+        });
+    }
+}
+
+function commonCallback(callback,result,err) {
+    if(err){
+        callback(err,'');
+    }else {
+        callback(null,result);
+    }
 }

+ 10 - 2
modules/ration_glj/facade/ration_glj_facade.js

@@ -17,6 +17,8 @@ let ration_coe_facade = require('./ration_coe_facade');
 let ration_coe = mongoose.model('ration_coe');
 let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
 let glj_calculate_facade = require('./glj_calculate_facade');
+let quantity_detail_facade = require('./quantity_detail_facade');
+
 
 
 module.exports={
@@ -87,12 +89,13 @@ function get_lib_glj_info(ration_glj) {
             if(err){
                 cb(err,'')
             }else if(glj){
+                console.log(glj);
                 ration_glj.name = glj.name;
                 ration_glj.code = glj.code;
                 ration_glj.unit = glj.unit;
                 ration_glj.specs = glj.specs;
                 ration_glj.basePrice = glj.basePrice;
-                ration_glj.gljDistType = glj.gljDistType;
+                ration_glj.shortName = glj.shortName;
                 ration_glj.type = glj.gljType;
                 getInfoFromProjectGLJ(ration_glj).then(function (result) {
                     if(result){
@@ -121,6 +124,8 @@ async function getInfoFromProjectGLJ(ration_glj) {
          base_price: ration_glj.basePrice,
          market_price: ration_glj.basePrice
      };
+
+     console.log(ration_glj);
      try {
          let projectGljModel = new GLJListModel();
          let result = await projectGljModel.addList(data);
@@ -329,7 +334,8 @@ function deleteByRation(datas,callback) {
     let data = datas.updateData;
     let tasks=[];
     tasks.push(deleteGLJList(data));
-    tasks.push(ration_coe_facade.delete_ration_coe(data))
+    tasks.push(ration_coe_facade.delete_ration_coe(data));
+    tasks.push(quantity_detail_facade.deleteByRation(data));
     async_n.parallel(tasks,function (err,result) {
         commonCallback(callback,result,err)
     })
@@ -429,7 +435,9 @@ function deleteByMultiRations(datas) {
         for(let i=0;i<rations.length;i++){
             delete_tasks.push(deleteOne(rations[i]._doc));
             delete_tasks.push(ration_coe_facade.delete_ration_coe(rations[i]._doc));
+            delete_tasks.push(quantity_detail_facade.deleteByRation(rations[i]._doc));
         }
+        delete_tasks.push(quantity_detail_facade.deleteByBill(datas.updateData));
         async_n.parallel(delete_tasks,(err,results)=>{
             if (err){
                 deleteCallBack(err,'')

+ 1 - 1
modules/ration_glj/models/ration_glj.js

@@ -15,7 +15,7 @@ var ration_glj = new Schema({
     specs:String,
     unit:String,
     basePrice:Number,
-    gljDistType:String,
+    shortName:String,
     type:Number,
     quantity:Number,
     customQuantity:Number,

+ 2 - 1
modules/ration_glj/models/ration_glj_temp.js

@@ -32,7 +32,8 @@ var gljSchema =new Schema({
     unit: String,
     basePrice: Number,
     gljType: Number, //这个是UI显示上的详细分类,对应gljTypeSchema
-    gljDistType: String  //人工,材料,机械
+    shortName: String,  //人工,材料,机械
+    gljClass:Number
 },{versionKey:false});
 
 mongoose.model("std_ration_lib_glj_list",gljSchema,"std_ration_lib_glj_list");

+ 2 - 1
modules/ration_repository/models/glj_repository.js

@@ -28,7 +28,8 @@ var gljSchema = mongoose.Schema({
     unit: String,
     basePrice: Number,
     gljType: Number, //这个是UI显示上的详细分类,对应gljTypeSchema
-    gljDistType: String  //人工,材料,机械
+    shortName: String,  //人工,材料,机械
+    gljClass:Number
 });
 var gljTypeModel = db.model("std_ration_lib_glj_type",gljTypeSchema, "std_ration_lib_glj_type");
 var gljItemModel = mongoose.model("std_ration_lib_glj_list");

+ 3 - 1
modules/users/controllers/login_controller.js

@@ -6,6 +6,8 @@
  * @version
  */
 import UserModel from "../models/user_model";
+import c_fa from "../../../modules/ration_glj/facade/glj_calculate_facade"
+
 
 class LoginController {
 
@@ -69,7 +71,7 @@ class LoginController {
         } catch (error) {
             return response.json({error: 1, msg: error});
         }
-
+        c_fa.getGLJTypeByID(1);
         response.json({error: 0, msg: '', exist: userExist ? 1 : 0});
     }
 

+ 2 - 0
public/web/sheet/sheet_common.js

@@ -10,6 +10,8 @@ var sheetCommonObj = {
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: SheetCount });
         spreadBook.options.tabStripVisible = false;
         spreadBook.options.showHorizontalScrollbar = false;
+        spreadBook.options.allowCopyPasteExcelStyle = false;
+        spreadBook.options.allowUserDragDrop = true;
         return spreadBook;
     },
 

+ 1 - 0
web/building_saas/main/js/models/bills.js

@@ -167,6 +167,7 @@ var Bills = {
             var moudles =[ModuleNames.bills,ModuleNames.ration_glj];
             var deleteDatas=[tools.coverseTreeUpdateData(deleteData, this.project.ID()),ration_glj.getDeleteDataByBills(deleteData)];
             project.ration_glj.deleteByBills(deleteData);
+            project.quantity_detail.deleteByBills(deleteData);
             project.pushNow('deleteBILL', moudles, deleteDatas);
             this.delete(deleteData);
 

+ 88 - 12
web/building_saas/main/js/models/quantity_detail.js

@@ -44,28 +44,27 @@ var quantity_detail = {
             console.log(data);
             var me = this;
             if(data.hasOwnProperty('resort')){
-                this.resortData(data.doc);
+                this.resortData(data.doc,1);
                 _.forEach(data.update_task,function (item) {
                     me.refreshEachItme(item.query,item.doc);
                 })
+                gljOprObj.detailData.push(data.doc);
+                this.datas.push(data.doc);
             }else {
                 this.datas.push(data);
                 gljOprObj.detailData.push(data);
             }
             gljOprObj.detailData=_.sortBy(gljOprObj.detailData,'seq');
-            console.log(gljOprObj.detailData);
             this.refreshSheetData();
         };
-        quantity_detail.prototype.resortData=function(data){
+        quantity_detail.prototype.resortData=function(data,req){
 
             for(var i =0;i<gljOprObj.detailData.length;i++){
                 var item = gljOprObj.detailData[i];
                 if(item.seq>=data.seq){
-                    item.seq=item.seq+1;
+                    item.seq=item.seq+req;
                 }
             }
-            gljOprObj.detailData.push(data);
-            this.datas.push(data);
         };
         quantity_detail.prototype.refreshAfterUpdate=function(data){
             var me = this;
@@ -79,6 +78,7 @@ var quantity_detail = {
             }
             var showList = _.filter(this.datas,filter_object);
             gljOprObj.detailData=showList;
+            gljOprObj.detailData=_.sortBy(gljOprObj.detailData,'seq');
             this.refreshSheetData();
         };
         quantity_detail.prototype.refreshEachItme = function(query,doc){
@@ -98,9 +98,15 @@ var quantity_detail = {
             return filter_object;
         };
         quantity_detail.prototype.refreshAfterDelete=function(data){
-            var glj_list = projectObj.project.ration_coe.datas;
-            _.remove(glj_list,data.query);
-            _.remove(gljOprObj.sheetData,data.query);
+            var me = this;
+            if(data.doc.seq != gljOprObj.detailData.length - 1){
+                this.resortData(data.doc,-1);
+            }
+            _.forEach(data.update_task,function (item) {
+                me.refreshEachItme(item.query,item.doc);
+            });
+            _.remove(this.datas,{ID:data.doc.ID});
+            _.remove(gljOprObj.detailData,{ID:data.doc.ID});
             this.refreshSheetData();
         };
         quantity_detail.prototype.refreshSheetData=function () {
@@ -186,9 +192,57 @@ var quantity_detail = {
                     break;
                 }
             }
-
             return deleteable;
         };
+
+        quantity_detail.prototype.moveDown = function (row) {
+            this.swapRow(row);
+        };
+        quantity_detail.prototype.moveUp = function (row) {
+            this.swapRow(row-1);
+        };
+        quantity_detail.prototype.swapRow = function (preRow) {
+            var me = this;
+            var update_task = [];
+            var a_row = gljOprObj.detailData[preRow];//
+            var b_row = gljOprObj.detailData[preRow +1];//
+            var temA = a_row.seq;
+            var temB = b_row.seq;
+            a_row.seq = temB;
+            update_task.push({query:{ID:a_row.ID,projectID:a_row.projectID},doc:{seq:a_row.seq}});
+            b_row.seq = temA;
+            update_task.push({query:{ID:b_row.ID,projectID:b_row.projectID},doc:{seq:b_row.seq}});
+            gljOprObj.detailData.forEach(function (item) {
+                if(_.includes(item.referenceIndexs,temA+1)||_.includes(item.referenceIndexs,temB+1)){
+                    var regex = item.regex;
+                    for (var i=0;i<item.referenceIndexs.length;i++){
+                        if(item.referenceIndexs[i]==temA+1){
+                            regex = me.replaceAll('C'+item.referenceIndexs[i],'B'+(temB+1),regex);
+                            regex = me.replaceAll('c'+item.referenceIndexs[i],'b'+(temB+1),regex);
+                            item.referenceIndexs[i]=temB+1;
+                        }else if(item.referenceIndexs[i]==temB+1){
+                            regex = me.replaceAll('C'+item.referenceIndexs[i],'B'+(temA+1),regex);
+                            regex = me.replaceAll('c'+item.referenceIndexs[i],'b'+(temA+1),regex);
+                            item.referenceIndexs[i]=temA+1;
+                        }
+                    }
+                    regex =  me.replaceAll('B','C',regex);
+                    regex =  me.replaceAll('b','c',regex);
+                    update_task.push({query:{ID:item.ID,projectID:item.projectID},doc:{regex:regex,referenceIndexs:item.referenceIndexs}});
+                }
+            })
+
+            var updateData=[];
+            update_task.forEach(function (task) {
+                updateData.push({'updateType': 'ut_update', 'query': task.query,'doc':task.doc});
+            })
+            project.pushNow('updateQuantityDetail',[this.getSourceType()],[updateData]);
+
+        };
+        quantity_detail.prototype.replaceAll=function(FindText, RepText,str) {
+            let regExp = new RegExp(FindText, "g");
+            return str.replace(regExp, RepText);
+        };
         quantity_detail.prototype.updateQuantityDetail=function (args,dataCode,recode) {
             var doc ={};
             var query={
@@ -364,10 +418,32 @@ var quantity_detail = {
                 var temStr = x_arr.join('*');
                 temp = temp.replace(item, temStr);
             });
-            console.log(temp);
             return temp;
         };
-
+        quantity_detail.prototype.deleteByRation = function(ration){
+            var detail_list = this.datas;
+            var newList =_.filter(detail_list,(d)=>{
+                return d.rationID!=ration.ID;
+            });
+            if(newList!=undefined){
+                this.datas = newList;
+            }
+        };
+        quantity_detail.prototype.deleteByBills=function(deleteData){
+            var detail_list = this.datas;
+            var billIDList = [];
+            for(var i=0;i<deleteData.length;i++){
+                if(deleteData[i].type=='delete'){
+                    billIDList.push(deleteData[i].data.ID);
+                }
+            }
+            var newList =_.filter(detail_list,(d)=>{
+                return !_.includes(billIDList,d.billID);
+            });
+            if(newList!=undefined){
+                this.datas = newList;
+            }
+        };
         return new quantity_detail(project);
     }
 

+ 12 - 7
web/building_saas/main/js/models/ration_glj.js

@@ -200,8 +200,10 @@ var ration_glj = {
         ration_glj.prototype.getDeleteDataByBills=function(datas){
             var updateData = [];
             datas.forEach(function (deleteData) {
-                var billData = deleteData.data;
-                updateData.push({'deleteType':'BILL','updateType': 'ut_delete', 'updateData': {'ID': billData.ID, 'projectID': billData.projectID}});
+                if(deleteData.type=='delete'){
+                    var billData = deleteData.data;
+                    updateData.push({'deleteType':'BILL','updateType': 'ut_delete', 'updateData': {'ID': billData.ID, 'projectID': billData.projectID}});
+                }
             })
             return updateData;
         };
@@ -218,15 +220,18 @@ var ration_glj = {
             var rationList = projectObj.project.Ration.datas;
             var deleteRationList = [];
             for(var i=0;i<deleteData.length;i++){
-                var billID = deleteData[i].data.ID;
-                var raList =_.filter(rationList,(ration)=>{
-                    return ration.billsItemID==billID;
-                });
-                deleteRationList = deleteRationList.concat(raList);
+                if(deleteData[i].type=='delete'){
+                    var billID = deleteData[i].data.ID;
+                    var raList =_.filter(rationList,(ration)=>{
+                        return ration.billsItemID==billID;
+                    });
+                    deleteRationList = deleteRationList.concat(raList);
+                }
             }
             for(var i=0;i<deleteRationList.length;i++){
                 this.deleteByRation(deleteRationList[i]);
                 projectObj.project.ration_coe.deleteByRation(deleteRationList[i]);
+                projectObj.project.quantity_detail.deleteByRation(deleteRationList[i]);
                 projectObj.project.Ration.datas.splice(projectObj.project.Ration.datas.indexOf(deleteRationList[i]), 1);
             }
         }

+ 4 - 3
web/building_saas/main/js/views/glj_view.js

@@ -20,7 +20,7 @@ var gljOprObj = {
             {headerName: "名称", headerWidth: 120, dataCode: "name", dataType: "String"},
             {headerName: "规格型号", headerWidth: 80, dataCode: "specs", dataType: "String", hAlign: "center"},
             {headerName: "单位", headerWidth: 60, dataCode: "unit", dataType: "String", hAlign: "center"},
-            {headerName: "类别", headerWidth: 50, dataCode: "gljDistType", dataType: "String", hAlign: "center"},
+            {headerName: "类别", headerWidth: 50, dataCode: "shortName", dataType: "String", hAlign: "center"},
             {headerName: "定额消耗量", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",formatter:"0.000",tofix:3},    // dataType: "Number", formatter: "0.00"
             {headerName: "自定义消耗量", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right",formatter:"0.000",tofix:3},
             {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right",formatter:"0.000",tofix:3},
@@ -131,7 +131,8 @@ var gljOprObj = {
 
     onClipboardPasted: function(e, info) {
         var me = gljOprObj;
-        if (!me.ration) {return;};
+        console.log('past');
+      //  if (!me.ration) {return;};
         // your code...
     },
 
@@ -239,7 +240,7 @@ var gljOprObj = {
             return;
         }
         if(me.setting.header[args.col].dataCode=='marketPriceAdjust'){//市场单价调整
-            var type = me.sheetData[args.row].gljDistType;
+            var type = me.sheetData[args.row].shortName;
             var index= _.indexOf(me.setting.notEditedType,type);
             if(index!=-1){
                 me.sheet.getCell(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport).locked(true);

+ 28 - 8
web/building_saas/main/js/views/glj_view_contextMenu.js

@@ -4,6 +4,8 @@
 
 var gljContextMenu = {
     selectedRow :null,
+    selectedCol:null,
+    clipboard:null,
     loadGLJSpreadContextMenu: function () {
         $.contextMenu({
             selector: '#subSpread',
@@ -60,40 +62,57 @@ var gljContextMenu = {
                     name: '上移',
                     icon: 'fa-arrow-up',
                     disabled: function () {
-
+                        var sheetData = gljOprObj.detailData;
+                        return gljContextMenu.selectedRow==0||gljContextMenu.selectedRow>sheetData.length-1;
                     },
                     callback: function () {
-
+                        projectObj.project.quantity_detail.moveUp(gljContextMenu.selectedRow);
                     }
                 },
                 "move_down": {
                     name: '下移',
                     icon: 'fa-arrow-down',
                     disabled: function () {
-
+                        var sheetData = gljOprObj.detailData;
+                        return gljContextMenu.selectedRow>sheetData.length-2;
                     },
                     callback: function () {
-
+                        projectObj.project.quantity_detail.moveDown(gljContextMenu.selectedRow);
                     }
                 },
                 "copy": {
                     name: '复制',
                     icon: 'fa-files-o',
                     disabled: function () {
-
+                        var sheet = subSpread.getActiveSheet();
+                        var sheetData = gljOprObj.detailData;
+                        var value = sheet.getCell(gljContextMenu.selectedRow,gljContextMenu.selectedCol).value();
+                        return gljContextMenu.selectedRow>sheetData.length-1||value==null;
                     },
                     callback: function () {
-
+                        gljContextMenu.clipboard={
+                          row:gljContextMenu.selectedRow,
+                          col:gljContextMenu.selectedCol
+                        };
                     }
                 },
                 "paste": {
                     name: '粘贴',
                     icon: 'fa-clipboard',
                     disabled: function () {
-
+                        var sheetData = gljOprObj.detailData;
+                        return gljContextMenu.selectedRow>sheetData.length||gljContextMenu.clipboard==null;
                     },
                     callback: function () {
-
+                        var sheet = subSpread.getActiveSheet();
+                        var c=gljContextMenu.clipboard;
+                        console.log(sheet.getCell(c.row,c.col).value());
+                        var args={
+                            'row':gljContextMenu.selectedRow,
+                            'col':gljContextMenu.selectedCol,
+                            'editingText':sheet.getCell(c.row,c.col).value()
+                        }
+                        gljOprObj.onEditDetailSheet(args);
                     }
                 }
             }
@@ -103,6 +122,7 @@ var gljContextMenu = {
     onbuild:function ($trigger, e) {
         var target = SheetDataHelper.safeRightClickSelection($trigger, e, subSpread);
         gljContextMenu.selectedRow = target.row;
+        gljContextMenu.selectedCol = target.col;
         //controller.setTreeSelected(controller.tree.items[target.row]);
         return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
     }

+ 1 - 0
web/building_saas/main/js/views/project_view.js

@@ -215,6 +215,7 @@ $('#delete').click(function () {
             project.Ration.delete(selected.source);
             project.ration_glj.deleteByRation(selected.source);
             project.ration_coe.deleteByRation(selected.source);
+            project.quantity_detail.deleteByRation(selected.source);
             controller.delete();
         } else if (selected.sourceType === project.VolumePrice.getSourceType()) {
             project.VolumePrice.delete(selected.source);