##やりたいこと
毎月請求書を作る際kintoneで管理している各案件の詳細を見ながらコピペしていたので、kintoneから直接請求書を作成したい。
エンジニアではないのでアドバイスもらえるとありがたいです!
登場するkintoneのアプリ
・取引先管理をするアプリ
・案件管理をするアプリ
###ステップ1
MFクラウド請求書側での準備
1:APIを利用するアプリケーションの作成
2:アクセストークンの発行
この作業方法は公式の説明ページに書いてあるのでそのままやった。
https://support.biz.moneyforward.com/invoice/guide/api-guide/a01.html
###ステップ2
kintone側での準備
1:特に考えもせずとりあえず実装してみる
→すぐ行き詰まった。
2:APIを叩いて請求書を作成するためにはリクエストに[department_id]を含めないといけないとのこと
┗[department_id]はMF請求で取引先を登録した際に自動採番される部門のIDとのこと。
※取引先の登録は自分で登録する場合と、見積りや請求書を作成した際に自動で登録されるっぽい。
参考:https://invoice.moneyforward.com/api/v2/swagger_ui
3:どうしようか考える
→kintoneで取引先の管理してるから、新しく取引先を登録した時にMF請求にも登録してあげる
※取引先のマスターはkintoneにしてあげて、MF側では登録しないようなフローが必要と思う。
→[department_id]を取得してくる
→kintone側で[department_id]を保持
→請求書作成のAPIリクエストの時にkintoneで保持してる[department_id]を利用でいけるんじゃない?
※関連レコードを使って案件管理アプリに[department_id]を引っ張ってくる
4:よし、いけそうだなと思ったのでとりあえず取引先管理してるアプリの方からカスタマイズ
(function() {
"use strict";
kintone.events.on('app.record.create.submit.success', function(event) {
window.alert("MF請求へ同期させてください!");
});
kintone.events.on('app.record.edit.submit.success', function(event) {
window.alert("MF請求へ同期させてください!");
});
kintone.events.on('app.record.detail.show', function(event) {
if (document.getElementById('mf_invoice') !== null) {
return;
}
console.log(event)
var mySpaceFieldButton = document.createElement("button");
mySpaceFieldButton.id = "mf_invoice";
mySpaceFieldButton.innerText = "MFへ同期する";
mySpaceFieldButton.onclick = function () {
var appId = kintone.app.getId();
var recordId = event["record"]["$id"]["value"];
var companyName = event["record"]["会社名"]["value"];
var companyTel = event["record"]["TEL"]["value"];
var companyZip = event["record"]["郵便番号"]["value"];
var companyPrefecture = event["record"]["都道府県"]["value"];
var companeyAddress = event["record"]["住所"]["value"];
var companyDepartment = event["record"]["部署名"]["value"];
var companyPerson = event["record"]["担当者名"]["value"];
var companyMail = event["record"]["メールアドレス"]["value"];
var supplierId = String(event["record"]["取引先ID"]["value"]);
var departmentId = event["record"]["部門ID"]["value"]
var headers = {
"Authorization": "BEARER アクセストークン",
"Content-Type": "application/json",
"Accept": "application/json"
}
if (supplierId == "") {
//新規登録時の処理
var mfInvoiceRecord = {
"partner": {
"name": companyName,
"name_suffix": "御中",
"zip": companyZip,
"tel": companyTel,
"prefecture": companyPrefecture,
"address1": companeyAddress,
"person_name": companyPerson,
"department_name": companyDepartment,
"email": companyMail,
}
}
mfInvoiceRecord = JSON.stringify(mfInvoiceRecord);
var url = 'https://invoice.moneyforward.com/api/v2/partners';
kintone.proxy(url, "POST", headers, mfInvoiceRecord).then(function(body) {
var responseData = JSON.parse(body[0]);
supplierId = responseData["data"]["id"];
departmentId = responseData["data"]["relationships"]["departments"]["data"][0]["id"];
var paramPut = {
"app": appId,
"id": recordId,
"record": {
"取引先ID": {
"value": supplierId
},
"部門ID": {
"value": departmentId
}
}
}
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramPut);
location.reload();
window.alert("MFへ登録ができました!");
}).catch(function(resp) {
window.alert("処理に失敗しました!")
console.log(resp.message);
});
} else {
//顧客情報更新時の処理
var mfInvoiceRecord = {
"partner" : {
"name" : companyName,
"departments": [
{
"id": departmentId,
"zip": companyZip,
"tel": companyTel,
"prefecture": companyPrefecture,
"address1": companeyAddress,
"person_name": companyPerson,
"department_name": companyDepartment,
"email": companyMail
}
]
}
}
mfInvoiceRecord = JSON.stringify(mfInvoiceRecord);
var url = 'https://invoice.moneyforward.com/api/v2/partners/' + supplierId;
kintone.proxy(url, "PUT", headers, mfInvoiceRecord).then(function(body) {
location.reload();
window.alert("登録情報を更新しました!");
console.log(body);
}).catch(function(resp) {
window.alert("処理に失敗しました!")
console.log(resp.message);
});
}
}
kintone.app.record.getSpaceElement('mf_invoice').appendChild(mySpaceFieldButton);
});
})();
MF側の取引先作成と更新まではとりあえず動いた!
次はkintoneの案件管理をしているアプリから見積りと請求書を作る!
疲れたので2回に分けます…