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