|
@@ -1,9 +1,11 @@
|
|
|
angular.module('odoo')
|
|
|
|
|
|
-.factory('leadsRemoteFactory', function (config, odoo, sqlFactory, asyncLoop) {
|
|
|
+.factory('leadsRemoteFactory', function (config, odoo, sqlFactory, leadsStorageFactory, asyncLoop) {
|
|
|
+ var server = {};
|
|
|
+ var local = {};
|
|
|
|
|
|
// Retrieve leads data from server
|
|
|
- var retrieve = function (success, error) {
|
|
|
+ server.retrieve = function (success, error) {
|
|
|
config(function (configuration) {
|
|
|
odoo.read('crm.lead', [['active', '=', true]], configuration, function (leads) {
|
|
|
success(leads);
|
|
@@ -15,8 +17,21 @@ angular.module('odoo')
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ // Retrieve lead by id
|
|
|
+ server.retrieveById = function (id, success, error) {
|
|
|
+ config(function (configuration) {
|
|
|
+ odoo.read('crm.lead', [['id', '=', id]], configuration, function (response) {
|
|
|
+ success(response);
|
|
|
+ }, function (odooReadErr) {
|
|
|
+ error(odooReadErr)
|
|
|
+ });
|
|
|
+ }, function (configErr) {
|
|
|
+ error(configErr);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// Update leads remote data
|
|
|
- var update = function (id, data, success, error) {
|
|
|
+ server.update = function (id, data, success, error) {
|
|
|
config(function (configuration) {
|
|
|
odoo.write('crm.lead', id, data, configuration, function (response) {
|
|
|
success(response);
|
|
@@ -28,14 +43,22 @@ angular.module('odoo')
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- // Create leads on remote data
|
|
|
- var send = function (data, success, error) {
|
|
|
- config(function (configuration) {retrieve(function (leads) {
|
|
|
- console.log(leads);
|
|
|
- success();
|
|
|
- }, function (retrieveError) {
|
|
|
- error(retrieveError);
|
|
|
+ // Remove lead from server
|
|
|
+ server.remove = function (id, success, error) {
|
|
|
+ config(function (configuration) {
|
|
|
+ odoo.unlink('crm.lead', id, configuration, function (response) {
|
|
|
+ success(response);
|
|
|
+ }, function (odooUnlinkErr) {
|
|
|
+ error(odooUnlinkErr);
|
|
|
+ });
|
|
|
+ }, function (configErr) {
|
|
|
+ error(configErr);
|
|
|
});
|
|
|
+ }
|
|
|
+
|
|
|
+ // Create leads on remote data
|
|
|
+ server.send = function (data, success, error) {
|
|
|
+ config(function (configuration) {
|
|
|
odoo.create('crm.lead', data, configuration, function (response) {
|
|
|
success(response);
|
|
|
}, function (odooCreateErr) {
|
|
@@ -47,7 +70,7 @@ angular.module('odoo')
|
|
|
}
|
|
|
|
|
|
// Select leads from local storage
|
|
|
- var select = function (contraint, success, error) {
|
|
|
+ local.retrieve = function (contraint, success, error) {
|
|
|
sqlFactory.selectByConstraint('lead', contraint, function (leads) {
|
|
|
success(leads);
|
|
|
}, function (err) {
|
|
@@ -57,7 +80,8 @@ angular.module('odoo')
|
|
|
|
|
|
// Sync leads data between local and remote storage
|
|
|
var sync = function (success, error) {
|
|
|
- select('remote_id = 0', function (newLeads) {
|
|
|
+ local.retrieve('remote_id = 0', function (newLeads) {
|
|
|
+ console.log(newLeads);
|
|
|
asyncLoop(newLeads.length, function (loop) {
|
|
|
var data = newLeads.item(loop.iteration());
|
|
|
|
|
@@ -66,16 +90,116 @@ angular.module('odoo')
|
|
|
delete data.remote_id;
|
|
|
delete data.modified;
|
|
|
delete data.modifiedDate;
|
|
|
+ delete data.priority;
|
|
|
|
|
|
- send(data, function (response) {
|
|
|
+ server.send(data, function (response) {
|
|
|
console.log(response);
|
|
|
loop.next();
|
|
|
}, function (sendErr) {
|
|
|
loop.break();
|
|
|
});
|
|
|
-
|
|
|
+ // End loop
|
|
|
}, function () {
|
|
|
- success();
|
|
|
+ console.log('New data sended success');
|
|
|
+
|
|
|
+ local.retrieve('remote_id != 0 AND modified = 1', function (modifiedLeads) {
|
|
|
+ asyncLoop(modifiedLeads.length, function (loop) {
|
|
|
+ var localData = modifiedLeads.item(loop.iteration());
|
|
|
+
|
|
|
+ server.retrieveById(localData.remote_id, function (leads) {
|
|
|
+ if (leads.length == 1) {
|
|
|
+ var remoteData = leads[0];
|
|
|
+
|
|
|
+ var remoteModifiedDate = new Date(remoteData.__last_update);
|
|
|
+ var localModifiedDate = new Date(localData.modifiedDate);
|
|
|
+
|
|
|
+
|
|
|
+ if (localModifiedDate > remoteModifiedDate) {
|
|
|
+ var id = localData.remote_id;
|
|
|
+
|
|
|
+ // Avoid odoo server warning message
|
|
|
+ delete localData.id;
|
|
|
+ delete localData.remote_id;
|
|
|
+ delete localData.modified;
|
|
|
+ delete localData.modifiedDate;
|
|
|
+ delete localData.priority;
|
|
|
+
|
|
|
+ server.update(id, localData, function (response) {
|
|
|
+ loop.next();
|
|
|
+ }, function (updateErr) {
|
|
|
+ console.log(updateErr);
|
|
|
+ loop.next();
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ loop.next();
|
|
|
+ }
|
|
|
+ } {
|
|
|
+ loop.next();
|
|
|
+ }
|
|
|
+ }, function (retrieveByIdErr) {
|
|
|
+ console.log(retrieveByIdErr);
|
|
|
+ loop.next();
|
|
|
+ });
|
|
|
+
|
|
|
+ // End loop
|
|
|
+ }, function () {
|
|
|
+ console.log('Modified data sended success');
|
|
|
+
|
|
|
+ local.retrieve('remote_id != 0 AND modified = 2', function (deletedLeads) {
|
|
|
+ asyncLoop(deletedLeads.length, function (loop) {
|
|
|
+ var id = deletedLeads.item(loop.iteration()).remote_id;
|
|
|
+
|
|
|
+ server.remove(id, function (response) {
|
|
|
+ loop.next();
|
|
|
+ }, function (removeErr) {
|
|
|
+ console.log(removeErr);
|
|
|
+ loop.next();
|
|
|
+ });
|
|
|
+
|
|
|
+ // End loop
|
|
|
+ }, function () {
|
|
|
+
|
|
|
+ console.log('Remote data deleted success');
|
|
|
+ server.retrieve(function (updatedLeads) {
|
|
|
+ console.log(updatedLeads);
|
|
|
+
|
|
|
+ leadsStorageFactory.removeAll(function () {
|
|
|
+ console.log('Removed All');
|
|
|
+
|
|
|
+ asyncLoop(updatedLeads.length, function (loop) {
|
|
|
+ var data = updatedLeads[loop.iteration()];
|
|
|
+
|
|
|
+ // Set id for save on local database
|
|
|
+ data.remote_id = data.id;
|
|
|
+ delete data.id;
|
|
|
+
|
|
|
+ leadsStorageFactory.save(data, function (leadId) {
|
|
|
+ loop.next();
|
|
|
+ }, function (saveLeadErr) {
|
|
|
+ console.log(saveLeadErr);
|
|
|
+ loop.next();
|
|
|
+ });
|
|
|
+
|
|
|
+ // End loop
|
|
|
+ }, function () {
|
|
|
+
|
|
|
+ console.log('Remote data downloaded success');
|
|
|
+ success(updatedLeads);
|
|
|
+ });
|
|
|
+ }, function (removeLeadsErr) {
|
|
|
+ error(removeLeadsErr);
|
|
|
+ });
|
|
|
+ }, function (retrieveErr) {
|
|
|
+ error(retrieveErr);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }, function (selectErr) {
|
|
|
+ error(selectErr);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }, function (selectErr) {
|
|
|
+ error(selectErr);
|
|
|
+ });
|
|
|
});
|
|
|
}, function (selectErr) {
|
|
|
error(selectErr);
|
|
@@ -83,9 +207,9 @@ angular.module('odoo')
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
- retrieve: retrieve,
|
|
|
- update: update,
|
|
|
- send: send,
|
|
|
+ retrieve: server.retrieve,
|
|
|
+ update: server.update,
|
|
|
+ send: server.send,
|
|
|
sync: sync
|
|
|
}
|
|
|
});
|