functions/public/Update-CattleRecord.ps1

function Update-CattleRecord {
    <#
    .SYNOPSIS
    Updates an existing cattle record
    
    .DESCRIPTION
    Modifies cattle information in the database. All fields except CattleID can be updated.
    Only provides values for fields you want to change.
    
    .PARAMETER CattleID
    Database ID of the cattle to update (required)
    
    .PARAMETER TagNumber
    New tag number for the animal (required)
    
    .PARAMETER OriginFarm
    Name of the origin farm (required)
    
    .PARAMETER OriginFarmID
    Database ID of the origin farm
    
    .PARAMETER Name
    Updated name for the animal
    
    .PARAMETER Breed
    Updated breed designation
    
    .PARAMETER Gender
    Updated gender. Valid values: 'Steer' or 'Heifer'
    
    .PARAMETER Location
    Updated location/pen assignment
    
    .PARAMETER Owner
    Updated owner or destination farm
    
    .PARAMETER PricePerDay
    Updated daily care cost rate
    
    .PARAMETER BirthDate
    Updated birth date
    
    .PARAMETER PurchaseDate
    Updated purchase date
    
    .PARAMETER Status
    Updated status. Valid values: 'Active', 'Sold', 'Deceased', 'Transferred'
    
    .PARAMETER Notes
    Updated notes or observations
    
    .EXAMPLE
    Update-CattleRecord -CattleID 5 -TagNumber "A042" -OriginFarm "Smith Ranch" -Location "Pen 3"
    
    Updates the location for cattle ID 5
    
    .EXAMPLE
    Update-CattleRecord -CattleID 12 -TagNumber "H015" -OriginFarm "Red River" -Status "Sold" -Notes "Sold to Johnson Feedlot on 12/10/2025"
    
    Marks cattle as sold and adds notes
    
    .NOTES
    The ModifiedDate field is automatically updated to the current timestamp.
    #>

    param(
        [Parameter(Mandatory)]
        [int]$CattleID,
        
        [Parameter(Mandatory)]
        [string]$TagNumber,
        
        [Parameter(Mandatory)]
        [string]$OriginFarm,
        
        [Parameter()]
        [int]$OriginFarmID,
        
        [Parameter()]
        [string]
        $Name,
        
        [Parameter()]
        [string]
        $Breed,
        
        [Parameter()]
        [ValidateSet('Steer', 'Heifer')]
        [string]
        $Gender,

        [Parameter()]
        [String]
        $Location,

        [Parameter()]
        [String]
        $Owner,

        [Parameter()]
        [decimal]
        $PricePerDay,

        [Parameter()]
        [Nullable[DateTime]]
        $BirthDate,
        
        [Parameter()]
        [Nullable[DateTime]]
        $PurchaseDate,
        
        [Parameter()]
        [ValidateSet('Active', 'Sold', 'Deceased', 'Transferred')]
        [string]
        $Status = 'Active',
        
        [Parameter()]
        [string]
        $Notes
    )
    
    # Build UPDATE query dynamically - only update provided fields
    $updates = @()
    $updates += "TagNumber = $(ConvertTo-SqlValue -Value $TagNumber)"
    $updates += "OriginFarm = $(ConvertTo-SqlValue -Value $OriginFarm)"
    
    if ($PSBoundParameters.ContainsKey('OriginFarmID')) {
        $updates += "OriginFarmID = $OriginFarmID"
    }
    if ($PSBoundParameters.ContainsKey('Name')) {
        $updates += "Name = $(ConvertTo-SqlValue -Value $Name)"
    }
    if ($PSBoundParameters.ContainsKey('Breed')) {
        $updates += "Breed = $(ConvertTo-SqlValue -Value $Breed)"
    }
    if ($PSBoundParameters.ContainsKey('Gender')) {
        $updates += "Gender = $(ConvertTo-SqlValue -Value $Gender)"
    }
    if ($PSBoundParameters.ContainsKey('BirthDate')) {
        $updates += "BirthDate = $(ConvertTo-SqlValue -Value $BirthDate)"
    }
    if ($PSBoundParameters.ContainsKey('PurchaseDate')) {
        $updates += "PurchaseDate = $(ConvertTo-SqlValue -Value $PurchaseDate)"
    }
    if ($PSBoundParameters.ContainsKey('Location')) {
        $updates += "Location = $(ConvertTo-SqlValue -Value $Location)"
    }
    if ($PSBoundParameters.ContainsKey('Owner')) {
        $updates += "Owner = $(ConvertTo-SqlValue -Value $Owner)"
    }
    if ($PSBoundParameters.ContainsKey('PricePerDay')) {
        $updates += "PricePerDay = $PricePerDay"
    }
    if ($PSBoundParameters.ContainsKey('Status')) {
        $updates += "Status = $(ConvertTo-SqlValue -Value $Status)"
    }
    if ($PSBoundParameters.ContainsKey('Notes')) {
        $updates += "Notes = $(ConvertTo-SqlValue -Value $Notes)"
    }
    
    $updates += "ModifiedDate = CURRENT_TIMESTAMP"
    
    $setClause = $updates -join ', '
    $query = "UPDATE Cattle SET $setClause WHERE CattleID = $CattleID"
    
    Invoke-UniversalSQLiteQuery -Path $script:DatabasePath -Query $query
}