aaa28b1ea45e4ca94ed9d25b5eb1db2f6e2db967.svn-base 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. /// <reference path="../js/jquery-1.11.1.min.js" />
  2. /// <reference path="../js/knockout-3.1.0.js" />
  3. /// <reference path="../js/dx.all.js" />
  4. (function() {
  5. var endpointSelector = new DevExpress.EndpointSelector(BemsWebApplication.config.endpoints);
  6. var handleServiceError = BemsWebApplication.db._errorHandler;
  7. var odataServiceConfig = $.extend(true, {}, BemsWebApplication.config.odata, {
  8. db: {
  9. url: endpointSelector.urlFor("odata"),
  10. // To enable JSONP support, uncomment the following line
  11. //jsonp: !window.WinJS,
  12. // To allow cookies and HTTP authentication with CORS, uncomment the following line
  13. // withCredentials: true,
  14. errorHandler: handleServiceError
  15. }
  16. });
  17. // Enable partial CORS support for IE < 10
  18. $.support.cors = true;
  19. BemsWebApplication.odata = new DevExpress.data.ODataContext(odataServiceConfig.db);
  20. BemsWebApplication.api = {
  21. url: endpointSelector.urlFor("api"),
  22. postWithDataGrid: function(apiName, datagridId, formatObject) {
  23. var postData = utils.datagrid.getSelectedRowsDataWithFormatObject(datagridId, formatObject);
  24. $.each(formatObject, function(name, value) {
  25. if (value === null) {
  26. delete formatObject[name];
  27. }
  28. });
  29. return this.post(apiName, postData, formatObject);
  30. },
  31. postWithArray: function(apiName, array, formatObject, notKeys) {
  32. array = typeof array === 'function' ? array() : array;
  33. var koValue = $KoValue;
  34. return this.post(
  35. apiName,
  36. array.map(function(x) {
  37. return BWA.DataUtil.mapObject(formatObject, undefined, function(name, value) {
  38. return value || koValue(x[name]);
  39. });
  40. }),
  41. BWA.DataUtil.mapObject(formatObject, function(name, value) {
  42. if (notKeys && notKeys.indexOf(name) >= 0) {
  43. return null;
  44. }
  45. return value === null ? null : name;
  46. })
  47. );
  48. },
  49. // delete 는 키워드
  50. del: function(apiName, postData, parameters) {
  51. var url = this.makeApiUriWithParameters(apiName, parameters);
  52. var promise = $.ajax({
  53. url: url,
  54. dataType: 'json',
  55. contentType: 'application/json',
  56. method: "DELETE",
  57. data: JSON.stringify(postData)
  58. });
  59. promise.fail(handleServiceError);
  60. return promise;
  61. },
  62. post: function(apiName, postData, parameters) {
  63. var url = this.makeApiUriWithParameters(apiName, parameters);
  64. var promise = $.ajax({
  65. url: url,
  66. dataType: 'json',
  67. contentType: 'application/json',
  68. method: "POST",
  69. data: JSON.stringify(postData)
  70. });
  71. promise.fail(handleServiceError);
  72. return promise;
  73. },
  74. get: function(apiName, parameters) {
  75. var url = this.makeApiUriWithParameters(apiName, parameters);
  76. var promise = $.ajax({
  77. url: url,
  78. method: "GET",
  79. });
  80. promise.fail(handleServiceError);
  81. return promise;
  82. },
  83. 'delete': function(apiName, parameters) {
  84. var url = this.makeApiUriWithParameters(apiName, parameters);
  85. var promise = $.ajax({
  86. url: url,
  87. method: "DELETE",
  88. });
  89. promise.fail(handleServiceError);
  90. return promise;
  91. },
  92. makeApiUriWithParameters: function(apiName, parameters) {
  93. var uri = [this.url, '/'];
  94. uri.push(apiName);
  95. if (typeof parameters === 'object') {
  96. uri.push('?');
  97. $.each(parameters, function(name, value) {
  98. if (value == null) return true;
  99. uri.push('&');
  100. uri.push(name);
  101. uri.push('=');
  102. uri.push(value);
  103. });
  104. }
  105. return uri.join('');
  106. },
  107. // createODataSource: function(apiName,
  108. };
  109. BemsWebApplication.db.createViewModel = function(data) {
  110. var viewModel = {};
  111. (function setViewModel(item, prefix) {
  112. $.each(item, function(name, value) {
  113. if (name.indexOf('__') >= 0) return true;
  114. if (value !== null && value instanceof Date === false && typeof value === "object") {
  115. setViewModel(value, (prefix || '') + name + '_');
  116. //$.each( value, function( subName, subValue ) {
  117. // if( subName.indexOf( '__' ) >= 0 ) return true;
  118. // viewModel[name + '_' + subName] = ko.observable( subValue );
  119. //});
  120. }
  121. else {
  122. viewModel[(prefix || '') + name] = ko.observable(value);
  123. }
  124. });
  125. })(data);
  126. return viewModel;
  127. };
  128. BemsWebApplication.db.createViewModelWithMultipleFK = function(data, extendOptions) {
  129. var viewModel = {};
  130. var array = [];
  131. var forceOriginalField = extendOptions ? extendOptions.forceOriginalField || false : false;
  132. if (_.has(extendOptions, 'multipleItems')) {
  133. //array = _.map(extendOptions.multipleItems, function(v) {
  134. // return _.clone(v);
  135. //});
  136. extendOptions.multipleItems.forEach(function(item) {
  137. array.push($.extend(true, {}, item));
  138. });
  139. }
  140. var alterNames = null;
  141. if (_.has(extendOptions, 'alterNames')) {
  142. alterNames = extendOptions.alterNames;
  143. }
  144. (function setViewModel(item, prefix, multipleItems) {
  145. $.each(item, function (name, value) {
  146. if (name.indexOf('__') >= 0) return true;
  147. if (value !== null && typeof value === "object" && value instanceof Date === false) {
  148. var tempPrefix = (prefix || []).concat([forceOriginalField ? name : name.replace(/[0-9]/, ''), '/']);
  149. for (var i = 0 ; i < multipleItems.length ; i++) {
  150. var m = multipleItems[i];
  151. var entryIndex = m.entries.indexOf(name);
  152. if (entryIndex >= 0) {
  153. m.fields.every(function(field, j) {
  154. if (value[m.id] === item[field]) {
  155. tempPrefix.push(field);
  156. tempPrefix.push('/');
  157. m.fields.splice(j, 1);
  158. return false;
  159. }
  160. return true;
  161. });
  162. break;
  163. }
  164. };
  165. setViewModel(value, tempPrefix, multipleItems);
  166. }
  167. else {
  168. var fieldName;
  169. if (Array.isArray(prefix)) {
  170. fieldName = (prefix.join('') || '') + name;
  171. }
  172. else {
  173. fieldName = prefix || name;
  174. }
  175. if (alterNames) {
  176. var alterName = alterNames[fieldName];
  177. if (alterName) {
  178. fieldName = alterName;
  179. }
  180. }
  181. if (forceOriginalField === false) {
  182. fieldName = fieldName.replace(/\//g, '_');
  183. }
  184. viewModel[fieldName] = ko.observable(value);
  185. }
  186. });
  187. })(data, undefined, array);
  188. if (alterNames) {
  189. $.each(alterNames, function(name, value) {
  190. if (_.isUndefined(viewModel[value])) {
  191. viewModel[value] = ko.observable('');
  192. }
  193. });
  194. }
  195. //console.log(viewModel);
  196. return viewModel;
  197. };
  198. BemsWebApplication.db.createDynamicDataSource = function(options) {
  199. var ds = new DevExpress.data.DataSource({
  200. store: options.store,
  201. map: function(item) {
  202. return new BemsWebApplication[dbModel + 'ViewModel'](item);
  203. }
  204. });
  205. var filter = [];
  206. if (useSitefilter) {
  207. filter.push(['SiteId', '=', BWA.UserInfo.SiteId()]);
  208. }
  209. if (checkUse) {
  210. if (useSitefilter) {
  211. filter.push('and');
  212. }
  213. filter.push(['IsUse', '=', true]);
  214. }
  215. if (filter.length > 0) ds.filter(filter);
  216. return ds;
  217. };
  218. BemsWebApplication.db.dataSourceCache = {};
  219. BemsWebApplication.db.createDataSourceWithFilters = function(dbModel, filters) {
  220. var ds = new DevExpress.data.DataSource({
  221. store: BemsWebApplication.db[dbModel],
  222. map: function(item) {
  223. return new BemsWebApplication[dbModel + 'ViewModel'](item);
  224. },
  225. paginate: false,
  226. });
  227. ds.filter(filters);
  228. return ds;
  229. };
  230. BemsWebApplication.db.createDataSource = function(dbModel, useSitefilter, checkUse, isNoCache) {
  231. if (isNoCache !== true && dbModel in this.dataSourceCache) {
  232. return this.dataSourceCache[dbModel];
  233. }
  234. var ds = new DevExpress.data.DataSource({
  235. store: BemsWebApplication.db[dbModel],
  236. map: function(item) {
  237. return new BemsWebApplication[dbModel + 'ViewModel'](item);
  238. },
  239. paginate: false,
  240. });
  241. var filter = [];
  242. if (useSitefilter) {
  243. filter.push(['SiteId', '=', BWA.UserInfo.SiteId()]);
  244. }
  245. if (checkUse) {
  246. if (useSitefilter) {
  247. filter.push('and');
  248. }
  249. filter.push(['IsUse', '=', true]);
  250. }
  251. if (filter.length > 0) ds.filter(filter);
  252. if (isNoCache !== true) this.dataSourceCache[dbModel] = ds;
  253. return ds;
  254. };
  255. BemsWebApplication.db.extractKeysObject = function(dbModelName, dataViewModel) {
  256. var keys = this[dbModelName].key();
  257. var idsObject = {};
  258. keys.forEach(function(key) {
  259. idsObject[key] = dataViewModel[key]();
  260. });
  261. return idsObject;
  262. };
  263. BemsWebApplication.db.removeFromViewModel = function(dbModelName, dataViewModel) {
  264. var keysObject = this.extractKeysObject(dbModelName, dataViewModel);
  265. return this[dbModelName].remove(keysObject);
  266. };
  267. }());