75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
/** @odoo-module */
|
|
|
|
import { AttendeeCalendarController } from "@calendar/views/attendee_calendar/attendee_calendar_controller";
|
|
import { patch } from "@web/core/utils/patch";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
import { useState, onWillStart } from "@odoo/owl";
|
|
|
|
patch(AttendeeCalendarController.prototype, {
|
|
setup() {
|
|
super.setup(...arguments);
|
|
this.orm = useService("orm");
|
|
this.notification = useService("notification");
|
|
this.fusionState = useState({
|
|
accounts: [],
|
|
syncing: false,
|
|
});
|
|
onWillStart(async () => {
|
|
await this._loadFusionAccounts();
|
|
});
|
|
},
|
|
|
|
get fusionAccounts() {
|
|
return this.fusionState.accounts;
|
|
},
|
|
|
|
get fusionSyncing() {
|
|
return this.fusionState.syncing;
|
|
},
|
|
|
|
async _loadFusionAccounts() {
|
|
try {
|
|
const accounts = await this.orm.call(
|
|
"fusion.calendar.account",
|
|
"get_user_accounts_status",
|
|
[],
|
|
);
|
|
this.fusionState.accounts = accounts;
|
|
} catch {
|
|
this.fusionState.accounts = [];
|
|
}
|
|
},
|
|
|
|
async onFusionSyncNow() {
|
|
this.fusionState.syncing = true;
|
|
try {
|
|
const result = await this.orm.call(
|
|
"fusion.calendar.account",
|
|
"sync_current_user",
|
|
[],
|
|
);
|
|
if (result.success) {
|
|
this.notification.add(
|
|
result.message || "Calendar synced successfully.",
|
|
{ type: "success" },
|
|
);
|
|
await this._loadFusionAccounts();
|
|
await this.model.load();
|
|
this.render(true);
|
|
} else {
|
|
this.notification.add(
|
|
result.error || "Sync failed.",
|
|
{ type: "danger" },
|
|
);
|
|
}
|
|
} catch (e) {
|
|
this.notification.add(
|
|
"Sync error: " + (e.message || "Unknown error"),
|
|
{ type: "danger" },
|
|
);
|
|
} finally {
|
|
this.fusionState.syncing = false;
|
|
}
|
|
},
|
|
});
|