Skip to content

Commit

Permalink
Imporved the error messages
Browse files Browse the repository at this point in the history
  • Loading branch information
krishnaprasadmg committed Mar 5, 2018
1 parent 0ac2806 commit d50f225
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 33 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# csvToCamt
Convert CSV correction files to CAMT format

Get binaries from [release page](https://github.com/krishnaprasadmg/csvToCamt/releases/tag/v0.1.0)
Get binaries from [release page](https://github.com/krishnaprasadmg/csvToCamt/releases/tag/v0.1.1)

# Example

Expand Down
26 changes: 16 additions & 10 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package main

import (
"flag"

"log"
"fmt"
"os"

"github.com/sunspikes/csvToCamt/utils"
)
Expand All @@ -15,23 +15,29 @@ type Investor struct {
}

func main() {
configFile := flag.String("c", "", "Config file to use")
flag.Parse()
var configFile string

if *configFile == "" {
log.Fatal("You must supply a config file, use -h for usage")
flag.Usage = func() {
fmt.Printf("Usage of %s:\n", os.Args[0])
fmt.Printf("%s -c config.yaml file1.csv file2.csv...\n", os.Args[0])
flag.PrintDefaults()
}

if len(flag.Args()) == 0 {
log.Fatal("You must supply path to CSV files")
flag.StringVar(&configFile, "c", "", "Config file to use, see config.yaml for example")
flag.Parse()

if configFile == "" || len(flag.Args()) == 0 {
flag.Usage()
fmt.Fprintln(os.Stderr, "\nInsufficient arguments!")
os.Exit(1)
}

config := utils.GetConfig(*configFile)
utils.ParseConfigFile(configFile)

investorData := utils.LoadInvestors(flag.Args())
transactionData, totalAmount := utils.BuildTransactions(investorData)

camtDoc := utils.NewCamtDocument(config)
camtDoc := utils.NewCamtDocument()
camtDoc.AddHeaders(totalAmount, len(transactionData))
camtDoc.AddTransactionData(transactionData)
camtDoc.PrintDocument()
Expand Down
26 changes: 12 additions & 14 deletions utils/camt.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@ import (
"time"

"github.com/beevik/etree"
"github.com/spf13/viper"
)

type CamtDocument struct {
config *viper.Viper
camtDoc *etree.Document
cstmrCdtTrfInitn *etree.Element
}

func NewCamtDocument(config *viper.Viper) *CamtDocument {
func NewCamtDocument() *CamtDocument {
camtDoc := etree.NewDocument()
document := camtDoc.CreateElement("Document")
document.CreateAttr("xmlns", "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03")
Expand All @@ -25,7 +23,7 @@ func NewCamtDocument(config *viper.Viper) *CamtDocument {

cstmrCdtTrfInitn := document.CreateElement("CstmrCdtTrfInitn")

return &CamtDocument{config, camtDoc, cstmrCdtTrfInitn}
return &CamtDocument{camtDoc, cstmrCdtTrfInitn}
}

func (c *CamtDocument) AddHeaders(totalAmount float64, nOfTxs int) {
Expand All @@ -47,23 +45,23 @@ func (c *CamtDocument) AddHeaders(totalAmount float64, nOfTxs int) {

InitgPty := GrpHdr.CreateElement("InitgPty")
Nm := InitgPty.CreateElement("Nm")
Nm.CreateCharData(c.config.GetString("camt.company"))
Nm.CreateCharData(config.GetString("camt.company"))

PmtInf := c.cstmrCdtTrfInitn.CreateElement("PmtInf")

PmtInfId := PmtInf.CreateElement("PmtInfId")
PmtInfId.CreateCharData(c.config.GetString("camt.CamtPmtInfId"))
PmtInfId.CreateCharData(config.GetString("camt.CamtPmtInfId"))

PmtMtd := PmtInf.CreateElement("PmtMtd")
PmtMtd.CreateCharData(c.config.GetString("camt.CamtPmtMtd"))
PmtMtd.CreateCharData(config.GetString("camt.CamtPmtMtd"))

PmtInf.AddChild(NbOfTxs.Copy())
PmtInf.AddChild(CtrlSum.Copy())

PmtTpInf := PmtInf.CreateElement("PmtTpInf")
SvcLvl := PmtTpInf.CreateElement("SvcLvl")
Cd := SvcLvl.CreateElement("Cd")
Cd.CreateCharData(c.config.GetString("camt.sepa"))
Cd.CreateCharData(config.GetString("camt.sepa"))

ReqdExctnDt := PmtInf.CreateElement("ReqdExctnDt")
ReqdExctnDt.CreateCharData(tm.Format("2006-01-02"))
Expand All @@ -74,23 +72,23 @@ func (c *CamtDocument) AddHeaders(totalAmount float64, nOfTxs int) {
DbtrAcct := PmtInf.CreateElement("DbtrAcct")
Id := DbtrAcct.CreateElement("Id")
IBAN := Id.CreateElement("IBAN")
IBAN.CreateCharData(c.config.GetString("camt.iban"))
IBAN.CreateCharData(config.GetString("camt.iban"))

DbtrAgt := PmtInf.CreateElement("DbtrAgt")
FinInstnId := DbtrAgt.CreateElement("FinInstnId")
BIC := FinInstnId.CreateElement("BIC")
BIC.CreateCharData(c.config.GetString("camt.bic"))
BIC.CreateCharData(config.GetString("camt.bic"))

ChrgBr := PmtInf.CreateElement("ChrgBr")
ChrgBr.CreateCharData(c.config.GetString("camt.CamtChrgBr"))
ChrgBr.CreateCharData(config.GetString("camt.CamtChrgBr"))
}

func (c *CamtDocument) AddTransactionData(transactionData map[string]*Transaction) {
for _, data := range transactionData {
CdtTrfTxInf := c.cstmrCdtTrfInitn.CreateElement("CdtTrfTxInf")
PmtId := CdtTrfTxInf.CreateElement("PmtId")
EndToEndId := PmtId.CreateElement("PmtId")
EndToEndId.CreateCharData(c.config.GetString("camt.CamtEndToEnd") + data.endToEnd)
EndToEndId.CreateCharData(config.GetString("camt.CamtEndToEnd") + data.endToEnd)

Amt := c.cstmrCdtTrfInitn.CreateElement("Amt")
InstdAmt := Amt.CreateElement("InstdAmt")
Expand All @@ -113,11 +111,11 @@ func (c *CamtDocument) AddTransactionData(transactionData map[string]*Transactio

Purp := c.cstmrCdtTrfInitn.CreateElement("Purp")
Cd := Purp.CreateElement("Purp")
Cd.CreateCharData(c.config.GetString("camt.CamtCd"))
Cd.CreateCharData(config.GetString("camt.CamtCd"))

RmtInf := c.cstmrCdtTrfInitn.CreateElement("RmtInf")
Ustrd := RmtInf.CreateElement("Ustrd")
Ustrd.CreateCharData(c.config.GetString("camt.CamtRef"))
Ustrd.CreateCharData(config.GetString("camt.CamtRef"))
}
}

Expand Down
9 changes: 5 additions & 4 deletions utils/iban.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
)

const (
IBANCachePath = "./iban"
IBANLookupURL = "https://openiban.com/validate/%s?getBIC=true"
)

Expand All @@ -36,12 +35,14 @@ func Lookup(ibans ...string) map[string]IBAN {
var ibanData = make(map[string]IBAN)
var body []byte

if _, err := os.Stat(IBANCachePath); os.IsNotExist(err) {
os.Mkdir(IBANCachePath, os.ModePerm)
cacheDirPath := config.GetString("iban.cachePath")

if _, err := os.Stat(cacheDirPath); os.IsNotExist(err) {
os.Mkdir(cacheDirPath, os.ModePerm)
}

for _, iban := range ibans {
fileName := IBANCachePath + "/" + iban + ".txt"
fileName := cacheDirPath + "/" + iban + ".txt"

if _, err := os.Stat(fileName); os.IsNotExist(err) {
res, err := http.Get(fmt.Sprintf(IBANLookupURL, iban))
Expand Down
8 changes: 4 additions & 4 deletions utils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import (
"github.com/spf13/viper"
)

var config *viper.Viper

func PanicOnError(err error) {
if err != nil {
log.Fatal(err)
}
}

func GetConfig(file string) *viper.Viper {
config := viper.New()
func ParseConfigFile(file string) {
config = viper.New()
config.SetConfigFile(file)
config.SetConfigType("yaml")
PanicOnError(config.ReadInConfig())

return config
}

0 comments on commit d50f225

Please sign in to comment.