123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- angular.module('odoo')
- /**
- * -----------------------------------------------------------------------------
- * Description: Customers data sync manager
- * -----------------------------------------------------------------------------
- */
- .factory('customersRemoteFactory', function (
- customersStorageFactory,
- odooFactory,
- sqlFactory,
- asyncLoopFactory
- ) {
- /**
- *
- */
- var pull = function (id, success, error) {
- if (id) {
- odooFactory.read('res.partner', [['id', '=', id]], function (response) {
- success(response);
- }, function (odooErr) {
- error(odooErr);
- });
- } else {
- odooFactory.read('res.partner', [['customer', '=', true]], function (response) {
- success(response);
- }, function (odooErr) {
- error(odooErr)
- });
- }
- }
- /**
- *
- */
- var push = function (id, data, success, error) {
- // Avoid odoo server warning message
- delete data.id;
- delete data.remote_id;
- delete data.modified;
- delete data.notify_email;
- if (id) {
- pull(id, function (response) {
- if (response.length == 1) {
- var remoteData = response[0];
- var remoteDate = new Date(remoteData.__last_update);
- var localDate = new Date(data.modified_date);
- delete data.modified_date;
- if (localDate > remoteDate) {
- odooFactory.write('res.partner', id, data, function (response) {
- success(response);
- }, function (odooErr) {
- error(odooErr);
- });
- } else {
- success(response);
- }
- } else {
- success(response);
- }
- }, function (pullErr) {
- error(pullErr);
- });
- } else {
- delete data.modified_date;
- odooFactory.create('res.partner', data, function (response) {
- success(response);
- }, function (odooErr) {
- error(odooErr);
- });
- }
- }
- /**
- *
- */
- var destroy = function (id, success, error) {
- odooFactory.unlink('res.partner', id, function (response) {
- success(response);
- }, function (unlinkErr) {
- error(unlinkErr);
- });
- }
- /**
- *
- */
- var get = function (constraint, success, error) {
- sqlFactory.selectByConstraint('partner', constraint, function (customers) {
- success(customers);
- }, function (err) {
- error(err);
- });
- }
- /**
- *
- */
- var getAll = function (success, error) {
- sqlFactory.selectByConstraint('partner', 'customer = 1 AND modified != 2', function (customers) {
- var data = [];
- for (var i = 0; i < customers.length; i++) {
- data.push(customers.item(i));
- }
- success(data);
- }, function (err) {
- error(err);
- });
- }
- /**
- *
- */
- var syncNewData = function (success, error) {
- get('remote_id = 0 AND customer = 1', function (newCustomers) {
- asyncLoopFactory(newCustomers.length, function (loop) {
- var data = newCustomers.item(loop.iteration());
- push(null, data, function (response) {
- loop.next();
- }, function (pushErr) {
- loop.break();
- });
- // end loop
- }, function () {
- success(newCustomers);
- });
- }, function (getErr) {
- error(getErr);
- });
- }
- /**
- *
- */
- var syncUpdatedData = function (success, error) {
- get('remote_id != 0 AND customer = 1 AND modified = 1', function (updatedCustomers) {
- asyncLoopFactory(updatedCustomers.length, function (loop) {
- var data = updatedCustomers.item(loop.iteration());
- push(data.remote_id, data, function (response) {
- loop.next();
- }, function () {
- loop.next();
- });
- // end loop
- }, function () {
- success(updatedCustomers);
- });
- }, function (getErr) {
- error(getErr);
- });
- }
- /**
- *
- */
- var syncDeletedData = function (success, error) {
- get('remote_id != 0 AND customer = 1 AND modified = 2', function (deletedCustomers) {
- asyncLoopFactory(deletedCustomers.length, function (loop) {
- var id = deletedCustomers.item(loop.iteration()).remote_id;
- destroy(id, function (response) {
- loop.next();
- }, function (destroyErr) {
- loop.next();
- });
- // end loop
- }, function () {
- success(deletedCustomers);
- });
- }, function (getErr) {
- error(getErr);
- });
- }
- /**
- *
- */
- var downloadSyncData = function (success, error) {
- pull(null, function (customers) {
- customersStorageFactory.removeAll(function () {
- asyncLoopFactory(customers.length, function (loop) {
- var data = customers[loop.iteration()];
- data.remote_id = data.id;
- delete data.id;
- customersStorageFactory.save(data, function (customerId) {
- loop.next();
- }, function (saveErr) {
- loop.next();
- });
- // end loop
- }, function () {
- success(customers);
- });
- }, function (removeAllErr) {
- error(removeAllErr);
- });
- }, function (pullErr) {
- error(pullErr);
- });
- }
- /**
- *
- */
- var sync = function (success, error) {
- syncNewData(function () {
- console.log("customers --> new data ok");
- syncUpdatedData(function () {
- console.log("customers --> updated data ok");
- syncDeletedData(function () {
- console.log("customers -> deleted data ok");
- downloadSyncData(function (data) {
- console.log("customers -> download data ok");
- success(data);
- }, function (downloadErr) {
- error(downloadErr);
- });
- }, function (syncErr) {
- error(syncErr);
- });
- }, function (syncErr) {
- error(syncErr);
- });
- }, function (syncErr) {
- error(syncErr);
- });
- }
- return {
- pull: pull,
- push: push,
- destroy: destroy,
- getAll: getAll,
- sync: sync
- }
- });
|