cats_core 1.5.16 → 1.5.18

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 (263) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -7
  3. data/app/controllers/cats/core/access_controller.rb +4 -4
  4. data/app/controllers/cats/core/application_controller.rb +4 -4
  5. data/app/controllers/cats/core/commodities_controller.rb +7 -7
  6. data/app/controllers/cats/core/commodity_categories_controller.rb +4 -4
  7. data/app/controllers/cats/core/dispatch_authorizations_controller.rb +30 -7
  8. data/app/controllers/cats/core/dispatch_plan_items_controller.rb +4 -4
  9. data/app/controllers/cats/core/dispatch_plans_controller.rb +10 -10
  10. data/app/controllers/cats/core/dispatch_transactions_controller.rb +5 -5
  11. data/app/controllers/cats/core/dispatches_controller.rb +19 -19
  12. data/app/controllers/cats/core/loans_controller.rb +1 -1
  13. data/app/controllers/cats/core/locations_controller.rb +4 -4
  14. data/app/controllers/cats/core/menus_controller.rb +1 -1
  15. data/app/controllers/cats/core/notifications_controller.rb +5 -5
  16. data/app/controllers/cats/core/purchase_orders_controller.rb +3 -3
  17. data/app/controllers/cats/core/receipt_authorizations_controller.rb +30 -18
  18. data/app/controllers/cats/core/receipt_transactions_controller.rb +4 -4
  19. data/app/controllers/cats/core/receipts_controller.rb +1 -1
  20. data/app/controllers/cats/core/roles_controller.rb +3 -3
  21. data/app/controllers/cats/core/round_beneficiaries_controller.rb +13 -13
  22. data/app/controllers/cats/core/round_plans_controller.rb +13 -13
  23. data/app/controllers/cats/core/routes_controller.rb +2 -2
  24. data/app/controllers/cats/core/spaces_controller.rb +1 -1
  25. data/app/controllers/cats/core/stack_transactions_controller.rb +3 -3
  26. data/app/controllers/cats/core/stacks_controller.rb +15 -7
  27. data/app/controllers/cats/core/stores_controller.rb +14 -14
  28. data/app/controllers/cats/core/swaps_controller.rb +2 -2
  29. data/app/controllers/cats/core/transporters_controller.rb +1 -1
  30. data/app/controllers/cats/core/users_controller.rb +24 -12
  31. data/app/controllers/concerns/cats/core/common.rb +24 -23
  32. data/app/helpers/cats/core/document_helper.rb +1 -1
  33. data/app/models/cats/core/authorization.rb +9 -9
  34. data/app/models/cats/core/beneficiary.rb +6 -6
  35. data/app/models/cats/core/beneficiary_plan_item.rb +9 -9
  36. data/app/models/cats/core/beneficiary_round_plan_item.rb +2 -2
  37. data/app/models/cats/core/cash_donation.rb +1 -1
  38. data/app/models/cats/core/commodity.rb +47 -33
  39. data/app/models/cats/core/commodity_donation.rb +2 -2
  40. data/app/models/cats/core/commodity_substitution.rb +15 -7
  41. data/app/models/cats/core/contract_item.rb +2 -2
  42. data/app/models/cats/core/dispatch.rb +36 -21
  43. data/app/models/cats/core/dispatch_authorization.rb +31 -5
  44. data/app/models/cats/core/dispatch_plan.rb +19 -10
  45. data/app/models/cats/core/dispatch_plan_item.rb +27 -14
  46. data/app/models/cats/core/dispatch_transaction.rb +15 -5
  47. data/app/models/cats/core/gift_certificate.rb +3 -3
  48. data/app/models/cats/core/hub_authorization.rb +7 -7
  49. data/app/models/cats/core/loan.rb +2 -2
  50. data/app/models/cats/core/location.rb +12 -8
  51. data/app/models/cats/core/lost_commodity.rb +2 -2
  52. data/app/models/cats/core/notification.rb +2 -2
  53. data/app/models/cats/core/offer_item.rb +4 -4
  54. data/app/models/cats/core/plan.rb +9 -9
  55. data/app/models/cats/core/plan_item.rb +5 -5
  56. data/app/models/cats/core/plan_item_detail.rb +2 -2
  57. data/app/models/cats/core/project.rb +1 -1
  58. data/app/models/cats/core/purchase_order.rb +5 -5
  59. data/app/models/cats/core/ration.rb +1 -1
  60. data/app/models/cats/core/receipt.rb +5 -5
  61. data/app/models/cats/core/receipt_authorization.rb +6 -2
  62. data/app/models/cats/core/receipt_transaction.rb +8 -4
  63. data/app/models/cats/core/rhn_request.rb +8 -8
  64. data/app/models/cats/core/role_menu.rb +1 -1
  65. data/app/models/cats/core/round_beneficiary.rb +10 -2
  66. data/app/models/cats/core/round_plan.rb +15 -11
  67. data/app/models/cats/core/round_plan_item.rb +9 -5
  68. data/app/models/cats/core/round_plan_item_detail.rb +3 -3
  69. data/app/models/cats/core/round_ration.rb +2 -2
  70. data/app/models/cats/core/route.rb +12 -8
  71. data/app/models/cats/core/stack.rb +52 -34
  72. data/app/models/cats/core/stack_transaction.rb +3 -3
  73. data/app/models/cats/core/stacking_rule.rb +2 -2
  74. data/app/models/cats/core/store.rb +29 -7
  75. data/app/models/cats/core/swap.rb +5 -5
  76. data/app/models/cats/core/transaction.rb +6 -6
  77. data/app/models/cats/core/transport_bid.rb +13 -13
  78. data/app/models/cats/core/transport_bid_item.rb +2 -2
  79. data/app/models/cats/core/transport_offer.rb +3 -3
  80. data/app/models/cats/core/transport_order.rb +8 -8
  81. data/app/models/cats/core/transport_order_item.rb +2 -2
  82. data/app/models/cats/core/transport_plan.rb +7 -7
  83. data/app/models/cats/core/transport_plan_item.rb +2 -2
  84. data/app/models/cats/core/transport_requisition.rb +9 -9
  85. data/app/models/cats/core/transport_requisition_detail.rb +2 -2
  86. data/app/models/cats/core/transport_requisition_item.rb +3 -3
  87. data/app/models/cats/core/transporter.rb +4 -0
  88. data/app/models/cats/core/unit_conversion.rb +4 -4
  89. data/app/models/cats/core/unit_of_measure.rb +4 -4
  90. data/app/models/cats/core/user.rb +11 -11
  91. data/app/models/concerns/cats/core/dispatchable.rb +3 -3
  92. data/app/notifications/cats/core/allocation_notification.rb +1 -1
  93. data/app/notifications/cats/core/dispatch_authorization_notification.rb +35 -0
  94. data/app/notifications/cats/core/dispatch_notification.rb +1 -1
  95. data/app/notifications/cats/core/receipt_authorization_notification.rb +1 -1
  96. data/app/notifications/cats/core/round_plan_notification.rb +1 -1
  97. data/app/notifications/cats/core/simple_notification.rb +1 -1
  98. data/app/serializers/cats/core/cash_donation_serializer.rb +1 -1
  99. data/app/serializers/cats/core/commodity_donation_serializer.rb +2 -2
  100. data/app/serializers/cats/core/commodity_serializer.rb +2 -2
  101. data/app/serializers/cats/core/dispatch_authorization_serializer.rb +2 -2
  102. data/app/serializers/cats/core/dispatch_plan_item_serializer.rb +3 -3
  103. data/app/serializers/cats/core/dispatch_plan_serializer.rb +1 -1
  104. data/app/serializers/cats/core/dispatch_serializer.rb +2 -2
  105. data/app/serializers/cats/core/dispatch_transaction_serializer.rb +1 -1
  106. data/app/serializers/cats/core/loan_serializer.rb +1 -1
  107. data/app/serializers/cats/core/purchase_order_serializer.rb +2 -2
  108. data/app/serializers/cats/core/receipt_authorization_serializer.rb +2 -2
  109. data/app/serializers/cats/core/receipt_serializer.rb +1 -1
  110. data/app/serializers/cats/core/receipt_transaction_serializer.rb +2 -2
  111. data/app/serializers/cats/core/round_beneficiary_serializer.rb +1 -1
  112. data/app/serializers/cats/core/round_plan_serializer.rb +1 -1
  113. data/app/serializers/cats/core/stack_serializer.rb +1 -1
  114. data/app/serializers/cats/core/store_serializer.rb +1 -1
  115. data/app/serializers/cats/core/swap_serializer.rb +2 -2
  116. data/app/services/cats/core/authorization_service.rb +36 -18
  117. data/app/services/cats/core/beneficiary_service.rb +11 -11
  118. data/app/services/cats/core/dispatch_plan_service.rb +10 -10
  119. data/app/services/cats/core/dispatch_service.rb +31 -31
  120. data/app/services/cats/core/notification_service.rb +5 -5
  121. data/app/services/cats/core/round_plan_service.rb +23 -23
  122. data/app/services/cats/core/space_service.rb +11 -11
  123. data/app/services/cats/core/stack_service.rb +10 -10
  124. data/app/services/cats/core/token_auth_service.rb +4 -4
  125. data/app/services/cats/core/user_service.rb +19 -0
  126. data/app/utils/cats/core/util.rb +1 -1
  127. data/config/routes.rb +110 -105
  128. data/config/spring.rb +1 -0
  129. data/db/migrate/20210715114910_create_cats_core_users.rb +3 -3
  130. data/db/migrate/20210715120018_create_cats_core_roles.rb +14 -14
  131. data/db/migrate/20210715121244_create_cats_core_menus.rb +3 -3
  132. data/db/migrate/20210715122141_create_cats_core_menu_items.rb +3 -3
  133. data/db/migrate/20210715122423_create_cats_core_role_menus.rb +13 -13
  134. data/db/migrate/20210717031810_create_cats_core_plans.rb +4 -4
  135. data/db/migrate/20210717032024_create_cats_core_plan_items.rb +18 -18
  136. data/db/migrate/20210717032260_create_cats_core_beneficiary_categories.rb +3 -3
  137. data/db/migrate/20210717032270_create_cats_core_rations.rb +10 -10
  138. data/db/migrate/20210717032290_create_cats_core_beneficiary_plan_items.rb +7 -7
  139. data/db/migrate/20210717032295_create_cats_core_plan_item_details.rb +7 -7
  140. data/db/migrate/20210717032330_create_cats_core_commodity_donations.rb +12 -12
  141. data/db/migrate/20210717032408_create_cats_core_cash_donations.rb +6 -6
  142. data/db/migrate/20210717032602_create_cats_core_gift_certificates.rb +12 -12
  143. data/db/migrate/20210717032855_create_cats_core_purchase_orders.rb +12 -12
  144. data/db/migrate/20210717032927_create_cats_core_projects.rb +3 -3
  145. data/db/migrate/20210717033223_create_cats_core_commodities.rb +10 -10
  146. data/db/migrate/20210717140855_create_cats_core_stores.rb +3 -3
  147. data/db/migrate/20210717171101_create_cats_core_stacks.rb +11 -11
  148. data/db/migrate/20210718040129_create_cats_core_routes.rb +9 -9
  149. data/db/migrate/20210718042755_create_cats_core_rhn_requests.rb +6 -6
  150. data/db/migrate/20210718043328_create_cats_core_dispatch_plans.rb +7 -7
  151. data/db/migrate/20210718043401_create_cats_core_dispatch_plan_items.rb +17 -17
  152. data/db/migrate/20210718045516_create_cats_core_dispatches.rb +13 -13
  153. data/db/migrate/20210718055414_create_cats_core_dispatch_authorizations.rb +13 -13
  154. data/db/migrate/20210718202957_create_cats_core_dispatch_transactions.rb +11 -11
  155. data/db/migrate/20210727074646_create_cats_core_receipt_authorizations.rb +13 -13
  156. data/db/migrate/20210727105834_create_cats_core_receipts.rb +6 -6
  157. data/db/migrate/20210728041505_create_cats_core_lost_commodities.rb +6 -6
  158. data/db/migrate/20210814160628_create_cats_core_receipt_transactions.rb +10 -10
  159. data/db/migrate/20210814175406_create_cats_core_stack_transactions.rb +10 -10
  160. data/db/migrate/20211024063240_add_status_to_cats_core_rhn_requests.rb +1 -1
  161. data/db/migrate/20211030133752_add_status_to_cats_core_commodities.rb +1 -1
  162. data/db/migrate/20211215114737_create_cats_core_transport_plans.rb +4 -4
  163. data/db/migrate/20211215114835_create_cats_core_transport_plan_items.rb +9 -9
  164. data/db/migrate/20211215121151_create_cats_core_transport_bids.rb +4 -4
  165. data/db/migrate/20211215124452_create_cats_core_transport_bid_items.rb +10 -10
  166. data/db/migrate/20211229160125_create_cats_core_transport_offers.rb +7 -7
  167. data/db/migrate/20211229160126_create_cats_core_offer_items.rb +6 -6
  168. data/db/migrate/20211229160127_create_cats_core_transport_contracts.rb +6 -6
  169. data/db/migrate/20211229160128_create_cats_core_contract_items.rb +9 -9
  170. data/db/migrate/20211229160129_create_cats_core_commodity_substitutions.rb +10 -10
  171. data/db/migrate/20220103152802_create_cats_core_tenderers.rb +6 -6
  172. data/db/migrate/20220107121752_create_cats_core_round_plans.rb +7 -7
  173. data/db/migrate/20220107122280_create_cats_core_round_rations.rb +12 -12
  174. data/db/migrate/20220107125025_create_cats_core_round_plan_items.rb +19 -19
  175. data/db/migrate/20220107126025_create_cats_core_beneficiary_round_plan_items.rb +8 -8
  176. data/db/migrate/20220107132433_create_cats_core_round_plan_item_details.rb +9 -9
  177. data/db/migrate/20220209083928_create_cats_core_hub_authorizations.rb +12 -12
  178. data/db/migrate/20220416143416_create_cats_core_unit_conversions.rb +6 -6
  179. data/db/migrate/20220417105839_create_cats_core_transport_requisitions.rb +12 -12
  180. data/db/migrate/20220417123835_create_cats_core_transport_requisition_items.rb +9 -9
  181. data/db/migrate/20220417151821_create_cats_core_transport_requisition_details.rb +6 -6
  182. data/db/migrate/20220506082329_create_cats_core_transport_orders.rb +10 -10
  183. data/db/migrate/20220506083042_create_cats_core_transport_order_items.rb +13 -13
  184. data/db/migrate/20220511082354_create_cats_core_beneficiaries.rb +6 -6
  185. data/db/migrate/20220626063501_create_cats_core_loans.rb +6 -6
  186. data/db/migrate/20220626063757_create_cats_core_swaps.rb +12 -12
  187. data/db/migrate/20220626132050_create_cats_core_round_beneficiaries.rb +13 -13
  188. data/db/migrate/20220923190857_create_cats_core_application_settings.rb +3 -3
  189. data/lib/cats/core/engine.rb +4 -4
  190. data/lib/cats/core/version.rb +1 -1
  191. data/lib/cats_core.rb +8 -8
  192. data/spec/factories/cats/core/application_modules.rb +1 -1
  193. data/spec/factories/cats/core/application_settings.rb +1 -1
  194. data/spec/factories/cats/core/beneficiaries.rb +3 -3
  195. data/spec/factories/cats/core/beneficiary_categories.rb +1 -1
  196. data/spec/factories/cats/core/beneficiary_plan_items.rb +1 -1
  197. data/spec/factories/cats/core/beneficiary_round_plan_items.rb +1 -1
  198. data/spec/factories/cats/core/cash_donations.rb +1 -1
  199. data/spec/factories/cats/core/commodities.rb +1 -1
  200. data/spec/factories/cats/core/commodity_categories.rb +1 -1
  201. data/spec/factories/cats/core/commodity_donations.rb +1 -1
  202. data/spec/factories/cats/core/commodity_substitutions.rb +2 -2
  203. data/spec/factories/cats/core/contract_items.rb +1 -1
  204. data/spec/factories/cats/core/currencies.rb +1 -1
  205. data/spec/factories/cats/core/dispatch_authorizations.rb +7 -11
  206. data/spec/factories/cats/core/dispatch_plan_items.rb +16 -1
  207. data/spec/factories/cats/core/dispatch_plans.rb +1 -1
  208. data/spec/factories/cats/core/dispatch_transactions.rb +2 -4
  209. data/spec/factories/cats/core/dispatches.rb +16 -25
  210. data/spec/factories/cats/core/donors.rb +1 -1
  211. data/spec/factories/cats/core/gift_certificates.rb +1 -1
  212. data/spec/factories/cats/core/hub_authorizations.rb +1 -1
  213. data/spec/factories/cats/core/loans.rb +1 -1
  214. data/spec/factories/cats/core/locations.rb +6 -6
  215. data/spec/factories/cats/core/lost_commodities.rb +1 -1
  216. data/spec/factories/cats/core/menu_items.rb +1 -1
  217. data/spec/factories/cats/core/menus.rb +1 -1
  218. data/spec/factories/cats/core/notification_rules.rb +1 -1
  219. data/spec/factories/cats/core/notifications.rb +2 -2
  220. data/spec/factories/cats/core/offer_items.rb +1 -1
  221. data/spec/factories/cats/core/operators.rb +1 -1
  222. data/spec/factories/cats/core/plan_item_details.rb +1 -1
  223. data/spec/factories/cats/core/plan_items.rb +1 -1
  224. data/spec/factories/cats/core/plans.rb +1 -1
  225. data/spec/factories/cats/core/programs.rb +1 -1
  226. data/spec/factories/cats/core/projects.rb +1 -1
  227. data/spec/factories/cats/core/purchase_orders.rb +1 -1
  228. data/spec/factories/cats/core/rations.rb +1 -1
  229. data/spec/factories/cats/core/receipt_authorizations.rb +1 -1
  230. data/spec/factories/cats/core/receipt_transactions.rb +2 -2
  231. data/spec/factories/cats/core/receipts.rb +1 -1
  232. data/spec/factories/cats/core/rhn_requests.rb +1 -1
  233. data/spec/factories/cats/core/role_menus.rb +1 -1
  234. data/spec/factories/cats/core/roles.rb +1 -1
  235. data/spec/factories/cats/core/round_beneficiaries.rb +1 -1
  236. data/spec/factories/cats/core/round_plan_item_details.rb +3 -3
  237. data/spec/factories/cats/core/round_plan_items.rb +1 -1
  238. data/spec/factories/cats/core/round_plans.rb +1 -1
  239. data/spec/factories/cats/core/round_rations.rb +1 -1
  240. data/spec/factories/cats/core/routes.rb +1 -1
  241. data/spec/factories/cats/core/stack_transactions.rb +1 -1
  242. data/spec/factories/cats/core/stacking_rules.rb +1 -1
  243. data/spec/factories/cats/core/stacks.rb +1 -1
  244. data/spec/factories/cats/core/stores.rb +1 -1
  245. data/spec/factories/cats/core/suppliers.rb +1 -1
  246. data/spec/factories/cats/core/swaps.rb +1 -1
  247. data/spec/factories/cats/core/tenderers.rb +1 -1
  248. data/spec/factories/cats/core/transport_bid_items.rb +1 -1
  249. data/spec/factories/cats/core/transport_bids.rb +1 -1
  250. data/spec/factories/cats/core/transport_contracts.rb +1 -1
  251. data/spec/factories/cats/core/transport_offers.rb +1 -1
  252. data/spec/factories/cats/core/transport_order_items.rb +1 -1
  253. data/spec/factories/cats/core/transport_orders.rb +1 -1
  254. data/spec/factories/cats/core/transport_plan_items.rb +1 -1
  255. data/spec/factories/cats/core/transport_plans.rb +1 -1
  256. data/spec/factories/cats/core/transport_requisition_details.rb +1 -1
  257. data/spec/factories/cats/core/transport_requisition_items.rb +1 -1
  258. data/spec/factories/cats/core/transport_requisitions.rb +1 -1
  259. data/spec/factories/cats/core/transporters.rb +1 -1
  260. data/spec/factories/cats/core/unit_conversions.rb +1 -1
  261. data/spec/factories/cats/core/unit_of_measures.rb +1 -1
  262. data/spec/factories/cats/core/users.rb +2 -2
  263. metadata +19 -2
@@ -2,37 +2,37 @@ module Cats
2
2
  module Core
3
3
  class Commodity < ApplicationRecord
4
4
  # Statuses
5
- DRAFT = 'Draft'.freeze
6
- APPROVED = 'Approved'.freeze
7
- ALLOCATED = 'Allocated'.freeze
5
+ DRAFT = "Draft".freeze
6
+ APPROVED = "Approved".freeze
7
+ ALLOCATED = "Allocated".freeze
8
8
  STATUSES = [DRAFT, APPROVED, ALLOCATED].freeze
9
9
 
10
10
  # Grades
11
- GRADE1 = 'Grade1'.freeze
12
- GRADE2 = 'Grade2'.freeze
13
- GRADE3 = 'Grade3'.freeze
11
+ GRADE1 = "Grade1".freeze
12
+ GRADE2 = "Grade2".freeze
13
+ GRADE3 = "Grade3".freeze
14
14
  COMMODITY_GRADES = [GRADE1, GRADE2, GRADE3].freeze
15
15
 
16
16
  # Commodity statuses
17
- GOOD = 'Good'.freeze
18
- DAMAGED = 'Damaged'.freeze
19
- LEAKAGE = 'Leakage'.freeze
20
- WET = 'Wet'.freeze
21
- MOLDY = 'Moldy'.freeze
22
- INFESTED = 'Infested'.freeze
23
- INSECT_INFECTED = 'Insect Infected'.freeze
24
- FAECES_FROM_RODENTS = 'Faeces From Rodents'.freeze
25
- UNDERWEIGHT_PACKAGE = 'Underweight Package'.freeze
17
+ GOOD = "Good".freeze
18
+ DAMAGED = "Damaged".freeze
19
+ LEAKAGE = "Leakage".freeze
20
+ WET = "Wet".freeze
21
+ MOLDY = "Moldy".freeze
22
+ INFESTED = "Infested".freeze
23
+ INSECT_INFECTED = "Insect Infected".freeze
24
+ FAECES_FROM_RODENTS = "Faeces From Rodents".freeze
25
+ UNDERWEIGHT_PACKAGE = "Underweight Package".freeze
26
26
  COMMODITY_STATUSES = [GOOD, DAMAGED, LEAKAGE, WET, MOLDY, INFESTED, INSECT_INFECTED, FAECES_FROM_RODENTS,
27
- UNDERWEIGHT_PACKAGE].freeze
27
+ UNDERWEIGHT_PACKAGE].freeze
28
28
 
29
29
  # Arrival Statuses
30
- AT_SOURCE = 'At Source'.freeze
31
- AT_ORIGIN_PORT = 'At Origin Port'.freeze
32
- IN_LOCAL_TRANSIT = 'In Local Transit'.freeze
33
- IN_INTERNATIONAL_TRANSIT = 'In International Transit'.freeze
34
- AT_DESTINATION_PORT = 'At Destination Port'.freeze
35
- ARRIVED = 'Arrived'.freeze
30
+ AT_SOURCE = "At Source".freeze
31
+ AT_ORIGIN_PORT = "At Origin Port".freeze
32
+ IN_LOCAL_TRANSIT = "In Local Transit".freeze
33
+ IN_INTERNATIONAL_TRANSIT = "In International Transit".freeze
34
+ AT_DESTINATION_PORT = "At Destination Port".freeze
35
+ ARRIVED = "Arrived".freeze
36
36
  ARRIVAL_STATUSES = [
37
37
  AT_SOURCE,
38
38
  AT_ORIGIN_PORT,
@@ -44,18 +44,18 @@ module Cats
44
44
 
45
45
  belongs_to :unit_of_measure
46
46
  belongs_to :project
47
- belongs_to :package_unit, class_name: 'Cats::Core::UnitOfMeasure', optional: true
47
+ belongs_to :package_unit, class_name: "Cats::Core::UnitOfMeasure", optional: true
48
48
 
49
49
  validates :best_use_before, presence: true
50
50
  validates :batch_no, presence: true, uniqueness: true
51
- validates :quantity, presence: true, numericality: { greater_than: 0 }
52
- validates :volume_per_metric_ton, numericality: { greater_than: 0, allow_nil: true }
53
- validates :arrival_status, presence: true, inclusion: { in: ARRIVAL_STATUSES }
54
- validates :status, presence: true, inclusion: { in: STATUSES }
55
- validates :commodity_grade, inclusion: { in: COMMODITY_GRADES }, allow_nil: true
51
+ validates :quantity, presence: true, numericality: {greater_than: 0}
52
+ validates :volume_per_metric_ton, numericality: {greater_than: 0, allow_nil: true}
53
+ validates :arrival_status, presence: true, inclusion: {in: ARRIVAL_STATUSES}
54
+ validates :status, presence: true, inclusion: {in: STATUSES}
55
+ validates :commodity_grade, inclusion: {in: COMMODITY_GRADES}, allow_nil: true
56
56
  validate :validate_updateability, on: :update
57
57
 
58
- delegate(:abbreviation, to: :unit_of_measure, prefix: 'unit')
58
+ delegate(:abbreviation, to: :unit_of_measure, prefix: "unit")
59
59
  delegate(:code, to: :project, prefix: true)
60
60
  delegate(:abbreviation, to: :package_unit, prefix: true, allow_nil: true)
61
61
 
@@ -72,18 +72,18 @@ module Cats
72
72
 
73
73
  return if status_changed?
74
74
 
75
- errors.add(:base, 'Commodity cannot be updated because it is in approved state.') if status == APPROVED
75
+ errors.add(:base, "Commodity cannot be updated because it is in approved state.") if status == APPROVED
76
76
  end
77
77
 
78
78
  def approve
79
- raise(StandardError, 'Commodity already approved.') if status == APPROVED
79
+ raise(StandardError, "Commodity already approved.") if status == APPROVED
80
80
 
81
81
  result = false
82
82
  Cats::Core::Commodity.transaction do
83
83
  self.status = APPROVED
84
84
  save!
85
- store = Cats::Core::Store.find_by(code: 'SUP-STORE')
86
- raise(StandardError, 'Supplier store does not exist.') unless store
85
+ store = Cats::Core::Store.find_by(code: "SUP-STORE")
86
+ raise(StandardError, "Supplier store does not exist.") unless store
87
87
 
88
88
  stack = Cats::Core::Stack.create!(
89
89
  code: batch_no,
@@ -108,6 +108,20 @@ module Cats
108
108
  requests = RhnRequest.where(commodity: self)
109
109
  UnitConversion.harmonized_total(requests, unit_of_measure)
110
110
  end
111
+
112
+ def self.ransackable_attributes(auth_object = nil)
113
+ [
114
+ "arrival_status",
115
+ "batch_no",
116
+ "best_use_before",
117
+ "commodity_grade",
118
+ "package_unit_id",
119
+ "project_id",
120
+ "quantity",
121
+ "shipping_reference",
122
+ "status"
123
+ ]
124
+ end
111
125
  end
112
126
  end
113
127
  end
@@ -3,9 +3,9 @@ module Cats
3
3
  class CommodityDonation < Donation
4
4
  belongs_to :plan, optional: true
5
5
  belongs_to :commodity_category
6
- belongs_to :unit, class_name: 'UnitOfMeasure'
6
+ belongs_to :unit, class_name: "UnitOfMeasure"
7
7
 
8
- validates :quantity, presence: true, numericality: { greater_than: 0 }
8
+ validates :quantity, presence: true, numericality: {greater_than: 0}
9
9
 
10
10
  delegate(:reference_no, to: :plan, prefix: true, allow_nil: true)
11
11
  delegate(:name, to: :commodity_category, prefix: true)
@@ -2,21 +2,29 @@ module Cats
2
2
  module Core
3
3
  class CommoditySubstitution < ApplicationRecord
4
4
  belongs_to :program
5
- belongs_to :commodity, class_name: 'Cats::Core::CommodityCategory'
6
- belongs_to :replaced_by, class_name: 'Cats::Core::CommodityCategory'
5
+ belongs_to :commodity, class_name: "Cats::Core::CommodityCategory"
6
+ belongs_to :replaced_by, class_name: "Cats::Core::CommodityCategory"
7
7
 
8
8
  validates :ratio, presence: true
9
- validates :program_id, uniqueness: { scope: %i[commodity_id replaced_by_id] }
9
+ validates :program_id, uniqueness: {scope: %i[commodity_id replaced_by_id]}
10
10
  validate :validate_ratio
11
11
 
12
12
  def validate_ratio
13
13
  return unless ratio
14
14
 
15
- left, right = ratio.split(':')
16
- left_correct = Integer(left).is_a?(Integer) rescue false
17
- right_correct = Integer(right).is_a?(Integer) rescue false
15
+ left, right = ratio.split(":")
16
+ left_correct = begin
17
+ Integer(left).is_a?(Integer)
18
+ rescue
19
+ false
20
+ end
21
+ right_correct = begin
22
+ Integer(right).is_a?(Integer)
23
+ rescue
24
+ false
25
+ end
18
26
 
19
- errors.add(:ratio, 'is not in correct format.') unless left_correct && right_correct
27
+ errors.add(:ratio, "is not in correct format.") unless left_correct && right_correct
20
28
  end
21
29
  end
22
30
  end
@@ -3,9 +3,9 @@ module Cats
3
3
  class ContractItem < ApplicationRecord
4
4
  belongs_to :transport_contract
5
5
  belongs_to :route
6
- belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
6
+ belongs_to :unit, class_name: "Cats::Core::UnitOfMeasure"
7
7
 
8
- validates :price, presence: true, numericality: { greater_than: 0 }
8
+ validates :price, presence: true, numericality: {greater_than: 0}
9
9
 
10
10
  delegate(:name, to: :route, prefix: true)
11
11
  delegate(:contract_no, to: :transport_contract, prefix: false)
@@ -1,19 +1,19 @@
1
1
  module Cats
2
2
  module Core
3
3
  class Dispatch < ApplicationRecord
4
- DRAFT = 'Draft'.freeze
5
- APPROVED = 'Approved'.freeze
6
- READY_TO_START = 'Ready to Start'.freeze
7
- STARTED = 'Started'.freeze
8
- RECEIVED = 'Received'.freeze
9
- STACKED = 'Stacked'.freeze
4
+ DRAFT = "Draft".freeze
5
+ APPROVED = "Approved".freeze
6
+ READY_TO_START = "Ready to Start".freeze
7
+ STARTED = "Started".freeze
8
+ RECEIVED = "Received".freeze
9
+ STACKED = "Stacked".freeze
10
10
 
11
11
  DISPATCH_STATUSES = [DRAFT, APPROVED, READY_TO_START, STARTED, RECEIVED, STACKED].freeze
12
12
 
13
- belongs_to :prepared_by, class_name: 'Cats::Core::User'
13
+ belongs_to :prepared_by, class_name: "Cats::Core::User"
14
14
  belongs_to :transporter
15
15
  belongs_to :dispatch_plan_item
16
- belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
16
+ belongs_to :unit, class_name: "Cats::Core::UnitOfMeasure"
17
17
 
18
18
  has_many :dispatch_authorizations
19
19
  has_many :receipt_authorizations
@@ -21,10 +21,10 @@ module Cats
21
21
  has_many :receipt_transactions, through: :receipt_authorizations
22
22
 
23
23
  validates :reference_no, :plate_no, :driver_name, :driver_phone, :quantity, :commodity_status, presence: true
24
- validates :dispatch_status, presence: true, inclusion: { in: DISPATCH_STATUSES }
24
+ validates :dispatch_status, presence: true, inclusion: {in: DISPATCH_STATUSES}
25
25
  validates :reference_no, uniqueness: true
26
- validates :quantity, numericality: { greater_than_or_equal_to: 0 }
27
- validates :commodity_status, inclusion: { in: Cats::Core::Commodity::COMMODITY_STATUSES }
26
+ validates :quantity, numericality: {greater_than_or_equal_to: 0}
27
+ validates :commodity_status, inclusion: {in: Cats::Core::Commodity::COMMODITY_STATUSES}
28
28
  validate :validate_dispatch_plan_status
29
29
 
30
30
  delegate(:name, to: :transporter, prefix: true)
@@ -39,14 +39,14 @@ module Cats
39
39
  return unless dispatch_plan_item
40
40
 
41
41
  status = dispatch_plan_item.dispatch_plan.status
42
- errors.add(:dispatch_plan, 'should be approved first.') unless status == DispatchPlan::APPROVED
42
+ errors.add(:dispatch_plan, "should be approved first.") unless status == DispatchPlan::APPROVED
43
43
  end
44
44
 
45
45
  def approve
46
- raise(StandardError, 'Dispatch has to be in draft state.') unless dispatch_status == Dispatch::DRAFT
46
+ raise(StandardError, "Dispatch has to be in draft state.") unless dispatch_status == Dispatch::DRAFT
47
47
 
48
48
  # Check if dispatch has authorizations
49
- raise(StandardError, 'Dispatch has no authorizations.') unless dispatch_authorizations.count.positive?
49
+ raise(StandardError, "Dispatch has no authorizations.") unless dispatch_authorizations.count.positive?
50
50
 
51
51
  dispatch_total = UnitConversion.harmonized_total(dispatch_authorizations, unit)
52
52
  self.dispatch_status = APPROVED
@@ -67,7 +67,7 @@ module Cats
67
67
 
68
68
  # Check if destination is an FDP and create receipt authorization
69
69
  location = dispatch_plan_item.destination
70
- authorized_by = User.find_by(first_name: 'SYSTEM-USER')
70
+ authorized_by = User.find_by(first_name: "SYSTEM-USER")
71
71
  return unless location.location_type == Location::FDP
72
72
 
73
73
  store = location.fdp_store
@@ -83,7 +83,7 @@ module Cats
83
83
  end
84
84
 
85
85
  def receive
86
- raise(StandardError, 'Dispatch is not started.') unless dispatch_status == Dispatch::STARTED
86
+ raise(StandardError, "Dispatch is not started.") unless dispatch_status == Dispatch::STARTED
87
87
 
88
88
  self.dispatch_status = RECEIVED
89
89
  save!
@@ -102,10 +102,10 @@ module Cats
102
102
  def self.search_commodity(batch_no)
103
103
  commodity = Commodity.find_by(batch_no: batch_no)
104
104
  dispatches = Dispatch.includes(:dispatch_transactions)
105
- .joins(:transporter)
106
- .where(
107
- dispatch_status: [APPROVED, STARTED]
108
- )
105
+ .joins(:transporter)
106
+ .where(
107
+ dispatch_status: [APPROVED, STARTED]
108
+ )
109
109
  dispatches.map do |dispatch|
110
110
  {
111
111
  batch_no: batch_no,
@@ -114,10 +114,25 @@ module Cats
114
114
  unit: commodity.unit_abbreviation,
115
115
  location: dispatch.transporter.name,
116
116
  location_detail: "Plate No.: #{dispatch.plate_no}, Driver: #{dispatch.driver_name}",
117
- stack: ''
117
+ stack: ""
118
118
  }
119
119
  end
120
120
  end
121
+
122
+ def self.ransackable_attributes(auth_object = nil)
123
+ [
124
+ "commodity_status",
125
+ "dispatch_plan_item_id",
126
+ "dispatch_status",
127
+ "driver_name",
128
+ "driver_phone",
129
+ "plate_no",
130
+ "prepared_by_id",
131
+ "quantity",
132
+ "transporter_id",
133
+ "unit_id"
134
+ ]
135
+ end
121
136
  end
122
137
  end
123
138
  end
@@ -3,23 +3,49 @@ module Cats
3
3
  class DispatchAuthorization < Authorization
4
4
  has_many :dispatch_transactions
5
5
 
6
- validate :validate_quantity
6
+ validate :validate_dispatch_plan_item_quantity, :validate_commodity_availability_in_store
7
7
 
8
8
  def validate_dispatch_status
9
9
  return unless dispatch
10
10
 
11
- errors.add(:dispatch, 'is not in draft state.') unless dispatch.dispatch_status == Dispatch::DRAFT
11
+ errors.add(:dispatch, "is not in draft state.") unless dispatch.dispatch_status == Dispatch::DRAFT
12
12
  end
13
13
 
14
- def validate_quantity
14
+ def validate_dispatch_plan_item_quantity
15
+ return if status == CONFIRMED
16
+
15
17
  return unless dispatch && quantity && unit
16
18
 
17
19
  authorizations = DispatchAuthorization.joins(:dispatch).where(
18
- dispatch: { dispatch_plan_item_id: dispatch.dispatch_plan_item_id }
20
+ dispatch: {dispatch_plan_item_id: dispatch.dispatch_plan_item_id}
19
21
  )
20
22
  quantity_attribs = %w[dispatch_plan_item quantity]
21
23
  unit_attribs = %w[dispatch_plan_item unit]
22
- ValidationUtil.validate_quantity(self, 'dispatch', authorizations, 'allocated', quantity_attribs, unit_attribs)
24
+ ValidationUtil.validate_quantity(self, "dispatch", authorizations, "allocated", quantity_attribs, unit_attribs)
25
+ end
26
+
27
+ def validate_commodity_availability_in_store
28
+ return if status == CONFIRMED
29
+
30
+ return unless dispatch && store && quantity && unit
31
+
32
+ commodity = dispatch.dispatch_plan_item.commodity
33
+ stacks = Stack.where(store: store, commodity: commodity)
34
+ if stacks.count == 0
35
+ errors.add(:store, "does not contain commodity #{commodity.batch_no}.")
36
+ return
37
+ end
38
+ stack_quantity = stacks.map { |s| UnitConversion.convert(s.unit, unit, s.quantity) }.sum
39
+ authorizations = DispatchAuthorization.where(dispatch: dispatch)
40
+ authorized = authorizations.map { |a| UnitConversion.convert(a.unit, unit, a.quantity) }.sum
41
+ authorized -= quantity_was if persisted?
42
+
43
+ diff = quantity + authorized - stack_quantity
44
+ errors.add(:quantity, "exceeds available quantity in store by #{diff} #{unit.abbreviation}.") if diff.positive?
45
+ end
46
+
47
+ def self.ransackable_attributes(auth_object = nil)
48
+ ["authorized_by_id", "dispatch_id", "quantity", "status", "store_id", "unit_id"]
23
49
  end
24
50
  end
25
51
  end
@@ -1,18 +1,18 @@
1
1
  module Cats
2
2
  module Core
3
3
  class DispatchPlan < ApplicationRecord
4
- DRAFT = 'Draft'.freeze
5
- APPROVED = 'Approved'.freeze
4
+ DRAFT = "Draft".freeze
5
+ APPROVED = "Approved".freeze
6
6
  STATUSES = [DRAFT, APPROVED].freeze
7
7
 
8
8
  belongs_to :dispatchable, polymorphic: true, optional: true
9
- belongs_to :prepared_by, class_name: 'Cats::Core::User'
10
- belongs_to :approved_by, class_name: 'Cats::Core::User', optional: true
9
+ belongs_to :prepared_by, class_name: "Cats::Core::User"
10
+ belongs_to :approved_by, class_name: "Cats::Core::User", optional: true
11
11
 
12
12
  has_many :dispatch_plan_items
13
13
 
14
14
  validates :reference_no, presence: true, uniqueness: true
15
- validates :status, inclusion: { in: STATUSES }
15
+ validates :status, inclusion: {in: STATUSES}
16
16
  validate :validate_dispatchable, on: :create
17
17
 
18
18
  delegate(:request_reference, to: :dispatchable, allow_nil: true)
@@ -33,18 +33,18 @@ module Cats
33
33
 
34
34
  return if dispatchable.status == RhnRequest::APPROVED
35
35
 
36
- errors.add(:dispatchable, 'is already completed.') if id.nil? && dispatchable.status == Dispatchable::COMPLETED
36
+ errors.add(:dispatchable, "is already completed.") if id.nil? && dispatchable.status == Dispatchable::COMPLETED
37
37
  end
38
38
 
39
39
  def approve
40
- raise(StandardError, 'Dispatch plan already approved.') if status == APPROVED
40
+ raise(StandardError, "Dispatch plan already approved.") if status == APPROVED
41
41
 
42
- raise(StandardError, 'Dispatch plan is empty.') if dispatch_plan_items.count.zero?
42
+ raise(StandardError, "Dispatch plan is empty.") if dispatch_plan_items.count.zero?
43
43
 
44
44
  # Raise error if the total dispatch plan quantity is not equal to the
45
45
  # dispatchable quantity
46
46
  if dispatchable.instance_of?(RhnRequest) && dispatchable.quantity != quantity
47
- raise(StandardError, 'Requested quantity and plan quantity do not match.')
47
+ raise(StandardError, "Requested quantity and plan quantity do not match.")
48
48
  end
49
49
 
50
50
  self.status = APPROVED
@@ -55,7 +55,7 @@ module Cats
55
55
  # A method which returns the total quantity in the dispatch plan
56
56
  # based on dispatch plan item quantities.
57
57
  def quantity
58
- raise(StandardError, 'Dispatchable must be RHN request.') unless dispatchable.instance_of?(RhnRequest)
58
+ raise(StandardError, "Dispatchable must be RHN request.") unless dispatchable.instance_of?(RhnRequest)
59
59
 
60
60
  UnitConversion.harmonized_total(dispatch_plan_items, dispatchable.unit)
61
61
  end
@@ -66,6 +66,15 @@ module Cats
66
66
 
67
67
  dispatchable.region.name
68
68
  end
69
+
70
+ def self.ransackable_attributes(auth_object = nil)
71
+ [
72
+ "approved_by_id",
73
+ "prepared_by_id",
74
+ "status",
75
+ "upstream"
76
+ ]
77
+ end
69
78
  end
70
79
  end
71
80
  end
@@ -1,25 +1,25 @@
1
1
  module Cats
2
2
  module Core
3
3
  class DispatchPlanItem < ApplicationRecord
4
- AUTHORIZED = 'Authorized'.freeze
5
- SOURCE_AUTHORIZED = 'Source Authorized'.freeze
6
- DESTINATION_AUTHORIZED = 'Destination Authorized'.freeze
7
- UNAUTHORIZED = 'Unauthorized'.freeze
4
+ AUTHORIZED = "Authorized".freeze
5
+ SOURCE_AUTHORIZED = "Source Authorized".freeze
6
+ DESTINATION_AUTHORIZED = "Destination Authorized".freeze
7
+ UNAUTHORIZED = "Unauthorized".freeze
8
8
  STATUSES = [AUTHORIZED, DESTINATION_AUTHORIZED, SOURCE_AUTHORIZED, UNAUTHORIZED].freeze
9
9
 
10
- belongs_to :source, class_name: 'Cats::Core::Location'
11
- belongs_to :destination, class_name: 'Cats::Core::Location'
10
+ belongs_to :source, class_name: "Cats::Core::Location"
11
+ belongs_to :destination, class_name: "Cats::Core::Location"
12
12
  belongs_to :dispatch_plan
13
13
  belongs_to :commodity
14
- belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
14
+ belongs_to :unit, class_name: "Cats::Core::UnitOfMeasure"
15
15
 
16
16
  has_many :dispatches
17
17
  has_many :hub_authorizations
18
18
 
19
19
  validates :reference_no, presence: true, uniqueness: true
20
- validates :commodity_status, presence: true, inclusion: { in: Commodity::COMMODITY_STATUSES }
21
- validates :quantity, presence: true, numericality: { greater_than: 0 }
22
- validates :status, presence: true, inclusion: { in: STATUSES }
20
+ validates :commodity_status, presence: true, inclusion: {in: Commodity::COMMODITY_STATUSES}
21
+ validates :quantity, presence: true, numericality: {greater_than: 0}
22
+ validates :status, presence: true, inclusion: {in: STATUSES}
23
23
 
24
24
  delegate(:reference_no, to: :dispatch_plan, prefix: :plan, allow_nil: true)
25
25
  delegate(:batch_no, :name, to: :commodity, prefix: true)
@@ -39,7 +39,7 @@ module Cats
39
39
  #
40
40
  def authorize
41
41
  count = hub_authorizations.count
42
- raise(StandardError, 'No authorization entries found.') if count.zero?
42
+ raise(StandardError, "No authorization entries found.") if count.zero?
43
43
 
44
44
  source_auth = hub_authorizations.where(authorization_type: HubAuthorization::SOURCE)
45
45
  dest_auth = hub_authorizations.where(authorization_type: HubAuthorization::DESTINATION)
@@ -47,14 +47,14 @@ module Cats
47
47
  if source_auth.count.positive? && dest_auth.count.zero? && status == SOURCE_AUTHORIZED
48
48
  raise(
49
49
  StandardError,
50
- 'Plan item already authorized by source. Destination hub authorizations are required.'
50
+ "Plan item already authorized by source. Destination hub authorizations are required."
51
51
  )
52
52
  end
53
53
 
54
54
  if source_auth.count.zero? && dest_auth.count.positive? && status == DESTINATION_AUTHORIZED
55
55
  raise(
56
56
  StandardError,
57
- 'Plan item already authorized by destination. Source hub authorizations are required.'
57
+ "Plan item already authorized by destination. Source hub authorizations are required."
58
58
  )
59
59
  end
60
60
 
@@ -80,13 +80,26 @@ module Cats
80
80
  return if quantity == self.quantity
81
81
 
82
82
  diff = self.quantity - quantity
83
- desc = type.split(' ')[0].downcase
83
+ desc = type.split(" ")[0].downcase
84
84
  amount = "#{diff} #{unit.abbreviation}"
85
85
  raise(
86
86
  StandardError,
87
87
  "Authorized #{desc} quantity is not the same as plan item quantity (#{amount} unaccounted for)."
88
88
  )
89
89
  end
90
+
91
+ def self.ransackable_attributes(auth_object = nil)
92
+ [
93
+ "commodity_id",
94
+ "commodity_status",
95
+ "destination_id",
96
+ "dispatch_plan_id",
97
+ "quantity",
98
+ "source_id",
99
+ "status",
100
+ "unit_id"
101
+ ]
102
+ end
90
103
  end
91
104
  end
92
105
  end
@@ -3,11 +3,10 @@ module Cats
3
3
  class DispatchTransaction < Transaction
4
4
  before_validation :set_unit
5
5
 
6
- belongs_to :source, class_name: 'Cats::Core::Stack'
6
+ belongs_to :source, class_name: "Cats::Core::Stack"
7
7
  belongs_to :dispatch_authorization
8
8
 
9
- validates :source_id, uniqueness: { scope: :dispatch_authorization_id }
10
- # validates :reference_no, presence: true
9
+ validates :source_id, uniqueness: {scope: :dispatch_authorization_id}
11
10
  validate :validate_dispatch
12
11
  validate :validate_source_quantity, :validate_authorized_quantity, unless: :skip_quantity_validation
13
12
 
@@ -35,7 +34,7 @@ module Cats
35
34
  return unless dispatch_authorization
36
35
 
37
36
  status = dispatch_authorization.dispatch.dispatch_status
38
- errors.add(:base, 'Dispatch must be approved first.') if status == Dispatch::DRAFT
37
+ errors.add(:base, "Dispatch must be approved first.") if status == Dispatch::DRAFT
39
38
  end
40
39
 
41
40
  def validate_source_quantity
@@ -56,7 +55,7 @@ module Cats
56
55
  return unless quantity && unit && dispatch_authorization
57
56
 
58
57
  transactions = DispatchTransaction.where(dispatch_authorization: dispatch_authorization)
59
- ValidationUtil.validate_quantity(self, 'dispatch_authorization', transactions, 'authorized')
58
+ ValidationUtil.validate_quantity(self, "dispatch_authorization", transactions, "authorized")
60
59
  end
61
60
 
62
61
  def skip_quantity_validation
@@ -67,6 +66,17 @@ module Cats
67
66
 
68
67
  ![Dispatch::DRAFT, Dispatch::APPROVED].include?(dispatch_authorization.dispatch.dispatch_status)
69
68
  end
69
+
70
+ def self.ransackable_attributes(auth_object = nil)
71
+ [
72
+ "dispatch_authorization_id",
73
+ "quantity",
74
+ "source_id",
75
+ "status",
76
+ "transaction_date",
77
+ "unit_id"
78
+ ]
79
+ end
70
80
  end
71
81
  end
72
82
  end
@@ -3,13 +3,13 @@ module Cats
3
3
  class GiftCertificate < ApplicationRecord
4
4
  belongs_to :donation, optional: true
5
5
  belongs_to :commodity_category
6
- belongs_to :unit, class_name: 'UnitOfMeasure'
6
+ belongs_to :unit, class_name: "UnitOfMeasure"
7
7
  belongs_to :currency
8
- belongs_to :destination_warehouse, class_name: 'Location'
8
+ belongs_to :destination_warehouse, class_name: "Location"
9
9
 
10
10
  validates :reference_no, presence: true, uniqueness: true
11
11
  validates :gift_date, :quantity, :requested_by, :customs_office, presence: true
12
- validates :quantity, numericality: { greater_than: 0 }
12
+ validates :quantity, numericality: {greater_than: 0}
13
13
 
14
14
  delegate(:name, to: :commodity_category, prefix: true)
15
15
  delegate(:name, to: :destination_warehouse, prefix: true)
@@ -3,18 +3,18 @@ module Cats
3
3
  class HubAuthorization < ApplicationRecord
4
4
  before_validation :set_unit
5
5
 
6
- SOURCE = 'Source'.freeze
7
- DESTINATION = 'Destination'.freeze
6
+ SOURCE = "Source".freeze
7
+ DESTINATION = "Destination".freeze
8
8
  AUTHORIZATION_TYPES = [SOURCE, DESTINATION].freeze
9
9
 
10
10
  belongs_to :dispatch_plan_item, optional: true
11
11
  belongs_to :store
12
- belongs_to :authorized_by, class_name: 'Cats::Core::User'
13
- belongs_to :unit, class_name: 'Cats::Core::UnitOfMeasure'
12
+ belongs_to :authorized_by, class_name: "Cats::Core::User"
13
+ belongs_to :unit, class_name: "Cats::Core::UnitOfMeasure"
14
14
 
15
15
  validates :quantity, :authorization_type, presence: true
16
- validates :quantity, numericality: { greater_than: 0 }
17
- validates :authorization_type, inclusion: { in: AUTHORIZATION_TYPES }
16
+ validates :quantity, numericality: {greater_than: 0}
17
+ validates :authorization_type, inclusion: {in: AUTHORIZATION_TYPES}
18
18
  validate :validate_quantity, on: %i[create update]
19
19
 
20
20
  delegate(:plan_reference_no, to: :dispatch_plan_item)
@@ -37,7 +37,7 @@ module Cats
37
37
  dispatch_plan_item: dispatch_plan_item,
38
38
  authorization_type: authorization_type
39
39
  )
40
- ValidationUtil.validate_quantity(self, 'dispatch_plan_item', authorizations, 'allocated')
40
+ ValidationUtil.validate_quantity(self, "dispatch_plan_item", authorizations, "allocated")
41
41
  end
42
42
  end
43
43
  end
@@ -2,11 +2,11 @@ module Cats
2
2
  module Core
3
3
  class Loan < ApplicationRecord
4
4
  belongs_to :commodity_category
5
- belongs_to :unit, class_name: 'UnitOfMeasure'
5
+ belongs_to :unit, class_name: "UnitOfMeasure"
6
6
 
7
7
  validates :reference_no, presence: true, uniqueness: true
8
8
  validates :lender, :agreement_date, presence: true
9
- validates :quantity, presence: true, numericality: { greater_than: 0 }
9
+ validates :quantity, presence: true, numericality: {greater_than: 0}
10
10
 
11
11
  delegate(:name, to: :commodity_category, prefix: true)
12
12
  delegate(:abbreviation, to: :unit, prefix: true)