230 lines
6.4 KiB
JavaScript
230 lines
6.4 KiB
JavaScript
import { mailModels } from "@mail/../tests/mail_test_helpers";
|
|
import { defineModels, fields, models } from "@web/../tests/web_test_helpers";
|
|
|
|
export class CalendarEvent extends models.Model {
|
|
_name = "calendar.event";
|
|
|
|
id = fields.Integer({ string: "ID" });
|
|
active = fields.Boolean({ string: "Active" });
|
|
name = fields.Char({ string: "Name" });
|
|
user_id = fields.Many2one({ string: "User", relation: "res.users" });
|
|
partner_id = fields.Many2one({
|
|
string: "Partner",
|
|
relation: "res.partner",
|
|
related: "user_id.partner_id.id",
|
|
});
|
|
start_date = fields.Date({ string: "Start date" });
|
|
stop_date = fields.Date({ string: "Stop date" });
|
|
start = fields.Datetime({ string: "Start datetime" });
|
|
stop = fields.Datetime({ string: "Stop datetime" });
|
|
allday = fields.Boolean({ string: "Allday" });
|
|
partner_ids = fields.Many2many({ string: "Attendees", relation: "res.partner" });
|
|
resource_ids = fields.Many2many({ string: "Resources", relation: "appointment.resource" });
|
|
appointment_status = fields.Selection({
|
|
selection: [
|
|
['cancelled', 'Cancelled'],
|
|
['request', 'Request'],
|
|
['booked', 'Booked'],
|
|
['attended', 'Checked-In'],
|
|
['no_show', 'No Show'],
|
|
],
|
|
string: "Appointment Status",
|
|
});
|
|
appointment_type_id = fields.Many2one({
|
|
string: "Appointment Type",
|
|
relation: "appointment.type",
|
|
});
|
|
|
|
_records = [
|
|
{
|
|
id: 1,
|
|
active: true,
|
|
user_id: 100,
|
|
partner_id: 100,
|
|
name: "Event 1",
|
|
start: "2022-01-12 10:00:00",
|
|
stop: "2022-01-12 11:00:00",
|
|
allday: false,
|
|
appointment_status: 'booked',
|
|
partner_ids: [100, 214],
|
|
},
|
|
{
|
|
id: 2,
|
|
active: true,
|
|
user_id: 214,
|
|
partner_id: 214,
|
|
name: "Event 2",
|
|
start: "2022-01-05 10:00:00",
|
|
stop: "2022-01-05 11:00:00",
|
|
allday: false,
|
|
appointment_status: 'booked',
|
|
partner_ids: [214, 216],
|
|
},
|
|
{
|
|
id: 3,
|
|
active: true,
|
|
user_id: 216,
|
|
partner_id: 216,
|
|
name: "Event 3",
|
|
start: "2022-01-05 10:00:00",
|
|
stop: "2022-01-05 11:00:00",
|
|
allday: false,
|
|
appointment_status: 'booked',
|
|
partner_ids: [216, 100, 214, 217],
|
|
},
|
|
];
|
|
has_access = function () {
|
|
return Promise.resolve(true);
|
|
};
|
|
}
|
|
|
|
export class AppointmentType extends models.Model {
|
|
_name = "appointment.type";
|
|
|
|
name = fields.Char();
|
|
website_url = fields.Char();
|
|
staff_user_ids = fields.Many2many({ relation: "res.users" });
|
|
website_published = fields.Boolean();
|
|
slot_ids = fields.One2many({ relation: "appointment.slot" });
|
|
schedule_based_on = fields.Selection({
|
|
selection: [
|
|
["users", "Users"],
|
|
["resources", "Resources"],
|
|
],
|
|
});
|
|
category = fields.Selection({
|
|
selection: [
|
|
["website", "Website"],
|
|
["custom", "Specific Slots"],
|
|
],
|
|
});
|
|
|
|
_records = [
|
|
{
|
|
id: 1,
|
|
name: "Very Interesting Meeting",
|
|
website_url: "/appointment/1",
|
|
website_published: true,
|
|
schedule_based_on: "users",
|
|
staff_user_ids: [214, 216],
|
|
category: "website",
|
|
},
|
|
{
|
|
id: 2,
|
|
name: "Test Appointment",
|
|
website_url: "/appointment/2",
|
|
website_published: true,
|
|
schedule_based_on: "users",
|
|
staff_user_ids: [100],
|
|
category: "website",
|
|
},
|
|
];
|
|
}
|
|
|
|
class AppointmentResource extends models.Model {
|
|
_name = "appointment.resource";
|
|
}
|
|
|
|
export class AppointmentSlot extends models.Model {
|
|
_name = "appointment.slot";
|
|
|
|
appointment_type_id = fields.Many2one({ relation: "appointment.type" });
|
|
start_datetime = fields.Datetime({ string: "Start" });
|
|
end_datetime = fields.Datetime({ string: "End" });
|
|
duration = fields.Float({ string: "Duration" });
|
|
slot_type = fields.Selection({
|
|
string: "Slot Type",
|
|
selection: [
|
|
["recurring", "Regular"],
|
|
["unique", "One Shot"],
|
|
],
|
|
});
|
|
}
|
|
|
|
export class FilterPartner extends models.Model {
|
|
_name = "filter.partner";
|
|
|
|
id = fields.Integer({ string: "ID", type: "integer" });
|
|
user_id = fields.Many2one({ string: "user", relation: "res.users" });
|
|
partner_id = fields.Many2one({
|
|
string: "partner",
|
|
relation: "res.partner",
|
|
});
|
|
partner_checked = fields.Boolean({ string: "checked", type: "boolean" });
|
|
|
|
_records = [
|
|
{
|
|
id: 4,
|
|
user_id: 100,
|
|
partner_id: 100,
|
|
partner_checked: true,
|
|
},
|
|
{
|
|
id: 5,
|
|
user_id: 214,
|
|
partner_id: 214,
|
|
partner_checked: true,
|
|
},
|
|
];
|
|
}
|
|
|
|
export class ResPartner extends mailModels.ResPartner {
|
|
_records = [
|
|
...mailModels.ResPartner._records,
|
|
{
|
|
id: 100,
|
|
display_name: "Partner 1",
|
|
name: "Partner 1",
|
|
email: "partner1@test.lan",
|
|
phone: "0467121212",
|
|
user_ids: [100],
|
|
},
|
|
{
|
|
id: 214,
|
|
display_name: "Partner 214",
|
|
name: "Partner 214",
|
|
email: "",
|
|
phone: "012123123",
|
|
user_ids: [214],
|
|
},
|
|
{
|
|
id: 216,
|
|
display_name: "Partner 216",
|
|
name: "Partner 216",
|
|
email: "partner216@test.lan",
|
|
phone: "",
|
|
user_ids: [216],
|
|
},
|
|
{
|
|
id: 217,
|
|
display_name: "Contact Partner",
|
|
name: "Contact Partner",
|
|
email: "partner@contact.lan",
|
|
phone: "",
|
|
user_ids: [],
|
|
},
|
|
];
|
|
}
|
|
|
|
export class ResUsers extends mailModels.ResUsers {
|
|
_records = [
|
|
...mailModels.ResUsers._records,
|
|
{ id: 100, name: "User 1", partner_id: 100 },
|
|
{ id: 214, name: "User 214", partner_id: 214 },
|
|
{ id: 216, name: "User 216", partner_id: 216 },
|
|
];
|
|
}
|
|
|
|
export function defineAppointmentModels() {
|
|
return defineModels({
|
|
...mailModels,
|
|
AppointmentResource,
|
|
AppointmentSlot,
|
|
AppointmentType,
|
|
CalendarEvent,
|
|
FilterPartner,
|
|
ResPartner,
|
|
ResUsers,
|
|
});
|
|
}
|