GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 68d5b4...04cb4c )
by Victor Hugo
01:04 queued 11s
created

mollie.*SettlementsService.List   A

Complexity

Conditions 3

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 7
dl 0
loc 10
c 0
b 0
f 0
ccs 6
cts 6
cp 1
crap 3
rs 10
nop 1
1
package mollie
2
3
import (
4
	"encoding/json"
5
	"fmt"
6
	"net/http"
7
	"time"
8
9
	"github.com/google/go-querystring/query"
10
)
11
12
// SettlementsService operates over settlements resource
13
type SettlementsService service
14
15
// SettlementStatus describes the status of the settlement
16
type SettlementStatus string
17
18
// Available settlement statuses
19
const (
20
	SettlementStatusOpen    = "string"
21
	SettlementStatusPending = "pending"
22
	SettlementStatusPaidOut = "paidout"
23
	SettlementStatusFailed  = "failed"
24
)
25
26
// SettlementRevenue objects contain the total revenue for each payment method during this period
27
type SettlementRevenue struct {
28
	Description string        `json:"description,omitempty"`
29
	AmountNet   Amount        `json:"amountNet,omitempty"`
30
	AmountVAT   Amount        `json:"amountVat,omitempty"`
31
	AmountGross Amount        `json:"amountGross,omitempty"`
32
	Count       int           `json:"count,omitempty"`
33
	Method      PaymentMethod `json:"method,omitempty"`
34
}
35
36
// SettlementCosts contains information about costs related to a settlement
37
type SettlementCosts struct {
38
	Description string        `json:"description,omitempty"`
39
	AmountNet   Amount        `json:"amountNet,omitempty"`
40
	AmountVAT   Amount        `json:"amountVat,omitempty"`
41
	AmountGross Amount        `json:"amountGross,omitempty"`
42
	Count       int           `json:"count,omitempty"`
43
	Rate        Rate          `json:"rate,omitempty"`
44
	Method      PaymentMethod `json:"method,omitempty"`
45
}
46
47
// SettlementPeriod describe the settlement by month in full detail
48
type SettlementPeriod struct {
49
	Revenue []SettlementRevenue `json:"revenue,omitempty"`
50
	Costs   []SettlementCosts   `json:"costs,omitempty"`
51
}
52
53
// SettlementObject nests as describes for settlement periods
54
type SettlementObject map[string]map[string]SettlementPeriod
55
56
// SettlementLinks is an object with several URL objects relevant to the settlement
57
type SettlementLinks struct {
58
	Self          URL `json:"self,omitempty"`
59
	Payments      URL `json:"payments,omitempty"`
60
	Refunds       URL `json:"refunds,omitempty"`
61
	Chargebacks   URL `json:"chargebacks,omitempty"`
62
	Captures      URL `json:"captures,omitempty"`
63
	Invoice       URL `json:"invoice,omitempty"`
64
	Documentation URL `json:"documentation,omitempty"`
65
}
66
67
// Settlement contains successful payments, together with refunds,
68
// captures and chargebacks into settlements
69
type Settlement struct {
70
	ID        string           `json:"id,omitempty"`
71
	Resource  string           `json:"resource,omitempty"`
72
	Reference string           `json:"reference,omitempty"`
73
	CreatedAt *time.Time       `json:"createdAt,omitempty"`
74
	SettledAt *time.Time       `json:"settledAt,omitempty"`
75
	Status    SettlementStatus `json:"status,omitempty"`
76
	Amount    Amount           `json:"amount,omitempty"`
77
	Periods   SettlementObject `json:"periods,omitempty"`
78
	InvoiceID string           `json:"invoiceId,omitempty"`
79
	Links     SettlementLinks  `json:"_links,omitempty"`
80
}
81
82
// SettlementsListOptions contains query parameters for settlement lists.
83
type SettlementsListOptions struct {
84
	From  *ShortDate `url:"from,omitempty"`
85
	Limit int        `url:"limit,omitempty"`
86
	Embed EmbedValue `url:"embed,omitempty"`
87
}
88
89
// SettlementsList describes a list of settlements.
90
type SettlementsList struct {
91
	Count    int `json:"count,omitempty"`
92
	Embedded struct {
93
		Settlements []Settlement
94
	} `json:"_embedded,omitempty"`
95
	Links PaginationLinks `json:"_links,omitempty"`
96
}
97
98
// Get returns a settlement by its id or the bank reference id
99
//
100
// See: https://docs.mollie.com/reference/v2/settlements-api/get-settlement
101
func (ss *SettlementsService) Get(id string) (s *Settlement, err error) {
102 1
	return ss.get(id)
103
}
104
105
// Next retrieves the details of the current settlement that has not yet been paid out.
106
//
107
// See: https://docs.mollie.com/reference/v2/settlements-api/get-next-settlement
108
func (ss *SettlementsService) Next() (s *Settlement, err error) {
109 1
	return ss.get("next")
110
}
111
112
// Open retrieves the details of the open balance of the organization.
113
// This will return a settlement object representing your organization’s balance.
114
//
115
// See: https://docs.mollie.com/reference/v2/settlements-api/get-open-settlement
116
func (ss *SettlementsService) Open() (s *Settlement, err error) {
117 1
	return ss.get("open")
118
}
119
120
// List retrieves all settlements, ordered from new to old
121
//
122
// See: https://docs.mollie.com/reference/v2/settlements-api/list-settlements
123
func (ss *SettlementsService) List(slo *SettlementsListOptions) (sl *SettlementsList, err error) {
124 1
	res, err := ss.list("", "", slo)
125 1
	if err != nil {
126 1
		return
127
	}
128
129 1
	if err = json.Unmarshal(res.content, &sl); err != nil {
130 1
		return
131
	}
132 1
	return
133
}
134
135
// GetPayments retrieves all payments included in a settlement.
136
//
137
// See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-payments
138
func (ss *SettlementsService) GetPayments(id string, slo *SettlementsListOptions) (pl *PaymentList, err error) {
139 1
	res, err := ss.list(id, "payments", slo)
140 1
	if err != nil {
141 1
		return
142
	}
143
144 1
	if err = json.Unmarshal(res.content, &pl); err != nil {
145 1
		return
146
	}
147 1
	return
148
}
149
150
// GetRefunds retrieves all refunds included in a settlement.
151
//
152
// See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-refunds
153
func (ss *SettlementsService) GetRefunds(id string, slo *SettlementsListOptions) (rl *RefundList, err error) {
154 1
	res, err := ss.list(id, "refunds", slo)
155 1
	if err != nil {
156 1
		return
157
	}
158
159 1
	if err = json.Unmarshal(res.content, &rl); err != nil {
160 1
		return
161
	}
162 1
	return
163
}
164
165
// GetChargebacks retrieves all chargebacks included in a settlement.
166
//
167
// See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-chargebacks
168
func (ss *SettlementsService) GetChargebacks(id string, slo *SettlementsListOptions) (cl *ChargebackList, err error) {
169 1
	res, err := ss.list(id, "chargebacks", slo)
170 1
	if err != nil {
171 1
		return
172
	}
173
174 1
	if err = json.Unmarshal(res.content, &cl); err != nil {
175 1
		return
176
	}
177 1
	return
178
}
179
180
// GetCaptures retrieves all captures included in a settlement.
181
//
182
// See: https://docs.mollie.com/reference/v2/settlements-api/list-settlement-captures
183
func (ss *SettlementsService) GetCaptures(id string, slo *SettlementsListOptions) (cl *CapturesList, err error) {
184 1
	res, err := ss.list(id, "captures", slo)
185 1
	if err != nil {
186 1
		return
187
	}
188
189 1
	if err = json.Unmarshal(res.content, &cl); err != nil {
190 1
		return
191
	}
192 1
	return
193
}
194
195
func (ss *SettlementsService) get(element string) (s *Settlement, err error) {
196 1
	u := fmt.Sprintf("v2/settlements/%s", element)
197 1
	req, err := ss.client.NewAPIRequest(http.MethodGet, u, nil)
198 1
	if err != nil {
199 1
		return
200
	}
201
202 1
	res, err := ss.client.Do(req)
203 1
	if err != nil {
204 1
		return
205
	}
206
207 1
	if err = json.Unmarshal(res.content, &s); err != nil {
208 1
		return
209
	}
210 1
	return
211
}
212
213
func (ss *SettlementsService) list(id string, category string, slo *SettlementsListOptions) (res *Response, err error) {
214 1
	u := "v2/settlements"
215
216 1
	if id != "" {
217 1
		u = fmt.Sprintf("%s/%s", u, id)
218
219 1
		if category != "" {
220 1
			u = fmt.Sprintf("%s/%s", u, category)
221
		}
222
	}
223
224 1
	if slo != nil {
225 1
		v, _ := query.Values(slo)
226 1
		u = fmt.Sprintf("%s?%s", u, v.Encode())
227
	}
228
229 1
	req, err := ss.client.NewAPIRequest(http.MethodGet, u, nil)
230 1
	if err != nil {
231 1
		return
232
	}
233
234 1
	res, err = ss.client.Do(req)
235 1
	if err != nil {
236 1
		return
237
	}
238 1
	return
239
}
240