app.controller('DirectDebitCtrl', function($scope, Upload, $http, $location) { $scope.view = 1; /* DDS */ $scope.ddsSave = function(){ if($scope.dds && $scope.assignedColumns){ //add columns $scope.dds.column_matches = angular.copy($scope.assignedColumns); //get available fields var req = { method: 'POST', url: '/direct_debit_supplier/insert/', data: $scope.dds, } //set req url if($scope.ddsSupplier !== false){ req.url = '/direct_debit_supplier/update/' + $scope.ddsSupplier; } //response $http(req).then(function (response){ if(response.data.status){ swal('Saved', 'Supplier Saved', 'success'); } }); } } $scope.ddsSuppliers = []; $scope.getAllDDS = function(){ //get available fields var req = { method: 'GET', url: '/direct_debit_supplier/getAll/', } //response $http(req).then(function (response){ $scope.ddsSuppliers = response.data.data; }); } if ($scope.user.role.id && $scope.user.role.id > 4) { $scope.getAllDDS(); } $scope.ddsSupplier = 0; $scope.dds = { 'name': 'New Supplier', 'preg_match': '//', 'row': 0, 'column': 0, }; $scope.loadSupplier = function(){ if($scope.ddsSupplier){ //loop ddsSuppliers angular.forEach($scope.ddsSuppliers, function(supplier){ if(supplier.id == $scope.ddsSupplier){ $scope.dds.name = supplier.name; $scope.dds.preg_match = supplier.preg_match; $scope.dds.row = parseInt(supplier.row); $scope.dds.column = parseInt(supplier.column); $scope.assignedColumns = JSON.parse(supplier.column_matches); } }); }else{ $scope.ddsSupplier = false; } } /* Upload */ //upload function $scope.uploadFiles = function(file) { $scope.fileInfo = { file: file } if ($scope.fileInfo.file) { $scope.fileInfo.loading = true; var fileName = $scope.file.name; Upload.upload({ url: '/direct_debit/upload', data: { 'file': $scope.fileInfo.file, 'name': fileName, }, }).then(function (response) { if (response.status && response.data.status) { $scope.directdebittable.call('initiate'); } else { switch(response.data.message){ case 'file.duplicate': swal('Error', 'File already in the system', 'error'); break; case 'file.notfound': swal('Error', 'File not found', 'error'); break; case 'file.upload': swal('Error', 'File upload failed', 'error'); break; case 'file.name': swal('Error', 'Filename missing', 'error'); break; default: $scope.directdebittable.call('initiate'); } } }, function (response) { if (response.status > 0) $scope.errorMsg = response.status + ': ' + response.data; }, function (evt) { $scope.fileInfo.file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); }); } } $scope.getDDfields = function(){ //get available fields var req = { method: 'GET', url: '/direct_debit_field/getAll/', } //response $http(req).then(function (response){ if(response.data.status){ $scope.ddFields = response.data.data; angular.forEach($scope.ddFields, function(ddField){ ddField.disabled = parseInt(ddField.disabled); }); }else{ swal('Could not load fields', '', 'error'); } }); } //load fields $scope.ddFields = []; $scope.assignedColumns = {}; $scope.getDDfields(); //watch selection $scope.$watch('assignedColumns', function(newValue, oldValue) { var items = []; angular.forEach(newValue, function(item, key){ if(item && item.name){ if(items.indexOf(item.name) !== -1){ $scope.assignedColumns[key] = null; swal('Field already selected', '', 'error'); }else{ items.push(item.name); } } }); }, true); $scope.downloadFiles = function(btn, row, blnSubmit) { if (row.failed_rows != '') { swal({ title: "Are you sure?", text: "There are still rows that have not been processed!", icon: "warning", buttons: true, dangerMode: true, }).then((willDownload) => { if (willDownload) { if (row.xml_files) { xmlFiles = JSON.parse(row.xml_files); angular.forEach(xmlFiles, function(xmlFile){ xmlFile = xmlFile.replace(/ /g,"_"); window.open('direct_debit/downloadXml/' + xmlFile); }); } } }); } else { if (row.xml_files) { xmlFiles = JSON.parse(row.xml_files); angular.forEach(xmlFiles, function(xmlFile){ xmlFile = xmlFile.replace(/ /g,"_"); window.open('direct_debit/downloadXml/' + xmlFile); }); } } } $scope.viewResult = function(btn, row, blnSubmit) { $scope.view = 3; $scope.selectedRow = row; } $scope.viewErros = function(btn, row, blnSubmit) { $scope.view = 4; $scope.selectedRow = row; } $scope.gotoFile = function(btn, row, blnSubmit) { //backend recheck $scope.selectedRow = row; if(row['id']){ var req = { method: 'GET', url: '/direct_debit/getWithData/' + row['id'], } //response $http(req).then(function (response){ if(response.data.status){ if(response.data.data[0]){ dataRow = response.data.data[0]; //switch view table $scope.csvData = dataRow.data; //set supplier if (dataRow.supplier && dataRow.supplier.id) { $scope.ddsSupplier = dataRow.supplier.id; $scope.loadSupplier(); //set name if (dataRow.supplier.name) { $scope.sender_id = dataRow.supplier.name; } } //ng-repeat for rows $scope.csvRows = []; var i = 0; angular.forEach(dataRow.data, function(row){ $scope.csvRows.push(i); i = i+1; }); $scope.view = 2; }else{ swal('Could not load datarow', '', 'error'); } }else{ swal('Could not load data', '', 'error'); } }); } } $scope.process = function(){ var postData = {}; if($scope.assignedColumns){ postData.matchColumn = $scope.assignedColumns; } if($scope.regex){ postData.regex = $scope.regex; } if($scope.csvData){ postData.csv = $scope.csvData; } if($scope.selectedRow.id){ postData.direct_debit_id = $scope.selectedRow.id; } if($scope.sender_id){ postData.sender_id = $scope.sender_id; } var req = { method: 'POST', url: '/direct_debit/process/', data: postData, } //response $http(req).then(function (response){ if(response.data.status){ swal('Success', 'File processed, zip ready', 'success'); $scope.gotoTable(); } else { swal('Error', response.data.message, 'error'); } }); } $scope.gotoTable = function(){ $scope.view = 1; $scope.selectedRow = null; $scope.csvData = []; $scope.csvRows = []; $scope.directdebittable.call('initiate'); } $scope.saveFailedRow = function (failedRow) { if (failedRow && $scope.selectedRow) { var req = { method: 'POST', url: '/direct_debit/saveFailedRow/', data: {'id': $scope.selectedRow.id, 'failed_row': failedRow}, } //response $http(req).then(function (response){ if(response.data.status){ swal('Success', 'Failed row saved, go to manual and process this file again', 'success'); $scope.selectedRow.failed_rows = response.data.data.failed_rows; } else { swal('Error', response.data.message, 'error'); } }); } } $scope.addRowTolistFailedRows = function (row) { //add row to listFailedRows if ($scope.listFailedRows == undefined || !Array.isArray($scope.listFailedRows)) { $scope.listFailedRows = new Array(); } //search for row in list var foundRow = $scope.listFailedRows.find(function (failedRow) { return failedRow == row; }); //check if row don't exists if (!foundRow) { $scope.listFailedRows.push(row); } } $scope.saveAllFailedRows = function () { if ($scope.listFailedRows && $scope.selectedRow) { var req = { method: 'POST', url: '/direct_debit/saveMultipleFailedRows/', data: {'id': $scope.selectedRow.id, 'failed_rows': $scope.listFailedRows}, } //response $http(req).then(function (response){ if(response.data.status){ swal('Success', 'Failed rows saved, go to manual and process this file again', 'success'); $scope.selectedRow.failed_rows = response.data.data.failed_rows; } else { swal('Error', response.data.message, 'error'); } }); } } /* Table of directdebit */ $scope.directdebitofficestable = { 'name': 'Connect Office via CustomerNr', 'controller': 'direct_debit_office', 'tableFold': true, //Panel class panelClass: 'panel-dro', 'fieldDetails': { 'office_id': { 'label': 'Office', 'changeTo': ['office.id', ' - ', 'office.anvrcode', ' - ', 'office.name', ' (', 'office.place', ')'], }, 'direct_debit_supplier_id': { 'label': 'Supplier', }, 'customer_nr': { 'label': 'Supplier CustomerNr', }, 'customer_address': { 'hideEdit': true, }, 'organization_id': { 'hideList': true, 'hideEdit': true, }, 'customer_zipcode': { 'hideEdit': true, }, 'customer_place': { 'hideEdit': true, }, 'id': { 'hideEdit': true, }, }, 'pageLimit': 50, 'autoChangeTo': ['direct_debit_supplier_id', 'office_id', ] }; /* Table of directdebit */ $scope.directdebittable = { 'name': 'Direct Debits (files)', 'controller': 'direct_debit', 'getCSV': true, 'pageLimit': 50, //Panel class panelClass: 'panel-dro', 'fields': [ 'id', 'file_name', 'supplier_id', 'processed', 'last_error', 'updated_at', ], //pair the organizations table subQueries: { 'supplier': { 'lfield': 'supplier_id', 'ffield': 'id', 'controller': 'direct_debit_supplier', }, }, fieldDetails: { 'supplier_id': { 'label': 'Supplier', 'changeTo': ['supplier.offical_name'], }, }, buttons: { 'gotoFile': { 'id': 'gotoFile', 'name': 'gotoFile', 'label': 'manual', 'confirmName': 'gotoFile', 'confirmClass': 'info', 'inline': true, 'header': false, 'icon': 'fa-arrow-right', 'action': 'gotoFile', 'parentScope': true, 'whereField': 'processed', 'where': { '==': '0', }, }, 'viewResult': { 'id': 'viewResult', 'name': 'viewResult', 'label': 'results', 'confirmName': 'viewResult', 'confirmClass': 'info', 'inline': true, 'header': false, 'icon': 'fa-table', 'action': 'viewResult', 'parentScope': true, 'whereField': 'processed', 'where': { '==': '1', }, }, 'viewErrors': { 'id': 'viewErros', 'name': 'viewErros', 'label': 'Failed rows', 'confirmName': 'viewErros', 'confirmClass': 'info', 'inline': true, 'header': false, 'icon': 'fa-table', 'action': 'viewErros', 'parentScope': true, 'whereField': 'failed_rows', 'where': { '!=': '', }, }, 'downloadFiles': { 'id': 'downloadFiles', 'name': 'downloadFiles', 'label': 'download files', 'confirmName': 'gotoFile', 'confirmClass': 'info', 'inline': true, 'header': false, 'icon': 'fa-arrow-down', 'action': 'downloadFiles', 'parentScope': true, 'whereField': 'processed', 'where': { '==': '1', }, }, 'A': { 'id': 'A', 'name': 'Show all files', 'confirmName': 'All files', 'confirmClass': 'info', 'inline': false, 'header': true, 'icon': 'fa-globe', 'action': 'showAllFiles', 'parentScope': true, }, 'C':{ 'id': 'c', 'header': false, 'inline': false, }, 'U':{ 'id': 'u', 'header': false, 'inline': false, }, 'R':{ 'id': 'r', 'name': 'View Row', 'confirmName': 'View', 'confirmClass': 'info', 'inline': false, 'header': false, 'icon': 'fa-search', 'action': 'read', }, 'D':{ 'id': 'd', 'name': 'Delete Row', 'confirmName': 'Delete', 'confirmClass': 'warning', 'icon':'fa-trash', 'action': 'delete', 'inline': true, }, } }; });