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
|
package xlsx
import (
"fmt"
"strings"
"airlines/pkg/model"
"airlines/pkg/names"
"github.com/leonm1/airports-go"
)
func (t Ticket) ToUser() (model.User, error) {
fio, err := names.ParseLatinName(t.Passenger)
if err != nil {
return model.User{}, fmt.Errorf("%v %s", t.Sheet, err.Error())
}
sex := names.GenderFromTitle(t.Title)
u := model.User{
Nick: "",
Name: fio.First,
Surname: fio.Last,
Fathersname: fio.Patronymic,
Sex: sex,
}
return u, nil
}
func (t Ticket) ToCard() (model.Card, error) {
prefix, number, bonus := parseCardLine(t.Card)
if number == 0 && prefix == "" && bonus == "" {
return model.Card{}, nil
}
return model.Card{
Prefix: prefix,
Number: number,
Bonusprogramm: "",
}, nil
}
func (t Ticket) ToFlight() (model.Flight, error) {
// Resolve IATA records
fromIATA := strings.ToUpper(strings.TrimSpace(t.FromAirport))
toIATA := strings.ToUpper(strings.TrimSpace(t.ToAirport))
fromRec, _ := airports.LookupIATA(fromIATA)
toRec, _ := airports.LookupIATA(toIATA)
fromCity := firstNonEmpty(strings.TrimSpace(t.FromCity), fromRec.City)
toCity := firstNonEmpty(strings.TrimSpace(t.ToCity), toRec.City)
fromCountry := fromRec.Country
toCountry := toRec.Country
departUTC, _, err := t.DateTime()
if err != nil {
return model.Flight{}, err
}
return model.Flight{
Number: strings.TrimSpace(t.FlightNumber),
From: fromIATA,
FromCity: fromCity,
FromCountry: fromCountry,
To: toIATA,
ToCity: toCity,
ToCountry: toCountry,
Date: departUTC,
}, nil
}
|