You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.9 KiB
111 lines
3.9 KiB
# -*- coding: utf-8 -*-
|
|
################################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
|
|
# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
|
|
#
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
################################################################################
|
|
from datetime import date, timedelta
|
|
from odoo import http
|
|
from odoo.fields import Date
|
|
from odoo.http import request
|
|
|
|
|
|
class EventCalendar(http.Controller):
|
|
@http.route("/web_events_calendar_view/days_with_events",
|
|
auth="public", type="json", website=True)
|
|
def days_with_events(self, start, end):
|
|
"""Day with any events.
|
|
|
|
start:
|
|
Search events from that date.
|
|
|
|
end:
|
|
Search events until that date.
|
|
"""
|
|
events = request.env["event.event"].search([
|
|
"|",
|
|
("date_begin", "<=", end),
|
|
("date_end", ">=", start),
|
|
])
|
|
days = set()
|
|
one_day = timedelta(days=1)
|
|
start = Date.from_string(start)
|
|
end = Date.from_string(end)
|
|
for event in events:
|
|
now = max(Date.from_string(event.date_begin), start)
|
|
event_end = min(Date.from_string(event.date_end), end)
|
|
while now <= event_end:
|
|
days.add(now)
|
|
now += one_day
|
|
return [Date.to_string(day) for day in days]
|
|
|
|
@http.route("/web_events_calendar_view/events_for_day",
|
|
auth="public", type="json", website=True)
|
|
def events_for_day(self, day=None, limit=None):
|
|
"""Day wise list of events.
|
|
|
|
day:
|
|
Date in a string. If ``None``, we'll search for upcoming events
|
|
from today up to specified limit.
|
|
|
|
limit:
|
|
How many results to return.
|
|
"""
|
|
ref = day or Date.to_string(date.today())
|
|
domain = [
|
|
("date_end", ">=", ref),
|
|
]
|
|
if day:
|
|
domain.append(("date_begin", "<=", ref))
|
|
return request.env["event.event"].search_read(
|
|
domain=domain,
|
|
limit=limit,
|
|
fields=[
|
|
"date_begin_pred_located",
|
|
"name",
|
|
"event_type_id",
|
|
"website_published",
|
|
"website_url",
|
|
],
|
|
)
|
|
|
|
@http.route('/web_events_calendar_view/events', auth='public', type='json', website=True)
|
|
def get_events(self):
|
|
# Fetch events from the calendar.event model
|
|
ref = Date.to_string(date.today())
|
|
events = request.env['event.event'].sudo().search([("date_begin", ">=", ref)])
|
|
|
|
# Create a list of event dictionaries
|
|
event_data = []
|
|
for event in events:
|
|
event_dict = {
|
|
'title': event.name,
|
|
'start': event.date_begin.strftime('%Y-%m-%d'),
|
|
'display': 'background'
|
|
|
|
}
|
|
if event.date_end: # Check if the event has an end date
|
|
event_dict['end'] = event.date_end.strftime(
|
|
'%Y-%m-%d') # Format the end datetime as 'YYYY-MM-DD'
|
|
event_data.append(event_dict)
|
|
return event_data
|
|
|
|
@http.route(['/calendar_events'], type='http', auth="public",
|
|
website=True)
|
|
def calendar_events(self):
|
|
return request.render(
|
|
"web_events_calendar_view.global_events_calendar")
|
|
|