Eliminate Python dependency: embed frontend assets in odoo-go

- Copy all OWL frontend assets (JS/CSS/XML/fonts/images) into frontend/
  directory (2925 files, 43MB) — no more runtime reads from Python Odoo
- Replace OdooAddonsPath config with FrontendDir pointing to local frontend/
- Rewire bundle.go, static.go, templates.go, webclient.go to read from
  frontend/ instead of external Python Odoo addons directory
- Auto-detect frontend/ and build/ dirs relative to binary in main.go
- Delete obsolete Python helper scripts (tools/*.py)

The Go server is now fully self-contained: single binary + frontend/ folder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc
2026-03-31 23:09:12 +02:00
parent 0ed29fe2fd
commit 8741282322
2933 changed files with 280644 additions and 264 deletions

View File

@@ -0,0 +1,55 @@
import { Domain } from "@web/core/domain";
import { ActivityMenu } from "@mail/core/web/activity_menu";
import { patch } from "@web/core/utils/patch";
patch(ActivityMenu.prototype, {
availableViews(group) {
if (group.model === "crm.lead") {
return [
[false, "list"],
[false, "kanban"],
[false, "form"],
[false, "calendar"],
[false, "pivot"],
[false, "graph"],
[false, "activity"],
];
}
return super.availableViews(...arguments);
},
openActivityGroup(group, filter = "all", newWindow) {
// fetch the data from the button otherwise fetch the ones from the parent (.o_ActivityMenuView_activityGroup).
const context = {};
if (group.model === "crm.lead") {
this.dropdown.close();
if (filter === "my" || filter === "all") {
context["search_default_activities_overdue"] = 1;
context["search_default_activities_today"] = 1;
} else if (filter === "overdue") {
context["search_default_activities_overdue"] = 1;
} else if (filter === "today") {
context["search_default_activities_today"] = 1;
} else {
context["search_default_activities_upcoming_all"] = 1;
}
// Necessary because activity_ids of mail.activity.mixin has auto_join
// So, duplicates are faking the count and "Load more" doesn't show up
context["force_search_count"] = 1;
this.action.loadAction("crm.crm_lead_action_my_activities").then((action) => {
// to show lost leads in the activity
action.domain = Domain.and([
action.domain || [],
[["active", "in", [true, false]]],
]).toList();
this.action.doAction(action, {
newWindow,
additionalContext: context,
clearBreadcrumbs: true,
});
});
} else {
return super.openActivityGroup(...arguments);
}
},
});