[Plone-IT] formato data visualizzato male (aggiornamento II)
Giacomo Zanobini
g.zanobini a arpat.toscana.it
Lun 6 Lug 2009 12:31:25 UTC
mentre aspetto che qualcuno che sa dove mettere le mani, mi aiuti, ho
cercato di capire come funziona questo PloneBooking (che tempo fa, sulla
3.0 avevo provato ad installare..... io penso anche in quel caso si
trattasse della 2.2.1, ma lo feci copiando la cartella in Products)
dunque, dicevo, guardando il codice di
portal_skins/plonebooking_templates/plonebooking_macros
ho trovato questo pezzetto, che si occupa di scrivere la data, nel
formato giusto
/*<!-- ****************************************
** Day navigation
******************************************* -->
<metal:block metal:define-macro="day_navigation">
<h3 id="dateTitle">
<a tal:attributes="href string:${nav_base_url}&ts=${ts}"
tal:content="python: btool.getFormatedDate(dt)" />
</h3>
</metal:block>*/
dove:
> ts python:request.get('ts',
> btool.getTodayTs());
> dt python:getZDateTimeFromts(ts);
ho scoperto che se provo a "customizzare" il file, mi appare un errore
che dice
> Macro expansion failed
> exceptions.KeyError: 'macro_def'
potrebbe essere qui l'inghippo?
se provo a "customizzare" un file, non dovrebbe dare errore, giusto?
che ci sia un bug nel prodotto?
metto il codice per intero (della versione NON customizzata)......
magari qualcuno identifica l'errore (io ne ho trovato solo uno
d'ortografia nei commenti)
---------------------------------------------------------------
<!-- ****************************************
** View mode menu
******************************************* -->
<metal:block metal:define-macro="mode_menu"
i18n:domain="plonebooking"
tal:define="vocab python:btool.getViewModeVocabulary();">
<div id="mode-menu">
<select name="dmode"
tal:define="js_dview python:test(dmode == 'listing' and dview == 'year', 'month', dview);"
tal:attributes="tabindex tabindex/next;
onchange string:javascript:Booking.refreshFilter()"
tal:condition="python:len(available_modes) > 1">
<tal:modes tal:repeat="mode available_modes">
<option tal:define="title python:vocab.getValue(mode)"
tal:attributes="value mode;
selected python:test(mode == dmode, 'selected', None)"
tal:content="title" />
</tal:modes>
</select>
</div>
</metal:block>
<!-- ****************************************
** Day navigation
******************************************* -->
<metal:block metal:define-macro="day_navigation">
<h3 id="dateTitle">
<a tal:attributes="href string:${nav_base_url}&ts=${ts}"
tal:content="python: btool.getFormatedDate(dt)" />
</h3>
<div id="plonebooking-nav"
tal:define="prevdate python:btool.substractDays(ts);
nextdate python:btool.addDays(ts);
prevprevdate python:btool.substractDays(ts, days=7);
nextnextdate python:btool.addDays(ts, days=7);">
<div id="plonebooking-left-nav" >
<a tal:attributes="href string:${nav_base_url}&ts=${prevprevdate}">
<< <tal:block i18n:translate="label_previous_week">Previous week</tal:block>
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${prevdate}">
< <tal:block i18n:translate="label_previous_day">Previous day</tal:block>
</a>
</div>
<div id="plonebooking-right-nav">
<!-- the right part to go to next -->
<a tal:attributes="href string:${nav_base_url}&ts=${nextdate}">
<tal:block i18n:translate="label_next_day">Next day</tal:block> >
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${nextnextdate}">
<tal:block i18n:translate="label_next_week">Next week</tal:block> >>
</a>
</div>
</div>
</metal:block>
<!-- ****************************************
** Week navigation
******************************************* -->
<metal:block metal:define-macro="week_navigation">
<h3 id="dateTitle">
<a tal:attributes="href string:${nav_base_url}&ts=${ts}"
tal:content="python:btool.getFormatedWeekDate(week, year)" />
</h3>
<div id="plonebooking-nav"
tal:define="prevdate python:btool.substractWeeks(ts);
nextdate python:btool.addWeeks(ts);
prevprevdate python:btool.substractWeeks(ts, weeks=4);
nextnextdate python:btool.addWeeks(ts, weeks=4);">
<div id="plonebooking-left-nav" >
<a tal:attributes="href string:${nav_base_url}&ts=${prevprevdate}">
<< <tal:block i18n:translate="label_previous_4_weeks">Previous 4 weeks</tal:block>
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${prevdate}">
< <tal:block i18n:translate="label_previous_week">Previous week</tal:block>
</a>
</div>
<div id="plonebooking-right-nav">
<a tal:attributes="href string:${nav_base_url}&ts=${nextdate}">
<tal:block i18n:translate="label_next_week">Next week</tal:block> >
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${nextnextdate}">
<tal:block i18n:translate="label_next_4_weeks">Next 4 weeks</tal:block> >>
</a>
</div>
</div>
</metal:block>
<!-- ****************************************
** Month navigation
******************************************* -->
<metal:block metal:define-macro="month_navigation">
<h3 id="dateTitle">
<a tal:attributes="href string:${nav_base_url}&ts=${ts}"
tal:content="python:btool.getFormatedMonthDate(month, year)" />
</h3>
<div id="plonebooking-nav"
tal:define="prevdate python:btool.substractMonths(ts);
nextdate python:btool.addMonths(ts);
prevprevdate python:btool.substractMonths(ts, months=3);
nextnextdate python:btool.addMonths(ts, months=3);">
<div id="plonebooking-left-nav" >
<a tal:attributes="href string:${nav_base_url}&ts=${prevprevdate}">
<< <tal:block i18n:translate="label_previous_3_months">Previous 3 months</tal:block>
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${prevdate}">
< <tal:block i18n:translate="label_previous_month">Previous month</tal:block>
</a>
</div>
<div id="plonebooking-right-nav">
<a tal:attributes="href string:${nav_base_url}&ts=${nextdate}">
<tal:block i18n:translate="label_next_month">Next month</tal:block> >
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${nextnextdate}">
<tal:block i18n:translate="label_next_3_months">Next 3 months</tal:block> >>
</a>
</div>
</div>
</metal:block>
<!-- ****************************************
** Year navigation
******************************************* -->
<metal:block metal:define-macro="year_navigation">
<h3 id="dateTitle"
tal:content="python:btool.getFormatedYearDate(year)" />
<div id="plonebooking-nav"
tal:define="prevdate python:btool.substractYears(ts);
nextdate python:btool.addYears(ts);
prevprevdate python:btool.substractYears(ts, years=3);
nextnextdate python:btool.addYears(ts, years=3);">
<div id="plonebooking-left-nav" >
<a tal:attributes="href string:${nav_base_url}&ts=${prevprevdate}">
<< <tal:block i18n:translate="label_previous_3_years">Previous 3 years</tal:block>
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${prevdate}">
< <tal:block i18n:translate="label_previous_year">Previous year</tal:block>
</a>
</div>
<div id="plonebooking-right-nav">
<a tal:attributes="href string:${nav_base_url}&ts=${nextdate}">
<tal:block i18n:translate="label_next_year">Next year</tal:block> >
</a>
<a tal:attributes="href string:${nav_base_url}&ts=${nextnextdate}">
<tal:block i18n:translate="label_next_3_years">Next 3 years</tal:block> >>
</a>
</div>
</div>
</metal:block>
<!-- ****************************************
** Calendar view menu
******************************************* -->
<metal:block metal:define-macro="calendar_menu"
i18n:domain="plonebooking"
tal:define="vocab python:btool.getListingViewVocabulary();
available_views python:here.getAvailableCalendarViews()">
<div id="calendar-menu">
<tal:views tal:repeat="view available_views">
<a tal:define="icon string:${view}view.png;
url string:${here/absolute_url}?ts=${ts}&dmode=calendar&dview=${view};
url python:test(is_bcenter and btype is not None, '%s&btype=%s' % (url, btype), url);
url python:test(is_bcenter and bcategory is not None, '%s&bcategory=%s' % (url, bcategory), url);
title python:vocab.getValue(view)"
tal:attributes="href url;
class python:test(dview == view, 'selected', None);"
><img tal:attributes="src string:${portal_url}/$icon;
alt title;
title title;"
i18n:attributes="title, alt" /></a>
</tal:views>
</div>
</metal:block>
<!-- ****************************************
** Calendar view dy day
******************************************* -->
<metal:block metal:define-macro="calendar_day"
i18n:domain="plonebooking"
tal:define="interval_in_minutes python: 30;
interval_in_seconds python: interval_in_minutes * 60;
cal_start_ts python:btool.setTsTime(ts, hour=here.getCalendarStartingHour());
cal_end_ts python:btool.setTsTime(ts, hour=here.getCalendarEndingHour());
cal_start_dt python:getZDateTimeFromts(cal_start_ts);
cal_end_dt python:getZDateTimeFromts(cal_end_ts + interval_in_seconds);
hours python: btool.buildPeriodList(cal_start_ts, cal_end_ts, interval_in_seconds);
booking_result python:here.groupBookingsByIntervalOfMinutes(cal_start_dt, cal_end_dt, interval=interval_in_minutes, **filter_args);
group_keys python:booking_result[0];
booking_groups python:booking_result[1];
day_length python: cal_end_ts - cal_start_ts + 3600;">
<metal:block metal:use-macro="macro_def/day_navigation" />
<table class="listing bookingsListing">
<thead>
<tr>
<th i18n:translate="label_hour">Hour</th>
<th/>
</tr>
</thead>
<tbody id="bookingCalendar">
<tal:loop tal:repeat="hour hours">
<tal:defines tal:define="start_ts hour;
end_ts python:hour + interval_in_seconds;
start_dt python:DateTime(start_ts);
end_dt python:DateTime(end_ts);
group_key python:(start_dt.year(), start_dt.month(), start_dt.day(), (start_dt.hour() * 60 + start_dt.minute()),);
bookings python:booking_groups.get(group_key, [])">
<tr>
<td class="bookingHourCell"
tal:content="python: DateTime(hour).TimeMinutes()">
8:00
</td>
<td class="bookingCell" style="width:100%;">
<input type="hidden" tal:attributes="value string:${start_ts}:${end_ts}" />
<a title="Book it"
class="visualNoPrint bookIt "
tal:condition="python:(bookableobject and not bookings or not bookableobject)"
tal:attributes="href string:${add_booking_url}?start_ts=${start_ts}&end_ts=${end_ts};
class string:visualNoPrint bookIt ${bookingClass};"
i18n:attributes="title link_title_book_it">
+
</a>
<tal:loop tal:repeat="booking bookings">
<a href="#"
tal:define="state booking/review_state;
state python:test(state == 'booked', 'booked', 'pending');
booked_obj_uid booking/bookedObjectUID;
booked_obj python:get_object(booked_obj_uid);
booked_obj_title python:booked_obj.title_or_id();"
tal:attributes="href booking/url;
class string:booking-${state};">
<span tal:replace="booked_obj_title" /> :
<tal:block i18n:translate="label_booked_by">booked by</tal:block> <span tal:replace="booking/creator" /> -
<span tal:replace="booking/title" />
</a>
</tal:loop>
</td>
</tr>
</tal:defines>
</tal:loop>
</tbody>
</table>
<metal:block metal:use-macro="macro_def/legend" />
</metal:block>
<!-- ****************************************
** Calendar view by week
******************************************* -->
<metal:block metal:define-macro="calendar_week"
i18n:domain="plonebooking"
tal:define="interval_in_minutes python: 60;
interval_in_seconds python: interval_in_minutes * 60;
week python: dt.week();
year python: dt.year();
date_range python: btool.getDateRangeFromWeek(week, year);
cal_start_dt python: date_range[0];
cal_end_dt python: date_range[1];
booking_result python: here.groupBookingsByIntervalOfMinutes(cal_start_dt, cal_end_dt, interval=interval_in_minutes, **filter_args);
group_keys python: booking_result[0];
booking_groups python: booking_result[1];
days python: ['', 'Monday', 'Tuesday','Wednesday', 'Thursday','Friday','Saturday', 'Sunday'];
days_header python: btool.buildWeekDays(week, year);
starting_hour python: here.getCalendarStartingHour();
ending_hour python: here.getCalendarEndingHour();
week_table python: btool.buildWeekTable(week, year, starting_hour=starting_hour, ending_hour=ending_hour, delta=interval_in_seconds);
cal_start_ts python: date_range[0].millis() / 1000;
day_length python: 3600 * (ending_hour - starting_hour + 1); ">
<metal:block metal:use-macro="macro_def/week_navigation" />
<table class="listing bookingsListing">
<thead>
<tr id="week-days">
<th>
<!-- hour / weekday -->
</th>
<th tal:repeat="day days_header">
<a tal:attributes="href python: here.absolute_url()+'?dmode=calendar&dview=day&ts=' + str(day)"
tal:content="python:btool.getFormatedDate(DateTime(day), with_year=0)" />
</th>
</tr>
</thead>
<tbody id="bookingCalendar">
<tal:loop tal:repeat="line week_table">
<tr>
<td class="bookingHourCell" tal:content="python: DateTime(line[0]).TimeMinutes()">
8:00
</td>
<tal:loop tal:repeat="day line">
<tal:defines tal:define="start_ts day;
end_ts python:start_ts + 3600 ;
start_dt python:DateTime(start_ts);
end_dt python:DateTime(end_ts);
group_key python:(start_dt.year(), start_dt.month(), start_dt.day(), (start_dt.hour() * 60 + start_dt.minute()),);
bookings python:booking_groups.get(group_key, [])">
<td class="bookingCell">
<input type="hidden" tal:attributes="value string:${start_ts}:${end_ts}" />
<a title="Book it"
class="visualNoPrint bookIt "
tal:condition="python:(bookableobject and not bookings and can_add_booking) or (not bookableobject and can_add_booking)"
tal:attributes="href string:${add_booking_url}?start_ts=${start_ts}&end_ts=${end_ts};
class string:visualNoPrint bookIt ${bookingClass};"
i18n:attributes="title link_title_book_it">
+
</a>
<tal:loop tal:repeat="booking bookings">
<a href=""
title="Show more booking infos"
tal:define="state booking/review_state;
state python:test(state == 'booked', 'booked', 'pending');
booked_obj_uid booking/bookedObjectUID;
booked_obj python:get_object(booked_obj_uid);
booked_obj_title python:booked_obj.title_or_id();"
tal:attributes="href booking/url;
class string:booking-${state};"
i18n:attributes="title show_more_infos">
<span tal:replace="booked_obj_title" /> :
<tal:block i18n:translate="label_booked_by">booked by</tal:block>
<span tal:replace="booking/creator" /> -
<span tal:replace="booking/title" />
</a>
</tal:loop>
</td>
</tal:defines>
</tal:loop>
</tr>
</tal:loop>
</tbody>
</table>
<metal:block metal:use-macro="macro_def/legend" />
</metal:block>
<!-- ****************************************
** Calendar view by month
******************************************* -->
<metal:block metal:define-macro="calendar_month"
i18n:domain="plonebooking"
tal:define="interval_in_days python:1;
month python:dt.month();
year python:dt.year();
date_range python:btool.getDateRangeFromMonth(month, year);
start_date python:date_range[0];
end_date python:date_range[1];
booking_result python:here.groupBookingsByDay(start_date, end_date, **filter_args);
group_keys python:booking_result[0];
booking_groups python:booking_result[1];
days_header python:['Monday', 'Tuesday','Wednesday', 'Thursday','Friday','Saturday', 'Sunday'];
month_calendar python: btool.buildMonthCalendar(year, month);
cal_start_ts python:start_date.millis() / 1000;
starting_hour python: here.getCalendarStartingHour();
day_length python:0;">
<metal:block metal:use-macro="macro_def/month_navigation" />
<table class="listing bookingsListing">
<thead>
<tr>
<th class="discreet" i18n:translate="head_week_number">
<!-- week / days -->
week number
</th>
<th tal:repeat="day days_header">
<span i18n:translate="" tal:omit-tag="" tal:content="day" />
</th>
</tr>
</thead>
<tbody id="bookingCalendar">
<tal:loop tal:repeat="line month_calendar">
<tr>
<td class="monthBookingCell monthBookingCellWeekDay">
<!-- Week number -->
<a href="" class="WeekNumber"
tal:define="dt python: DateTime(year, month, btool.getFirstValidDay(line))"
tal:attributes="href python: here.absolute_url()+'?&dmode=calendar&dview=week&ts='+str(btool.getTsFromZDateTime(dt))"
tal:content="python:dt.week()">
1
</a>
</td>
<tal:loop tal:repeat="day_number line">
<td tal:attributes="class python:test(day_number, 'monthBookingCell', 'monthBookingEmptyCell')">
<tal:test tal:condition="day_number">
<tal:defines tal:define="group_key python:(year, month, day_number);
day_date python:DateTime(*group_key);
day_ts python:btool.getTsFromZDateTime(day_date);
start_ts python:day_ts + starting_hour * 3600;
end_ts python:start_ts + 3600;
bookings python:booking_groups.get(group_key, [])">
<a title="Book it"
class="visualNoPrint bookIt "
tal:condition="python: can_add_booking"
tal:attributes="href string:${add_booking_url}?start_ts=${start_ts}&end_ts=${end_ts};
class string:visualNoPrint bookIt ${bookingClass};"
i18n:attributes="title link_title_book_it">
+
</a>
<a href="#"
title="Show the day"
tal:attributes="href string:${here/absolute_url}?ts=${day_ts}&dmode=calendar&dview=day;"
i18n:attributes="title show_day"
tal:content="day_number" />
<div class="monthViewList">
<tal:loop tal:repeat="booking bookings">
<a tal:define="state booking/review_state;
state python:test(state == 'booked', 'booked', 'pending');
booked_obj_uid booking/bookedObjectUID;
booked_obj python:get_object(booked_obj_uid);
booked_obj_title python:booked_obj.title_or_id();"
tal:attributes="class string:booking-${state};
href booking/url;"
class="BookingThumb">
<tal:block
tal:condition="not:bookableobject">
<span tal:replace="booked_obj_title" /> - </tal:block><span tal:replace="booking/title" />
</a>
</tal:loop>
</div>
</tal:defines>
</tal:test>
</td>
</tal:loop>
</tr>
</tal:loop>
</tbody>
</table>
<metal:block metal:use-macro="macro_def/legend" />
</metal:block>
<!-- ****************************************
** Listing view menu
******************************************* -->
<metal:block metal:define-macro="listing_menu"
i18n:domain="plonebooking"
tal:define="vocab python:btool.getListingViewVocabulary();
available_views python:here.getAvailableListingViews()">
<div id="listing-menu">
<tal:views tal:repeat="view available_views">
<a tal:define="url string:${here/absolute_url}?ts=${ts}&dmode=listing&dview=${view};
url python:test(is_bcenter and btype is not None, '%s&btype=%s' % (url, btype), url);
url python:test(is_bcenter and bcategory is not None, '%s&bcategory=%s' % (url, bcategory), url);
title python:vocab.getValue(view)"
tal:attributes="href url;
class python:test(dview == view, 'selected', None);"
tal:content="title" />
</tal:views>
</div>
</metal:block>
<!-- ****************************************
** Listing view
******************************************* -->
<metal:block metal:define-macro="listing_view" i18n:domain="plonebooking">
<div class="bookingResults"
tal:define="group_keys python:booking_result[0];
booking_groups python:booking_result[1];
display_groups python:test(len(group_keys) == 1, False, True);
bookable_objects_dict python:dict([(x.UID(), x) for x in bookable_objects])">
<tal:block tal:repeat="group_key group_keys">
<tal:block tal:define="bookings python:booking_groups.get(group_key, None)">
<tal:block tal:condition="display_groups">
<tal:block tal:condition="python:group_by == 'day'">
<h4 tal:define="group_date python:DateTime(group_key[0], group_key[1], group_key[2])"
tal:content="python:btool.getFormatedDate(group_date)" />
</tal:block>
<tal:block tal:condition="python:group_by == 'month'">
<h4 tal:content="python:btool.getFormatedMonthDate(group_key[1], group_key[0])" />
</tal:block>
</tal:block>
<p tal:condition="not:bookings"
i18n:translate="description_no_bookings_found">
No bookings found.
</p>
<dl tal:condition="bookings">
<tal:block tal:repeat="booking bookings">
<tal:block tal:define="start_fd python:btool.getFormatedLongDate(booking['start']);
end_fd python:btool.getFormatedLongDate(booking['end'])">
<dt tal:define="title booking/title">
<a href=""
tal:attributes="href booking/url">
<tal:block tal:condition="title"
tal:content="title" i18n:translate="" />
<tal:block tal:condition="not:title"
i18n:translate="label_dynamic_booking_title">
Booking from
<span i18n:name="start_date"
tal:content="start_fd" />
to
<span i18n:name="end_date"
tal:content="end_fd" />
</tal:block>
</a>
</dt>
<dd>
<div tal:define="bobject_uid booking/bookedObjectUID"
tal:condition="python:here_uid!=bobject_uid">
<tal:block tal:define="ref_obj python:bookable_objects_dict.get(bobject_uid, None)"
tal:condition="nocall: ref_obj">
<a href=""
tal:define="url string:${ref_obj/absolute_url}?ts=${ts}&dmode=${dmode}&dview=${dview}"
tal:attributes="href url"
tal:content="ref_obj/title_or_id" />
</tal:block>
</div>
</dd>
<dd i18n:translate="description_booking_duration">
From
<span i18n:name="start_date"
tal:content="start_fd" />
to
<span i18n:name="end_date"
tal:content="end_fd" />
</dd>
</tal:block>
</tal:block>
</dl>
</tal:block>
</tal:block>
</div>
</metal:block>
<!-- ****************************************
** Listing view by day
******************************************* -->
<metal:block metal:define-macro="listing_day"
i18n:domain="plonebooking"
tal:define="date_range python:btool.getDateRangeFromDate(dt);
start_date python:date_range[0];
end_date python:date_range[1];
group_by string:day;
booking_result python:here.groupBookingsByDay(start_date, end_date, **filter_args);
cal_start_ts python: start_date.millis()/1000;
day_length python: 0;">
<metal:block metal:use-macro="macro_def/day_navigation" />
<metal:block metal:use-macro="macro_def/listing_view" />
</metal:block>
<!-- ****************************************
** Listing view by week
******************************************* -->
<metal:block metal:define-macro="listing_week"
i18n:domain="plonebooking"
tal:define="week python:dt.week();
year python:dt.year();
date_range python:btool.getDateRangeFromWeek(week, year);
start_date python:date_range[0];
end_date python:date_range[1];
group_by string:day;
booking_result python:here.groupBookingsByDay(start_date, end_date, **filter_args);
cal_start_ts python: start_date.millis()/1000;
day_length python: 0;">
<metal:block metal:use-macro="macro_def/week_navigation" />
<metal:block metal:use-macro="macro_def/listing_view" />
</metal:block>
<!-- ****************************************
** Listing view by month
******************************************* -->
<metal:block metal:define-macro="listing_month"
i18n:domain="plonebooking"
tal:define="month python:dt.month();
year python:dt.year();
date_range python:btool.getDateRangeFromMonth(month, year);
start_date python:date_range[0];
end_date python:date_range[1];
group_by string:day;
booking_result python:here.groupBookingsByDay(start_date, end_date, **filter_args);
group_keys python:booking_result[0];
booking_groups python: booking_result[1];
cal_start_ts python: start_date.millis()/1000;
day_length python: 0;">
<metal:block metal:use-macro="macro_def/month_navigation" />
<metal:block metal:use-macro="macro_def/listing_view" />
</metal:block>
<!-- ****************************************
** Listing view by year
******************************************* -->
<metal:block metal:define-macro="listing_year"
i18n:domain="plonebooking"
tal:define="year python:dt.year();
date_range python:btool.getDateRangeFromYear(year);
start_date python:date_range[0];
end_date python:date_range[1];
group_by string:month;
booking_result python:here.groupBookingsByMonth(start_date, end_date, **filter_args);
cal_start_ts python: start_date.millis()/1000;
day_length python: 0;">
<metal:block metal:use-macro="macro_def/year_navigation" />
<metal:block metal:use-macro="macro_def/listing_view" />
</metal:block>
<!-- ****************************************
** Planning view by day
******************************************* -->
<metal:block metal:define-macro="planning_day"
i18n:domain="plonebooking"
tal:define="cal_start_ts python: btool.setTsTime(ts, hour=here.getCalendarStartingHour());
cal_end_ts python: btool.setTsTime(ts, hour=here.getCalendarEndingHour());
cal_start_dt python: getZDateTimeFromts(cal_start_ts);
cal_end_dt python: getZDateTimeFromts(cal_end_ts);
interval_in_minutes python: 60;
interval_in_seconds python: interval_in_minutes * 60;
hours python: btool.buildPeriodList(cal_start_ts, cal_end_ts, interval_in_seconds);
booking_result python: here.groupBookingsByDay(cal_start_dt, cal_end_dt, **filter_args);
bookings python: booking_result[1].values();
day_length python: cal_end_ts - cal_start_ts + 3600;">
<metal:block metal:use-macro="macro_def/day_navigation" />
<table class="planning" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th></th>
<th tal:repeat="hour hours">
<span tal:replace="python: DateTime(hour).hour()" />h
</th>
</tr>
<tr>
<td> </td>
<td tal:repeat="hour hours"><img /></td>
</tr>
</thead>
<tbody id="bookingPlanning">
<tal:block tal:condition="bookings"
tal:repeat="booking python: bookings[0]">
<tr tal:define="start_ts python: (booking['start'].millis() / 1000) - cal_start_ts;
end_ts python: (booking['end'].millis() / 1000) - cal_start_ts;
left python: round(100 * start_ts / float(day_length), 3);
width python: round(100 * (end_ts - start_ts) / float(day_length), 3);
state booking/review_state;
state python: test(state == 'booked', 'booked', 'pending');
booked_obj_uid booking/bookedObjectUID;
booked_obj python:get_object(booked_obj_uid);
booked_obj_title python:booked_obj.title_or_id();">
<td width="100%">
<span tal:replace="booking/creator" /> -
<span tal:replace="booking/title" />
</td>
<td tal:attributes="colspan python:len(hours)" class="timeline">
<a tal:attributes="style string:left: ${left}%;; width: ${width}%;;;
class string:booking-${state};
href booking/url;">
<div tal:content="booked_obj_title" />
</a>
</td>
</tr>
</tal:block>
</tbody>
</table>
<p align="center"
tal:condition="not:bookings"
i18n:translate="description_no_bookings_found">
No bookings found.
</p>
<metal:block metal:use-macro="macro_def/legend" />
</metal:block>
<!-- ****************************************
** Legend
******************************************* -->
<metal:block metal:define-macro="legend">
<ul class="legend"
i18n:domain="plone"
tal:define="items python:[('booked', 'booking-booked'), ('pending', 'booking-pending')]">
<tal:states tal:repeat="item items">
<li tal:define="css_class python:item[1];
state python:item[0];"
tal:attributes="class css_class;"
i18n:translate=""
tal:content="state" />
</tal:states>
</ul>
</metal:block>
<metal:block define-macro="defines"
i18n:domain="plonebooking"
tal:define="btool here/portal_booking;
atool nocall:portal/archetype_tool;
get_object nocall:atool/getObject;
macro_def nocall:here/plonebooking_macros/macros;
getDatetimeFromTs nocall:btool/getDatetimeFromTs;
getZDateTimeFromts nocall:btool/getZDateTimeFromts;
getTsFromZDateTime nocall:btool/getTsFromZDateTime;
getTsFromDatetime nocall:btool/getTsFromDatetime;
available_modes python:here.getAvailableViewModes();
default_mode python:here.getDefaultViewMode();
default_view python:here.getDefaultCalendarView();
dmode python:request.get('dmode', default_mode);
dview python:request.get('dview', default_view);
btype request/btype | btype | nothing;
bcategory request/bcategory | bcategory | nothing;
here_title here/title_or_id;
here_uid here/UID;
bcenter here/getBookingCenter;
bcenter_url bcenter/absolute_url;
is_bcenter python:bcenter == here;
bookableobject bookableobject | request/bookableobject | python:not is_bcenter and here.getId() or None;
add_booking_url python:is_bcenter and 'plonebooking_add_form' or 'plonebooking_add';
add_booking_url string:${here/absolute_url}/${add_booking_url};
filter_args python:test(is_bcenter, btool.buildFilter(getType=btype, getCategory=bcategory),
btool.buildFilter(getBookedObjectUID=here_uid));
btypes python:here.getBookableObjectTypes(review_state='published', **filter_args);
bcategories python:here.getBookableObjectCategories(review_state='published', **filter_args);
bookable_objects python:here.getBookableObjects(review_state='published', **filter_args);
ts python:request.get('ts', btool.getTodayTs());
dt python:getZDateTimeFromts(ts);
cal_start_ts python:btool.setTsTime(ts, hour=here.getCalendarStartingHour());
member_fullname python:member and member.getProperty('fullname', '');
member_email python:member and member.getProperty('email', '');
member_phone python:member and member.getProperty('phone', '');
view_macro_id string:${dmode}_${dview};
view_macro python:path('here/plonebooking_macros/macros/%s' % view_macro_id) ;
nav_base_url string:${here/absolute_url}?dmode=${dmode}&dview=${dview};
nav_base_url python:btype and (nav_base_url + '&btype=' + btype) or nav_base_url;
nav_base_url python:bcategory and (nav_base_url + '&bcategory=' + bcategory) or nav_base_url;
nav_base_url python:bookableobject and (nav_base_url + '&bookableobject=' + bookableobject) or nav_base_url;
bookingClass python:test(bookableobject, 'bookableObject', '');
can_add_booking python:mtool.checkPermission('PloneBooking: Add booking', here);
can_modify python:mtool.checkPermission('Modify portal content', here);
refresh_mode here/getCalendarRefreshMode;
required_filters here/getRequiredFilters;
manual_refresh python:refresh_mode == 'manual' or required_filters;
ref request/refresh-filter | nothing;">
<metal:content define-slot="content" />
</metal:block>
<!-- ****************************************
** Main
******************************************* -->
<metal:block metal:define-macro="main_view">
<metal:content use-macro="here/plonebooking_macros/macros/defines">
<metal:fill fill-slot="content">
<form method="get" id="booking-form"
tal:attributes="action string:${here/absolute_url}/${template/getId}">
<input type="hidden" name="ts" tal:attributes="value ts" />
<input type="hidden" name="center_url" tal:attributes="value here/absolute_url" />
<input type="hidden" name="dview" tal:attributes="value dview" />
<input type="hidden" name="start_ts" tal:attributes="value cal_start_ts | nothing" />
<input type="hidden" name="length_ts" tal:attributes="value day_length | nothing" />
<input type="hidden" name="isAnon" tal:attributes="value isAnon" />
<input type="hidden" name="portal_url" tal:attributes="value string:${portal_url}" />
<tal:block tal:condition="not:btypes">
<p i18n:translate="description_no_bookable_object">
No object can be booked.
</p>
</tal:block>
<div tal:condition="btypes">
<div id="booking-filter">
<metal:block metal:use-macro="here/booking_filter/macros/main" />
</div>
<tal:block tal:condition="manual_refresh">
<div id="plonebooking-view"> </div>
</tal:block>
<tal:block tal:condition="not:manual_refresh">
<div id="plonebooking-view">
<metal:block define-macro="booking_view">
<h2 tal:condition="is_bcenter"
i18n:translate="title_bookings_for_bookable_objects">
Bookings for bookable objects
</h2>
<h2 tal:condition="not:is_bcenter"
i18n:translate="title_bookings_for_bookable_object">
Bookings for bookable object:
<tal:block i18n:name="bookableobject" tal:content="here/title_or_id" />
</h2>
<p>
<span i18n:translate="description_add_new_booking">
Select a view, search for availability and
<span i18n:name="add_new_booking">
<a href="add_booking_url" class="bootIt" id="addNewBooking"
onclick="return Booking.editPopup(event);"
tal:define="start_ts cal_start_ts;
end_ts python:start_ts + 3600"
tal:attributes="href string:${add_booking_url}?start_ts=${start_ts}&end_ts=${end_ts};
class string:bookIt ${bookingClass}"
i18n:translate="label_add_new_booking">
add new booking
</a>
</span>
.
</span>
<span i18n:translate="description_add_new_booking_in_calendar_view"
tal:condition="python:'calendar' in available_modes">
On calendar view, add a new booking by clicking on « + ».
</span>
</p>
<metal:block metal:use-macro="view_macro" />
</metal:block>
</div>
</tal:block>
</div>
</form>
</metal:fill>
</metal:content>
</metal:block>
<!--
Menu for Booking
-->
<metal:block metal:define-macro="booking_menu">
<div id="booking-menu"
tal:define="transitions workflow_actions;
can_modify python:checkPermission('Modify portal content', here);
actions python:actions.get('object', []);
displayed_actions python:('view', 'edit', 'periodicity')"
tal:condition="can_modify">
<tal:loop repeat="action actions">
<tal:action condition="python: action['id'] in displayed_actions">
<a href="#"
class="context"
tal:attributes="href action/url"
tal:content="action/id"
i18n:domain="plonebooking"
i18n:translate="">
Modify
</a>
</tal:action>
</tal:loop>
<tal:loop repeat="transition transitions">
<a href="#"
class="context"
i18n:translate=""
tal:content="transition/name"
i18n:domain="plone"
i18n:attributes="title"
tal:attributes="href string:${here/absolute_url}/content_status_modify?workflow_action=${transition/id};
title transition/name">File Menu Item 1</a>
</tal:loop>
</div>
</metal:block>
<!--
Link to booking reference types
-->
<metal:block define-macro="booking_ref"
i18n:domain="plonebooking">
<span style="padding : 0px 0px 10px 0px;">
<img src=""
style="float:left; padding : 4px 5px 10px 0px;"
tal:attributes="src python: portal.absolute_url()+'/arrowUp.gif'"
/>
<a href=""
class="link-parent"
tal:define="booked_obj here/getBookedObject"
tal:attributes="href booked_obj/absolute_url"
i18n:translate="label_up_to_booked_object">
Up to booked object
</a>
</metal:block>
<!-- ****************************************
** Read only field
******************************************* -->
<metal:block define-macro="read_only_field"
i18n:domain="plonebooking">
</metal:block>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.plone.org/pipermail/plone-plone-it/attachments/20090706/efc9a325/attachment.html>
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: g_zanobini.vcf
Tipo: text/x-vcard
Dimensione: 231 bytes
Descrizione: non disponibile
URL: <http://lists.plone.org/pipermail/plone-plone-it/attachments/20090706/efc9a325/attachment.vcf>
Maggiori informazioni sulla lista
Plone-IT