470 lines
22 KiB
JavaScript
470 lines
22 KiB
JavaScript
angular.module('CarbonFootprint')
|
|
.controller('LCAMaterialTransportCtrl', ['$scope', '$http', '$routeParams', 'ParameterCacheService', 'JoinSurveyItemAndParameter', '$q', 'MultiLanguageService', 'ExportCsvService',
|
|
function ($scope, $http, $routeParams, ParameterService, JoinService, $q, MultiLanguageService, ExportCsvService) {
|
|
// Multi-language resource object
|
|
var resource;
|
|
$scope.modalFormOption = {};
|
|
$scope.model = [];
|
|
$scope.exlNms = [];
|
|
$scope.commOptions = [];
|
|
$scope.quoteLCAID = 0;
|
|
|
|
// set $scope.baseUrl
|
|
var baseUrl = $scope.baseUrl;
|
|
if (typeof (baseUrl) === 'undefined' || baseUrl == null) {
|
|
var arr = window.location.href.split("/");
|
|
if (arr[3].indexOf('app') == 0)
|
|
baseUrl = '';
|
|
else
|
|
baseUrl = '/' + arr[3];
|
|
$scope.baseUrl = baseUrl;
|
|
}
|
|
|
|
$scope.selectRowTransport = {
|
|
selectedRow: null,
|
|
toBeEdit: null,
|
|
select: function (row) {
|
|
selectedRow = row;
|
|
},
|
|
getSelected: function () {
|
|
return selectedRow;
|
|
}
|
|
};
|
|
$scope.modalFormTransportOption = {};
|
|
$scope.modelTransport = [];
|
|
|
|
$scope.preAlertTime = new Date();
|
|
$scope.checkUnit = function (selectRow) {
|
|
//console.log('checkUnit', selectRow);
|
|
if (typeof (selectRow.AnnualPurchaseAmountUnit) === 'undefined' || typeof (selectRow.Unit) === 'undefined')
|
|
return;
|
|
selectRow.AnnualPurchaseAmountUnit = selectRow.AnnualPurchaseAmountUnit.trim();
|
|
selectRow.Unit = selectRow.Unit.trim();
|
|
if (selectRow.AnnualPurchaseAmountUnit.length <= 0
|
|
|| selectRow.Unit.length <= 0
|
|
|| selectRow.AnnualPurchaseAmountUnit === selectRow.Unit)
|
|
return;
|
|
var timeDiff = new Date() - $scope.preAlertTime;
|
|
//var msg = selectRow.AnnualPurchaseAmountUnit + '!=' + selectRow.Unit;
|
|
if (timeDiff > 99)
|
|
alert(resource['ActivityStrengthUnitCheck'] + '');
|
|
$scope.preAlertTime = new Date();
|
|
}
|
|
$scope.createProcess = function () {
|
|
var toBeCreated = {};
|
|
toBeCreated.ID = 0;
|
|
toBeCreated.LCAID = $routeParams.LCAID;
|
|
toBeCreated.AnnualPurchaseAmountUnit = 'PCS';
|
|
$scope.selectRow.toBeEdit = toBeCreated;
|
|
$scope.modalFormOption.show = true;
|
|
$scope.save = function () {
|
|
JoinService.joinAsync([toBeCreated]).then(function () {
|
|
updateKgCO2e(toBeCreated);
|
|
$http.post($scope.baseUrl+'/api/MaterialTransport/Save/' + $routeParams.LCAID + "/" + toBeCreated.ID, toBeCreated)
|
|
.success(function (data) {
|
|
//console.log('create save',data);
|
|
if (data.Success == false)
|
|
alert(data.Msg);
|
|
else {
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentPage = 1;
|
|
$scope.model = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
$scope.modalFormOption.show = false;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
$scope.selectProcess = function (row) {
|
|
$scope.selectRowTransport.selectedRow = null;
|
|
$scope.selectRow.select(row);
|
|
getAllTransportDataAsync(row.ID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentTransportPage = 1;
|
|
$scope.modelTransport = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
}
|
|
|
|
$scope.editProcess = function (selected) {
|
|
var toBeEdit = $scope.selectRow.toBeEdit = angular.copy(selected);
|
|
$scope.modalFormOption.show = true;
|
|
$scope.save = function () {
|
|
JoinService.joinAsync([toBeEdit]).then(function () {
|
|
updateKgCO2e(toBeEdit);
|
|
$http.post($scope.baseUrl+'/api/MaterialTransport/Save/' + toBeEdit.LCAID + "/" + toBeEdit.ID, toBeEdit)
|
|
.success(function (data) {
|
|
if (data.Success == false)
|
|
alert(data.Msg);
|
|
else {
|
|
angular.copy(data, selected);
|
|
$scope.modalFormOption.show = false;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
$scope.deleteProcess = function (selected) {
|
|
var isConfirm = confirm(resource.DeleteItemMsg);
|
|
if (isConfirm) {
|
|
$http.delete($scope.baseUrl+"/api/MaterialTransport/Delete/" + selected.ID)
|
|
.success(function () {
|
|
var index = $scope.model.indexOf(selected);
|
|
$scope.model.splice(index, 1);
|
|
// This operate is base on selectRow directive in TableEdit.js file
|
|
$scope.selectRow.unSelect();
|
|
$scope.modelTransport = [];
|
|
});
|
|
}
|
|
};
|
|
|
|
$scope.createProcessTransport = function () {
|
|
var toBeCreated = {};
|
|
toBeCreated.ID = 0;
|
|
toBeCreated.LCAID = $routeParams.LCAID;
|
|
toBeCreated.RiskAssmtMaterialID = $scope.selectRow.getSelected().ID;
|
|
$scope.selectRowTransport.toBeEdit = toBeCreated;
|
|
$scope.modalFormTransportOption.show = true;
|
|
$scope.saveTransport = function () {
|
|
JoinService.joinAsync([toBeCreated]).then(function () {
|
|
updateTransportKgCO2e(toBeCreated);
|
|
$http.post($scope.baseUrl+'/api/MaterialTransport/SaveTransport/'
|
|
+ $scope.selectRow.getSelected().ID + "/" + toBeCreated.ID, toBeCreated)
|
|
.success(function (data) {
|
|
if (data.Success == false)
|
|
alert(data.Msg);
|
|
else {
|
|
getAllTransportDataAsync($scope.selectRow.getSelected().ID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentTransportPage = 1;
|
|
$scope.modelTransport = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.model = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
$scope.modalFormTransportOption.show = false;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
$scope.editProcessTransport = function (selected) {
|
|
var toBeEdit = $scope.selectRowTransport.toBeEdit = angular.copy(selected);
|
|
$scope.modalFormTransportOption.show = true;
|
|
$scope.saveTransport = function () {
|
|
JoinService.joinAsync([toBeEdit]).then(function () {
|
|
updateTransportKgCO2e(toBeEdit);
|
|
$http.post($scope.baseUrl+'/api/MaterialTransport/SaveTransport/'
|
|
+ $scope.selectRow.getSelected().ID
|
|
+ "/" + toBeEdit.ID, toBeEdit)
|
|
.success(function (data) {
|
|
if (data.Success == false)
|
|
alert(data.Msg);
|
|
else {
|
|
angular.copy(data, selected);
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.model = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
$scope.modalFormTransportOption.show = false;
|
|
}
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
$scope.deleteProcessTransport = function (selected) {
|
|
var isConfirm = confirm(resource.DeleteItemMsg);
|
|
if (isConfirm) {
|
|
$http.delete($scope.baseUrl+"/api/MaterialTransport/DeleteTransport/" + selected.ID)
|
|
.success(function () {
|
|
var index = $scope.modelTransport.indexOf(selected);
|
|
$scope.modelTransport.splice(index, 1);
|
|
// This operate is base on selectRow directive in TableEdit.js file
|
|
$scope.selectRowTransport.unSelect();
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.model = response.tblist;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
});
|
|
}
|
|
};
|
|
/* modelBuilder for create & export */
|
|
/** Caution!: The 'ParameterID' property depends on 'options'.
|
|
This modelBuilder is binded with this controller.
|
|
Refactoring modelBuilder.create() with more arugments will be better **/
|
|
$scope.modelBuilder = {
|
|
create: function (data, LCAID) {
|
|
try {
|
|
var model = {
|
|
StrCommuting: data[0],
|
|
StrTotalEmployees: data[1],
|
|
StrWorkingDays: data[2],
|
|
StrAverageMovingDistance: data[3],
|
|
StrCoefficient: data[4],
|
|
StrPersonDayKm: data[5],
|
|
StrKgCO2e: data[6]
|
|
};
|
|
|
|
// check imported data length and model length
|
|
if (data.length !== getObjectSize(model)) {
|
|
throw resource['EXCELFileFormatWrong'];
|
|
}
|
|
|
|
return model;
|
|
} catch (err) {
|
|
return { error: err };
|
|
}
|
|
},
|
|
export: function (list) {
|
|
var data = [];
|
|
|
|
// header
|
|
data.push([
|
|
$scope.exlNms[0],
|
|
$scope.exlNms[1],
|
|
$scope.exlNms[2],
|
|
$scope.exlNms[3],
|
|
$scope.exlNms[4],
|
|
$scope.exlNms[5],
|
|
$scope.exlNms[6],
|
|
]);
|
|
|
|
// body
|
|
angular.forEach(list, function (entry) {
|
|
var csv = [];
|
|
//column 1
|
|
csv.push(entry.StrCommuting);
|
|
//column 2
|
|
csv.push(entry.TotalEmployees);
|
|
//column 3
|
|
csv.push(entry.WorkingDays);
|
|
//column 4
|
|
csv.push(entry.AverageMovingDistance);
|
|
//column 5
|
|
csv.push(entry.Coefficient);
|
|
//column 6
|
|
csv.push(entry.PersonDayKm);
|
|
//column 7
|
|
csv.push(entry.KgCO2e);
|
|
data.push(csv);
|
|
});
|
|
ExportCsvService.startExport(data, "Export_EmployeeCommuting.csv");
|
|
}
|
|
};
|
|
|
|
$scope.fileImportOptions = {
|
|
modelBuilder: $scope.modelBuilder,
|
|
saveAsync: batchCreateAndUpdateCache
|
|
};
|
|
|
|
$scope.fileImportModal = {
|
|
show: false
|
|
};
|
|
|
|
/* quote options & modal control */
|
|
$scope.quoteOptions = {
|
|
queryDataAsyncFn: function (LCAID) {
|
|
var deferred = $q.defer();
|
|
$scope.quoteLCAID = LCAID;
|
|
getAllDataAsync(LCAID).then(function (data) {
|
|
deferred.resolve(data.tblist);
|
|
})
|
|
return deferred.promise;
|
|
},
|
|
saveAsyncFn: quoteSave
|
|
};
|
|
|
|
$scope.quoteModal = {
|
|
show: false
|
|
};
|
|
|
|
// Get data and prepare $scope.model
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentPage = 1;
|
|
$scope.model = response.tblist;
|
|
$scope.exlNms = response.exlNms;
|
|
$scope.commOptions = response.commOptions;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
// Get multilanguage resource
|
|
MultiLanguageService.getResourceAsync()
|
|
.then(function (response) {
|
|
resource = response;
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
/**
|
|
* Private function: save all async
|
|
* @param {[Array]} : array of parsed objects
|
|
* @return {[promise]}
|
|
*/
|
|
function batchCreateAndUpdateCache(parsedList) {
|
|
var deferred = $q.defer();
|
|
JoinService.joinAsync(parsedList)
|
|
.then(function () {
|
|
$http.post($scope.baseUrl+'/api/MaterialTransport/SaveAll/' + $routeParams.LCAID, parsedList)
|
|
.success(function (data) {
|
|
if (data.ErrMsg !== '') {
|
|
alert(data.ErrMsg);
|
|
}
|
|
else {
|
|
// close modals
|
|
$scope.fileImportModal.show = false;
|
|
$scope.quoteModal.show = false;
|
|
deferred.resolve(data);
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentPage = 1;
|
|
$scope.model = response.tblist;
|
|
$scope.exlNms = response.exlNms;
|
|
$scope.commOptions = response.commOptions;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
}
|
|
})
|
|
.error(function (e) {
|
|
console.log(e.Message);
|
|
alert(e.ExceptionMessage);
|
|
});
|
|
});
|
|
return deferred.promise;
|
|
}
|
|
|
|
function quoteSave(parseList) {
|
|
var deferred = $q.defer();
|
|
$http.post($scope.baseUrl + '/api/MaterialTransport/QuoteSaveAll/' + $routeParams.LCAID + '/' + $scope.quoteLCAID)
|
|
.success(function (data) {
|
|
deferred.resolve(data);
|
|
if (data.ErrMsg !== '') {
|
|
alert(data.ErrMsg);
|
|
}
|
|
else {
|
|
$scope.quoteModal.show = false;
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
if (response.tblist) {
|
|
$scope.currentPage = 1;
|
|
$scope.model = response.tblist;
|
|
$scope.exlNms = response.exlNms;
|
|
$scope.commOptions = response.commOptions;
|
|
}
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
}
|
|
})
|
|
.error(function (e) {
|
|
deferred.resolve(null);
|
|
console.log(e.Message);
|
|
alert(e.ExceptionMessage);
|
|
});
|
|
return deferred.promise;
|
|
}
|
|
|
|
/* Private function: get all list data from server */
|
|
function getAllDataAsync(LCAID) {
|
|
var deferred = $q.defer();
|
|
$http.get($scope.baseUrl+'/api/MaterialTransport/GetByLcaID/' + LCAID)
|
|
.success(function (data) {
|
|
deferred.resolve(data);
|
|
})
|
|
.error(function () {
|
|
deferred.resolve(null);
|
|
})
|
|
return deferred.promise;
|
|
}
|
|
|
|
function getAllTransportDataAsync(C3EmissionID) {
|
|
var deferred = $q.defer();
|
|
$http.get($scope.baseUrl+'/api/MaterialTransport/GetByC3EmissionId/' + C3EmissionID)
|
|
.success(function (data) {
|
|
deferred.resolve(data);
|
|
})
|
|
.error(function () {
|
|
deferred.resolve(null);
|
|
})
|
|
return deferred.promise;
|
|
}
|
|
|
|
function updateKgCO2e(toBeEdit) {
|
|
//console.log(toBeEdit);
|
|
toBeEdit.ActivityIntensity = toBeEdit.MaterialSpec * toBeEdit.AnnualPurchaseAmount;
|
|
toBeEdit.KgCO2e = toBeEdit.ActivityIntensity * toBeEdit.ParameterValue;
|
|
//console.log('updateKgCO2e', toBeEdit.KgCO2e, toBeEdit.ActivityIntensity, toBeEdit.ParameterValue);
|
|
}
|
|
function updateTransportKgCO2e(toBeEdit) {
|
|
//console.log('updateTransportKgCO2e', toBeEdit);
|
|
toBeEdit.Scalar = toBeEdit.TransportWeight * toBeEdit.TransportDistance / 1000;
|
|
toBeEdit.KgCO2e = toBeEdit.Scalar * toBeEdit.ParameterValue;
|
|
//console.log('updateTransportKgCO2e', toBeEdit);
|
|
}
|
|
|
|
$scope.selectSimaproProcess = function (selectedMaterial) {
|
|
$scope.simaproOption = {};
|
|
$scope.simaproOption.show = true;
|
|
$scope.simaproOption.filter = 37; // SimaproOption.Material 原料
|
|
$scope.simaproOption.onOk = function (selectedParameter) {
|
|
//selectedMaterial.KgCO2e = selectedParameter.Value;//?有問題
|
|
selectedMaterial.ParameterValue = selectedParameter.Value
|
|
selectedMaterial.ParameterDescription =
|
|
selectedParameter.DisplayNameTW + ': ' + selectedParameter.Remark;
|
|
selectedMaterial.Unit = selectedParameter.Unit;
|
|
$scope.checkUnit(selectedMaterial);
|
|
//selectedMaterial.Comment = selectedParameter.DisplayName + " " + selectedParameter.Remark;
|
|
}
|
|
};
|
|
|
|
$scope.selectSimaproProcessTransport = function (selectedMaterial) {
|
|
$scope.simaproOption = {};
|
|
$scope.simaproOption.show = true;
|
|
$scope.simaproOption.filter = 13; // SimaproOption.GoodsTransportation 運輸
|
|
$scope.simaproOption.onOk = function (selectedParameter) {
|
|
//selectedMaterial.Scalar = selectedParameter.Value;//?有問題
|
|
selectedMaterial.ParameterValue = selectedParameter.Value;
|
|
selectedMaterial.ScalarComment = selectedParameter.DisplayName
|
|
+ " " + selectedParameter.Remark;
|
|
selectedMaterial.ScalarUnit = selectedParameter.Unit;
|
|
}
|
|
};
|
|
|
|
}]);
|