Files
wagfarm/wagfarm-api/logs/cropprotection/model.go

37 lines
1.0 KiB
Go

package cropprotection
import (
"wagfarm-api/assets/pesticide"
"wagfarm-api/database"
"wagfarm-api/logs/generic"
"wagfarm-api/taxonomy/worker"
"github.com/shopspring/decimal"
"gorm.io/gorm"
)
type CropProtectionLog struct {
generic.FieldWorkLog
PesticideID uint `gorm:"not null"`
Pesticide pesticide.Pesticide `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;not null"`
Amount float64 `gorm:"not null"` // in units of the pesticide
PerformedByID uint `gorm:"not null"`
PerformedBy worker.Worker `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;not null"`
}
func (l *CropProtectionLog) AfterSave(db *gorm.DB) (err error) {
// Example: compute cost as Amount * UnitPrice
if l.Pesticide.ID == 0 {
if err := db.First(&l.Pesticide, l.PesticideID).Error; err != nil {
return err
}
}
unitPrice := l.Pesticide.Cost
totalCost := unitPrice.Mul(decimal.NewFromFloat(l.Amount))
l.UpdateCost(db, totalCost)
return
}
func RegisterModels() { database.RegisterModel(&CropProtectionLog{}) }