Browse Source

fixup! [ADD[ web_widget_date_interval

pull/575/head
Holger Brunn 5 years ago
parent
commit
74280f7904
No known key found for this signature in database GPG Key ID: 1C9760FECA3AE18
  1. 7
      web_widget_date_interval/README.rst
  2. 48
      web_widget_date_interval/static/src/js/web_widget_date_interval.js
  3. 21
      web_widget_date_interval/static/src/xml/web_widget_date_interval.xml

7
web_widget_date_interval/README.rst

@ -24,6 +24,13 @@ weeknumber_iso
allow the user to move to N years before the current date (or the field's value)
``years_after``
allow the user to move to N years after the current date (or the field's value)
``week_type``
`select` (default) will render a dropdown for weeks, `buttons` will show buttons
``weeks_before``
allow the user to move to N weeks before the current date (or the field's value) if ``week_type`` has value `buttons`
``weeks_after``
allow the user to move to N weeks after the current date (or the field's value) if ``week_type`` has value `buttons`
Example::

48
web_widget_date_interval/static/src/js/web_widget_date_interval.js

@ -14,16 +14,29 @@ openerp.web_widget_date_interval = function (instance) {
instance.web.form.ReinitializeFieldMixin,
{
events: {
'click .weeknumber_iso button': 'weeknumber_iso_onchange_year',
'change .weeknumber_iso select': 'weeknumber_iso_onchange_week',
'click .weeknumber_iso .years button':
'weeknumber_iso_onchange_year',
'change .weeknumber_iso .weeks select':
'weeknumber_iso_onchange_week',
'click .weeknumber_iso .weeks button':
'weeknumber_iso_onchange_week',
},
default_options: {
type: 'weeknumber_iso',
years_before: 5,
years_after: 5,
weeks_before: 5,
weeks_after: 5,
hide_years: false,
week_type: 'select',
},
template: 'FieldDateInterval',
className: 'oe_form_date_interval',
init: function () {
this._super.apply(this, arguments);
if (!this.options.type) {
throw new Error('Pass a type in the options dictionary!');
}
this.options = _.extend(
{}, this.default_options, this.options
);
if (!this.options.end_field) {
throw new Error(
'Pass an end field in the options dictionary');
@ -55,8 +68,8 @@ openerp.web_widget_date_interval = function (instance) {
return [];
}
var result = [],
years_before = this.options.years_before || 5,
years_after = this.options.years_after || 5,
years_before = this.options.years_before,
years_after = this.options.years_after,
current_date = this._get_date();
for (
var year=current_date.getFullYear() - years_before;
@ -70,6 +83,7 @@ openerp.web_widget_date_interval = function (instance) {
weeknumber_iso_get_weeks: function () {
var result = [],
last_day = this._get_date(),
min_week = 1,
max_week = 52;
if (!last_day.is().december()) {
last_day.december();
@ -78,7 +92,19 @@ openerp.web_widget_date_interval = function (instance) {
if (this.weeknumber_iso_weeknumber(last_day) > 1) {
max_week = this.weeknumber_iso_weeknumber(last_day);
}
for (var week=1; week <= max_week; week++) {
if (this.options.week_type === 'buttons') {
min_week = Math.max(
min_week,
this.weeknumber_iso_weeknumber(this._get_date()) -
this.options.weeks_before
);
max_week = Math.min(
max_week,
this.weeknumber_iso_weeknumber(this._get_date()) +
this.options.weeks_after
);
}
for (var week=min_week; week <= max_week; week++) {
result.push(week);
}
return result;
@ -94,7 +120,11 @@ openerp.web_widget_date_interval = function (instance) {
return this.weeknumber_iso_update_interval(monday);
},
weeknumber_iso_onchange_week: function (e) {
var week = parseInt(jQuery(e.currentTarget).val(), 10);
var week = parseInt(
jQuery(e.currentTarget).val() ||
jQuery(e.currentTarget).data('week'),
10
);
var year = this.weeknumber_iso_year(this._get_date());
var monday = this.weeknumber_iso_date_from_week(year, week);
return this.weeknumber_iso_update_interval(monday);

21
web_widget_date_interval/static/src/xml/web_widget_date_interval.xml

@ -10,14 +10,15 @@
t-att-data-year="year"
t-attf-class="oe_button oe_form_button"
t-att-disabled="widget.weeknumber_iso_year(date) == year ? 'disable' : null"
t-attf-title="Year {{year}}"
>
<t
t-esc="year"
/>
</button>
</div>
<span t-if="!widget.get('effective_readonly')" class="oe_form_field oe_form_field_selection oe_form_required">
<select class="weeks">
<div t-if="!widget.get('effective_readonly')" class="oe_form_field oe_form_field_selection oe_form_required weeks">
<select t-if="widget.options.week_type == 'select'" title="Select ISO week">
<option
t-foreach="widget.weeknumber_iso_get_weeks()"
t-as="week"
@ -29,7 +30,21 @@
/>
</option>
</select>
</span>
<t t-if="widget.options.week_type == 'buttons'">
<button
t-foreach="widget.weeknumber_iso_get_weeks()"
t-as="week"
t-att-data-week="week"
t-attf-class="oe_button oe_form_button"
t-att-disabled="widget.weeknumber_iso_weeknumber(date) == week ? 'disable' : null"
t-attf-title="ISO week {{week}}"
>
<t
t-esc="week"
/>
</button>
</t>
</div>
<t t-if="widget.get('effective_readonly')">
<t t-esc="widget.weeknumber_iso_year(date)" />,
week <t t-esc="widget.weeknumber_iso_weeknumber(date)" />

Loading…
Cancel
Save