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
JavaScript
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();
});
}
}
};
});