-
Notifications
You must be signed in to change notification settings - Fork 8
/
receipts.go
110 lines (98 loc) · 3.53 KB
/
receipts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package freee
import (
"context"
"fmt"
"net/http"
"path"
"github.com/google/go-querystring/query"
"golang.org/x/oauth2"
)
const (
APIPathReceipts = "receipts"
)
type CreateReceiptParams struct {
// 事業所ID
CompanyID int64 `json:"company_id"`
// メモ (255文字以内)
Description string `json:"description,omitempty"`
// 取引日 (yyyy-mm-dd)
IssueDate string `json:"issue_date"`
// 証憑ファイル
Receipt []byte `json:"receipt"`
}
type Receipts struct {
Receipts []Receipt `json:"receipts"`
}
type ReceiptResponse struct {
Receipt Receipt `json:"receipt"`
}
type Receipt struct {
// 証憑ID
ID int64 `json:"id"`
// ステータス(unconfirmed:確認待ち、confirmed:確認済み、deleted:削除済み、ignored:無視)
Status string `json:"status"`
// メモ
Description string `json:"description,omitempty"`
// MIMEタイプ
MimeType string `json:"mime_type"`
// 発生日
IssueDate string `json:"issue_date,omitempty"`
// アップロード元種別
Origin string `json:"origin"`
// 作成日時(ISO8601形式)
CreatedAt string `json:"created_at"`
// ファイルのダウンロードURL(freeeにログインした状態でのみ閲覧可能です。) <br> <br> file_srcは廃止予定の属性になります。<br> file_srcに替わり、証憑ファイルのダウンロード APIをご利用ください。<br> 証憑ファイルのダウンロードAPIを利用することで、以下のようになります。 <ul> <li>アプリケーション利用者はfreee APIアプリケーションにログインしていれば、証憑ダウンロード毎にfreeeに改めてログインすることなくファイルが参照できるようになります。</li> </ul>
FileSrc string `json:"file_src"`
User UserCreatedReceipt `json:"user"`
}
type GetReceiptOpts struct {
StartDate string `url:"start_date"`
EndDate string `url:"end_date"`
UserName string `url:"user_name,omitempty"`
Number int64 `url:"number,omitempty"`
CommentType string `url:"comment_type,omitempty"`
CommentImportant bool `url:"comment_important,omitempty"`
Category string `url:"category,omitempty"`
Offset int64 `url:"offset,omitempty"`
Limit int64 `url:"limit,omitempty"`
}
type UserCreatedReceipt struct {
// ユーザーID
ID int64 `json:"id"`
// メールアドレス
Email string `json:"email"`
// 表示名
DisplayName string `json:"display_name,omitempty"`
}
func (c *Client) CreateReceipt(
ctx context.Context, oauth2Token *oauth2.Token,
params CreateReceiptParams,
receiptName string,
) (*ReceiptResponse, *oauth2.Token, error) {
postBody := map[string]string{
"company_id": fmt.Sprint(params.CompanyID),
"description": params.Description,
"issue_date": params.IssueDate,
}
var result ReceiptResponse
oauth2Token, err := c.postFiles(ctx, APIPathReceipts, http.MethodPost, oauth2Token, nil, postBody, receiptName, params.Receipt, &result)
if err != nil {
return nil, oauth2Token, err
}
return &result, oauth2Token, nil
}
func (c *Client) GetReceipt(
ctx context.Context, oauth2Token *oauth2.Token, companyID int64, receiptID int64,
) (*ReceiptResponse, *oauth2.Token, error) {
var result ReceiptResponse
v, err := query.Values(nil)
if err != nil {
return nil, oauth2Token, err
}
SetCompanyID(&v, companyID)
oauth2Token, err = c.call(ctx, path.Join(APIPathReceipts, fmt.Sprint(receiptID)), http.MethodGet, oauth2Token, v, nil, &result)
if err != nil {
return nil, oauth2Token, err
}
return &result, oauth2Token, nil
}