Guest
2011-02-06, 02:30 AM
Quote:
Originally Posted by RobTrew
The list comes out unsorted. This could be fixed by querying the cache rather than the applescript library, and using an ORDER BY statement in the SQL.
|
To get a sorted list without resorting to SQL and the cache, you could, of course, simply generate an additional column containing a sortable (numeric) form of the date, and then get the shell to do the sorting and remove the temporary column with something like:
Code:
echo reportlines | sort -k 1,3 | cut -f 2,3"
(sort by columns 1 and 3, then return only columns 2 and 3)
e.g.
Code:
property pstrSubject : "TPS Report"
property pstrGreeting : "Boss Name"
property pstrThisWeekHdr : "Here's what I did this week:"
property pstrNextWeekHdr : "Here's what I plan on doing next week:"
property pstrRecpName : "Boss"
property pstrRecpAddr : "the_boss@megacorp.com"
property dteNow : current date
property dteHistory : dteNow - (7 * days)
property dteFuture : dteNow + (7 * days)
property pdteBase : missing value
on run
-- MAKE SURE THAT WE HAVE A BASE DATE FOR EXPRESSING PARTICULAR DATES AS SORTABLE INTEGERS
if pdteBase is missing value then
set pdteBase to dteNow
tell pdteBase
set {its year, its month, its day, its time} to {2001, 1, 1, 0}
end tell
end if
tell application "OmniFocus"
tell front document
-- DEFINE THE TWO SETS OF TASKS,
set refHistory to a reference to (flattened tasks where (in inbox = false and its modification date > dteHistory))
set refFuture to a reference to (flattened tasks where ¬
(in inbox = false) and (completion date is missing value) and (modification date < dteHistory) ¬
and (due date > dteHistory) and (due date < dteFuture))
-- COLLECT THEIR NAMES AND THE DATES REQUIRED,
set {lstHDate, lstName} to {modification date, name} of refHistory
repeat with i from 1 to length of lstHDate
set dte to item i of lstHDate
set item i of lstHDate to ((dte - pdteBase) as string) & tab & short date string of dte & tab & item i of lstName
end repeat
set {lstFDate, lstName} to {due date, name} of refFuture
repeat with i from 1 to length of lstFDate
set dte to item i of lstFDate
set item i of lstFDate to ((dte - pdteBase) as string) & tab & short date string of dte & tab & item i of lstName
end repeat
end tell
end tell
-- AND SORT THE LISTS.
-- (setting line delimiter to \n in preparation for sorting lines in the shell)
set text item delimiters to "
"
set strThisWeek to do shell script "echo " & quoted form of (lstHDate as string) & " | sort -k 1,3 | cut -f 2,3"
set strNextWeek to do shell script "echo " & quoted form of (lstFDate as string) & " | sort -k 1,3 | cut -f 2,3"
set my text item delimiters to space
set strMsg to (pstrGreeting & "
" & pstrThisWeekHdr & "
" & strThisWeek) & "
" & pstrNextWeekHdr & "
" & strNextWeek
tell application "Mail"
tell (make new outgoing message with properties {visible:true, subject:pstrSubject, content:strMsg})
make new to recipient at end of to recipients with properties {name:pstrRecpName, address:pstrRecpAddr}
end tell
activate
end tell
end run
--
Last edited by RobTrew; 2011-02-07 at 03:46 AM..
Reason: Allowed for use of due date in future list