KMAIN-421: Staging missing local KCLS changes
authorBill Erickson <berickxx@gmail.com>
Wed, 29 Oct 2014 21:07:45 +0000 (17:07 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
    Cross-port: eca548e

20 files changed:
KCLS/openils/var/data/zips.txt
Open-ILS/xul/staff_client/chrome/content/util/date.js
Open-ILS/xul/staff_client/chrome/content/util/print.js
Open-ILS/xul/staff_client/server/patron/summary.xul
Open-ILS/xul/staff_client/server/patron/summary_overlay_horiz.xul
Open-ILS/xul/staff_client/server/skin/custom.js [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/error.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold_transit.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/note1.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/note2.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/custom/transit.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/error.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold_transit.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/note1.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/note2.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/audio/r2/transit.wav [new file with mode: 0644]
Open-ILS/xul/staff_client/server/skin/media/images/portal/newtab2.PNG
Open-ILS/xul/staff_client/server/skin/print_list_templates [new file with mode: 0644]

index e69de29..254d590 100644 (file)
+|WA|AUBURN|98001|1|||
+
+|WA|AUBURN|98002|1|||
+
+|WA|FEDERAL WAY|98003|1|||
+
+|WA||98004|1||||Zip code crosses Hunts Point and Yarrow Point city limits. Use
+parcel viewer to determine permission group. Use parcel viewer to determine
+permission group. 
+
+|WA|BELLEVUE|98005|1|||
+
+|WA|BELLEVUE|98006|1|||
+
+|WA|BELLEVUE|98007|1|||
+
+|WA|BELLEVUE|98008|1|||
+
+|WA|BELLEVUE|98009|1|||
+
+|WA|BLACK DIAMOND|98010|1|||
+
+|WA||98011|1|||
+
+|WA|BOTHELL|98012|1|||
+
+|WA|VASHON|98013|1|||
+
+|WA|CARNATION|98014|1|||
+
+|WA|BELLEVUE|98015|1|||
+
+|WA|DUVALL|98019|1|||
+
+|WA|EDMONDS|98020|1|||
+
+|WA||98021|1|||
+
+|WA|ENUMCLAW|98022|1|||
+
+|WA|FEDERAL WAY|98023|1|||
+
+|WA||98024|1|||
+
+|WA||98025|1|||
+
+|WA|EDMONDS|98026|1|||
+
+|WA|ISSAQUAH|98027|1|||
+
+|WA|BOTHELL|98028|1|||
+
+|WA|ISSAQUAH|98029|1|||
+
+|WA|KENT|98030|1|||
+
+|WA|KENT|98031|1|||
+
+|WA|KENT|98032|1|||
+
+|WA|KIRKLAND|98033|1|||
+
+|WA|KIRKLAND|98034|1|||
+
+|WA|KENT|98035|1|||
+
+|WA||98036|1|||
+
+|WA|LYNNWOOD|98037|1|||
+
+|WA|MAPLE VALLEY|98038|1|||
+
+|WA|MEDINA|98039|1|||
+
+|WA|MERCER ISLAND|98040|1|||
+
+|WA|BOTHELL|98041|1|||
+
+|WA||98042|1|||
+
+|WA|MOUNTLAKE TERRACE|98043|1|||
+
+|WA||98045|1|||
+
+|WA|LYNNWOOD|98046|1|||
+
+|WA|PACIFIC|98047|1|||
+
+|WA|PRESTON|98050|1|||
+
+|WA||98051|1|||
+
+|WA|REDMOND|98052|1|||
+
+|WA|REDMOND|98053|1|||
+
+|WA||98054|1|||
+
+|WA|RENTON|98055|1|||
+
+|WA||98056|1|||May be Renton or Newcastle
+
+|WA|RENTON|98057|1|||
+
+|WA|RENTON|98058|1|||
+
+|WA||98059|1|||May be Renton or Newcastle
+
+|WA||98061|1|||
+
+|WA||98062|1|||
+
+|WA|AUBURN|98063|1|||
+
+|WA|KENT|98064|1|||
+
+|WA|SNOQUALMIE|98065|1|||
+
+|||98068|1||||King County ends within this zip code at top of pass.
+
+|WA|VASHON|98070|1|||
+
+|WA|AUBURN|98071|1|||
+
+|WA|WOODINVILLE|98072|1|||
+
+|WA|REDMOND|98073|1|||
+
+|WA|SAMMAMISH|98074|1|||
+
+|WA|SAMMAMISH|98075|1|||
+
+|WA|WOODINVILLE|98077|1|||
+
+|WA|BOTHELL|98082|1|||
+
+|WA|KIRKLAND|98083|1|||
+
+|WA|LYNNWOOD|98087|1|||
+
+|WA|AUBURN|98092|1|||
+
+|WA|AUBURN|98093|1|||
+
+|WA|SEATTLE|98101|1||||Zip code is totally within the Seattle city limits.
+
+|WA||98102|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98103|1||||Zip code is totally within the Seattle city limits.
+
+|WA||98104|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98105|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98106|1||||Zip code crosses the Seattle city limits. Use parcel
+viewer to determine permission group.
+
+|WA|SEATTLE|98107|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98108|1||||Zip code crosses the Seattle city limits. Use parcel
+viewer to determine permission group.
+
+|WA|SEATTLE|98109|1||||Zip code is totally within the Seattle city limits.
+
+|WA|BAINBRIDGE ISLAND|98110|1|||
+
+|WA|SEATTLE|98111|1|||
+
+|WA|SEATTLE|98112|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98114|1|||
+
+|WA||98115|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98116|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98117|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98118|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98119|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98121|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98122|1||||Zip code is totally within the Seattle city limits.
+
+|||98123|1|||
+
+|WA|SEATTLE|98124|1|||
+
+|WA||98125|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98126|1||||Zip code crosses the Seattle city limits. Use parcel
+viewer to determine permission group.
+
+|WA|SEATTLE|98129|1|||
+
+|WA|SEATTLE|98131|1|||
+
+|WA|SEATTLE|98132|1|||
+
+|WA||98133|1||||Zip code crosses the Seattle city limits. Use parcel viewer to
+determine permission group.
+
+|WA|SEATTLE|98134|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98136|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98138|1|||
+
+|WA|SEATTLE|98144|1||||Zip code is totally within the Seattle city limits.
+
+|WA|SEATTLE|98145|1|||
+
+|WA||98146|1||||Zip code crosses the Seattle city limits. Use parcel viewer to
+determine permission group.
+
+|WA||98148|1|||
+
+|WA|SEATTLE|98151|1|||
+
+|WA|SEATTLE|98154|1|||
+
+|WA||98155|1|||
+
+|WA||98158|1|||
+
+|WA|SEATTLE|98160|1|||
+
+|WA|SEATTLE|98161|1|||
+
+|WA|SEATTLE|98164|1|||
+
+|WA||98166|1|||
+
+|WA||98168|1|||
+
+|WA|SEATTLE|98170|1|||
+
+|WA|SEATTLE|98171|1|||
+
+|WA|SEATTLE|98174|1|||
+
+|WA||98177|1||||Zip code crosses the Seattle city limits. Use parcel viewer to
+determine permission group.
+
+|WA|SEATTLE|98178|1||||Zip code crosses the Seattle city limits. Use parcel
+viewer to determine permission group.
+
+|WA|SEATTLE|98181|1|||
+
+|WA|SEATTLE|98184|1|||
+
+|WA|SEATTLE|98185|1|||
+
+|WA||98188|1|||
+
+|WA|SEATTLE|98190|1|||
+
+|WA|SEATTLE|98191|1|||
+
+|WA|SEATTLE|98195|1|||
+
+|WA||98198|1|||
+
+|WA||98199|1||||Zip code is totally within the Seattle city limits.
+
+|WA|EVERETT|98201|1|||
+
+|WA||98203|1|||
+
+|WA|EVERETT|98204|1|||
+
+|WA|EVERETT|98205|1|||
+
+|WA|EVERETT|98206|1|||
+
+|WA|EVERETT|98207|1|||
+
+|WA|EVERETT|98208|1|||
+
+|WA|ACME|98220|1|||
+
+|WA||98221|1|||
+
+|WA|ANACORTES|98222|1|||
+
+|WA||98223|1|||
+
+|WA|BARING|98224|1|||
+
+|WA||98225|1|||
+
+|WA|BELLINGHAM|98226|1|||
+
+|WA|BELLINGHAM|98227|1|||
+
+|WA|BELLINGHAM|98228|1|||
+
+|WA|BELLINGHAM|98229|1|||
+
+|WA|BLAINE|98230|1|||
+
+|WA|BLAINE|98231|1|||
+
+|WA||98232|1|||
+
+|WA|BURLINGTON|98233|1|||
+
+|WA||98235|1|||
+
+|WA||98236|1|||
+
+|WA|CONCRETE|98237|1|||
+
+|WA||98238|1|||
+
+|WA|COUPEVILLE|98239|1|||
+
+|WA|CUSTER|98240|1|||
+
+|WA|DARRINGTON|98241|1|||
+
+|WA||98243|1|||
+
+|WA||98244|1|||
+
+|WA||98245|1|||
+
+|WA||98247|1|||
+
+|WA|FERNDALE|98248|1|||
+
+|WA|FREELAND|98249|1|||
+
+|WA|FRIDAY HARBOR|98250|1|||
+
+|WA|GOLD BAR|98251|1|||
+
+|WA|GRANITE FALLS|98252|1|||
+
+|WA||98253|1|||
+
+|WA|HAMILTON|98255|1|||
+
+|WA||98256|1|||
+
+|WA|LA CONNER|98257|1|||
+
+|WA|LAKE STEVENS|98258|1|||
+
+|WA||98259|1|||
+
+|WA|LANGLEY|98260|1|||
+
+|WA||98261|1|||
+
+|WA||98262|1|||
+
+|WA|LYMAN|98263|1|||
+
+|WA|LYNDEN|98264|1|||
+
+|WA|MAPLE FALLS|98266|1|||
+
+|WA|MARBLEMOUNT|98267|1|||
+
+|WA|MARYSVILLE|98270|1|||
+
+|WA|MARYSVILLE|98271|1|||
+
+|WA|MONROE|98272|1|||
+
+|WA|MOUNT VERNON|98273|1|||
+
+|WA|MOUNT VERNON|98274|1|||
+
+|WA|MUKILTEO|98275|1|||
+
+|WA|EVERSON|98276|1|||
+
+|WA|OAK HARBOR|98277|1|||
+
+|WA|OAK HARBOR|98278|1|||
+
+|WA||98279|1|||
+
+|WA||98280|1|||
+
+|WA||98281|1|||
+
+|WA|STANWOOD|98282|1|||
+
+|WA||98283|1|||
+
+|WA|SEDRO-WOOLLEY|98284|1|||
+
+|WA||98286|1|||
+
+|WA||98287|1|||
+
+|WA||98288|1|||
+
+|WA||98290|1|||
+
+|WA|SNOHOMISH|98291|1|||
+
+|WA||98292|1|||
+
+|WA||98293|1|||
+
+|WA|SULTAN|98294|1|||
+
+|WA|SUMAS|98295|1|||
+
+|WA|SNOHOMISH|98296|1|||
+
+|WA||98297|1|||
+
+|WA||98303|1|||
+
+|WA|ASHFORD|98304|1|||
+
+|WA||98305|1|||
+
+|WA||98310|1|||
+
+|WA|BREMERTON|98311|1|||
+
+|WA|BREMERTON|98312|1|||
+
+|WA|BREMERTON|98314|1|||
+
+|WA||98315|1|||
+
+|WA|BRINNON|98320|1|||
+
+|WA|BUCKLEY|98321|1|||
+
+|WA||98322|1|||
+
+|WA|CARBONADO|98323|1|||
+
+|WA||98324|1|||
+
+|WA||98325|1|||
+
+|WA||98326|1|||
+
+|WA|DUPONT|98327|1|||
+
+|WA|EATONVILLE|98328|1|||
+
+|WA|GIG HARBOR|98329|1|||
+
+|WA|ELBE|98330|1|||
+
+|WA||98331|1|||
+
+|WA|GIG HARBOR|98332|1|||
+
+|WA|FOX ISLAND|98333|1|||
+
+|WA||98335|1|||
+
+|WA||98336|1|||
+
+|WA|BREMERTON|98337|1|||
+
+|WA||98338|1|||
+
+|WA||98339|1|||
+
+|WA||98340|1|||
+
+|WA|INDIANOLA|98342|1|||
+
+|WA||98343|1|||
+
+|WA||98344|1|||
+
+|WA||98345|1|||
+
+|WA|KINGSTON|98346|1|||
+
+|WA||98348|1|||
+
+|WA||98349|1|||
+
+|WA||98350|1|||
+
+|WA|LONGBRANCH|98351|1|||
+
+|WA|SUMNER|98352|1|||
+
+|WA||98353|1|||
+
+|WA|MILTON|98354|1|||
+
+|WA||98355|1|||
+
+|WA|MORTON|98356|1|||
+
+|WA||98357|1|||
+
+|WA||98358|1|||
+
+|WA||98359|1|||
+
+|WA||98360|1|||
+
+|WA||98361|1|||
+
+|WA||98362|1|||
+
+|WA||98363|1|||
+
+|WA||98364|1|||
+
+|WA|PORT LUDLOW|98365|1|||
+
+|WA||98366|1|||
+
+|WA|PORT ORCHARD|98367|1|||
+
+|WA||98368|1|||
+
+|WA||98370|1|||
+
+|WA||98371|1|||
+
+|WA|PUYALLUP|98372|1|||
+
+|WA|PUYALLUP|98373|1|||
+
+|WA|PUYALLUP|98374|1|||
+
+|WA|PUYALLUP|98375|1|||
+
+|WA||98376|1|||
+
+|WA||98377|1|||
+
+|WA||98378|1|||
+
+|WA||98380|1|||
+
+|WA||98381|1|||
+
+|WA||98382|1|||
+
+|WA|SILVERDALE|98383|1|||
+
+|WA||98384|1|||
+
+|WA|SOUTH PRAIRIE|98385|1|||
+
+|WA||98386|1|||
+
+|WA||98387|1|||
+
+|WA||98388|1|||
+
+|WA|SUMNER|98390|1|||
+
+|WA|BONNEY LAKE|98391|1|||
+
+|WA|SUQUAMISH|98392|1|||
+
+|WA||98393|1|||
+
+|WA|VAUGHN|98394|1|||
+
+|WA||98395|1|||
+
+|WA||98396|1|||
+
+|WA||98397|1|||
+
+|WA||98398|1|||
+
+|WA|TACOMA|98401|1|||
+
+|WA|TACOMA|98402|1|||
+
+|WA|TACOMA|98403|1|||
+
+|WA|TACOMA|98404|1|||
+
+|WA|TACOMA|98405|1|||
+
+|WA|TACOMA|98406|1|||
+
+|WA|TACOMA|98407|1|||
+
+|WA|TACOMA|98408|1|||
+
+|WA|TACOMA|98409|1|||
+
+|WA|TACOMA|98411|1|||
+
+|WA|TACOMA|98412|1|||
+
+|WA|TACOMA|98413|1|||
+
+|WA|TACOMA|98415|1|||
+
+|WA|TACOMA|98416|1|||
+
+|WA|TACOMA|98418|1|||
+
+|WA|TACOMA|98421|1|||
+
+|WA|TACOMA|98422|1|||
+
+|WA|FIFE|98424|1|||
+
+|||98430|1|||
+
+|WA||98431|1|||
+
+|WA||98433|1|||
+
+|WA|MCCHORD AIR FORCE BASE|98438|1|||
+
+|WA||98439|1|||
+
+|WA|TACOMA|98442|1|||
+
+|WA|TACOMA|98443|1|||
+
+|WA|TACOMA|98444|1|||
+
+|WA|TACOMA|98445|1|||
+
+|WA|TACOMA|98446|1|||
+
+|WA|TACOMA|98447|1|||
+
+|WA|TACOMA|98450|1|||
+
+|WA|TACOMA|98455|1|||
+
+|WA|TACOMA|98460|1|||
+
+|WA|TACOMA|98464|1|||
+
+|WA|TACOMA|98465|1|||
+
+|WA||98466|1|||
+
+|WA|TACOMA|98467|1|||
+
+|WA|TACOMA|98471|1|||
+
+|WA|TACOMA|98477|1|||
+
+|WA|TACOMA|98481|1|||
+
+|WA|TACOMA|98492|1|||
+
+|WA|TACOMA|98493|1|||
+
+|WA||98497|1|||
+
+|WA||98498|1|||
+
+|WA||98499|1|||
+
+|WA||98501|1|||
+
+|WA|OLYMPIA|98502|1|||
+
+|WA|LACEY|98503|1|||
+
+|WA|OLYMPIA|98504|1|||
+
+|WA|OLYMPIA|98505|1|||
+
+|WA|OLYMPIA|98506|1|||
+
+|WA|OLYMPIA|98507|1|||
+
+|WA|OLYMPIA|98508|1|||
+
+|WA|LACEY|98509|1|||
+
+|WA|OLYMPIA|98511|1|||
+
+|WA|OLYMPIA|98512|1|||
+
+|WA|LACEY|98513|1|||
+
+|WA|OLYMPIA|98516|1|||
+
+|WA||98520|1|||
+
+|WA||98522|1|||
+
+|WA||98524|1|||
+
+|WA||98526|1|||
+
+|WA||98527|1|||
+
+|WA||98528|1|||
+
+|WA||98530|1|||
+
+|WA||98531|1|||
+
+|WA||98532|1|||
+
+|WA||98533|1|||
+
+|WA|COPALIS BEACH|98535|1|||
+
+|WA||98536|1|||
+
+|WA|COSMOPOLIS|98537|1|||
+
+|WA||98538|1|||
+
+|WA||98539|1|||
+
+|WA||98540|1|||
+
+|WA|ELMA|98541|1|||
+
+|WA||98542|1|||
+
+|WA||98544|1|||
+
+|WA||98546|1|||
+
+|WA|GRAYLAND|98547|1|||
+
+|WA||98548|1|||
+
+|WA||98550|1|||
+
+|WA|HUMPTULIPS|98552|1|||
+
+|WA||98554|1|||
+
+|WA||98555|1|||
+
+|WA||98556|1|||
+
+|WA||98557|1|||
+
+|WA||98558|1|||
+
+|WA||98559|1|||
+
+|WA||98560|1|||
+
+|WA||98561|1|||
+
+|WA|MOCLIPS|98562|1|||
+
+|WA||98563|1|||
+
+|WA|MOSSYROCK|98564|1|||
+
+|WA|NAPAVINE|98565|1|||
+
+|WA||98566|1|||
+
+|WA||98568|1|||
+
+|WA|OCEAN SHORES|98569|1|||
+
+|WA||98570|1|||
+
+|WA||98571|1|||
+
+|WA|PE ELL|98572|1|||
+
+|WA||98575|1|||
+
+|WA|RAINIER|98576|1|||
+
+|WA||98577|1|||
+
+|WA|ROCHESTER|98579|1|||
+
+|WA|ROY|98580|1|||
+
+|WA||98581|1|||
+
+|WA||98582|1|||
+
+|WA||98583|1|||
+
+|WA||98584|1|||
+
+|WA||98585|1|||
+
+|WA|SOUTH BEND|98586|1|||
+
+|WA|TAHOLAH|98587|1|||
+
+|WA||98588|1|||
+
+|WA|TENINO|98589|1|||
+
+|WA|TOKELAND|98590|1|||
+
+|WA|TOLEDO|98591|1|||
+
+|WA||98592|1|||
+
+|WA|VADER|98593|1|||
+
+|WA|WESTPORT|98595|1|||
+
+|WA||98596|1|||
+
+|WA|YELM|98597|1|||
+
+|WA|OLYMPIA|98599|1|||
+
+|WA|AMBOY|98601|1|||
+
+|WA||98602|1|||
+
+|WA||98603|1|||
+
+|WA|BATTLE GROUND|98604|1|||
+
+|WA|BINGEN|98605|1|||
+
+|WA|BRUSH PRAIRIE|98606|1|||
+
+|WA|CAMAS|98607|1|||
+
+|WA||98609|1|||
+
+|WA||98610|1|||
+
+|WA|CASTLE ROCK|98611|1|||
+
+|WA|CATHLAMET|98612|1|||
+
+|WA|CENTERVILLE|98613|1|||
+
+|WA||98614|1|||
+
+|WA||98616|1|||
+
+|WA|DALLESPORT|98617|1|||
+
+|WA||98619|1|||
+
+|WA|GOLDENDALE|98620|1|||
+
+|WA||98621|1|||
+
+|WA||98622|1|||
+
+|WA||98623|1|||
+
+|WA|ILWACO|98624|1|||
+
+|WA|KALAMA|98625|1|||
+
+|WA|KELSO|98626|1|||
+
+|WA|KLICKITAT|98628|1|||
+
+|WA|LA CENTER|98629|1|||
+
+|WA|LONG BEACH|98631|1|||
+
+|WA|LONGVIEW|98632|1|||
+
+|WA|LYLE|98635|1|||
+
+|WA||98637|1|||
+
+|WA|NASELLE|98638|1|||
+
+|WA|NORTH BONNEVILLE|98639|1|||
+
+|WA|OCEAN PARK|98640|1|||
+
+|WA||98641|1|||
+
+|WA|RIDGEFIELD|98642|1|||
+
+|WA||98643|1|||
+
+|WA||98644|1|||
+
+|WA||98645|1|||
+
+|WA||98647|1|||
+
+|WA|STEVENSON|98648|1|||
+
+|WA||98649|1|||
+
+|WA|TROUT LAKE|98650|1|||
+
+|WA||98651|1|||
+
+|WA|VANCOUVER|98660|1|||
+
+|WA|VANCOUVER|98661|1|||
+
+|WA|VANCOUVER|98662|1|||
+
+|WA|VANCOUVER|98663|1|||
+
+|WA|VANCOUVER|98664|1|||
+
+|WA|VANCOUVER|98665|1|||
+
+|WA|VANCOUVER|98666|1|||
+
+|WA|VANCOUVER|98667|1|||
+
+|WA|VANCOUVER|98668|1|||
+
+|WA|KLICKITAT|98670|1|||
+
+|WA|WASHOUGAL|98671|1|||
+
+|WA|WHITE SALMON|98672|1|||
+
+|WA||98673|1|||
+
+|WA|WOODLAND|98674|1|||
+
+|WA|YACOLT|98675|1|||
+
+|WA|VANCOUVER|98682|1|||
+
+|WA|VANCOUVER|98683|1|||
+
+|WA|VANCOUVER|98684|1|||
+
+|WA|VANCOUVER|98685|1|||
+
+|WA|VANCOUVER|98686|1|||
+
+|WA|VANCOUVER|98687|1|||
+
+|WA||98801|1|||
+
+|WA|EAST WENATCHEE|98802|1|||
+
+|WA|WENATCHEE|98807|1|||
+
+|WA||98811|1|||
+
+|WA||98812|1|||
+
+|WA|BRIDGEPORT|98813|1|||
+
+|WA||98814|1|||
+
+|WA|CASHMERE|98815|1|||
+
+|WA||98816|1|||
+
+|WA||98817|1|||
+
+|WA||98819|1|||
+
+|WA||98821|1|||
+
+|WA|ENTIAT|98822|1|||
+
+|WA|EPHRATA|98823|1|||
+
+|WA|GEORGE|98824|1|||
+
+|WA||98826|1|||
+
+|WA||98827|1|||
+
+|WA||98828|1|||
+
+|WA||98829|1|||
+
+|WA|MANSFIELD|98830|1|||
+
+|WA||98831|1|||
+
+|WA||98832|1|||
+
+|WA||98833|1|||
+
+|WA||98834|1|||
+
+|WA||98836|1|||
+
+|WA|MOSES LAKE|98837|1|||
+
+|WA|OKANOGAN|98840|1|||
+
+|WA|OMAK|98841|1|||
+
+|WA||98843|1|||
+
+|WA||98844|1|||
+
+|WA||98845|1|||
+
+|WA|PATEROS|98846|1|||
+
+|WA||98847|1|||
+
+|WA||98848|1|||
+
+|WA|RIVERSIDE|98849|1|||
+
+|WA|ROCK ISLAND|98850|1|||
+
+|WA||98851|1|||
+
+|WA||98852|1|||
+
+|WA||98853|1|||
+
+|WA||98855|1|||
+
+|WA|TWISP|98856|1|||
+
+|WA|WARDEN|98857|1|||
+
+|WA||98858|1|||
+
+|WA||98859|1|||
+
+|WA||98860|1|||
+
+|WA|WINTHROP|98862|1|||
+
+|WA||98901|1|||
+
+|WA||98902|1|||
+
+|WA||98903|1|||
+
+|WA|YAKIMA|98904|1|||
+
+|WA|YAKIMA|98907|1|||
+
+|WA|YAKIMA|98908|1|||
+
+|WA|YAKIMA|98909|1|||
+
+|WA||98920|1|||
+
+|WA||98921|1|||
+
+|WA||98922|1|||
+
+|WA||98923|1|||
+
+|WA||98925|1|||
+
+|WA|ELLENSBURG|98926|1|||
+
+|WA|NACHES|98929|1|||
+
+|WA|GRANDVIEW|98930|1|||
+
+|WA|GRANGER|98932|1|||
+
+|WA|HARRAH|98933|1|||
+
+|WA|KITTITAS|98934|1|||
+
+|WA|MABTON|98935|1|||
+
+|WA|MOXEE|98936|1|||
+
+|WA||98937|1|||
+
+|WA||98938|1|||
+
+|WA||98939|1|||
+
+|WA||98940|1|||
+
+|WA|ROSLYN|98941|1|||
+
+|WA|SELAH|98942|1|||
+
+|WA|SOUTH CLE ELUM|98943|1|||
+
+|WA|SUNNYSIDE|98944|1|||
+
+|WA|THORP|98946|1|||
+
+|WA|TIETON|98947|1|||
+
+|WA|TOPPENISH|98948|1|||
+
+|WA|ELLENSBURG|98950|1|||
+
+|WA||98951|1|||
+
+|WA|WHITE SWAN|98952|1|||
+
+|WA|ZILLAH|98953|1|||
+
+|WA|AIRWAY HEIGHTS|99001|1|||
+
+|WA||99003|1|||
+
+|WA|CHENEY|99004|1|||
+
+|WA||99005|1|||
+
+|WA|DEER PARK|99006|1|||
+
+|WA||99008|1|||
+
+|WA||99009|1|||
+
+|WA||99011|1|||
+
+|WA|FAIRFIELD|99012|1|||
+
+|WA||99013|1|||
+
+|WA||99014|1|||
+
+|WA||99015|1|||
+
+|WA||99016|1|||
+
+|WA|LAMONT|99017|1|||
+
+|WA|LATAH|99018|1|||
+
+|WA|LIBERTY LAKE|99019|1|||
+
+|WA||99020|1|||
+
+|WA||99021|1|||
+
+|WA|MEDICAL LAKE|99022|1|||
+
+|WA||99023|1|||
+
+|WA||99025|1|||
+
+|WA||99026|1|||
+
+|WA||99027|1|||
+
+|WA|REARDAN|99029|1|||
+
+|WA|ROCKFORD|99030|1|||
+
+|WA|SPANGLE|99031|1|||
+
+|WA|SPRAGUE|99032|1|||
+
+|WA|TEKOA|99033|1|||
+
+|WA||99034|1|||
+
+|WA||99036|1|||
+
+|WA|VERADALE|99037|1|||
+
+|WA|WAVERLY|99039|1|||
+
+|WA||99040|1|||
+
+|WA||99101|1|||
+
+|WA|ALBION|99102|1|||
+
+|WA|ALMIRA|99103|1|||
+
+|WA|FARMINGTON|99104|1|||
+
+|WA||99105|1|||
+
+|WA|KETTLE FALLS|99107|1|||
+
+|WA|CHEWELAH|99109|1|||
+
+|WA||99110|1|||
+
+|WA|COLFAX|99111|1|||
+
+|WA|COLTON|99113|1|||
+
+|WA|COLVILLE|99114|1|||
+
+|WA|COULEE CITY|99115|1|||
+
+|WA|COULEE DAM|99116|1|||
+
+|WA|CRESTON|99117|1|||
+
+|WA||99118|1|||
+
+|WA|CUSICK|99119|1|||
+
+|WA||99121|1|||
+
+|WA|DAVENPORT|99122|1|||
+
+|WA|ELECTRIC CITY|99123|1|||
+
+|WA|ELMER CITY|99124|1|||
+
+|WA|ENDICOTT|99125|1|||
+
+|WA|KETTLE FALLS|99126|1|||
+
+|WA|SAINT JOHN|99127|1|||
+
+|WA|FARMINGTON|99128|1|||
+
+|WA||99129|1|||
+
+|WA|GARFIELD|99130|1|||
+
+|WA||99131|1|||
+
+|WA|GRAND COULEE|99133|1|||
+
+|WA|HARRINGTON|99134|1|||
+
+|WA|HARTLINE|99135|1|||
+
+|WA||99136|1|||
+
+|WA||99137|1|||
+
+|WA|INCHELIUM|99138|1|||
+
+|WA|IONE|99139|1|||
+
+|WA||99140|1|||
+
+|WA|KETTLE FALLS|99141|1|||
+
+|WA||99143|1|||
+
+|WA|ODESSA|99144|1|||
+
+|WA||99146|1|||
+
+|WA|CRESTON|99147|1|||
+
+|WA||99148|1|||
+
+|WA|MALDEN|99149|1|||
+
+|WA||99150|1|||
+
+|WA|MARCUS|99151|1|||
+
+|WA|METALINE|99152|1|||
+
+|WA|METALINE FALLS|99153|1|||
+
+|WA|HARRINGTON|99154|1|||
+
+|WA||99155|1|||
+
+|WA|NEWPORT|99156|1|||
+
+|WA|NORTHPORT|99157|1|||
+
+|WA|OAKESDALE|99158|1|||
+
+|WA|ODESSA|99159|1|||
+
+|WA|KETTLE FALLS|99160|1|||
+
+|WA|PALOUSE|99161|1|||
+
+|WA|PULLMAN|99163|1|||
+
+|WA|PULLMAN|99164|1|||
+
+|WA|PULLMAN|99165|1|||
+
+|WA|REPUBLIC|99166|1|||
+
+|WA||99167|1|||
+
+|WA|RITZVILLE|99169|1|||
+
+|WA|ROSALIA|99170|1|||
+
+|WA||99171|1|||
+
+|WA|SPRINGDALE|99173|1|||
+
+|WA||99174|1|||
+
+|WA||99176|1|||
+
+|WA|UNIONTOWN|99179|1|||
+
+|WA||99180|1|||
+
+|WA||99181|1|||
+
+|WA|WILBUR|99185|1|||
+
+|WA|SPOKANE|99201|1|||
+
+|WA|SPOKANE|99202|1|||
+
+|WA|SPOKANE|99203|1|||
+
+|WA|SPOKANE|99204|1|||
+
+|WA|SPOKANE|99205|1|||
+
+|WA|SPOKANE|99206|1|||
+
+|WA|SPOKANE|99207|1|||
+
+|WA|SPOKANE|99208|1|||
+
+|WA|SPOKANE|99209|1|||
+
+|WA|SPOKANE|99210|1|||
+
+|WA|SPOKANE|99211|1|||
+
+|WA|SPOKANE|99212|1|||
+
+|WA|SPOKANE|99213|1|||
+
+|WA|SPOKANE|99214|1|||
+
+|WA|SPOKANE|99215|1|||
+
+|WA|SPOKANE|99216|1|||
+
+|WA|SPOKANE|99217|1|||
+
+|WA|SPOKANE|99218|1|||
+
+|WA|SPOKANE|99219|1|||
+
+|WA|SPOKANE|99220|1|||
+
+|WA|SPOKANE|99223|1|||
+
+|WA|SPOKANE|99224|1|||
+
+|WA||99228|1|||
+
+|WA|SPOKANE|99251|1|||
+
+|WA|SPOKANE|99252|1|||
+
+|WA|SPOKANE|99256|1|||
+
+|WA|SPOKANE|99258|1|||
+
+|WA|SPOKANE|99260|1|||
+
+|WA|SPOKANE|99299|1|||
+
+|WA|PASCO|99301|1|||
+
+|WA|PASCO|99302|1|||
+
+|WA|BENTON CITY|99320|1|||
+
+|WA||99321|1|||
+
+|WA|BICKLETON|99322|1|||
+
+|WA|BURBANK|99323|1|||
+
+|WA|COLLEGE PLACE|99324|1|||
+
+|WA|CONNELL|99326|1|||
+
+|WA|OTHELLO|99327|1|||
+
+|WA|DAYTON|99328|1|||
+
+|WA||99329|1|||
+
+|WA||99330|1|||
+
+|WA|HATTON|99332|1|||
+
+|WA||99333|1|||
+
+|WA|KAHLOTUS|99335|1|||
+
+|WA||99336|1|||
+
+|WA|KENNEWICK|99337|1|||
+
+|WA|KENNEWICK|99338|1|||
+
+|WA|LIND|99341|1|||
+
+|WA|MESA|99343|1|||
+
+|WA|OTHELLO|99344|1|||
+
+|WA||99345|1|||
+
+|WA||99346|1|||
+
+|WA|POMEROY|99347|1|||
+
+|WA|PRESCOTT|99348|1|||
+
+|WA|MATTAWA|99349|1|||
+
+|WA|PROSSER|99350|1|||
+
+|WA|RICHLAND|99352|1|||
+
+|WA|RICHLAND|99353|1|||
+
+|WA|RICHLAND|99354|1|||
+
+|WA|ROOSEVELT|99356|1|||
+
+|WA|ROYAL CITY|99357|1|||
+
+|WA|STARBUCK|99359|1|||
+
+|WA|TOUCHET|99360|1|||
+
+|WA|WAITSBURG|99361|1|||
+
+|WA|WALLA WALLA|99362|1|||
+
+|WA||99363|1|||
+
+|WA|WASHTUCNA|99371|1|||
+
+|WA||99401|1|||
+
+|WA|ASOTIN|99402|1|||
+
+|WA|CLARKSTON|99403|1|||
+
+
index 47c3e21..cbf4fd0 100644 (file)
@@ -91,8 +91,9 @@ util.date.formatted_date = function (orig_date,format) {
     if (_date == null) {
         return '';
     }
-
+    var mEN_names = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
     var mm = _date.getMonth() + 1; mm = mm.toString(); if (mm.length == 1) mm = '0' +mm;
+       var mmEN = _date.getMonth();
     var dd = _date.getDate().toString(); if (dd.length == 1) dd = '0' +dd;
     var yyyy = _date.getFullYear().toString();
     var yy = yyyy.substr(2);
@@ -121,6 +122,7 @@ util.date.formatted_date = function (orig_date,format) {
         s = s.replace( /%\{localized_date\}/g, dojo.date.locale.format( _date, dojo_format2 ) );
         s = s.replace( /%\{iso8601\}/g, dojo.date.stamp.toISOString( _date ) );
     }
+    s = s.replace( /%MMM/g, mEN_names[mmEN]);
     s = s.replace( /%m/g, mm );
     s = s.replace( /%d/g, dd );
     s = s.replace( /%Y/g, yyyy );
index e66e81d..c6e8fcd 100644 (file)
@@ -108,8 +108,100 @@ util.print.prototype = {
         if (typeof data != 'string') { return data; }
         return data.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
     },
+'simple' : function(msg,params) {
+        try {
+            if (!params) params = {};
+            params.msg = msg;
+
+            var obj = this;
+
+            obj.data.last_print = { 'msg' : msg, 'params' : params, 'context' : this.context};
+            obj.data.stash('last_print');
+
+            var silent = false;
+            if ( params && params.no_prompt && (params.no_prompt == true || params.no_prompt == 'true') ) {
+                silent = true;
+            }
+
+            var content_type;
+            if (params && params.content_type) {
+                content_type = params.content_type;
+            } else {
+                content_type = 'text/html';
+            }
+
+            var w;
+
+            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+            obj.data.init({'via':'stash'});
+
+            if (typeof obj.data.print_strategy == 'undefined') {
+                obj.data.print_strategy = {};
+                obj.data.stash('print_strategy');
+            }
 
-    'simple' : function(msg,params) {
+            if (params.print_strategy || obj.data.print_strategy[obj.context] || obj.data.print_strategy['default']) {
+
+                switch(params.print_strategy || obj.data.print_strategy[obj.context] || obj.data.print_strategy['default']) {
+                    case 'dos.print':
+                        params.dos_print = true;
+                    case 'custom.print':
+                        /* FIXME - this it a kludge.. we're going to sidestep window-based html rendering for printing */
+                        /* I'm using regexps to mangle the html receipt templates; it'd be nice to use xsl but the */
+                        /* templates aren't guaranteed to be valid xml.  The unadulterated msg is still preserved in */
+                        /* params */
+                        if (content_type=='text/html') {
+                            w = obj.html2txt(msg);
+                        } else {
+                            w = msg;
+                        }
+                        if (! params.no_form_feed) { w = w + '\f'; }
+                        obj.NSPrint(w, silent, params);
+                        return;
+                    break;
+                }
+            }
+
+            switch(content_type) {
+                case 'text/html' :
+                    var jsrc = 'data:text/javascript,' + window.escape('var params = { "data" : ' + js2JSON(params.data) + ', "list" : ' + js2JSON(params.list) + '}; function my_init() { if (typeof go_print == "function") { go_print(); } else { setTimeout( function() { if (typeof go_print == "function") { alert("Please tell the developers that the 2-second go_print workaround executed, and let them know whether this job printed successfully.  Thanks!"); go_print(); } else { alert("Please tell the developers that the 2-second go_print workaround did not work.  We will try to print one more time; there have been reports of wasted receipt paper at this point.  Please check the settings in the print dialog and/or prepare to power off your printer.  Thanks!"); window.print(); } }, 2000 ); } /* FIXME - mozilla bug#301560 - xpcom kills it too */ }');
+                    var print_url = 'data:text/html,'
+                        + '<html id="top"><head><script src="/xul/server/main/JSAN.js"></script><script src="' + window.escape(jsrc) + '"></script></head>'
+                        + '<body onload="try{my_init();}catch(E){alert(E);}">' + window.escape(msg) + '</body></html>';
+                    w = obj.win.open(print_url,'receipt_temp','chrome,resizable');
+                    w.minimize();
+                    w.go_print = function() { 
+                        try {
+                            obj.NSPrint(w, silent, params);
+                        } catch(E) {
+                            obj.error.standard_unexpected_error_alert("Print Error in util.print.simple.  After this dialog we'll try a second print attempt. content_type = " + content_type,E);
+                            w.print();
+                        }
+                        w.minimize(); w.close();
+                    }
+                break;
+                default:
+                    w = obj.win.open('data:' + content_type + ',' + window.escape(msg),'receipt_temp','chrome,resizable');
+                    w.minimize();
+                    setTimeout(
+                        function() {
+                            try {
+                                obj.NSPrint(w, silent, params);
+                            } catch(E) {
+                                obj.error.standard_unexpected_error_alert("Print Error in util.print.simple.  After this dialog we'll try a second print attempt. content_type = " + content_type,E);
+                                w.print();
+                            }
+                            w.minimize(); w.close();
+                        }, 1000
+                    );
+                break;
+            }
+
+        } catch(E) {
+            this.error.standard_unexpected_error_alert('util.print.simple',E);
+        }
+    },
+    'simple_new' : function(msg,params) {
         try {
             if (!params) params = {};
             params.msg = msg;
@@ -164,6 +256,11 @@ util.print.prototype = {
 
             switch(content_type) {
                 case 'text/html' :
+                               var jsrc = 'data:text/javascript,' + window.escape('var params = window.arguments[0]; window.go_print = window.arguments[1];');
+                   var print_url = 'data:text/html,'
+                       + '<html id="top"><head><script src="/xul/server/main/JSAN.js"></script><script src="' + window.escape(jsrc) + '"></script></head>'
+                     + '<body onload="try{go_print();}catch(E){alert(E);}">' + window.escape(msg) + '</body></html>';
+/* temporary backport to re-enable javascript templates
                     if(!params.type) {
                         params.type = '';
                     }
@@ -184,6 +281,8 @@ util.print.prototype = {
                     }
                     print_url += '</head><body onload="try{print_init(\'' + params.type + '\');}catch(E){alert(E);}">' + msg.replace(/<script[^>]*>.*?<\/script>/gi,'') + '</body></html>';
                     print_url = 'data:text/html;charset=utf-8,' + encodeURIComponent(print_url);
+*/
+
                     obj.win.openDialog(print_url,'receipt_temp','chrome,resizable,modal', { "data" : params.data, "list" : params.list}, function(w) { 
                         try {
                             obj.NSPrint(w, silent, params);
@@ -289,12 +388,13 @@ util.print.prototype = {
             }
         }
         if (params.footer) s += this.template_sub( params.footer, cols, params );
-
+/* Insanity Check - temporary backport to re-enable javascript templates
         // Sanity check, no javascript in templates
         // Note: [\s\S] is a workaround for . not including newlines.
         s=s.replace(/<script[^>]*>[\s\S]*?<\/script[^>]*>/gi,'')
         s=s.replace(/onload\s*=\s*"[^"]*"/gi,'');
         s=s.replace(/onload\s*=\s*'[^']*'/gi,'');
+*/
 
         if (params.sample_frame) {
             var jsrc = 'data:text/javascript,' + encodeURIComponent('var params = { "data" : ' + js2JSON(params.data) + ', "list" : ' + js2JSON(params.list) + '};');
@@ -353,6 +453,8 @@ util.print.prototype = {
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_ALIAS_OR_FIRSTNAME%/g,this.escape_html((params.patron.alias() == '' || params.patron.alias() == null) ? params.patron.first_given_name() : params.patron.alias()));}
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
+               try{b = s; s = s.replace(/%PATRON_ALIAS_OR_FIRSTNAME_ABBR%/,(params.patron.alias() == '' || params.patron.alias() == null) ? params.data['hold_for_first_given_name'].substr(0,3).toUpperCase() : params.patron.alias());}
+                catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_ALIAS%/g,this.escape_html((params.patron.alias() == '' || params.patron.alias() == null) ? '' : params.patron.alias()));}
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_FIRSTNAME%/g,this.escape_html(params.patron.first_given_name()));}
@@ -361,6 +463,12 @@ util.print.prototype = {
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_LASTNAME%/g,this.escape_html(params.patron.family_name()));}
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
+            try{b = s; s = s.replace(/%PATRON_HOLD_LASTNAME_ABBR%/,(params.data['hold_for_family_name'].substr(0,4).toUpperCase()));}
+                catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
+            try{b = s; s = s.replace(/%PATRON_HOLD_FIRSTNAME_ABBR%/,(params.data['hold_for_first_given_name'].substr(0,3).toUpperCase()));}
+                catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');} 
+            try{b = s; s = s.replace(/%PATRON_ID%/,params.patron.a[28]);}
+                catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_BARCODE%/g,this.escape_html(typeof params.patron.card() == 'object' ? params.patron.card().barcode() : util.functional.find_id_object_in_list( params.patron.cards(), params.patron.card() ).barcode() )) ;}
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s = s.replace(/%PATRON_EXPIRE_DATE%/g,this.escape_html(params.patron.expire_date()));}
@@ -388,6 +496,8 @@ util.print.prototype = {
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
             try{b = s; s=s.replace(/%TODAY_F%/g,(util.date.formatted_date(new Date(),'%F')));}
                 catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
+            try{b = s; s=s.replace(/%TODAY_MMM%/g,(util.date.formatted_date(new Date(),'%MMM %d, %Y')));}         
+                catch(E){s = b; this.error.sdump('D_WARN','string = <' + s + '> error = ' + js2JSON(E)+'\n');}
 
             try {
                 if (typeof params.row != 'undefined') {
@@ -401,9 +511,27 @@ util.print.prototype = {
                     } else { 
                         /* for dump_with_keys */
                         for (var i in params.row) {
+                                switch(i) {         
+                                case "due_date":          
+                                    var re = new RegExp('%'+i+'%',"g");           
+                                    try{b = s; s=s.replace(re, params.row[i]);}           
+                                        catch(E){s = b; this.error.standard_unexpected_error_alert('print.js, template_sub(): 2 string = <' + s + '>',E);}        
+                                    var re =  RegExp('%due_date_EN%',"g");        
+                                    var s1 = params.row[i].replace(/-/gi, '/');           
+                                             
+                                    var s2 = new Date(s1);        
+                                    var s3 = util.date.formatted_date(s2, '%MMM %d, %Y');         
+                                             
+                                    try{b = s; s=s.replace(re, this.escape_html(s3));}          
+                                        catch(E){s = b; this.error.standard_unexpected_error_alert('print.js, template_sub(): 2 string = <' + s + '>',E);}        
+
+                                break;        
+                                default:          
                             var re = new RegExp('%'+i+'%',"g");
                             try{b = s; s=s.replace(re, this.escape_html(params.row[i].toString()));}
                                 catch(E){s = b; this.error.standard_unexpected_error_alert('print.js, template_sub(): 2 string = <' + s + '>',E);}
+                                break;
+                                                       }
                         }
                     }
                 }
index 6990028..e8ec4d8 100644 (file)
                 break;
             };
         }
-    
+     function export_card(ev) {
+var action = ev.originalTarget.id;
+         
+var patron_bc = g.summary.patron.card().barcode();
+       switch(action) {
+                case 'card_export_copy':
+                    // Replace literal instances of '\n' and excessive whitespace.
+                   // s = s.replace(/(\\n)+/g, "\r\n").replace(/ {2,}/g, " ");
+                    copy_to_clipboard(patron_bc);
+                break;
+                case 'card_export_print':
+                    // Replace literal instances of '\n' and excessive whitespace.
+                    //s = s.replace(/(\\n)+/g, "<br/>").replace(/ {2,}/g, " ");
+                    JSAN.use('util.print'); var print = new util.print('receipt'); print.simple(patron_bc);
+                break;
+            }; 
+
+}
         function post_overlay() {
             try {
                 var patron_id = xul_param('id'); 
index 037adf6..ac6daae 100644 (file)
         </rows>
     </grid>
 </vbox>
+<popupset id="patron_summary_popups">
+    <menupopup id="card_export_popup" oncommand="export_card(event);">
+        <menuitem id="card_export_copy" label="&staff.patron_display.address_export_popup.copy;"/>
+        <menuitem id="card_export_print" label="&staff.patron_display.address_export_popup.print;"/>
+    </menupopup>
+</popupset>
 
 <vbox id="patron_info" flex="1">
     <groupbox flex="1">
                 <row>
                     <label id="PatronSummaryContact_library_card_label" class="copyable text_left card label"
                         value="&staff.patron_display.library_card.label;"/>
-                    <description id="patron_card" class="copyable card value click_link" onclick="try { copy_to_clipboard(event); } catch(E) { alert(E); }"/>
+                            <description id="patron_card" class="copyable card value click_link" popup="card_export_popup" />
                 </row>
                 <row>
+                                             <label id="PatronSummaryContact_guardian" value="&staff.patron_display.parent_guardian.label;" />
+                                             <description id="patron_parent_guardian" class="" />
+                                       </row>
+                <row>
                     <label id="PatronSummaryContact_hold_alias_label" class="copyable text_left" value="&staff.patron_display.hold_alias.label;"/>
                     <description id="patron_hold_alias" class="copyable hold_alias value" />
                 </row>
diff --git a/Open-ILS/xul/staff_client/server/skin/custom.js b/Open-ILS/xul/staff_client/server/skin/custom.js
new file mode 100644 (file)
index 0000000..31a9512
--- /dev/null
@@ -0,0 +1,58 @@
+_dump_level = 4;
+//urls['opac'] = '/eg/opac/advanced';
+//urls['opac_rdetail'] = '/eg/opac/record/';
+//urls['opac_rresult'] = '/eg/opac/results';
+//urls['opac_rresult_metarecord'] = '/eg/opac/results?metarecord=';
+//urls['browser'] = urls.opac;
+urls['AUDIO_special_checkin.error'] = '/xul/server/skin/media/audio/custom/error.wav';
+urls['AUDIO_special_checkin.hold_shelf'] = '/xul/server/skin/media/audio/custom/hold.wav';
+urls['AUDIO_special_checkin.no_change'] = '/xul/server/skin/media/audio/custom/note1.wav';
+urls['AUDIO_special_checkin.success'] = '/xul/server/skin/media/audio/custom/note2.wav';
+urls['AUDIO_special_checkin.transit'] = '/xul/server/skin/media/audio/custom/transit.wav';
+urls['AUDIO_special_checkin.transit_for_hold'] = '/xul/server/skin/media/audio/custom/hold_transit.wav';
+urls['AUDIO_event_ASSET_COPY_NOT_FOUND'] = '/xul/server/skin/media/audio/custom/error.wav';
+urls['AUDIO_horrible'] = '/xul/server/skin/media/audio/custom/error.wav';
+urls['AUDIO_event_ACTOR_USER_NOT_FOUND'] = '/xul/server/skin/media/audio/custom/error.wav';
+if (location.href.match('checkin')){
+urls['AUDIO_circ_good'] = '';
+} else {
+urls['AUDIO_circ_good'] = '/xul/server/skin/media/audio/custom/note2.wav';
+}
+if (location.href.match('checkin')){
+urls['AUDIO_circ_bad'] = '';
+} else {
+urls['AUDIO_circ_bad'] = '/xul/server/skin/media/audio/question.wav';
+} 
+
+
+
+
+//urls['opac'] = '/opac/' + LOCALE + '/skin/kcls/xml/advanced.xml?nps=1';
+//urls['opac_rdetail'] = '/opac/' + LOCALE + '/skin/kcls/xml/rdetail.xml?r=';
+//urls['opac_rresult'] = '/opac/' + LOCALE + '/skin/kcls/xml/rresult.xml';
+//urls['opac_rresult_metarecord'] = '/opac/' + LOCALE + '/skin/kcls/xml/rresult.xml?m=';
+//urls['browser'] = '/opac/' + LOCALE + '/skin/kcls/xml/advanced.xml?nps=1';
+
+//////////////////////////////////////////////////////////////////////////
+// Overriding default receipt templates
+
+try {
+    // In practice, this should be true in menu.js/opac.js, but not util_overlay.xul
+    if (typeof JSAN != 'undefined' && typeof JSON2js != 'undefined' && typeof xulG != 'undefined') {
+        var r = new XMLHttpRequest();
+        r.open("GET", xulG.url_prefix('/xul/server/skin/print_list_templates'), false);
+        r.send(null);
+        if (r.status == 200) {
+            JSAN.use('OpenILS.data');
+            var custom_data = new OpenILS.data(); custom_data.stash_retrieve();
+            var custom_templates = JSON2js( r.responseText );
+            for (var i in custom_templates) {
+                custom_data.print_list_templates[i] = custom_templates[i];
+            }
+            custom_data.stash('print_list_templates');
+            dump('Overriding receipt templates via custom.js\n');
+        }
+    }
+} catch(E) {
+    dump('Error overriding receipt templates in custom.js: ' + E + '\n');
+}
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/error.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/error.wav
new file mode 100644 (file)
index 0000000..357b8b7
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/error.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold.wav
new file mode 100644 (file)
index 0000000..e61a649
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold_transit.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold_transit.wav
new file mode 100644 (file)
index 0000000..405fc8d
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/hold_transit.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note1.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note1.wav
new file mode 100644 (file)
index 0000000..56be2ed
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note1.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note2.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note2.wav
new file mode 100644 (file)
index 0000000..56be2ed
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/note2.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/custom/transit.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/transit.wav
new file mode 100644 (file)
index 0000000..c559c3c
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/custom/transit.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/error.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/error.wav
new file mode 100644 (file)
index 0000000..357b8b7
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/error.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold.wav
new file mode 100644 (file)
index 0000000..e61a649
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold_transit.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold_transit.wav
new file mode 100644 (file)
index 0000000..405fc8d
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/hold_transit.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note1.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note1.wav
new file mode 100644 (file)
index 0000000..56be2ed
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note1.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note2.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note2.wav
new file mode 100644 (file)
index 0000000..56be2ed
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/note2.wav differ
diff --git a/Open-ILS/xul/staff_client/server/skin/media/audio/r2/transit.wav b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/transit.wav
new file mode 100644 (file)
index 0000000..c559c3c
Binary files /dev/null and b/Open-ILS/xul/staff_client/server/skin/media/audio/r2/transit.wav differ
index de5d805..e14dd53 100644 (file)
Binary files a/Open-ILS/xul/staff_client/server/skin/media/images/portal/newtab2.PNG and b/Open-ILS/xul/staff_client/server/skin/media/images/portal/newtab2.PNG differ
diff --git a/Open-ILS/xul/staff_client/server/skin/print_list_templates b/Open-ILS/xul/staff_client/server/skin/print_list_templates
new file mode 100644 (file)
index 0000000..e9a56b8
--- /dev/null
@@ -0,0 +1 @@
+{"item_status":{"type":"items","header":"The following items have been examined:<hr/><ol>","line_item":"<li>%title%<br/>\nBarcode: %barcode%<br/>\nCall #: %call_number% <br/>\nDue: %due_date_EN%<br/>\n<br/>\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"transit_list":{"type":"transits","header":"Transits:<hr/><ol>","line_item":"<li>From: %transit_source% To: %transit_dest_lib%<br/>\nWhen: %transit_source_send_time%<br />\nBarcode: %transit_item_barcode% Title: %transit_item_title%<br/>\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"default"},"items_out":{"type":"items","header":"Welcome to %LIBRARY%!<br/>\n%PATRON_FIRSTNAME% has the following items:<hr/><ol>","line_item":"<li>%title%<br/>\nBarcode: %barcode% <br/>\nCall #: %call_number% <br/>\nDue: %due_date_EN%<br/>\n<br/>\n\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"renew":{"type":"items","header":"Welcome to %LIBRARY%!<br/>\n%PATRON_FIRSTNAME% has renewed the following items:<hr/><ol>","line_item":"<li>%title%<br/>\nBarcode: %barcode% <br/>\nDue: %due_date_EN%<br/>\n<br/>\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"checkout":{"type":"items","header":"Welcome to %LIBRARY%!<br/>\n%PATRON_FIRSTNAME% checked out the following items:<hr/><ol>","line_item":"<li>%title%<br/>\nBarcode: %barcode%<br/>\nCall #: %call_number% <br/>\n Due: %due_date_EN%<br/>\n<br/>\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>Materials may be returned to any KCLS library.\n\n<br/>\n","inherit":null,"context":"receipt"},"offline_checkout":{"type":"offline_checkout","header":"Patron %patron_barcode%<br/>\nYou checked out the following items:<hr/><ol>","line_item":"<li>Barcode: %barcode%<br/>\nDue: %due_date%\n","footer":"</ol><hr />%TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"offline"},"checkin":{"type":"items","header":" You have checked in the following items:<hr/><ol>","line_item":"<li>%title%<br/>\nBarcode: %barcode%  \n<br/>\n\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"bill_payment":{"type":"payment","header":"Welcome to %LIBRARY%, %PATRON_FIRSTNAME%!<br/>A receipt of your  transaction:<hr/> <table width=\"32%\"> <tr> <td>Original Balance:</td> <td align=\"right\">$%original_balance%</td> </tr> <tr>  </tr> <tr> <td>Payment Received:</td> <td align=\"right\">$%payment_received%</td> </tr> <tr> <td>Payment Applied:</td> <td align=\"right\">$%payment_applied%</td> </tr> <tr>  </tr> <tr> </tr> <tr> <td>New Balance:</td> <td align=\"right\">$%new_balance%</td> </tr> </table>  <p> Specific bills: <blockquote>","line_item":"Invoice: %bill_id%  <br/>Status: %last_billing_type%<br/>Title: %title%<br/>Barcode: %barcode% <br/>Received: $%payment%<br /><br/>","footer":"</blockquote> </p> <hr />%SHORTNAME% %TODAY_TRIM%<br/> <br/> ","inherit":null,"context":"receipt"},"bills_historical":{"type":"bills","header":"Welcome to %LIBRARY%!<br/>You had the following bills:<hr/>\n<script>var rectest = 0</script>\n","line_item":"<dt><b>Bill # &nbsp; %mbts_id%</b></dt> <dd> <table>\n<script> if (\"%xact_start% != \"\") {document.write('<tr valign=\"top\"><td>Date:</td><td>%xact_start%</td></tr>');}</script>\n\n<script> if (\"%title%\".length > 2) {document.write('<tr valign=\"top\"><td>Title:</td><td>%title%</td></tr>');}</script>\n\n<script> if (\"%barcode%\".length > 2) {document.write('<tr valign=\"top\"><td>Barcode:</td><td>%barcode%</td></tr>');}</script>\n\n\n<tr valign=\"top\"><td>Type:</td><td>%last_billing_type%</td></tr>\n\n<tr valign=\"top\"><td>Billed/Paid </td><td>$%total_owed%&nbsp;/&nbsp;%total_paid%</td></tr>\n\n<script>rectest2 =\"%balance_owed%\" *1; rectest+=rectest2;</script>\n\n<tr valign=\"top\"><td><b>Balance:</b></td><td><b>$%balance_owed%</b></td></tr> </table><br/>\n\n\n","footer":"<script>document.write(\"<b>Total Owed: $\");\ndocument.write(rectest.toFixed(2));\ndocument.write(\"</b>\")\n</script>\n\n\n<hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"bills_current":{"type":"bills","header":"Welcome to %LIBRARY%!<br/>You have the following bills:<hr/>\n<script>var rectest = 0</script>\n\n","line_item":"<dt><b>Bill #%mbts_id%</b></dt> <dd> <table>\n<script> if (\"%xact_start% != \"\") {document.write('<tr valign=\"top\"><td>Date:</td><td>%xact_start%</td></tr>');}</script>\n\n<script> if (\"%title%\".length > 2) {document.write('<tr valign=\"top\"><td>Title:</td><td>%title%</td></tr>');}</script>\n\n<script> if (\"%barcode%\".length > 2) {document.write('<tr valign=\"top\"><td>Barcode:</td><td>%barcode%</td></tr>');}</script>\n\n\n<tr valign=\"top\"><td>Type:</td><td>%last_billing_type%</td></tr>\n\n<tr valign=\"top\"><td>Billed/Paid </td><td>$%total_owed%&nbsp;/&nbsp;%total_paid%</td></tr>\n\n<script>rectest2 =\"%balance_owed%\" *1; rectest+=rectest2;</script>\n\n<tr valign=\"top\"><td><b>Balance:</b></td><td><b>$%balance_owed%</b></td></tr> </table><br/>\n","footer":"<script>document.write(\"<b>Total Owed: $\");\ndocument.write(rectest.toFixed(2));\ndocument.write(\"</b>\")\n</script>\n\n\n<hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>","inherit":null,"context":"receipt"},"offline_checkin":{"type":"offline_checkin","header":"You checked in the following items:<hr/><ol>","line_item":"<li>Barcode: %barcode%\n","footer":"</ol><hr />%TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"offline"},"offline_renew":{"type":"offline_renew","header":"You renewed the following items:<hr/><ol>","line_item":"<li>Barcode: %barcode%\n","footer":"</ol><hr />%TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"offline"},"offline_inhouse_use":{"type":"offline_inhouse_use","header":"You marked the following in-house items used:<hr/><ol>","line_item":"<li>Barcode: %barcode%\nUses: %count%","footer":"</ol><hr />%TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"in_house_use":{"type":"items","header":"You marked the following in-house items used:<hr/><ol>","line_item":"<li>Barcode: %barcode%\r\nUses: %uses%\r\n<br />%alert_message%","footer":"</ol><hr />%TODAY_TRIM%<br/>\r\n<br/>\r\n"},"holds":{"type":"holds","header":"Welcome to %LIBRARY%!<br/>\nYou have the following titles on hold:<hr/><ol>","line_item":"<li>%title%\n","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\nYou were helped by %STAFF_FIRSTNAME%<br/>\n<br/>\n","inherit":null,"context":"receipt"},"holds_on_bib":{"type":"holds","inherit":"holds"},"holds_for_patron":{"type":"holds","inherit":"holds"},"holds_shelf":{"type":"holds","inherit":null,"header":"%SHORTNAME% %TODAY_TRIM%<br/>\n<hr/>\n<style type=\"text/css\">\n    body { font-size: 14pt; }\n    td {\n        padding-right: 1em;\n        padding-bottom: 1em;\n        border-bottom: 1px #999 dashed;\n    }\n    th {\n        text-align: left; font-weight: bold;\n        border-bottom: 1px #000 solid;\n        border-right: 1px #000 solid;\n        padding: 0.5em;\n    }\n</style>\n<table>\n<tr>\n<th>Patron</th>\n<th>Action</th>\n<th>Type</th>\n<th>Title</th>\n<th>Author</th>\n<th>Shelving Location</th>\n<th>Call Number</th>\n<th>Barcode</th>\n</tr>","line_item":"<tr>\n<td>%patron_display_name%</td>\n<td>%post_clear_shelf_action%</td>\n<td>%hold_type%</td>\n<td>%title%</td>\n<td>%author%</td>\n<td>%current_copy_location%</td>\n<td>%callnumber%</td>\n<td>%current_copy%</td>\n</tr>","footer":"</table>\n","context":"default"},"holds_pull_list":{"type":"holds","inherit":"holds"},"hold_slip":{"type":"holds","header":"<font face=\"Trebuchet MS\">\n<font size = \"6\">\n&#8962;\n\n<font size = \"3\">\n<script>\nif ( \"%route_to%\" == \"PRIVATE HOLD SHELF\") {document.write(\"&#10033; &#10033;\");}\n</script>\n%LIBRARY%\n<font size = \"1\">\n<br/>\n<font size = \"2\">\n<script> var x = params.data.user_stat_cat_entries; for (var i = 0; i < x.length; i++) { if ((x[i].stat_cat.id == 7)  &&  (x[i].stat_cat_entry != \"None\")) document.write(x[i].stat_cat.name + ' : ' + x[i].stat_cat_entry + '<br/>'); } </script>\n<div style=\"-moz-transform: rotate(90deg); height: 300px; width: 250px;\">\n<font size = \"7\">%PATRON_HOLD_LASTNAME_ABBR%\n<br/>\n\n<font size = \"5\">%PATRON_ALIAS_OR_FIRSTNAME_ABBR%\n\n<font size = \"1\">\n<br/>\n<font size = \"5\">\n&nbsp;%TODAY_MMM%<br/>\n<font size = \"2\">\n&nbsp; &nbsp;Barcode:<font size = \"4\"> %item_barcode%\n<font size = \"2\">\n</br>\n</br>\n&nbsp; &nbsp;Patron:%PATRON_ID%<br/>\n<br/>\n\n<font size = \"5\">\n<script>\nvar tmpbc = \"%item_barcode%\".slice(-4); document.write(tmpbc);\n</script>\n<font size = \"2\">\n\n</div>\n</div>\n\n","line_item":"<div style=\"-moz-transform: rotate(90deg); height: 200px; width: 300px;\">\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n\n%formatted_note% <br/>\n</div>\n","footer":"<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n\n<br/>\nSlip Date: %TODAY_TRIM%<br/>\nPrinted by %STAFF_FIRSTNAME%<br/>\n<br/>","inherit":null,"context":"receipt"},"transit_slip":{"type":"transits","header":"This item needs to be routed to <b>%route_to%</b>:<br/>\r\n%route_to_org_fullname%<br/>\r\n%street1%<br/>\r\n%street2%<br/>\r\n%city_state_zip%<br/>\r\n<br/>\r\n","line_item":"Barcode: %item_barcode%<br/>\r\nTitle: %item_title%<br/>\r\nAuthor: %item_author%<br>\r\n<br/>\r\n","footer":"Slip Date: %TODAY_TRIM%<br/>\r\nPrinted by %STAFF_FIRSTNAME% at %SHORTNAME%<br/>\r\n<br/>\r\n"},"hold_transit_slip":{"type":"transits","header":"<font face=\"Trebuchet MS\">\n<font size = \"6\"> \n&#8666;\n<font size = \"3\">\n<script>\nif ( \"%destination_shelf%\" == \"PRIVATE HOLD SHELF\") {document.write(\"&#10033; &#10033;\");}\n</script>\n<font size = \"1\">\nRoute to :  <font size = \"3\"><b>%route_to_org_fullname%</b><br/>\n<font size = \"2\">\n <script> var x = params.data.user_stat_cat_entries; for (var i = 0; i < x.length; i++) { if ((x[i].stat_cat.id == 7)  &&  (x[i].stat_cat_entry != \"None\")) document.write(x[i].stat_cat.name + ' : ' + x[i].stat_cat_entry + '<br/>'); } </script> \n <div style=\"-moz-transform: rotate(90deg); height: 300px; width: 250px;\">\n<font size = \"7\">%PATRON_HOLD_LASTNAME_ABBR%\n<br/>\n\n<font size = \"5\">%PATRON_ALIAS_OR_FIRSTNAME_ABBR%\n\n<font size = \"1\">\n<br/>\n<font size = \"5\">\n&nbsp;%TODAY_MMM%<br/>\n<font size = \"2\">\n&nbsp; &nbsp;Barcode:<font size = \"4\"> %item_barcode%\n<font size = \"2\">\n</br>\n</br>\n&nbsp;&nbsp; Patron:%PATRON_ID%<br/>\n<br/>\n\n<font size = \"5\">\n<script>\nvar tmpbc = \"%item_barcode%\".slice(-4); document.write(tmpbc);\n</script>\n<font size = \"2\">\n<br/>\n</div>","line_item":"<div style=\"-moz-transform: rotate(90deg); height: 200px; width: 300px;\">\n<br/><br/><br/><br/><br/><br/><br/><br/>%formatted_note% <br/></div>\n","footer":"<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n<br/>\n\n<br/>\nSlip Date: %TODAY_TRIM%<br/>\nPrinted by %STAFF_FIRSTNAME%<br/>\n<br/>","inherit":null,"context":"receipt"},"holdings_maintenance":{"type":"items","header":"Title: %title%<br/>\nAuthor: %author%<br/>\nISBN: %isbn% Edition: %edition% PubDate: %pubdate%<br/>\nTCN: %tcn_value% Record ID: %mvr_doc_id%<br/>\nCreator: %creator% Create Date: %create_date%<br/>\nEditor: %editor% Edit Date: %edit_date%<hr/>\n","line_item":"%prefix% %tree_location% %suffix% %parts% %acp_status%<br/>\n","footer":"<hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"default"},"bills_main_view":{"type":"bills","header":"Welcome to %LIBRARY%!<br/>You have the following bills:<hr/><ol>","line_item":"<dt><b>Bill #%id%</b> %title%</dt> <dd> <table width=\"100%\"> <tr valign=\"top\"><td>Date:</td><td>%xact_start%</td></tr> <tr valign=\"top\"><td>Type:</td><td>%xact_type%</td></tr> <tr valign=\"top\"><td>Last Billing:</td><td>%last_billing_type%<br/>%last_billing_note%</td></tr> <tr valign=\"top\"><td>Total Billed:</td><td>$%total_owed%</td></tr> <tr valign=\"top\"><td>Last Payment:</td><td>%last_payment_type%<br/>%last_payment_note%</td></tr> <tr valign=\"top\"><td>Total Paid:</td><td>$%total_paid%</td></tr> <tr valign=\"top\"><td><b>Balance:</b></td><td><b>$%balance_owed%</b></td></tr> </table><br/>","footer":"</ol><hr />%SHORTNAME% %TODAY_TRIM%<br/>\n<br/>\n","inherit":null,"context":"receipt"}}
\ No newline at end of file