Initial commit: Core packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:45 +02:00
commit 12c29a983b
9512 changed files with 8379910 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="70" height="70" viewBox="0 0 70 70">
<defs>
<path id="icon-a" d="M4,5.35309892e-14 C36.4160122,9.87060235e-15 58.0836068,-3.97961823e-14 65,5.07020818e-14 C69,6.733808e-14 70,1 70,5 C70,43.0488877 70,62.4235458 70,65 C70,69 69,70 65,70 C61,70 9,70 4,70 C1,70 7.10542736e-15,69 7.10542736e-15,65 C7.25721566e-15,62.4676575 3.83358709e-14,41.8005206 3.60818146e-14,5 C-1.13686838e-13,1 1,5.75716207e-14 4,5.35309892e-14 Z"/>
<linearGradient id="icon-c" x1="100%" x2="0%" y1="0%" y2="100%">
<stop offset="0%" stop-color="#269396"/>
<stop offset="100%" stop-color="#218689"/>
</linearGradient>
<path id="icon-d" d="M24.4715571,29.3561696 L47.6197052,29.3561696 L47.6197052,43.4186696 L24.4715571,43.4186696 L24.4715571,29.3561696 Z M53.4067423,36.3874196 C53.4067423,38.32907 54.9612851,39.9030446 56.8789645,39.9030446 L56.8789645,46.9342946 C56.8789645,48.875945 55.3244217,50.4499196 53.4067423,50.4499196 L18.6845201,50.4499196 C16.7668407,50.4499196 15.2122978,48.875945 15.2122978,46.9342946 L15.2122978,39.9030446 C17.1299772,39.9030446 18.6845201,38.32907 18.6845201,36.3874196 C18.6845201,34.4457692 17.1299772,32.8717946 15.2122978,32.8717946 L15.2122978,25.8405446 C15.2122978,23.8988942 16.7668407,22.3249196 18.6845201,22.3249196 L53.4067423,22.3249196 C55.3244217,22.3249196 56.8789645,23.8988942 56.8789645,25.8405446 L56.8789645,32.8717946 C54.9612851,32.8717946 53.4067423,34.4457692 53.4067423,36.3874196 Z M49.9345201,28.7702321 C49.9345201,27.7994069 49.1572486,27.0124196 48.1984089,27.0124196 L23.8928534,27.0124196 C22.9340137,27.0124196 22.1567423,27.7994069 22.1567423,28.7702321 L22.1567423,44.0046071 C22.1567423,44.9754323 22.9340137,45.7624196 23.8928534,45.7624196 L48.1984089,45.7624196 C49.1572486,45.7624196 49.9345201,44.9754323 49.9345201,44.0046071 L49.9345201,28.7702321 Z"/>
<path id="icon-e" d="M24.4715571,27.3561696 L47.6197052,27.3561696 L47.6197052,41.4186696 L24.4715571,41.4186696 L24.4715571,27.3561696 Z M53.4067423,34.3874196 C53.4067423,36.32907 54.9612851,37.9030446 56.8789645,37.9030446 L56.8789645,44.9342946 C56.8789645,46.875945 55.3244217,48.4499196 53.4067423,48.4499196 L18.6845201,48.4499196 C16.7668407,48.4499196 15.2122978,46.875945 15.2122978,44.9342946 L15.2122978,37.9030446 C17.1299772,37.9030446 18.6845201,36.32907 18.6845201,34.3874196 C18.6845201,32.4457692 17.1299772,30.8717946 15.2122978,30.8717946 L15.2122978,23.8405446 C15.2122978,21.8988942 16.7668407,20.3249196 18.6845201,20.3249196 L53.4067423,20.3249196 C55.3244217,20.3249196 56.8789645,21.8988942 56.8789645,23.8405446 L56.8789645,30.8717946 C54.9612851,30.8717946 53.4067423,32.4457692 53.4067423,34.3874196 Z M49.9345201,26.7702321 C49.9345201,25.7994069 49.1572486,25.0124196 48.1984089,25.0124196 L23.8928534,25.0124196 C22.9340137,25.0124196 22.1567423,25.7994069 22.1567423,26.7702321 L22.1567423,42.0046071 C22.1567423,42.9754323 22.9340137,43.7624196 23.8928534,43.7624196 L48.1984089,43.7624196 C49.1572486,43.7624196 49.9345201,42.9754323 49.9345201,42.0046071 L49.9345201,26.7702321 Z"/>
</defs>
<g fill="none" fill-rule="evenodd">
<mask id="icon-b" fill="#fff">
<use xlink:href="#icon-a"/>
</mask>
<g mask="url(#icon-b)">
<rect width="70" height="70" fill="url(#icon-c)"/>
<path fill="#FFF" fill-opacity=".383" d="M4,1.8 L65,1.8 C67.6666667,1.8 69.3333333,1.13333333 70,-0.2 C70,2.46666667 70,3.46666667 70,2.8 L1.10547097e-14,2.8 C-1.65952376e-14,3.46666667 -2.9161925e-14,2.46666667 -2.66453526e-14,-0.2 C0.666666667,1.13333333 2,1.8 4,1.8 Z" transform="matrix(1 0 0 -1 0 2.8)"/>
<path fill="#393939" d="M35,58 L4,58 C2,58 -7.10542736e-15,57.8520408 0,53.8571429 L2.0734159e-16,30.9596526 L29,0 L37,8.28571429 L58,29 L35,58 Z" opacity=".324" transform="translate(0 12)"/>
<path fill="#000" fill-opacity=".383" d="M4,4 L65,4 C67.6666667,4 69.3333333,3 70,1 C70,3.66666667 70,5 70,5 L1.77635684e-15,5 C1.77635684e-15,5 1.77635684e-15,3.66666667 1.77635684e-15,1 C0.666666667,3 2,4 4,4 Z" transform="translate(0 65)"/>
<use fill="#000" fill-rule="nonzero" opacity=".3" transform="rotate(45 36.046 36.387)" xlink:href="#icon-d"/>
<use fill="#FFF" fill-rule="nonzero" transform="rotate(45 36.046 34.387)" xlink:href="#icon-e"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1,30 @@
/** @odoo-module **/
import { registry } from "@web/core/registry";
import { _lt } from "@web/core/l10n/translation";
import { standardFieldProps } from "@web/views/fields/standard_field_props";
const { Component } = owl;
export class IconSelectionField extends Component {
get icon() {
return this.props.icons[this.props.value];
}
get title() {
return this.props.value.charAt(0).toUpperCase() + this.props.value.slice(1);
}
}
IconSelectionField.template = "event.IconSelectionField";
IconSelectionField.props = {
...standardFieldProps,
icons: Object,
};
IconSelectionField.displayName = _lt("Icon Selection");
IconSelectionField.supportedTypes = ["char", "text", "selection"];
IconSelectionField.extractProps = ({ attrs }) => ({
icons: attrs.options,
});
registry.category("fields").add("event_icon_selection", IconSelectionField);

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<templates xml:space="preserve">
<t t-name="event.IconSelectionField" owl="1">
<i t-att-class="icon" t-att-data-tooltip="title"/>
</t>
</templates>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1,78 @@
odoo.define('event.event_steps', function (require) {
"use strict";
var core = require('web.core');
var EventAdditionalTourSteps = core.Class.extend({
_get_website_event_steps: function () {
return [false];
},
});
return EventAdditionalTourSteps;
});
odoo.define('event.event_tour', function (require) {
"use strict";
const {_t} = require('web.core');
const {Markup} = require('web.utils');
var tour = require('web_tour.tour');
var EventAdditionalTourSteps = require('event.event_steps');
tour.register('event_tour', {
url: '/web',
rainbowManMessage: _t("Great! Now all you have to do is wait for your attendees to show up!"),
sequence: 210,
}, [tour.stepUtils.showAppsMenuItem(), {
trigger: '.o_app[data-menu-xmlid="event.event_main_menu"]',
content: Markup(_t("Ready to <b>organize events</b> in a few minutes? Let's get started!")),
position: 'bottom',
edition: 'enterprise',
}, {
trigger: '.o_app[data-menu-xmlid="event.event_main_menu"]',
content: Markup(_t("Ready to <b>organize events</b> in a few minutes? Let's get started!")),
edition: 'community',
}, {
trigger: '.o-kanban-button-new',
extra_trigger: '.o_event_kanban_view',
content: Markup(_t("Let's create your first <b>event</b>.")),
position: 'bottom',
width: 175,
}, {
trigger: '.o_event_form_view input[id="name"]',
content: Markup(_t("This is the <b>name</b> your guests will see when registering.")),
run: 'text Odoo Experience 2020',
}, {
trigger: '.o_event_form_view div[name="date_end"]',
content: _t("Open date range picker. Pick a Start date for your event"),
run: function () {
$('input[id="date_begin"]').val('09/30/2020 08:00:00').change();
$('input[id="date_end"]').val('10/02/2020 23:00:00').change();
$('.o_event_form_view input[id="date_end"]').click();
},
}, {
content: _t("Apply change."),
trigger: '.daterangepicker .applyBtn',
in_modal: false,
}, {
trigger: '.o_event_form_view div[name="event_ticket_ids"] .o_field_x2many_list_row_add a',
content: Markup(_t("Ticket types allow you to distinguish your attendees. Let's <b>create</b> a new one.")),
}, tour.stepUtils.autoExpandMoreButtons(),
...new EventAdditionalTourSteps()._get_website_event_steps(), {
trigger: '.o_event_form_view div[name="stage_id"]',
content: _t("Now that your event is ready, click here to move it to another stage."),
position: 'bottom',
}, {
trigger: 'ol.breadcrumb li.breadcrumb-item:first',
extra_trigger: '.o_event_form_view div[name="stage_id"]',
content: Markup(_t("Use the <b>breadcrumbs</b> to go back to your kanban overview.")),
position: 'bottom',
run: 'click',
}].filter(Boolean));
});

View file

@ -0,0 +1,61 @@
.o_kanban_view .o_event_kanban_view {
.o_kanban_record > div {
min-height: 140px;
}
.o_kanban_content {
.o_event_fontsize_09 {
font-size: .9rem;
}
.o_event_fontsize_11 {
font-size: 1.1rem;
}
.o_event_fontsize_20 {
font-size: 2rem;
}
}
}
.o_kanban_view .o_event_attendee_kanban_view {
@media (max-width: 768px) {
.o_event_registration_kanban {
min-height: 80px;
}
}
.oe_kanban_card_ribbon {
min-height: 95px;
.ribbon {
&::before, &::after {
display: none;
}
span {
padding: 5px;
font-size: small;
z-index: 0;
}
}
.ribbon-top-right {
margin-top: -1px;
span {
left: 7px;
right: 30px;
height: 25px;
top: 18px;
}
}
// Used for "Group By"
div.row {
min-height: 95px;
}
}
}
.o_event_registration_view_tree {
.o_list_button > .o_btn_cancel_registration {
color: $danger;
&:hover {
color: darken($danger, $link-shade-percentage);
}
}
}

View file

@ -0,0 +1,66 @@
.o_event_foldable_badge_container {
.o_event_foldable_badge_top {
height: 149.4mm;
&.o_event_foldable_badge_ticket {
border-left: 1px dashed black;
}
}
.o_event_foldable_badge_font_small {
font-size: .8rem;
}
.o_event_foldable_badge_bottom.o_event_foldable_badge_left {
border-top: 1px dashed black;
height: 148mm;
p {
margin: 0px; // to match editor style (.o_field_html p)
}
}
.o_event_foldable_badge_bottom.o_event_foldable_badge_right {
border-left: 1px dashed black;
border-top:1px dashed black;
height: 148mm;
background: white;
}
.o_event_foldable_badge_ticket {
background-repeat: no-repeat;
background-image: url(/event/static/src/img/report_foldable_badge_background.png);
.o_event_foldable_badge_ticket_wrapper {
background-color: white;
border: solid 1px #939393;
border-radius: .7rem;
margin: 0px 8px;
padding: 10px 3px;
font-size: 1.2rem;
box-shadow: -3px 3px 9px 0px rgba(0,0,0,0.51);
.o_event_foldable_badge_ticket_wrapper_top {
min-height: 80mm;
}
.o_event_foldable_badge_font_faded {
color: #939393;
}
.o_event_foldable_badge_barcode {
min-height: 35mm;
}
}
}
.o_event_foldable_badge_step {
position: absolute;
padding: 3px 9px;
top: 5mm;
left: 0mm;
border-radius: 50%;
background-color: black;
color: white;
}
}

View file

@ -0,0 +1,63 @@
.o_event_full_page_ticket_footer {
.o_event_full_page_ticket_powered_by {
font-size: .8rem;
line-height: 1rem;
}
}
.o_event_full_page_ticket_container {
z-index: 1;
background-repeat: no-repeat;
background-image: url(/event/static/src/img/report_full_page_ticket_background.png);
padding: 40px 40px 0px 40px;
.o_event_full_page_ticket_font_faded {
color: #939393;
}
.o_event_full_page_ticket_small {
font-size: .8rem;
}
.o_event_full_page_ticket_small_caps {
text-transform: uppercase;
font-size: .8rem;
}
.o_event_full_page_ticket_wrapper {
z-index: 2;
.o_event_full_page_ticket_details {
background-color: white;
border: solid 1px #939393;
border-radius: .7rem;
margin: 0px 8px;
padding: 10px 3px;
box-shadow: -3px 3px 9px 0px rgba(0,0,0,0.51);
.o_event_full_page_ticket_event_logo {
max-height: 50px;
}
.o_event_full_page_ticket_barcode {
padding-left: 30px;
.o_event_full_page_ticket_barcode_container {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
width: 67px;
img {
padding: 0px 10px;
}
}
}
}
}
.o_event_full_page_extra_instructions {
p {
margin: 0px; // to match editor style (.o_field_html p)
}
}
}

View file

@ -0,0 +1,6 @@
// The PDF layout behaves slightly differently from the layout shown in the report editor.
// This file gaps the differences with some additional custom rules to get a pixel perfect layout.
.o_event_full_page_ticket_footer {
// make sure to take entire with, including the margin imposed by "container-fluid"
width: calc(100% + 30px) !important;
}