[IMP] linkedin: find similar partners and update only the empty field

bzr revid: chm@openerp.com-20130121104111-4bifnvr7ftnic80r
This commit is contained in:
Christophe Matthieu 2013-01-21 11:41:11 +01:00
parent 762a3635eb
commit b4128a3fcd
1 changed files with 47 additions and 19 deletions

View File

@ -119,7 +119,6 @@ openerp.web_linkedin = function(instance) {
var self = this;
this.create_on_change(entity).done(function(to_change) {
var values = self.view.get_fields_values();
console.log(values, to_change);
_.each(to_change, function (value, key) {
if (!/linkedin/.test(key) && !!values[key]) {
if(_.isArray(values[key])) {
@ -132,7 +131,7 @@ openerp.web_linkedin = function(instance) {
self.view.set_values(to_change);
});
},
create_on_change: function(entity) {
create_on_change: function(entity, search_similar_partner) {
var self = this;
var to_change = {};
var defs = [];
@ -167,11 +166,13 @@ openerp.web_linkedin = function(instance) {
});
var defs = _.map(result, function(el) {
el.__type = "people";
return self.create_on_change(el);
el.parent_id = self.field_manager.datarecord.id || false;
return self.create_on_change(el, true);
});
return $.when.apply($, defs).then(function() {
var p_to_change = _.map(_.toArray(arguments), function (val) {
return val.id ? [1, val.id, val] : [0, 0, val];
var p_to_change = _.map(_.toArray(arguments), function (data) {
// [0,0,data] if it's a new partner
return data.id ? [1, data.id, data] : [0, 0, data];
})
to_change.child_ids = p_to_change;
});
@ -183,15 +184,12 @@ openerp.web_linkedin = function(instance) {
} else { // people
to_change.is_company = false;
to_change.name = entity.formattedName;
to_change.image = false;
if (entity.pictureUrl) {
defs.push(self.rpc('/web_linkedin/binary/url2binary',
{'url': entity.pictureUrl}).then(function(data){
to_change.image = data;
}));
}
to_change.mobile = false;
to_change.phone = false;
_.each((entity.phoneNumbers || {}).values || [], function(el) {
if (el.phoneType === "mobile") {
to_change.mobile = el.phoneNumber;
@ -202,23 +200,53 @@ openerp.web_linkedin = function(instance) {
var positions = (entity.positions || {}).values || [];
if (positions.length && positions[0].isCurrent) {
to_change.function = positions[0].title;
var company_name = positions[0].company ? positions[0].company.name : false;
if (company_name) {
defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("search", [[["name", "=", company_name]]]).then(function (data) {
to_change.parent_id = data[0] || false;
}));
if (!entity.parent_id) {
var company_name = positions[0].company ? positions[0].company.name : false;
if (company_name) {
defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("search", [[["name", "=", company_name]]]).then(function (data) {
if(data[0]) to_change.parent_id = data[0];
}));
}
}
}
if (entity.parent_id) {
to_change.parent_id = entity.parent_id;
}
to_change.linkedin_url = to_change.linkedin_public_url = entity.publicProfileUrl || false;
to_change.linkedin_id = entity.id || false;
// find similar partners
defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("search", [[
"|", ["linkedin_id", "=", entity.id], "&", ["linkedin_id", "=", false],
"|", ["name", "ilike", entity.firstName +"%"+ entity.lastName], ["name", "ilike", entity.lastName +"%"+ entity.firstName]
]]).then(function (data) {
to_change.id = data[0] || false;
}));
if (search_similar_partner) {
defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("search", [[
"|", ["linkedin_id", "=", to_change.linkedin_id], "&", ["linkedin_id", "=", false],
"|", ["name", "ilike", entity.firstName +"%"+ entity.lastName], ["name", "ilike", entity.lastName +"%"+ entity.firstName]
]]).then(function (data) {
to_change.id = data[0] || false;
if (to_change.id) {
// remove data if allready set
defs.push(new instance.web.DataSetSearch(this, 'res.partner').call("read", [[to_change.id], [
"image",
"mobile",
"phone",
"parent_id",
"name",
"email",
"function",
"linkedin_id",
]]).then(function (partners) {
if (partners[0].linkedin_id && partners[0].linkedin_id != to_change.linkedin_id) {
delete to_change.id;
} else {
_.each(partners[0], function (val, key) {
if (val) {
to_change[key] = val;
}
});
}
}));
}
}));
}
}
return $.when.apply($, defs).then(function() {