Public/Start-TogglEntry.ps1
function Start-TogglEntry() { <# .Synopsis Starts a new Time Entry .DESCRIPTION This function starts a new Toggl time entry. This includes: - Stopping the current Entry - Creating a new Entry with the given information. (TODO)- Optionally add a duration to it. .INPUTS This function does not accept pipeline Input yet .OUTPUTS PSToggl.Entry .EXAMPLE Start-TogglEntry "Meeting" Starts a new Time Entry with the Description "Meeting". This will be the most common way to use Start-TogglEntry. .EXAMPLE Start-TogglEntry -Description "Test" -Tags ("Tag1","Tag2") -ProjectName "Offsets" ///TODO: WIP Get-TogglProject *Intern* | Start-TogglEntry "Meeting" .EXAMPLE Start-TogglEntry -Description "Coding" -ProjectName "MyProj" .NOTES Version: 1.0 Author: Clijsters Creation Date: 03.04.2017 Purpose/Change: Initial script development #> [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] param( # The Description and title of your new entry [Parameter(Mandatory = $false)] [String] $Description = "", # The name of the Project to assign this entry to. [Parameter(Mandatory = $false)] [String] $ProjectName = $null, # Tags to identify related entries [Parameter(Mandatory = $false)] [String[]] $Tags, # Duration in minutes #[Parameter(Mandatory = $false)] #[int] $Duration = 0, # Workspace id [Parameter(Mandatory = $false)] [string] $Workspace = $TogglConfiguration.User.Workspace ) New-Item function::local:Write-Verbose -Value ( New-Module -ScriptBlock { param($verb, $fixedName, $verbose) } -ArgumentList @((Get-Command Write-Verbose), $PSCmdlet.MyInvocation.InvocationName, $PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) ).NewBoundScriptBlock{ param($Message) if ($verbose) { & $verb -Message "=>$fixedName $Message" -Verbose } else { & $verb -Message "=>$fixedName $Message" } } | Write-Verbose $entry = @{ time_entry = [psobject]@{ description = $Description; tags = [array]$Tags; #duration = ($Duration * 60); created_with = "PoSh"; wid = $Workspace; }; } if ($ProjectName) { Write-Verbose "ProjectName given. Searching for -Name=$ProjectName" $projects = Get-TogglProject -Name $ProjectName -Workspace $Workspace if ($projects) { Write-Verbose "Found $($projects.count) projects. Selecting 1st one." $projId = $projects[0].id } if ($projId -gt 0) { Write-Verbose "`$projId=$projId" $entry.time_entry.pid = $projId } else { Throw "No project id found for `"$ProjectName`"" } } (Invoke-TogglMethod -UrlSuffix "time_entries/start" -InputObject $entry).data | ConvertTo-TogglEntry } |