database.factory.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 == 'many2one' || model[key].type == 'many2many') {
  37. statement += key + ' INTEGER DEFAULT 0,\n';
  38. }
  39. if (model[key].type == 'one2many') {
  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. console.log(statement);
  48. return statement + ');'
  49. }
  50. /**
  51. *
  52. */
  53. var fetchMaps = function (success, error) {
  54. var maps = [];
  55. asyncLoopFactory(mappings.length, function (loop) {
  56. var map = mappings[loop.iteration()];
  57. odooFactory.fields(map.model, function (response) {
  58. maps.push({ table: map.table, model: response });
  59. loop.next();
  60. }, function (odooErr) {
  61. console.log(odooErr);
  62. loop.next();
  63. });
  64. }, function () {
  65. success(maps);
  66. });
  67. }
  68. /**
  69. *
  70. */
  71. var initTables = function (success, error) {
  72. fetchMaps(function (maps) {
  73. asyncLoopFactory(maps.length, function (loop) {
  74. var map = maps[loop.iteration()];
  75. var sql = buildCreateStatement(map.table, map.model);
  76. db.executeSql(sql, [], function (result) {
  77. console.log(result);
  78. loop.next();
  79. }, function (err) {
  80. console.log(err);
  81. loop.next();
  82. });
  83. }, function () {
  84. success(maps);
  85. });
  86. }, function (err) {
  87. error(err);
  88. });
  89. }
  90. return {
  91. fetchMaps: fetchMaps,
  92. initTables: initTables
  93. }
  94. });