فهرست منبع

Add two way binding of card/board times

Andrés Manelli 7 سال پیش
والد
کامیت
724d26379c

+ 35 - 21
client/components/cards/cardDate.js

@@ -96,7 +96,7 @@ Template.dateBadge.helpers({
 (class extends DatePicker {
 (class extends DatePicker {
   onCreated() {
   onCreated() {
     super.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) {
   _storeDate(date) {
@@ -104,7 +104,7 @@ Template.dateBadge.helpers({
   }
   }
 
 
   _deleteDate() {
   _deleteDate() {
-    this.card.unsetReceived();
+    this.card.setReceived(null);
   }
   }
 }).register('editCardReceivedDatePopup');
 }).register('editCardReceivedDatePopup');
 
 
@@ -113,13 +113,13 @@ Template.dateBadge.helpers({
 (class extends DatePicker {
 (class extends DatePicker {
   onCreated() {
   onCreated() {
     super.onCreated();
     super.onCreated();
-    this.data().startAt && this.date.set(moment(this.data().startAt));
+    this.data().getStart() && this.date.set(moment(this.data().getStart()));
   }
   }
 
 
   onRendered() {
   onRendered() {
     super.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() {
   _deleteDate() {
-    this.card.unsetStart();
+    this.card.setStart(null);
   }
   }
 }).register('editCardStartDatePopup');
 }).register('editCardStartDatePopup');
 
 
@@ -136,13 +136,13 @@ Template.dateBadge.helpers({
 (class extends DatePicker {
 (class extends DatePicker {
   onCreated() {
   onCreated() {
     super.onCreated();
     super.onCreated();
-    this.data().dueAt && this.date.set(moment(this.data().dueAt));
+    this.data().getDue() && this.date.set(moment(this.data().getDue()));
   }
   }
 
 
   onRendered() {
   onRendered() {
     super.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() {
   _deleteDate() {
-    this.card.unsetDue();
+    this.card.setDue(null);
   }
   }
 }).register('editCardDueDatePopup');
 }).register('editCardDueDatePopup');
 
 
@@ -159,13 +159,13 @@ Template.dateBadge.helpers({
 (class extends DatePicker {
 (class extends DatePicker {
   onCreated() {
   onCreated() {
     super.onCreated();
     super.onCreated();
-    this.data().endAt && this.date.set(moment(this.data().endAt));
+    this.data().getEnd() && this.date.set(moment(this.data().getEnd()));
   }
   }
 
 
   onRendered() {
   onRendered() {
     super.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() {
   _deleteDate() {
-    this.card.unsetEnd();
+    this.card.setEnd(null);
   }
   }
 }).register('editCardEndDatePopup');
 }).register('editCardEndDatePopup');
 
 
@@ -213,15 +213,15 @@ class CardReceivedDate extends CardDate {
     super.onCreated();
     super.onCreated();
     const self = this;
     const self = this;
     self.autorun(() => {
     self.autorun(() => {
-      self.date.set(moment(self.data().receivedAt));
+      self.date.set(moment(self.data().getReceived()));
     });
     });
   }
   }
 
 
   classes() {
   classes() {
     let classes = 'received-date ';
     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();
     const theDate = this.date.get();
     // if dueAt, endAt and startAt exist & are > receivedAt, receivedAt doesn't need to be flagged
     // if dueAt, endAt and startAt exist & are > receivedAt, receivedAt doesn't need to be flagged
     if (((startAt) && (theDate.isAfter(dueAt))) ||
     if (((startAt) && (theDate.isAfter(dueAt))) ||
@@ -250,12 +250,13 @@ class CardStartDate extends CardDate {
     super.onCreated();
     super.onCreated();
     const self = this;
     const self = this;
     self.autorun(() => {
     self.autorun(() => {
-      self.date.set(moment(self.data().startAt));
+      self.date.set(moment(self.data().getStart()));
     });
     });
   }
   }
 
 
   classes() {
   classes() {
     let classes = 'start-date' + ' ';
     let classes = 'start-date' + ' ';
+<<<<<<< HEAD
     const dueAt = this.data().dueAt;
     const dueAt = this.data().dueAt;
     const endAt = this.data().endAt;
     const endAt = this.data().endAt;
     const theDate = this.date.get();
     const theDate = this.date.get();
@@ -267,6 +268,10 @@ class CardStartDate extends CardDate {
     else if (theDate.isBefore(now, 'minute'))
     else if (theDate.isBefore(now, 'minute'))
       classes += 'almost-due';
       classes += 'almost-due';
     else
     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';
       classes += 'current';
     return classes;
     return classes;
   }
   }
@@ -288,7 +293,7 @@ class CardDueDate extends CardDate {
     super.onCreated();
     super.onCreated();
     const self = this;
     const self = this;
     self.autorun(() => {
     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();
     super.onCreated();
     const self = this;
     const self = this;
     self.autorun(() => {
     self.autorun(() => {
-      self.date.set(moment(self.data().endAt));
+      self.date.set(moment(self.data().getEnd()));
     });
     });
   }
   }
 
 
   classes() {
   classes() {
     let classes = 'end-date' + ' ';
     let classes = 'end-date' + ' ';
+<<<<<<< HEAD
     const dueAt = this.data.dueAt;
     const dueAt = this.data.dueAt;
     const theDate = this.date.get();
     const theDate = this.date.get();
     // if dueAt exists & is after endAt, endAt doesn't need to be flagged
     // if dueAt exists & is after endAt, endAt doesn't need to be flagged
@@ -343,6 +349,14 @@ class CardEndDate extends CardDate {
       classes += 'long-overdue';
       classes += 'long-overdue';
     else
     else
       classes += 'current';
       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;
     return classes;
   }
   }
 
 

+ 12 - 5
client/components/cards/cardDetails.jade

@@ -26,21 +26,28 @@ template(name="cardDetails")
     .card-details-items
     .card-details-items
       .card-details-item.card-details-item-received
       .card-details-item.card-details-item-received
         h3.card-details-item-title {{_ 'card-received'}}
         h3.card-details-item-title {{_ 'card-received'}}
-        if receivedAt
+        if getReceived
           +cardReceivedDate
           +cardReceivedDate
         else
         else
           a.js-received-date {{_ 'add'}}
           a.js-received-date {{_ 'add'}}
 
 
       .card-details-item.card-details-item-start
       .card-details-item.card-details-item-start
         h3.card-details-item-title {{_ 'card-start'}}
         h3.card-details-item-title {{_ 'card-start'}}
-        if startAt
+        if getStart
           +cardStartDate
           +cardStartDate
         else
         else
           a.js-start-date {{_ 'add'}}
           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
       .card-details-item.card-details-item-end
         h3.card-details-item-title {{_ 'card-end'}}
         h3.card-details-item-title {{_ 'card-end'}}
-        if endAt
+        if getEnd
           +cardEndDate
           +cardEndDate
         else
         else
           a.js-end-date {{_ 'add'}}
           a.js-end-date {{_ 'add'}}
@@ -79,9 +86,9 @@ template(name="cardDetails")
           +cardCustomField
           +cardCustomField
 
 
     .card-details-items
     .card-details-items
-      if spentTime
+      if getSpentTime
         .card-details-item.card-details-item-spent
         .card-details-item.card-details-item-spent
-          if isOvertime
+          if getIsOvertime
             h3.card-details-item-title {{_ 'overtime-hours'}}
             h3.card-details-item-title {{_ 'overtime-hours'}}
           else
           else
             h3.card-details-item-title {{_ 'spent-time-hours'}}
             h3.card-details-item-title {{_ 'spent-time-hours'}}

+ 4 - 4
client/components/cards/cardTime.jade

@@ -3,10 +3,10 @@ template(name="editCardSpentTime")
     form.edit-time
     form.edit-time
       .fields
       .fields
         label(for="time") {{_ 'time'}}
         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'}}
         label(for="overtime") {{_ 'overtime'}}
         a.js-toggle-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
       if error.get
         .warning {{_ error.get}}
         .warning {{_ error.get}}
@@ -15,8 +15,8 @@ template(name="editCardSpentTime")
 
 
 template(name="timeBadge")
 template(name="timeBadge")
   if canModifyCard
   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}}
       | {{showTime}}
   else
   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}}
       | {{showTime}}

+ 9 - 9
client/components/cards/cardTime.js

@@ -7,17 +7,17 @@ BlazeComponent.extendComponent({
     this.card = this.data();
     this.card = this.data();
   },
   },
   toggleOvertime() {
   toggleOvertime() {
-    this.card.isOvertime = !this.card.isOvertime;
+    this.card.setIsOvertime(!this.card.getIsOvertime());
     $('#overtime .materialCheckBox').toggleClass('is-checked');
     $('#overtime .materialCheckBox').toggleClass('is-checked');
 
 
     $('#overtime').toggleClass('is-checked');
     $('#overtime').toggleClass('is-checked');
   },
   },
   storeTime(spentTime, isOvertime) {
   storeTime(spentTime, isOvertime) {
     this.card.setSpentTime(spentTime);
     this.card.setSpentTime(spentTime);
-    this.card.setOvertime(isOvertime);
+    this.card.setIsOvertime(isOvertime);
   },
   },
   deleteTime() {
   deleteTime() {
-    this.card.unsetSpentTime();
+    this.card.setSpentTime(null);
   },
   },
   events() {
   events() {
     return [{
     return [{
@@ -26,7 +26,7 @@ BlazeComponent.extendComponent({
         evt.preventDefault();
         evt.preventDefault();
 
 
         const spentTime = parseFloat(evt.target.time.value);
         const spentTime = parseFloat(evt.target.time.value);
-        const isOvertime = this.card.isOvertime;
+        const isOvertime = this.card.getIsOvertime();
 
 
         if (spentTime >= 0) {
         if (spentTime >= 0) {
           this.storeTime(spentTime, isOvertime);
           this.storeTime(spentTime, isOvertime);
@@ -55,17 +55,17 @@ BlazeComponent.extendComponent({
     self.time = ReactiveVar();
     self.time = ReactiveVar();
   },
   },
   showTitle() {
   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 {
     } else {
-      return `${TAPi18n.__('card-spent')} ${this.data().spentTime} ${TAPi18n.__('hours')}`;
+      return `${TAPi18n.__('card-spent')} ${this.data().getSpentTime()} ${TAPi18n.__('hours')}`;
     }
     }
   },
   },
   showTime() {
   showTime() {
-    return this.data().spentTime;
+    return this.data().getSpentTime();
   },
   },
   isOvertime() {
   isOvertime() {
-    return this.data().isOvertime;
+    return this.data().getIsOvertime();
   },
   },
   events() {
   events() {
     return [{
     return [{

+ 8 - 12
client/components/cards/minicard.jade

@@ -27,23 +27,19 @@ template(name="minicard")
           | {{ parentCardName }}
           | {{ parentCardName }}
 
 
     .dates
     .dates
-      if receivedAt
-        unless startAt
-          unless dueAt
-            unless endAt
+      if getReceived
+        unless getStart
+          unless getDue
+            unless getEnd
               .date
               .date
                 +minicardReceivedDate
                 +minicardReceivedDate
-      if startAt
+      if getStart
         .date
         .date
           +minicardStartDate
           +minicardStartDate
-      if dueAt
-        unless endAt
-          .date
-            +minicardDueDate
-      if endAt
+      if getDue
         .date
         .date
-          +minicardEndDate
-      if spentTime
+          +minicardDueDate
+      if getSpentTime
         .date
         .date
           +cardSpentTime
           +cardSpentTime
 
 

+ 22 - 0
models/boards.js

@@ -177,6 +177,28 @@ Boards.attachSchema(new SimpleSchema({
     optional: true,
     optional: true,
     defaultValue: 'no-parent',
     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,
+  },
 }));
 }));
 
 
 
 

+ 160 - 1
models/cards.js

@@ -494,6 +494,166 @@ Cards.helpers({
       return this.assignMember(memberId);
       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({
 Cards.mutations({
@@ -657,7 +817,6 @@ Cards.mutations({
   setParentId(parentId) {
   setParentId(parentId) {
     return {$set: {parentId}};
     return {$set: {parentId}};
   },
   },
-
 });
 });