github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/models/agreement.go (about) 1 package models 2 3 import ( 4 "fmt" 5 "regexp" 6 7 "github.com/mundipagg/boleto-api/util" 8 ) 9 10 // Agreement afiliação do cliente com o bano 11 type Agreement struct { 12 AgreementNumber uint `json:"agreementNumber,omitempty"` 13 Wallet uint16 `json:"wallet,omitempty"` 14 WalletVariation uint16 `json:"walletVariation,omitempty"` 15 Agency string `json:"agency,omitempty"` 16 AgencyDigit string `json:"agencyDigit,omitempty"` 17 Account string `json:"account,omitempty"` 18 AccountDigit string `json:"accountDigit,omitempty"` 19 } 20 21 // IsAgencyValid retorna se é uma agência válida 22 func (a *Agreement) IsAgencyValid() error { 23 re := regexp.MustCompile("(\\D+)") 24 ag := re.ReplaceAllString(a.Agency, "") 25 if len(ag) > 0 && len(ag) < 5 { 26 a.Agency = util.PadLeft(ag, "0", 4) 27 return nil 28 } 29 return NewErrorResponse("MPAgency", "Agência inválida, deve conter até 4 dígitos") 30 } 31 32 // CalculateAgencyDigit calcula dígito da agência 33 func (a *Agreement) CalculateAgencyDigit(digitCalculator func(agency string) string) { 34 re := regexp.MustCompile("(\\D+)") 35 ad := re.ReplaceAllString(a.AgencyDigit, "") 36 if len(ad) == 1 { 37 a.AgencyDigit = ad 38 } else { 39 a.AgencyDigit = digitCalculator(a.Agency) 40 } 41 } 42 43 // IsAccountValid retorna se é uma conta válida 44 func (a *Agreement) IsAccountValid(accountLength int) error { 45 re := regexp.MustCompile("(\\D+)") 46 ac := re.ReplaceAllString(a.Account, "") 47 if len(ac) > 0 && len(ac) < accountLength+1 { 48 a.Account = util.PadLeft(ac, "0", uint(accountLength)) 49 return nil 50 } 51 return NewErrorResponse("MPAccount", fmt.Sprintf("Conta inválida, deve conter até %d dígitos", accountLength)) 52 } 53 54 //CalculateAccountDigit calcula dígito da conta 55 func (a *Agreement) CalculateAccountDigit(digitCalculator func(agency, account string) string) { 56 re := regexp.MustCompile("(\\D+)") 57 ad := re.ReplaceAllString(a.AccountDigit, "") 58 if len(ad) == 1 { 59 a.AccountDigit = ad 60 } else { 61 a.AccountDigit = digitCalculator(a.Agency, a.Account) 62 } 63 }