UNPKG

zettapi_client

Version:

Client side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project

118 lines (102 loc) 4.38 kB
app.directive('zlReport', function(zapiPath) { return { restrict: 'E', scope: { reportKey: '@' }, replace: false, templateUrl: zapiPath + '/directives/report/report.html', controller: function($scope, NgTableParams, $entity, moment, $report, $httpParamSerializer, blockUI, $route) { $scope.savedItems = []; $scope.fields = []; $scope.activeTab = 0; reset(); initialize(); $scope.reset = reset; $scope.appendQuery = function() { $scope.item.query.push({}); }; $scope.removeQuery = function(index) { $scope.item.query.splice(index, 1); }; $scope.getReport = function(item) { var map = {}; $scope.cols = []; item.select.forEach(function(fieldId) { var field = $scope.fields.find(function(field) { return field.id == fieldId; }); var key = typeof field.name === 'undefined' ? field.invoke : field.name; if (field.type === "Date") map[key] = true; $scope.cols.push({ field: key, title: field.caption, sortable: "'" + key + "'", show: true }); }); $report.getReport($scope.reportKey, item, function(err, data) { if (err) return swal("Ocorreu um problema", data, "error"); var items = $entity.flattenArray(data, true); items.forEach(function(item) { for (var key in item) { if (!map[key]) continue; item[key] = moment(item[key]).format('YYYY-MM-DD'); } }); $scope.items = items; $scope.tableParams = new NgTableParams({}, { dataset: items }); }); }; $scope.loadReport = function(item, index) { $scope.item = item; $scope.activeTab = index; }; $scope.saveReport = function(item) { item.key = $scope.reportKey; blockUI.start("A guardar listagem..."); $entity.add('report', item).then(function(response) { swal("Guardado", "A listagem foi guardada com sucesso. Poderá reutiliza-la no futuro a partir do separador 'Restaurar'", "success"); $route.reload(); }).catch(function(response) { swal("Atenção", response.data, "warning"); }).finally(function() { blockUI.stop(); }); }; $scope.getExcelUrl = function(item) { return '/api/report/get/' + $scope.reportKey + '?xls=1&' + $httpParamSerializer(item); }; $scope.applySearch = function(search) { var criteria = angular.copy(search.text); if (search.inverted) { criteria = "!" + criteria; } $scope.tableParams.filter({ $: criteria }); }; function reset() { $scope.tableParams = null; $scope.cols = []; $scope.item = { select: [], query: [], sort: {} }; } function initialize() { $report.getMetadata($scope.reportKey, function(err, metadata) { if (err) return swal("Atenção", err, "error"); $scope.fields = metadata.fields; }); blockUI.start("A obter listagens guardadas..."); $entity.getByKey('report', { key: $scope.reportKey }).then(function(response) { $scope.savedItems = response.data; }).catch(function(response) { swal("Atenção", response.data, "error"); }).finally(function() { blockUI.stop(); }); } } }; });