😅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
PreviousworkingHoursBetweenTimes, tính giờ làm việc, giờ làm thêm (ok)NextYou can get the number of days in a specified month (ok)
Last updated