-
Notifications
You must be signed in to change notification settings - Fork 4
/
payments.go
96 lines (82 loc) · 5.06 KB
/
payments.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
package moysklad
import (
"encoding/json"
"github.com/google/uuid"
)
type Payment struct {
// Общие поля
AccountID *uuid.UUID `json:"accountId,omitempty"` // ID учетной записи
Agent *Counterparty `json:"agent,omitempty"` // Метаданные контрагента
Applicable *bool `json:"applicable,omitempty"` // Отметка о проведении
Attributes *Attributes `json:"attributes,omitempty"` // Коллекция метаданных доп. полей. Поля объекта
Code *string `json:"code,omitempty"` // Код выданного
Contract *Contract `json:"contract,omitempty"` // Метаданные договора
Created *Timestamp `json:"created,omitempty"` // Дата создания
Deleted *Timestamp `json:"deleted,omitempty"` // Момент последнего удаления
Description *string `json:"description,omitempty"` // Комментарий
ExternalCode *string `json:"externalCode,omitempty"` // Внешний код
Files *Files `json:"files,omitempty"` // Метаданные массива Файлов (Максимальное количество файлов - 100)
Group *Group `json:"group,omitempty"` // Отдел сотрудника
ID *uuid.UUID `json:"id,omitempty"` // ID сущности
Meta Meta `json:"meta"` // Метаданные
Moment *Timestamp `json:"moment,omitempty"` // Дата документа
Name *string `json:"name,omitempty"` // Наименование
Organization *Organization `json:"organization,omitempty"` // Метаданные юрлица
Owner *Employee `json:"owner,omitempty"` // Владелец (Сотрудник)
PaymentPurpose *string `json:"paymentPurpose,omitempty"` // Основание
Printed *bool `json:"printed,omitempty"` // Напечатан ли документ
Project *Project `json:"project,omitempty"` // Метаданные проекта
Published *bool `json:"published,omitempty"` // Опубликован ли документ
Rate *Rate `json:"rate,omitempty"` // Валюта
SalesChannel *SalesChannel `json:"salesChannel,omitempty"` // Метаданные канала продаж
Shared *bool `json:"shared,omitempty"` // Общий доступ
State *State `json:"state,omitempty"` // Метаданные статуса
Sum *float64 `json:"sum,omitempty"` // Сумма
SyncID *uuid.UUID `json:"syncId,omitempty"` // ID синхронизации. После заполнения недоступен для изменения
Updated *Timestamp `json:"updated,omitempty"` // Момент последнего обновления
VatSum *float64 `json:"vatSum,omitempty"` // Сумма включая НДС
LinkedSum *float64 `json:"linkedSum,omitempty"` // Сумма, оплаченная по документу из этого платежа
Operations *Operations `json:"operations,omitempty"` // Массив ссылок на связанные операции в формате Метаданных
// сырые данные
data json.RawMessage
}
// MetaType удовлетворяет интерфейсу MetaTyper
func (p Payment) MetaType() MetaType {
return p.Meta.Type
}
// Data удовлетворяет интерфейсу DataMetaTyper
func (p Payment) Data() json.RawMessage {
return p.data
}
func (p Payment) String() string {
return Stringify(p.Meta)
}
// UnmarshalJSON анмаршалит Входящий платеж, Приходный ордер, при expand=payments
func (p *Payment) UnmarshalJSON(data []byte) (err error) {
type alias Payment
var t alias
if err = json.Unmarshal(data, &t); err != nil {
return err
}
t.data = data
*p = Payment(t)
return nil
}
// ConvertToCashIn структурирует позицию в *CashIn
func (p *Payment) ConvertToCashIn() (*CashIn, error) {
return unmarshalTo[CashIn](p)
}
// ConvertToCashOut структурирует позицию в *CashOut
func (p *Payment) ConvertToCashOut() (*CashOut, error) {
return unmarshalTo[CashOut](p)
}
// ConvertToPaymentIn структурирует позицию в *PaymentIn
func (p *Payment) ConvertToPaymentIn() (*PaymentIn, error) {
return unmarshalTo[PaymentIn](p)
}
// ConvertToPaymentOut структурирует позицию в *PaymentOut
func (p *Payment) ConvertToPaymentOut() (*PaymentOut, error) {
return unmarshalTo[PaymentOut](p)
}
// Payments Входящий платеж, Приходный ордер, Исходящий платеж, Расходный ордер
type Payments []Payment