mirror of
https://github.com/wekan/wekan.git
synced 2025-04-22 04:57:07 -04:00
Add two way binding of card/board times
This commit is contained in:
parent
0a62089df0
commit
724d26379c
7 changed files with 250 additions and 52 deletions
|
@ -96,7 +96,7 @@ Template.dateBadge.helpers({
|
|||
(class extends DatePicker {
|
||||
onCreated() {
|
||||
super.onCreated();
|
||||
this.data().receivedAt && this.date.set(moment(this.data().receivedAt));
|
||||
this.data().getReceived() && this.date.set(moment(this.data().getReceived()));
|
||||
}
|
||||
|
||||
_storeDate(date) {
|
||||
|
@ -104,7 +104,7 @@ Template.dateBadge.helpers({
|
|||
}
|
||||
|
||||
_deleteDate() {
|
||||
this.card.unsetReceived();
|
||||
this.card.setReceived(null);
|
||||
}
|
||||
}).register('editCardReceivedDatePopup');
|
||||
|
||||
|
@ -113,13 +113,13 @@ Template.dateBadge.helpers({
|
|||
(class extends DatePicker {
|
||||
onCreated() {
|
||||
super.onCreated();
|
||||
this.data().startAt && this.date.set(moment(this.data().startAt));
|
||||
this.data().getStart() && this.date.set(moment(this.data().getStart()));
|
||||
}
|
||||
|
||||
onRendered() {
|
||||
super.onRendered();
|
||||
if (moment.isDate(this.card.receivedAt)) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.receivedAt);
|
||||
if (moment.isDate(this.card.getReceived())) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.getReceived());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,7 +128,7 @@ Template.dateBadge.helpers({
|
|||
}
|
||||
|
||||
_deleteDate() {
|
||||
this.card.unsetStart();
|
||||
this.card.setStart(null);
|
||||
}
|
||||
}).register('editCardStartDatePopup');
|
||||
|
||||
|
@ -136,13 +136,13 @@ Template.dateBadge.helpers({
|
|||
(class extends DatePicker {
|
||||
onCreated() {
|
||||
super.onCreated();
|
||||
this.data().dueAt && this.date.set(moment(this.data().dueAt));
|
||||
this.data().getDue() && this.date.set(moment(this.data().getDue()));
|
||||
}
|
||||
|
||||
onRendered() {
|
||||
super.onRendered();
|
||||
if (moment.isDate(this.card.startAt)) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.startAt);
|
||||
if (moment.isDate(this.card.getStart())) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.getStart());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,7 +151,7 @@ Template.dateBadge.helpers({
|
|||
}
|
||||
|
||||
_deleteDate() {
|
||||
this.card.unsetDue();
|
||||
this.card.setDue(null);
|
||||
}
|
||||
}).register('editCardDueDatePopup');
|
||||
|
||||
|
@ -159,13 +159,13 @@ Template.dateBadge.helpers({
|
|||
(class extends DatePicker {
|
||||
onCreated() {
|
||||
super.onCreated();
|
||||
this.data().endAt && this.date.set(moment(this.data().endAt));
|
||||
this.data().getEnd() && this.date.set(moment(this.data().getEnd()));
|
||||
}
|
||||
|
||||
onRendered() {
|
||||
super.onRendered();
|
||||
if (moment.isDate(this.card.startAt)) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.startAt);
|
||||
if (moment.isDate(this.card.getStart())) {
|
||||
this.$('.js-datepicker').datepicker('setStartDate', this.card.getStart());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ Template.dateBadge.helpers({
|
|||
}
|
||||
|
||||
_deleteDate() {
|
||||
this.card.unsetEnd();
|
||||
this.card.setEnd(null);
|
||||
}
|
||||
}).register('editCardEndDatePopup');
|
||||
|
||||
|
@ -213,15 +213,15 @@ class CardReceivedDate extends CardDate {
|
|||
super.onCreated();
|
||||
const self = this;
|
||||
self.autorun(() => {
|
||||
self.date.set(moment(self.data().receivedAt));
|
||||
self.date.set(moment(self.data().getReceived()));
|
||||
});
|
||||
}
|
||||
|
||||
classes() {
|
||||
let classes = 'received-date ';
|
||||
const dueAt = this.data().dueAt;
|
||||
const endAt = this.data().endAt;
|
||||
const startAt = this.data().startAt;
|
||||
const dueAt = this.data().getDue();
|
||||
const endAt = this.data().getEnd();
|
||||
const startAt = this.data().getStart();
|
||||
const theDate = this.date.get();
|
||||
// if dueAt, endAt and startAt exist & are > receivedAt, receivedAt doesn't need to be flagged
|
||||
if (((startAt) && (theDate.isAfter(dueAt))) ||
|
||||
|
@ -250,12 +250,13 @@ class CardStartDate extends CardDate {
|
|||
super.onCreated();
|
||||
const self = this;
|
||||
self.autorun(() => {
|
||||
self.date.set(moment(self.data().startAt));
|
||||
self.date.set(moment(self.data().getStart()));
|
||||
});
|
||||
}
|
||||
|
||||
classes() {
|
||||
let classes = 'start-date' + ' ';
|
||||
<<<<<<< HEAD
|
||||
const dueAt = this.data().dueAt;
|
||||
const endAt = this.data().endAt;
|
||||
const theDate = this.date.get();
|
||||
|
@ -267,6 +268,10 @@ class CardStartDate extends CardDate {
|
|||
else if (theDate.isBefore(now, 'minute'))
|
||||
classes += 'almost-due';
|
||||
else
|
||||
=======
|
||||
if (this.date.get().isBefore(this.now.get(), 'minute') &&
|
||||
this.now.get().isBefore(this.data().getDue())) {
|
||||
>>>>>>> Add two way binding of card/board times
|
||||
classes += 'current';
|
||||
return classes;
|
||||
}
|
||||
|
@ -288,7 +293,7 @@ class CardDueDate extends CardDate {
|
|||
super.onCreated();
|
||||
const self = this;
|
||||
self.autorun(() => {
|
||||
self.date.set(moment(self.data().dueAt));
|
||||
self.date.set(moment(self.data().getDue()));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -330,12 +335,13 @@ class CardEndDate extends CardDate {
|
|||
super.onCreated();
|
||||
const self = this;
|
||||
self.autorun(() => {
|
||||
self.date.set(moment(self.data().endAt));
|
||||
self.date.set(moment(self.data().getEnd()));
|
||||
});
|
||||
}
|
||||
|
||||
classes() {
|
||||
let classes = 'end-date' + ' ';
|
||||
<<<<<<< HEAD
|
||||
const dueAt = this.data.dueAt;
|
||||
const theDate = this.date.get();
|
||||
// if dueAt exists & is after endAt, endAt doesn't need to be flagged
|
||||
|
@ -343,6 +349,14 @@ class CardEndDate extends CardDate {
|
|||
classes += 'long-overdue';
|
||||
else
|
||||
classes += 'current';
|
||||
=======
|
||||
if (this.date.get().diff(this.data().getDue(), 'days') >= 2)
|
||||
classes += 'long-overdue';
|
||||
else if (this.date.get().diff(this.data().getDue(), 'days') >= 0)
|
||||
classes += 'due';
|
||||
else if (this.date.get().diff(this.data().getDue(), 'days') >= -2)
|
||||
classes += 'almost-due';
|
||||
>>>>>>> Add two way binding of card/board times
|
||||
return classes;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,21 +26,28 @@ template(name="cardDetails")
|
|||
.card-details-items
|
||||
.card-details-item.card-details-item-received
|
||||
h3.card-details-item-title {{_ 'card-received'}}
|
||||
if receivedAt
|
||||
if getReceived
|
||||
+cardReceivedDate
|
||||
else
|
||||
a.js-received-date {{_ 'add'}}
|
||||
|
||||
.card-details-item.card-details-item-start
|
||||
h3.card-details-item-title {{_ 'card-start'}}
|
||||
if startAt
|
||||
if getStart
|
||||
+cardStartDate
|
||||
else
|
||||
a.js-start-date {{_ 'add'}}
|
||||
|
||||
.card-details-item.card-details-item-due
|
||||
h3.card-details-item-title {{_ 'card-due'}}
|
||||
if getDue
|
||||
+cardDueDate
|
||||
else
|
||||
a.js-due-date {{_ 'add'}}
|
||||
|
||||
.card-details-item.card-details-item-end
|
||||
h3.card-details-item-title {{_ 'card-end'}}
|
||||
if endAt
|
||||
if getEnd
|
||||
+cardEndDate
|
||||
else
|
||||
a.js-end-date {{_ 'add'}}
|
||||
|
@ -79,9 +86,9 @@ template(name="cardDetails")
|
|||
+cardCustomField
|
||||
|
||||
.card-details-items
|
||||
if spentTime
|
||||
if getSpentTime
|
||||
.card-details-item.card-details-item-spent
|
||||
if isOvertime
|
||||
if getIsOvertime
|
||||
h3.card-details-item-title {{_ 'overtime-hours'}}
|
||||
else
|
||||
h3.card-details-item-title {{_ 'spent-time-hours'}}
|
||||
|
|
|
@ -3,10 +3,10 @@ template(name="editCardSpentTime")
|
|||
form.edit-time
|
||||
.fields
|
||||
label(for="time") {{_ 'time'}}
|
||||
input.js-time-field#time(type="number" step="0.01" name="time" value="{{card.spentTime}}" placeholder=timeFormat autofocus)
|
||||
input.js-time-field#time(type="number" step="0.01" name="time" value="{{card.getSpentTime}}" placeholder=timeFormat autofocus)
|
||||
label(for="overtime") {{_ 'overtime'}}
|
||||
a.js-toggle-overtime
|
||||
.materialCheckBox#overtime(class="{{#if card.isOvertime}}is-checked{{/if}}" name="overtime")
|
||||
.materialCheckBox#overtime(class="{{#if card.getIsOvertime}}is-checked{{/if}}" name="overtime")
|
||||
|
||||
if error.get
|
||||
.warning {{_ error.get}}
|
||||
|
@ -15,8 +15,8 @@ template(name="editCardSpentTime")
|
|||
|
||||
template(name="timeBadge")
|
||||
if canModifyCard
|
||||
a.js-edit-time.card-time(title="{{showTitle}}" class="{{#if isOvertime}}card-label-red{{else}}card-label-green{{/if}}")
|
||||
a.js-edit-time.card-time(title="{{showTitle}}" class="{{#if getIsOvertime}}card-label-red{{else}}card-label-green{{/if}}")
|
||||
| {{showTime}}
|
||||
else
|
||||
a.card-time(title="{{showTitle}}" class="{{#if isOvertime}}card-label-red{{else}}card-label-green{{/if}}")
|
||||
a.card-time(title="{{showTitle}}" class="{{#if getIsOvertime}}card-label-red{{else}}card-label-green{{/if}}")
|
||||
| {{showTime}}
|
||||
|
|
|
@ -7,17 +7,17 @@ BlazeComponent.extendComponent({
|
|||
this.card = this.data();
|
||||
},
|
||||
toggleOvertime() {
|
||||
this.card.isOvertime = !this.card.isOvertime;
|
||||
this.card.setIsOvertime(!this.card.getIsOvertime());
|
||||
$('#overtime .materialCheckBox').toggleClass('is-checked');
|
||||
|
||||
$('#overtime').toggleClass('is-checked');
|
||||
},
|
||||
storeTime(spentTime, isOvertime) {
|
||||
this.card.setSpentTime(spentTime);
|
||||
this.card.setOvertime(isOvertime);
|
||||
this.card.setIsOvertime(isOvertime);
|
||||
},
|
||||
deleteTime() {
|
||||
this.card.unsetSpentTime();
|
||||
this.card.setSpentTime(null);
|
||||
},
|
||||
events() {
|
||||
return [{
|
||||
|
@ -26,7 +26,7 @@ BlazeComponent.extendComponent({
|
|||
evt.preventDefault();
|
||||
|
||||
const spentTime = parseFloat(evt.target.time.value);
|
||||
const isOvertime = this.card.isOvertime;
|
||||
const isOvertime = this.card.getIsOvertime();
|
||||
|
||||
if (spentTime >= 0) {
|
||||
this.storeTime(spentTime, isOvertime);
|
||||
|
@ -55,17 +55,17 @@ BlazeComponent.extendComponent({
|
|||
self.time = ReactiveVar();
|
||||
},
|
||||
showTitle() {
|
||||
if (this.data().isOvertime) {
|
||||
return `${TAPi18n.__('overtime')} ${this.data().spentTime} ${TAPi18n.__('hours')}`;
|
||||
if (this.data().getIsOvertime()) {
|
||||
return `${TAPi18n.__('overtime')} ${this.data().getSpentTime()} ${TAPi18n.__('hours')}`;
|
||||
} else {
|
||||
return `${TAPi18n.__('card-spent')} ${this.data().spentTime} ${TAPi18n.__('hours')}`;
|
||||
return `${TAPi18n.__('card-spent')} ${this.data().getSpentTime()} ${TAPi18n.__('hours')}`;
|
||||
}
|
||||
},
|
||||
showTime() {
|
||||
return this.data().spentTime;
|
||||
return this.data().getSpentTime();
|
||||
},
|
||||
isOvertime() {
|
||||
return this.data().isOvertime;
|
||||
return this.data().getIsOvertime();
|
||||
},
|
||||
events() {
|
||||
return [{
|
||||
|
|
|
@ -27,23 +27,19 @@ template(name="minicard")
|
|||
| {{ parentCardName }}
|
||||
|
||||
.dates
|
||||
if receivedAt
|
||||
unless startAt
|
||||
unless dueAt
|
||||
unless endAt
|
||||
if getReceived
|
||||
unless getStart
|
||||
unless getDue
|
||||
unless getEnd
|
||||
.date
|
||||
+minicardReceivedDate
|
||||
if startAt
|
||||
if getStart
|
||||
.date
|
||||
+minicardStartDate
|
||||
if dueAt
|
||||
unless endAt
|
||||
.date
|
||||
+minicardDueDate
|
||||
if endAt
|
||||
if getDue
|
||||
.date
|
||||
+minicardEndDate
|
||||
if spentTime
|
||||
+minicardDueDate
|
||||
if getSpentTime
|
||||
.date
|
||||
+cardSpentTime
|
||||
|
||||
|
|
|
@ -177,6 +177,28 @@ Boards.attachSchema(new SimpleSchema({
|
|||
optional: true,
|
||||
defaultValue: 'no-parent',
|
||||
},
|
||||
startAt: {
|
||||
type: Date,
|
||||
optional: true,
|
||||
},
|
||||
dueAt: {
|
||||
type: Date,
|
||||
optional: true,
|
||||
},
|
||||
endAt: {
|
||||
type: Date,
|
||||
optional: true,
|
||||
},
|
||||
spentTime: {
|
||||
type: Number,
|
||||
decimal: true,
|
||||
optional: true,
|
||||
},
|
||||
isOvertime: {
|
||||
type: Boolean,
|
||||
defaultValue: false,
|
||||
optional: true,
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
|
|
161
models/cards.js
161
models/cards.js
|
@ -494,6 +494,166 @@ Cards.helpers({
|
|||
return this.assignMember(memberId);
|
||||
}
|
||||
},
|
||||
|
||||
getReceived() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({_id: this.importedId});
|
||||
return card.receivedAt;
|
||||
} else {
|
||||
return this.receivedAt;
|
||||
}
|
||||
},
|
||||
|
||||
setReceived(receivedAt) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {receivedAt}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {receivedAt}};
|
||||
}
|
||||
},
|
||||
|
||||
getStart() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({_id: this.importedId});
|
||||
return card.startAt;
|
||||
} else if (this.isImportedBoard()) {
|
||||
const board = Boards.findOne({_id: this.importedId});
|
||||
return board.startAt
|
||||
} else {
|
||||
return this.startAt;
|
||||
}
|
||||
},
|
||||
|
||||
setStart(startAt) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{ _id: this.importedId },
|
||||
{$set: {startAt}}
|
||||
);
|
||||
} else if (this.isImportedBoard()) {
|
||||
return Boards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {startAt}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {startAt}};
|
||||
}
|
||||
},
|
||||
|
||||
getDue() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({_id: this.importedId});
|
||||
return card.dueAt;
|
||||
} else if (this.isImportedBoard()) {
|
||||
const board = Boards.findOne({_id: this.importedId});
|
||||
return board.dueAt
|
||||
} else {
|
||||
return this.dueAt;
|
||||
}
|
||||
},
|
||||
|
||||
setDue(dueAt) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{ _id: this.importedId },
|
||||
{$set: {dueAt}}
|
||||
);
|
||||
} else if (this.isImportedBoard()) {
|
||||
return Boards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {dueAt}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {dueAt}};
|
||||
}
|
||||
},
|
||||
|
||||
getEnd() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({_id: this.importedId});
|
||||
return card.endAt;
|
||||
} else if (this.isImportedBoard()) {
|
||||
const board = Boards.findOne({_id: this.importedId});
|
||||
return board.endAt;
|
||||
} else {
|
||||
return this.endAt;
|
||||
}
|
||||
},
|
||||
|
||||
setEnd(endAt) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{ _id: this.importedId },
|
||||
{$set: {endAt}}
|
||||
);
|
||||
} else if (this.isImportedBoard()) {
|
||||
return Boards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {endAt}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {endAt}};
|
||||
}
|
||||
},
|
||||
|
||||
getIsOvertime() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({ _id: this.importedId });
|
||||
return card.isOvertime;
|
||||
} else if (this.isImportedBoard()) {
|
||||
const board = Boards.findOne({ _id: this.importedId});
|
||||
return board.isOvertime;
|
||||
} else {
|
||||
return this.isOvertime;
|
||||
}
|
||||
},
|
||||
|
||||
setIsOvertime(isOvertime) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{ _id: this.importedId },
|
||||
{$set: {isOvertime}}
|
||||
);
|
||||
} else if (this.isImportedBoard()) {
|
||||
return Boards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {isOvertime}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {isOvertime}};
|
||||
}
|
||||
},
|
||||
|
||||
getSpentTime() {
|
||||
if (this.isImportedCard()) {
|
||||
const card = Cards.findOne({ _id: this.importedId });
|
||||
return card.spentTime;
|
||||
} else if (this.isImportedBoard()) {
|
||||
const board = Boards.findOne({ _id: this.importedId});
|
||||
return board.spentTime;
|
||||
} else {
|
||||
return this.spentTime;
|
||||
}
|
||||
},
|
||||
|
||||
setSpentTime(spentTime) {
|
||||
if (this.isImportedCard()) {
|
||||
return Cards.update(
|
||||
{ _id: this.importedId },
|
||||
{$set: {spentTime}}
|
||||
);
|
||||
} else if (this.isImportedBoard()) {
|
||||
return Boards.update(
|
||||
{_id: this.importedId},
|
||||
{$set: {spentTime}}
|
||||
);
|
||||
} else {
|
||||
return {$set: {spentTime}};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Cards.mutations({
|
||||
|
@ -657,7 +817,6 @@ Cards.mutations({
|
|||
setParentId(parentId) {
|
||||
return {$set: {parentId}};
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue