chore: import enterprise addons 19.0 bulk snapshot

This commit is contained in:
1b-agent committed 2026-09-16 10:13:08 +00:00
commit ca4af030d3
39951 files changed
+15570005

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
width="50"
height="50"
viewBox="0 0 50 50"
version="1.1"
id="svg52"
sodipodi:docname="icon.svg"
xml:space="preserve"
inkscape:export-filename="icon.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg">
<svg:defs id="defs56" />
<sodipodi:namedview
id="namedview54"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="16.969124"
inkscape:cx="22.570405"
inkscape:cy="30.437634"
inkscape:window-width="1920"
inkscape:window-height="1052"
inkscape:window-x="0"
inkscape:window-y="1080"
inkscape:window-maximized="1"
inkscape:current-layer="svg52" />
<svg:path
d="M32 25a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z"
fill="#985184"
id="path46" />
<svg:path
d="M25 46C13.402 46 4 36.598 4 25S13.402 4 25 4s21 9.402 21 21c0 5.799-2.35 11.049-6.15 14.85l-6.365-6.365A11.964 11.964 0 0 0 37 25c0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12v9Z"
fill="#1AD3BB"
id="path48" />
<svg:path
d="m 46.460554,37.061343 a 9.4843614,9.6263249 0 1 1 -18.968722,0 9.4843614,9.6263249 0 0 1 18.968722,0 z"
fill="#985184"
id="path46-3"
style="stroke-width:1.36501" />
<svg:path
fill-rule="evenodd"
clip-rule="evenodd"
d="M25 37a11.958 11.958 0 0 1-8.345-3.377A9 9 0 0 0 25 46h13a9 9 0 0 0-9-9h-4Z"
fill="#985184"
id="path50" />
<svg:path
fill="#fdbb45"
d="M 37.637259,26.914338 A 10.586555,10.586555 0 0 0 27.050705,37.500893 10.586555,10.586555 0 0 0 37.637259,48.087447 10.586555,10.586555 0 0 0 48.223814,37.500893 10.586555,10.586555 0 0 0 37.637259,26.914338 Z m -0.396994,0.649751 v 3.808602 c -1.557283,0.108954 -5.48838,1.382868 -5.603509,5.731207 h -3.633039 c 0.105339,-7.285755 6.700759,-9.382689 9.236548,-9.539809 z m 0.793989,0.03854 c 0.02628,0.0069 0.05064,0.01454 0.07146,0.02293 3.4768,1.397292 3.719848,9.577214 3.398372,11.823945 l -1.609951,-1.006289 c 0.15377,-1.515642 -0.03979,-5.851147 -1.859882,-6.919944 z m -9.869402,10.295248 h 3.793337 c 0.859496,0.682392 3.411078,1.525479 7.362156,1.123058 l 1.662971,1.039379 C 33.552173,40.898737 29.046799,39.063511 28.164938,37.897887 Z"
id="path162"
style="stroke-width:0.0441104" />
</svg:svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@@ -0,0 +1,15 @@
.o_field_integration_state_selection{
&:has(.ribbon) {
display: block !important;
}
.ribbon {
.text-bg-muted {
background-color: gray;
}
}
}
.o_kanban_label_width {
display: inline-block;
width: 3.5em;
}
@@ -0,0 +1,51 @@
import { FormController } from "@web/views/form/form_controller";
import { useService } from "@web/core/utils/hooks";
import { _t } from "@web/core/l10n/translation";
export class JobPostNoSaveFormController extends FormController {
static template = "hr_recruitment_integration_base.job_post_no_save_form_template";
setup() {
super.setup();
this.action = useService("action");
this.orm = useService("orm");
}
/**
* @override
*/
getStaticActionMenuItems() {
const { activeActions } = this.archInfo;
return {
duplicate: {
isAvailable: () => activeActions.edit,
sequence: 30,
icon: "fa fa-clone",
description: _t("Duplicate"),
callback: () => this.duplicateRecord(),
},
delete: {
isAvailable: () => activeActions.delete && !this.model.root.isNew,
sequence: 40,
icon: "fa fa-trash-o",
description: _t("Delete"),
callback: () => this.deleteRecord(),
skipSave: true,
},
};
}
/**
* @override
*/
async duplicateRecord() {
const action = await this.orm.call(
"hr.job.post",
"action_post_job",
[this.model.root.resId]
);
this.action.doAction(action);
}
}
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-name="hr_recruitment_integration_base.job_post_no_save_form_template"
t-inherit="web.FormView"
t-inherit-mode="primary">
<xpath expr="//Layout/t[@t-set-slot='control-panel-status-indicator']"
position="replace">
</xpath>
</t>
</templates>
@@ -0,0 +1,8 @@
import { registry } from "@web/core/registry";
import { formView } from "@web/views/form/form_view";
import { JobPostNoSaveFormController } from "./job_post_no_save_controller";
registry.category("views").add("job_post_no_save_form", {
...formView,
Controller: JobPostNoSaveFormController,
});
@@ -0,0 +1,66 @@
import { Component } from "@odoo/owl";
import { registry } from '@web/core/registry';
import { standardFieldProps } from "@web/views/fields/standard_field_props";
export class IntegrationStateSelectionField extends Component {
static template = "hr_recruitment_integration_base.IntegrationStateSelection";
static props = {
...standardFieldProps,
ribbon: { type: Boolean, optional: true },
}
setup() {
super.setup();
this.colors = {
'pending': ["info", "info"],
'warning': ["warning", "warning"],
'expired': ["muted", "muted"],
'deleted': ["muted", "secondary"],
'failure': ["danger", "danger"],
'success': ["success", "success"]
};
this.titles = {
'pending': "pending",
'warning': "warning",
'expired': "expired",
'deleted': "deleted",
'failure': "issue",
'success': "published",
}
}
get imgClassNames() {
return `fa fa-fw o_button_icon fa-circle${this.value == 'deleted' ? "-o" : ""} text-${this.color[0]}`
}
get ribbonClassNames() {
return `text-bg-${this.color[1]}`
}
get color() {
return this.colors[this.value];
}
get title() {
return this.titles[this.value];
}
get value() {
return this.props.record.data[this.props.name];
}
}
export const integrationStateSelectionField = {
component: IntegrationStateSelectionField,
supportedOptions: [
{
name: "ribbon",
type: "boolean"
}
],
extractProps({ options }) {
return {'ribbon': Boolean(options.ribbon)};
},
};
registry.category("fields").add("integration_state_selection", integrationStateSelectionField);
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="hr_recruitment_integration_base.IntegrationStateSelection">
<t t-if="props.ribbon">
<div class="ribbon ribbon-top-right">
<span t-att-class="ribbonClassNames">
<t t-esc="title"/>
</span>
</div>
</t>
<t t-else="">
<div t-att-title="title">
<i t-att-class="imgClassNames"/>
</div>
</t>
</t>
</templates>