[REF] mail: replace Partner/Guest to Persona in mail.record/insert
As a step to simplify model insert from python. All data are formatted in a way to make data insert trivial in JS models. closes odoo/odoo#138760 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit is contained in:
@@ -12,10 +12,10 @@ class IrWebsocket(models.AbstractModel):
|
||||
def _get_im_status(self, im_status_ids_by_model):
|
||||
im_status = {}
|
||||
if 'res.partner' in im_status_ids_by_model:
|
||||
im_status['Partner'] = self.env['res.partner'].with_context(active_test=False).search_read(
|
||||
im_status['Persona'] = [{**p, 'type': "partner"} for p in self.env['res.partner'].with_context(active_test=False).search_read(
|
||||
[('id', 'in', im_status_ids_by_model['res.partner'])],
|
||||
['im_status']
|
||||
)
|
||||
)]
|
||||
return im_status
|
||||
|
||||
def _build_bus_channel_list(self, channels):
|
||||
|
||||
@@ -31,10 +31,10 @@ patch(MockServer.prototype, {
|
||||
const imStatus = {};
|
||||
const { "res.partner": partnerIds } = imStatusIdsByModel;
|
||||
if (partnerIds) {
|
||||
imStatus["Partner"] = this.mockSearchRead("res.partner", [[["id", "in", partnerIds]]], {
|
||||
imStatus["Persona"] = this.mockSearchRead("res.partner", [[["id", "in", partnerIds]]], {
|
||||
context: { active_test: false },
|
||||
fields: ["im_status"],
|
||||
});
|
||||
}).map((p) => ({ ...p, type: "partner" }));
|
||||
}
|
||||
return imStatus;
|
||||
},
|
||||
|
||||
@@ -8,12 +8,12 @@ class IrWebsocket(models.AbstractModel):
|
||||
def _get_im_status(self, data):
|
||||
im_status = super()._get_im_status(data)
|
||||
if "mail.guest" in data:
|
||||
im_status["Guest"] = (
|
||||
im_status["Persona"] += [{**g, 'type': "guest"} for g in (
|
||||
self.env["mail.guest"]
|
||||
.sudo()
|
||||
.with_context(active_test=False)
|
||||
.search_read([("id", "in", data["mail.guest"])], ["im_status"])
|
||||
)
|
||||
)]
|
||||
return im_status
|
||||
|
||||
@add_guest_to_context
|
||||
|
||||
@@ -109,10 +109,11 @@ class MailGuest(models.Model):
|
||||
self.name = name
|
||||
guest_data = {
|
||||
'id': self.id,
|
||||
'name': self.name
|
||||
'name': self.name,
|
||||
'type': "guest"
|
||||
}
|
||||
bus_notifs = [(channel, 'mail.record/insert', {'Guest': guest_data}) for channel in self.channel_ids]
|
||||
bus_notifs.append((self, 'mail.record/insert', {'Guest': guest_data}))
|
||||
bus_notifs = [(channel, 'mail.record/insert', {'Persona': guest_data}) for channel in self.channel_ids]
|
||||
bus_notifs.append((self, 'mail.record/insert', {'Persona': guest_data}))
|
||||
self.env['bus.bus']._sendmany(bus_notifs)
|
||||
|
||||
def _update_timezone(self, timezone):
|
||||
|
||||
@@ -89,20 +89,12 @@ export class MailCoreCommon {
|
||||
if (payload.Thread) {
|
||||
this.store.Thread.insert(payload.Thread);
|
||||
}
|
||||
if (payload.Partner) {
|
||||
const partners = Array.isArray(payload.Partner)
|
||||
? payload.Partner
|
||||
: [payload.Partner];
|
||||
for (const partner of partners) {
|
||||
if (partner.im_status) {
|
||||
this.store.Persona.insert({ ...partner, type: "partner" });
|
||||
}
|
||||
}
|
||||
}
|
||||
if (payload.Guest) {
|
||||
const guests = Array.isArray(payload.Guest) ? payload.Guest : [payload.Guest];
|
||||
for (const guest of guests) {
|
||||
this.store.Persona.insert({ ...guest, type: "guest" });
|
||||
if (payload.Persona) {
|
||||
const personas = Array.isArray(payload.Persona)
|
||||
? payload.Persona
|
||||
: [payload.Persona];
|
||||
for (const persona of personas) {
|
||||
this.store.Persona.insert(persona);
|
||||
}
|
||||
}
|
||||
const { LinkPreview: linkPreviews } = payload;
|
||||
|
||||
@@ -91,7 +91,7 @@ QUnit.test("Can handle im_status of unknown partner", async (assert) => {
|
||||
});
|
||||
const [channel] = pyEnv["discuss.channel"].searchRead([["id", "=", channelId]]);
|
||||
pyEnv["bus.bus"]._sendone(channel, "mail.record/insert", {
|
||||
Partner: { im_status: "online", id: partnerId },
|
||||
Persona: { im_status: "online", id: partnerId, type: "partner" },
|
||||
});
|
||||
await nextTick();
|
||||
const persona = env.services["mail.store"].Persona.get({ type: "partner", id: partnerId });
|
||||
|
||||
@@ -18,10 +18,14 @@ patch(MockServer.prototype, {
|
||||
const imStatus = super._mockIrWebsocket__getImStatus(imStatusIdsByModel);
|
||||
const { "mail.guest": guestIds } = imStatusIdsByModel;
|
||||
if (guestIds) {
|
||||
imStatus["Guest"] = this.pyEnv["mail.guest"].searchRead([["id", "in", guestIds]], {
|
||||
context: { active_test: false },
|
||||
fields: ["im_status"],
|
||||
});
|
||||
imStatus["Persona"] = imStatus["Persona"].concat(
|
||||
this.pyEnv["mail.guest"]
|
||||
.searchRead([["id", "in", guestIds]], {
|
||||
context: { active_test: false },
|
||||
fields: ["im_status"],
|
||||
})
|
||||
.map((g) => ({ ...g, type: "guest" }))
|
||||
);
|
||||
}
|
||||
return imStatus;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user