invoice_bar 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 (436) hide show
  1. data/LICENSE +15 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/javascripts/invoice_bar/invoice_bar.js +98 -0
  5. data/app/assets/stylesheets/invoice_bar/document.css.scss +170 -0
  6. data/app/assets/stylesheets/invoice_bar/forms.css.scss +60 -0
  7. data/app/assets/stylesheets/invoice_bar/invoice_bar.css +10 -0
  8. data/app/assets/stylesheets/invoice_bar/tables.css.scss +14 -0
  9. data/app/controllers/invoice_bar/accounts_controller.rb +26 -0
  10. data/app/controllers/invoice_bar/application_controller.rb +59 -0
  11. data/app/controllers/invoice_bar/contacts_controller.rb +40 -0
  12. data/app/controllers/invoice_bar/currencies_controller.rb +29 -0
  13. data/app/controllers/invoice_bar/dashboard_controller.rb +11 -0
  14. data/app/controllers/invoice_bar/invoice_templates_controller.rb +108 -0
  15. data/app/controllers/invoice_bar/invoices_controller.rb +246 -0
  16. data/app/controllers/invoice_bar/receipt_templates_controller.rb +108 -0
  17. data/app/controllers/invoice_bar/receipts_controller.rb +164 -0
  18. data/app/controllers/invoice_bar/search_controller.rb +26 -0
  19. data/app/controllers/invoice_bar/sessions_controller.rb +35 -0
  20. data/app/controllers/invoice_bar/settings_controller.rb +12 -0
  21. data/app/controllers/invoice_bar/users_controller.rb +83 -0
  22. data/app/helpers/invoice_bar/invoice_bar_helper.rb +43 -0
  23. data/app/models/invoice_bar/account.rb +50 -0
  24. data/app/models/invoice_bar/address.rb +48 -0
  25. data/app/models/invoice_bar/contact.rb +32 -0
  26. data/app/models/invoice_bar/currency.rb +13 -0
  27. data/app/models/invoice_bar/invoice.rb +51 -0
  28. data/app/models/invoice_bar/invoice_template.rb +35 -0
  29. data/app/models/invoice_bar/item.rb +77 -0
  30. data/app/models/invoice_bar/receipt.rb +66 -0
  31. data/app/models/invoice_bar/receipt_template.rb +35 -0
  32. data/app/models/invoice_bar/user.rb +42 -0
  33. data/app/views/invoice_bar/accounts/_form.html.erb +25 -0
  34. data/app/views/invoice_bar/accounts/edit.html.erb +3 -0
  35. data/app/views/invoice_bar/accounts/index.html.erb +44 -0
  36. data/app/views/invoice_bar/accounts/new.html.erb +3 -0
  37. data/app/views/invoice_bar/accounts/show.html.erb +24 -0
  38. data/app/views/invoice_bar/contacts/_form.html.erb +44 -0
  39. data/app/views/invoice_bar/contacts/edit.html.erb +3 -0
  40. data/app/views/invoice_bar/contacts/index.html.erb +42 -0
  41. data/app/views/invoice_bar/contacts/new.html.erb +3 -0
  42. data/app/views/invoice_bar/contacts/show.html.erb +43 -0
  43. data/app/views/invoice_bar/currencies/_form.html.erb +16 -0
  44. data/app/views/invoice_bar/currencies/edit.html.erb +3 -0
  45. data/app/views/invoice_bar/currencies/index.html.erb +40 -0
  46. data/app/views/invoice_bar/currencies/new.html.erb +3 -0
  47. data/app/views/invoice_bar/currencies/show.html.erb +12 -0
  48. data/app/views/invoice_bar/documents/_show.html.erb +110 -0
  49. data/app/views/invoice_bar/forms/_address.html.erb +22 -0
  50. data/app/views/invoice_bar/forms/_address_fields.html.erb +22 -0
  51. data/app/views/invoice_bar/forms/_contact_main_fields.html.erb +23 -0
  52. data/app/views/invoice_bar/forms/_document.html.erb +131 -0
  53. data/app/views/invoice_bar/forms/_errors.html.erb +17 -0
  54. data/app/views/invoice_bar/forms/_filter.html.erb +33 -0
  55. data/app/views/invoice_bar/forms/_item_fields.html.erb +34 -0
  56. data/app/views/invoice_bar/forms/_items.html.erb +40 -0
  57. data/app/views/invoice_bar/forms/_payment_fields.html.erb +22 -0
  58. data/app/views/invoice_bar/invoice_templates/choose_template.html.erb +7 -0
  59. data/app/views/invoice_bar/invoice_templates/edit.html.erb +2 -0
  60. data/app/views/invoice_bar/invoice_templates/index.html.erb +51 -0
  61. data/app/views/invoice_bar/invoice_templates/new.html.erb +3 -0
  62. data/app/views/invoice_bar/invoice_templates/show.html.erb +1 -0
  63. data/app/views/invoice_bar/invoices/edit.html.erb +1 -0
  64. data/app/views/invoice_bar/invoices/index.html.erb +127 -0
  65. data/app/views/invoice_bar/invoices/new.html.erb +4 -0
  66. data/app/views/invoice_bar/invoices/show.html.erb +1 -0
  67. data/app/views/invoice_bar/invoices/show.pdf.prawn +128 -0
  68. data/app/views/invoice_bar/layouts/_head.html.erb +5 -0
  69. data/app/views/invoice_bar/layouts/_messages.html.erb +8 -0
  70. data/app/views/invoice_bar/layouts/_navbar.html.erb +40 -0
  71. data/app/views/invoice_bar/layouts/signed_in.html.erb +20 -0
  72. data/app/views/invoice_bar/layouts/signed_out.html.erb +29 -0
  73. data/app/views/invoice_bar/receipt_templates/choose_template.html.erb +7 -0
  74. data/app/views/invoice_bar/receipt_templates/edit.html.erb +1 -0
  75. data/app/views/invoice_bar/receipt_templates/index.html.erb +51 -0
  76. data/app/views/invoice_bar/receipt_templates/new.html.erb +3 -0
  77. data/app/views/invoice_bar/receipt_templates/show.html.erb +1 -0
  78. data/app/views/invoice_bar/receipts/edit.html.erb +1 -0
  79. data/app/views/invoice_bar/receipts/index.html.erb +82 -0
  80. data/app/views/invoice_bar/receipts/new.html.erb +4 -0
  81. data/app/views/invoice_bar/receipts/show.html.erb +1 -0
  82. data/app/views/invoice_bar/receipts/show.pdf.prawn +128 -0
  83. data/app/views/invoice_bar/search/index.html.erb +201 -0
  84. data/app/views/invoice_bar/sessions/new.html.erb +23 -0
  85. data/app/views/invoice_bar/settings/index.html.erb +42 -0
  86. data/app/views/invoice_bar/users/_form.html.erb +32 -0
  87. data/app/views/invoice_bar/users/edit.html.erb +1 -0
  88. data/app/views/invoice_bar/users/index.html.erb +46 -0
  89. data/app/views/invoice_bar/users/new.html.erb +1 -0
  90. data/app/views/invoice_bar/users/show.html.erb +0 -0
  91. data/app/views/invoice_bar/users/signup.html.erb +25 -0
  92. data/app/views/kaminari/_first_page.html.erb +3 -0
  93. data/app/views/kaminari/_gap.html.erb +3 -0
  94. data/app/views/kaminari/_last_page.html.erb +3 -0
  95. data/app/views/kaminari/_next_page.html.erb +3 -0
  96. data/app/views/kaminari/_page.html.erb +3 -0
  97. data/app/views/kaminari/_paginator.html.erb +17 -0
  98. data/app/views/kaminari/_prev_page.html.erb +3 -0
  99. data/config/database.yml +25 -0
  100. data/config/initializers/backtrace_silencers.rb +7 -0
  101. data/config/initializers/encoding.rb +3 -0
  102. data/config/initializers/inflections.rb +15 -0
  103. data/config/initializers/kaminari_config.rb +10 -0
  104. data/config/initializers/mime_types.rb +5 -0
  105. data/config/initializers/requires.rb +4 -0
  106. data/config/initializers/secret_token.rb +7 -0
  107. data/config/initializers/session_store.rb +8 -0
  108. data/config/initializers/sorcery.rb +401 -0
  109. data/config/initializers/wrap_parameters.rb +14 -0
  110. data/config/locales/cs.yml +424 -0
  111. data/config/routes.rb +50 -0
  112. data/db/migrate/20121012142346_create_invoice_bar_addresses.rb +16 -0
  113. data/db/migrate/20121012142357_create_invoice_bar_invoice_templates.rb +20 -0
  114. data/db/migrate/20121012142418_create_invoice_bar_invoices.rb +27 -0
  115. data/db/migrate/20121012142428_create_invoice_bar_accounts.rb +17 -0
  116. data/db/migrate/20121012142442_create_invoice_bar_items.rb +17 -0
  117. data/db/migrate/20121012142454_create_invoice_bar_currencies.rb +9 -0
  118. data/db/migrate/20121012142502_create_invoice_bar_contacts.rb +19 -0
  119. data/db/migrate/20121012144941_create_invoice_bar_users.rb +24 -0
  120. data/db/migrate/20121205185321_create_invoice_bar_receipts.rb +21 -0
  121. data/db/migrate/20121205185353_create_invoice_bar_receipt_templates.rb +18 -0
  122. data/db/seeds.rb +33 -0
  123. data/db/test.sqlite3 +0 -0
  124. data/lib/billable.rb +305 -0
  125. data/lib/invoice_bar/engine.rb +80 -0
  126. data/lib/invoice_bar/version.rb +5 -0
  127. data/lib/invoice_bar.rb +7 -0
  128. data/lib/searchable.rb +34 -0
  129. data/lib/tasks/invoicebar_tasks.rake +4 -0
  130. data/test/dummy/README.rdoc +261 -0
  131. data/test/dummy/Rakefile +7 -0
  132. data/test/dummy/app/assets/javascripts/application.js +15 -0
  133. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  134. data/test/dummy/app/controllers/application_controller.rb +3 -0
  135. data/test/dummy/app/helpers/application_helper.rb +2 -0
  136. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  137. data/test/dummy/config/application.rb +68 -0
  138. data/test/dummy/config/boot.rb +10 -0
  139. data/test/dummy/config/database.yml +25 -0
  140. data/test/dummy/config/environment.rb +5 -0
  141. data/test/dummy/config/environments/development.rb +37 -0
  142. data/test/dummy/config/environments/production.rb +67 -0
  143. data/test/dummy/config/environments/test.rb +37 -0
  144. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  145. data/test/dummy/config/initializers/inflections.rb +15 -0
  146. data/test/dummy/config/initializers/invoice_bar.rb +10 -0
  147. data/test/dummy/config/initializers/mime_types.rb +5 -0
  148. data/test/dummy/config/initializers/secret_token.rb +7 -0
  149. data/test/dummy/config/initializers/session_store.rb +8 -0
  150. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  151. data/test/dummy/config/routes.rb +3 -0
  152. data/test/dummy/config.ru +4 -0
  153. data/test/dummy/db/development.sqlite3 +0 -0
  154. data/test/dummy/db/production.sqlite3 +0 -0
  155. data/test/dummy/db/schema.rb +174 -0
  156. data/test/dummy/db/test.sqlite3 +0 -0
  157. data/test/dummy/log/development.log +549752 -0
  158. data/test/dummy/log/production.log +12 -0
  159. data/test/dummy/log/test.log +8610 -0
  160. data/test/dummy/public/404.html +26 -0
  161. data/test/dummy/public/422.html +26 -0
  162. data/test/dummy/public/500.html +25 -0
  163. data/test/dummy/public/favicon.ico +0 -0
  164. data/test/dummy/script/rails +6 -0
  165. data/test/dummy/tmp/cache/assets/BF2/9B0/sprockets%2F1649cd914028570da99e391611416461 +0 -0
  166. data/test/dummy/tmp/cache/assets/C11/6D0/sprockets%2F33531011fa6963571866f11d2c35313d +0 -0
  167. data/test/dummy/tmp/cache/assets/C13/000/sprockets%2F5357734603b21a0c32f75614f7067c31 +0 -0
  168. data/test/dummy/tmp/cache/assets/C34/BA0/sprockets%2F476d3ab21730a46162605402631fe23a +0 -0
  169. data/test/dummy/tmp/cache/assets/C4B/E90/sprockets%2F035a31410d4460e61989eeb25886c270 +0 -0
  170. data/test/dummy/tmp/cache/assets/C4E/B20/sprockets%2F7318bf12f2451e817f480b607c746332 +0 -0
  171. data/test/dummy/tmp/cache/assets/C57/D20/sprockets%2Ff88514480770419cd12db0649278b84a +0 -0
  172. data/test/dummy/tmp/cache/assets/C58/6A0/sprockets%2F353374217619061b5ce3969c7cd819b3 +0 -0
  173. data/test/dummy/tmp/cache/assets/C65/E00/sprockets%2F672e89378f0995592ad01994536ba60b +0 -0
  174. data/test/dummy/tmp/cache/assets/C6B/6E0/sprockets%2F3028ed1b448217ad51235f70e14814c0 +0 -0
  175. data/test/dummy/tmp/cache/assets/C6B/720/sprockets%2F371c30ee6af2d2121712842394d550b3 +0 -0
  176. data/test/dummy/tmp/cache/assets/C74/FF0/sprockets%2F2935380ab04cd59423316d55eb65b432 +0 -0
  177. data/test/dummy/tmp/cache/assets/C7E/450/sprockets%2F9cfb945244675bb31d32d80c18317822 +0 -0
  178. data/test/dummy/tmp/cache/assets/C89/6B0/sprockets%2F32372ed7818205654f9b4c6c0f398e41 +0 -0
  179. data/test/dummy/tmp/cache/assets/C8B/580/sprockets%2F643c9f08f9f01f35717241752c6d656b +0 -0
  180. data/test/dummy/tmp/cache/assets/C8D/D10/sprockets%2F637cba17049670418f4286ee7a3e8295 +0 -0
  181. data/test/dummy/tmp/cache/assets/C8E/6E0/sprockets%2Fc66d4743799007238128516ff08dfb6c +0 -0
  182. data/test/dummy/tmp/cache/assets/C93/450/sprockets%2Fe7ba340a2482428011300d2ee814f2b6 +0 -0
  183. data/test/dummy/tmp/cache/assets/C9A/F10/sprockets%2F70b1f5795498d49c48f11a58e094773f +0 -0
  184. data/test/dummy/tmp/cache/assets/CA2/E20/sprockets%2F8f0f457319183311b10ddc6e0337de41 +0 -0
  185. data/test/dummy/tmp/cache/assets/CA3/830/sprockets%2F9a9d172e93422b2192f1a5b80520a7c4 +0 -0
  186. data/test/dummy/tmp/cache/assets/CAD/870/sprockets%2Fa360887b06bad5328d1870349fae6126 +0 -0
  187. data/test/dummy/tmp/cache/assets/CB2/DE0/sprockets%2F639a912fd05bb9acb75624b343618558 +0 -0
  188. data/test/dummy/tmp/cache/assets/CB3/630/sprockets%2F501a45647fb70ab06d9d9566b9f11682 +0 -0
  189. data/test/dummy/tmp/cache/assets/CB9/620/sprockets%2F48651b5837773c5c3f3024e5b713f8ed +0 -0
  190. data/test/dummy/tmp/cache/assets/CBB/730/sprockets%2F93687f971b297d0d1e0a4721e5487c2d +0 -0
  191. data/test/dummy/tmp/cache/assets/CC0/4E0/sprockets%2F0a4620c09e33f12c747fbd798975788b +0 -0
  192. data/test/dummy/tmp/cache/assets/CC2/320/sprockets%2F6f4db22314397e4f29367682f7ad4b69 +0 -0
  193. data/test/dummy/tmp/cache/assets/CC3/3D0/sprockets%2F089add15d2a400824da7221e2b81d034 +0 -0
  194. data/test/dummy/tmp/cache/assets/CC7/C30/sprockets%2Fadb5bf6286f95889bb40657a27195638 +0 -0
  195. data/test/dummy/tmp/cache/assets/CCE/490/sprockets%2F07411fdbe680b6812f75ad74ca421060 +0 -0
  196. data/test/dummy/tmp/cache/assets/CD5/440/sprockets%2F4a93eaa36745c41235d49703bc1e2a94 +0 -0
  197. data/test/dummy/tmp/cache/assets/CD5/6A0/sprockets%2Fd8483c8cc949e29761ed8d26f9981821 +0 -0
  198. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  199. data/test/dummy/tmp/cache/assets/CD8/830/sprockets%2Ffd04d8117670102499a9cc26e03beb91 +0 -0
  200. data/test/dummy/tmp/cache/assets/CDA/7E0/sprockets%2F08273270e5ad4e8c40f032ae65f359a6 +0 -0
  201. data/test/dummy/tmp/cache/assets/CDB/4A0/sprockets%2F9ffe20f0f1056553046b042d4e752d8e +0 -0
  202. data/test/dummy/tmp/cache/assets/CDB/DD0/sprockets%2F77011cabd37795e415d3b39c27ac8532 +0 -0
  203. data/test/dummy/tmp/cache/assets/CDC/3B0/sprockets%2F7b0af18e9e71d15c3bb63853295016d4 +0 -0
  204. data/test/dummy/tmp/cache/assets/CDE/800/sprockets%2F416bd8cb992bd8c80b742034c4286a81 +0 -0
  205. data/test/dummy/tmp/cache/assets/CDF/B00/sprockets%2F3854abaa9035337b6ae850f481b69d81 +0 -0
  206. data/test/dummy/tmp/cache/assets/CE1/B50/sprockets%2F60b3d77c8e86d79212403cddca614934 +0 -0
  207. data/test/dummy/tmp/cache/assets/CE2/120/sprockets%2F46ae2947ec023073bbe827de1d615579 +0 -0
  208. data/test/dummy/tmp/cache/assets/CE2/610/sprockets%2F77999ce208b427f3d1cd786a01d0170d +0 -0
  209. data/test/dummy/tmp/cache/assets/CE4/D30/sprockets%2F3c72e61f887354ae35f015f9d4a06d17 +0 -0
  210. data/test/dummy/tmp/cache/assets/CE6/2C0/sprockets%2Fc1346d6629ff13645b4e2ce9c61a2893 +0 -0
  211. data/test/dummy/tmp/cache/assets/CE6/A90/sprockets%2F0d30a948c673d664a672e936f5b4a8d1 +0 -0
  212. data/test/dummy/tmp/cache/assets/CE9/850/sprockets%2Fc0201847da9589eebe5b28c66872b417 +0 -0
  213. data/test/dummy/tmp/cache/assets/CEA/9E0/sprockets%2Fdfedfb73194983c312432973ade78720 +0 -0
  214. data/test/dummy/tmp/cache/assets/CEE/D20/sprockets%2Fd2d3fcca91c5f7f325e1839984082592 +0 -0
  215. data/test/dummy/tmp/cache/assets/CF2/C90/sprockets%2F94a5468a372fd075ca78973f780c1fc6 +0 -0
  216. data/test/dummy/tmp/cache/assets/CF5/D40/sprockets%2F061b2b8dc611337ead0ae1630d9d6412 +0 -0
  217. data/test/dummy/tmp/cache/assets/CF8/310/sprockets%2F50b6e57b9678d674917d9d7ace69d022 +0 -0
  218. data/test/dummy/tmp/cache/assets/CF8/D30/sprockets%2Ff19cb0e8a30eb388c418d11240d152d0 +0 -0
  219. data/test/dummy/tmp/cache/assets/CFE/410/sprockets%2Fd9f0b12757bcfd24db130773b412314f +0 -0
  220. data/test/dummy/tmp/cache/assets/D00/F20/sprockets%2F8b4c51c2d4c103d0d6a468ac625c1658 +0 -0
  221. data/test/dummy/tmp/cache/assets/D02/010/sprockets%2F4569921d8d0226a3e2d57ad01620ecbe +0 -0
  222. data/test/dummy/tmp/cache/assets/D02/340/sprockets%2F1036c0439cb6b47c2c2fc1712b8e657b +0 -0
  223. data/test/dummy/tmp/cache/assets/D02/C00/sprockets%2F8ccbad1c51529c475316bb90801fe315 +0 -0
  224. data/test/dummy/tmp/cache/assets/D03/9C0/sprockets%2Fc96d3e1ca1315cab038596f20d0792f1 +0 -0
  225. data/test/dummy/tmp/cache/assets/D03/B20/sprockets%2F08d6902adcd450723918aeab800b159e +0 -0
  226. data/test/dummy/tmp/cache/assets/D04/BC0/sprockets%2F27be5fd4190e64c12116475ecc09c2c2 +0 -0
  227. data/test/dummy/tmp/cache/assets/D05/6B0/sprockets%2F51d171ec47d28c1d5722d2b86a0d1f65 +0 -0
  228. data/test/dummy/tmp/cache/assets/D06/E80/sprockets%2Fe62e39d519ee0a8131fae43440c153e5 +0 -0
  229. data/test/dummy/tmp/cache/assets/D09/F80/sprockets%2F0b34327edf1e11f0da567616d772c7e4 +0 -0
  230. data/test/dummy/tmp/cache/assets/D0A/B60/sprockets%2F42131e5fd69f30b0d08266afda8913e5 +0 -0
  231. data/test/dummy/tmp/cache/assets/D0F/390/sprockets%2F5132b836fb094301ff28a6be7dd16d77 +0 -0
  232. data/test/dummy/tmp/cache/assets/D0F/A70/sprockets%2F92ec90512978b6c597112bcaf1da29c3 +0 -0
  233. data/test/dummy/tmp/cache/assets/D0F/B20/sprockets%2Fa0a35bd579e7223e80e1a749e7f2a734 +0 -0
  234. data/test/dummy/tmp/cache/assets/D12/4C0/sprockets%2F88cb06f8a7fb491631fa0093781cd05f +0 -0
  235. data/test/dummy/tmp/cache/assets/D19/3F0/sprockets%2F5de5ba4c867332253b5098d0d1f9ef68 +0 -0
  236. data/test/dummy/tmp/cache/assets/D1A/990/sprockets%2F08909075dd6adc239945db46e13e3fb9 +0 -0
  237. data/test/dummy/tmp/cache/assets/D1C/C80/sprockets%2F4fa92f7c8915da6aa468ed76560953b0 +0 -0
  238. data/test/dummy/tmp/cache/assets/D1D/3F0/sprockets%2F97be6327d4928ac25347c4cc773e66da +0 -0
  239. data/test/dummy/tmp/cache/assets/D1E/230/sprockets%2Ff4317e07329a7c47de1c83f63e8f6a84 +0 -0
  240. data/test/dummy/tmp/cache/assets/D21/190/sprockets%2Fe4c9d0a614ae75783a09fc7e952d7198 +0 -0
  241. data/test/dummy/tmp/cache/assets/D23/290/sprockets%2F1d514a434ff003bf9c55a23a408bc5a1 +0 -0
  242. data/test/dummy/tmp/cache/assets/D23/F40/sprockets%2Fd7a8df989fa0b8678a833877b220e0b7 +0 -0
  243. data/test/dummy/tmp/cache/assets/D24/1D0/sprockets%2F88354bcfd9280ced1df9853346b9c294 +0 -0
  244. data/test/dummy/tmp/cache/assets/D25/040/sprockets%2F3eb1238aefc0b348a7218c93ae001b06 +0 -0
  245. data/test/dummy/tmp/cache/assets/D2D/3E0/sprockets%2F98fc4b59de5e8d96ae5746480a2e9129 +0 -0
  246. data/test/dummy/tmp/cache/assets/D2E/310/sprockets%2F26abc5030ac50e298349385e5dbaa5d0 +0 -0
  247. data/test/dummy/tmp/cache/assets/D30/1A0/sprockets%2Fa1d4848a05a94bf03d1cb69451e0e32e +0 -0
  248. data/test/dummy/tmp/cache/assets/D31/0D0/sprockets%2F8e968fb5539c735f9e65a2c338990ebe +0 -0
  249. data/test/dummy/tmp/cache/assets/D32/3E0/sprockets%2F51d82b9d10a1f278193ae09b2e6cc14c +0 -0
  250. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  251. data/test/dummy/tmp/cache/assets/D33/120/sprockets%2F41ac728e4d2c9fc115030eb2fa94455d +0 -0
  252. data/test/dummy/tmp/cache/assets/D33/EE0/sprockets%2F285d50fab811d6aab44360b43b358ee8 +0 -0
  253. data/test/dummy/tmp/cache/assets/D36/4F0/sprockets%2F6a5e6e2e8a23e1c5e7359e4018ba1a16 +0 -0
  254. data/test/dummy/tmp/cache/assets/D37/6B0/sprockets%2Ffb4b7383d900b9103ee4eeb16a49156a +0 -0
  255. data/test/dummy/tmp/cache/assets/D38/4B0/sprockets%2F4628f5361aa685f70bdbc0efb715c702 +0 -0
  256. data/test/dummy/tmp/cache/assets/D39/180/sprockets%2Fb6a2dcb4f4b6904a6e5f5a5b38572324 +0 -0
  257. data/test/dummy/tmp/cache/assets/D39/E50/sprockets%2F1e19909eba7771baae63c28571d213dc +0 -0
  258. data/test/dummy/tmp/cache/assets/D3A/220/sprockets%2F4ba28941ec4418b83a3e08f5e4b3f22e +0 -0
  259. data/test/dummy/tmp/cache/assets/D3D/0C0/sprockets%2F5f4828a143b7a17c86ad173af45ea44f +0 -0
  260. data/test/dummy/tmp/cache/assets/D3E/D80/sprockets%2F26a353f794ccad1723ad26d564963dae +0 -0
  261. data/test/dummy/tmp/cache/assets/D3F/EE0/sprockets%2F4d4955da738ce18fcb5d5c254c20471d +0 -0
  262. data/test/dummy/tmp/cache/assets/D40/C00/sprockets%2Fafe2733518c27c73f2d19f27edc5c063 +0 -0
  263. data/test/dummy/tmp/cache/assets/D42/790/sprockets%2F54ebab76bb0c774f441f24a9b049a699 +0 -0
  264. data/test/dummy/tmp/cache/assets/D49/080/sprockets%2F47eee138813998c77fb4d63aea0a83b2 +0 -0
  265. data/test/dummy/tmp/cache/assets/D4A/F80/sprockets%2F573908d07c7e4a37eb475c916f44eaeb +0 -0
  266. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  267. data/test/dummy/tmp/cache/assets/D4F/950/sprockets%2Ffe8890753c95311541bfee8ec93bf6a3 +0 -0
  268. data/test/dummy/tmp/cache/assets/D50/660/sprockets%2F8934155ef2c7db6ff48de8d6a572b352 +0 -0
  269. data/test/dummy/tmp/cache/assets/D50/990/sprockets%2F2f7692187d5d687fd78bcbdd44583a0a +0 -0
  270. data/test/dummy/tmp/cache/assets/D52/BE0/sprockets%2F95f7169a509d1fe46b4b8b7f0d9b9d25 +0 -0
  271. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  272. data/test/dummy/tmp/cache/assets/D5B/270/sprockets%2Fd7121a8e796ab4de09bb1d140a03bd38 +0 -0
  273. data/test/dummy/tmp/cache/assets/D5B/B80/sprockets%2F420c9ca8933da2c7ac42af560ba80a72 +0 -0
  274. data/test/dummy/tmp/cache/assets/D5E/9A0/sprockets%2Fcbae55800082a9de23b02dc0f7416c7f +0 -0
  275. data/test/dummy/tmp/cache/assets/D60/890/sprockets%2Fa63fc11056490cd0ad51c725eea3cd87 +0 -0
  276. data/test/dummy/tmp/cache/assets/D60/F10/sprockets%2F251e00aea88ff5a6c41ed112283f1ef4 +0 -0
  277. data/test/dummy/tmp/cache/assets/D61/310/sprockets%2Ff9192502dcd75958872e1edf6cd8e89e +0 -0
  278. data/test/dummy/tmp/cache/assets/D62/480/sprockets%2Feb89e74e65edfd75c4048038f7e4897c +0 -0
  279. data/test/dummy/tmp/cache/assets/D63/D60/sprockets%2Fcca470eef56334f9ee3600394ca06a0c +0 -0
  280. data/test/dummy/tmp/cache/assets/D64/800/sprockets%2F8be19b06af6bb950af657a2a500c459a +0 -0
  281. data/test/dummy/tmp/cache/assets/D66/EC0/sprockets%2F5b533bbfba939b541a49cd9fb302364b +0 -0
  282. data/test/dummy/tmp/cache/assets/D67/CC0/sprockets%2Fd6be1951f1e10b034d95fc7e317ade62 +0 -0
  283. data/test/dummy/tmp/cache/assets/D69/ED0/sprockets%2F8573a0c480d82a6de7d4431cec53ecb4 +0 -0
  284. data/test/dummy/tmp/cache/assets/D6D/310/sprockets%2F9accebd1400d2d65bc13881889ea5e54 +0 -0
  285. data/test/dummy/tmp/cache/assets/D70/E30/sprockets%2Fdb69f2e4f8e94a52181602e81b7dda1c +0 -0
  286. data/test/dummy/tmp/cache/assets/D71/270/sprockets%2F87be1f988bb5dec8ad602202d66e61d1 +0 -0
  287. data/test/dummy/tmp/cache/assets/D71/DD0/sprockets%2Fdb33de95e82ca2e939a7a1173cd19a57 +0 -0
  288. data/test/dummy/tmp/cache/assets/D73/850/sprockets%2F1e6628b9b7568f1c549eeaaf5a101f4d +0 -0
  289. data/test/dummy/tmp/cache/assets/D74/350/sprockets%2F2a7fa3c361bcd65892a8d8cc4c7772d3 +0 -0
  290. data/test/dummy/tmp/cache/assets/D76/8E0/sprockets%2F5af05ee642ef7c6c480c59d2683c05cf +0 -0
  291. data/test/dummy/tmp/cache/assets/D79/530/sprockets%2F87127ee1c6bcf4b91d8e5f2eda951842 +0 -0
  292. data/test/dummy/tmp/cache/assets/D7E/7D0/sprockets%2F44be519f93759ef9d6faa21a8e532b7c +0 -0
  293. data/test/dummy/tmp/cache/assets/D7E/B50/sprockets%2Fd1d6bc2c8e90a69086a3fdd51d49e779 +0 -0
  294. data/test/dummy/tmp/cache/assets/D81/2E0/sprockets%2F0d2d4106bae377afa11cfc40ba8f6222 +0 -0
  295. data/test/dummy/tmp/cache/assets/D81/BE0/sprockets%2Fd17fbca0deb79f1d5fb200b13158010c +0 -0
  296. data/test/dummy/tmp/cache/assets/D82/950/sprockets%2F1f8a65498915f9fbdf8b2da74db800d8 +0 -0
  297. data/test/dummy/tmp/cache/assets/D87/2B0/sprockets%2Ffaf16963d8b856b046a1a96fef6d898b +0 -0
  298. data/test/dummy/tmp/cache/assets/D8A/CA0/sprockets%2F63b0ad83380a8b15a52c34cafe5c2de3 +0 -0
  299. data/test/dummy/tmp/cache/assets/D94/470/sprockets%2F3bf12b0f588dafba93c72a8ae1d20719 +0 -0
  300. data/test/dummy/tmp/cache/assets/D95/FB0/sprockets%2F7c5d5a248061ab4c0db3935cc39ff0fc +0 -0
  301. data/test/dummy/tmp/cache/assets/D97/2B0/sprockets%2Fd1ddf0ff80e01a73c31b2ced62877a94 +0 -0
  302. data/test/dummy/tmp/cache/assets/D98/0E0/sprockets%2F8f1dba887ccd80e10b70c026a3ce498b +0 -0
  303. data/test/dummy/tmp/cache/assets/D99/730/sprockets%2F6f1142f8fa2beb906b4a9ccd8e03a546 +0 -0
  304. data/test/dummy/tmp/cache/assets/D99/B70/sprockets%2F3330226a3ee4588f0e6c083dcbcef6fa +0 -0
  305. data/test/dummy/tmp/cache/assets/D99/D60/sprockets%2Fa5a6f50cb869da7b5d4170b7b2d7e2a6 +0 -0
  306. data/test/dummy/tmp/cache/assets/D9E/1F0/sprockets%2Fb51430da8d69a96e5689aafa8c0ac71b +0 -0
  307. data/test/dummy/tmp/cache/assets/D9E/460/sprockets%2F717a54dade795a66c2f6daea7c325a80 +0 -0
  308. data/test/dummy/tmp/cache/assets/DA1/6E0/sprockets%2F8ad3ca6d1c8f263b9cedad086e598122 +0 -0
  309. data/test/dummy/tmp/cache/assets/DA3/3E0/sprockets%2F37a6f8767ca6016b823aaccee078c8bf +0 -0
  310. data/test/dummy/tmp/cache/assets/DA4/640/sprockets%2F758aa928cedd052eb72b6c4d7dc438b6 +0 -0
  311. data/test/dummy/tmp/cache/assets/DA6/BD0/sprockets%2Ff7c34df9d6167bc3a49b90f74bd82a2c +0 -0
  312. data/test/dummy/tmp/cache/assets/DA9/280/sprockets%2Fc3386f232e36f9522dff1af8eb7d4e4d +0 -0
  313. data/test/dummy/tmp/cache/assets/DA9/BA0/sprockets%2F67d5749f62dd1a31ea998fdfc2b2e6c0 +0 -0
  314. data/test/dummy/tmp/cache/assets/DB0/610/sprockets%2F27f0e95fc9f245cfe45afd4d1f362a99 +0 -0
  315. data/test/dummy/tmp/cache/assets/DB1/AE0/sprockets%2Fbcf7eefe90b850e5b45267f2691c8ee5 +0 -0
  316. data/test/dummy/tmp/cache/assets/DB1/CC0/sprockets%2F449b63a2ccce6c96ca656fe56f4f29b8 +0 -0
  317. data/test/dummy/tmp/cache/assets/DB6/8D0/sprockets%2F99b8bcd8e7ac9e932a271c13e98fee45 +0 -0
  318. data/test/dummy/tmp/cache/assets/DBD/470/sprockets%2F449cee166e97d8dd62dcf38dc48f47c6 +0 -0
  319. data/test/dummy/tmp/cache/assets/DC3/D20/sprockets%2Fade0348f1f4f6d204cf07c256ccd33fa +0 -0
  320. data/test/dummy/tmp/cache/assets/DC5/510/sprockets%2Fddbe0b0bccf8028b03ef7993c5af8320 +0 -0
  321. data/test/dummy/tmp/cache/assets/DC6/880/sprockets%2F95ecea645241bc5c7263fbaf5bf3f2b0 +0 -0
  322. data/test/dummy/tmp/cache/assets/DC6/CD0/sprockets%2F2faab17861cdba1eb9e317d38a76da64 +0 -0
  323. data/test/dummy/tmp/cache/assets/DCA/B50/sprockets%2Fd3d82ca385d97142b4e57c7dca6fca0a +0 -0
  324. data/test/dummy/tmp/cache/assets/DCE/020/sprockets%2F6ce5583d1ef1afd8d72012c6dc9a4f4c +0 -0
  325. data/test/dummy/tmp/cache/assets/DCE/EA0/sprockets%2F8119567d3d979c4b91fea2b2bcaaefb0 +0 -0
  326. data/test/dummy/tmp/cache/assets/DD0/7F0/sprockets%2Fef2fa8f93ebd90602b488eaf3a0e554a +0 -0
  327. data/test/dummy/tmp/cache/assets/DD3/850/sprockets%2F3f0d25d896ebcb795fbcac0f45d874b0 +0 -0
  328. data/test/dummy/tmp/cache/assets/DDB/8C0/sprockets%2F837f7b8e8f33dbae4de34ba908bd328f +0 -0
  329. data/test/dummy/tmp/cache/assets/DDB/DA0/sprockets%2F3f6a3c8e4688abce408f6caf5b8dd653 +0 -0
  330. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  331. data/test/dummy/tmp/cache/assets/DDD/1E0/sprockets%2F596348d03c6fbcd9ac02fb9dbde6c878 +0 -0
  332. data/test/dummy/tmp/cache/assets/DE5/B70/sprockets%2Fc77a5e9b5e4f9fd02af4c1ed88d69d73 +0 -0
  333. data/test/dummy/tmp/cache/assets/DF0/CF0/sprockets%2F644ea5f42501f70e1a3daffaa5b9d1fd +0 -0
  334. data/test/dummy/tmp/cache/assets/DF2/260/sprockets%2F35c0090f47903a5efee65ac30cddccaf +0 -0
  335. data/test/dummy/tmp/cache/assets/DF5/5F0/sprockets%2F7f6b1930adca83a531ddbaa53ad76ee9 +0 -0
  336. data/test/dummy/tmp/cache/assets/DF6/390/sprockets%2Fa1c2e7c32b51dbfb4e5cb62f9f43a7a9 +0 -0
  337. data/test/dummy/tmp/cache/assets/DF8/B40/sprockets%2F037ccfb8fa7231bfa7ffbc59d070c3d4 +0 -0
  338. data/test/dummy/tmp/cache/assets/DFB/F00/sprockets%2F010dfb576ac2abb5d9d8ee5a9f6d328a +0 -0
  339. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  340. data/test/dummy/tmp/cache/assets/E05/460/sprockets%2Fefc998afbc280b66df981c0ea0ea29c4 +0 -0
  341. data/test/dummy/tmp/cache/assets/E13/660/sprockets%2F1307359c773fdc80cdee9cf87efdd6fa +0 -0
  342. data/test/dummy/tmp/cache/assets/E1B/2A0/sprockets%2F6a86e3ac6f50aadb84ef5a3600adbc1d +0 -0
  343. data/test/dummy/tmp/cache/assets/E1B/B40/sprockets%2Fff174762b8bfd6df1fd9ad6fed18896d +0 -0
  344. data/test/dummy/tmp/cache/assets/E1E/220/sprockets%2F2c2fccd808a30aff0b21fac944dc6c7c +0 -0
  345. data/test/dummy/tmp/cache/assets/E21/3B0/sprockets%2Fabaa5df24f3535acc9cdfd56b0e0b349 +0 -0
  346. data/test/dummy/tmp/cache/assets/E32/120/sprockets%2F13ebfca6482f8e2fec5eface39805b2d +0 -0
  347. data/test/dummy/tmp/cache/assets/E32/1B0/sprockets%2F8539ffcc451cffbed1e1c8f09fa5a1c5 +0 -0
  348. data/test/dummy/tmp/cache/assets/E34/E20/sprockets%2F1a542cad56953aff56cbfbf337fcf9af +0 -0
  349. data/test/dummy/tmp/cache/assets/E3B/040/sprockets%2Fb8f87d0eb5a059cec709bdff6f7bfc15 +0 -0
  350. data/test/dummy/tmp/cache/assets/E5B/6A0/sprockets%2Fe58ffacd2cad19c5f5bda5b91f4620bf +0 -0
  351. data/test/dummy/tmp/cache/assets/E5C/840/sprockets%2Fcbfdfc7aeac880cc161f9fa61af654c3 +0 -0
  352. data/test/dummy/tmp/cache/assets/E68/250/sprockets%2F88d5fa5be6cb9d7e540bad6e94bdd8aa +0 -0
  353. data/test/dummy/tmp/cache/assets/E6F/F60/sprockets%2Fcf91796bdc66abbcde70ce9fcf47a76d +0 -0
  354. data/test/dummy/tmp/cache/assets/E7D/DA0/sprockets%2F3a4ceceac3e02f2a7b82dcf3f25ea7ad +0 -0
  355. data/test/dummy/tmp/cache/assets/E81/0E0/sprockets%2Fcc36d9cdd3fc1c5a8d1b54ccfadad352 +0 -0
  356. data/test/dummy/tmp/cache/assets/EBE/170/sprockets%2Fa7a17e1d2fe6fb6d5e368cfeddfae1ca +0 -0
  357. data/test/dummy/tmp/cache/assets/EED/8B0/sprockets%2F2c35ce7baabe8d64cceace7cb95bfd9a +0 -0
  358. data/test/dummy/tmp/cache/sass/286d476815ae5a0d73c086d611d7e534638a4c9a/document.css.scssc +0 -0
  359. data/test/dummy/tmp/cache/sass/286d476815ae5a0d73c086d611d7e534638a4c9a/forms.css.scssc +0 -0
  360. data/test/dummy/tmp/cache/sass/286d476815ae5a0d73c086d611d7e534638a4c9a/tables.css.scssc +0 -0
  361. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_accordion.scssc +0 -0
  362. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_alerts.scssc +0 -0
  363. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_breadcrumbs.scssc +0 -0
  364. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_button-groups.scssc +0 -0
  365. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_buttons.scssc +0 -0
  366. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_carousel.scssc +0 -0
  367. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_close.scssc +0 -0
  368. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_code.scssc +0 -0
  369. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_component-animations.scssc +0 -0
  370. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_dropdowns.scssc +0 -0
  371. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_forms.scssc +0 -0
  372. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_grid.scssc +0 -0
  373. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_hero-unit.scssc +0 -0
  374. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_labels-badges.scssc +0 -0
  375. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_layouts.scssc +0 -0
  376. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_media.scssc +0 -0
  377. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_mixins.scssc +0 -0
  378. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_modals.scssc +0 -0
  379. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_navbar.scssc +0 -0
  380. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_navs.scssc +0 -0
  381. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_pager.scssc +0 -0
  382. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_pagination.scssc +0 -0
  383. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_popovers.scssc +0 -0
  384. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_progress-bars.scssc +0 -0
  385. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_reset.scssc +0 -0
  386. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_responsive-1200px-min.scssc +0 -0
  387. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_responsive-767px-max.scssc +0 -0
  388. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_responsive-768px-979px.scssc +0 -0
  389. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_responsive-navbar.scssc +0 -0
  390. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_responsive-utilities.scssc +0 -0
  391. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_scaffolding.scssc +0 -0
  392. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_sprites.scssc +0 -0
  393. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_tables.scssc +0 -0
  394. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_thumbnails.scssc +0 -0
  395. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_tooltip.scssc +0 -0
  396. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_type.scssc +0 -0
  397. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_utilities.scssc +0 -0
  398. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_variables.scssc +0 -0
  399. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/_wells.scssc +0 -0
  400. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/bootstrap.scssc +0 -0
  401. data/test/dummy/tmp/cache/sass/9c4049ac4ab21c80305c119b565d8ccee297f91e/responsive.scssc +0 -0
  402. data/test/dummy/tmp/cache/sass/e3442098eb9df3b4438ecccd23acb9a9a8b7fa1f/bootstrap-responsive.scssc +0 -0
  403. data/test/dummy/tmp/cache/sass/e3442098eb9df3b4438ecccd23acb9a9a8b7fa1f/bootstrap.scssc +0 -0
  404. data/test/factories/invoice_bar_account.rb +16 -0
  405. data/test/factories/invoice_bar_address.rb +10 -0
  406. data/test/factories/invoice_bar_contact.rb +7 -0
  407. data/test/factories/invoice_bar_currency.rb +7 -0
  408. data/test/factories/invoice_bar_invoice.rb +28 -0
  409. data/test/factories/invoice_bar_invoice_template.rb +22 -0
  410. data/test/factories/invoice_bar_item.rb +7 -0
  411. data/test/factories/invoice_bar_receipt.rb +27 -0
  412. data/test/factories/invoice_bar_receipt_template.rb +21 -0
  413. data/test/factories/invoice_bar_user.rb +9 -0
  414. data/test/functional/invoice_bar/accounts_controller_test.rb +65 -0
  415. data/test/functional/invoice_bar/contacts_controller_test.rb +67 -0
  416. data/test/functional/invoice_bar/currencies_controller_test.rb +59 -0
  417. data/test/functional/invoice_bar/invoice_templates_controller_test.rb +71 -0
  418. data/test/functional/invoice_bar/invoices_controller_test.rb +76 -0
  419. data/test/functional/invoice_bar/receipt_templates_controller_test.rb +67 -0
  420. data/test/functional/invoice_bar/receipts_controller_test.rb +68 -0
  421. data/test/functional/invoice_bar/users_controller_test.rb +83 -0
  422. data/test/invoice_bar_test.rb +7 -0
  423. data/test/performance/browsing_test.rb +14 -0
  424. data/test/test_helper.rb +40 -0
  425. data/test/unit/invoice_bar/account_test.rb +31 -0
  426. data/test/unit/invoice_bar/address_test.rb +31 -0
  427. data/test/unit/invoice_bar/contact_test.rb +17 -0
  428. data/test/unit/invoice_bar/currency_test.rb +13 -0
  429. data/test/unit/invoice_bar/helpers/invoice_bar_helper_test.rb +19 -0
  430. data/test/unit/invoice_bar/invoice_template_test.rb +36 -0
  431. data/test/unit/invoice_bar/invoice_test.rb +67 -0
  432. data/test/unit/invoice_bar/item_test.rb +48 -0
  433. data/test/unit/invoice_bar/receipt_template_test.rb +34 -0
  434. data/test/unit/invoice_bar/receipt_test.rb +48 -0
  435. data/test/unit/invoice_bar/user_test.rb +29 -0
  436. metadata +1030 -0
data/db/seeds.rb ADDED
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ # This file should contain all the record creation needed to seed the database with its default values.
4
+ # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
5
+ #
6
+ # Examples:
7
+ #
8
+ # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
9
+ # Mayor.create(name: 'Emanuel', city: cities.first)
10
+
11
+ # Create the list of most used currencies
12
+ currencies = InvoiceBar::Currency.create([
13
+ { name: 'Česká koruna', symbol: 'Kč', priority: '4' },
14
+ { name: 'Euro', symbol: '€', priority: '3' },
15
+ { name: 'Americký dolar', symbol: 'US$', priority: '2' },
16
+ { name: 'Polský zlotý', symbol: 'zł', priority: '1' }
17
+ ])
18
+
19
+ # Create administrator
20
+ =begin
21
+ administrator = InvoiceBar::User.create(
22
+ name: 'admin',
23
+ email: 'admin@admin.cz',
24
+ ic: 123456,
25
+ administrator: true,
26
+ address: InvoiceBar::Address.create(
27
+ street: 'Ulice',
28
+ street_number: '1',
29
+ city: 'Mesto',
30
+ postcode: '74727'
31
+ )
32
+ )
33
+ =end
data/db/test.sqlite3 ADDED
File without changes
data/lib/billable.rb ADDED
@@ -0,0 +1,305 @@
1
+ # encoding: utf-8
2
+
3
+ module InvoiceBar
4
+ # Module for billing concerns.
5
+ module Billable
6
+
7
+ # Filters for narrowing the results when listing bills
8
+ module Filters
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+
13
+ # Looks for bills that match +number+
14
+ # and returns a collection of matching bills
15
+ def self.for_numbers(number)
16
+ records = limit(nil)
17
+ records = where('number LIKE ?', "%#{number}%") if number.present?
18
+
19
+ records
20
+ end
21
+
22
+ # Looks for the date range from +from_date+ to +to_date+ of bills
23
+ # and returns a collection of matching bills
24
+ def self.within_dates(from_date, to_date)
25
+ records = limit(nil)
26
+ records = records.where('issue_date >= ?', from_date) if from_date.present?
27
+ records = records.where('issue_date <= ?', to_date) if to_date.present?
28
+
29
+ records
30
+ end
31
+
32
+ # Looks for the amount range from +from_amount+ to +to_amount+ of bills
33
+ # and returns a collection of matching bills
34
+ def self.within_amounts(from_amount, to_amount)
35
+ records = limit(nil)
36
+ records = records.where('amount >= ?', from_amount) if from_amount.present?
37
+ records = records.where('amount <= ?', to_amount) if to_amount.present?
38
+
39
+ records
40
+ end
41
+
42
+ # Looks for the contacts of bills
43
+ # and returns a collection of matching bills
44
+ def self.including_contacts(contact)
45
+ records = limit(nil)
46
+ records = where('contact_name LIKE ?', "%#{contact}%") if contact.present?
47
+
48
+ records
49
+ end
50
+
51
+ def self.paid(is_paid)
52
+ records = case is_paid
53
+ when true then where('paid = ?', true)
54
+ when false then where('paid = ?', false)
55
+ else limit(nil)
56
+ end
57
+
58
+ records
59
+ end
60
+
61
+ def self.sent(is_sent)
62
+ records = case is_sent
63
+ when true then where('sent = ?', true)
64
+ when false then where('sent = ?', false)
65
+ else limit(nil)
66
+ end
67
+
68
+ records
69
+ end
70
+ end
71
+ end
72
+
73
+ # Specific features to invoicing. It specifies +due_date+ and
74
+ # whether the invoice is received or issued.
75
+ module Invoicing
76
+ extend ActiveSupport::Concern
77
+
78
+ included do
79
+ attr_accessible :due_date, :payment_identification_number, :issuer
80
+ validates :payment_identification_number, numericality: true, allow_blank: true
81
+
82
+ class << self
83
+ def received
84
+ where(:issuer => false)
85
+ end
86
+
87
+ def issued
88
+ where(:issuer => true)
89
+ end
90
+ end
91
+
92
+ def received?
93
+ unless self.issuer?
94
+ true
95
+ else
96
+ false
97
+ end
98
+ end
99
+
100
+ def issued?
101
+ !received?
102
+ end
103
+ end
104
+ end
105
+
106
+ # Specific features for receipts.
107
+ # It specifies if the receipt is an expense or an income.
108
+ module Receipting
109
+ extend ActiveSupport::Concern
110
+
111
+ included do
112
+ attr_accessible :issuer
113
+
114
+ class << self
115
+ def expense
116
+ where(:issuer => false)
117
+ end
118
+
119
+ def income
120
+ where(:issuer => true)
121
+ end
122
+ end
123
+
124
+ def expense?
125
+ unless self.issuer?
126
+ true
127
+ else
128
+ false
129
+ end
130
+ end
131
+
132
+ def income?
133
+ !expence?
134
+ end
135
+ end
136
+ end
137
+
138
+ # Common things for both invoices and receipts.
139
+ module Base
140
+ extend ActiveSupport::Concern
141
+
142
+ included do
143
+ attr_accessible :amount, :contact_dic, :contact_ic, :contact_name, :issue_date, :issuer
144
+
145
+ validates :contact_ic, length: { in: 2..8 }, numericality: true, allow_blank: true
146
+ validates :contact_dic, length: { in: 4..14 }, allow_blank: true
147
+
148
+ # Generates a new bill from a given +template+.
149
+ def self.from_template(template)
150
+ bill = self.new
151
+ bill.apply_template(template)
152
+
153
+ bill.address ||= invoice.build_address
154
+ bill.issue_date = Date.today if bill.issue_date.blank?
155
+
156
+ if self.respond_to? :due_date
157
+ bill.due_date = Date.today + 14.days if bill.due_date.blank?
158
+ end
159
+
160
+ bill
161
+ end
162
+
163
+ # Applies values from the given +template+ to the bill.
164
+ def apply_template(template)
165
+ attributes = ['contact_name', 'contact_ic', 'contact_dic', 'issue_date']
166
+
167
+ if self.respond_to? :due_date
168
+ attributes << 'due_date'
169
+ end
170
+
171
+ if self.respond_to? :payment_identification_number
172
+ attributes << 'payment_identification_number'
173
+ end
174
+
175
+ attributes.each do |attribute|
176
+ eval "self.#{attribute} = nil if self.#{attribute}.blank?"
177
+ end
178
+
179
+ self.contact_name ||= template.contact_name unless template.contact_name.blank?
180
+ self.contact_ic ||= template.contact_ic unless template.contact_ic.blank?
181
+ self.contact_dic ||= template.contact_dic unless template.contact_dic.blank?
182
+
183
+ if self.respond_to? :due_date
184
+ self.due_date ||= template.due_date unless template.due_date.blank?
185
+ end
186
+
187
+ self.issue_date ||= template.issue_date unless template.issue_date.blank?
188
+
189
+ if self.respond_to? :payment_identification_number
190
+ self.payment_identification_number ||= template.payment_identification_number unless template.payment_identification_number.blank?
191
+ end
192
+
193
+ self.address ||= Address.new
194
+
195
+ if self.address.empty?
196
+ self.address = template.address.copy unless template.address.nil?
197
+ end
198
+
199
+ template.items.each do |item|
200
+ self.items << item.copy
201
+ end
202
+ end
203
+
204
+ # Updates +amount+ from the associated items.
205
+ def update_amount
206
+ self.amount = 0
207
+
208
+ self.items.each do |item|
209
+ item.update_amount
210
+ self.amount += item.amount unless item.amount.nil?
211
+ end
212
+ end
213
+
214
+ # Import and overwrites values from the given +contact+
215
+ def use_contact(contact)
216
+ self.contact_name = contact.name
217
+ self.contact_ic = contact.ic
218
+ self.contact_dic = contact.dic
219
+ self.address = Address.new unless self.address
220
+ self.address.postcode = contact.postcode
221
+ self.address.city = contact.city
222
+ self.address.city_part = contact.city_part
223
+ self.address.street = contact.street
224
+ self.address.street_number = contact.street_number
225
+ self.address.extra_address_line = contact.extra_address_line
226
+ end
227
+
228
+ # Import and overwrites values from the ARES subject.
229
+ # Returns true on success and false on failure.
230
+ def load_contact_from_ic(ic)
231
+ begin
232
+ contact = RubyARES::Subject.get(ic)
233
+ rescue
234
+ return false
235
+ end
236
+
237
+ self.contact_name = contact.name
238
+ self.contact_ic = contact.ic
239
+ self.contact_dic = contact.dic
240
+ self.address = Address.new unless self.address
241
+ self.address.city = contact.address.city
242
+ self.address.city_part = contact.address.city_part unless contact.address.city == contact.address.city_part
243
+ self.address.street = contact.address.street
244
+ self.address.street_number = contact.address.street_number
245
+ self.address.postcode = contact.address.postcode
246
+
247
+ return true
248
+ end
249
+ end
250
+ end
251
+
252
+ module StrictValidations
253
+ extend ActiveSupport::Concern
254
+
255
+ included do
256
+ validates :issue_date, presence: true
257
+ validates :account_id, presence: true
258
+ validates :contact_name, presence: true
259
+ validates :contact_ic, length: { in: 2..8 }, numericality: true, allow_blank: true
260
+ end
261
+ end
262
+
263
+ # Associations for bills.
264
+ module Associations
265
+ module Base
266
+ extend ActiveSupport::Concern
267
+
268
+ included do
269
+ attr_accessible :account_id, :user_id,
270
+ :address, :address_attributes,
271
+ :items_attributes
272
+
273
+ delegate :city, :city_part, :extra_address_line, :postcode, :street, :street_number,
274
+ :address, :name, :ic,
275
+ to: :user, prefix: true
276
+
277
+ delegate :city, :city_part, :extra_address_line, :postcode, :street, :street_number,
278
+ to: :address, prefix: true
279
+
280
+ delegate :name, :bank_account_number, :swift, :iban,
281
+ to: :account, prefix: true
282
+
283
+ belongs_to :account
284
+ belongs_to :user
285
+
286
+ has_one :address, as: :addressable, dependent: :destroy
287
+ has_many :items, as: :itemable, dependent: :destroy
288
+
289
+ accepts_nested_attributes_for :items, allow_destroy: true, reject_if: :all_blank
290
+ accepts_nested_attributes_for :address, allow_destroy: true, reject_if: :all_blank
291
+
292
+ validates :user_id, presence: true, numericality: true
293
+ end
294
+ end
295
+
296
+ module StrictValidations
297
+ extend ActiveSupport::Concern
298
+
299
+ included do
300
+ accepts_nested_attributes_for :address, allow_destroy: true, reject_if: false
301
+ end
302
+ end
303
+ end
304
+ end
305
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+
3
+ require 'bootstrap-sass'
4
+ require 'kaminari'
5
+ require 'prawn'
6
+ require 'jquery-rails'
7
+ require 'jquery-ui-rails'
8
+ require 'sorcery'
9
+ require 'inherited_resources'
10
+ require 'nested_form'
11
+
12
+ # ARES
13
+ require 'xml'
14
+ require 'ruby-ares'
15
+
16
+ require 'formatted-money'
17
+
18
+ require File.expand_path("../../billable.rb", __FILE__)
19
+ require File.expand_path("../../searchable.rb", __FILE__)
20
+
21
+ I18n.locale = :cs
22
+
23
+ module InvoiceBar
24
+ class Engine < ::Rails::Engine
25
+ isolate_namespace InvoiceBar
26
+ end
27
+
28
+ module Generators
29
+ # Document numbers generators defaults
30
+ @@issued_invoice_number = Proc.new do |n|
31
+ "VF#{self.default_number(n)}"
32
+ end unless defined? @@issued_invoice_number
33
+
34
+ @@received_invoice_number = Proc.new do |n|
35
+ "PF#{self.default_number(n)}"
36
+ end unless defined? @@received_invoice_number
37
+
38
+ @@expense_receipt_number = Proc.new do |n|
39
+ "VD#{self.default_number(n)}"
40
+ end unless defined? @@expense_receipt_number
41
+
42
+ @@income_receipt_number = Proc.new do |n|
43
+ "PD#{self.default_number(n)}"
44
+ end unless defined? @@income_receipt_number
45
+
46
+ def self.issued_invoice_number(n)
47
+ @@issued_invoice_number.call(n)
48
+ end
49
+
50
+ def self.received_invoice_number(n)
51
+ @@received_invoice_number.call(n)
52
+ end
53
+
54
+ def self.income_receipt_number(n)
55
+ @@income_receipt_number.call(n)
56
+ end
57
+
58
+ def self.expense_receipt_number(n)
59
+ @@expense_receipt_number.call(n)
60
+ end
61
+
62
+ def self.default_number(n)
63
+ t = Time.now
64
+ number = "#{t.year}#{t.month}#{self.with_zeros(n)}"
65
+ number
66
+ end
67
+
68
+ def self.with_zeros(n)
69
+ length = n.to_s.length
70
+ number_of_zeros = Integer(4-length)
71
+ zeros = ''
72
+
73
+ number_of_zeros.times do
74
+ zeros += '0'
75
+ end
76
+
77
+ "#{zeros}#{n}"
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module InvoiceBar
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ require "invoice_bar/engine"
4
+
5
+ module InvoiceBar
6
+
7
+ end
data/lib/searchable.rb ADDED
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ module InvoiceBar
4
+
5
+ # Module that provides +search_for+ method on a model class.
6
+ # It expects +searchable_fields+ to be defined.
7
+ # +searchable_fields+ contains the table fields of the model
8
+ # (attributes) that should be searched.
9
+ module Searchable
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ def self.search_for(query)
14
+ where(self.build_search_query, :query => "%#{query}%")
15
+ end
16
+
17
+ protected
18
+
19
+ def self.build_search_query()
20
+ @query = ''
21
+
22
+ self.searchable_fields.each do |field|
23
+ unless @query.blank?
24
+ @query += ' OR '
25
+ end
26
+
27
+ @query += "#{field} LIKE :query"
28
+ end
29
+
30
+ @query
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :invoicebar do
3
+ # # Task goes here
4
+ # end