stockor-core 0.2

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 (221) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +6 -0
  4. data/Guardfile +13 -0
  5. data/LICENSE.txt +674 -0
  6. data/README.md +88 -0
  7. data/Rakefile +58 -0
  8. data/config/database.yml +9 -0
  9. data/db/migrate/20120110142845_create_skr_sequential_ids.rb +35 -0
  10. data/db/migrate/20140202185309_create_skr_gl_accounts.rb +15 -0
  11. data/db/migrate/20140202193316_create_skr_gl_periods.rb +16 -0
  12. data/db/migrate/20140202193318_create_skr_gl_transactions.rb +14 -0
  13. data/db/migrate/20140202193319_create_skr_gl_postings.rb +16 -0
  14. data/db/migrate/20140202193700_create_skr_gl_manual_entries.rb +13 -0
  15. data/db/migrate/20140213040608_create_skr_payment_terms.rb +16 -0
  16. data/db/migrate/20140220031700_create_skr_addresses.rb +19 -0
  17. data/db/migrate/20140220031800_create_skr_locations.rb +19 -0
  18. data/db/migrate/20140220190836_create_skr_vendors.rb +22 -0
  19. data/db/migrate/20140220203029_create_skr_customers.rb +22 -0
  20. data/db/migrate/20140224034759_create_skr_skus.rb +22 -0
  21. data/db/migrate/20140225032853_create_skr_sku_locs.rb +21 -0
  22. data/db/migrate/20140320030501_create_skr_uoms.rb +19 -0
  23. data/db/migrate/20140321031604_create_skr_sku_vendors.rb +18 -0
  24. data/db/migrate/20140322012143_create_skr_ia_reasons.rb +14 -0
  25. data/db/migrate/20140322014401_create_skr_inventory_adjustments.rb +16 -0
  26. data/db/migrate/20140322023453_create_skr_ia_lines.rb +18 -0
  27. data/db/migrate/20140322035024_create_skr_sku_trans.rb +21 -0
  28. data/db/migrate/20140322223912_create_skr_sales_orders.rb +27 -0
  29. data/db/migrate/20140322223920_create_skr_so_lines.rb +25 -0
  30. data/db/migrate/20140323001446_create_so_details_view.rb +81 -0
  31. data/db/migrate/20140327202102_create_skr_purchase_orders.rb +20 -0
  32. data/db/migrate/20140327202107_create_skr_po_lines.rb +25 -0
  33. data/db/migrate/20140327202207_create_skr_pick_tickets.rb +16 -0
  34. data/db/migrate/20140327202209_create_skr_pt_lines.rb +23 -0
  35. data/db/migrate/20140327224000_create_skr_invoices.rb +25 -0
  36. data/db/migrate/20140327224002_create_skr_inv_lines.rb +23 -0
  37. data/db/migrate/20140330232808_create_skr_sku_loc_details_view.rb +31 -0
  38. data/db/migrate/20140330232810_create_skr_sku_qty_details_view.rb +48 -0
  39. data/db/migrate/20140400164729_create_skr_vouchers.rb +22 -0
  40. data/db/migrate/20140400164733_create_skr_vo_lines.rb +21 -0
  41. data/db/migrate/20140401164729_create_skr_po_receipt.rb +16 -0
  42. data/db/migrate/20140401164740_create_skr_por_line.rb +21 -0
  43. data/db/migrate/20140422024010_create_skr_inv_details_view.rb +42 -0
  44. data/lib/generators/stockor/migrations/install_generator.rb +42 -0
  45. data/lib/skr/address.rb +97 -0
  46. data/lib/skr/business_entity.rb +25 -0
  47. data/lib/skr/concerns/acts_as_uom.rb +47 -0
  48. data/lib/skr/concerns/all.rb +30 -0
  49. data/lib/skr/concerns/association_extensions.rb +85 -0
  50. data/lib/skr/concerns/attr_accessor_with_default.rb +54 -0
  51. data/lib/skr/concerns/code_identifier.rb +43 -0
  52. data/lib/skr/concerns/export_associations.rb +52 -0
  53. data/lib/skr/concerns/export_join_tables.rb +39 -0
  54. data/lib/skr/concerns/export_methods.rb +104 -0
  55. data/lib/skr/concerns/export_scope.rb +66 -0
  56. data/lib/skr/concerns/exported_limit_evaluator.rb +17 -0
  57. data/lib/skr/concerns/gl_tran_extensions.rb +18 -0
  58. data/lib/skr/concerns/has_gl_transaction.rb +67 -0
  59. data/lib/skr/concerns/has_sku_loc_lines.rb +47 -0
  60. data/lib/skr/concerns/immutable_model.rb +32 -0
  61. data/lib/skr/concerns/inv_extensions.rb +24 -0
  62. data/lib/skr/concerns/is_order_like.rb +47 -0
  63. data/lib/skr/concerns/is_sku_loc_line.rb +65 -0
  64. data/lib/skr/concerns/json_attribute_access.rb +55 -0
  65. data/lib/skr/concerns/locked_fields.rb +84 -0
  66. data/lib/skr/concerns/pt_extensions.rb +22 -0
  67. data/lib/skr/concerns/pub_sub.rb +105 -0
  68. data/lib/skr/concerns/queries.rb +20 -0
  69. data/lib/skr/concerns/random_hash_code.rb +40 -0
  70. data/lib/skr/concerns/sanitize_json.rb +49 -0
  71. data/lib/skr/concerns/sku_extensions.rb +52 -0
  72. data/lib/skr/concerns/so_extensions.rb +30 -0
  73. data/lib/skr/concerns/state_machine.rb +62 -0
  74. data/lib/skr/concerns/track_modifications.rb +48 -0
  75. data/lib/skr/concerns/visible_id_identifier.rb +53 -0
  76. data/lib/skr/core.rb +30 -0
  77. data/lib/skr/core/configuration.rb +87 -0
  78. data/lib/skr/core/db.rb +82 -0
  79. data/lib/skr/core/db/migration_helpers.rb +178 -0
  80. data/lib/skr/core/db/migrations.rb +15 -0
  81. data/lib/skr/core/db/seed.rb +46 -0
  82. data/lib/skr/core/db/seed/chart_of_accounts.yml +168 -0
  83. data/lib/skr/core/db/seed/payment_terms.yml +60 -0
  84. data/lib/skr/core/logger.rb +36 -0
  85. data/lib/skr/core/numbers.rb +71 -0
  86. data/lib/skr/core/rails_engine.rb +5 -0
  87. data/lib/skr/core/standard_pricing_provider.rb +15 -0
  88. data/lib/skr/core/strings.rb +57 -0
  89. data/lib/skr/core/testing.rb +11 -0
  90. data/lib/skr/core/testing/assertions.rb +44 -0
  91. data/lib/skr/core/testing/fixtures.rb +25 -0
  92. data/lib/skr/core/testing/fixtures/skr/addresses.yml +53 -0
  93. data/lib/skr/core/testing/fixtures/skr/customers.yml +43 -0
  94. data/lib/skr/core/testing/fixtures/skr/gl_accounts.yml +86 -0
  95. data/lib/skr/core/testing/fixtures/skr/gl_manual_entries.yml +4 -0
  96. data/lib/skr/core/testing/fixtures/skr/gl_periods.yml +26 -0
  97. data/lib/skr/core/testing/fixtures/skr/gl_postings.yml +88 -0
  98. data/lib/skr/core/testing/fixtures/skr/gl_transactions.yml +35 -0
  99. data/lib/skr/core/testing/fixtures/skr/ia_lines.yml +7 -0
  100. data/lib/skr/core/testing/fixtures/skr/ia_reasons.yml +15 -0
  101. data/lib/skr/core/testing/fixtures/skr/inv_lines.yml +22 -0
  102. data/lib/skr/core/testing/fixtures/skr/inventory_adjustments.yml +6 -0
  103. data/lib/skr/core/testing/fixtures/skr/invoices.yml +10 -0
  104. data/lib/skr/core/testing/fixtures/skr/locations.yml +24 -0
  105. data/lib/skr/core/testing/fixtures/skr/payment_terms.yml +42 -0
  106. data/lib/skr/core/testing/fixtures/skr/pick_tickets.yml +4 -0
  107. data/lib/skr/core/testing/fixtures/skr/po_lines.yml +44 -0
  108. data/lib/skr/core/testing/fixtures/skr/po_receipts.yml +5 -0
  109. data/lib/skr/core/testing/fixtures/skr/por_lines.yml +13 -0
  110. data/lib/skr/core/testing/fixtures/skr/pt_lines.yml +12 -0
  111. data/lib/skr/core/testing/fixtures/skr/purchase_orders.yml +16 -0
  112. data/lib/skr/core/testing/fixtures/skr/sales_orders.yml +32 -0
  113. data/lib/skr/core/testing/fixtures/skr/sku_locs.yml +78 -0
  114. data/lib/skr/core/testing/fixtures/skr/sku_trans.yml +9 -0
  115. data/lib/skr/core/testing/fixtures/skr/sku_vendors.yml +35 -0
  116. data/lib/skr/core/testing/fixtures/skr/skus.yml +50 -0
  117. data/lib/skr/core/testing/fixtures/skr/so_lines.yml +71 -0
  118. data/lib/skr/core/testing/fixtures/skr/uoms.yml +61 -0
  119. data/lib/skr/core/testing/fixtures/skr/vendors.yml +48 -0
  120. data/lib/skr/core/testing/fixtures/skr/vo_lines.yml +12 -0
  121. data/lib/skr/core/testing/fixtures/skr/vouchers.yml +8 -0
  122. data/lib/skr/core/testing/helper.rb +18 -0
  123. data/lib/skr/core/testing/test_case.rb +17 -0
  124. data/lib/skr/core/version.rb +5 -0
  125. data/lib/skr/customer.rb +34 -0
  126. data/lib/skr/gl_account.rb +56 -0
  127. data/lib/skr/gl_manual_entry.rb +31 -0
  128. data/lib/skr/gl_period.rb +13 -0
  129. data/lib/skr/gl_posting.rb +54 -0
  130. data/lib/skr/gl_transaction.rb +174 -0
  131. data/lib/skr/ia_line.rb +129 -0
  132. data/lib/skr/ia_reason.rb +16 -0
  133. data/lib/skr/inv_line.rb +90 -0
  134. data/lib/skr/inventory_adjustment.rb +60 -0
  135. data/lib/skr/invoice.rb +159 -0
  136. data/lib/skr/location.rb +31 -0
  137. data/lib/skr/model.rb +37 -0
  138. data/lib/skr/null_user.rb +30 -0
  139. data/lib/skr/payment_term.rb +30 -0
  140. data/lib/skr/pick_ticket.rb +71 -0
  141. data/lib/skr/po_line.rb +69 -0
  142. data/lib/skr/po_receipt.rb +51 -0
  143. data/lib/skr/por_line.rb +80 -0
  144. data/lib/skr/pt_line.rb +74 -0
  145. data/lib/skr/purchase_order.rb +112 -0
  146. data/lib/skr/sales_order.rb +159 -0
  147. data/lib/skr/sequential_id.rb +23 -0
  148. data/lib/skr/sku.rb +99 -0
  149. data/lib/skr/sku_loc.rb +94 -0
  150. data/lib/skr/sku_tran.rb +111 -0
  151. data/lib/skr/sku_vendor.rb +26 -0
  152. data/lib/skr/so_line.rb +159 -0
  153. data/lib/skr/uom.rb +63 -0
  154. data/lib/skr/user_proxy.rb +60 -0
  155. data/lib/skr/validators/all.rb +2 -0
  156. data/lib/skr/validators/email.rb +17 -0
  157. data/lib/skr/validators/set.rb +18 -0
  158. data/lib/skr/vendor.rb +33 -0
  159. data/lib/skr/vo_line.rb +35 -0
  160. data/lib/skr/voucher.rb +119 -0
  161. data/lib/stockor/core.rb +9 -0
  162. data/stockor-core.gemspec +37 -0
  163. data/tasks/migrations.rake +23 -0
  164. data/tasks/publish.rake +8 -0
  165. data/test/address_test.rb +57 -0
  166. data/test/concerns/attr_with_default_test.rb +45 -0
  167. data/test/concerns/code_identifier_test.rb +46 -0
  168. data/test/concerns/export_associations_test.rb +7 -0
  169. data/test/concerns/export_methods_test.rb +31 -0
  170. data/test/concerns/export_scope_test.rb +16 -0
  171. data/test/concerns/exported_limits_test.rb +47 -0
  172. data/test/concerns/json_attribute_access_test.rb +27 -0
  173. data/test/concerns/pub_sub_test.rb +83 -0
  174. data/test/concerns/sanitize_json_test.rb +47 -0
  175. data/test/core/configuration_test.rb +24 -0
  176. data/test/core/numbers_test.rb +26 -0
  177. data/test/core/strings_test.rb +41 -0
  178. data/test/customer_test.rb +34 -0
  179. data/test/gl_account_test.rb +23 -0
  180. data/test/gl_manual_entry_test.rb +17 -0
  181. data/test/gl_period_test.rb +12 -0
  182. data/test/gl_posting_test.rb +39 -0
  183. data/test/gl_transaction_test.rb +58 -0
  184. data/test/ia_line_test.rb +68 -0
  185. data/test/ia_reason_test.rb +11 -0
  186. data/test/inv_line_test.rb +58 -0
  187. data/test/inventory_adjustment_test.rb +72 -0
  188. data/test/invoice_test.rb +63 -0
  189. data/test/location_test.rb +10 -0
  190. data/test/payment_term_test.rb +25 -0
  191. data/test/pick_ticket_test.rb +27 -0
  192. data/test/po_line_test.rb +36 -0
  193. data/test/po_receipt_test.rb +93 -0
  194. data/test/por_line_test.rb +79 -0
  195. data/test/pt_line_test.rb +29 -0
  196. data/test/purchase_order_test.rb +44 -0
  197. data/test/sales_order_test.rb +74 -0
  198. data/test/sku_loc_test.rb +50 -0
  199. data/test/sku_test.rb +45 -0
  200. data/test/sku_tran_test.rb +21 -0
  201. data/test/sku_vendor_test.rb +13 -0
  202. data/test/so_line_test.rb +89 -0
  203. data/test/test_helper.rb +1 -0
  204. data/test/uom_test.rb +14 -0
  205. data/test/vendor_test.rb +35 -0
  206. data/test/vo_line_test.rb +20 -0
  207. data/test/voucher_test.rb +35 -0
  208. data/yard_ext/all.rb +9 -0
  209. data/yard_ext/code_identifier_handler.rb +33 -0
  210. data/yard_ext/concern_meta_methods.rb +60 -0
  211. data/yard_ext/config_options.rb +27 -0
  212. data/yard_ext/exported_scope.rb +4 -0
  213. data/yard_ext/immutable_handler.rb +17 -0
  214. data/yard_ext/json_attr_accessor.rb +22 -0
  215. data/yard_ext/locked_fields_handler.rb +21 -0
  216. data/yard_ext/templates/default/layout/html/layout.erb +20 -0
  217. data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
  218. data/yard_ext/templates/default/method_details/setup.rb +3 -0
  219. data/yard_ext/validators.rb +1 -0
  220. data/yard_ext/visible_id_handler.rb +38 -0
  221. metadata +448 -0
@@ -0,0 +1,82 @@
1
+ require_relative 'db/seed'
2
+
3
+ module Skr
4
+ module Core
5
+ module DB
6
+ extend self
7
+
8
+ attr_accessor(:config_file)
9
+
10
+ def establish_connection( env = ENV['RAILS_ENV'] || 'development')
11
+ file = config_file || 'config/database.yml'
12
+ config = YAML::load( IO.read( file ) )
13
+ ::ActiveRecord::Base.configurations = config
14
+ self.connect( ::ActiveRecord::Base.configurations[ env ] )
15
+ end
16
+
17
+ def connect( configuration )
18
+ ::ActiveRecord::Base.establish_connection( configuration )
19
+ end
20
+
21
+ def migration_exists?( file_name ) #:nodoc:
22
+ Dir.glob("#{migrations_dir}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first
23
+ end
24
+
25
+ def configure_rake_environment
26
+ ActiveRecord::Tasks::DatabaseTasks.seed_loader = Skr::Core::DB
27
+ env = ENV['RAILS_ENV'] || 'development'
28
+ Skr::Core::DB.config_file ||= 'config/database.yml'
29
+ ENV['SCHEMA'] ||= 'db/schema.sql'
30
+ ENV['DB_STRUCTURE'] ||= 'db/schema.sql'
31
+ ActiveRecord::Base.schema_format = :sql
32
+ Skr::Core::DB.establish_connection( env )
33
+ ActiveRecord::Tasks::DatabaseTasks.database_configuration = ActiveRecord::Base.configurations
34
+ ActiveRecord::Tasks::DatabaseTasks.env = 'test'
35
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = 'db/migrate'
36
+ ActiveRecord::Tasks::DatabaseTasks.current_config( :config => ActiveRecord::Base.configurations[ env ] )
37
+ end
38
+
39
+ def create_migration( migration_name )
40
+ STDERR.puts "Migration #{migration_name} already exists!" and return false if migration_exists?( migration_name )
41
+ migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S")
42
+ migration_file = File.join(migrations_dir, "#{migration_number}_#{migration_name}.rb")
43
+ migration_class = migration_name.split("_").map(&:capitalize).join
44
+ File.open(migration_file, 'w') do |file|
45
+ file.write <<-MIGRATION.strip_heredoc
46
+ class #{migration_class} < ActiveRecord::Migration
47
+ def change
48
+ end
49
+ end
50
+ MIGRATION
51
+ end
52
+ end
53
+
54
+ def migrate(version = nil)
55
+ silence_activerecord do
56
+ migration_version = version ? version.to_i : version
57
+ ::ActiveRecord::Migrator.migrate( migrations_dir, migration_version )
58
+ end
59
+ end
60
+
61
+ def rollback(step = nil)
62
+ silence_activerecord do
63
+ migration_step = step ? step.to_i : 1
64
+ ::ActiveRecord::Migrator.rollback(migrations_dir, migration_step)
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def migrations_dir
71
+ ::ActiveRecord::Migrator.migrations_paths.first
72
+ end
73
+
74
+ def silence_activerecord(&block)
75
+ old_logger = ::ActiveRecord::Base.logger
76
+ ::ActiveRecord::Base.logger = nil
77
+ yield if block_given?
78
+ ::ActiveRecord::Base.logger = old_logger
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,178 @@
1
+ require 'skr/core/configuration'
2
+
3
+ module Skr
4
+ module Core
5
+ module DB
6
+
7
+ module TableFields
8
+
9
+ def skr_code_identifier
10
+ column( :code, :string, :null=>false )
11
+ skr_extra_indexes['code'] = {}
12
+ end
13
+
14
+ def skr_visible_id
15
+ column( :visible_id, :integer, :null=>false )
16
+ skr_extra_indexes['visible_id'] = {
17
+ function: 'CAST(visible_id AS VARCHAR)'
18
+ }
19
+ end
20
+
21
+ # track modifications
22
+ def skr_track_modifications( create_only: false )
23
+ column( :created_at, :datetime, :null=>false )
24
+ column( :created_by_id, :integer, :null=>false )
25
+ unless create_only
26
+ column( :updated_at, :datetime, :null=>false )
27
+ column( :updated_by_id, :integer, :null=>false )
28
+ end
29
+ end
30
+
31
+ def skr_currency( names, options )
32
+ options[ :precision ] ||= 15
33
+ options[ :scale ] ||= 2
34
+ column( names, :decimal, options )
35
+ end
36
+
37
+ # An skr_reference combines a belongs_to / has_one column
38
+ # with a postgresql foreign key reference.
39
+ def skr_reference( to_table, *args )
40
+ options = args.extract_options!
41
+
42
+ options[:column] ||= to_table.to_s + '_id'
43
+
44
+ column( options[:column], :integer, :null=>options[:null] || false )
45
+ to_table = options[:to_table] if options.has_key? :to_table
46
+
47
+ if options[:single]
48
+ to_table = to_table.to_s.pluralize
49
+ end
50
+ skr_foreign_keys[ to_table.to_sym ] = options
51
+ end
52
+
53
+ def skr_foreign_keys
54
+ @skr_foreign_keys ||= {}
55
+ end
56
+
57
+ def skr_extra_indexes
58
+ @skr_extra_indexs ||= {}
59
+ end
60
+ end
61
+
62
+ module MigrationMethods
63
+
64
+ def create_skr_table(table_name, *args, &block)
65
+ definition = nil
66
+ create_table( Skr::Core.config.table_prefix + table_name, *args ) do | td |
67
+ # Thanks for the trick from the Foreigner gem!
68
+ # in connection_adapters/abstract/schema_statements
69
+ definition = td
70
+ block.call(td) unless block.nil?
71
+ end
72
+ definition.skr_foreign_keys.each do |to_table, options |
73
+ skr_add_foreign_key( table_name, to_table, options )
74
+ end
75
+ definition.skr_extra_indexes.each do | index_column, options |
76
+ skr_add_index( table_name, index_column, options )
77
+ end
78
+ end
79
+
80
+ def skr_add_index( table_name, columns, options={} )
81
+ table_name = Skr::Core.config.table_prefix + table_name.to_s
82
+ if options[:function]
83
+ unique = options[:unique] ? 'unique' : ''
84
+ name = table_name + 'indx_' + columns
85
+ execute( "create #{unique} index #{name} on #{table_name}(#{options[:function]})" )
86
+ else
87
+ add_index( table_name, columns, options )
88
+ end
89
+ end
90
+
91
+ def skr_add_foreign_key( table_name, to_table, options = {} )
92
+ from_table = Skr::Core.config.table_prefix + table_name.to_s
93
+ to_table = Skr::Core.config.table_prefix + to_table.to_s
94
+ # table_name #from_table = Skr::Core.config.table_prefix + table_name
95
+ column = options[:column] || "#{to_table.to_s.singularize}_id"
96
+ foreign_key_name = options.key?(:name) ? options[:name].to_s : "#{from_table}_#{column}_fk"
97
+
98
+ primary_key = options[:primary_key] || "id"
99
+ dependency = case options[:dependent]
100
+ when :nullify then "ON DELETE SET NULL"
101
+ when :delete then "ON DELETE CASCADE"
102
+ when :restrict then "ON DELETE RESTRICT"
103
+ else ""
104
+ end
105
+ sql = "ALTER TABLE #{quote_table_name(from_table)} " +
106
+ "ADD CONSTRAINT #{quote_column_name(foreign_key_name)} " +
107
+ "FOREIGN KEY (#{quote_column_name(column)}) " +
108
+ "REFERENCES #{quote_table_name( to_table )}(#{primary_key})"
109
+ sql << " #{dependency}" if dependency.present?
110
+ sql << " #{options[:options]}" if options[:options]
111
+
112
+ execute(sql)
113
+ end
114
+
115
+ def drop_skr_table( table_name, *args )
116
+ drop_table( Skr::Core.config.table_prefix + table_name )
117
+ end
118
+
119
+ def remove_skr_index( table_name, column )
120
+ remove_index( Skr::Core.config.table_prefix + table_name, column )
121
+ end
122
+
123
+ end
124
+
125
+ module CommandRecorder
126
+ def create_skr_table(*args)
127
+ record(:create_skr_table, args)
128
+ end
129
+
130
+ def drop_skr_table(*args)
131
+ record(:drop_skr_table, args)
132
+ end
133
+
134
+ def invert_create_skr_table(args)
135
+ from_table, to_table, add_options = *args
136
+ add_options ||= {}
137
+ if add_options[:name]
138
+ options = {name: add_options[:name]}
139
+ elsif add_options[:column]
140
+ options = {column: add_options[:column]}
141
+ else
142
+ options = to_table
143
+ end
144
+ [:drop_skr_table, [from_table, options]]
145
+ end
146
+
147
+ def skr_add_index(*args)
148
+ record(:skr_add_index,args)
149
+ end
150
+ def invert_skr_add_index(args)
151
+ table, column = *args
152
+ [:remove_skr_index, [table, column]]
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+ end
160
+ end
161
+
162
+ class ActiveRecord::Migration
163
+ def skr_prefix
164
+ Skr::Core.config.table_prefix
165
+ end
166
+ end
167
+
168
+ ActiveRecord::Migration::CommandRecorder.class_eval do
169
+ include Skr::Core::DB::CommandRecorder
170
+ end
171
+
172
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
173
+ include Skr::Core::DB::MigrationMethods
174
+ end
175
+
176
+ ActiveRecord::ConnectionAdapters::TableDefinition.class_eval do
177
+ include Skr::Core::DB::TableFields
178
+ end
@@ -0,0 +1,15 @@
1
+ require 'pathname'
2
+
3
+ module Skr
4
+ module Core
5
+ module DB
6
+ module Migrations
7
+ # The `paths` array is an extension point for other
8
+ mattr_accessor :paths
9
+ self.paths = [
10
+ Pathname.new(__FILE__).dirname.join("../../../../db/migrate").realpath
11
+ ]
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ require 'pathname'
2
+ require 'yaml'
3
+
4
+ module Skr
5
+
6
+ module Core
7
+ module DB
8
+
9
+ class Seed
10
+
11
+ @@seeds = []
12
+
13
+ class << self
14
+
15
+ def add(&block)
16
+ @@seeds.push(block)
17
+ end
18
+
19
+ # Loads the database with seed models
20
+ # Currently loads {GlAccount}, {PaymentTerm}, and {Location}
21
+ def execute!
22
+ seeds_path = Pathname.new(__FILE__).dirname.join('seed')
23
+ unless Location.default
24
+ Location.create( code: Core.config.default_location_code, name: "System default",
25
+ address: Address.new(name:"System default")
26
+ )
27
+ end
28
+
29
+ YAML::load( seeds_path.join('chart_of_accounts.yml').read ).each do | acct_data |
30
+ GlAccount.where(number: acct_data['number'].to_s).any? || GlAccount.create!(acct_data)
31
+ end
32
+
33
+ YAML::load( seeds_path.join('payment_terms.yml').read ).each do | acct_data |
34
+ PaymentTerm.where(code: acct_data['code'].to_s).any? || PaymentTerm.create!(acct_data)
35
+ end
36
+
37
+ @@seeds.each(&:call)
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,168 @@
1
+ # Asset Accounts
2
+ -
3
+ number: 1000
4
+ name: Cash
5
+ description: Cash on hand and held in bank accounts
6
+ -
7
+ number: 1010
8
+ name: Deposit Holding
9
+ description: Cash and equivalent waiting for deposit
10
+ -
11
+ number: 1110
12
+ name: Inventory
13
+ description: Inventory on hand and awaiting sale
14
+ -
15
+ number: 1115
16
+ name: Inventory in Transist
17
+ description: Inventory on a transfer between locations
18
+
19
+ -
20
+ number: 1200
21
+ name: Accounts Receivable
22
+ description: Amounts owed to the company for services performed or products sold but not yet paid for.
23
+ -
24
+ number: 1300
25
+ name: Prepayment Revenue
26
+ description: Amounts received in advance of providing goods and services but not yet delivered.
27
+ -
28
+ number: 1750
29
+ name: Buildings
30
+ description: Cost to purchase or construct buildings for use by the company.
31
+ -
32
+ number: 1800
33
+ name: Equipment
34
+ description: Cost to acquire and prepare equipment for use by the company.
35
+ -
36
+ number: 1900
37
+ name: Sales Tax Received
38
+ description: Amount received for sales tax.
39
+
40
+ # Liability Accounts
41
+
42
+ -
43
+ number: 2100
44
+ name: Notes Payable
45
+ description: Balance due on outstanding loans
46
+ -
47
+ number: 2200
48
+ name: Accounts Payable
49
+ description: Amount owed to suppliers for goods and services
50
+ -
51
+ number: 2300
52
+ name: Wages Payable
53
+ description: Amount owed to employees for hours worked but not yet paid.
54
+
55
+ -
56
+ number: 2400
57
+ name: Sales Tax
58
+ description: Sales tax expense
59
+
60
+ -
61
+ number: 2500
62
+ name: Interest Payable
63
+ description: Amount owed for interest on Notes Payable.
64
+
65
+ -
66
+ number: 2600
67
+ name: Inventory Receipts Clearing
68
+ description: Inventory received but vendor invoice not yet confirmed
69
+
70
+ # Equity Accounts
71
+
72
+ -
73
+ number: 3100
74
+ name: Capital
75
+ description: Amount the invested in the company (through cash or other assets) plus earnings of the company not withdrawn by the owner.
76
+ -
77
+ number: 3200
78
+ name: Drawing
79
+ description: Profit draws by owner
80
+
81
+ # Revenue Accounts
82
+ -
83
+ number: 4100
84
+ name: Sales
85
+ description: Amounts earned from selling physical goods.
86
+
87
+ -
88
+ number: 4200
89
+ name: Service Revenues
90
+ description: Amounts earned from providing services to clients.
91
+
92
+ # Cost of Goods
93
+ -
94
+ number: 5100
95
+ name: Inventory Costs
96
+ description: Cost of Goods Sold
97
+
98
+ -
99
+ number: 5150
100
+ name: Transfer Costs
101
+ description: Goods in transit on a transfer
102
+
103
+ # Expenses
104
+ -
105
+ number: 6100
106
+ name: Advertising Expense
107
+ description: Costs incurred by the company during the accounting period for ads, promotions, and other selling and expenses (other than salaries).
108
+
109
+ -
110
+ number: 6200
111
+ name: Salaries Expense
112
+ description: Expenses incurred for the work performed by employees.
113
+ -
114
+ number: 6300
115
+ name: Supplies Expense
116
+ description: Cost of supplies used up during the accounting period.
117
+ -
118
+ number: 6310
119
+ name: Lost Supplies Expense
120
+ description: Supplies that have been physicaly misplaced and cannot be found
121
+ -
122
+ number: 6320
123
+ name: Damaged Supplies Expense
124
+ description: Supplies that have been damaged and were disposed of
125
+ -
126
+ number: 6410
127
+ name: Outbound Shipping Expense
128
+ description: Cost of shipping goods to customers
129
+
130
+ -
131
+ number: 6420
132
+ name: Inbound Shipping Expense
133
+ description: Cost of vendors shipping goods to us
134
+
135
+ -
136
+ number: 6500
137
+ name: Depreciation Expense
138
+ description: Cost of long-term assets allocated to expense during the current accounting period.
139
+
140
+ -
141
+ number: 6600
142
+ name: Rent Expense
143
+ description: Cost of occupying rented facilities during the accounting period.
144
+ -
145
+ number: 6700
146
+ name: Utilities Expense
147
+ description: Costs for electricity, heat, water, and sewer that were used during the accounting period.
148
+ -
149
+ number: 6750
150
+ name: IT Expense
151
+ description: Cost of maintaining information systems
152
+ -
153
+ number: 6760
154
+ name: Telephone Expense
155
+ description: Cost of telephone used during the current accounting period.
156
+
157
+ # Other Revenues
158
+ -
159
+ number: 7100
160
+ name: Non operating Revenue
161
+ description: Revenue realized by other means
162
+
163
+ # Other Expense
164
+ -
165
+ number: 8100
166
+ name: Non operating Expense
167
+ description: Expense incurred by other means
168
+