Skip to content

Commit

Permalink
Show company name
Browse files Browse the repository at this point in the history
Fix js toggle
  • Loading branch information
dude333 committed May 11, 2021
1 parent b302a04 commit 4466d73
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 34 deletions.
37 changes: 21 additions & 16 deletions fetch/fetch_fii.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,12 @@ func (fii *FII) reportIDs(code string, n int) ([]id, error) {

// Parameters to list the report IDs for the last 'n' dividend reports
timestamp := strconv.FormatInt(int64(time.Now().UnixNano()/1e6), 10)
cnpj, err := fii.CNPJ(code)
d, err := fii.Details(code)
if err != nil {
fii.log.Debug("[reportID] error on fii.Details(%s): %v", code, err)
return nil, err
}
cnpj := d.DetailFund.CNPJ
v := url.Values{
"d": []string{"2"},
"s": []string{"0"},
Expand Down Expand Up @@ -273,22 +275,22 @@ func (fii *FII) dividendReport(code string, ids []id) (*[]rapina.Dividend, error
}

//
// CNPJ returns the FII CNPJ from DB. If not found:
// fetches from server, stores it in the DB and returns the CNPJ.
// Details returns the FII Details from DB. If not found:
// fetches from server, stores it in the DB and returns the Details.
//
func (fii *FII) CNPJ(fiiCode string) (string, error) {
func (fii *FII) Details(fiiCode string) (*rapina.FIIDetails, error) {
if len(fiiCode) != 4 && len(fiiCode) != 6 {
return "", fmt.Errorf("wrong code '%s'", fiiCode)
return nil, fmt.Errorf("wrong code '%s'", fiiCode)
}

cnpj, err := fii.parser.CNPJ(fiiCode)
if err != nil {
return "", err
}
if cnpj != "" {
return cnpj, nil
details, err := fii.parser.Details(fiiCode)
if err == nil && details.DetailFund.CNPJ != "" {
fii.log.Debug("CPNJ encontrado: %s", details.DetailFund.CNPJ)
return details, nil
}

fii.log.Debug("FII details não encontrado no bd. Consultando web...")

// Fetch from server if not found in the database
data := fmt.Sprintf(`{"typeFund":7,"cnpj":"0","identifierFund":"%s"}`, fiiCode[0:4])
enc := base64.URLEncoding.EncodeToString([]byte(data))
Expand All @@ -306,20 +308,23 @@ func (fii *FII) CNPJ(fiiCode string) (string, error) {

resp, err := client.Get(fundDetailURL)
if err != nil {
return "", err
return details, err
}
defer resp.Body.Close()

if resp.StatusCode != 200 {
return "", fmt.Errorf("%s: %s", resp.Status, fundDetailURL)
return details, fmt.Errorf("%s: %s", resp.Status, fundDetailURL)
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", errors.Wrap(err, "read body")
return details, errors.Wrap(err, "read body")
}

_ = fii.parser.StoreFIIDetails(body)
err = fii.parser.StoreFIIDetails(body)
if err != nil {
return details, errors.Wrap(err, "store details")
}

return fii.parser.CNPJ(fiiCode)
return fii.parser.Details(fiiCode)
}
2 changes: 1 addition & 1 deletion interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import "io"
// SaveDividend parses and stores a fetched stream with dividends data and
// returns a structured dividend object.
type FIIParser interface {
CNPJ(code string) (string, error)
Details(code string) (*FIIDetails, error)
StoreFIIDetails(stream []byte) error
Dividends(code, monthYear string) (*[]Dividend, error)
SaveDividend(stream map[string]string) (*Dividend, error)
Expand Down
34 changes: 22 additions & 12 deletions parsers/fiidb.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,38 +64,48 @@ func (fii *FIIParser) StoreFIIDetails(stream []byte) error {
fii.mu.Lock()
defer fii.mu.Unlock()

insert := "INSERT OR IGNORE INTO fii_details (cnpj, acronym, trading_code) VALUES (?,?,?)"
_, err := fii.db.Exec(insert, x.CNPJ, x.Acronym, x.TradingCode)
insert := `INSERT OR IGNORE INTO fii_details
(cnpj, acronym, trading_code, json)
VALUES (?,?,?,?);`
_, err := fii.db.Exec(insert,
x.CNPJ, x.Acronym, x.TradingCode, stream)

return err
}

//
// CNPJ returns the FII CNPJ for the 'code' or
// Details returns the FII Details for the 'code' or
// an empty string if not found in the db.
//
func (fii *FIIParser) CNPJ(code string) (string, error) {
func (fii *FIIParser) Details(code string) (*rapina.FIIDetails, error) {
details := rapina.FIIDetails{}

if fii.db == nil {
return "", ErrDBUnset
return nil, ErrDBUnset
}

var query string
if len(code) == 4 {
query = `SELECT cnpj FROM fii_details WHERE acronym=?`
query = `SELECT json FROM fii_details WHERE acronym=?`
} else if len(code) == 6 {
query = `SELECT cnpj FROM fii_details WHERE trading_code=?`
query = `SELECT json FROM fii_details WHERE trading_code=?`
} else {
return "", fmt.Errorf("invalid code '%s'", code)
return nil, fmt.Errorf("invalid code '%s'", code)
}

var cnpj string
var jsonStr []byte
row := fii.db.QueryRow(query, code)
err := row.Scan(&cnpj)
err := row.Scan(&jsonStr)
if err != nil && err != sql.ErrNoRows {
return "", err
return nil, err
}

if err := json.Unmarshal(jsonStr, &details); err != nil {
fii.log.Error("FII details [%v]: %s\n", err, string(jsonStr))
return nil, errors.Wrap(err, "json unmarshal")
}

return cnpj, nil
return &details, nil
}

//
Expand Down
3 changes: 2 additions & 1 deletion parsers/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ var createTableMap = map[string]string{
(
cnpj TEXT NOT NULL PRIMARY KEY,
acronym varchar(4),
trading_code varchar(6)
trading_code varchar(6),
json varchar
);`,

"stock_quotes": `CREATE TABLE IF NOT EXISTS stock_quotes
Expand Down
10 changes: 10 additions & 0 deletions reports/reports_html.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ func serveTemplate(w http.ResponseWriter, r *http.Request, srv *Server) {

type data struct {
Code string
Name string
Values []value
}
type value struct {
Expand Down Expand Up @@ -174,8 +175,17 @@ func fiiDividends(srv *Server, codes []string, n int) *[]data {
values = append(values, v)
}

details, err := srv.fetchFII.Details(code)
var name string
if err == nil {
name = details.DetailFund.CompanyName
} else {
srv.log.Debug("Nome não encontrado: %v", err)
}

d := data{
Code: code,
Name: name,
Values: values,
}

Expand Down
20 changes: 18 additions & 2 deletions reports/templates/fii.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,36 @@

<script type="text/javascript">
function toggle(event, id) {
console.log("=>", event.target.tagName)
const e = document.getElementById(id);
if (e.style.display == "none") {
e.style.display = "block";
e.style.opacity = 1;
event.target.querySelector("span").innerHTML = "&#11206;";
setToggleText(event.target, "&#11206;")
} else {
e.style.opacity = 0;
event.target.querySelector("span").innerHTML = "&#11208;";
setToggleText(event.target, "&#11208;")
window.setTimeout(
function removethis() {
e.style.display = 'none';
}, 100);
}
}

function setToggleText(target, text) {
switch (target.tagName) {
case "SPAN":
target.innerHTML = text;
break;
case "H3":
event.target.querySelector("span").innerHTML = text;
break;
case "SMALL":
event.target.parentNode.querySelector("span").innerHTML = text;
break;
}
}

function submitOnShiftEnter(event) {
if (event.which === 13 && event.shiftKey) {
event.preventDefault();
Expand Down Expand Up @@ -53,6 +68,7 @@ <h2>Rendimentos dos FII</h2>
{{range .Data}}
<h3 onclick="toggle(event, '{{.Code}}');">
<span>&#11206;</span> {{.Code}}
<small style="color: royalblue; padding-left: 2em;">{{.Name}}</small>
</h3>
<table id="{{.Code}}" class="report">
<thead>
Expand Down
4 changes: 2 additions & 2 deletions reports/templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@
}

small {
font-size: 0.75rem;
vertical-align: middle;
font-size: 0.9rem;
vertical-align: text-bottom;
}

label,
Expand Down

0 comments on commit 4466d73

Please sign in to comment.