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

# はじまり
会社のエライ人「ちょっといい？」
会社のエライ人「労働条件通知書ってのがあるんだけどさ」
会社のエライ人「アレ簡単に作ってメールとかで送れる？」
ボクちゃん「(なんだっけそれ・・・？)」
ボクちゃん「カタカタ  (Google：労働条件通知書　メール)」
ボクちゃん「あっ、2019年4月から書面の代わりにメールで条件通知が出来るようになった件でしょうか？(知ってた風に)」
　　[※参考：労働条件通知書の電子化がついに解禁](https://www.cloudsign.jp/media/20181009-roudoujyoukentsuuchisyo-denshika/)
会社のエライ人「そう、よろしく！」

(しばらく後・・・)

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

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

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

# そして出来上がったもの

[⇒DEMO](https://forms.gle/JDVEy3nN5dzbBCyMA)
フォームに答えるとその1～3がメールで届きます

その1：メール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172765/ed3c7aa8-7811-4774-86dd-58e0d4b4e7bd.png)

その2：労働条件通知書
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172765/c07f8a2f-220d-3a2e-f1f9-74e1e2b7f884.png)

その3：入社書類の一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172765/bfb89394-e630-8fd1-7efa-6d6dd9e06b1b.png)



#　ここから解説編（初心者向け）
### 労働条件通知書を書面で作りたい
1.フォームで情報を集める
2.フォーム送信と同時にGASを起動
3.地道にスプレッドシートに印字

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

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

```js:

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;
}
```

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

```js:
MailApp.sendEmail(to, subject, body, option);
```


### 入社書類が10種類以上あるので回収を楽に
マスタ化して、GASで必要な入社書類を取得するように
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172765/9cb972a3-8df1-cd20-73d0-8a7dc2d64b9c.png)

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