add revenue now workd through shell command

This commit is contained in:
samantha42
2026-03-24 21:31:01 +01:00
parent 7e2c332e60
commit 63be7b9282
13 changed files with 200 additions and 78 deletions

View File

@@ -2,10 +2,65 @@
package model
import (
"database/sql"
"fmt"
"time"
)
// PeriodType defines the granularity of the revenue entry
type PeriodType string
const (
PeriodQuarter PeriodType = "Q"
PeriodHalfYear PeriodType = "H"
PeriodYear PeriodType = "Y"
)
// Period holds the actual time range for a revenue entry
type Period struct {
ID int
Type PeriodType
Year int
Index int // Q1=1 Q2=2 Q3=3 Q4=4 | H1=1 H2=2 | FY=1
Start time.Time
End time.Time
}
func (p *Period) Validate(checkID bool) error {
if p.ID == 0 && checkID {
return fmt.Errorf("No ID Set")
} else if p.Type == PeriodQuarter && (p.Index > 4 || p.Index < 1) {
return fmt.Errorf("Not Valid Quarter index")
} else if p.Type == PeriodHalfYear && (p.Index > 2 || p.Index < 1) {
return fmt.Errorf("Not Valid HalfYear index")
} else if p.Type == PeriodHalfYear && (p.Index != 1 || p.Year < 1) {
return fmt.Errorf("Not Valid Year index")
}
return nil
}
func (p *Period) Insert(db *sql.DB) error {
_, err := db.Exec(
`INSERT INTO periods (type, year, idx, start_date, end_date) VALUES (?, ?, ?, ?, ?)
ON CONFLICT(type, year, idx) DO UPDATE SET start_date=excluded.start_date, end_date=excluded.end_date`,
string(p.Type), p.Year, p.Index, p.Start.Format("2006-01-02"), p.End.Format("2006-01-02"),
)
if err != nil {
return fmt.Errorf("upsert period: %w", err)
}
var id int
err = db.QueryRow(
`SELECT id FROM periods WHERE type = ? AND year = ? AND idx = ?`,
string(p.Type), p.Year, p.Index,
).Scan(&id)
if err != nil {
return fmt.Errorf("select period: %w", err)
}
p.ID = id
return nil
}
func QuarterPeriod(year, q int) Period {
months := map[int][2]int{
1: {1, 3}, 2: {4, 6}, 3: {7, 9}, 4: {10, 12},