diff options
author | bnewbold <bnewbold@robocracy.org> | 2012-04-10 20:58:13 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2012-04-11 10:58:08 -0400 |
commit | 78b207a40436d0c15a2b806171914d802cd20661 (patch) | |
tree | 730d02b32e5d54b2512a319d7ced34ad8ce3aacf /core.go | |
parent | 3c7a4451e62d27bbe9dc8eb2c16e2ff5607d1b04 (diff) | |
download | bommom-78b207a40436d0c15a2b806171914d802cd20661.tar.gz bommom-78b207a40436d0c15a2b806171914d802cd20661.zip |
tests passing
Diffstat (limited to 'core.go')
-rw-r--r-- | core.go | 59 |
1 files changed, 48 insertions, 11 deletions
@@ -1,30 +1,67 @@ package main +import ( + "time" +) + +type OfferPrice struct { + Currency string + MinQty uint32 + Price float32 +} + type Offer struct { + Distributor, Sku, Url, Comment string + Prices []OfferPrice } type LineItem struct { + Mfg, Mpn, Description, Comment, Tag string + Elements []string // TODO: add "circuit element" type + Offers []Offer } -type Element struct { +func (li *LineItem) Id() string { + return li.Mfg + "::" + li.Mpn } // The main anchor of a BOM as a cohesive whole, with a name and permissions. // Multiple BOMs are associated with a single BomStub; the currently active one // is the 'head'. type BomStub struct { - name *ShortName - owner string - description string - homepage *Url - isPublicView, isPublicEdit bool + Name string + Owner string + Description string + HeadVersion string + Homepage *Url + IsPublicView, IsPublicEdit bool } // An actual list of parts/elements. Intended to be immutable once persisted. type Bom struct { - version *ShortName - date uint64 // TODO: unix timestamp? - progeny string // where did this BOM come from? - elements []Element - lineitems []LineItem + Version string + Created time.Time // TODO: unix timestamp? + Progeny string // where did this BOM come from? + LineItems []LineItem +} + +func NewBom(version string) *Bom { + return &Bom{Version: version, Created: time.Now()} +} + +func (b *Bom) GetLineItem(mfg, mpn string) *LineItem { + for _, li := range b.LineItems { + if li.Mfg == mfg && li.Mpn == mpn { + return &li + } + } + return nil +} + +func (b *Bom) AddLineItem(li *LineItem) error { + if eli := b.GetLineItem(li.Mfg, li.Mpn); eli != nil { + return Error("This BOM already had an identical LineItem") + } + b.LineItems = append(b.LineItems, *li) + return nil } |