123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- angular.module('odoo')
- .factory('leadsRemoteFactory', function (config, odoo, sqlFactory, leadsStorageFactory, asyncLoop) {
- var server = {};
- var local = {};
- // Retrieve leads data from server
- server.retrieve = function (success, error) {
- config(function (configuration) {
- odoo.read('crm.lead', [['active', '=', true]], configuration, function (leads) {
- success(leads);
- }, function (odooErr) {
- error(odooErr);
- });
- }, function (configErr) {
- error(configErr);
- });
- }
- // 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
- server.update = function (id, data, success, error) {
- config(function (configuration) {
- odoo.write('crm.lead', id, data, configuration, function (response) {
- success(response);
- }, function (odooWriteErr) {
- error(odooWriteErr);
- });
- }, function (configErr) {
- error(configErr);
- });
- }
- // 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) {
- error(odooCreateErr);
- });
- }, function (configErr) {
- error(configErr);
- });
- }
- // Select leads from local storage
- local.retrieve = function (contraint, success, error) {
- sqlFactory.selectByConstraint('lead', contraint, function (leads) {
- success(leads);
- }, function (err) {
- error(err);
- });
- }
- // Sync leads data between local and remote storage
- var sync = function (success, error) {
- local.retrieve('remote_id = 0', function (newLeads) {
- console.log(newLeads);
- asyncLoop(newLeads.length, function (loop) {
- var data = newLeads.item(loop.iteration());
- // Avoid odoo server warning message
- delete data.id;
- delete data.remote_id;
- delete data.modified;
- delete data.modifiedDate;
- delete data.priority;
- server.send(data, function (response) {
- console.log(response);
- loop.next();
- }, function (sendErr) {
- loop.break();
- });
- // End loop
- }, function () {
- 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);
- });
- }
- return {
- retrieve: server.retrieve,
- update: server.update,
- send: server.send,
- sync: sync
- }
- });
|