/// /// /// (function() { var endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints); var handleServiceError = BemsWebApplication.db._errorHandler; var odataServiceConfig = $.extend(true, {}, BemsWebApplication.config.odata, { db: { url: endpointSelector.urlFor("odata"), // To enable JSONP support, uncomment the following line //jsonp: !window.WinJS, // To allow cookies and HTTP authentication with CORS, uncomment the following line // withCredentials: true, errorHandler: handleServiceError } }); // Enable partial CORS support for IE < 10 $.support.cors = true; BemsWebApplication.odata = new DevExpress.data.ODataContext(odataServiceConfig.db); BemsWebApplication.api = { url: endpointSelector.urlFor("api"), postWithDataGrid: function(apiName, datagridId, formatObject) { var postData = utils.datagrid.getSelectedRowsDataWithFormatObject(datagridId, formatObject); $.each(formatObject, function(name, value) { if (value === null) { delete formatObject[name]; } }); return this.post(apiName, postData, formatObject); }, postWithArray: function(apiName, array, formatObject, notKeys) { array = typeof array === 'function' ? array() : array; var koValue = $KoValue; return this.post( apiName, array.map(function(x) { return BWA.DataUtil.mapObject(formatObject, undefined, function(name, value) { return value || koValue(x[name]); }); }), BWA.DataUtil.mapObject(formatObject, function(name, value) { if (notKeys && notKeys.indexOf(name) >= 0) { return null; } return value === null ? null : name; }) ); }, // delete 는 키워드 del: function(apiName, postData, parameters) { var url = this.makeApiUriWithParameters(apiName, parameters); var promise = $.ajax({ url: url, dataType: 'json', contentType: 'application/json', method: "DELETE", data: JSON.stringify(postData) }); promise.fail(handleServiceError); return promise; }, post: function(apiName, postData, parameters) { var url = this.makeApiUriWithParameters(apiName, parameters); var promise = $.ajax({ url: url, dataType: 'json', contentType: 'application/json', method: "POST", data: JSON.stringify(postData) }); promise.fail(handleServiceError); return promise; }, get: function(apiName, parameters) { var url = this.makeApiUriWithParameters(apiName, parameters); var promise = $.ajax({ url: url, method: "GET", }); promise.fail(handleServiceError); return promise; }, 'delete': function(apiName, parameters) { var url = this.makeApiUriWithParameters(apiName, parameters); var promise = $.ajax({ url: url, method: "DELETE", }); promise.fail(handleServiceError); return promise; }, makeApiUriWithParameters: function(apiName, parameters) { var uri = [this.url, '/']; uri.push(apiName); if (typeof parameters === 'object') { uri.push('?'); $.each(parameters, function(name, value) { if (value == null) return true; uri.push('&'); uri.push(name); uri.push('='); uri.push(value); }); } return uri.join(''); }, // createODataSource: function(apiName, }; BemsWebApplication.db.createViewModel = function(data) { var viewModel = {}; (function setViewModel(item, prefix) { $.each(item, function(name, value) { if (name.indexOf('__') >= 0) return true; if (value !== null && value instanceof Date === false && typeof value === "object") { setViewModel(value, (prefix || '') + name + '_'); //$.each( value, function( subName, subValue ) { // if( subName.indexOf( '__' ) >= 0 ) return true; // viewModel[name + '_' + subName] = ko.observable( subValue ); //}); } else { viewModel[(prefix || '') + name] = ko.observable(value); } }); })(data); return viewModel; }; BemsWebApplication.db.createViewModelWithMultipleFK = function(data, extendOptions) { var viewModel = {}; var array = []; var forceOriginalField = extendOptions ? extendOptions.forceOriginalField || false : false; if (_.has(extendOptions, 'multipleItems')) { //array = _.map(extendOptions.multipleItems, function(v) { // return _.clone(v); //}); extendOptions.multipleItems.forEach(function(item) { array.push($.extend(true, {}, item)); }); } var alterNames = null; if (_.has(extendOptions, 'alterNames')) { alterNames = extendOptions.alterNames; } (function setViewModel(item, prefix, multipleItems) { $.each(item, function (name, value) { if (name.indexOf('__') >= 0) return true; if (value !== null && typeof value === "object" && value instanceof Date === false) { var tempPrefix = (prefix || []).concat([forceOriginalField ? name : name.replace(/[0-9]/, ''), '/']); for (var i = 0 ; i < multipleItems.length ; i++) { var m = multipleItems[i]; var entryIndex = m.entries.indexOf(name); if (entryIndex >= 0) { m.fields.every(function(field, j) { if (value[m.id] === item[field]) { tempPrefix.push(field); tempPrefix.push('/'); m.fields.splice(j, 1); return false; } return true; }); break; } }; setViewModel(value, tempPrefix, multipleItems); } else { var fieldName; if (Array.isArray(prefix)) { fieldName = (prefix.join('') || '') + name; } else { fieldName = prefix || name; } if (alterNames) { var alterName = alterNames[fieldName]; if (alterName) { fieldName = alterName; } } if (forceOriginalField === false) { fieldName = fieldName.replace(/\//g, '_'); } viewModel[fieldName] = ko.observable(value); } }); })(data, undefined, array); if (alterNames) { $.each(alterNames, function(name, value) { if (_.isUndefined(viewModel[value])) { viewModel[value] = ko.observable(''); } }); } //console.log(viewModel); return viewModel; }; BemsWebApplication.db.createDynamicDataSource = function(options) { var ds = new DevExpress.data.DataSource({ store: options.store, map: function(item) { return new BemsWebApplication[dbModel + 'ViewModel'](item); } }); var filter = []; if (useSitefilter) { filter.push(['SiteId', '=', BWA.UserInfo.SiteId()]); } if (checkUse) { if (useSitefilter) { filter.push('and'); } filter.push(['IsUse', '=', true]); } if (filter.length > 0) ds.filter(filter); return ds; }; BemsWebApplication.db.dataSourceCache = {}; BemsWebApplication.db.createDataSourceWithFilters = function(dbModel, filters) { var ds = new DevExpress.data.DataSource({ store: BemsWebApplication.db[dbModel], map: function(item) { return new BemsWebApplication[dbModel + 'ViewModel'](item); }, paginate: false, }); ds.filter(filters); return ds; }; BemsWebApplication.db.createDataSource = function(dbModel, useSitefilter, checkUse, isNoCache) { if (isNoCache !== true && dbModel in this.dataSourceCache) { return this.dataSourceCache[dbModel]; } var ds = new DevExpress.data.DataSource({ store: BemsWebApplication.db[dbModel], map: function(item) { return new BemsWebApplication[dbModel + 'ViewModel'](item); }, paginate: false, }); var filter = []; if (useSitefilter) { filter.push(['SiteId', '=', BWA.UserInfo.SiteId()]); } if (checkUse) { if (useSitefilter) { filter.push('and'); } filter.push(['IsUse', '=', true]); } if (filter.length > 0) ds.filter(filter); if (isNoCache !== true) this.dataSourceCache[dbModel] = ds; return ds; }; BemsWebApplication.db.extractKeysObject = function(dbModelName, dataViewModel) { var keys = this[dbModelName].key(); var idsObject = {}; keys.forEach(function(key) { idsObject[key] = dataViewModel[key](); }); return idsObject; }; BemsWebApplication.db.removeFromViewModel = function(dbModelName, dataViewModel) { var keysObject = this.extractKeysObject(dbModelName, dataViewModel); return this[dbModelName].remove(keysObject); }; }());