5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

運用費用0円で入社書類発行システムを作った話

Last updated at Posted at 2019-06-08

はじまり

会社のエライ人「ちょっといい?」
会社のエライ人「労働条件通知書ってのがあるんだけどさ」
会社のエライ人「アレ簡単に作ってメールとかで送れる?」
ボクちゃん「(なんだっけそれ・・・?)」
ボクちゃん「カタカタ (Google:労働条件通知書 メール)」
ボクちゃん「あっ、2019年4月から書面の代わりにメールで条件通知が出来るようになった件でしょうか?(知ってた風に)」
  ※参考:労働条件通知書の電子化がついに解禁
会社のエライ人「そう、よろしく!」

(しばらく後・・・)

ボクちゃん「総務さん、労働条件通知書っていつ出すの?」
総務さん 「内定決まったらだよ」
総務さん 「あと、ついでに入社書類もまとめて送りたいからよろしく」
ボクちゃん「えっ?」
総務さん 「よろ なるはや」

(そうして要件が増えた)

要件を整理すると

  • 労働条件通知書を書面で作りたい
  • メールか何かで被雇用者に送りたい
  • 入社書類が10種類以上あるので回収を楽に

そして出来上がったもの

⇒DEMO
フォームに答えるとその1~3がメールで届きます

その1:メール
image.png

その2:労働条件通知書
image.png

その3:入社書類の一覧
image.png

# ここから解説編(初心者向け)

労働条件通知書を書面で作りたい

1.フォームで情報を集める
2.フォーム送信と同時にGASを起動
3.地道にスプレッドシートに印字

gas
  //印字する from 問合せ入力
  雛形_社員.getRange('E1').setValue('労働条件通知書('+data[3]+')'); //タイトル
  雛形_社員.getRange('A4').setValue(data[1]); //氏名
  雛形_社員.getRange('I3').setValue(data[9]); //入社日

4.シートをPDF化してドライブに保存する


var opts = {
    exportFormat: "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
    format:       "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
    size:         "A4",     // 用紙サイズの指定 legal / letter / A4
    portrait:     "true",   // true → 縦向き、false → 横向き
    fitw:         "true",   // 横幅を用紙に合わせるか
    top_margin:   "0.10", //上余白
    bottom_margin:"0.00", //下余白
    left_margin:  "0.40", //左余白
    right_margin: "0.20", //右余白
    sheetnames:   "false",  // シート名をPDF上部に表示するか
    printtitle:   "false",  // スプレッドシート名をPDF上部に表示するか
    pagenumbers:  "false",  // ページ番号の有無
    gridlines:    "false",  // グリッドラインの表示有無
    fzr:          "false",  // 固定行の表示有無
    //gid:          sheetid,   // シートIDを指定 sheetidは引数で取得
    muteHttpExceptions: "true"
  };

// PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前)
function createPDF(folderid, sheetid, filename, opts){

  // PDFファイルの保存先となるフォルダをフォルダIDで指定
  var folder = DriveApp.getFolderById(folderid);
  
  //同名のファイルが存在するかチェック
  var file = fileExists(folderid, filename+'.pdf');

  if(file){
    //ファイルを削除する
    folder.removeFile(file);
    //return false;
  };

  // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
  var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);

  // PDF作成のオプションを指定
  opts['gid'] = sheetid;
  
  var url_ext = [];
  
  // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納
  for( optName in opts ){
    url_ext.push( optName + "=" + opts[optName] );
  }

  // url_extの各要素を「&」で繋げる
  var options = url_ext.join("&");

  // API使用のためのOAuth認証
  var token = ScriptApp.getOAuthToken();

  Utilities.sleep(6000);//APIのリクエスト過多対策、6秒遅らせる

    // PDF作成
    var response = UrlFetchApp.fetch(url + options, {
      headers: {
        'Authorization': 'Bearer ' +  token
      }
    });

  var blob = response.getBlob().setName(filename + '.pdf');

  // PDFを指定したフォルダに保存
  var recordPDF = folder.createFile(blob);
  return recordPDF;
}

メールか何かで被雇用者に送りたい

MailApp.sendEmail(to, subject, body, option);

入社書類が10種類以上あるので回収を楽に

マスタ化して、GASで必要な入社書類を取得するように
image.png

最後に

ソースの一部を環境変数化したらGitにUPします。
メールでユニークQRを送って、そこから受領フラグ立てとかの機能つけたいな。

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?