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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +6 -0
- data/Guardfile +13 -0
- data/LICENSE.txt +674 -0
- data/README.md +88 -0
- data/Rakefile +58 -0
- data/config/database.yml +9 -0
- data/db/migrate/20120110142845_create_skr_sequential_ids.rb +35 -0
- data/db/migrate/20140202185309_create_skr_gl_accounts.rb +15 -0
- data/db/migrate/20140202193316_create_skr_gl_periods.rb +16 -0
- data/db/migrate/20140202193318_create_skr_gl_transactions.rb +14 -0
- data/db/migrate/20140202193319_create_skr_gl_postings.rb +16 -0
- data/db/migrate/20140202193700_create_skr_gl_manual_entries.rb +13 -0
- data/db/migrate/20140213040608_create_skr_payment_terms.rb +16 -0
- data/db/migrate/20140220031700_create_skr_addresses.rb +19 -0
- data/db/migrate/20140220031800_create_skr_locations.rb +19 -0
- data/db/migrate/20140220190836_create_skr_vendors.rb +22 -0
- data/db/migrate/20140220203029_create_skr_customers.rb +22 -0
- data/db/migrate/20140224034759_create_skr_skus.rb +22 -0
- data/db/migrate/20140225032853_create_skr_sku_locs.rb +21 -0
- data/db/migrate/20140320030501_create_skr_uoms.rb +19 -0
- data/db/migrate/20140321031604_create_skr_sku_vendors.rb +18 -0
- data/db/migrate/20140322012143_create_skr_ia_reasons.rb +14 -0
- data/db/migrate/20140322014401_create_skr_inventory_adjustments.rb +16 -0
- data/db/migrate/20140322023453_create_skr_ia_lines.rb +18 -0
- data/db/migrate/20140322035024_create_skr_sku_trans.rb +21 -0
- data/db/migrate/20140322223912_create_skr_sales_orders.rb +27 -0
- data/db/migrate/20140322223920_create_skr_so_lines.rb +25 -0
- data/db/migrate/20140323001446_create_so_details_view.rb +81 -0
- data/db/migrate/20140327202102_create_skr_purchase_orders.rb +20 -0
- data/db/migrate/20140327202107_create_skr_po_lines.rb +25 -0
- data/db/migrate/20140327202207_create_skr_pick_tickets.rb +16 -0
- data/db/migrate/20140327202209_create_skr_pt_lines.rb +23 -0
- data/db/migrate/20140327224000_create_skr_invoices.rb +25 -0
- data/db/migrate/20140327224002_create_skr_inv_lines.rb +23 -0
- data/db/migrate/20140330232808_create_skr_sku_loc_details_view.rb +31 -0
- data/db/migrate/20140330232810_create_skr_sku_qty_details_view.rb +48 -0
- data/db/migrate/20140400164729_create_skr_vouchers.rb +22 -0
- data/db/migrate/20140400164733_create_skr_vo_lines.rb +21 -0
- data/db/migrate/20140401164729_create_skr_po_receipt.rb +16 -0
- data/db/migrate/20140401164740_create_skr_por_line.rb +21 -0
- data/db/migrate/20140422024010_create_skr_inv_details_view.rb +42 -0
- data/lib/generators/stockor/migrations/install_generator.rb +42 -0
- data/lib/skr/address.rb +97 -0
- data/lib/skr/business_entity.rb +25 -0
- data/lib/skr/concerns/acts_as_uom.rb +47 -0
- data/lib/skr/concerns/all.rb +30 -0
- data/lib/skr/concerns/association_extensions.rb +85 -0
- data/lib/skr/concerns/attr_accessor_with_default.rb +54 -0
- data/lib/skr/concerns/code_identifier.rb +43 -0
- data/lib/skr/concerns/export_associations.rb +52 -0
- data/lib/skr/concerns/export_join_tables.rb +39 -0
- data/lib/skr/concerns/export_methods.rb +104 -0
- data/lib/skr/concerns/export_scope.rb +66 -0
- data/lib/skr/concerns/exported_limit_evaluator.rb +17 -0
- data/lib/skr/concerns/gl_tran_extensions.rb +18 -0
- data/lib/skr/concerns/has_gl_transaction.rb +67 -0
- data/lib/skr/concerns/has_sku_loc_lines.rb +47 -0
- data/lib/skr/concerns/immutable_model.rb +32 -0
- data/lib/skr/concerns/inv_extensions.rb +24 -0
- data/lib/skr/concerns/is_order_like.rb +47 -0
- data/lib/skr/concerns/is_sku_loc_line.rb +65 -0
- data/lib/skr/concerns/json_attribute_access.rb +55 -0
- data/lib/skr/concerns/locked_fields.rb +84 -0
- data/lib/skr/concerns/pt_extensions.rb +22 -0
- data/lib/skr/concerns/pub_sub.rb +105 -0
- data/lib/skr/concerns/queries.rb +20 -0
- data/lib/skr/concerns/random_hash_code.rb +40 -0
- data/lib/skr/concerns/sanitize_json.rb +49 -0
- data/lib/skr/concerns/sku_extensions.rb +52 -0
- data/lib/skr/concerns/so_extensions.rb +30 -0
- data/lib/skr/concerns/state_machine.rb +62 -0
- data/lib/skr/concerns/track_modifications.rb +48 -0
- data/lib/skr/concerns/visible_id_identifier.rb +53 -0
- data/lib/skr/core.rb +30 -0
- data/lib/skr/core/configuration.rb +87 -0
- data/lib/skr/core/db.rb +82 -0
- data/lib/skr/core/db/migration_helpers.rb +178 -0
- data/lib/skr/core/db/migrations.rb +15 -0
- data/lib/skr/core/db/seed.rb +46 -0
- data/lib/skr/core/db/seed/chart_of_accounts.yml +168 -0
- data/lib/skr/core/db/seed/payment_terms.yml +60 -0
- data/lib/skr/core/logger.rb +36 -0
- data/lib/skr/core/numbers.rb +71 -0
- data/lib/skr/core/rails_engine.rb +5 -0
- data/lib/skr/core/standard_pricing_provider.rb +15 -0
- data/lib/skr/core/strings.rb +57 -0
- data/lib/skr/core/testing.rb +11 -0
- data/lib/skr/core/testing/assertions.rb +44 -0
- data/lib/skr/core/testing/fixtures.rb +25 -0
- data/lib/skr/core/testing/fixtures/skr/addresses.yml +53 -0
- data/lib/skr/core/testing/fixtures/skr/customers.yml +43 -0
- data/lib/skr/core/testing/fixtures/skr/gl_accounts.yml +86 -0
- data/lib/skr/core/testing/fixtures/skr/gl_manual_entries.yml +4 -0
- data/lib/skr/core/testing/fixtures/skr/gl_periods.yml +26 -0
- data/lib/skr/core/testing/fixtures/skr/gl_postings.yml +88 -0
- data/lib/skr/core/testing/fixtures/skr/gl_transactions.yml +35 -0
- data/lib/skr/core/testing/fixtures/skr/ia_lines.yml +7 -0
- data/lib/skr/core/testing/fixtures/skr/ia_reasons.yml +15 -0
- data/lib/skr/core/testing/fixtures/skr/inv_lines.yml +22 -0
- data/lib/skr/core/testing/fixtures/skr/inventory_adjustments.yml +6 -0
- data/lib/skr/core/testing/fixtures/skr/invoices.yml +10 -0
- data/lib/skr/core/testing/fixtures/skr/locations.yml +24 -0
- data/lib/skr/core/testing/fixtures/skr/payment_terms.yml +42 -0
- data/lib/skr/core/testing/fixtures/skr/pick_tickets.yml +4 -0
- data/lib/skr/core/testing/fixtures/skr/po_lines.yml +44 -0
- data/lib/skr/core/testing/fixtures/skr/po_receipts.yml +5 -0
- data/lib/skr/core/testing/fixtures/skr/por_lines.yml +13 -0
- data/lib/skr/core/testing/fixtures/skr/pt_lines.yml +12 -0
- data/lib/skr/core/testing/fixtures/skr/purchase_orders.yml +16 -0
- data/lib/skr/core/testing/fixtures/skr/sales_orders.yml +32 -0
- data/lib/skr/core/testing/fixtures/skr/sku_locs.yml +78 -0
- data/lib/skr/core/testing/fixtures/skr/sku_trans.yml +9 -0
- data/lib/skr/core/testing/fixtures/skr/sku_vendors.yml +35 -0
- data/lib/skr/core/testing/fixtures/skr/skus.yml +50 -0
- data/lib/skr/core/testing/fixtures/skr/so_lines.yml +71 -0
- data/lib/skr/core/testing/fixtures/skr/uoms.yml +61 -0
- data/lib/skr/core/testing/fixtures/skr/vendors.yml +48 -0
- data/lib/skr/core/testing/fixtures/skr/vo_lines.yml +12 -0
- data/lib/skr/core/testing/fixtures/skr/vouchers.yml +8 -0
- data/lib/skr/core/testing/helper.rb +18 -0
- data/lib/skr/core/testing/test_case.rb +17 -0
- data/lib/skr/core/version.rb +5 -0
- data/lib/skr/customer.rb +34 -0
- data/lib/skr/gl_account.rb +56 -0
- data/lib/skr/gl_manual_entry.rb +31 -0
- data/lib/skr/gl_period.rb +13 -0
- data/lib/skr/gl_posting.rb +54 -0
- data/lib/skr/gl_transaction.rb +174 -0
- data/lib/skr/ia_line.rb +129 -0
- data/lib/skr/ia_reason.rb +16 -0
- data/lib/skr/inv_line.rb +90 -0
- data/lib/skr/inventory_adjustment.rb +60 -0
- data/lib/skr/invoice.rb +159 -0
- data/lib/skr/location.rb +31 -0
- data/lib/skr/model.rb +37 -0
- data/lib/skr/null_user.rb +30 -0
- data/lib/skr/payment_term.rb +30 -0
- data/lib/skr/pick_ticket.rb +71 -0
- data/lib/skr/po_line.rb +69 -0
- data/lib/skr/po_receipt.rb +51 -0
- data/lib/skr/por_line.rb +80 -0
- data/lib/skr/pt_line.rb +74 -0
- data/lib/skr/purchase_order.rb +112 -0
- data/lib/skr/sales_order.rb +159 -0
- data/lib/skr/sequential_id.rb +23 -0
- data/lib/skr/sku.rb +99 -0
- data/lib/skr/sku_loc.rb +94 -0
- data/lib/skr/sku_tran.rb +111 -0
- data/lib/skr/sku_vendor.rb +26 -0
- data/lib/skr/so_line.rb +159 -0
- data/lib/skr/uom.rb +63 -0
- data/lib/skr/user_proxy.rb +60 -0
- data/lib/skr/validators/all.rb +2 -0
- data/lib/skr/validators/email.rb +17 -0
- data/lib/skr/validators/set.rb +18 -0
- data/lib/skr/vendor.rb +33 -0
- data/lib/skr/vo_line.rb +35 -0
- data/lib/skr/voucher.rb +119 -0
- data/lib/stockor/core.rb +9 -0
- data/stockor-core.gemspec +37 -0
- data/tasks/migrations.rake +23 -0
- data/tasks/publish.rake +8 -0
- data/test/address_test.rb +57 -0
- data/test/concerns/attr_with_default_test.rb +45 -0
- data/test/concerns/code_identifier_test.rb +46 -0
- data/test/concerns/export_associations_test.rb +7 -0
- data/test/concerns/export_methods_test.rb +31 -0
- data/test/concerns/export_scope_test.rb +16 -0
- data/test/concerns/exported_limits_test.rb +47 -0
- data/test/concerns/json_attribute_access_test.rb +27 -0
- data/test/concerns/pub_sub_test.rb +83 -0
- data/test/concerns/sanitize_json_test.rb +47 -0
- data/test/core/configuration_test.rb +24 -0
- data/test/core/numbers_test.rb +26 -0
- data/test/core/strings_test.rb +41 -0
- data/test/customer_test.rb +34 -0
- data/test/gl_account_test.rb +23 -0
- data/test/gl_manual_entry_test.rb +17 -0
- data/test/gl_period_test.rb +12 -0
- data/test/gl_posting_test.rb +39 -0
- data/test/gl_transaction_test.rb +58 -0
- data/test/ia_line_test.rb +68 -0
- data/test/ia_reason_test.rb +11 -0
- data/test/inv_line_test.rb +58 -0
- data/test/inventory_adjustment_test.rb +72 -0
- data/test/invoice_test.rb +63 -0
- data/test/location_test.rb +10 -0
- data/test/payment_term_test.rb +25 -0
- data/test/pick_ticket_test.rb +27 -0
- data/test/po_line_test.rb +36 -0
- data/test/po_receipt_test.rb +93 -0
- data/test/por_line_test.rb +79 -0
- data/test/pt_line_test.rb +29 -0
- data/test/purchase_order_test.rb +44 -0
- data/test/sales_order_test.rb +74 -0
- data/test/sku_loc_test.rb +50 -0
- data/test/sku_test.rb +45 -0
- data/test/sku_tran_test.rb +21 -0
- data/test/sku_vendor_test.rb +13 -0
- data/test/so_line_test.rb +89 -0
- data/test/test_helper.rb +1 -0
- data/test/uom_test.rb +14 -0
- data/test/vendor_test.rb +35 -0
- data/test/vo_line_test.rb +20 -0
- data/test/voucher_test.rb +35 -0
- data/yard_ext/all.rb +9 -0
- data/yard_ext/code_identifier_handler.rb +33 -0
- data/yard_ext/concern_meta_methods.rb +60 -0
- data/yard_ext/config_options.rb +27 -0
- data/yard_ext/exported_scope.rb +4 -0
- data/yard_ext/immutable_handler.rb +17 -0
- data/yard_ext/json_attr_accessor.rb +22 -0
- data/yard_ext/locked_fields_handler.rb +21 -0
- data/yard_ext/templates/default/layout/html/layout.erb +20 -0
- data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
- data/yard_ext/templates/default/method_details/setup.rb +3 -0
- data/yard_ext/validators.rb +1 -0
- data/yard_ext/visible_id_handler.rb +38 -0
- metadata +448 -0
data/lib/skr/core/db.rb
ADDED
|
@@ -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
|
+
|