cats_core 1.4.40 → 1.4.43

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/cats/core/cash_donations_controller.rb +19 -0
  3. data/app/controllers/cats/core/commodity_donations_controller.rb +22 -0
  4. data/app/controllers/cats/core/dispatch_plans_controller.rb +24 -0
  5. data/app/controllers/cats/core/loans_controller.rb +20 -0
  6. data/app/controllers/cats/core/purchase_orders_controller.rb +24 -0
  7. data/app/controllers/cats/core/round_beneficiaries_controller.rb +49 -0
  8. data/app/controllers/cats/core/swaps_controller.rb +21 -0
  9. data/app/models/cats/core/beneficiary.rb +9 -0
  10. data/app/models/cats/core/cash_donation.rb +11 -0
  11. data/app/models/cats/core/commodity_donation.rb +15 -0
  12. data/app/models/cats/core/dispatch_plan.rb +1 -1
  13. data/app/models/cats/core/donation.rb +2 -16
  14. data/app/models/cats/core/gift_certificate.rb +3 -23
  15. data/app/models/cats/core/loan.rb +15 -0
  16. data/app/models/cats/core/plan.rb +4 -0
  17. data/app/models/cats/core/project.rb +1 -0
  18. data/app/models/cats/core/purchase_order.rb +5 -13
  19. data/app/models/cats/core/rhn_request.rb +4 -4
  20. data/app/models/cats/core/round_beneficiary.rb +16 -0
  21. data/app/models/cats/core/round_plan.rb +2 -4
  22. data/app/models/cats/core/round_plan_item.rb +1 -0
  23. data/app/models/cats/core/swap.rb +19 -0
  24. data/app/models/concerns/cats/core/dispatchable.rb +8 -0
  25. data/app/serializers/cats/core/cash_donation_serializer.rb +8 -0
  26. data/app/serializers/cats/core/commodity_donation_serializer.rb +9 -0
  27. data/app/serializers/cats/core/loan_serializer.rb +8 -0
  28. data/app/serializers/cats/core/purchase_order_serializer.rb +9 -0
  29. data/app/serializers/cats/core/round_beneficiary_serializer.rb +8 -0
  30. data/app/serializers/cats/core/swap_serializer.rb +9 -0
  31. data/app/services/cats/core/beneficiary_service.rb +87 -0
  32. data/app/services/cats/core/dispatch_plan_service.rb +79 -0
  33. data/config/routes.rb +19 -0
  34. data/db/migrate/20210717032330_create_cats_core_commodity_donations.rb +29 -0
  35. data/db/migrate/20210717032408_create_cats_core_cash_donations.rb +20 -0
  36. data/db/migrate/20210717032602_create_cats_core_gift_certificates.rb +2 -8
  37. data/db/migrate/20210717032855_create_cats_core_purchase_orders.rb +9 -5
  38. data/db/migrate/20220511082354_create_cats_core_beneficiaries.rb +4 -0
  39. data/db/migrate/20220626063501_create_cats_core_loans.rb +21 -0
  40. data/db/migrate/20220626063757_create_cats_core_swaps.rb +29 -0
  41. data/db/migrate/20220626132050_create_cats_core_round_beneficiaries.rb +26 -0
  42. data/lib/cats/core/version.rb +1 -1
  43. data/spec/factories/cats/core/beneficiaries.rb +1 -0
  44. data/spec/factories/cats/core/cash_donations.rb +10 -0
  45. data/spec/factories/cats/core/{donations.rb → commodity_donations.rb} +3 -6
  46. data/spec/factories/cats/core/gift_certificates.rb +5 -6
  47. data/spec/factories/cats/core/loans.rb +11 -0
  48. data/spec/factories/cats/core/projects.rb +1 -1
  49. data/spec/factories/cats/core/purchase_orders.rb +3 -1
  50. data/spec/factories/cats/core/round_beneficiaries.rb +10 -0
  51. data/spec/factories/cats/core/swaps.rb +13 -0
  52. metadata +33 -7
  53. data/db/migrate/20210717032330_create_cats_core_donations.rb +0 -35
@@ -0,0 +1,87 @@
1
+ module Cats
2
+ module Core
3
+ class BeneficiaryService
4
+ def clear_distribution_list(id)
5
+ round_plan = RoundPlan.find(id)
6
+ raise(StandardError, 'Round plan is not in draft state.') unless round_plan.status == RoundPlan::DRAFT
7
+
8
+ RoundBeneficiary.joins(:round_plan_item).where(round_plan_item: { round_plan_id: id }).delete_all
9
+ end
10
+
11
+ def generate_distribution_list(id)
12
+ clear_distribution_list(id)
13
+ round_plan = RoundPlan.find(id)
14
+ plan_days = round_plan.plan.no_of_round_days
15
+ rounds = round_plan.rounds.count
16
+ beneficiaries = Beneficiary.joins(:beneficiary_category).where(
17
+ beneficiary_category: { plan_id: round_plan.plan_id }
18
+ ).group_by(&:fdp_id)
19
+ beneficiaries.each_key do |key|
20
+ beneficiaries[key] = beneficiaries[key].group_by(&:beneficiary_category_id)
21
+ end
22
+ rations = round_plan.round_rations
23
+
24
+ round_beneficiaries = []
25
+ round_plan.round_plan_items.each do |rpi|
26
+ fdp_beneficiaries = beneficiaries[rpi.fdp_id]
27
+ fdp_beneficiaries.each_key do |key|
28
+ category_rations = rations.select { |r| r.beneficiary_category_id == key }
29
+ category_rations.each do |ration|
30
+ fdp_beneficiaries[key].each do |beneficiary|
31
+ round_beneficiaries << {
32
+ beneficiary_id: beneficiary.id,
33
+ round_plan_item_id: rpi.id,
34
+ commodity_category_id: ration.commodity_category_id,
35
+ quantity: plan_days / ration.no_of_days * ration.quantity * rounds,
36
+ unit_id: ration.unit_of_measure_id,
37
+ received: false
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ RoundBeneficiary.insert_all!(round_beneficiaries, record_timestamps: true)
45
+ true
46
+ end
47
+
48
+ def remove_items(plan_id, ids)
49
+ raise(StandardError, 'No beneficiaries specified.') if ids.count.zero?
50
+
51
+ begin
52
+ plan = RoundPlan.find(plan_id)
53
+ rescue ActiveRecord::RecordNotFound
54
+ raise(StandardError, 'Round plan not found.') unless plan
55
+ end
56
+
57
+ beneficiaries = RoundBeneficiary.joins(:round_plan_item)
58
+ .where(round_plan_item: { round_plan_id: plan_id })
59
+ to_delete = RoundBeneficiary.where(id: ids)
60
+ diff = to_delete - beneficiaries
61
+ raise(StandardError, 'Round plan beneficiaries should be from the same plan.') if diff.count.positive?
62
+
63
+ to_delete.delete_all
64
+ true
65
+ end
66
+
67
+ def confirm_receipt(plan_id, ids)
68
+ raise(StandardError, 'No beneficiaries specified.') if ids.count.zero?
69
+
70
+ begin
71
+ plan = RoundPlan.find(plan_id)
72
+ rescue ActiveRecord::RecordNotFound
73
+ raise(StandardError, 'Round plan not found.') unless plan
74
+ end
75
+
76
+ beneficiaries = RoundBeneficiary.joins(:round_plan_item)
77
+ .where(round_plan_item: { round_plan_id: plan_id })
78
+ to_confirm = RoundBeneficiary.where(id: ids)
79
+ diff = to_confirm - beneficiaries
80
+ raise(StandardError, 'Round plan beneficiaries should be from the same plan.') if diff.count.positive?
81
+
82
+ to_confirm.update_all(received: true)
83
+ true
84
+ end
85
+ end
86
+ end
87
+ end
@@ -59,6 +59,85 @@ module Cats
59
59
  end
60
60
  end
61
61
  end
62
+
63
+ # This method generates dispatch plan for a round plan by aggregating the FDP level
64
+ # quantities into woreda level quantity per commodity.
65
+ #
66
+ # Parameters:
67
+ # id => The ID of the round plan for which dispatch plan is to be generated
68
+ #
69
+ def generate(id)
70
+ details = RoundPlanItemDetail.joins(
71
+ beneficiary_round_plan_item: { round_plan_item: :round_plan }
72
+ ).where(
73
+ beneficiary_round_plan_item: { cats_core_round_plan_items: { round_plan_id: id } }
74
+ ).includes(
75
+ beneficiary_round_plan_item: {
76
+ round_plan_item: %i[round_plan region zone woreda fdp]
77
+ },
78
+ round_ration: :commodity_category
79
+ )
80
+
81
+ items = details.each_with_object([]) do |detail, res|
82
+ res << {
83
+ reference_no: nil,
84
+ region: detail.beneficiary_round_plan_item.round_plan_item.region.name,
85
+ zone: detail.beneficiary_round_plan_item.round_plan_item.zone.name,
86
+ woreda: detail.beneficiary_round_plan_item.round_plan_item.woreda.name,
87
+ fdp: detail.beneficiary_round_plan_item.round_plan_item.fdp.name,
88
+ commodity_category: detail.round_ration.commodity_category.name,
89
+ unit_id: detail.round_ration.unit_of_measure_id,
90
+ unit: detail.round_ration.unit_of_measure.abbreviation,
91
+ quantity: detail.quantity,
92
+ source_id: nil,
93
+ destination_id: detail.beneficiary_round_plan_item.round_plan_item.fdp.id,
94
+ commodity_id: nil,
95
+ commodity_status: Cats::Core::Commodity::GOOD
96
+ }
97
+ end
98
+ {
99
+ reference_no: nil,
100
+ dispatchable_id: id,
101
+ dispatchable_type: 'Cats::Core::RoundPlan',
102
+ items: items
103
+ }
104
+ end
105
+
106
+ # This method creates dispatch and dispatch plan items once
107
+ # users fill out additional details such as source and destination
108
+ # for generated dispatch plan items.
109
+ #
110
+ # NOTE: Users still have to go through each plan item and set the
111
+ # reference_no. If the product team comes up with a reference_no
112
+ # generation scheme, then we may use that to avoid this.
113
+ #
114
+ def bulk_create(payload, user)
115
+ plan = Cats::Core::DispatchPlan.new(
116
+ reference_no: payload[:reference_no],
117
+ dispatchable_id: payload[:dispatchable_id],
118
+ dispatchable_type: payload[:dispatchable_type],
119
+ prepared_by: user
120
+ )
121
+ ActiveRecord::Base.transaction do
122
+ plan.save!
123
+
124
+ items = payload[:items].each_with_object([]) do |item, res|
125
+ res << {
126
+ reference_no: item[:reference_no],
127
+ source_id: item[:source_id],
128
+ destination_id: item[:destination_id],
129
+ dispatch_plan_id: plan.id,
130
+ quantity: item[:quantity],
131
+ unit_id: item[:unit_id],
132
+ commodity_id: item[:commodity_id],
133
+ commodity_status: item[:commodity_status],
134
+ status: Cats::Core::DispatchPlanItem::UNAUTHORIZED
135
+ }
136
+ end
137
+ Cats::Core::DispatchPlanItem.insert_all(items, record_timestamps: true)
138
+ end
139
+ plan
140
+ end
62
141
  end
63
142
  end
64
143
  end
data/config/routes.rb CHANGED
@@ -84,7 +84,18 @@ Cats::Core::Engine.routes.draw do
84
84
  post '/routes/bulk_create', controller: :routes, action: :bulk_create
85
85
  resources :routes, except: %i[destroy]
86
86
 
87
+ resources :commodity_donations, except: %i[destroy]
88
+ resources :purchase_orders, except: %i[index destroy]
89
+ resources :cash_donations, except: %i[destroy] do
90
+ member do
91
+ get 'purchase_orders', controller: :purchase_orders, action: :index
92
+ end
93
+ end
94
+ resources :swaps, except: %i[destory]
95
+ resources :loans, except: %i[destory]
96
+
87
97
  post '/dispatch_plans/filter', controller: :dispatch_plans, action: :filter
98
+ post '/dispatch_plans/bulk_create'
88
99
  resources :dispatch_plans do
89
100
  member do
90
101
  get 'items', controller: :dispatch_plan_items, action: :index
@@ -160,13 +171,21 @@ Cats::Core::Engine.routes.draw do
160
171
  resources :receipt_transactions, except: %i[index new edit destroy]
161
172
  resources :lost_commodities, except: %i[index destroy]
162
173
  get '/plans/:id/round_plans', controller: :round_plans, action: :index, as: :round_plans_plan
174
+
175
+ post '/round_beneficiaries/filter'
176
+ resources :round_beneficiaries, only: %i[show]
163
177
  post '/round_plans/generate'
164
178
  post '/round_plans/filter'
165
179
  resources :round_plans, except: %i[index destroy] do
166
180
  member do
181
+ post 'generate_dispatch_plan', controller: :dispatch_plans, action: :generate
167
182
  post 'remove_items'
183
+ post 'remove_beneficiaries', controller: :round_beneficiaries, action: :remove_beneficiaries
184
+ post 'confirm_receipt', controller: :round_beneficiaries, action: :confirm_receipt
168
185
  post 'generate_round_needs'
169
186
  post 'approve'
187
+ post 'generate_distribution_list', controller: :round_beneficiaries, action: :generate
188
+ get 'beneficiaries', controller: :round_beneficiaries, action: :index
170
189
  end
171
190
  end
172
191
 
@@ -0,0 +1,29 @@
1
+ class CreateCatsCoreCommodityDonations < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :cats_core_commodity_donations do |t|
4
+ t.string :reference_no, unique: true
5
+ t.string :description
6
+ t.string :shipping_reference
7
+ t.date :donated_on, null: false
8
+ t.references :donor,
9
+ null: false,
10
+ index: { name: 'donor_on_cd_indx' },
11
+ foreign_key: { to_table: :cats_core_donors }
12
+ t.references :commodity_category,
13
+ null: false,
14
+ index: { name: 'cc_on_cd_indx' },
15
+ foreign_key: { to_table: :cats_core_commodity_categories }
16
+ t.references :plan,
17
+ null: true,
18
+ index: { name: 'plan_on_cd_indx' },
19
+ foreign_key: { to_table: :cats_core_plans }
20
+ t.float :quantity, null: false
21
+ t.references :unit,
22
+ null: false,
23
+ index: { name: 'unit_on_cd_indx' },
24
+ foreign_key: { to_table: :cats_core_unit_of_measures }
25
+
26
+ t.timestamps
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,20 @@
1
+ class CreateCatsCoreCashDonations < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cats_core_cash_donations do |t|
4
+ t.string :reference_no, unique: true
5
+ t.string :description
6
+ t.date :donated_on, null: false
7
+ t.references :donor,
8
+ null: false,
9
+ index: { name: 'donor_on_cad_indx' },
10
+ foreign_key: { to_table: :cats_core_donors }
11
+ t.float :amount, null: false
12
+ t.references :currency,
13
+ null: false,
14
+ index: { name: 'currency_on_cad_indx' },
15
+ foreign_key: { to_table: :cats_core_currencies }
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -3,12 +3,6 @@ class CreateCatsCoreGiftCertificates < ActiveRecord::Migration[6.1]
3
3
  create_table :cats_core_gift_certificates do |t|
4
4
  t.string :reference_no, unique: true
5
5
  t.date :gift_date, null: false
6
-
7
- t.references :donation,
8
- null: true,
9
- index: { name: 'gc_on_donation_indx' },
10
- foreign_key: { to_table: :cats_core_donations }
11
-
12
6
  t.string :vessel
13
7
  t.string :port
14
8
  t.string :customs_declaration_no
@@ -20,9 +14,9 @@ class CreateCatsCoreGiftCertificates < ActiveRecord::Migration[6.1]
20
14
  null: false,
21
15
  index: { name: 'gc_on_cc_indx' },
22
16
  foreign_key: { to_table: :cats_core_commodity_categories }
23
- t.references :unit_of_measure,
17
+ t.references :unit,
24
18
  null: false,
25
- index: { name: 'uom_on_gc_indx' },
19
+ index: { name: 'unit_on_gc_indx' },
26
20
  foreign_key: { to_table: :cats_core_unit_of_measures }
27
21
  t.references :destination_warehouse,
28
22
  null: false,
@@ -7,14 +7,18 @@ class CreateCatsCorePurchaseOrders < ActiveRecord::Migration[6.1]
7
7
  t.string :supplier, null: false
8
8
  t.float :quantity, null: false
9
9
  t.string :purchase_type, null: false
10
-
11
- t.references :donation,
10
+ t.float :price, null: false
11
+ t.references :currency,
12
+ null: false,
13
+ index: { name: 'currency_on_po_indx' },
14
+ foreign_key: { to_table: :cats_core_currencies }
15
+ t.references :cash_donation,
12
16
  null: false,
13
- index: { name: 'po_on_donation_indx' },
14
- foreign_key: { to_table: :cats_core_donations }
17
+ index: { name: 'cd_on_po_indx' },
18
+ foreign_key: { to_table: :cats_core_cash_donations }
15
19
  t.references :commodity_category,
16
20
  null: false,
17
- index: { name: 'po_on_cc_indx' },
21
+ index: { name: 'cc_on_po_indx' },
18
22
  foreign_key: { to_table: :cats_core_commodity_categories }
19
23
  t.references :unit,
20
24
  null: false,
@@ -9,6 +9,10 @@ class CreateCatsCoreBeneficiaries < ActiveRecord::Migration[7.0]
9
9
  null: false,
10
10
  index: { name: 'bc_on_beneficiaries_indx' },
11
11
  foreign_key: { to_table: :cats_core_beneficiary_categories }
12
+ t.references :fdp,
13
+ null: false,
14
+ index: { name: 'fdp_on_beneficiaries_indx' },
15
+ foreign_key: { to_table: :cats_core_locations }
12
16
 
13
17
  t.timestamps
14
18
  end
@@ -0,0 +1,21 @@
1
+ class CreateCatsCoreLoans < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cats_core_loans do |t|
4
+ t.string :reference_no, unique: true
5
+ t.string :lender, null: false
6
+ t.date :agreement_date, null: false
7
+ t.date :repayment_date
8
+ t.references :commodity_category,
9
+ null: false,
10
+ index: { name: 'cc_on_loan_indx' },
11
+ foreign_key: { to_table: :cats_core_commodity_categories }
12
+ t.float :quantity, null: false
13
+ t.references :unit,
14
+ null: false,
15
+ index: { name: 'unit_on_loan_indx' },
16
+ foreign_key: { to_table: :cats_core_unit_of_measures }
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ class CreateCatsCoreSwaps < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cats_core_swaps do |t|
4
+ t.string :reference_no, unique: true
5
+ t.string :swapper, null: false
6
+ t.date :agreement_date, null: false
7
+ t.float :issued_quantity, null: false
8
+ t.float :received_quantity, null: false
9
+ t.references :issued_commodity,
10
+ null: false,
11
+ index: { name: 'ic_on_swap_indx' },
12
+ foreign_key: { to_table: :cats_core_commodity_categories }
13
+ t.references :received_commodity,
14
+ null: false,
15
+ index: { name: 'rc_on_swap_indx' },
16
+ foreign_key: { to_table: :cats_core_commodity_categories }
17
+ t.references :issued_unit,
18
+ null: false,
19
+ index: { name: 'iu_on_swap_indx' },
20
+ foreign_key: { to_table: :cats_core_unit_of_measures }
21
+ t.references :received_unit,
22
+ null: false,
23
+ index: { name: 'ru_on_swap_indx' },
24
+ foreign_key: { to_table: :cats_core_unit_of_measures }
25
+
26
+ t.timestamps
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ class CreateCatsCoreRoundBeneficiaries < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cats_core_round_beneficiaries do |t|
4
+ t.references :beneficiary,
5
+ null: false,
6
+ index: { name: 'beneficiary_on_rb_indx' },
7
+ foreign_key: { to_table: :cats_core_beneficiaries }
8
+ t.references :round_plan_item,
9
+ null: false,
10
+ index: { name: 'rpi_on_rb_indx' },
11
+ foreign_key: { to_table: :cats_core_round_plan_items }
12
+ t.references :commodity_category,
13
+ null: false,
14
+ index: { name: 'cc_on_rb_indx' },
15
+ foreign_key: { to_table: :cats_core_commodity_categories }
16
+ t.float :quantity, null: false
17
+ t.references :unit,
18
+ null: false,
19
+ index: { name: 'unit_on_rb_indx' },
20
+ foreign_key: { to_table: :cats_core_unit_of_measures }
21
+ t.boolean :received, null: false, default: false
22
+
23
+ t.timestamps
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  module Cats
2
2
  module Core
3
- VERSION = '1.4.40'.freeze
3
+ VERSION = '1.4.43'.freeze
4
4
  end
5
5
  end
@@ -5,5 +5,6 @@ FactoryBot.define do
5
5
  gender { 'M' }
6
6
  phone { '0911121212' }
7
7
  beneficiary_category
8
+ fdp factory: :fdp
8
9
  end
9
10
  end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :cash_donation, class: 'Cats::Core::CashDonation' do
3
+ reference_no { FFaker::Name.name }
4
+ description { FFaker::Name.name }
5
+ donated_on { Date.today.prev_week }
6
+ donor
7
+ amount { 10_000 }
8
+ currency
9
+ end
10
+ end
@@ -1,16 +1,13 @@
1
1
  FactoryBot.define do
2
- factory :donation, class: 'Cats::Core::Donation' do
2
+ factory :commodity_donation, class: 'Cats::Core::CommodityDonation' do
3
3
  reference_no { FFaker::Name.name }
4
4
  description { FFaker::Name.name }
5
- donation_type { Cats::Core::Donation::KIND }
6
5
  shipping_reference { FFaker::Name.name }
7
6
  donated_on { Date.today }
8
7
  donor
9
8
  plan
10
- amount { 100 }
11
- currency { nil }
9
+ quantity { 100 }
12
10
  commodity_category
13
- unit_of_measure
14
- active { false }
11
+ unit factory: :unit_of_measure
15
12
  end
16
13
  end
@@ -2,10 +2,6 @@ FactoryBot.define do
2
2
  factory :gift_certificate, class: 'Cats::Core::GiftCertificate' do
3
3
  reference_no { FFaker::Name.name }
4
4
  gift_date { Date.today - 1.month }
5
- donation
6
- commodity_category { donation.commodity_category }
7
- unit_of_measure
8
- destination_warehouse factory: :warehouse
9
5
  vessel { FFaker::Name.name }
10
6
  port { FFaker::Name.name }
11
7
  customs_declaration_no { FFaker::Name.name }
@@ -13,8 +9,11 @@ FactoryBot.define do
13
9
  expiry_date { Date.today + 6.month }
14
10
  bill_of_lading_no { FFaker::Name.name }
15
11
  quantity { 1.5 }
16
- estimated_price { 1.5 }
17
- estimated_tax { 1.5 }
12
+ commodity_category
13
+ unit factory: :unit_of_measure
14
+ destination_warehouse factory: :warehouse
15
+ estimated_price { 500 }
16
+ estimated_tax { 200 }
18
17
  currency
19
18
  registration_no { FFaker::Name.name }
20
19
  requested_by { FFaker::Name.name }
@@ -0,0 +1,11 @@
1
+ FactoryBot.define do
2
+ factory :loan, class: 'Cats::Core::Loan' do
3
+ reference_no { FFaker::Name.name }
4
+ lender { FFaker::Name.name }
5
+ agreement_date { Date.today }
6
+ repayment_date { agreement_date.next_month }
7
+ commodity_category
8
+ quantity { 100 }
9
+ unit factory: :unit_of_measure
10
+ end
11
+ end
@@ -2,7 +2,7 @@ FactoryBot.define do
2
2
  factory :project, class: 'Cats::Core::Project' do
3
3
  code { FFaker::Name.name }
4
4
  description { FFaker::Name.name }
5
- source factory: :gift_certificate
5
+ source factory: :commodity_donation
6
6
  program
7
7
  year { 2022 }
8
8
  implementing_agency { FFaker::Name.name }
@@ -6,7 +6,9 @@ FactoryBot.define do
6
6
  supplier { FFaker::Name.name }
7
7
  quantity { 100 }
8
8
  purchase_type { Cats::Core::PurchaseOrder::LOCAL }
9
- donation
9
+ price { 1_000 }
10
+ currency
11
+ cash_donation
10
12
  commodity_category
11
13
  unit factory: :unit_of_measure
12
14
  end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :round_beneficiary, class: 'Cats::Core::RoundBeneficiary' do
3
+ beneficiary
4
+ round_plan_item
5
+ commodity_category
6
+ quantity { 150 }
7
+ unit factory: :unit_of_measure
8
+ received { false }
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ FactoryBot.define do
2
+ factory :swap, class: 'Cats::Core::Swap' do
3
+ reference_no { FFaker::Name.name }
4
+ swapper { FFaker::Name.name }
5
+ agreement_date { Date.yesterday }
6
+ issued_commodity factory: :commodity_category
7
+ issued_quantity { 100 }
8
+ issued_unit factory: :unit_of_measure
9
+ received_commodity factory: :commodity_category
10
+ received_quantity { 150 }
11
+ received_unit factory: :unit_of_measure
12
+ end
13
+ end