[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:
Alexandre Kühn
2023-10-23 20:07:29 +00:00
parent 39e56939fd
commit 09592c25fd
7 changed files with 25 additions and 28 deletions
+2 -2
View File
@@ -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;
},
+2 -2
View File
@@ -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
+4 -3
View File
@@ -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;
},