/*
** Views/Partial/LCA/OtherCompound.cshtml is using this controller
*/
angular.module('CarbonFootprint')
.controller('LCAOtherCompoundCtrl', ['$scope', '$http', '$routeParams', 'ParameterCacheService', 'JoinSurveyItemAndParameter', '$q', 'MultiLanguageService', 'ExportCsvService',
function ($scope, $http, $routeParams, ParameterCacheService, JoinService, $q, MultiLanguageService, ExportCsvService) {
// Multi-language resource object
var resource;
// This property controlls modal form , will be passed to table-edit-modal directive
$scope.modalFormOption = {};
$scope.summary = [];
$scope.sumKgCO2e = 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.createProcess = function () {
// Create an object & select it
var toBeCreated = {};
var formData = new FormData;
var hasFile = false;
var fileIndex = -1;
toBeCreated.ID = 0;
toBeCreated.LCAID = $routeParams.LCAID;
toBeCreated.activityDataType = 0;
toBeCreated.emitParaType = 0;
// For modal form
$scope.selectRow.toBeEdit = toBeCreated;
$scope.selectFile = function (file) {
fileIndex = fileIndex + 1;
formData.append('of' + "_lca" + $routeParams.LCAID + "_" + fileIndex, file);
hasFile = true;
};
$scope.modalFormOption.show = true;
$scope.dataQualityOption = {};
$scope.dataQualityOption.data = {};
$scope.isEdit = false;
$scope.save = function () {
// Calculate KgCO2e
JoinService.joinAsync([toBeCreated]).then(function () {
// Update KgCO2e property
setKgCO2e([toBeCreated]);
$http.post($scope.baseUrl+'/api/Upload', formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(function (urlList) {
if (hasFile)
toBeCreated.ReferenceFileUrl = $scope.baseUrl +urlList[fileIndex];
$http.post($scope.baseUrl+'/api/OtherCompound/Save/' + $routeParams.LCAID + '/' + toBeCreated.ID, toBeCreated)
.success(function (data) {
$scope.model.unshift(data);
calcTotalKgCO2e();
$scope.modalFormOption.show = false;
});
});
});
};
};
$scope.editProcess = function (selected) {
var toBeEdit = $scope.selectRow.toBeEdit = angular.copy(selected);
var formData = new FormData();
var hasFile = false;
var fileIndex = -1;
toBeEdit.Source = selected.ARnGWPid;//.ParameterID;
$scope.selectFile = function (file) {
fileIndex = fileIndex + 1;
formData.append('of' + "_lca" + $routeParams.LCAID + "_" + fileIndex, file);
hasFile = true;
};
$scope.modalFormOption.show = true;
$scope.dataQualityOption = {};
$scope.dataQualityOption.data = {};
$scope.isEdit = true;
$('#activityDataType').val(selected.activityDataType);
$('#emitParaType').val(selected.emitParaType);
//console.log($scope.selectRow.toBeEdit);
$scope.save = function () {
// Calculate KgCO2e
JoinService.joinAsync([toBeEdit]).then(function () {
// Update KgCO2e property
setKgCO2e([toBeEdit]);
$http.post($scope.baseUrl+'/api/Upload', formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(function (urlList) {
if (hasFile)
toBeEdit.ReferenceFileUrl = $scope.baseUrl +urlList[fileIndex];
$http.post($scope.baseUrl+'/api/OtherCompound/Save/' + $routeParams.LCAID + '/' + toBeEdit.ID, toBeEdit)
.success(function (data) {
angular.copy(data, selected);
calcTotalKgCO2e();
$scope.modalFormOption.show = false;
})
.error(function (data, status) {
console.log(status);
});
});
});
};
};
$scope.dataQualityShow = function (selected) {
$http.get($scope.baseUrl+'/api/DataQualityLevel/GetByTableId/ProductLCAFabSurveyForm_OtherCompounds/' + selected.ID
).success(function (data) {
angular.copy(data, $scope.dataQualityOption.data);
$scope.dataQualityOption.data.Name = selected.Name;
$scope.dataQualityOption.data.LCAID = selected.LCAID;
//todo !!... load pre saved data
//$scope.dataQualityOption.Fi = 0.0123;//test only;
//todo !!... 還需要總碳排量才能算出 碳排量佔比
$scope.dataQualityOption.showSaveBtn = $scope.lcaDetail.Status == 1;
$scope.dataQualityOption.show = true;
}).error(function (data, status) {
alert(data.ExceptionMessage);
});
};
$scope.deleteProcess = function (selected) {
var isConfirm = confirm(resource.DeleteItemMsg);
if (isConfirm) {
$http.delete($scope.baseUrl+'/api/OtherCompound/Delete/' + selected.ID+'/'+ $routeParams.LCAID)//CFT-50
.success(function () {
var index = $scope.model.indexOf(selected);
$scope.model.splice(index, 1);
calcTotalKgCO2e();
// This operate is base on selectRow directive in TableEdit.js file
$scope.selectRow.unSelect();
});
}
};
/* modelBuilder for create & export */
/** Caution!: The 'ParameterID' property depends on '$scope.sources'.
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 = {
ProcessName: data[0],
ResponsibleUnit: data[1],
Name: data[2],
ingredientName: data[3],
warmGasType: getWarmGasTypeKey(data[4]),
activityDataType: getKeyByValue(data[5], $scope.activityOptions),
emitParaType: getKeyByValue(data[6], $scope.emitParaOptions),
CO2Factor: data[7],
CO2Value: data[8],
CH4Value: data[9],
N2OValue: data[10],
HFCsValue: data[11],
PFCsValue: data[12],
SF6Value: data[13],
NF3Value: data[14],
paraSource: data[15],
Scalar: data[16],
Description: data[17],
LCAID: LCAID
};
// check imported data length and model length (-1 for LCAID)
if (data.length !== getObjectSize(model) - 1) {
throw resource['EXCELFileFormatWrong'];
}
return model;
} catch (err) {
return { error: err };
}
},
export: function (list) {
var data = [];
// header
data.push([resource['FactoryAndProcessItems'],
resource['ResponsibleUnit'],
resource['DeviceName'],
resource['IngredientName'],
resource['WarmGasType'],
resource['ActivityDataType'],
resource['EmitParaType'],
resource['CO2Factor'],
resource['CO2Value'],
resource['CH4Value'],
resource['N2OValue'],
resource['HFCsValue'],
resource['PFCsValue'],
resource['SF6Value'],
resource['NF3Value'],
resource['ParameterSource'],
resource['UsageAmount'],
resource['StaticLabelGlobal_Remark']]);
// body
angular.forEach(list, function (entry) {
var csv = [];
//column 1
csv.push(entry.ProcessName);
//column 2
csv.push(entry.ResponsibleUnit);
//column 3
csv.push(entry.Name);
//column 4
csv.push(entry.ingredientName);
//column 5
csv.push(getWarmGasType(entry.warmGasType));
//column 6
csv.push($scope.activityOptions[entry.activityDataType]);
//column 7
csv.push($scope.emitParaOptions[entry.emitParaType]);
//column 8
csv.push(entry.CO2Factor);
//column 9
csv.push(entry.CO2Value);
//column 10
csv.push(entry.CH4Value);
//column 11
csv.push(entry.N2OValue);
//column 12
csv.push(entry.HFCsValue);
//column 13
csv.push(entry.PFCsValue);
//column 14
csv.push(entry.SF6Value);
//column 15
csv.push(entry.NF3Value);
//column 16
csv.push(entry.paraSource);
//column 17
csv.push(entry.Scalar);
//column 18
csv.push(entry.Description);
data.push(csv);
});
//console.log('export', $scope.sources, list);
ExportCsvService.startExport(data, "Export_OtherCompound.csv");
}
}
/* file import options & modal control */
$scope.fileImportOptions = {
modelBuilder: $scope.modelBuilder,
saveAsync: batchCreateAndUpdateCache
};
$scope.fileImportModal = {
show: false
};
/* quote options & modal control */
$scope.quoteOptions = {
queryDataAsyncFn: function (LCAID) {
var deferred = $q.defer();
getAllDataAsync(LCAID).then(function (data) {
deferred.resolve(data.OtherCompounds);
})
return deferred.promise;
},
saveAsyncFn: batchCreateAndUpdateCache
};
$scope.quoteModal = {
show: false
};
$scope.onSourceChange = function (newValue) {
//console.log('onSourceChange', newValue, $scope.selectRow.toBeEdit.Source,'>'+ $("#emissionSource option:selected").text().trim()+'<' );
$scope.selectRow.toBeEdit.ParameterID = newValue;
var toBeEdit = $scope.selectRow.toBeEdit;
getParameterValue(toBeEdit.LCAID, toBeEdit.ParameterID).then(function (data) {
//console.log('getParameterValue', data);
var GWPFactor = Number(data.ARnGWP);// Number(data[toBeEdit.ParameterID]);
//if (GWPFactor == 0) {
// $scope.selectRow.toBeEdit.GWPFactor = 1;
//}
//else {
//$scope.selectRow.toBeEdit.GWPFactor = GWPFactor;
$scope.selectRow.toBeEdit.CO2Factor = GWPFactor;// 1;
$scope.selectRow.toBeEdit.paraSource = $scope.ParameterSource;
$scope.selectRow.toBeEdit.ingredientName = $("#emissionSource option:selected").text().trim();
var hasValue = false;
if (data.GHGType == 'CH4') {
$scope.selectRow.toBeEdit.CH4Value = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.CH4Value = 0;
if (data.GHGType == 'N2O') {
$scope.selectRow.toBeEdit.N2OValue = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.N2OValue = 0;
if (data.GHGType == 'HFCs') {
$scope.selectRow.toBeEdit.HFCsValue = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.HFCsValue = 0;
if (data.GHGType == 'PFCs') {
$scope.selectRow.toBeEdit.PFCsValue = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.PFCsValue = 0;
if (data.GHGType == 'SF6') {
$scope.selectRow.toBeEdit.SF6Value = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.SF6Value = 0;
if (data.GHGType == 'NF3') {
$scope.selectRow.toBeEdit.NF3Value = GWPFactor;
hasValue = true;
} else
$scope.selectRow.toBeEdit.NF3Value = 0;
if (!hasValue)
$scope.selectRow.toBeEdit.CO2Value = GWPFactor;
else
$scope.selectRow.toBeEdit.CO2Value = 0;
//}
});
};
// Sync 'ParameterID' based on 'Source', because ngModel of