database.factory.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. angular.module('odoo')
  2. /**
  3. *
  4. */
  5. .factory('databaseFactory', function (
  6. odooFactory,
  7. asyncLoopFactory
  8. ) {
  9. var mappings = [
  10. {
  11. model: 'res.partner',
  12. table: 'partner'
  13. },
  14. {
  15. model: 'crm.lead',
  16. table: 'crm_lead'
  17. },
  18. {
  19. model: 'crm.case.stage',
  20. table: 'stages'
  21. }
  22. ];
  23. /**
  24. *
  25. */
  26. var buildCreateStatement = function (table, model) {
  27. var statement = 'CREATE TABLE IF NOT EXISTS ' + table + ' (\n';
  28. for (var key in model) {
  29. if (model.hasOwnProperty(key) && typeof model[key] == 'object') {
  30. if (model[key].type == 'float') {
  31. statement += key + ' REAL DEFAULT 0,\n';
  32. }
  33. if (model[key].type == 'char' || model[key].type == 'text' || model[key].type == 'datetime') {
  34. statement += key + ' TEXT DEFAULT NULL,\n';
  35. }
  36. if (model[key].type == 'integer' || model[key].type == 'selection' || model[key].type == 'boolean' || model[key].type == 'one2many' || model[key].type == 'many2many') {
  37. statement += key + ' INTEGER DEFAULT 0,\n';
  38. }
  39. if (model[key].type == 'many2one') {
  40. continue;
  41. }
  42. }
  43. }
  44. statement += 'remote_id INTEGER DEFAULT 0,\n' +
  45. 'modified INTEGER DEFAULT 0,\n' +
  46. 'modified_date TEXT DEFAULT CURRENT_TIMESTAMP\n';
  47. return statement + ');'
  48. }
  49. /**
  50. *
  51. */
  52. var fetchMaps = function (success, error) {
  53. var maps = [];
  54. asyncLoopFactory(mappings.length, function (loop) {
  55. var map = mappings[loop.iteration()];
  56. odooFactory.fields(map.model, function (response) {
  57. maps.push({ table: map.table, model: response });
  58. loop.next();
  59. }, function (odooErr) {
  60. console.log(odooErr);
  61. loop.next();
  62. });
  63. }, function () {
  64. success(maps);
  65. });
  66. }
  67. /**
  68. *
  69. */
  70. var initTables = function (success, error) {
  71. fetchMaps(function (maps) {
  72. asyncLoopFactory(maps.length, function (loop) {
  73. var map = maps[loop.iteration()];
  74. var sql = buildCreateStatement(map.table, map.model);
  75. db.executeSql(sql, [], function (result) {
  76. console.log(result);
  77. loop.next();
  78. }, function (err) {
  79. console.log(err);
  80. loop.next();
  81. });
  82. }, function () {
  83. success(maps);
  84. });
  85. }, function (err) {
  86. error(err);
  87. });
  88. }
  89. return {
  90. fetchMaps: fetchMaps,
  91. initTables: initTables
  92. }
  93. });