erp_txns_and_accts 4.0.0 → 4.2.0

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v1/biz_txn_acct_roots_controller.rb +124 -0
  3. data/app/controllers/api/v1/biz_txn_acct_types_controller.rb +130 -0
  4. data/app/controllers/api/v1/biz_txn_events_controller.rb +53 -0
  5. data/app/controllers/api/v1/biz_txn_types_controller.rb +131 -0
  6. data/app/controllers/api/v1/financial_txns_controller.rb +53 -0
  7. data/app/models/biz_txn_acct_pty_rtype.rb +1 -0
  8. data/app/models/biz_txn_acct_root.rb +130 -6
  9. data/app/models/biz_txn_acct_type.rb +2 -0
  10. data/app/models/biz_txn_event.rb +229 -49
  11. data/app/models/biz_txn_party_role_type.rb +6 -0
  12. data/app/models/biz_txn_type.rb +23 -0
  13. data/app/models/extensions/party.rb +4 -2
  14. data/app/models/financial_txn.rb +108 -19
  15. data/config/routes.rb +13 -0
  16. data/db/data_migrations/20151216210147_add_default_gl_accounts.rb +33 -0
  17. data/db/migrate/20080805000030_base_txns_and_accts.rb +129 -127
  18. data/db/migrate/20151216202856_add_nested_set_to_biz_txn_acct_roots.rb +31 -0
  19. data/db/migrate/20151231185337_add_billable_to_finanical_txn.rb +13 -0
  20. data/db/migrate/20160310163051_add_created_by_updated_by_to_erp_txns_and_accts.rb +35 -0
  21. data/db/migrate/20160628145626_upgrade_biz_txn_events_entered_date_data_type.rb +21 -0
  22. data/lib/erp_txns_and_accts/extensions/active_record/acts_as_biz_txn_event.rb +29 -15
  23. data/lib/erp_txns_and_accts/version.rb +1 -1
  24. metadata +17 -10
  25. data/db/data_migrations/20101014142230_financial_txn_types.rb +0 -15
  26. data/db/migrate/20130408195119_add_biz_txn_acct_type_id_to_biz_txn_acct_root.rb +0 -5
  27. data/db/migrate/20140523095709_add_custom_fields_to_biz_txn_events.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c39e7408089a1eb5b0de8327c9d941bf8af60b5a
4
- data.tar.gz: 64f299911cbffef01cc76b4ac8598ae481ac07e2
3
+ metadata.gz: ffd7bf7f798a95542011d353cc0edb33d57cd342
4
+ data.tar.gz: 89145255844014ea63bf763f95b9179141b366d4
5
5
  SHA512:
6
- metadata.gz: dd4ffff84eea9b47fc44408f5ba975b42242ca67b3d50e1a48380773f5c83cc57db72bc581733dd8c8920146a9c113a7f6389fb28441bf10a77976db301702af
7
- data.tar.gz: 811f80f96c6a2e4ac9546af7081e3e9a076e07576e59bb79f65f8b4dba5d3148f25d1737146442d3e37063d77d08a182539ebbc37c5525d440625d62db7ddba6
6
+ metadata.gz: fbe1f69f358256a7e6e2ff1ebc1bf969f92bdc9a1493dd374488295ea91e73b09e432a1381d22a6ce285a666b8b8dc91d80643850dcad2a574626862158eb3d4
7
+ data.tar.gz: 533ea3141db9f80eac766529560d0476a22c4a6f66de9fecc71968d8c260ce826fd7dcc218b61ac51549404b57a8bb1338ffb5d9c02b95cf2f76b1e74899affe
@@ -0,0 +1,124 @@
1
+ module Api
2
+ module V1
3
+ class BizTxnAcctRootsController < BaseController
4
+
5
+ def index
6
+ sort = nil
7
+ dir = nil
8
+ limit = nil
9
+ start = nil
10
+
11
+ unless params[:sort].blank?
12
+ sort_hash = params[:sort].blank? ? {} : Hash.symbolize_keys(JSON.parse(params[:sort]).first)
13
+ sort = sort_hash[:property] || 'description'
14
+ dir = sort_hash[:direction] || 'ASC'
15
+ limit = params[:limit] || 25
16
+ start = params[:start] || 0
17
+ end
18
+
19
+ query_filter = params[:query_filter].blank? ? {} : JSON.parse(params[:query_filter]).symbolize_keys
20
+
21
+ # hook method to apply any scopes passed via parameters to this api
22
+ biz_txn_acct_roots = BizTxnAcctRoot.apply_filters(query_filter)
23
+
24
+ # scope by dba_organizations if there are no parties passed as filters
25
+ dba_organizations = [current_user.party.dba_organization]
26
+ dba_organizations = dba_organizations.concat(current_user.party.dba_organization.child_dba_organizations)
27
+ biz_txn_acct_roots = biz_txn_acct_roots.scope_by_dba_organization(dba_organizations)
28
+
29
+ respond_to do |format|
30
+ format.json do
31
+
32
+ if sort and dir
33
+ biz_txn_acct_roots = biz_txn_acct_roots.order("#{sort} #{dir}")
34
+ end
35
+
36
+ total_count = biz_txn_acct_roots.count
37
+
38
+ if start and limit
39
+ biz_txn_acct_roots = biz_txn_acct_roots.offset(start).limit(limit)
40
+ end
41
+
42
+ render :json => {success: true,
43
+ total_count: total_count,
44
+ biz_txn_acct_roots: biz_txn_acct_roots.collect { |item| item.to_data_hash }}
45
+ end
46
+ format.tree do
47
+ if params[:parent_id]
48
+ render :json => {success: true,
49
+ biz_txn_acct_roots: BizTxnAcctRoot.find(params[:parent_id]).children_to_tree_hash}
50
+ else
51
+ nodes = [].tap do |nodes|
52
+ biz_txn_acct_roots.roots.each do |root|
53
+ nodes.push(root.to_tree_hash)
54
+ end
55
+ end
56
+
57
+ render :json => {success: true,
58
+ biz_txn_acct_roots: nodes}
59
+ end
60
+
61
+ end
62
+ format.all_representation do
63
+ if params[:parent_id].present?
64
+ render :json => {success: true,
65
+ biz_txn_acct_roots: BizTxnAcctRoot.to_all_representation(BizTxnAcctRoot.find(params[:parent_id]))}
66
+ else
67
+
68
+
69
+ render :json => {success: true,
70
+ biz_txn_acct_roots: BizTxnAcctRoot.to_all_representation(nil, [], 0, biz_txn_acct_roots.roots)}
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ def create
77
+ description = params[:description].strip
78
+ external_identifier = params[:external_identifier].strip
79
+
80
+ begin
81
+ ActiveRecord::Base.transaction do
82
+ biz_txn_acct_root = BizTxnAcctRoot.create(description: description,
83
+ internal_identifier: description.to_iid,
84
+ external_identifier: external_identifier)
85
+
86
+ if !params[:parent].blank? and params[:parent] != 'No Parent'
87
+ parent = BizTxnAcctRoot.iid(params[:parent])
88
+ biz_txn_acct_root.move_to_child_of(parent)
89
+ elsif !params[:default_parent].blank?
90
+ parent = BizTxnAcctRoot.iid(params[:default_parent])
91
+ biz_txn_acct_root.move_to_child_of(parent)
92
+ end
93
+
94
+ if params[:biz_txn_acct_type_iid]
95
+ biz_txn_acct_root.biz_txn_acct_type = BizTxnAcctType.iid(params[:biz_txn_acct_type_iid])
96
+ end
97
+
98
+ BizTxnAcctPartyRole.create(biz_txn_acct_root: biz_txn_acct_root,
99
+ party: current_user.party.dba_organization,
100
+ biz_txn_acct_pty_rtype: BizTxnAcctPtyRtype.find_or_create('dba_org', 'DBA Organization'))
101
+
102
+ biz_txn_acct_root.created_by_party = current_user.party
103
+
104
+ biz_txn_acct_root.save!
105
+
106
+ render :json => {success: true, biz_txn_type: biz_txn_acct_root.to_data_hash}
107
+ end
108
+ rescue ActiveRecord::RecordInvalid => invalid
109
+ Rails.logger.error invalid.record.errors.full_messages
110
+
111
+ render json: {:success => false, :message => invalid.record.errors.full_messages.join('</br>')}
112
+ rescue => ex
113
+ Rails.logger.error ex.message
114
+ Rails.logger.error ex.backtrace.join("\n")
115
+
116
+ ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
117
+
118
+ render json: {:success => false, :message => "Error creating record"}
119
+ end
120
+ end
121
+
122
+ end # BizTxnAcctRootsController
123
+ end # V1
124
+ end # Api
@@ -0,0 +1,130 @@
1
+ module Api
2
+ module V1
3
+ class BizTxnAcctTypesController < BaseController
4
+
5
+ def index
6
+ if !params[:parent].blank?
7
+ parent = nil
8
+ # create parent if it doesn't exist
9
+ # if the parent param is a comma separated string then
10
+ # the parent is nested from left to right
11
+ params[:parent].split(',').each do |parent_iid|
12
+ if parent
13
+ parent = BizTxnAcctType.find_or_create(parent_iid, parent_iid.humanize, parent)
14
+ else
15
+ parent = BizTxnAcctType.find_or_create(parent_iid, parent_iid.humanize)
16
+ end
17
+ end
18
+
19
+ respond_to do |format|
20
+ format.tree do
21
+ render :json => {success: true, biz_txn_acct_types: parent.children_to_tree_hash}
22
+ end
23
+ format.json do
24
+ render :json => {success: true, biz_txn_acct_types: BizTxnAcctType.to_all_representation(parent)}
25
+ end
26
+ end
27
+
28
+ # if ids are passed look up on the txn types with the ids passed
29
+ elsif params[:ids]
30
+ ids = params[:ids].split(',').compact
31
+
32
+ biz_txn_acct_types = []
33
+
34
+ ids.each do |id|
35
+ # check if id is a integer if so fine by id
36
+ if id.is_integer?
37
+ biz_txn_acct_type = BizTxnAcctType.find(id)
38
+ else
39
+ biz_txn_acct_type = BizTxnAcctType.iid(id)
40
+ end
41
+
42
+ respond_to do |format|
43
+ format.tree do
44
+ data = biz_txn_acct_type.to_hash({
45
+ only: [:id, :parent_id, :internal_identifier, :description],
46
+ leaf: biz_txn_acct_type.leaf?,
47
+ text: biz_txn_acct_type.to_label,
48
+ children: []
49
+ })
50
+
51
+ parent = nil
52
+ biz_txn_acct_types.each do |biz_txn_acct_type_hash|
53
+ if biz_txn_acct_type_hash[:id] == data[:parent_id]
54
+ parent = biz_txn_acct_type_hash
55
+ end
56
+ end
57
+
58
+ if parent
59
+ parent[:children].push(data)
60
+ else
61
+ biz_txn_acct_types.push(data)
62
+ end
63
+ end
64
+ format.json do
65
+ biz_txn_acct_types.push(biz_txn_acct_type.to_hash(only: [:id, :description, :internal_identifier]))
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ render :json => {success: true, biz_txn_acct_types: biz_txn_acct_types}
72
+
73
+ # get all txn types
74
+ else
75
+
76
+ respond_to do |format|
77
+ format.tree do
78
+ nodes = [].tap do |nodes|
79
+ BizTxnAcctType.roots.each do |root|
80
+ nodes.push(root.to_tree_hash)
81
+ end
82
+ end
83
+
84
+ render :json => {success: true, biz_txn_acct_types: nodes}
85
+ end
86
+ format.json do
87
+ render :json => {success: true, biz_txn_acct_types: BizTxnAcctType.to_all_representation}
88
+ end
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ def create
96
+ description = params[:description].strip
97
+
98
+ begin
99
+
100
+ ActiveRecord::Base.transaction do
101
+ biz_txn_acct_type = BizTxnAcctType.create(description: description, internal_identifier: description.to_iid)
102
+
103
+ if !params[:parent].blank? and params[:parent] != 'No Parent'
104
+ parent = BizTxnAcctType.iid(params[:parent])
105
+ biz_txn_acct_type.move_to_child_of(parent)
106
+ elsif !params[:default_parent].blank?
107
+ parent = BizTxnAcctType.iid(params[:default_parent])
108
+ biz_txn_acct_type.move_to_child_of(parent)
109
+ end
110
+
111
+ render :json => {success: true, biz_txn_acct_type: biz_txn_acct_type.to_hash(only: [:id, :description, :internal_identifier])}
112
+ end
113
+
114
+ rescue ActiveRecord::RecordInvalid => invalid
115
+ Rails.logger.error invalid.record.errors.full_messages
116
+
117
+ {:success => false, :message => invalid.record.errors.full_messages.join('</br>')}
118
+ rescue => ex
119
+ Rails.logger.error ex.message
120
+ Rails.logger.error ex.backtrace.join("\n")
121
+
122
+ ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
123
+
124
+ {:success => false, :message => "Error creating record"}
125
+ end
126
+ end
127
+
128
+ end # BizTxnAcctTypesController
129
+ end # V1
130
+ end # Api
@@ -0,0 +1,53 @@
1
+ module Api
2
+ module V1
3
+ class BizTxnEventsController < BaseController
4
+
5
+ def index
6
+ sort = nil
7
+ dir = nil
8
+ limit = nil
9
+ start = nil
10
+
11
+ unless params[:sort].blank?
12
+ sort_hash = params[:sort].blank? ? {} : Hash.symbolize_keys(JSON.parse(params[:sort]).first)
13
+ sort = sort_hash[:property] || 'description'
14
+ dir = sort_hash[:direction] || 'ASC'
15
+ limit = params[:limit] || 25
16
+ start = params[:start] || 0
17
+ end
18
+
19
+ query_filter = params[:query_filter].blank? ? {} : JSON.parse(params[:query_filter]).symbolize_keys
20
+
21
+ # hook method to apply any scopes passed via parameters to this api
22
+ biz_txn_events = BizTxnEvent.apply_filters(query_filter)
23
+
24
+ # scope by dba_organizations if there are no parties passed as filters
25
+ unless query_filter[:parties]
26
+ dba_organizations = [current_user.party.dba_organization]
27
+ dba_organizations = dba_organizations.concat(current_user.party.dba_organization.child_dba_organizations)
28
+ biz_txn_events = biz_txn_events.scope_by_dba_organization(dba_organizations)
29
+ end
30
+
31
+ if sort and dir
32
+ biz_txn_events = biz_txn_events.order("#{sort} #{dir}")
33
+ end
34
+
35
+ total_count = biz_txn_events.count
36
+
37
+ if start and limit
38
+ biz_txn_events = biz_txn_events.offset(start).limit(limit)
39
+ end
40
+
41
+ render :json => {total_count: total_count, biz_txn_events: biz_txn_events.collect(&:to_data_hash)}
42
+ end
43
+
44
+ def show
45
+ biz_txn_event = BizTxnEvent.find(params[:id])
46
+
47
+ render :json => {biz_txn_event: biz_txn_event.to_data_hash}
48
+ end
49
+
50
+
51
+ end # BizTxnEvents
52
+ end # V1
53
+ end # Api
@@ -0,0 +1,131 @@
1
+ module Api
2
+ module V1
3
+ class BizTxnTypesController < BaseController
4
+
5
+ def index
6
+ if !params[:parent].blank?
7
+ parent = nil
8
+ # create parent if it doesn't exist
9
+ # if the parent param is a comma separated string then
10
+ # the parent is nested from left to right
11
+ params[:parent].split(',').each do |parent_iid|
12
+ if parent
13
+ parent = BizTxnType.find_or_create(parent_iid, parent_iid.humanize, parent)
14
+ else
15
+ parent = BizTxnType.find_or_create(parent_iid, parent_iid.humanize)
16
+ end
17
+ end
18
+
19
+ respond_to do |format|
20
+ format.tree do
21
+ render :json => {success: true, biz_txn_types: parent.children_to_tree_hash}
22
+ end
23
+ format.json do
24
+ render :json => {success: true, biz_txn_types: BizTxnType.to_all_representation(parent)}
25
+ end
26
+ end
27
+
28
+ # if ids are passed look up on the txn types with the ids passed
29
+ elsif params[:ids]
30
+ ids = params[:ids].split(',').compact
31
+
32
+ biz_txn_types = []
33
+
34
+ ids.each do |id|
35
+ # check if id is a integer if so fine by id
36
+ if id.is_integer?
37
+ biz_txn_type = BizTxnType.find(id)
38
+ else
39
+ biz_txn_type = BizTxnType.iid(id)
40
+ end
41
+
42
+ if biz_txn_type
43
+ respond_to do |format|
44
+ format.tree do
45
+ data = biz_txn_type.to_hash({
46
+ only: [:id, :parent_id, :internal_identifier, :description],
47
+ leaf: biz_txn_type.leaf?,
48
+ text: biz_txn_type.to_label,
49
+ children: []
50
+ })
51
+
52
+ parent = nil
53
+ biz_txn_types.each do |biz_txn_type_hash|
54
+ if biz_txn_type_hash[:id] == data[:parent_id]
55
+ parent = biz_txn_type_hash
56
+ end
57
+ end
58
+
59
+ if parent
60
+ parent[:children].push(data)
61
+ else
62
+ biz_txn_types.push(data)
63
+ end
64
+ end
65
+ format.json do
66
+ biz_txn_types.push(biz_txn_type.to_hash(only: [:id, :description, :internal_identifier]))
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ render :json => {success: true, biz_txn_types: biz_txn_types}
73
+
74
+ # get all txn types
75
+ else
76
+
77
+ respond_to do |format|
78
+ format.tree do
79
+ nodes = [].tap do |nodes|
80
+ BizTxnType.roots.each do |root|
81
+ nodes.push(root.to_tree_hash)
82
+ end
83
+ end
84
+
85
+ render :json => {success: true, biz_txn_types: nodes}
86
+ end
87
+ format.json do
88
+ render :json => {success: true, biz_txn_types: BizTxnType.to_all_representation}
89
+ end
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+
96
+ def create
97
+ description = params[:description].strip
98
+
99
+ begin
100
+
101
+ ActiveRecord::Base.transaction do
102
+ biz_txn_type = BizTxnType.create(description: description, internal_identifier: description.to_iid)
103
+
104
+ if !params[:parent].blank? and params[:parent] != 'No Parent'
105
+ parent = BizTxnType.iid(params[:parent])
106
+ biz_txn_type.move_to_child_of(parent)
107
+ elsif !params[:default_parent].blank?
108
+ parent = BizTxnType.iid(params[:default_parent])
109
+ biz_txn_type.move_to_child_of(parent)
110
+ end
111
+
112
+ render :json => {success: true, biz_txn_type: biz_txn_type.to_hash(only: [:id, :description, :internal_identifier])}
113
+ end
114
+
115
+ rescue ActiveRecord::RecordInvalid => invalid
116
+ Rails.logger.error invalid.record.errors.full_messages
117
+
118
+ {:success => false, :message => invalid.record.errors.full_messages.join('</br>')}
119
+ rescue => ex
120
+ Rails.logger.error ex.message
121
+ Rails.logger.error ex.backtrace.join("\n")
122
+
123
+ ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
124
+
125
+ {:success => false, :message => "Error creating record"}
126
+ end
127
+ end
128
+
129
+ end # BizTxnTypesController
130
+ end # V1
131
+ end # Api