-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdelivery_parse.go
More file actions
64 lines (59 loc) · 1.57 KB
/
delivery_parse.go
File metadata and controls
64 lines (59 loc) · 1.57 KB
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
package ubl
import (
"github.com/invopop/gobl/bill"
"github.com/invopop/gobl/cbc"
"github.com/invopop/gobl/org"
)
func (ui *Invoice) goblAddDelivery(out *bill.Invoice) error {
d := &bill.DeliveryDetails{}
// Only one delivery Location and Receiver are supported, so if more than one is passed the former will be overwritten
if len(ui.Delivery) > 0 {
for _, del := range ui.Delivery {
if del.ActualDeliveryDate != nil {
deliveryDate, err := parseDate(*del.ActualDeliveryDate)
if err != nil {
return err
}
d.Date = &deliveryDate
}
if del.EstimatedDeliveryPeriod != nil {
p, err := goblPeriodDates(del.EstimatedDeliveryPeriod)
if err != nil {
return err
}
d.Period = p
}
if del.DeliveryLocation != nil && del.DeliveryLocation.ID != nil {
id := &org.Identity{
Code: cbc.Code(del.DeliveryLocation.ID.Value),
}
if del.DeliveryLocation.ID.SchemeID != nil {
id.Label = *del.DeliveryLocation.ID.SchemeID
}
d.Identities = []*org.Identity{id}
}
if del.DeliveryParty != nil {
d.Receiver = goblDeliveryParty(del.DeliveryParty)
}
if del.DeliveryLocation != nil && del.DeliveryLocation.Address != nil {
if d.Receiver == nil {
d.Receiver = new(org.Party)
}
d.Receiver.Addresses = []*org.Address{
parseAddress(del.DeliveryLocation.Address),
}
}
}
}
if ui.DeliveryTerms != nil {
d.Identities = []*org.Identity{
{
Code: cbc.Code(ui.DeliveryTerms.ID),
},
}
}
if d.Receiver != nil || d.Date != nil || d.Identities != nil {
out.Delivery = d
}
return nil
}