Skip to content

Instantly share code, notes, and snippets.

@alappe
Created September 15, 2012 11:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alappe/3727474 to your computer and use it in GitHub Desktop.
Save alappe/3727474 to your computer and use it in GitHub Desktop.
#input = [
# {"_id":"e6611f8beb21495ad2e37d4e640086af","_rev":"1-4acaf9700aaf607f6a9a3103d8576211","type":"log","edited_at":[],"created_at":"2012-09-03T13:49:46.751Z","time":"0.50","ticket":"#6878","date":"2012-09-02T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba002284","_rev":"1-5c263397b46d08f6cf8ad26c8acbca3c","type":"log","edited_at":[],"created_at":"2012-09-05T14:37:44.997Z","time":"0.50","ticket":"#6880","date":"2012-09-04T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba005eb2","_rev":"1-87a8df1e31254b2821f98a28d8a8fb81","type":"log","edited_at":[],"created_at":"2012-09-10T06:50:21.703Z","time":"0.50","ticket":"#6959","date":"2012-09-09T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba006818","_rev":"1-ea525c4eb9927ab2f849b751f219bdb9","type":"log","edited_at":[],"created_at":"2012-09-10T07:12:51.828Z","time":"0.25","ticket":"","date":"2012-09-09T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba006fbf","_rev":"1-cef3a09bd601af32669650a11c075c38","type":"log","edited_at":[],"created_at":"2012-09-10T08:59:17.648Z","time":"0.75","ticket":"#6951","date":"2012-09-09T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba0072df","_rev":"1-6df2f1ccf9b6c91fa97341092b06f027","type":"log","edited_at":[],"created_at":"2012-09-10T09:14:14.566Z","time":"0.25","ticket":"#6906","date":"2012-09-09T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba0084aa","_rev":"1-d47ea56986b047d62114dee37aa270c4","type":"log","edited_at":[],"created_at":"2012-09-10T15:06:42.929Z","time":"0.25","ticket":"#6906","date":"2012-09-09T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba01817a","_rev":"1-0a8e30c7b34308b5117b8a23979e1b50","type":"log","edited_at":[],"created_at":"2012-09-14T07:42:25.461Z","time":"0.25","ticket":"#7081","date":"2012-09-13T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba018acc","_rev":"3-95ef2d77cd5a3182ccebeb5fa18801bf","type":"log","edited_at":[],"created_at":"2012-09-13T07:43:12.046Z","time":"0.75","ticket":"#7066","date":"2012-09-12T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba01998d","_rev":"3-151f2e231fa7bffa304f785a172cd44e","type":"log","edited_at":[],"created_at":"2012-09-13T07:44:31.897Z","time":"10.00","ticket":"#7031","date":"2012-09-12T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba01af38","_rev":"1-9807ba81bcdcd2e80d102fe1f567d986","type":"log","edited_at":[],"created_at":"2012-09-14T10:18:41.650Z","time":"2.00","ticket":"#7047","date":"2012-09-13T22:00:00.000Z","customer":"mrn","tags":[]},
# {"_id":"fedfd6aabd2904db1c25ef4fba01ca34","_rev":"1-bdbc1db1fb2ecff5f1a1462514bdb221","type":"log","edited_at":[],"created_at":"2012-09-14T15:23:18.292Z","time":"2.00","ticket":"#7037","date":"2012-09-13T22:00:00.000Z","customer":"mrn","tags":[]},
#]
#getRow = -> input.pop()
#send = (text) -> console.log text
#
# Format to get
# 10. Juli 2012 & \task{6033} & & 3,00 \\
# Actual list function code:
(head, req) ->
# Set a Content-Type:
start
headers:
"Content-Type": "application/x-tex"
months =
1: 'Januar'
2: 'Februar'
3: 'März'
4: 'April'
5: 'Mai'
6: 'Juni'
7: 'Juli'
8: 'August'
9: 'September'
10: 'Oktober'
11: 'November'
12: 'Dezember'
invoiceItems = {}
# Fetch all records into one big array
rows = while row = getRow()
row
sum = 0.0
# Cluster by date
for entry in rows
date = new Date entry.date
day = if date.getDate() < 10 then "0#{date.getDate()}" else date.getDate()
year = date.getFullYear()
month = months[date.getMonth() + 1]
dateString = "#{day}. #{month} #{year}"
# Make sure the entry exists
invoiceItems[dateString] = [] unless invoiceItems[dateString]?
formattedTime = (String entry.time).replace '.', ','
formattedTicket = entry.ticket.replace '#', ''
formattedTags = (entry.tags.join ' ').replace '\\', ''
invoiceItems[dateString].push
task: formattedTicket
time: formattedTime
tags: formattedTags
sum += parseFloat entry.time, 2
# Print by date:
for day, items of invoiceItems
for logItem in items
day = '\t' unless items[0] is logItem
send "#{day} & \\task{#{logItem.task}} & #{logItem.tags} & #{logItem.time}\\\\"
send "\\midrule"
sum = String(sum)
formattedSum = if sum.indexOf '.' is -1 then "#{sum},00" else #{sum.replacee '.', ','}"
send "\\addlinespace"
send "Summe: & & & #{formattedSum}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment