19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:00 +01:00
parent a1137a1456
commit e1d89e11e3
2789 changed files with 1093187 additions and 605897 deletions

View file

@ -0,0 +1,43 @@
import { registry } from "@web/core/registry";
import { formView } from "@web/views/form/form_view";
import { FormRenderer } from "@web/views/form/form_renderer";
import { EmployeeFormController } from "@hr/views/form_view";
import { onMounted } from "@odoo/owl";
class BadgeTabRenderer extends FormRenderer {
setup() {
super.setup();
onMounted(() => {
const record = this.props.record
const context = record.context?.params || record.context;
if (context?.open_badges_tab && record.resModel === "hr.employee.public") {
const tab = document.querySelector('[name="received_badges"]');
if (tab) {
tab.click();
setTimeout(() => {
const badges = record.data.badge_ids?.records || [];
const badgeToHighlight = badges.find(badge => badge.resId === context.user_badge_id);
if (!badgeToHighlight) return;
const userBadge = document.querySelector(`[data-id="${badgeToHighlight.id}"]`);
if (!userBadge) return;
userBadge.classList.add('user-badge', 'user-badge-lift');
setTimeout(() => {
userBadge.classList.remove('user-badge-lift');
}, 2000);
},100);
}
}
});
}
}
const hrEmployeeFormView = {
...formView,
Controller: EmployeeFormController,
Renderer: BadgeTabRenderer,
}
registry.category("views").add("hr_employee_form", hrEmployeeFormView, { force: true });

View file

@ -0,0 +1,44 @@
import { MessagingMenu } from "@mail/core/public_web/messaging_menu";
import { patch } from "@web/core/utils/patch";
import { useService } from "@web/core/utils/hooks";
import { user } from "@web/core/user";
patch(MessagingMenu.prototype, {
setup() {
super.setup();
this.action = useService("action");
this.orm = useService("orm");
},
onClickThread(isMarkAsRead, thread, message) {
if (!isMarkAsRead && thread.model === "gamification.badge.user") {
this.openEmployeeView(thread);
} else {
super.onClickThread(...arguments);
}
},
async openEmployeeView(thread) {
const employeeId = await this.orm.searchRead("hr.employee.public",
[["user_id", "=", user.userId],
["company_id", "in", user.activeCompany.id]],
["id"]
)
if (employeeId.length > 0) {
await this.action.doAction({
type: "ir.actions.act_window",
res_model: 'hr.employee.public',
res_id: employeeId[0].id,
views: [[false, "form"]],
target: "current",
context: {
open_badges_tab: true,
user_badge_id: thread.id
},
});
this.markAsRead(thread);
this.dropdown.close();
}
}
});

View file

@ -0,0 +1,35 @@
// the nocontent helper in fields for hr employee gamification badge view form
.o_field_nocontent {
display: flex;
justify-content: center;
align-items: center;
position: relative;
height: 200px;
width: 100%;
.o_nocontent_help {
@include o-nocontent-empty;
.o_view_nocontent_neutral_face:before {
@extend %o-nocontent-init-image;
width: 120px;
height: 140px;
background: transparent url(/web/static/img/neutral_face.svg) no-repeat center;
}
}
}
.user-badge {
transition: transform 1s ease, box-shadow 1s ease;
}
.user-badge-lift {
transform: translateY(-10px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25);
border-radius: 4px;
}
.grant_badge_btn {
border-radius: 0.5rem !important;
width: 18rem;
}