LoginSignup
0
0

More than 3 years have passed since last update.

[守ろう36協定]Freee人事労務APIとGASでslackに残業時間アラート

Posted at

2019年4月より、36(サブロク)協定で定める時間外労働に、罰則付きの上限が設けられており、人事部の人たちは月45時間の上限を超えない様にメールやスラックで残業時間が規定を超えそうな人に対してアラートを飛ばしてくれています。

ただ、そんなことのために時間を割いているのも、また36協定に引っかかってしまう原因になりかねないのでAPIとGASで都度アラートを飛ばして作業効率できればいいのにな。と思いPHPerがGASを書いてみました。
(トリガーの設定→毎日処理させる設定については別記事参照)
(slackの通知設定→「Incoming Webhook」で検索すれば詳しい記事が出てくるのでそちらを参照)

コード

gas.js
var now   = new Date();
var year  = now.getFullYear();
var month = now.getMonth() + 1;
var day   = now.getDate();
var company_id = 'カンパニーID設定';
var token = 'Freeeのトークン設定';

//メソッドにPOSTを指定しログイン情報を設定
var options = {
    'method' : 'GET',
    'headers' : {
        'Authorization':'Bearer ' + token,
        'accept': 'application/json'
    }
};

function myFunction() {
    //アクセス先URLにGETクエストを送信し、従業員一覧を抽出
    var response = UrlFetchApp.fetch('https://api.freee.co.jp/hr/api/v1/companies/' + company_id + '/employees', options).getContentText();

    //JSON形式に直す
    var res = JSON.parse(response);

    var cnt = res.length;
    //従業員一人一人残業時間計算メソッドを使う
    for(i = 0; i < cnt ; i++ ){
        var emp_id = res[i].id;
        totalTime(emp_id)
    }

}
//従業員ごとの残業時間を算出
function totalTime(emp_id){

    //GET先の設定
    var url = 'https://api.freee.co.jp/hr/api/v1/employees/' + emp_id + '/work_record_summaries/' + year + '/' + month + '?company_id=' + company_id + '&work_records=true';

    var response = UrlFetchApp.fetch(url, options).getContentText();
    //JSON形式に直す
    var res = JSON.parse(response);
    var overtime_work_minute = 0;

    //配列の数を取得
    var cnt = res['work_records'].length;
    for(i = 0; i < cnt ; i++ ){
        var workDate = res['work_records'][i].date;
        var workYear = workDate.substr( 0, 4 );
        var workMonth = workDate.substr( 5, 2 );
        var workDay = workDate.substr( 8, 2 );
        var getDate = new Date(workYear, workMonth,workDay);

        //今月か確認するif文
        if(workMonth == month){
            //月内のデータであれば残業時間を追加していく
            overtime_work_minute += parseFloat(res['work_records'][i].total_overtime_work_mins);
        }
    }
    overtime_work_hour = overtime_work_minute / 60;

    //合計値が20時間を超えていればのif文
    if(overtime_work_hour >= 40){
        sentence =  overtime_work_hour+ "残業時間あなたの残業時間のライフは0よ。";
        postSlack(sentence)
    } else if(overtime_work_hour >= 30){
        sentence = "合計残業" + overtime_work_hour+ "時間。残業せず帰りましょう。";
        postSlack(sentence)
    } else if(overtime_work_hour >= 20){
        sentence = "合計残業" + overtime_work_hour+ "時間です。36協定を忘れずに";
        postSlack(sentence)
    }
}

function postSlack(sentence) {


    var slackPayload  = {
        'text'      : sentence
    };
    var slackOptions = {
        'method'      : 'post',
        'contentType' : 'application/json',
        'payload'     : JSON.stringify(slackPayload),
    };
    var slackUrl = 'slackのURLを貼る';
    UrlFetchApp.fetch(slackUrl, slackOptions);

}

あとがき

今勤めてる会社では「Freee人事労務」ではなく「ジョブカン」を使ってますし、チャットツールは「チャットワーク」なので今回書いた記事を会社内で使うことはないんだろうな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0