/* ** 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