erp_inventory 3.1.0 → 4.0.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 (80) hide show
  1. checksums.yaml +7 -0
  2. data/app/controllers/erp_inventory/erp_app/organizer/asset_management/facilities_controller.rb +78 -0
  3. data/app/controllers/erp_inventory/erp_app/organizer/asset_management/fixed_assets_controller.rb +16 -0
  4. data/app/controllers/erp_inventory/erp_app/organizer/inventory_mgt/base_controller.rb +15 -0
  5. data/app/controllers/erp_inventory/erp_app/organizer/inventory_mgt/inventory_entries_controller.rb +126 -0
  6. data/app/controllers/erp_inventory/erp_app/organizer/inventory_mgt/inventory_entry_locations_controller.rb +47 -0
  7. data/app/controllers/erp_inventory/erp_app/organizer/inventory_mgt/inventory_txns_controller.rb +37 -0
  8. data/app/models/facility.rb +23 -0
  9. data/app/models/inventory_entry.rb +69 -6
  10. data/app/models/inventory_entry_location.rb +13 -0
  11. data/app/views/erp_inventory/erp_app/organizer/asset_management/facilities/show_summary.html.erb +64 -0
  12. data/app/views/erp_inventory/erp_app/organizer/inventory_mgt/base/show_summary.html.erb +7 -0
  13. data/app/views/erp_inventory/erp_app/organizer/inventory_mgt/inventory_entries/show_summary.html.erb +50 -0
  14. data/config/routes.rb +21 -0
  15. data/db/data_migrations/20131206033154_create_inv_txn_types.rb +21 -0
  16. data/db/migrate/20130925202059_create_inventory_entry_locations.rb +13 -0
  17. data/db/migrate/20130925222100_create_inventory_pickup_txns.rb +17 -0
  18. data/db/migrate/20130925222150_create_inventory_dropoff_txns.rb +18 -0
  19. data/db/migrate/20131206035027_add_inv_entry_to_inventory_txns.rb +15 -0
  20. data/db/migrate/20131211170059_change_fixed_asset_to_facility_for_inventory_locations.rb +8 -0
  21. data/db/migrate/20140103183635_add_uom_to_inventory_entry.rb +5 -0
  22. data/db/migrate/20140104182403_add_number_in_stock_inventory.rb +9 -0
  23. data/lib/erp_inventory/engine.rb +1 -1
  24. data/lib/erp_inventory/version.rb +6 -2
  25. metadata +43 -139
  26. data/app/assets/javascripts/erp_inventory/application.js +0 -9
  27. data/app/assets/stylesheets/erp_inventory/application.css +0 -7
  28. data/app/helpers/erp_inventory/application_helper.rb +0 -4
  29. data/app/views/layouts/erp_inventory/application.html.erb +0 -14
  30. data/lib/erp_inventory/extensions/compass_ae/erp_products/erp_app/desktop/product_manager/base_controller.rb +0 -64
  31. data/public/javascripts/extensions/compass_ae/erp_app/desktop/applications/product_manager/inventory_form_panel.js +0 -83
  32. data/spec/dummy/db/data_migrations/20101011152441_payment_gateway_actions.erp_commerce.rb +0 -28
  33. data/spec/dummy/db/data_migrations/20101014142230_financial_txn_types.erp_txns_and_accts.rb +0 -16
  34. data/spec/dummy/db/data_migrations/20110109173616_create_capability_scope_types.erp_tech_svcs.rb +0 -15
  35. data/spec/dummy/db/data_migrations/20110324010232_product_role_types.erp_products.rb +0 -24
  36. data/spec/dummy/db/data_migrations/20110525001935_add_usd_currency.erp_base_erp_svcs.rb +0 -12
  37. data/spec/dummy/db/data_migrations/20110527160807_add_default_prod_avail_types.erp_products.rb +0 -27
  38. data/spec/dummy/db/data_migrations/20110605231556_create_order_party_roles.erp_orders.rb +0 -24
  39. data/spec/dummy/db/data_migrations/20110609150135_add_iso_codes.erp_base_erp_svcs.rb +0 -19
  40. data/spec/dummy/db/data_migrations/20110728201729_erp_app_setup.erp_app.rb +0 -252
  41. data/spec/dummy/db/data_migrations/20110728201730_create_desktop_app_product_manager.erp_products.rb +0 -26
  42. data/spec/dummy/db/data_migrations/20110728201731_create_desktop_app_order_manager.erp_orders.rb +0 -26
  43. data/spec/dummy/db/data_migrations/20110728201732_create_organizer_app_order_management.erp_orders.rb +0 -15
  44. data/spec/dummy/db/data_migrations/20110728201733_update_preferences.erp_app.rb +0 -53
  45. data/spec/dummy/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.erp_tech_svcs.rb +0 -16
  46. data/spec/dummy/db/data_migrations/20110816161238_create_desktop_app_audit_log_viewer.erp_app.rb +0 -21
  47. data/spec/dummy/db/data_migrations/20110817160743_add_file_manager_application.erp_app.rb +0 -32
  48. data/spec/dummy/db/data_migrations/20110913145838_setup_compass_ae_instance.erp_base_erp_svcs.rb +0 -12
  49. data/spec/dummy/db/data_migrations/20111108183739_add_default_capabilities.erp_app.rb +0 -23
  50. data/spec/dummy/db/data_migrations/20111108183740_add_new_contact_widgets.erp_app.rb +0 -42
  51. data/spec/dummy/db/data_migrations/20111111144706_setup_audit_log_types.erp_tech_svcs.rb +0 -22
  52. data/spec/dummy/db/data_migrations/20120109173616_create_download_capability_type.erp_tech_svcs.rb +0 -14
  53. data/spec/dummy/db/data_migrations/20120229160222_add_userinfo_widget.erp_app.rb +0 -29
  54. data/spec/dummy/db/data_migrations/20120229174343_add_orders_widget.erp_orders.rb +0 -29
  55. data/spec/dummy/db/data_migrations/20120405193721_create_party_and_role_type_for_communication_events.erp_app.rb +0 -11
  56. data/spec/dummy/db/data_migrations/20120411180756_create_user_management_mobile_application.erp_app.rb +0 -19
  57. data/spec/dummy/db/data_migrations/20120418164215_create_configuration_management_desktop_application.erp_app.rb +0 -23
  58. data/spec/dummy/db/data_migrations/20121116155018_create_group_relationship_and_role_types.erp_tech_svcs.rb +0 -20
  59. data/spec/dummy/db/data_migrations/20121130201859_upgrade_remove_system_mgmt_app.erp_app.rb +0 -16
  60. data/spec/dummy/db/data_migrations/20121130212146_note_capabilities.erp_tech_svcs.rb +0 -24
  61. data/spec/dummy/db/data_migrations/20121218175028_create_security_management_desktop_application.erp_app.rb +0 -23
  62. data/spec/dummy/db/migrate/20121213235616_base_erp_services.erp_base_erp_svcs.rb +0 -461
  63. data/spec/dummy/db/migrate/20121213235617_base_inventory.erp_inventory.rb +0 -91
  64. data/spec/dummy/db/migrate/20121213235618_base_inventory_indexes.erp_inventory.rb +0 -48
  65. data/spec/dummy/db/migrate/20121213235619_base_tech_services.erp_tech_svcs.rb +0 -255
  66. data/spec/dummy/db/migrate/20121213235620_create_has_attribute_tables.erp_tech_svcs.rb +0 -39
  67. data/spec/dummy/db/migrate/20121213235621_base_orders.erp_orders.rb +0 -178
  68. data/spec/dummy/db/migrate/20121213235622_base_products.erp_products.rb +0 -234
  69. data/spec/dummy/db/migrate/20121213235623_base_products_indexes.erp_products.rb +0 -59
  70. data/spec/dummy/db/migrate/20121213235624_base_txns_and_accts.erp_txns_and_accts.rb +0 -364
  71. data/spec/dummy/db/migrate/20121213235625_agreements_services.erp_agreements.rb +0 -160
  72. data/spec/dummy/db/migrate/20121213235626_agreements_services_indexes.erp_agreements.rb +0 -52
  73. data/spec/dummy/db/migrate/20121213235627_base_app_framework.erp_app.rb +0 -276
  74. data/spec/dummy/db/migrate/20121213235628_erp_commerce_base.erp_commerce.rb +0 -442
  75. data/spec/dummy/db/migrate/20130107180714_create_groups.erp_tech_svcs.rb +0 -19
  76. data/spec/dummy/db/migrate/20130107180715_upgrade_security.erp_tech_svcs.rb +0 -54
  77. data/spec/dummy/db/migrate/20130107180716_upgrade_security2.erp_tech_svcs.rb +0 -270
  78. data/spec/dummy/db/schema.rb +0 -1879
  79. data/spec/dummy/db/spec.sqlite3 +0 -0
  80. data/spec/dummy/log/spec.log +0 -9949
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1638c2774d64dc7ed63045210a81eb744a6ae1ae
4
+ data.tar.gz: a5322287991cb59a81325728dfb91705639e733c
5
+ SHA512:
6
+ metadata.gz: 26d4ccfe361cf001c191a730ebe7a808d7f5c95bde625562e237e3e6ef67e64bed9ef7bd57efec034dde6e3bea2c7944d84048063e0cd303be14eaf65e5d38b3
7
+ data.tar.gz: b7225b9252a044cb0ff127407b727e9f35592717dfc5afbceb5ddb9c3bdb12c630ff840b3c6902972ce9149488b4b22325921279aca4c99d272dd30eb121c7c7
@@ -0,0 +1,78 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module AssetManagement
5
+ class FacilitiesController < ::ErpApp::Organizer::BaseController
6
+
7
+ def index
8
+ offset = params[:start] || 0
9
+ limit = params[:limit] || 25
10
+ query_filter = params[:query_filter].blank? ? nil : params[:query_filter].strip
11
+
12
+ factility_tbl = Facility.arel_table
13
+ statement = Facility.order('created_at asc')
14
+
15
+ unless query_filter.blank?
16
+ statement = statement.where(factility_tbl[:description].matches(query_filter + '%'))
17
+ end
18
+
19
+ # Get total count of records
20
+ total = statement.count
21
+
22
+ # Apply limit and offset
23
+ facilities = statement.offset(offset).limit(limit)
24
+
25
+ render :json => {:success => true, :total => total, :facilities => facilities.collect { |facility| facility.to_hash(:only => [:id, :description, :created_at, :updated_at]) }}
26
+
27
+ end
28
+
29
+ def show_summary
30
+
31
+ @facility = Facility.find(params[:id]) rescue nil
32
+
33
+ end
34
+
35
+ def show
36
+
37
+ facility = Facility.find(params[:facility_id])
38
+ render :json => {:success => true, :data => facility.to_hash(:only => [:id, :description, :created_at, :updated_at])}
39
+
40
+ end
41
+
42
+ def new
43
+ end
44
+
45
+ def create
46
+
47
+ facility = Facility.new
48
+ facility.description=params[:description]
49
+ facility.save
50
+
51
+ render :json => {:success => true, :data => facility.to_hash(:only => [:id, :description, :created_at, :updated_at])}
52
+ end
53
+
54
+ def edit
55
+ end
56
+
57
+ def update
58
+
59
+ facility = Facility.find(params[:facility_id])
60
+ facility.description=params[:description]
61
+ facility.save
62
+
63
+ render :json => {:success => true, :data => facility.to_hash(:only => [:id, :description, :created_at, :updated_at])}
64
+
65
+ end
66
+
67
+ def destroy
68
+
69
+ facility = Facility.find(params[:facility_id]).destroy
70
+ render :json => {:success => true}
71
+
72
+ end
73
+
74
+ end
75
+ end #AssetManagement
76
+ end #Organizer
77
+ end #ErpApp
78
+ end #ErpInventory
@@ -0,0 +1,16 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module AssetManagement
5
+ class FixedAssetsController < ::ErpApp::Organizer::BaseController
6
+
7
+ def index
8
+ fixed_assets = FixedAsset.all
9
+ render :json => {:success => true, :fixed_assets => fixed_assets.collect { |fixed_asset| fixed_asset.to_hash(:only => [:id, :description, :created_at, :updated_at]) }}
10
+ end
11
+
12
+ end
13
+ end #AssetManagement
14
+ end #Organizer
15
+ end #ErpApp
16
+ end #ErpInventory
@@ -0,0 +1,15 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module InventoryMgt
5
+ class BaseController < ::ErpApp::Organizer::BaseController
6
+
7
+ def menu
8
+ render :json => [{:text => 'Menu Item', :leaf => true, :iconCls => 'icon-tasks', :applicationCardId => "inventory_mgt_example_panel"}]
9
+ end
10
+
11
+ end #BaseController
12
+ end #InventoryMgt
13
+ end #Organizer
14
+ end #ErpApp
15
+ end #ErpInventory
@@ -0,0 +1,126 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module InventoryMgt
5
+ class InventoryEntriesController < ::ErpApp::Organizer::BaseController
6
+
7
+ def index
8
+ offset = params[:start] || 0
9
+ limit = params[:limit] || 25
10
+ query_filter = params[:query_filter].blank? ? nil : params[:query_filter].strip
11
+ facility_id = params[:facility_id].blank? ? nil : params[:facility_id].strip
12
+ party_id = params[:party_id]
13
+
14
+ inventory_entry_tbl = InventoryEntry.arel_table
15
+
16
+ # scope by party if have party id
17
+ if party_id.blank?
18
+ statement = InventoryEntry.order('created_at asc')
19
+ else
20
+ statement = InventoryEntry.joins(product_type: :product_type_pty_roles).where('product_type_pty_roles.party_id = ?', party_id).order('created_at asc')
21
+ end
22
+
23
+ # apply filters if present
24
+ statement = statement.where(inventory_entry_tbl[:description].matches(query_filter + '%')) if query_filter
25
+
26
+ # apply facility if present
27
+ statement = statement.joins(:inventory_entry_locations).where('facility_id = ?', facility_id) if facility_id
28
+
29
+ # Get total count of records
30
+ total = statement.count
31
+
32
+ # Apply limit and offset
33
+ inventory_entries = statement.offset(offset).limit(limit)
34
+
35
+ render :json => {:success => true, :total => total, :inventory_entries => inventory_entries.collect { |entry| entry.to_data_hash }}
36
+
37
+ end
38
+
39
+ def show_summary
40
+
41
+ @inventory_entry = InventoryEntry.find(params[:id]) rescue nil
42
+
43
+ end
44
+
45
+ def show
46
+
47
+ entry = InventoryEntry.find(params[:inventory_entry_id])
48
+ render :json => {:success => true, :data => entry.to_data_hash}
49
+
50
+ end
51
+
52
+ def new
53
+ end
54
+
55
+ def create
56
+
57
+ begin
58
+ ActiveRecord::Base.transaction do
59
+ entry = InventoryEntry.new
60
+ entry.description=params[:description]
61
+ entry.sku=params[:sku]
62
+ entry.unit_of_measurement_id=params[:unit_of_measurement]
63
+ entry.number_in_stock=params[:number_in_stock]
64
+ entry.number_available=params[:number_available]
65
+ entry.product_type_id=params[:product_type_id]
66
+ entry.save
67
+
68
+ location_assignment = InventoryEntryLocation.new
69
+ location_assignment.inventory_entry = entry
70
+ location_assignment.facility_id = params[:inventory_facility]
71
+ location_assignment.save
72
+
73
+ render :json => {:success => true, :data => entry.to_hash(:only => [:id, :description, :created_at, :updated_at], :model => 'InventoryEntry')}
74
+ end
75
+ rescue => ex
76
+ Rails.logger.error ex.message
77
+ Rails.logger.error ex.backtrace.join("\n")
78
+ render :json => {:success => false, :message => ex.message}
79
+ end
80
+ end
81
+
82
+ def edit
83
+ puts "edit called"
84
+ end
85
+
86
+ def update
87
+ begin
88
+ ActiveRecord::Base.transaction do
89
+ entry = InventoryEntry.find(params[:inventory_entry_id])
90
+ current_facility = entry.current_storage_facility
91
+ entry.description=params[:description]
92
+ entry.sku=params[:sku]
93
+ entry.unit_of_measurement_id=params[:unit_of_measurement]
94
+ entry.number_available=params[:number_available]
95
+ entry.number_in_stock=params[:number_in_stock]
96
+ entry.product_type_id=params[:product_type_id]
97
+ entry.save
98
+
99
+ if current_facility.id != params[:inventory_facility].to_i
100
+ location_assignment = InventoryEntryLocation.new
101
+ location_assignment.inventory_entry = entry
102
+ location_assignment.facility_id = params[:inventory_facility]
103
+ location_assignment.save
104
+ end
105
+
106
+ render :json => {:success => true, :data => entry.to_hash(:only => [:id, :description, :created_at, :updated_at], :model => 'InventoryEntry')}
107
+ end
108
+ rescue Exception => e
109
+ Rails.logger.error e.message
110
+ Rails.logger.error e.backtrace.join("\n")
111
+ render :json => {:success => false, :message => e.message}
112
+ end
113
+ end
114
+
115
+ def destroy
116
+
117
+ entry = InventoryEntry.find(params[:inventory_entry_id])
118
+ render :json => {:success => entry.destroy}
119
+
120
+ end
121
+
122
+ end
123
+ end #InventoryMgt
124
+ end #Organizer
125
+ end #ErpApp
126
+ end #ErpInventory
@@ -0,0 +1,47 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module InventoryMgt
5
+ class InventoryEntryLocationsController < ::ErpApp::Organizer::BaseController
6
+
7
+ def show
8
+ end
9
+
10
+ def new
11
+ end
12
+
13
+ def create
14
+
15
+ location_assignment = InventoryEntryLocation.new
16
+ location_assignment.inventory_entry_id = params[:inventory_entry_id]
17
+ location_assignment.facility_id = params[:facility_id]
18
+ location_assignment.save
19
+
20
+ render :json => {:success => true }
21
+ end
22
+
23
+ def edit
24
+ end
25
+
26
+ def update
27
+
28
+ location_assignment = InventoryEntryLocation.find(params[:inventory_entry_location_id])
29
+ location_assignment.fixed_asset_id = params[:fixed_asset_id]
30
+ location_assignment.save
31
+
32
+ render :json => {:success => true }
33
+
34
+ end
35
+
36
+ def destroy
37
+
38
+ entry = InventoryEntryLocation.find(params[:inventory_entry_location_id]).destroy
39
+ render :json => { :success => true }
40
+
41
+ end
42
+
43
+ end
44
+ end #InventoryMgt
45
+ end #Organizer
46
+ end #ErpApp
47
+ end #ErpInventory
@@ -0,0 +1,37 @@
1
+ module ErpInventory
2
+ module ErpApp
3
+ module Organizer
4
+ module InventoryMgt
5
+ class InventoryTxnsController < ::ErpApp::Organizer::BaseController
6
+
7
+ def index
8
+ offset = params[:start] || 0
9
+ limit = params[:limit] || 25
10
+
11
+ statement = BizTxnEvent.joins("left outer join inventory_pickup_txns ipt on biz_txn_events.biz_txn_record_id = ipt.id
12
+ and biz_txn_events.biz_txn_record_type = 'InventoryPickupTxn'")
13
+ .joins("left outer join inventory_dropoff_txns idt on biz_txn_events.biz_txn_record_id = idt.id
14
+ and biz_txn_events.biz_txn_record_type = 'InventoryDropoffTxn'")
15
+ .where("idt.inventory_entry_id = ? or ipt.inventory_entry_id = ?", params[:inventory_entry_id], params[:inventory_entry_id])
16
+ .order('updated_at ASC')
17
+ .uniq
18
+
19
+ # Get total count of records
20
+ total = statement.count
21
+
22
+ # apply limit and offset
23
+ inventory_txns = statement.offset(offset).limit(limit)
24
+
25
+ render :json => {:success => true, :total => total, :inventory_txns => inventory_txns.collect { |txn| txn.to_hash(:only => [:id, :description, :created_at, :updated_at], :model => txn.biz_txn_record_type) }}
26
+
27
+ end
28
+
29
+ def show
30
+ @inventory_entry = InventoryEntry.find(params[:id]) rescue nil
31
+ end
32
+
33
+ end #InventoryTxnsController
34
+ end #InventoryMgt
35
+ end #Organizer
36
+ end #ErpApp
37
+ end #ErpInventory
@@ -0,0 +1,23 @@
1
+ class Facility < ActiveRecord::Base
2
+
3
+ has_many :inventory_entry_locations
4
+ has_many :inventory_entries, :through => :inventory_entry_locations
5
+
6
+ belongs_to :postal_address
7
+
8
+ def to_data_hash
9
+ {
10
+ :id => self.id,
11
+ :description => self.description,
12
+ :postal_address_id => self.postal_address_id,
13
+ :address_line_1 => (self.postal_address.address_line_1 rescue nil),
14
+ :address_line_2 => (self.postal_address.address_line_2 rescue nil),
15
+ :city => (self.postal_address.city rescue nil),
16
+ :state => (self.postal_address.state rescue nil),
17
+ :zip => (self.postal_address.zip rescue nil),
18
+ :created_at => self.created_at,
19
+ :updated_at => self.updated_at,
20
+ }
21
+ end
22
+
23
+ end
@@ -1,11 +1,11 @@
1
1
  class InventoryEntry < ActiveRecord::Base
2
2
  attr_protected :created_at, :updated_at
3
3
 
4
- belongs_to :inventory_entry_record, :polymorphic => true
5
- belongs_to :product_type
6
- has_one :classification, :as => :classification, :class_name => 'CategoryClassification'
7
- has_many :prod_instance_inv_entries
8
- has_many :product_instances, :through => :prod_instance_inv_entries do
4
+ belongs_to :inventory_entry_record, :polymorphic => true
5
+ belongs_to :product_type
6
+ has_one :classification, :as => :classification, :class_name => 'CategoryClassification'
7
+ has_many :prod_instance_inv_entries
8
+ has_many :product_instances, :through => :prod_instance_inv_entries do
9
9
  def available
10
10
  includes([:prod_availability_status_type]).where('prod_availability_status_types.internal_identifier = ?', 'available')
11
11
  end
@@ -14,9 +14,72 @@ class InventoryEntry < ActiveRecord::Base
14
14
  includes([:prod_availability_status_type]).where('prod_availability_status_types.internal_identifier = ?', 'sold')
15
15
  end
16
16
  end
17
-
17
+ has_many :inventory_entry_locations
18
+ has_many :facilities, :through => :inventory_entry_locations
19
+ belongs_to :unit_of_measurement
20
+
21
+ alias_method :storage_facilities, :facilities
22
+
23
+ delegate :description, :sku, :unit_of_measurement, :to => :product_type, :prefix => true
24
+
25
+ def current_location
26
+ self.inventory_entry_locations
27
+ end
28
+
29
+ def current_storage_facility
30
+ inventory_entry_locations.last.facility
31
+ end
32
+
33
+ def current_storage_facility=(facility)
34
+ location = InventoryEntryLocation.new
35
+ location.facility = facility
36
+ location.inventory_entry = self
37
+ location.save
38
+ end
39
+
40
+ def current_storage_facility_id=(facility_id)
41
+ location = InventoryEntryLocation.new
42
+ location.facility_id = facility_id
43
+ location.inventory_entry = self
44
+ location.save
45
+ end
46
+
47
+ def to_data_hash
48
+ {
49
+ :id => self.id,
50
+ :description => self.description,
51
+ :number_available => self.number_available,
52
+ :number_in_stock => self.number_in_stock,
53
+ :sku => self.get_sku,
54
+ :unit_of_measurement_id => (self.get_uom.id rescue nil),
55
+ :unit_of_measurement_description => (self.get_uom.description rescue nil),
56
+ :inventory_storage_facility_id => (self.current_storage_facility.id rescue nil),
57
+ :inventory_storage_facility_description => (self.current_storage_facility.description rescue nil),
58
+ :created_at => self.created_at,
59
+ :updated_at => self.updated_at,
60
+ :product_type_id =>self.product_type_id,
61
+ :product_type_description => (self.product_type_description rescue nil)
62
+ }
63
+ end
64
+
18
65
  def to_label
19
66
  "#{description}"
20
67
  end
21
68
 
69
+ def get_sku
70
+ if self.sku.blank?
71
+ self.product_type_sku
72
+ else
73
+ self.sku
74
+ end
75
+ end
76
+
77
+ def get_uom
78
+ if self.unit_of_measurement.nil?
79
+ self.product_type_unit_of_measurement
80
+ else
81
+ self.unit_of_measurement
82
+ end
83
+ end
84
+
22
85
  end