Răsfoiți Sursa

Sum of cards. In Progress.

Thanks to xet7 !

Related #3796
Lauri Ojansivu 3 ani în urmă
părinte
comite
8626b466b8

+ 11 - 0
client/components/lists/listBody.jade

@@ -4,6 +4,17 @@ template(name="listBody")
       if cards.count
         +inlinedForm(autoclose=false position="top")
           +addCardForm(listId=_id position="top")
+      ul.sidebar-list
+        each customFieldsSum
+          li
+            +viewer
+              = name
+            if $eq customFieldsSum.type "number"
+              +viewer
+                = value
+            if $eq customFieldsSum.type "currency"
+              +viewer
+                = formattedCurrencyCustomFieldValue(value)
       each (cardsWithLimit (idOrNull ../../_id))
         a.minicard-wrapper.js-minicard(href=originRelativeUrl
           class="{{#if cardIsSelected}}is-selected{{/if}}"

+ 7 - 0
client/components/lists/listBody.js

@@ -13,6 +13,13 @@ BlazeComponent.extendComponent({
     return [];
   },
 
+  customFieldsSum() {
+    return CustomFields.find({
+      boardIds: { $in: [Session.get('currentBoard')] },
+      showSumAtTopOfList: true,
+    });
+  },
+
   openForm(options) {
     options = options || {};
     options.position = options.position || 'top';

+ 6 - 0
client/components/sidebar/sidebarCustomFields.jade

@@ -77,6 +77,12 @@ template(name="createCustomFieldPopup")
 
             span {{_ 'showLabel-field-on-card'}}
 
+
+        a.flex.js-field-show-sum-at-top-of-list(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
+            .materialCheckBox(class="{{#if showSumAtTopOfList}}is-checked{{/if}}")
+
+            span {{_ 'showSum-field-on-list'}}
+
         button.primary.wide.left(type="button")
             | {{_ 'save'}}
         if _id

+ 10 - 0
client/components/sidebar/sidebarCustomFields.js

@@ -234,6 +234,14 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
           $target.find('.materialCheckBox').toggleClass('is-checked');
           $target.toggleClass('is-checked');
         },
+        'click .js-field-show-sum-at-top-of-list'(evt) {
+          let $target = $(evt.target);
+          if (!$target.hasClass('js-field-show-sum-at-top-of-list')) {
+            $target = $target.parent();
+          }
+          $target.find('.materialCheckBox').toggleClass('is-checked');
+          $target.toggleClass('is-checked');
+        },
         'click .primary'(evt) {
           evt.preventDefault();
 
@@ -248,6 +256,8 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
               this.find('.js-field-automatically-on-card.is-checked') !== null,
             alwaysOnCard:
               this.find('.js-field-always-on-card.is-checked') !== null,
+            showSumAtTopOfList:
+              this.find('.js-field-show-sum-at-top-of-list.is-checked') !== null,
           };
 
           // insert or update

+ 1 - 0
i18n/en.i18n.json

@@ -652,6 +652,7 @@
   "automatically-field-on-card": "Add field to new cards",
   "always-field-on-card": "Add field to all cards",
   "showLabel-field-on-card": "Show field label on minicard",
+  "showSum-field-on-list": "Show sum of fields at top of list",
   "yes": "Yes",
   "no": "No",
   "accounts": "Accounts",

+ 18 - 0
models/customFields.js

@@ -101,6 +101,13 @@ CustomFields.attachSchema(
       type: Boolean,
       defaultValue: false,
     },
+    showSumAtTopOfList: {
+      /**
+       * should the sum of the custom fields be shown at top of list?
+       */
+      type: Boolean,
+      defaultValue: false,
+    },
     createdAt: {
       type: Date,
       optional: true,
@@ -347,6 +354,7 @@ if (Meteor.isServer) {
    * @param {boolean} showOnCard should we show the custom field on cards?
    * @param {boolean} automaticallyOnCard should the custom fields automatically be added on cards?
    * @param {boolean} showLabelOnMiniCard should the label of the custom field be shown on minicards?
+   * @param {boolean} showSumAtTopOfList should the sum of the custom fields be shown at top of list?
    * @return_type {_id: string}
    */
   JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function(
@@ -363,6 +371,7 @@ if (Meteor.isServer) {
       showOnCard: req.body.showOnCard,
       automaticallyOnCard: req.body.automaticallyOnCard,
       showLabelOnMiniCard: req.body.showLabelOnMiniCard,
+      showSumAtTopOfList: req.body.showSumAtTopOfList,
       boardIds: [board._id],
     });
 
@@ -390,6 +399,7 @@ if (Meteor.isServer) {
    * @param {boolean} showOnCard should we show the custom field on cards
    * @param {boolean} automaticallyOnCard should the custom fields automatically be added on cards
    * @param {boolean} showLabelOnMiniCard should the label of the custom field be shown on minicards
+   * @param {boolean} showSumAtTopOfList should the sum of the custom fields be shown at top of list
    * @return_type {_id: string}
    */
   JsonRoutes.add(
@@ -444,6 +454,14 @@ if (Meteor.isServer) {
         );
       }
 
+      if (req.body.hasOwnProperty('showSumAtTopOfList')) {
+        CustomFields.direct.update(
+          { _id: paramFieldId },
+          { $set: { showSumAtTopOfList: req.body.showSumAtTopOfList } },
+        );
+      }
+
+
       JsonRoutes.sendResult(res, {
         code: 200,
         data: { _id: paramFieldId },