😅addDataToArray, cộng mảng đối tượng với điều kiện key == (ok)

https://kobesekkei.cybozu.com/k/194/

var record = {
  "日報テーブル": {
    "type": "SUBTABLE",
    "value": [{
      "id": "354258",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "08:30"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "09:30"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "作業"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト1"
        },
        "作業時間": {
          "type": "CALC",
          "value": "01:00"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "機械不具合"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "13"
        }
      }
    }, {
      "id": "354259",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "09:30"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "10:30"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "打合せ(社内・社外)"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト2"
        },
        "作業時間": {
          "type": "CALC",
          "value": "01:00"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "用紙精度"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "13"
        }
      }
    }, {
      "id": "354260",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "10:30"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "12:00"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "見積り・営業"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト3"
        },
        "作業時間": {
          "type": "CALC",
          "value": "01:30"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "データ送付ミス(人的)"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "14"
        }
      }
    }, {
      "id": "354261",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "13:00"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "15:00"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "A工程"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト4"
        },
        "作業時間": {
          "type": "CALC",
          "value": "02:00"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "データ作成ミス(人的)"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "15"
        }
      }
    }, {
      "id": "354262",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "15:00"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "17:00"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "B工程"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト5"
        },
        "作業時間": {
          "type": "CALC",
          "value": "02:00"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "人的ミス(折れ目、裂け目)"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "16"
        }
      }
    }, {
      "id": "354263",
      "value": {
        "開始時刻": {
          "type": "TIME",
          "value": "17:00"
        },
        "終了時刻": {
          "type": "TIME",
          "value": "18:15"
        },
        "内容種別": {
          "type": "DROP_DOWN",
          "value": "C工程"
        },
        "客先担当者": {
          "type": "SINGLE_LINE_TEXT",
          "value": "山下て"
        },
        "案件名": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト0608"
        },
        "実行内容": {
          "type": "SINGLE_LINE_TEXT",
          "value": "テスト6"
        },
        "作業時間": {
          "type": "CALC",
          "value": "01:15"
        },
        "テンプロス": {
          "type": "DROP_DOWN",
          "value": "機械不具合"
        },
        "案件番号": {
          "type": "SINGLE_LINE_TEXT",
          "value": "22-0009"
        },
        "案件ID": {
          "type": "NUMBER",
          "value": "17"
        }
      }
    }]
  },
}
function addDataToArray(array_data, field_code, id, value, type) {
  let existing = array_data.filter(function(v, i) {
    return v.id == id;
  });
  if (existing.length && value) {
    let existingIndex = array_data.indexOf(existing[0]);
    if (type == 'add') {
      array_data[existingIndex].record[field_code].value += Number(value);
    }
    if (type == 'sub') {
      array_data[existingIndex].record[field_code].value -= Number(value);
    }
  }
  return array_data
}
function workingHoursBetweenTimes(startDate, endDate) {
  var minutesWorked = 0;
  var minutesOT = 0;
  if (endDate <= startDate) {
    return 0;
  }
  while (startDate < endDate) {
    var currentTime = startDate.getHours() + (startDate.getMinutes() / 60);
    if (currentTime >= 8.5 && currentTime < 17.5 && (currentTime < 12 || currentTime >= 13)) {
      minutesWorked++;
    }
    if (currentTime >= 17.75) {
      minutesOT++;
    }
    startDate.setTime(startDate.getTime() + 1000 * 60);
  }
  return { worked: Math.round(minutesWorked / 60 * 100) / 100, ot: Math.round(minutesOT / 60 * 100) / 100 };
}
var listId = [];
record.日報テーブル.value.forEach(element => {
  if (element.value.案件ID.value) listId.push(element.value.案件ID.value);
});
// listId = ['13', '13', '14', '15', '16', '17']
const contactAppId = 196;
const contactAppIdTwo = 187;
var bodyPost = {
  app: contactAppId,
  records: []
};
var bodyPut = {
  "app": 187,
  "records": [{
      "id": "13",
      "record": {
        "定時内時間計": {
          "value": 8
        },
        "残業時間計": {
          "value": 0.5
        },
        "作業時間合計": {
          "value": 8.5
        },
        "工程A": {
          "value": 2
        },
        "工程B": {
          "value": 2
        },
        "工程C": {
          "value": 0.5
        }
      }
    },
    {
      "id": "17",
      "record": {
        "定時内時間計": {
          "value": 8
        },
        "残業時間計": {
          "value": 0.5
        },
        "作業時間合計": {
          "value": 8.5
        },
        "工程A": {
          "value": 2
        },
        "工程B": {
          "value": 2
        },
        "工程C": {
          "value": 0.5
        }
      }
    },
  ]
};
const recordId = 12;
record.日報テーブル.value.forEach(element => {
  if (element.value.開始時刻.value != "" || element.value.終了時刻.value != "" || element.value.客先担当者.value != "" || element.value.実行内容.value != "" || element.value.テンプロス.value != "") {
    var times = workingHoursBetweenTimes(new Date("01/01/2007 " + element.value.開始時刻.value), new Date("01/01/2007 " + element.value.終了時刻.value));
    let item = {
      定時内時間: { value: times.worked },
      残業時間: { value: times.ot },
      作業時間合計: { value: Number(times.worked) + Number(times.ot) },
    };
    bodyPost.records.push(item);
    bodyPut.records = addDataToArray(bodyPut.records, '定時内時間計', element.value['案件ID'].value, Number(times.worked), 'add');
    bodyPut.records = addDataToArray(bodyPut.records, '残業時間計', element.value['案件ID'].value, Number(times.worked), 'add');
    bodyPut.records = addDataToArray(bodyPut.records, '作業時間合計', element.value['案件ID'].value, Number(times.worked) + Number(times.ot), 'add');
    switch (element.value['内容種別'].value) {
      case 'A工程':
        bodyPut.records = addDataToArray(bodyPut.records, '工程A', element.value['案件ID'].value, Number(times.worked) + Number(times.ot), 'add');
        break;
      case 'B工程':
        bodyPut.records = addDataToArray(bodyPut.records, '工程B', element.value['案件ID'].value, Number(times.worked) + Number(times.ot), 'add');
        break;
      case 'C工程':
        bodyPut.records = addDataToArray(bodyPut.records, '工程C', element.value['案件ID'].value, Number(times.worked) + Number(times.ot), 'add');
        break;
    }
  }
});
console.log(bodyPut);
// console.log(bodyPut);
// console.log(bodyPut);
// {
//   "app": 187,
//   "records": [{
//     "id": "13",
//     "record": {
//       "定時内時間計": {
//         "value": 8
//       },
//       "残業時間計": {
//         "value": 0.5
//       },
//       "作業時間合計": {
//         "value": 8.5
//       },
//       "工程A": {
//         "value": 2
//       },
//       "工程B": {
//         "value": 2
//       },
//       "工程C": {
//         "value": 0.5
//       }
//     }
//   }]
// }
// Kết quả:
// {
//   "app": 187,
//   "records": [{
//     "id": "13",
//     "record": {
//       "定時内時間計": {
//         "value": 74
//       },
//       "残業時間計": {
//         "value": 198.5
//       },
//       "作業時間合計": {
//         "value": 272.5
//       },
//       "工程A": {
//         "value": 13
//       },
//       "工程B": {
//         "value": 13
//       },
//       "工程C": {
//         "value": 11.5
//       }
//     }
//   }]
// } // ok

Last updated

Navigation

Lionel

@Copyright 2023