UNPKG

pip-webui

Version:

HTML5 UI for LOB applications

361 lines (315 loc) 15.9 kB
/** * @file Application abstract data model * @copyright Digital Living Software Corp. 2014-2016 */ /* global angular, _, async */ (function () { 'use strict'; var thisModule = angular.module('pipDataModel', ['pipUtils', 'pipRest']); thisModule.provider('pipDataModel', function() { this.$get = function($stateParams, pipCollections, pipRest) { var api = []; for (var call in pipRest) { api[call] = pipRest[call]; } // function extendApi(extension) { // for (var call in extension) { // api[call] = extension[call]; // } // } // Execute request to REST API function executeCurl(params, successCallback, errorCallback) { var t = params.transaction, tid; if (t && !params.skipTransactionBegin) { tid = params.transactionId = t.begin( params.transactionOperation || 'PROCESSING' ); if (!tid) return; } return api[params.resource]()[params.operation]( params.item, function (result) { if (t && tid && t.aborted(tid)) return; if (t && !params.skipTransactionEnd) t.end(); if (successCallback) successCallback(result); }, function (error) { if (t) t.end(error); if (errorCallback) errorCallback(error); } ); }; // Create an object and add it to object collection function createCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'SAVING'; params.operation = params.operation || 'save'; return executeCurl( params, function(result) { if (params.itemCollection) params.itemCollection.push(result); if (successCallback) successCallback(result); }, function(error){ if (errorCallback) errorCallback(error); } ); }; // Update an object and replace it in object collection function updateCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'SAVING'; params.operation = params.operation || 'update'; return executeCurl( params, function(result) { if (params.itemCollection) pipCollections.replaceBy(params.itemCollection, 'id', result.id, result); if (successCallback) successCallback(result); }, errorCallback ); }; // Update an object and remove it from object collection function deleteCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'SAVING'; params.operation = params.operation || 'remove'; return executeCurl( params, function(result) { if (params.itemCollection) _.remove(params.itemCollection, {id: result.id || (params.object || {}).id || (params.item || {}).id}); if (successCallback) successCallback(result); }, errorCallback ); }; // Read a collection of objects function readCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'READING'; params.operation = params.operation || 'query'; return executeCurl( params, function(result) { if (successCallback) successCallback(result); }, errorCallback ); }; // Read a single object and add it into collection function readOneCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'READING'; params.operation = params.operation || 'page'; return executeCurl( params, function(result) { if (params.itemCollection && result) { var index = _.findIndex(params.itemCollection, {id: result.id}); if (index >= 0) params.itemCollection[index] = result; else params.itemCollection.push(result); } if (successCallback) successCallback(result); }, errorCallback ); }; // Read a page and add results into object collection function pageCurl(params, successCallback, errorCallback) { params.transactionOperation = params.transactionOperation || 'READING'; params.operation = params.operation || 'page'; return executeCurl( params, function(result) { if (params.itemCollection && result.data) { for (var i = 0; i < result.data.length; i++) params.itemCollection.push(result.data[i]); } if (successCallback) successCallback(result); }, errorCallback ); }; // Save picture and document files function saveFilesCurl(params, successCallback, errorCallback) { var t = params.transaction, tid; // Start transaction if necessary if (t && !params.skipTransactionBegin) { tid = params.transactionId = t.begin( params.transactionOperation || 'SAVING' ); if (!tid) return; } //------------------ var uploadFiles = [{ pictures: params.pictures, documents: params.documents }]; // from content if (params.item && params.item.content ) { var saveResult = true; async.eachSeries(_.union(params.item.content, uploadFiles), function (obj, callback) { // не выбран - пропускаем этот item || нет этого события action if ( !obj.pictures && !obj.documents ) { callback(); } else { if (obj.pictures) { // Save pictures first obj.pictures.save( function () { if (t && tid && t.aborted(tid)) { saveResult = false; callback('aborted'); } // Save documents second if (obj.documents) { obj.documents.save( function () { if (t && tid && t.aborted(tid)) { saveResult = false; callback('aborted'); } callback(); }, function (error) { saveResult = false; callback(error); } ); } else { callback(); } }, function (error) { saveResult = false; callback(error); } ); } else { if (obj.documents) { // Save documents first obj.documents.save( function () { if (t && tid && t.aborted(tid)) { saveResult = false; callback('aborted'); } callback(); }, function (error) { saveResult = false; callback(error); } ); } } } }, function (error) { if (!error && saveResult) { // удаляем ненужные объекты перед сохранением // вызываем колбек if (t & !params.skipTransactionEnd) t.end(); _.each(params.item.content, function(item){ delete item.pictures; delete item.documents; }); if (successCallback) successCallback(); } else { // вызываем ошибочный колбек if (t) t.end(error); if (errorCallback) { errorCallback(error); } } } ); } else { if (params.pictures) { // Save pictures first params.pictures.save( function () { if (t && tid && t.aborted(tid)) return; // Save documents second if (params.documents) { params.documents.save( function () { if (t && tid && t.aborted(tid)) return; // Do everything else if (t & !params.skipTransactionEnd) t.end(); if (successCallback) successCallback(); }, function (error) { if (t) t.end(error); if (errorCallback) errorCallback(error); } ); } else { // Do everything else if (t & !params.skipTransactionEnd) t.end(); if (successCallback) successCallback(); } }, function (error) { if (t) t.end(error); if (errorCallback) errorCallback(error); } ); } else if (params.documents) { // Save documents first params.documents.save( function () { if (t && tid && t.aborted(tid)) return; // Do everything else if (t & !params.skipTransactionEnd) t.end(); if (successCallback) successCallback(); }, function (error) { if (t) t.end(error); if (errorCallback) errorCallback(error); } ); } else { // Do everything else if (t & !params.skipTransactionEnd) t.end(); if (successCallback) successCallback(); } } }; // Abort transaction with file upload function abortFilesCurl(params) { if (params.pictures) params.pictures.abort(); if (params.documents) params.documents.abort(); if (params.transaction) params.transaction.abort(); }; return { // extendApi: extendApi, // Executing transactional requests to server execute: executeCurl, // Creating an object create: createCurl, // Updating an object update: updateCurl, save: updateCurl, // Deleting an object 'delete': deleteCurl, remove: deleteCurl, // Reading objects read: readCurl, query: readCurl, // Reading a single object readOne: readOneCurl, get: readOneCurl, // Reading paginated results page: pageCurl, readPage: pageCurl, queryPage: pageCurl, // Saving files to file store saveFiles: saveFilesCurl, abortFiles: abortFilesCurl } }; }); })();