bookyt 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. data/app/assets/images/16x16/add.png +0 -0
  2. data/app/assets/images/16x16/alert.png +0 -0
  3. data/app/assets/images/16x16/combolink.png +0 -0
  4. data/app/assets/images/16x16/copy.png +0 -0
  5. data/app/assets/images/16x16/delete.png +0 -0
  6. data/app/assets/images/16x16/edit.png +0 -0
  7. data/app/assets/images/16x16/filter.png +0 -0
  8. data/app/assets/images/16x16/index.png +0 -0
  9. data/app/assets/images/16x16/notice.png +0 -0
  10. data/app/assets/images/16x16/pdf.png +0 -0
  11. data/app/assets/images/16x16/print.png +0 -0
  12. data/app/assets/images/16x16/show.png +0 -0
  13. data/app/assets/images/22x22/arrow-right.png +0 -0
  14. data/app/assets/images/22x22/edit.png +0 -0
  15. data/app/assets/images/22x22/insert_booking.png +0 -0
  16. data/app/assets/images/22x22/remove.png +0 -0
  17. data/app/assets/images/32x32/edit.png +0 -0
  18. data/app/assets/images/32x32/remove.png +0 -0
  19. data/app/assets/images/48x48/accounting.png +0 -0
  20. data/app/assets/images/48x48/basic_claims_data.png +0 -0
  21. data/app/assets/images/48x48/contacts.png +0 -0
  22. data/app/assets/images/48x48/invoicing.png +0 -0
  23. data/app/assets/images/48x48/nav_users.png +0 -0
  24. data/app/assets/images/48x48/settings.png +0 -0
  25. data/app/assets/images/48x48/store.png +0 -0
  26. data/app/assets/images/button_bg.png +0 -0
  27. data/app/assets/images/crystal-icons/16x16/filter.png +0 -0
  28. data/app/assets/images/down.png +0 -0
  29. data/app/assets/images/favicon.ico +0 -0
  30. data/app/assets/images/flavour-extended/48x48/invoice.png +0 -0
  31. data/app/assets/images/free-business-desktop-icons/48x48/business.png +0 -0
  32. data/app/assets/images/gnome-web-icons/48x48/Gnome-X-Office-Address-Book-48.png +0 -0
  33. data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  34. data/app/assets/images/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
  35. data/app/assets/images/jquery-ui/ui-bg_glass_75_759fcf_1x400.png +0 -0
  36. data/app/assets/images/jquery-ui/ui-bg_glass_85_aeb9cf_1x400.png +0 -0
  37. data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  38. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_aeb9cf_500x100.png +0 -0
  39. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_759fcf_1x100.png +0 -0
  40. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_f6f6f6_1x100.png +0 -0
  41. data/app/assets/images/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
  42. data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  43. data/app/assets/images/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
  44. data/app/assets/images/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
  45. data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  46. data/app/assets/images/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
  47. data/app/assets/images/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
  48. data/app/assets/images/jquery/tooltip/black_arrow.png +0 -0
  49. data/app/assets/images/letter-logo.alpha.png +0 -0
  50. data/app/assets/images/letter-logo.big.png +0 -0
  51. data/app/assets/images/letter-logo.orig.png +0 -0
  52. data/app/assets/images/letter-logo.png +0 -0
  53. data/app/assets/images/loading.gif +0 -0
  54. data/app/assets/images/logo.png +0 -0
  55. data/app/assets/images/oxygen-icons/16x16/application-pdf.png +0 -0
  56. data/app/assets/images/oxygen-icons/16x16/document-preview.png +0 -0
  57. data/app/assets/images/oxygen-icons/16x16/document-print.png +0 -0
  58. data/app/assets/images/oxygen-icons/16x16/edit-copy.png +0 -0
  59. data/app/assets/images/oxygen-icons/16x16/go-next.png +0 -0
  60. data/app/assets/images/oxygen-icons/16x16/mail-mark-notjunk.png +0 -0
  61. data/app/assets/images/oxygen-icons/16x16/status_unknown.png +0 -0
  62. data/app/assets/images/oxygen-icons/48x48/system-users.png +0 -0
  63. data/app/assets/images/rails.png +0 -0
  64. data/app/assets/images/up.png +0 -0
  65. data/app/assets/javascripts/application.js +49 -0
  66. data/app/assets/javascripts/cyt.js +86 -0
  67. data/app/assets/javascripts/jquery-ui.js +11437 -0
  68. data/app/assets/javascripts/jquery.dirtyform.js +242 -0
  69. data/app/assets/javascripts/jquery.form.js +785 -0
  70. data/app/assets/javascripts/jquery.js +8936 -0
  71. data/app/assets/javascripts/jquery.meio.mask.js +683 -0
  72. data/app/assets/javascripts/jquery.remotipart.js +46 -0
  73. data/app/assets/javascripts/jquery.ui.combobox.js +77 -0
  74. data/app/assets/javascripts/jquery_ujs.js +316 -0
  75. data/app/assets/javascripts/nested_form.js +51 -0
  76. data/app/assets/javascripts/tooltip.js +343 -0
  77. data/app/assets/stylesheets/.gitkeep +0 -0
  78. data/app/assets/stylesheets/ie.scss +16 -0
  79. data/app/assets/stylesheets/ie6.scss +4 -0
  80. data/app/assets/stylesheets/partials/_base.sass +39 -0
  81. data/app/assets/stylesheets/partials/_content.sass +60 -0
  82. data/app/assets/stylesheets/partials/_jquery.sass +2 -0
  83. data/app/assets/stylesheets/partials/_layout.sass +21 -0
  84. data/app/assets/stylesheets/partials/_sidebar.sass +5 -0
  85. data/app/assets/stylesheets/partials/content/_accounting.sass +41 -0
  86. data/app/assets/stylesheets/partials/content/_ajax_indicator.sass +28 -0
  87. data/app/assets/stylesheets/partials/content/_app.sass +43 -0
  88. data/app/assets/stylesheets/partials/content/_combobox.sass +8 -0
  89. data/app/assets/stylesheets/partials/content/_cyt.sass +200 -0
  90. data/app/assets/stylesheets/partials/content/_fancy_buttons.sass +10 -0
  91. data/app/assets/stylesheets/partials/content/_flash_errors.sass +46 -0
  92. data/app/assets/stylesheets/partials/content/_form_view.sass +20 -0
  93. data/app/assets/stylesheets/partials/content/_icons.sass +35 -0
  94. data/app/assets/stylesheets/partials/content/_invoice.sass +6 -0
  95. data/app/assets/stylesheets/partials/content/_overview.sass +40 -0
  96. data/app/assets/stylesheets/partials/content/_pagination.sass +61 -0
  97. data/app/assets/stylesheets/partials/content/_person.sass +5 -0
  98. data/app/assets/stylesheets/partials/content/_scaffold.sass +67 -0
  99. data/app/assets/stylesheets/partials/content/_table_list.sass +26 -0
  100. data/app/assets/stylesheets/partials/content/formtastic/_formtastic.sass +201 -0
  101. data/app/assets/stylesheets/partials/content/formtastic/_formtastic_cyt.sass +90 -0
  102. data/app/assets/stylesheets/partials/formtastic/_custom_fields.sass +2 -0
  103. data/app/assets/stylesheets/partials/formtastic/_formtastic_base.sass +652 -0
  104. data/app/assets/stylesheets/partials/jquery/_jquery_ui.sass +1461 -0
  105. data/app/assets/stylesheets/partials/jquery/_tooltip.sass +21 -0
  106. data/app/assets/stylesheets/partials/layout/_header.sass +29 -0
  107. data/app/assets/stylesheets/partials/layout/_navigation.sass +2 -0
  108. data/app/assets/stylesheets/partials/layout/navigation/_main.sass +34 -0
  109. data/app/assets/stylesheets/partials/layout/navigation/_sidebar.sass +18 -0
  110. data/app/assets/stylesheets/partials/print/_app.sass +21 -0
  111. data/app/assets/stylesheets/partials/print/_layout.sass +24 -0
  112. data/app/assets/stylesheets/print.scss +5 -0
  113. data/app/assets/stylesheets/screen.scss +12 -0
  114. data/app/controllers/account_types_controller.rb +2 -0
  115. data/app/controllers/accounts_controller.rb +30 -0
  116. data/app/controllers/application_controller.rb +12 -0
  117. data/app/controllers/attachments_controller.rb +15 -0
  118. data/app/controllers/authorized_controller.rb +24 -0
  119. data/app/controllers/bank_accounts_controller.rb +2 -0
  120. data/app/controllers/booking_imports_controller.rb +2 -0
  121. data/app/controllers/booking_templates_controller.rb +8 -0
  122. data/app/controllers/bookings_controller.rb +64 -0
  123. data/app/controllers/charge_booking_templates_controller.rb +2 -0
  124. data/app/controllers/charge_rates_controller.rb +2 -0
  125. data/app/controllers/companies_controller.rb +8 -0
  126. data/app/controllers/credit_invoices_controller.rb +29 -0
  127. data/app/controllers/customers_controller.rb +12 -0
  128. data/app/controllers/debit_invoices_controller.rb +43 -0
  129. data/app/controllers/direct_bookings_controller.rb +17 -0
  130. data/app/controllers/employees_controller.rb +3 -0
  131. data/app/controllers/employments_controller.rb +2 -0
  132. data/app/controllers/invoices_controller.rb +21 -0
  133. data/app/controllers/notes_controller.rb +34 -0
  134. data/app/controllers/overview_controller.rb +6 -0
  135. data/app/controllers/people_controller.rb +13 -0
  136. data/app/controllers/salaries_controller.rb +46 -0
  137. data/app/controllers/tenants_controller.rb +39 -0
  138. data/app/controllers/users_controller.rb +26 -0
  139. data/app/helpers/application_helper.rb +52 -0
  140. data/app/helpers/booking_helper.rb +10 -0
  141. data/app/helpers/booking_template_helper.rb +17 -0
  142. data/app/helpers/charge_rate_helper.rb +5 -0
  143. data/app/helpers/invoice_helper.rb +9 -0
  144. data/app/helpers/vat_rate_helper.rb +10 -0
  145. data/app/inputs/combobox_input.rb +23 -0
  146. data/app/inputs/date_field_input.rb +5 -0
  147. data/app/inputs/hour_field_input.rb +5 -0
  148. data/app/models/ability.rb +34 -0
  149. data/app/models/attachment.rb +13 -0
  150. data/app/models/booking_import.rb +8 -0
  151. data/app/models/booking_import_observer.rb +7 -0
  152. data/app/models/booking_reference.rb +4 -0
  153. data/app/models/booking_template.rb +92 -0
  154. data/app/models/charge_booking_template.rb +57 -0
  155. data/app/models/charge_rate.rb +30 -0
  156. data/app/models/civil_status.rb +5 -0
  157. data/app/models/company.rb +5 -0
  158. data/app/models/credit_invoice.rb +32 -0
  159. data/app/models/customer.rb +4 -0
  160. data/app/models/debit_invoice.rb +24 -0
  161. data/app/models/employee.rb +6 -0
  162. data/app/models/employment.rb +28 -0
  163. data/app/models/invoice.rb +145 -0
  164. data/app/models/line_item.rb +22 -0
  165. data/app/models/note.rb +8 -0
  166. data/app/models/person.rb +65 -0
  167. data/app/models/product.rb +2 -0
  168. data/app/models/profit.rb +9 -0
  169. data/app/models/religion.rb +5 -0
  170. data/app/models/role.rb +9 -0
  171. data/app/models/salary.rb +93 -0
  172. data/app/models/tenant.rb +43 -0
  173. data/app/models/user.rb +44 -0
  174. data/app/models/vat_rate.rb +11 -0
  175. data/app/uploaders/attachment_uploader.rb +12 -0
  176. data/app/views/account_types/_account_type.html.haml +6 -0
  177. data/app/views/account_types/_form.html.haml +7 -0
  178. data/app/views/account_types/_list.html.haml +7 -0
  179. data/app/views/account_types/index.html.haml +6 -0
  180. data/app/views/account_types/show.html.haml +6 -0
  181. data/app/views/accounts/_account.html.haml +12 -0
  182. data/app/views/accounts/_booking_item.html.haml +15 -0
  183. data/app/views/accounts/_booking_list.html.haml +19 -0
  184. data/app/views/accounts/_booking_list_footer.html.haml +2 -0
  185. data/app/views/accounts/_booking_list_header.html.haml +8 -0
  186. data/app/views/accounts/_booking_list_paginate.html.haml +5 -0
  187. data/app/views/accounts/_booking_list_saldo.html.haml +8 -0
  188. data/app/views/accounts/_booking_list_turnover.html.haml +9 -0
  189. data/app/views/accounts/_carry_booking.html.haml +9 -0
  190. data/app/views/accounts/_form.html.haml +10 -0
  191. data/app/views/accounts/_list_footer.html.haml +2 -0
  192. data/app/views/accounts/_list_header.html.haml +5 -0
  193. data/app/views/accounts/index.html.haml +8 -0
  194. data/app/views/accounts/show.html.haml +10 -0
  195. data/app/views/application/_form.html.haml +7 -0
  196. data/app/views/application/_list.html.haml +15 -0
  197. data/app/views/application/_search_form.html.haml +5 -0
  198. data/app/views/application/_show.html.haml +2 -0
  199. data/app/views/application/create.js.erb +3 -0
  200. data/app/views/application/destroy.js.erb +2 -0
  201. data/app/views/application/edit.html.haml +5 -0
  202. data/app/views/application/edit.js.erb +3 -0
  203. data/app/views/application/index.html.haml +7 -0
  204. data/app/views/application/new.html.haml +5 -0
  205. data/app/views/application/new.js.erb +3 -0
  206. data/app/views/application/show.html.haml +5 -0
  207. data/app/views/application/update.js.erb +3 -0
  208. data/app/views/attachments/_attachment.html.haml +5 -0
  209. data/app/views/attachments/_form.html.haml +15 -0
  210. data/app/views/attachments/_list.html.haml +6 -0
  211. data/app/views/bank_accounts/_bank_account.html.haml +1 -0
  212. data/app/views/booking_imports/_booking_import.html.haml +5 -0
  213. data/app/views/booking_imports/_form.html.haml +6 -0
  214. data/app/views/booking_imports/_list.html.haml +7 -0
  215. data/app/views/booking_imports/create.js.erb +4 -0
  216. data/app/views/booking_imports/index.html.haml +6 -0
  217. data/app/views/booking_imports/show.html.haml +6 -0
  218. data/app/views/booking_templates/_booking_template.html.haml +16 -0
  219. data/app/views/booking_templates/_form.html.haml +12 -0
  220. data/app/views/booking_templates/_list.html.haml +10 -0
  221. data/app/views/booking_templates/index.html.haml +6 -0
  222. data/app/views/bookings/_booking.html.haml +17 -0
  223. data/app/views/bookings/_form.html.haml +14 -0
  224. data/app/views/bookings/_list.html.haml +11 -0
  225. data/app/views/bookings/_new_form.html.haml +8 -0
  226. data/app/views/bookings/_sidebar.html.haml +7 -0
  227. data/app/views/bookings/_simple_form.html.haml +12 -0
  228. data/app/views/bookings/index.html.haml +9 -0
  229. data/app/views/bookings/new.html.haml +8 -0
  230. data/app/views/bookings/select.html.haml +11 -0
  231. data/app/views/bookings/show.html.haml +27 -0
  232. data/app/views/bookings/simple_edit.html.haml +4 -0
  233. data/app/views/charge_booking_templates/_charge_booking_template.html.haml +15 -0
  234. data/app/views/charge_booking_templates/_form.html.haml +12 -0
  235. data/app/views/charge_booking_templates/_list.html.haml +10 -0
  236. data/app/views/charge_rates/_form.html.haml +14 -0
  237. data/app/views/companies/_company.html.haml +5 -0
  238. data/app/views/companies/_form.html.haml +8 -0
  239. data/app/views/companies/_list.html.haml +6 -0
  240. data/app/views/companies/index.html.haml +6 -0
  241. data/app/views/companies/show.html.haml +27 -0
  242. data/app/views/credit_invoices/_credit_invoice.html.haml +9 -0
  243. data/app/views/credit_invoices/_form.html.haml +41 -0
  244. data/app/views/credit_invoices/_list.html.haml +20 -0
  245. data/app/views/credit_invoices/index.html.haml +7 -0
  246. data/app/views/credit_invoices/show.html.haml +56 -0
  247. data/app/views/customers/_customer.html.haml +5 -0
  248. data/app/views/customers/_form.html.haml +8 -0
  249. data/app/views/customers/_list.html.haml +6 -0
  250. data/app/views/customers/index.html.haml +6 -0
  251. data/app/views/customers/show.html.haml +22 -0
  252. data/app/views/debit_invoices/_debit_invoice.html.haml +9 -0
  253. data/app/views/debit_invoices/_form.html.haml +38 -0
  254. data/app/views/debit_invoices/_invoice_body.html.haml +8 -0
  255. data/app/views/debit_invoices/_invoice_info.html.haml +10 -0
  256. data/app/views/debit_invoices/_invoice_parties.html.haml +9 -0
  257. data/app/views/debit_invoices/_list.html.haml +21 -0
  258. data/app/views/debit_invoices/index.html.haml +7 -0
  259. data/app/views/debit_invoices/letter.html.haml +9 -0
  260. data/app/views/debit_invoices/letter.pdf.prawn +57 -0
  261. data/app/views/debit_invoices/show.html.haml +56 -0
  262. data/app/views/devise/confirmations/new.html.haml +10 -0
  263. data/app/views/devise/mailer/confirmation_instructions.html.haml +6 -0
  264. data/app/views/devise/mailer/reset_password_instructions.html.haml +10 -0
  265. data/app/views/devise/mailer/unlock_instructions.html.haml +8 -0
  266. data/app/views/devise/passwords/edit.html.haml +15 -0
  267. data/app/views/devise/passwords/new.html.haml +11 -0
  268. data/app/views/devise/sessions/new.html.haml +13 -0
  269. data/app/views/devise/shared/_links.haml +15 -0
  270. data/app/views/devise/unlocks/new.html.haml +11 -0
  271. data/app/views/direct_bookings/_form.html.haml +12 -0
  272. data/app/views/direct_bookings/_item.html.haml +17 -0
  273. data/app/views/direct_bookings/_list.html.haml +10 -0
  274. data/app/views/direct_bookings/_list_footer.html.haml +6 -0
  275. data/app/views/direct_bookings/_show.html.haml +3 -0
  276. data/app/views/direct_bookings/_show_all.html.haml +8 -0
  277. data/app/views/direct_bookings/list.js.erb +2 -0
  278. data/app/views/direct_bookings/new.js.erb +2 -0
  279. data/app/views/employees/_employee.html.haml +5 -0
  280. data/app/views/employees/_form.html.haml +19 -0
  281. data/app/views/employees/_list.html.haml +6 -0
  282. data/app/views/employees/index.html.haml +6 -0
  283. data/app/views/employees/show.html.haml +31 -0
  284. data/app/views/employments/_employment.html.haml +10 -0
  285. data/app/views/employments/_form.html.haml +24 -0
  286. data/app/views/employments/_list.html.haml +11 -0
  287. data/app/views/employments/_show.html.haml +9 -0
  288. data/app/views/employments/index.html.haml +5 -0
  289. data/app/views/invoices/_form.html.haml +13 -0
  290. data/app/views/invoices/_invoice.html.haml +7 -0
  291. data/app/views/invoices/_list.html.haml +20 -0
  292. data/app/views/invoices/_sidebar.html.haml +11 -0
  293. data/app/views/invoices/index.html.haml +17 -0
  294. data/app/views/invoices/show.html.haml +56 -0
  295. data/app/views/layouts/_flash_new.html.haml +1 -0
  296. data/app/views/layouts/_list_item_actions_for.html.haml +3 -0
  297. data/app/views/layouts/application.html.haml +46 -0
  298. data/app/views/line_items/_form.html.haml +6 -0
  299. data/app/views/line_items/_line_item.html.haml +7 -0
  300. data/app/views/line_items/_list_footer.html.haml +7 -0
  301. data/app/views/notes/_form.html.haml +10 -0
  302. data/app/views/notes/_list.html.haml +15 -0
  303. data/app/views/notes/index.html.haml +9 -0
  304. data/app/views/notes/show.html.haml +12 -0
  305. data/app/views/overview/index.html.haml +14 -0
  306. data/app/views/people/_form.html.haml +8 -0
  307. data/app/views/people/_list.html.haml +7 -0
  308. data/app/views/people/_person.html.haml +6 -0
  309. data/app/views/people/_show.html.haml +6 -0
  310. data/app/views/people/show.html.haml +21 -0
  311. data/app/views/persons/_civil.html.haml +5 -0
  312. data/app/views/persons/_show.html.haml +6 -0
  313. data/app/views/salaries/_form.html.haml +14 -0
  314. data/app/views/salaries/_list.html.haml +12 -0
  315. data/app/views/salaries/_salary.html.haml +10 -0
  316. data/app/views/salaries/_salary_certificate.html.haml +25 -0
  317. data/app/views/salaries/payslip.html.haml +40 -0
  318. data/app/views/salaries/show.html.haml +30 -0
  319. data/app/views/salaries/statistics.html.haml +6 -0
  320. data/app/views/tenants/_account.html.haml +7 -0
  321. data/app/views/tenants/_account_group_sheet.html.haml +8 -0
  322. data/app/views/tenants/_form.html.haml +17 -0
  323. data/app/views/tenants/_list.html.haml +7 -0
  324. data/app/views/tenants/_tenant.html.haml +7 -0
  325. data/app/views/tenants/balance_sheet.html.haml +43 -0
  326. data/app/views/tenants/index.html.haml +6 -0
  327. data/app/views/tenants/new.js.erb +1 -0
  328. data/app/views/tenants/profit_sheet.html.haml +26 -0
  329. data/app/views/tenants/show.html.haml +18 -0
  330. data/app/views/users/_demo.de-CH.html.haml +7 -0
  331. data/app/views/users/_demo.de.html.haml +7 -0
  332. data/app/views/users/_demo.html.haml +7 -0
  333. data/app/views/users/_form.html.haml +17 -0
  334. data/app/views/users/_list.html.haml +9 -0
  335. data/app/views/users/_show.html.haml +13 -0
  336. data/app/views/users/_user.html.haml +7 -0
  337. data/app/views/users/index.html.haml +6 -0
  338. data/app/views/users/new.js.erb +1 -0
  339. data/app/views/users/show.html.haml +14 -0
  340. data/lib/acts_as_csv.rb +113 -0
  341. data/lib/bookyt/engine.rb +18 -0
  342. data/lib/bookyt/version.rb +3 -0
  343. data/lib/float.rb +17 -0
  344. data/lib/pagination_list_link_renderer.rb +63 -0
  345. data/lib/parse_date.rb +27 -0
  346. data/lib/prawn/letter_document.rb +136 -0
  347. data/lib/raiffeisen_importer.rb +15 -0
  348. data/lib/recipes/bookyt.rb +15 -0
  349. data/lib/simple_navigation/renderer/list.rb +20 -0
  350. data/lib/simple_navigation/renderer/overview.rb +46 -0
  351. data/lib/sqlite3_extensions.rb +45 -0
  352. data/lib/tasks/.gitkeep +0 -0
  353. data/lib/tasks/bookyt.rake +15 -0
  354. data/lib/tasks/cucumber.rake +53 -0
  355. data/lib/tasks/environment_seeds.rake +7 -0
  356. data/lib/tasks/users.rake +46 -0
  357. metadata +423 -0
@@ -0,0 +1,17 @@
1
+ class DirectBookingsController < InheritedResources::Base
2
+ def new
3
+ # Lookup and instantiate template
4
+ booking_template = BookingTemplate.find(params[:direct_booking][:booking_template_id])
5
+ @direct_booking = booking_template.build_booking(params[:direct_booking])
6
+ @direct_booking.value_date ||= Date.today
7
+ end
8
+
9
+ def create
10
+ @direct_booking = Booking.new(params[:direct_booking])
11
+ @direct_account = @direct_booking.balance_account
12
+
13
+ create! {
14
+ render 'list' and return
15
+ }
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ class EmployeesController < PeopleController
2
+ defaults :resource_class => Employee
3
+ end
@@ -0,0 +1,2 @@
1
+ class EmploymentsController < AuthorizedController
2
+ end
@@ -0,0 +1,21 @@
1
+ class InvoicesController < AuthorizedController
2
+ # States
3
+ has_scope :by_state, :default => 'booked', :only => :index
4
+ has_scope :by_text
5
+ has_scope :overdue, :type => :boolean
6
+
7
+ respond_to :html, :pdf
8
+
9
+ # Actions
10
+ def new
11
+ invoice_params = params[:invoice] || {}
12
+ invoice_params.merge!(:company_id => current_tenant.company.id)
13
+ @invoice = Invoice.new(invoice_params)
14
+
15
+ new!
16
+ end
17
+
18
+ def letter
19
+ show!
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ class NotesController < AuthorizedController
2
+ belongs_to :employee, :polymorphic => true
3
+
4
+ def index
5
+ @note_of_sth = find_note_of_sth
6
+ @notes = @note_of_sth.notes.paginate(:page => params[:page])
7
+
8
+ index!
9
+ end
10
+
11
+ def new
12
+ @note = Note.new(:note_of_sth => parent, :user => current_user)
13
+
14
+ new!
15
+ end
16
+
17
+ def create
18
+ @note_of_sth = find_note_of_sth
19
+ @note = @note_of_sth.notes.build(params[:note])
20
+
21
+ create! do |format|
22
+ format.html { redirect_to eval("#{parent_type}_notes_path(@note_of_sth)") }
23
+ end
24
+ end
25
+
26
+ def find_note_of_sth
27
+ params.each do |name, value|
28
+ if name =~ /(.+)_id$/
29
+ return $1.classify.constantize.find(value)
30
+ end
31
+ end
32
+ nil
33
+ end
34
+ end
@@ -0,0 +1,6 @@
1
+ class OverviewController < ApplicationController
2
+
3
+ def index
4
+ end
5
+
6
+ end
@@ -0,0 +1,13 @@
1
+ class PeopleController < AuthorizedController
2
+ def show
3
+ @credit_invoices = resource.credit_invoices
4
+ @debit_invoices = resource.debit_invoices
5
+
6
+ # Invoice scoping by state
7
+ by_state = params[:by_state] || 'all'
8
+ @credit_invoices = @credit_invoices.reorder('due_date DESC').by_state(by_state)
9
+ @debit_invoices = @debit_invoices.reorder('due_date DESC').by_state(by_state)
10
+
11
+ show!
12
+ end
13
+ end
@@ -0,0 +1,46 @@
1
+ class SalariesController < AuthorizedController
2
+ # Filter/Search
3
+ # =============
4
+ has_scope :by_state
5
+ has_scope :by_value_period, :using => [:from, :to], :default => proc { |c| c.session[:has_scope] }
6
+ has_scope :by_employee_id
7
+
8
+ # Actions
9
+ # =======
10
+ def statistics
11
+ index!
12
+ end
13
+
14
+ def new
15
+ # Allow pre-seeding some parameters
16
+ salary_params = {
17
+ :employer => current_tenant.company,
18
+ :state => 'booked',
19
+ :duration_from => Date.today,
20
+ :duration_to => Date.today.in(30.days).to_date
21
+ }
22
+
23
+ # Set default parameters
24
+ salary_params.merge!(params[:salary]) if params[:salary]
25
+
26
+ @salary = Salary.new(salary_params)
27
+
28
+ # Prebuild an empty attachment instance
29
+ @salary.attachments.build
30
+
31
+ new!
32
+ end
33
+
34
+ def create
35
+ @salary = Salary.new(params[:salary])
36
+ if @salary.valid?
37
+ @salary.build_booking
38
+ end
39
+
40
+ create!
41
+ end
42
+
43
+ def payslip
44
+ show!
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ class TenantsController < AuthorizedController
2
+ # Actions
3
+ def current
4
+ redirect_to current_user.tenant
5
+ end
6
+
7
+ def profit_sheet
8
+ @company = current_tenant.company
9
+
10
+ # use current date if not specified otherwise
11
+ params[:profit] ||= {}
12
+
13
+ # use current date if not specified otherwise
14
+ if params[:by_value_period]
15
+ @end_date = Date.parse(params[:by_value_period][:to])
16
+ @start_date = Date.parse(params[:by_value_period][:from])
17
+ @dates = [@start_date..@end_date]
18
+ elsif params[:years]
19
+ @dates = params[:years].map{|year| current_tenant.fiscal_period(year.to_i)[:from]..current_tenant.fiscal_period(year.to_i)[:to]}
20
+ else
21
+ @end_date = Date.today
22
+ @start_date = @end_date.to_time.advance(:years => -1, :days => 1).to_date
23
+ @dates = [@start_date..@end_date]
24
+ end
25
+ end
26
+
27
+ def balance_sheet
28
+ @company = current_tenant.company
29
+
30
+ # use current date if not specified otherwise
31
+ if params[:by_value_period]
32
+ @dates = [Date.parse(params[:by_value_period][:to])]
33
+ elsif params[:years]
34
+ @dates = params[:years].map{|year| current_tenant.fiscal_period(year.to_i)[:to]}
35
+ else
36
+ @dates = [Date.today]
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ # Users Controller
2
+ #
3
+ # Provides a user/account management interface.
4
+ class UsersController < AuthorizedController
5
+ # Actions
6
+ def update
7
+ @user = User.find(params[:id])
8
+
9
+ # Don't try to update password if not provided
10
+ if params[:user][:password].blank?
11
+ [:password, :password_confirmation, :current_password].collect{|p| params[:user].delete(p) }
12
+ end
13
+
14
+ # Test if user is allowed to change roles
15
+ params[:user].delete(:role_texts) unless can? :manage, Role
16
+
17
+ # Set the locale explicitly to the user cause it wasn't saved.
18
+ @user.locale = params[:user][:locale] if params[:user][:locale]
19
+
20
+ update!
21
+ end
22
+
23
+ def current
24
+ redirect_to current_user
25
+ end
26
+ end
@@ -0,0 +1,52 @@
1
+ # Methods added to this helper will be available to all templates in the application.
2
+ module ApplicationHelper
3
+ # Plugins
4
+ def engine_stylesheet_link_tag(options = {})
5
+ Bookyt::Engine.engines.map {|engine|
6
+ stylesheet_link_tag engine, options
7
+ }.join.html_safe
8
+ end
9
+
10
+ # Tenancy
11
+ def current_tenant
12
+ current_user.tenant
13
+ end
14
+
15
+ include ActionView::Helpers::NumberHelper
16
+ def currency_fmt(value)
17
+ # We often do get -0.0 but don't like it
18
+ value = 0.0 if value.to_s.match %r{^-[0.]*$}
19
+
20
+ number = number_with_precision(value, :precision => 2, :separator => '.', :delimiter => "'")
21
+ end
22
+
23
+ # CRUD helpers
24
+ def icon_edit_link_to(path)
25
+ link_to t('bookyt.edit'), path, :method => :get, :class => 'icon-edit-text', :title => t('bookyt.edit')
26
+ end
27
+
28
+ def icon_delete_link_to(model, path)
29
+ link_to t('bookyt.destroy'), path, :remote => true, :method => :delete, :confirm => t_confirm_delete(model), :class => 'icon-delete-text', :title => t('bookyt.destroy')
30
+ end
31
+
32
+ def list_item_actions_for(resource)
33
+ model_name = resource.class.to_s.underscore
34
+
35
+ render 'layouts/list_item_actions_for', :model_name => model_name, :resource => resource
36
+ end
37
+
38
+ # Nested form helpers
39
+ def show_new_form(model)
40
+ model_name = model.to_s.underscore
41
+
42
+ output = <<EOF
43
+ $('##{model_name}_list').replaceWith('#{escape_javascript(render('form'))}');
44
+ addAutofocusBehaviour();
45
+ addAutocompleteBehaviour();
46
+ addDatePickerBehaviour();
47
+ addAutogrowBehaviour();
48
+ EOF
49
+
50
+ return output.html_safe
51
+ end
52
+ end
@@ -0,0 +1,10 @@
1
+ module BookingHelper
2
+ def reference_types_as_collection
3
+ # TODO: Stock model should be available too, from bookyt_stock
4
+ types = [Invoice]
5
+ types.inject({}) do |result, type|
6
+ result[t_model(type)] = type.base_class
7
+ result
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module BookingTemplateHelper
2
+ def amount_relations_as_collection
3
+ relations = ['reference_amount', 'reference_balance', 'reference_amount_minus_balance']
4
+ relations.inject({}) do |result, relation|
5
+ result[t(relation, :scope => 'booking_template.relation')] = relation
6
+ result
7
+ end
8
+ end
9
+
10
+ def amount_to_s(booking_template)
11
+ if booking_template.amount_relates_to.present?
12
+ return "%.2f%%" % (booking_template.amount.to_f * 100)
13
+ else
14
+ return currency_fmt(booking_template.amount)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module ChargeRateHelper
2
+ def codes_as_collection
3
+ ChargeRate.latest.map{|charge_rate| ["%s (%s)" % [charge_rate.title, charge_rate.person], charge_rate.code]}
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ module InvoiceHelper
2
+ def invoice_states_as_collection
3
+ states = Invoice::STATES
4
+ states.inject({}) do |result, state|
5
+ result[t(state, :scope => 'invoice.state')] = state
6
+ result
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module VatRateHelper
2
+ def vat_rates_as_collection
3
+ vats = VatRate.latest
4
+
5
+ vats.inject({}) do |result, item|
6
+ result[item.to_s] = item.code
7
+ result
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ class ComboboxInput < Formtastic::Inputs::SelectInput
2
+ include ActionView::Helpers::UrlHelper
3
+
4
+ def input_html_options
5
+ super.merge({:class => "#{super[:class]} combobox", :style => "width => 60%"})
6
+ end
7
+
8
+ def link_fragment
9
+ reference = object.send(reflection.name)
10
+
11
+ return unless reference
12
+
13
+ template.content_tag('span', template.link_to('show', @object.send(reflection.name), :class => 'icon-combolink-text'), :class => 'combobox-link')
14
+ end
15
+
16
+ def to_html
17
+ input_wrapping do
18
+ label_html <<
19
+ (options[:group_by] ? grouped_select_html : select_html) <<
20
+ link_fragment
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ class DateFieldInput < Formtastic::Inputs::StringInput
2
+ def input_html_options
3
+ super.merge("date-picker" => true)
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class HourFieldInput < Formtastic::Inputs::StringInput
2
+ def input_html_options
3
+ super.merge(:class => "#{super[:class]} hasCheckHours", :alt => 'time', 'data-check-hours' => true)
4
+ end
5
+ end
@@ -0,0 +1,34 @@
1
+ # Defines abilities
2
+ #
3
+ # This class defines the abilities available to User Roles.
4
+ # Will be used by CanCan.
5
+ class Ability
6
+ # Aspects
7
+ include CanCan::Ability
8
+
9
+ # Available roles
10
+ def self.roles
11
+ ['admin', 'accountant']
12
+ end
13
+
14
+ # Prepare roles to show in select inputs etc.
15
+ def self.roles_for_collection
16
+ self.roles.map{|role| [I18n.translate(role, :scope => 'cancan.roles'), role]}
17
+ end
18
+
19
+ # Main role/ability definitions.
20
+ def initialize(user)
21
+ user ||= User.new # guest user
22
+
23
+ alias_action :index, :to => :list
24
+ alias_action :current, :to => :show
25
+
26
+ if user.role? :admin
27
+ can :manage, :all
28
+ elsif user.role? :accountant
29
+ can :manage, [Account, BookingTemplate, Customer, Employee, Invoice, Product, AccountType, Booking, Company, Day, Employment, Person, Profit]
30
+ can [:show, :list], [Tenant], :users => {:id => user.id}
31
+ can [:show, :update], User, :id => user.id
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ class Attachment < ActiveRecord::Base
2
+ # Association
3
+ belongs_to :object, :polymorphic => true
4
+
5
+ # Carrier Wave
6
+ validates_presence_of :file
7
+ mount_uploader :file, AttachmentUploader
8
+
9
+ # String
10
+ def to_s(format = :default)
11
+ title
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ class BookingImport < ActiveRecord::Base
2
+
3
+ has_attached_file :csv, :path => ":rails_root/public/:class/:id/:basename.:extension",
4
+ :url => "/:class/:id/:basename.:extension"
5
+
6
+ validates_attachment_presence :csv
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ class BookingImportObserver < ActiveRecord::Observer
2
+ def after_save(importer)
3
+ Rails.logger.info "Starting at #{start_time = Time.now} to import #{importer.csv_file_name} from #{importer.csv.url}."
4
+ end_time = Time.now - start_time
5
+ Rails.logger.info "Import ended in #{end_time}"
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ class BookingReference < ActiveRecord::Base
2
+ belongs_to :booking
3
+ belongs_to :reference, :polymorphic => true
4
+ end