functions/public/Add-CattleRecord.ps1
|
function Add-CattleRecord { <# .SYNOPSIS Adds a new cattle record to the database .DESCRIPTION Creates a new cattle record in the herd management database with comprehensive tracking information. Supports linking to origin farms and owner farms for complete traceability. .PARAMETER TagNumber Unique identifier tag for the animal (required) .PARAMETER OriginFarm Name of the farm where the animal was purchased or originated (required) .PARAMETER OriginFarmID Database ID of the origin farm (links to Farms table) .PARAMETER Name Optional name for the animal .PARAMETER Breed Breed of the animal (e.g., Angus, Hereford) .PARAMETER Gender Gender of the animal. Must be either 'Steer' or 'Heifer' .PARAMETER Location Current location/pen assignment. Valid values: Pen 1-6, Quarantine, or Pasture .PARAMETER Owner Name of the owner or destination farm .PARAMETER PricePerDay Daily feeding/care cost rate for this animal .PARAMETER BirthDate Date the animal was born .PARAMETER PurchaseDate Date the animal was purchased or acquired .PARAMETER Notes Additional notes or observations about the animal .EXAMPLE Add-CattleRecord -TagNumber "A001" -OriginFarm "Smith Ranch" -Gender "Steer" -Breed "Angus" Creates a basic cattle record with required fields .EXAMPLE Add-CattleRecord -TagNumber "H042" -OriginFarm "Red River Cattle Co" -OriginFarmID 3 -Name "Duke" -Breed "Hereford" -Gender "Steer" -Owner "Johnson Feedlot" -BirthDate "2024-03-15" -PurchaseDate "2024-09-01" -Location "Pen 2" -Notes "Fast grower" Creates a complete cattle record with all tracking information .NOTES The function uses dynamic SQL generation to only insert fields that were provided, avoiding NULL value constraint issues with CHECK constraints in the database. #> param( [Parameter(Mandatory)] [string] $TagNumber, [Parameter(Mandatory)] [string] $OriginFarm, [Parameter()] [int] $OriginFarmID, [Parameter()] [string] $Name, [Parameter()] [string] $Breed, [Parameter()] [ValidateSet('Steer', 'Heifer')] [string] $Gender, [Parameter()] [ValidateSet('Pen 1', 'Pen 2', 'Pen 3', 'Pen 4', 'Pen 5', 'Pen 6', 'Quarantine', 'Pasture')] [string] $Location, [Parameter()] [string] $Owner, [Parameter()] [decimal] $PricePerDay, [Parameter()] [DateTime] $BirthDate, [Parameter(Mandatory)] [DateTime] $PurchaseDate, [Parameter()] [string] $Notes ) # Build dynamic INSERT based on provided parameters, converting values to SQL literals $columns = @() $values = @() $columns += 'TagNumber'; $values += (ConvertTo-SqlValue -Value $TagNumber) $columns += 'OriginFarm'; $values += (ConvertTo-SqlValue -Value $OriginFarm) if ($PSBoundParameters.ContainsKey('OriginFarmID')) { $columns += 'OriginFarmID' $values += (ConvertTo-SqlValue -Value $OriginFarmID) } if ($PSBoundParameters.ContainsKey('Name')) { $columns += 'Name' $values += (ConvertTo-SqlValue -Value $Name) } if ($PSBoundParameters.ContainsKey('Breed')) { $columns += 'Breed' $values += (ConvertTo-SqlValue -Value $Breed) } if ($PSBoundParameters.ContainsKey('Gender')) { $columns += 'Gender' $values += (ConvertTo-SqlValue -Value $Gender) } if ($PSBoundParameters.ContainsKey('Location')) { $columns += 'Location' $values += (ConvertTo-SqlValue -Value $Location) } if ($PSBoundParameters.ContainsKey('Owner')) { $columns += 'Owner' $values += (ConvertTo-SqlValue -Value $Owner) } if ($PSBoundParameters.ContainsKey('PricePerDay')) { $columns += 'PricePerDay' $values += (ConvertTo-SqlValue -Value $PricePerDay) } if ($PSBoundParameters.ContainsKey('BirthDate')) { $columns += 'BirthDate' $values += (ConvertTo-SqlValue -Value $BirthDate) } if ($PSBoundParameters.ContainsKey('PurchaseDate')) { $columns += 'PurchaseDate' $values += (ConvertTo-SqlValue -Value $PurchaseDate) } if ($PSBoundParameters.ContainsKey('Notes')) { $columns += 'Notes' $values += (ConvertTo-SqlValue -Value $Notes) } $columnList = $columns -join ', ' $valueList = $values -join ', ' $query = "INSERT INTO Cattle ($columnList) VALUES ($valueList)" try { Invoke-UniversalSQLiteQuery -Path $script:DatabasePath -Query $query Write-Verbose "Created cattle: $TagNumber" } catch { if ($_.Exception.Message -like '*UNIQUE constraint failed*') { throw "A cattle record with tag number '$TagNumber' already exists." } else { throw $_ } } } |