For completeness, and maybe to provoke a useful disgust among the GS developers, I have kludged a way of doing this. It is horrible.
First in the Orders view of GS, I manually select the orders that are ready to ship. I don’t automate this because I may not want to ship everything today.
Then I invoke this AppleScript, which compiles a text string containing a syntactically valid Javascript list of the item ID strings for every listing in the orders.
tell application "GarageSale"
set pickListings to "["
repeat with thisTransaction in (get selected ebay orders)
set theseSales to (the ebay order transactions of thisTransaction)
repeat with theSale in theseSales
set listingID to the transaction item title of theSale
set theListing to (the first ebay listing whose item id is listingID)
set pickListings to pickListings & "\"" & (the item id of theListing) & "\", "
end repeat
end repeat
display dialog pickListings & "]"
end tell
For example, when I select a few orders now and run it, I get a dialog popup that looks like this:

Then I select that string (the dialog box size is limited by the height of my screen, I suppose, but if I ever sell more than 100 things in a day I will have other problems).
Then I open the Scripts window of GS, and open this Javascript and paste the string in to replace the const
defined at the top. This hurts my soul. But I do it anyway, because there is apparently no other way to associate user properties and order items.
Here is the script with that list of numbers pasted into the const
:
function run(){
const pickList =
["354480712518", "354461422597", "354477165055", "354480720056", "304752135244", "304741347461", "304749482646", "354461422395", "304748753422", "354472577601", "304744673209", ]
;
function idMatch(listing){
return pickList.includes(listing.itemID);
}
consoleLog("Pick list for " + Date(Date.now()).toLocaleString() + "\n");
let foo = allListings.filter(idMatch);
for (var i in foo) {
consoleLog(
foo[i].title +
"\nLocation:\t" +
foo[i].userProperties["CB_LOCATION"] +
"\n");
}
consoleLog("ready to pick " + foo.length + " items");
}
When I run this, it takes a while, but eventually this string is produced in the consoleLog:
Pick list for Fri Dec 30 2022 09:49:56 GMT-0500 (Eastern Standard Time)
1966 Peg Bracken I TRY TO BEHAVE MYSELF humor ETIQUETTE Fawcett pb illustrated
Location: mass market alphabetical
1938 Playbill YOU NEVER KNOW Hartman Theatre CLIFTON WEBB Toby Wing LUPE VELEZ a
Location: playbills
2002 Humanoids METAL HURLANT #2 Beltran Jodorowsky Wazem EURO-COMIX first print
Location: comics alphabetical
1996 Oct FANTASY & SCIENCE FICTION Harlan Ellison TANITH LEE Gene Wolfe BENFORD
Location: wood shelf
1926 COLOR FOR YOU American Crayon Company ART INSTRUCTION color theory DESIGN
Location: inflow
2002 Humanoids Publishing METAL HURLANT #3 Jodorowsky Beltran Alixe euro-comix
Location: comics alphabetical
2007 Taleb THE BLACK SWAN Impact of the Highly Improbable FIRST PRINTING hc/dj
Location: hardcovers alphabetical
1982 WRIGHT MORRIS: Photographs & Words FRIENDS OF PHOTOGRAPHY monograph ART pb
Location: box 20220721.1
1991 J.P. Shanley THE BIG FUNK script Samuel French "A Casual Play"
Location: play scripts
1973 Peg Bracken BUT I WOULDN'T HAVE MISSED IT FOR THE WORLD! humor travel
Location: mass market alphabetical
1930 Playbill MAE WEST'S "SEX" English Theatre (Indianapolis)
Location: playbills
ready to pick 11 items
Then I can copy and paste that text and print it. Actually it seems as though I can just print the Javascript console by hitting Cmd-P when it’s active, so that’s convenient.
:sigh:
OK so I see several ways for GS to help, here:
- Allow packing slip design templates to refer to the listings associated with them. Something like
[[transaction.item.userProps["foo"]]]
would work, but there has to be some kind of hasMany
relationship between transaction
and actual item
records, right?? This would solve this one problem I have been wrestling with for a long time.
- Allow AppleScript to access the user properties of listings (I could have done all this in a single AppleScript if I could read the userProps fields). Basically “everything the JS does” could happen in AS if I could access those fields. This would be OK but meh to AppleScript.
- Allow Javascript to access the Orders table so I can select some orders and then use JS to do all this. Basically “everything the AppleScript does” is unavailable to the JS, as far as I can tell. This would be great!
BUT the good thing is: I only do this once every day. So this works (painfully) for now.