stockor 0.1.9 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +254 -72
  4. data/Guardfile +1 -1
  5. data/README.md +24 -3
  6. data/app.json +28 -0
  7. data/client/skr/Extension.coffee +18 -0
  8. data/client/skr/components/BankAccountFinder.cjsx +34 -0
  9. data/client/skr/components/Currency.cjsx +19 -0
  10. data/client/skr/components/CustomerFinder.cjsx +37 -0
  11. data/client/skr/components/CustomerLink.cjsx +13 -0
  12. data/client/skr/components/CustomerProjectFinder.cjsx +49 -0
  13. data/client/skr/components/GlAccountChooser.cjsx +38 -0
  14. data/client/skr/components/InvoiceFinder.cjsx +37 -0
  15. data/client/skr/components/InvoiceLink.cjsx +13 -0
  16. data/client/skr/components/LocationChooser.cjsx +37 -0
  17. data/client/skr/components/PaymentCategoryFinder.cjsx +34 -0
  18. data/client/skr/components/PrintFormChooser.cjsx +29 -0
  19. data/client/skr/components/SalesOrderFinder.cjsx +38 -0
  20. data/client/skr/components/ScreenControls.cjsx +20 -0
  21. data/client/skr/components/SkuFinder.cjsx +30 -0
  22. data/client/skr/components/SkuLines.cjsx +76 -0
  23. data/client/skr/components/SystemSettings.cjsx +26 -0
  24. data/client/skr/components/TermsChooser.cjsx +40 -0
  25. data/client/skr/components/ToolbarButton.cjsx +7 -0
  26. data/client/skr/components/TotalsLine.cjsx +21 -0
  27. data/client/skr/components/TriStateIcon.cjsx +12 -0
  28. data/client/skr/components/UOMChooser.cjsx +24 -0
  29. data/client/skr/components/UserPreferences.cjsx +30 -0
  30. data/client/skr/components/VendorFinder.cjsx +40 -0
  31. data/client/skr/components/address/Address.cjsx +10 -10
  32. data/client/skr/components/styles.scss +16 -0
  33. data/client/skr/index.js +3 -1
  34. data/client/skr/models/Address.coffee +9 -1
  35. data/client/skr/models/BankAccount.coffee +17 -0
  36. data/client/skr/models/Base.coffee +6 -0
  37. data/client/skr/models/Customer.coffee +17 -10
  38. data/client/skr/models/CustomerProject.coffee +29 -0
  39. data/client/skr/models/GlAccount.coffee +22 -10
  40. data/client/skr/models/GlManualEntry.coffee +4 -2
  41. data/client/skr/models/GlPeriod.coffee +4 -6
  42. data/client/skr/models/GlPosting.coffee +7 -7
  43. data/client/skr/models/GlTransaction.coffee +3 -3
  44. data/client/skr/models/IaLine.coffee +9 -9
  45. data/client/skr/models/IaReason.coffee +4 -4
  46. data/client/skr/models/InvLine.coffee +30 -11
  47. data/client/skr/models/InventoryAdjustment.coffee +8 -6
  48. data/client/skr/models/Invoice.coffee +89 -18
  49. data/client/skr/models/Location.coffee +27 -6
  50. data/client/skr/models/Payment.coffee +36 -0
  51. data/client/skr/models/PaymentCategory.coffee +12 -0
  52. data/client/skr/models/PaymentTerm.coffee +17 -4
  53. data/client/skr/models/PickTicket.coffee +7 -5
  54. data/client/skr/models/PoLine.coffee +15 -15
  55. data/client/skr/models/PoReceipt.coffee +8 -6
  56. data/client/skr/models/PorLine.coffee +11 -11
  57. data/client/skr/models/PricingProvider.coffee +6 -0
  58. data/client/skr/models/PtLine.coffee +13 -13
  59. data/client/skr/models/PurchaseOrder.coffee +11 -9
  60. data/client/skr/models/SalesOrder.coffee +59 -22
  61. data/client/skr/models/Sku.coffee +17 -15
  62. data/client/skr/models/SkuLoc.coffee +14 -9
  63. data/client/skr/models/SkuTran.coffee +10 -10
  64. data/client/skr/models/SkuVendor.coffee +9 -9
  65. data/client/skr/models/SoLine.coffee +27 -20
  66. data/client/skr/models/TimeEntry.coffee +75 -0
  67. data/client/skr/models/Uom.coffee +27 -6
  68. data/client/skr/models/Vendor.coffee +14 -12
  69. data/client/skr/models/VoLine.coffee +11 -11
  70. data/client/skr/models/Voucher.coffee +7 -5
  71. data/client/skr/models/mixins/HasVisibleId.coffee +7 -0
  72. data/client/skr/models/mixins/PrintSupport.coffee +6 -0
  73. data/client/skr/models/mixins/SkuLine.coffee +61 -0
  74. data/client/skr/screens/Commands.coffee +29 -0
  75. data/client/skr/screens/bank-maint/BankMaint.cjsx +43 -0
  76. data/client/skr/screens/bank-maint/index.js +5 -0
  77. data/client/skr/screens/chart-of-accounts/ChartOfAccounts.cjsx +40 -0
  78. data/client/skr/screens/chart-of-accounts/index.js +1 -0
  79. data/client/skr/screens/chart-of-accounts/index.scss +12 -0
  80. data/client/skr/screens/customer-maint/CustomerMaint.cjsx +35 -36
  81. data/client/skr/screens/customer-projects/CustomerProjects.cjsx +70 -0
  82. data/client/skr/screens/customer-projects/index.js +5 -0
  83. data/client/skr/screens/customer-projects/index.scss +25 -0
  84. data/client/skr/screens/fresh-books-import/ApiInfo.cjsx +35 -0
  85. data/client/skr/screens/fresh-books-import/ChooseRecords.cjsx +116 -0
  86. data/client/skr/screens/fresh-books-import/FreshBooksImport.cjsx +31 -0
  87. data/client/skr/screens/fresh-books-import/Import.coffee +52 -0
  88. data/client/skr/screens/fresh-books-import/ViewRecords.cjsx +96 -0
  89. data/client/skr/screens/fresh-books-import/index.js +1 -0
  90. data/client/skr/screens/fresh-books-import/index.scss +39 -0
  91. data/client/skr/screens/gl-accounts/GlAccounts.cjsx +31 -0
  92. data/client/skr/screens/gl-accounts/index.js +5 -0
  93. data/client/skr/screens/gl-transactions/GlTransactions.cjsx +46 -0
  94. data/client/skr/screens/gl-transactions/index.js +1 -0
  95. data/client/skr/screens/gl-transactions/index.scss +12 -0
  96. data/client/skr/screens/invoice/Invoice.cjsx +92 -0
  97. data/client/skr/screens/invoice/Payment.cjsx +28 -0
  98. data/client/skr/screens/invoice/index.js +5 -0
  99. data/client/skr/screens/locations/Locations.cjsx +31 -0
  100. data/client/skr/screens/locations/index.js +5 -0
  101. data/client/skr/screens/payment-category/PaymentCategory.cjsx +28 -0
  102. data/client/skr/screens/payment-category/index.js +5 -0
  103. data/client/skr/screens/payment-category/index.scss +9 -0
  104. data/client/skr/screens/payment-terms/PaymentTerms.cjsx +28 -0
  105. data/client/skr/screens/payment-terms/index.js +5 -0
  106. data/client/skr/screens/payment-terms/index.scss +9 -0
  107. data/client/skr/screens/payments/Payments.cjsx +59 -0
  108. data/client/skr/screens/payments/index.js +5 -0
  109. data/client/skr/screens/sales-order/SalesOrder.cjsx +68 -0
  110. data/client/skr/screens/sales-order/index.js +1 -5
  111. data/client/skr/screens/sku-maint/SkuMaint.cjsx +53 -0
  112. data/client/skr/screens/sku-maint/SkuUomList.cjsx +209 -0
  113. data/client/skr/screens/sku-maint/index.js +2 -5
  114. data/client/skr/screens/sku-maint/index.scss +37 -6
  115. data/client/skr/screens/time-invoicing/TimeInvoicing.cjsx +156 -0
  116. data/client/skr/screens/time-invoicing/index.js +5 -0
  117. data/client/skr/screens/time-invoicing/index.scss +7 -0
  118. data/client/skr/screens/time-tracking/EditEntry.cjsx +54 -0
  119. data/client/skr/screens/time-tracking/Entries.coffee +132 -0
  120. data/client/skr/screens/time-tracking/Header.cjsx +71 -0
  121. data/client/skr/screens/time-tracking/Popover.cjsx +70 -0
  122. data/client/skr/screens/time-tracking/PopoverMiniControls.cjsx +25 -0
  123. data/client/skr/screens/time-tracking/TimeTracking.cjsx +63 -0
  124. data/client/skr/screens/time-tracking/WeekSummary.cjsx +16 -0
  125. data/client/skr/screens/time-tracking/index.js +1 -0
  126. data/client/skr/screens/time-tracking/index.scss +126 -0
  127. data/client/skr/screens/vendor-maint/VendorMaint.cjsx +45 -0
  128. data/client/skr/screens/vendor-maint/index.js +1 -5
  129. data/client/skr/styles.scss +1 -13
  130. data/config/puma.rb +4 -0
  131. data/config/routes.rb +21 -9
  132. data/config/screens.rb +147 -32
  133. data/db/migrate/20140202194700_create_skr_gl_transaction_details.rb +35 -0
  134. data/db/migrate/20140220031800_create_skr_locations.rb +2 -0
  135. data/db/migrate/20140220190836_create_skr_vendors.rb +1 -0
  136. data/db/migrate/20140220203029_create_skr_customers.rb +3 -2
  137. data/db/migrate/20140224034759_create_skr_skus.rb +2 -3
  138. data/db/migrate/20140322223912_create_skr_sales_orders.rb +4 -3
  139. data/db/migrate/20140322223920_create_skr_so_lines.rb +4 -5
  140. data/db/migrate/20140323001446_create_so_details_view.rb +7 -5
  141. data/db/migrate/20140327202209_create_skr_pt_lines.rb +2 -2
  142. data/db/migrate/20140327214000_create_customer_project.rb +16 -0
  143. data/db/migrate/20140327223002_create_time_entries.rb +17 -0
  144. data/db/migrate/20140327224000_create_skr_invoices.rb +5 -1
  145. data/db/migrate/20140327224002_create_skr_inv_lines.rb +3 -1
  146. data/db/migrate/20140422024010_create_skr_inv_details_view.rb +1 -1
  147. data/db/migrate/20151121211323_create_customer_project_details_views.rb +31 -0
  148. data/db/migrate/20160216142845_create_gl_account_balances_view.rb +20 -0
  149. data/db/migrate/20160229002044_create_bank_accounts.rb +18 -0
  150. data/db/migrate/20160229041711_create_payments.rb +33 -0
  151. data/db/migrate/20160307022705_create_create_combined_uom_views.rb +18 -0
  152. data/db/schema.sql +639 -140
  153. data/db/seed/chart_of_accounts.yml +8 -6
  154. data/db/seed/payment_categories.yml +12 -0
  155. data/db/seed/skus.yml +32 -0
  156. data/db/seed.rb +21 -0
  157. data/lib/skr/access_roles.rb +19 -6
  158. data/lib/skr/concerns/has_sku_loc_lines.rb +0 -16
  159. data/lib/skr/concerns/inv_extensions.rb +24 -0
  160. data/lib/skr/concerns/is_sku_loc_line.rb +3 -4
  161. data/lib/skr/concerns/so_extensions.rb +8 -0
  162. data/lib/skr/concerns/visible_id_identifier.rb +1 -1
  163. data/lib/skr/db/migration_helpers.rb +2 -4
  164. data/lib/skr/extension.rb +11 -4
  165. data/lib/skr/handlers/fresh_books_import.rb +20 -0
  166. data/lib/skr/handlers/invoice_from_time_entries.rb +49 -0
  167. data/lib/skr/jobs/fresh_books/base.rb +54 -0
  168. data/lib/skr/jobs/fresh_books/import.rb +151 -0
  169. data/lib/skr/jobs/fresh_books/retrieve.rb +62 -0
  170. data/lib/skr/model.rb +5 -0
  171. data/lib/skr/models/address.rb +1 -1
  172. data/lib/skr/models/bank_account.rb +13 -0
  173. data/lib/skr/models/business_entity.rb +3 -0
  174. data/lib/skr/models/customer.rb +1 -1
  175. data/lib/skr/models/customer_project.rb +22 -0
  176. data/lib/skr/models/gl_account.rb +13 -3
  177. data/lib/skr/models/gl_period.rb +6 -0
  178. data/lib/skr/models/gl_posting.rb +7 -4
  179. data/lib/skr/models/gl_transaction.rb +19 -33
  180. data/lib/skr/models/ia_line.rb +1 -1
  181. data/lib/skr/models/inv_line.rb +33 -15
  182. data/lib/skr/models/invoice.rb +47 -20
  183. data/lib/skr/models/location.rb +7 -1
  184. data/lib/skr/models/payment.rb +49 -0
  185. data/lib/skr/models/payment_category.rb +11 -0
  186. data/lib/skr/models/payment_term.rb +1 -1
  187. data/lib/skr/models/por_line.rb +1 -1
  188. data/lib/skr/models/pt_line.rb +1 -1
  189. data/lib/skr/models/sales_order.rb +9 -9
  190. data/lib/skr/models/sku_loc.rb +1 -1
  191. data/lib/skr/models/sku_tran.rb +6 -11
  192. data/lib/skr/models/so_line.rb +22 -12
  193. data/lib/skr/models/time_entry.rb +36 -0
  194. data/lib/skr/models/uom.rb +11 -10
  195. data/lib/skr/models/user_proxy.rb +1 -1
  196. data/lib/skr/number.rb +25 -0
  197. data/lib/skr/print/form.rb +46 -0
  198. data/lib/skr/print/template.rb +48 -0
  199. data/lib/skr/print.rb +11 -0
  200. data/lib/skr/string.rb +11 -0
  201. data/lib/skr/version.rb +1 -1
  202. data/lib/skr.rb +9 -0
  203. data/spec/fixtures/skr/address.yml +164 -4
  204. data/spec/fixtures/skr/bank_account.yml +8 -0
  205. data/spec/fixtures/skr/customer.yml +30 -4
  206. data/spec/fixtures/skr/customer_project.yml +20 -0
  207. data/spec/fixtures/skr/gl_account.yml +19 -1
  208. data/spec/fixtures/skr/gl_period.yml +3 -0
  209. data/spec/fixtures/skr/gl_posting.yml +22 -1
  210. data/spec/fixtures/skr/gl_transaction.yml +4 -1
  211. data/spec/fixtures/skr/inv_line.yml +35 -0
  212. data/spec/fixtures/skr/invoice.yml +13 -2
  213. data/spec/fixtures/skr/location.yml +5 -0
  214. data/spec/fixtures/skr/payment.yml +10 -0
  215. data/spec/fixtures/skr/payment_category.yml +8 -0
  216. data/spec/fixtures/skr/payment_term.yml +37 -3
  217. data/spec/fixtures/skr/sales_order.yml +12 -1
  218. data/spec/fixtures/skr/sku.yml +78 -1
  219. data/spec/fixtures/skr/sku_loc.yml +42 -1
  220. data/spec/fixtures/skr/sku_tran.yml +24 -1
  221. data/spec/fixtures/skr/so_line.yml +32 -0
  222. data/spec/fixtures/skr/time_entry.yml +82 -0
  223. data/spec/fixtures/skr/uom.yml +52 -1
  224. data/spec/fixtures/skr/vendor.yml +28 -1
  225. data/spec/fixtures/stockor.png +0 -0
  226. data/spec/server/bank_account_spec.rb +10 -0
  227. data/spec/server/customer_project_spec.rb +10 -0
  228. data/spec/server/handlers/invoice_from_time_entries_spec.rb +49 -0
  229. data/spec/server/jobs/fresh_books/import_spec.rb +69 -0
  230. data/spec/server/jobs/fresh_books/retrieve_spec.rb +37 -0
  231. data/spec/server/models/address_spec.rb +4 -3
  232. data/spec/server/models/gl_transaction_spec.rb +3 -3
  233. data/spec/server/models/inv_line_spec.rb +83 -3
  234. data/spec/server/models/invoice_spec.rb +32 -3
  235. data/spec/server/models/payment_spec.rb +40 -0
  236. data/spec/server/models/sales_order_spec.rb +1 -1
  237. data/spec/server/models/so_line_spec.rb +3 -3
  238. data/spec/server/models/spec_helper_spec.rb +1 -1
  239. data/spec/server/payment_spec.rb +10 -0
  240. data/spec/server/print/form_spec.rb +47 -0
  241. data/spec/server/print/template_spec.rb +36 -0
  242. data/spec/server/spec_helper.rb +14 -1
  243. data/spec/server/time_entry_spec.rb +10 -0
  244. data/spec/skr/components/SkuLinesSpec.coffee +61 -0
  245. data/spec/skr/models/BankAccountSpec.coffee +5 -0
  246. data/spec/skr/models/CustomerProjectSpec.coffee +5 -0
  247. data/spec/skr/models/CustomerSpec.coffee +2 -2
  248. data/spec/skr/models/PaymentSpec.coffee +5 -0
  249. data/spec/skr/models/SalesOrderSpec.coffee +21 -5
  250. data/spec/skr/models/SoLineSpec.coffee +7 -2
  251. data/spec/skr/models/TimeEntrySpec.coffee +5 -0
  252. data/spec/skr/screens/bank-maint/BankMaintSpec.coffee +5 -0
  253. data/spec/skr/screens/customer-projects/CustomerProjectsSpec.coffee +5 -0
  254. data/spec/skr/screens/fresh-books-import/FreshBooksImportSpec.coffee +1 -0
  255. data/spec/skr/screens/gl-accounts/GlAccountsSpec.coffee +5 -0
  256. data/spec/skr/screens/invoice/InvoiceSpec.coffee +5 -0
  257. data/spec/skr/screens/locations/LocationsSpec.coffee +5 -0
  258. data/spec/skr/screens/payment-category/PaymentCategorySpec.coffee +5 -0
  259. data/spec/skr/screens/payment-terms/PaymentTermsSpec.coffee +5 -0
  260. data/spec/skr/screens/payments/PaymentsSpec.coffee +5 -0
  261. data/spec/skr/screens/time-invoicing/TimeInvoicingSpec.coffee +5 -0
  262. data/spec/skr/screens/time-tracking/TimeTrackingSpec.coffee +14 -0
  263. data/spec/vcr/freshbooks.yml +698 -0
  264. data/stockor.gemspec +5 -1
  265. data/templates/print/fonts/GnuMICR.otf +0 -0
  266. data/templates/print/layout.tex.erb +39 -0
  267. data/templates/print/packages/booktabs.sty +182 -0
  268. data/templates/print/packages/fancybox.sty +966 -0
  269. data/templates/print/packages/fancyhdr.sty +485 -0
  270. data/templates/print/packages/graphbox.sty +129 -0
  271. data/templates/print/packages/lastpage.sty +283 -0
  272. data/templates/print/packages/lastpage209.sty +70 -0
  273. data/templates/print/packages/marginnote.sty +412 -0
  274. data/templates/print/packages/multirow.sty +159 -0
  275. data/templates/print/packages/rotating.sty +282 -0
  276. data/templates/print/packages/tabu.sty +2557 -0
  277. data/templates/print/packages/textpos.sty +361 -0
  278. data/templates/print/packages/varwidth.sty +318 -0
  279. data/templates/print/partials/address.tex.erb +6 -0
  280. data/templates/print/partials/bill_to_ship_to.tex.erb +13 -0
  281. data/templates/print/partials/header.tex.erb +13 -0
  282. data/templates/print/partials/invoice_paid_state.tex.erb +2 -0
  283. data/templates/print/partials/old/inv_lines_grouping.tex.erb +8 -0
  284. data/templates/print/partials/old/labor_lines_footer.tex.erb +18 -0
  285. data/templates/print/partials/skus_table.tex.erb +32 -0
  286. data/templates/print/partials/skus_table_col_hdr.tex.erb +8 -0
  287. data/templates/print/partials/skus_table_footer.tex.erb +5 -0
  288. data/templates/print/partials/skus_table_group_footer.tex.erb +4 -0
  289. data/templates/print/partials/skus_table_invoice_footer.tex.erb +25 -0
  290. data/templates/print/partials/skus_table_invoice_info_line.tex.erb +16 -0
  291. data/templates/print/partials/skus_table_labor_col_hdr.tex.erb +8 -0
  292. data/templates/print/partials/skus_table_labor_group_footer.tex.erb +7 -0
  293. data/templates/print/partials/skus_table_labor_line.tex.erb +11 -0
  294. data/templates/print/partials/skus_table_line.tex.erb +6 -0
  295. data/templates/print/partials/skus_table_other_charge_lines.tex.erb +7 -0
  296. data/templates/print/partials/so_info_line.tex.erb +14 -0
  297. data/templates/print/types/invoice/default.tex.erb +13 -0
  298. data/templates/print/types/invoice/labor.tex.erb +33 -0
  299. data/templates/print/types/payment/default.tex.erb +64 -0
  300. data/templates/print/types/sales-order/default.tex.erb +8 -0
  301. metadata +252 -15
  302. data/client/skr/components/address/address.html +0 -20
  303. data/client/skr/models/mixins/CodeField.coffee +0 -5
  304. data/client/skr/screens/customer-maint/index.scss +0 -11
  305. data/client/skr/screens/customer-maint/layout.html +0 -32
  306. data/client/skr/screens/sales-order/SalesOrder.coffee +0 -30
  307. data/client/skr/screens/sales-order/index.scss +0 -8
  308. data/client/skr/screens/sales-order/layout.html +0 -30
  309. data/client/skr/screens/sku-maint/SkuMaint.coffee +0 -18
  310. data/client/skr/screens/sku-maint/layout.html +0 -16
  311. data/client/skr/screens/vendor-maint/VendorMaint.coffee +0 -28
  312. data/client/skr/screens/vendor-maint/index.scss +0 -8
  313. data/client/skr/screens/vendor-maint/layout.html +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a414367906d22c62241eefcdd7dd7e1222f5f14
4
- data.tar.gz: 5c774edc4a5bebe21b462e00c815201a71bb8d8a
3
+ metadata.gz: d734100c2a781d64262d82c9d253abbdeb944441
4
+ data.tar.gz: bc35cfaaecd7fb4ada61cc37838c64bcb9e21d0c
5
5
  SHA512:
6
- metadata.gz: a3e8300d12e447cf2dc450ee1e62949926e797327a8210b92bb7fea109860d5dd76a60fc123f190186c20eed38cb21be252984d912949109821afb7b98e753c1
7
- data.tar.gz: 928f00055f0c0269c863169e08997c6501bc2b2f3fd4612eae934ffef4eed3361ef880f203f07250c65630a3991ed8eaa2cefa2243a2291a85a92ca83fc5bf35
6
+ metadata.gz: c33358eb4136bfdd0da75142a5d383a65324588653386c6593d99b29ef904959093475c6863b02a29afee54a8e86d72b6aa84399dd34c54eae491cb758f11c2e
7
+ data.tar.gz: 6c20dc9ca46b14e0d720c8bb0729322e4db866323c0459fd5cc36097425597c78ccc84d2a59d26d7d31ef9632a4aad33fe7ce9fabd5352cac788fa35617e49f3
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem "lanes", github: "argosity/lanes", branch: 'master'
4
+ gem "erb_latex", github: "nathanstitt/erb_latex", branch: 'master'
4
5
 
5
6
  gem "faker"
6
-
7
7
  gem 'puma'
8
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,88 +1,230 @@
1
1
  GIT
2
2
  remote: git://github.com/argosity/lanes.git
3
- revision: 208a0fafd5337b4299e2f123c97e8ddee6a19d32
3
+ revision: 8347b9f30227829d8c52eb100299b9e30a455e02
4
4
  branch: master
5
5
  specs:
6
- lanes (0.1.9.5)
6
+ lanes (0.3.0)
7
+ activejob (~> 4.2)
7
8
  activerecord (~> 4.2)
8
9
  bcrypt (~> 3.1)
9
- closure-compiler (~> 1.1)
10
+ carrierwave (~> 0.10.0)
10
11
  coffee-react (~> 3.0)
11
12
  coffee-script (~> 2.3)
12
13
  compass-import-once (~> 1.0)
13
14
  execjs (~> 2.2)
15
+ fastimage (~> 1.8.1)
16
+ fog (~> 1.37.0)
14
17
  guard (~> 2.0)
15
18
  guard-jasmine (~> 2.0)
16
19
  guard-minitest (~> 2.3)
17
20
  hashie (~> 3.3)
18
21
  jasmine-core (~> 2.0)
19
- message_bus (~> 1.0)
22
+ jobba (~> 1.4)
23
+ message_bus (= 2.0.0.beta.6)
24
+ mini_magick (~> 4.3.6)
20
25
  minitest-around (~> 0.2)
21
26
  mocha (~> 1.1)
22
27
  oj (~> 2.1)
23
28
  pg (~> 0.17)
29
+ rack-protection (~> 1.5)
24
30
  rack-test (~> 0.6)
25
- rack_csrf (~> 2.5)
26
31
  rake (~> 10.0)
27
32
  require_all (~> 1.3)
33
+ resque (~> 1.25)
28
34
  sanitize (~> 3.0)
29
35
  sass (~> 3.4)
30
36
  sinatra (~> 1.4)
31
- sprockets (~> 2.0)
32
- sprockets-helpers (~> 1.1)
37
+ sprockets (~> 3.0)
38
+ sprockets-helpers (~> 1.2)
33
39
  thor (~> 0.19)
34
- yui-compressor (~> 0.12)
40
+ uglifier (~> 2.7)
41
+
42
+ GIT
43
+ remote: git://github.com/nathanstitt/erb_latex.git
44
+ revision: 6d16aea21c99710be94445b610e3ba03485f9bc7
45
+ branch: master
46
+ specs:
47
+ erb_latex (0.3.0)
35
48
 
36
49
  PATH
37
50
  remote: .
38
51
  specs:
39
- stockor (0.1.9)
52
+ stockor (0.2)
40
53
  aasm (~> 4.1)
54
+ erb_latex (= 0.3)
41
55
  lanes
56
+ numbers_in_words (~> 0.4.0)
57
+ ruby-freshbooks
42
58
 
43
59
  GEM
44
60
  remote: https://rubygems.org/
45
61
  specs:
46
- aasm (4.2.0)
47
- activemodel (4.2.3)
48
- activesupport (= 4.2.3)
62
+ CFPropertyList (2.3.2)
63
+ aasm (4.10.0)
64
+ activejob (4.2.6)
65
+ activesupport (= 4.2.6)
66
+ globalid (>= 0.3.0)
67
+ activemodel (4.2.6)
68
+ activesupport (= 4.2.6)
49
69
  builder (~> 3.1)
50
- activerecord (4.2.3)
51
- activemodel (= 4.2.3)
52
- activesupport (= 4.2.3)
70
+ activerecord (4.2.6)
71
+ activemodel (= 4.2.6)
72
+ activesupport (= 4.2.6)
53
73
  arel (~> 6.0)
54
- activesupport (4.2.3)
74
+ activesupport (4.2.6)
55
75
  i18n (~> 0.7)
56
76
  json (~> 1.7, >= 1.7.7)
57
77
  minitest (~> 5.1)
58
78
  thread_safe (~> 0.3, >= 0.3.4)
59
79
  tzinfo (~> 1.1)
60
- arel (6.0.0)
61
- bcrypt (3.1.10)
80
+ addressable (2.4.0)
81
+ arel (6.0.3)
82
+ bcrypt (3.1.11)
62
83
  builder (3.2.2)
63
- byebug (4.0.5)
64
- columnize (= 0.9.0)
65
- childprocess (0.5.6)
84
+ byebug (8.2.2)
85
+ carrierwave (0.10.0)
86
+ activemodel (>= 3.2.0)
87
+ activesupport (>= 3.2.0)
88
+ json (>= 1.7)
89
+ mime-types (>= 1.16)
90
+ childprocess (0.5.9)
66
91
  ffi (~> 1.0, >= 1.0.11)
67
- closure-compiler (1.1.11)
68
- coderay (1.1.0)
69
- coffee-react (3.0.1)
92
+ coderay (1.1.1)
93
+ coffee-react (3.4.0)
70
94
  execjs
71
95
  coffee-script (2.4.1)
72
96
  coffee-script-source
73
97
  execjs
74
- coffee-script-source (1.9.1.1)
75
- columnize (0.9.0)
98
+ coffee-script-source (1.10.0)
76
99
  compass-import-once (1.0.5)
77
100
  sass (>= 3.2, < 3.5)
101
+ concurrent-ruby (1.0.1)
102
+ crack (0.4.3)
103
+ safe_yaml (~> 1.0.0)
78
104
  crass (1.0.2)
79
- execjs (2.5.2)
80
- faker (1.4.3)
105
+ excon (0.49.0)
106
+ execjs (2.6.0)
107
+ faker (1.6.3)
81
108
  i18n (~> 0.5)
109
+ fastimage (1.8.1)
110
+ addressable (~> 2.3, >= 2.3.5)
82
111
  ffi (1.9.10)
112
+ fission (0.5.0)
113
+ CFPropertyList (~> 2.2)
114
+ fog (1.37.0)
115
+ fog-aliyun (>= 0.1.0)
116
+ fog-atmos
117
+ fog-aws (>= 0.6.0)
118
+ fog-brightbox (~> 0.4)
119
+ fog-core (~> 1.32)
120
+ fog-dynect (~> 0.0.2)
121
+ fog-ecloud (~> 0.1)
122
+ fog-google (<= 0.1.0)
123
+ fog-json
124
+ fog-local
125
+ fog-powerdns (>= 0.1.1)
126
+ fog-profitbricks
127
+ fog-radosgw (>= 0.0.2)
128
+ fog-riakcs
129
+ fog-sakuracloud (>= 0.0.4)
130
+ fog-serverlove
131
+ fog-softlayer
132
+ fog-storm_on_demand
133
+ fog-terremark
134
+ fog-vmfusion
135
+ fog-voxel
136
+ fog-vsphere (>= 0.4.0)
137
+ fog-xenserver
138
+ fog-xml (~> 0.1.1)
139
+ ipaddress (~> 0.5)
140
+ fog-aliyun (0.1.0)
141
+ fog-core (~> 1.27)
142
+ fog-json (~> 1.0)
143
+ ipaddress (~> 0.8)
144
+ xml-simple (~> 1.1)
145
+ fog-atmos (0.1.0)
146
+ fog-core
147
+ fog-xml
148
+ fog-aws (0.9.2)
149
+ fog-core (~> 1.27)
150
+ fog-json (~> 1.0)
151
+ fog-xml (~> 0.1)
152
+ ipaddress (~> 0.8)
153
+ fog-brightbox (0.10.1)
154
+ fog-core (~> 1.22)
155
+ fog-json
156
+ inflecto (~> 0.0.2)
157
+ fog-core (1.37.0)
158
+ builder
159
+ excon (~> 0.45)
160
+ formatador (~> 0.2)
161
+ fog-dynect (0.0.3)
162
+ fog-core
163
+ fog-json
164
+ fog-xml
165
+ fog-ecloud (0.3.0)
166
+ fog-core
167
+ fog-xml
168
+ fog-google (0.1.0)
169
+ fog-core
170
+ fog-json
171
+ fog-xml
172
+ fog-json (1.0.2)
173
+ fog-core (~> 1.0)
174
+ multi_json (~> 1.10)
175
+ fog-local (0.3.0)
176
+ fog-core (~> 1.27)
177
+ fog-powerdns (0.1.1)
178
+ fog-core (~> 1.27)
179
+ fog-json (~> 1.0)
180
+ fog-xml (~> 0.1)
181
+ fog-profitbricks (0.0.5)
182
+ fog-core
183
+ fog-xml
184
+ nokogiri
185
+ fog-radosgw (0.0.5)
186
+ fog-core (>= 1.21.0)
187
+ fog-json
188
+ fog-xml (>= 0.0.1)
189
+ fog-riakcs (0.1.0)
190
+ fog-core
191
+ fog-json
192
+ fog-xml
193
+ fog-sakuracloud (1.7.5)
194
+ fog-core
195
+ fog-json
196
+ fog-serverlove (0.1.2)
197
+ fog-core
198
+ fog-json
199
+ fog-softlayer (1.1.0)
200
+ fog-core
201
+ fog-json
202
+ fog-storm_on_demand (0.1.1)
203
+ fog-core
204
+ fog-json
205
+ fog-terremark (0.1.0)
206
+ fog-core
207
+ fog-xml
208
+ fog-vmfusion (0.1.0)
209
+ fission
210
+ fog-core
211
+ fog-voxel (0.1.0)
212
+ fog-core
213
+ fog-xml
214
+ fog-vsphere (0.6.3)
215
+ fog-core
216
+ rbvmomi (~> 1.8)
217
+ fog-xenserver (0.2.3)
218
+ fog-core
219
+ fog-xml
220
+ fog-xml (0.1.2)
221
+ fog-core
222
+ nokogiri (~> 1.5, >= 1.5.11)
83
223
  formatador (0.2.5)
224
+ globalid (0.3.6)
225
+ activesupport (>= 4.1.0)
84
226
  growl (1.0.3)
85
- guard (2.12.8)
227
+ guard (2.13.0)
86
228
  formatador (>= 0.2.4)
87
229
  listen (>= 2.7, <= 4.0)
88
230
  lumberjack (~> 1.0)
@@ -103,95 +245,133 @@ GEM
103
245
  guard-minitest (2.4.4)
104
246
  guard-compat (~> 1.2)
105
247
  minitest (>= 3.0)
106
- hashie (3.4.2)
107
- hike (1.2.3)
248
+ hashdiff (0.3.0)
249
+ hashie (3.4.3)
250
+ httparty (0.13.7)
251
+ json (~> 1.8)
252
+ multi_xml (>= 0.5.2)
108
253
  i18n (0.7.0)
109
- jasmine (2.3.0)
110
- jasmine-core (~> 2.3)
254
+ inflecto (0.0.2)
255
+ ipaddress (0.8.3)
256
+ jasmine (2.4.0)
257
+ jasmine-core (~> 2.4)
111
258
  phantomjs
112
259
  rack (>= 1.2.1)
113
260
  rake
114
- jasmine-core (2.3.4)
261
+ jasmine-core (2.4.1)
262
+ jobba (1.4.0)
263
+ redis (~> 3.2)
264
+ redis-namespace
115
265
  json (1.8.3)
116
- listen (3.0.1)
266
+ listen (3.0.6)
117
267
  rb-fsevent (>= 0.9.3)
118
- rb-inotify (>= 0.9)
119
- lumberjack (1.0.9)
120
- message_bus (1.0.14)
268
+ rb-inotify (>= 0.9.7)
269
+ lumberjack (1.0.10)
270
+ message_bus (2.0.0.beta.6)
121
271
  rack (>= 1.1.3)
122
- redis
123
272
  metaclass (0.0.4)
124
273
  method_source (0.8.2)
125
- mini_portile (0.6.2)
126
- minitest (5.7.0)
127
- minitest-around (0.3.1)
274
+ mime-types (3.0)
275
+ mime-types-data (~> 3.2015)
276
+ mime-types-data (3.2016.0221)
277
+ mini_magick (4.3.6)
278
+ mini_portile2 (2.0.0)
279
+ minitest (5.8.4)
280
+ minitest-around (0.3.2)
128
281
  minitest (~> 5.0)
129
282
  mocha (1.1.0)
130
283
  metaclass (~> 0.0.1)
284
+ mono_logger (1.1.0)
131
285
  multi_json (1.11.2)
132
- nenv (0.2.0)
133
- nokogiri (1.6.6.2)
134
- mini_portile (~> 0.6.0)
286
+ multi_xml (0.5.5)
287
+ nenv (0.3.0)
288
+ nokogiri (1.6.7.2)
289
+ mini_portile2 (~> 2.0.0.rc2)
135
290
  nokogumbo (1.2.0)
136
291
  nokogiri
137
- notiffany (0.0.6)
292
+ notiffany (0.0.8)
138
293
  nenv (~> 0.1)
139
294
  shellany (~> 0.0)
140
- oj (2.12.9)
141
- pg (0.18.2)
142
- phantomjs (1.9.8.0)
143
- pry (0.10.1)
295
+ numbers_in_words (0.4.0)
296
+ activesupport
297
+ oj (2.15.0)
298
+ pg (0.18.4)
299
+ phantomjs (2.1.1.0)
300
+ pry (0.10.3)
144
301
  coderay (~> 1.1.0)
145
302
  method_source (~> 0.8.1)
146
303
  slop (~> 3.4)
147
- pry-byebug (3.1.0)
148
- byebug (~> 4.0)
304
+ pry-byebug (3.3.0)
305
+ byebug (~> 8.0)
149
306
  pry (~> 0.10)
150
- puma (2.11.3)
151
- rack (>= 1.1, < 2.0)
307
+ puma (3.2.0)
152
308
  rack (1.6.4)
153
309
  rack-protection (1.5.3)
154
310
  rack
155
311
  rack-test (0.6.3)
156
312
  rack (>= 1.0)
157
- rack_csrf (2.5.0)
158
- rack (>= 1.1.0)
159
- rake (10.4.2)
160
- rb-fsevent (0.9.5)
161
- rb-inotify (0.9.5)
313
+ rake (10.5.0)
314
+ rb-fsevent (0.9.7)
315
+ rb-inotify (0.9.7)
162
316
  ffi (>= 0.5.0)
163
- redis (3.2.1)
164
- require_all (1.3.2)
317
+ rbvmomi (1.8.2)
318
+ builder
319
+ nokogiri (>= 1.4.1)
320
+ trollop
321
+ redis (3.2.2)
322
+ redis-namespace (1.5.2)
323
+ redis (~> 3.0, >= 3.0.4)
324
+ require_all (1.3.3)
325
+ resque (1.26.0)
326
+ mono_logger (~> 1.0)
327
+ multi_json (~> 1.0)
328
+ redis-namespace (~> 1.3)
329
+ sinatra (>= 0.9.2)
330
+ vegas (~> 0.1.2)
331
+ ruby-freshbooks (0.4.1)
332
+ builder (>= 2.1.2)
333
+ httparty (>= 0.5.0)
334
+ safe_yaml (1.0.4)
165
335
  sanitize (3.1.2)
166
336
  crass (~> 1.0.1)
167
337
  nokogiri (>= 1.4.4)
168
338
  nokogumbo (= 1.2.0)
169
- sass (3.4.15)
339
+ sass (3.4.22)
170
340
  shellany (0.0.1)
171
- sinatra (1.4.6)
172
- rack (~> 1.4)
341
+ sinatra (1.4.7)
342
+ rack (~> 1.5)
173
343
  rack-protection (~> 1.4)
174
344
  tilt (>= 1.3, < 3)
175
345
  slop (3.6.0)
176
- sprockets (2.12.4)
177
- hike (~> 1.2)
178
- multi_json (~> 1.0)
179
- rack (~> 1.0)
180
- tilt (~> 1.1, != 1.3.0)
346
+ sprockets (3.5.2)
347
+ concurrent-ruby (~> 1.0)
348
+ rack (> 1, < 3)
181
349
  sprockets-helpers (1.2.1)
182
350
  sprockets (>= 2.2)
183
351
  thor (0.19.1)
184
352
  thread_safe (0.3.5)
185
- tilt (1.4.1)
353
+ tilt (2.0.2)
354
+ trollop (2.1.2)
186
355
  tzinfo (1.2.2)
187
356
  thread_safe (~> 0.1)
188
- yui-compressor (0.12.0)
357
+ uglifier (2.7.2)
358
+ execjs (>= 0.3.0)
359
+ json (>= 1.8.0)
360
+ vcr (3.0.1)
361
+ vegas (0.1.11)
362
+ rack (>= 1.0.0)
363
+ webmock (1.24.2)
364
+ addressable (>= 2.3.6)
365
+ crack (>= 0.3.2)
366
+ hashdiff
367
+ xml-simple (1.1.5)
189
368
 
190
369
  PLATFORMS
191
370
  ruby
192
371
 
193
372
  DEPENDENCIES
194
373
  bundler (~> 1.5)
374
+ erb_latex!
195
375
  faker
196
376
  growl
197
377
  guard
@@ -201,6 +381,8 @@ DEPENDENCIES
201
381
  puma
202
382
  rake
203
383
  stockor!
384
+ vcr (~> 3.0)
385
+ webmock (~> 1.22)
204
386
 
205
387
  BUNDLED WITH
206
- 1.10.5
388
+ 1.11.2
data/Guardfile CHANGED
@@ -7,7 +7,7 @@ Lanes::GuardTasks.run(self, name: "skr") do | tests |
7
7
  end
8
8
 
9
9
  tests.server do
10
-
10
+ watch(%r{^templates/print/*}) { "spec/server/print/form_spec.rb" }
11
11
  end
12
12
 
13
13
  end
data/README.md CHANGED
@@ -1,7 +1,28 @@
1
1
  # Stockor
2
2
 
3
- #### Stockor is a ERP system that contains all the tools you'll need to run a small to medium sized business on the internet.
3
+ ## A business management system for freelancers, contractors and small business owners.
4
4
 
5
- It's an extract of the back-end API from stockor.com, and a rewrite of the user interface to focus on responsive design.
5
+ ### Features
6
6
 
7
- A technology demo with a few screens is available at [next-gen.stockor.com](http://next-gen.stockor.com)
7
+ * Per Project/Customer Time Tracking
8
+ * Sales Orders and Invoicing
9
+ * Customers and Vendors
10
+ * Completely web-based, user interface is React / Bootstrap
11
+ * Mobile friendly, screens are responsive
12
+ * Chart of Accounts and double-entry General Ledger.
13
+ * Real-time updates for multi-user access
14
+ * Released under the open-source AGPL3 license
15
+
16
+
17
+ ### Demo
18
+ A demo that shows off portions of the interface is available at [demo.stockor.com](http://demo.stockor.com/). The demo is set to randomly create updates for the `STOCKOR` customer and vendor. If you load one of those records you should be able to observe the updates occur.
19
+
20
+ ### Tech stack
21
+
22
+ Stockor's server-side component is written in Ruby on top of the Sinatra derived [Lanes framework](https://github.com/argosity/lanes). It borrows several familiar libraries from Rails such as ActiveRecord and Sprockets.
23
+
24
+ The web interface is React and Bootstrap. There's a bit of light customization on the class creation to seamlessly support a custom data layer that's built off of [ampersand state](https://github.com/AmpersandJS/ampersand-state).
25
+
26
+ ### Contributing and bug reports
27
+
28
+ Are welcome ;-) Typical github flow - file a issue or pull request. If you'd like to chat about anything Stockor related feel free to drop us a line at contact@argosity.com
data/app.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "Stockor",
3
+ "description": "Stockor is a business management system.",
4
+ "keywords": [
5
+ "invoice",
6
+ "erp",
7
+ "productivity"
8
+ ],
9
+ "website": "http://stockor.org/",
10
+ "repository": "https://github.com/argosity/stockor",
11
+ "logo": "http://stockor.org/images/logo.png",
12
+ "success_url": "/",
13
+ "scripts": {
14
+ "postdeploy": "bundle exec lanes db migrate && bundle exec lanes db seed"
15
+ },
16
+ "env": {},
17
+ "image": "heroku/ruby",
18
+ "addons": [
19
+ "heroku-redis"
20
+ ],
21
+ "buildpacks": [
22
+ {
23
+ "url": "git://github.com/syphar/heroku-buildpack-tex.git"
24
+ }, {
25
+ "url": "git://github.com/heroku/heroku-buildpack-ruby.git"
26
+ }
27
+ ]
28
+ }
@@ -5,10 +5,28 @@ class Skr.Extension extends Lanes.Extensions.Base
5
5
  # Data that is provided by lib/skr/extension.rb's
6
6
  # client_bootstrap_data method ends up here
7
7
  setBootstrapData: (data) ->
8
+ Lanes.Models.Query.LIKE_QUERY_TYPES.push 'visible_id'
8
9
  Skr.Models.GlAccount.initialize(
9
10
  accounts: data.gl_accounts
10
11
  default_ids: data.default_gl_account_ids,
11
12
  )
13
+ Skr.Models.Location.initialize(
14
+ locations: data.locations
15
+ )
16
+ Skr.Models.PaymentTerm.initialize(
17
+ payment_terms: data.payment_terms
18
+ )
19
+ for type, choices of data.templates
20
+ klass = Skr.Models[_.classify(type)]
21
+ if klass
22
+ klass.Templates = choices
23
+ else
24
+ console.log "Unable to find model for #{type}"
12
25
 
13
26
  rootComponent: (viewport) ->
14
27
  Lanes.Workspace.Layout
28
+
29
+ preferenceElement: (props) ->
30
+ React.createElement(SC.UserPreferences, key: 'skr')
31
+ settingsElement: (props) ->
32
+ React.createElement(SC.SystemSettings, key: 'skr')
@@ -0,0 +1,34 @@
1
+ class Skr.Components.BankAccountFinder extends Lanes.React.Component
2
+
3
+ propTypes:
4
+ model: Lanes.PropTypes.Model
5
+ commands: React.PropTypes.object
6
+ autoFocus: React.PropTypes.bool
7
+ name: React.PropTypes.string
8
+ selectField: React.PropTypes.bool
9
+
10
+ getDefaultProps: ->
11
+ autoFocus: false, label: 'Bank Account', name: 'code'
12
+
13
+ dataObjects:
14
+ query: ->
15
+ new Lanes.Models.Query({
16
+ syncOptions: @props.syncOptions, autoRetrieve: true
17
+ src: Skr.Models.BankAccount, fields: [
18
+ {id:'id', visible: false}
19
+ {id: 'code', fixedWidth: 130 },
20
+ {id: 'name', flex: 1}
21
+ {id: 'description', flex: 1.5}
22
+ ]
23
+ })
24
+
25
+ render: ->
26
+ props = _.clone(@props)
27
+
28
+ if props.selectField
29
+ <LC.SelectField queryModel={Skr.Models.BankAccount} sm=2 {...props} />
30
+ else
31
+ <LC.RecordFinder ref="finder" sm=3 autoFocus
32
+ commands={@props.commands}
33
+ query={@query}
34
+ {...props} />
@@ -0,0 +1,19 @@
1
+ class Skr.Components.Currency extends Lanes.React.Component
2
+
3
+ getDefaultProps: ->
4
+ amount: _.bigDecimal('0.0')
5
+ symbol: '$'
6
+
7
+ propTypes:
8
+ amount: React.PropTypes.oneOfType([
9
+ React.PropTypes.number,
10
+ React.PropTypes.instanceOf(_.bigDecimal)
11
+ ])
12
+ symbol: React.PropTypes.string
13
+
14
+ render: ->
15
+ className = _.classnames 'currency', @props.className
16
+ <span {...@props} className={className}>
17
+ <span className="sym">{@props.symbol}</span>
18
+ {Lanes.u.format.currency(@props.amount)}
19
+ </span>
@@ -0,0 +1,37 @@
1
+ class Skr.Components.CustomerFinder extends Lanes.React.Component
2
+
3
+ propTypes:
4
+ model: Lanes.PropTypes.Model.isRequired
5
+ commands: React.PropTypes.object
6
+ autoFocus: React.PropTypes.bool
7
+ name: React.PropTypes.string
8
+ selectField: React.PropTypes.bool
9
+
10
+ getDefaultProps: ->
11
+ autoFocus: false, label: 'Customer Code', name: 'customer'
12
+
13
+ dataObjects:
14
+ query: ->
15
+ new Lanes.Models.Query({
16
+ syncOptions: @props.syncOptions, autoRetrieve: true
17
+ src: Skr.Models.Customer, fields: [
18
+ {id:'id', visible: false}
19
+ { id: 'code', fixedWidth: 130 }, 'name', 'notes',
20
+ { id: 'open_balance', fixedWidth: 100, textAlign: 'right', format: (v) ->
21
+ if v then _.bigDecimal(v).toFixed(2) else '0.00'
22
+ }
23
+ ]
24
+ })
25
+
26
+ render: ->
27
+ props = _.clone(@props)
28
+ if @model.hasAttribute('customer_code')
29
+ props.defaultLabel = @model.customer_code
30
+
31
+ if props.selectField
32
+ <LC.SelectField sm=2 labelField="code" {...props} />
33
+ else
34
+ <LC.RecordFinder ref="finder" sm=3 autoFocus
35
+ commands={@props.commands}
36
+ query={@query}
37
+ {...props} />
@@ -0,0 +1,13 @@
1
+ class Skr.Components.CustomerLink extends Lanes.React.Component
2
+ propTypes:
3
+ onClick: React.PropTypes.func
4
+ customer: React.PropTypes.instanceOf(Skr.Models.Customer)
5
+
6
+ onClick: ->
7
+ @props.onClick?()
8
+ @props.customer.withAssociations(['billing_address', 'shipping_address']).then =>
9
+ Lanes.Screens.Definitions.all.get('customer-maint')
10
+ .display(props: {customer: @props.customer})
11
+
12
+ render: ->
13
+ <a href='#' onClick={@onClick}>{@props.customer.code}</a>