519 lines
10 KiB
XML
519 lines
10 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>$archiver</key>
|
|
<string>NSKeyedArchiver</string>
|
|
<key>$objects</key>
|
|
<array>
|
|
<string>$null</string>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>37</integer>
|
|
</dict>
|
|
<key>NS.objects</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>2</integer>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>33</integer>
|
|
</dict>
|
|
<key>NS.keys</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>3</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>4</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>5</integer>
|
|
</dict>
|
|
</array>
|
|
<key>NS.objects</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>6</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>7</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>35</integer>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<string>Title</string>
|
|
<string>Text</string>
|
|
<string>Date</string>
|
|
<string>Untitled Snapshot</string>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>34</integer>
|
|
</dict>
|
|
<key>NSAttributes</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>10</integer>
|
|
</dict>
|
|
<key>NSDelegate</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>0</integer>
|
|
</dict>
|
|
<key>NSString</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>8</integer>
|
|
</dict>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>9</integer>
|
|
</dict>
|
|
<key>NS.string</key>
|
|
<string>The timeclock tool makes it easy to track time events, like clocking
|
|
into and out of a particular job. These events accumulate in a
|
|
timelog file.
|
|
|
|
Each in/out event may have an optional description. If the ``in''
|
|
description is a ledger account name, these in/out pairs may be viewed
|
|
as virtual postings, adding time commodities (hours) to that
|
|
account.
|
|
|
|
For example, the command-line version of the timeclock tool could be
|
|
used to begin a timelog file like:
|
|
|
|
@example
|
|
export TIMELOG=$HOME/.timelog
|
|
ti ClientOne category
|
|
sleep 10
|
|
to waited for ten seconds
|
|
@end example
|
|
|
|
The @file{.timelog} file now contains:
|
|
|
|
@smallexample
|
|
i 2004/10/06 15:21:00 ClientOne category
|
|
o 2004/10/06 15:21:10 waited for ten seconds
|
|
@end smallexample
|
|
|
|
Ledger parses this directly, as if it had seen the following transaction:
|
|
|
|
@smallexample
|
|
2004/10/06 category
|
|
(ClientOne) 10s
|
|
@end smallexample
|
|
|
|
In other words, the timelog event pair is seen as adding 0.00277h (ten
|
|
seconds) worth of time to the @samp{ClientOne} account. This would be
|
|
considered billable time, which later could be invoiced and credited
|
|
to accounts receivable:
|
|
|
|
@smallexample
|
|
2004/11/01 (INV#1) ClientOne, Inc.
|
|
Receivable:ClientOne $0.10
|
|
ClientOne -0.00277h @@ $35.00
|
|
@end smallexample
|
|
|
|
The above posting converts the clocked time into an invoice for
|
|
the time spent, at an hourly rate of $35. Once the invoice is paid,
|
|
the money is deposited from the receivable account into a checking
|
|
account:
|
|
|
|
@smallexample
|
|
2004/12/01 ClientOne, Inc.
|
|
Assets:Checking $0.10
|
|
Receivable:ClientOne
|
|
@end smallexample
|
|
|
|
And now the time spent has been turned into hard cash in the checking
|
|
account.
|
|
|
|
The advantage to using timeclock and invoicing to bill time is that
|
|
you will always know, by looking at the balance report, epostly how
|
|
much unbilled and unpaid time you've spent working for any particular
|
|
client.
|
|
|
|
I like to @samp{!include} my timelog at the top of my company's
|
|
accounting ledger, with the attached prefix @samp{Billable}:
|
|
|
|
@smallexample
|
|
; -*-ledger-*-
|
|
|
|
; This is the ledger file for my company. But first, include the
|
|
; timelog data, entering all of the time events within the umbrella
|
|
; account "Billable".
|
|
|
|
!account Billable
|
|
!include /home/johnw/.timelog
|
|
!end
|
|
|
|
; Here follows this fiscal year's postings for the company.
|
|
|
|
2004/11/01 (INV#1) ClientOne, Inc.
|
|
Receivable:ClientOne $0.10
|
|
Billable:ClientOne -0.00277h @@ $35.00
|
|
|
|
2004/12/01 ClientOne, Inc.
|
|
Assets:Checking $0.10
|
|
Receivable:ClientOne
|
|
@end smallexample</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSMutableString</string>
|
|
<string>NSString</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSMutableString</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>33</integer>
|
|
</dict>
|
|
<key>NS.keys</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>11</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>12</integer>
|
|
</dict>
|
|
</array>
|
|
<key>NS.objects</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>13</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>30</integer>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<string>NSParagraphStyle</string>
|
|
<string>NSFont</string>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>29</integer>
|
|
</dict>
|
|
<key>NSAlignment</key>
|
|
<integer>4</integer>
|
|
<key>NSLineHeightMultiple</key>
|
|
<real>1.1000000238418579</real>
|
|
<key>NSTabStops</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>14</integer>
|
|
</dict>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>28</integer>
|
|
</dict>
|
|
<key>NS.objects</key>
|
|
<array>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>15</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>17</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>18</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>19</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>20</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>21</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>22</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>23</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>24</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>25</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>26</integer>
|
|
</dict>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>27</integer>
|
|
</dict>
|
|
</array>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>28</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSTextTab</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSTextTab</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>56</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>84</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>112</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>140</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>168</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>196</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>224</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>252</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>280</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>308</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<key>NSLocation</key>
|
|
<real>336</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSArray</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSArray</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSParagraphStyle</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSParagraphStyle</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>32</integer>
|
|
</dict>
|
|
<key>NSName</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>31</integer>
|
|
</dict>
|
|
<key>NSSize</key>
|
|
<real>14</real>
|
|
<key>NSfFlags</key>
|
|
<integer>16</integer>
|
|
</dict>
|
|
<string>Courier</string>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSFont</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSFont</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSDictionary</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSDictionary</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>KBWordCountingTextStorage</string>
|
|
<string>NSTextStorage</string>
|
|
<string>NSMutableAttributedString</string>
|
|
<string>NSAttributedString</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>KBWordCountingTextStorage</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$class</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>36</integer>
|
|
</dict>
|
|
<key>NS.time</key>
|
|
<real>267380389.388778</real>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSDate</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSDate</string>
|
|
</dict>
|
|
<dict>
|
|
<key>$classes</key>
|
|
<array>
|
|
<string>NSMutableArray</string>
|
|
<string>NSArray</string>
|
|
<string>NSObject</string>
|
|
</array>
|
|
<key>$classname</key>
|
|
<string>NSMutableArray</string>
|
|
</dict>
|
|
</array>
|
|
<key>$top</key>
|
|
<dict>
|
|
<key>Snapshots</key>
|
|
<dict>
|
|
<key>CF$UID</key>
|
|
<integer>1</integer>
|
|
</dict>
|
|
</dict>
|
|
<key>$version</key>
|
|
<integer>100000</integer>
|
|
</dict>
|
|
</plist>
|