cats_core 1.0.13 → 1.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/cats/core/commodity.rb +2 -3
- data/app/models/cats/core/commodity_allocation.rb +19 -0
- data/app/models/cats/core/currency.rb +8 -0
- data/app/models/cats/core/dispatch.rb +14 -0
- data/app/models/cats/core/dispatch_transaction.rb +8 -0
- data/app/models/cats/core/donation.rb +18 -0
- data/app/models/cats/core/gift_certificate.rb +11 -0
- data/app/models/cats/core/hrp.rb +16 -0
- data/app/models/cats/core/hrp_item.rb +12 -0
- data/app/models/cats/core/operator.rb +8 -0
- data/app/models/cats/core/purchase_order.rb +11 -0
- data/app/models/cats/core/ration.rb +12 -0
- data/app/models/cats/core/receipt.rb +19 -0
- data/app/models/cats/core/receipt_transaction.rb +8 -0
- data/app/models/cats/core/stack.rb +2 -2
- data/app/models/cats/core/stack_transaction.rb +8 -0
- data/app/models/cats/core/store.rb +18 -0
- data/app/models/cats/core/supplier.rb +8 -0
- data/app/models/cats/core/transaction.rb +32 -0
- data/app/models/cats/core/user.rb +0 -1
- data/db/migrate/{20210717043620_create_cats_core_locations.rb → 20210716183620_create_cats_core_locations.rb} +0 -0
- data/db/migrate/20210716185529_create_cats_core_currencies.rb +10 -0
- data/db/migrate/20210716210635_create_cats_core_operators.rb +13 -0
- data/db/migrate/20210716210905_create_cats_core_suppliers.rb +14 -0
- data/db/migrate/20210717031216_create_cats_core_rations.rb +19 -0
- data/db/migrate/20210717031810_create_cats_core_hrps.rb +20 -0
- data/db/migrate/20210717032024_create_cats_core_hrp_items.rb +22 -0
- data/db/migrate/20210717032330_create_cats_core_donations.rb +24 -0
- data/db/migrate/20210717032602_create_cats_core_gift_certificates.rb +29 -0
- data/db/migrate/20210717032855_create_cats_core_purchase_orders.rb +21 -0
- data/db/migrate/20210717033223_create_cats_core_commodities.rb +2 -14
- data/db/migrate/20210718042823_create_cats_core_commodity_allocations.rb +23 -0
- data/db/migrate/20210718045516_create_cats_core_dispatches.rb +27 -0
- data/db/migrate/20210718202957_create_cats_core_dispatch_transactions.rb +19 -0
- data/db/migrate/20210727074646_create_cats_core_receipts.rb +20 -0
- data/db/migrate/20210814160628_create_cats_core_receipt_transactions.rb +19 -0
- data/db/migrate/20210814175406_create_cats_core_stack_transactions.rb +19 -0
- data/lib/cats/core/version.rb +1 -1
- data/spec/factories/cats/core/commodities.rb +2 -5
- data/spec/factories/cats/core/commodity_allocations.rb +10 -0
- data/spec/factories/cats/core/currencies.rb +6 -0
- data/spec/factories/cats/core/dispatch_transactions.rb +9 -0
- data/spec/factories/cats/core/dispatches.rb +13 -0
- data/spec/factories/cats/core/donations.rb +11 -0
- data/spec/factories/cats/core/gift_certificates.rb +17 -0
- data/spec/factories/cats/core/hrp_items.rb +9 -0
- data/spec/factories/cats/core/hrps.rb +10 -0
- data/spec/factories/cats/core/locations.rb +5 -0
- data/spec/factories/cats/core/operators.rb +9 -0
- data/spec/factories/cats/core/purchase_orders.rb +10 -0
- data/spec/factories/cats/core/rations.rb +9 -0
- data/spec/factories/cats/core/receipt_transactions.rb +9 -0
- data/spec/factories/cats/core/receipts.rb +10 -0
- data/spec/factories/cats/core/stack_transactions.rb +9 -0
- data/spec/factories/cats/core/suppliers.rb +10 -0
- metadata +49 -15
- data/app/models/cats/core/commodity_transaction.rb +0 -55
- data/app/models/cats/core/receipt_plan.rb +0 -24
- data/app/models/cats/core/way_bill.rb +0 -12
- data/app/models/cats/core/way_bill_item.rb +0 -15
- data/db/migrate/20210718045516_create_cats_core_way_bills.rb +0 -25
- data/db/migrate/20210718050751_create_cats_core_way_bill_items.rb +0 -18
- data/db/migrate/20210718202957_create_cats_core_commodity_transactions.rb +0 -14
- data/db/migrate/20210727074646_create_cats_core_receipt_plans.rb +0 -16
- data/spec/factories/cats/core/commodity_transactions.rb +0 -10
- data/spec/factories/cats/core/receipt_plans.rb +0 -9
- data/spec/factories/cats/core/way_bill_items.rb +0 -8
- data/spec/factories/cats/core/way_bills.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66fc59d71ea65e00fe3b47393f62621052e7e376c65e504df71fa29b58adf26f
|
4
|
+
data.tar.gz: f79e7b8a4b5a7b3327c9975ec08e84d0c41b5e395789db0f279ce71d5cbf009e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdbc87018bb880d2ffc8680b6165e0e24dfe5fe9fd8b7a6502fe3ecd4c8463e91b7c2d899276d6b903bb21dfe8ed948b37456333d08aea3f43daeff2bfc9badf
|
7
|
+
data.tar.gz: 93eddf1ab8dd21dfd5413505ebdfb9b3ec3735612dcb09be0430451ef622b10c95076dd9bdbf9d523b016c63dd78fdcfca7026b5151f8510ff0a786a3c71f80d
|
@@ -6,11 +6,10 @@ module Cats
|
|
6
6
|
DAMAGED = 'Damaged'.freeze
|
7
7
|
COMMODITY_STATUSES = [GOOD, DAMAGED].freeze
|
8
8
|
|
9
|
-
belongs_to :commodity_category
|
10
|
-
belongs_to :donor
|
11
|
-
belongs_to :program
|
12
9
|
belongs_to :unit_of_measure
|
10
|
+
belongs_to :source, polymorphic: true
|
13
11
|
|
12
|
+
validates :best_use_before, presence: true
|
14
13
|
validates :quantity, presence: true, numericality: { greater_than: 0 }
|
15
14
|
validates :volume_per_metric_ton, numericality: { greater_than: 0, allow_nil: true }
|
16
15
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class CommodityAllocation < ApplicationRecord
|
4
|
+
belongs_to :commodity
|
5
|
+
belongs_to :source, class_name: 'Cats::Core::Location'
|
6
|
+
belongs_to :destination, class_name: 'Cats::Core::Location'
|
7
|
+
|
8
|
+
validates :quantity, :commodity_status, presence: true
|
9
|
+
validates :commodity_status, inclusion: { in: Cats::Core::Commodity::COMMODITY_STATUSES }
|
10
|
+
validate :validate_source_and_destination
|
11
|
+
|
12
|
+
def validate_source_and_destination
|
13
|
+
return unless source.present? && destination.present?
|
14
|
+
|
15
|
+
errors.add(:base, 'source and destination cannot be the same') if source == destination
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Dispatch < ApplicationRecord
|
4
|
+
belongs_to :prepared_by, class_name: 'Cats::Core::User'
|
5
|
+
belongs_to :transporter
|
6
|
+
belongs_to :commodity_allocation
|
7
|
+
|
8
|
+
validates :reference_no, :plate_no, :driver_name, :driver_phone, :quantity, :commodity_status, presence: true
|
9
|
+
validates :reference_no, uniqueness: true
|
10
|
+
validates :quantity, numericality: { greater_than: 0 }
|
11
|
+
validates :commodity_status, inclusion: { in: Cats::Core::Commodity::COMMODITY_STATUSES }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Donation < ApplicationRecord
|
4
|
+
CASH = 'Cash'.freeze
|
5
|
+
KIND = 'Kind'.freeze
|
6
|
+
DONATION_TYPES = [CASH, KIND].freeze
|
7
|
+
|
8
|
+
belongs_to :donor
|
9
|
+
belongs_to :hrp
|
10
|
+
belongs_to :currency, optional: true
|
11
|
+
|
12
|
+
validates :reference_no, :donation_type, :donated_on, presence: true
|
13
|
+
validates :reference_no, uniqueness: true
|
14
|
+
validates :donation_type, inclusion: { in: DONATION_TYPES }
|
15
|
+
validates :currency, :amount, presence: true, if: -> { donation_type == CASH }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Hrp < ApplicationRecord
|
4
|
+
DRAFT = 'Draft'.freeze
|
5
|
+
APPROVED = 'Approved'.freeze
|
6
|
+
STATUSES = [DRAFT, APPROVED].freeze
|
7
|
+
|
8
|
+
belongs_to :program
|
9
|
+
belongs_to :ration
|
10
|
+
|
11
|
+
validates :reference_no, :year, :season, :status, presence: true
|
12
|
+
validates :reference_no, uniqueness: true
|
13
|
+
validates :status, inclusion: { in: STATUSES }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class HrpItem < ApplicationRecord
|
4
|
+
belongs_to :hrp
|
5
|
+
belongs_to :woreda, -> { where(location_type: Cats::Core::Location::WOREDA) }, class_name: 'Cats::Core::Location'
|
6
|
+
belongs_to :operator
|
7
|
+
|
8
|
+
validates :beneficiaries, presence: true, numericality: { greater_than: 0 }
|
9
|
+
validates :commodity_amount, presence: true, numericality: { greater_than: 0 }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Ration < ApplicationRecord
|
4
|
+
belongs_to :program
|
5
|
+
belongs_to :commodity_category
|
6
|
+
|
7
|
+
validates :reference_no, :amount, presence: true
|
8
|
+
validates :reference_no, uniqueness: true
|
9
|
+
validates :amount, numericality: { greater_than: 0 }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Receipt < ApplicationRecord
|
4
|
+
# Receipt status
|
5
|
+
DRAFT = 'Draft'.freeze
|
6
|
+
ACCEPTED = 'Accepted'.freeze
|
7
|
+
DECLINED = 'Declined'.freeze
|
8
|
+
RECEIPT_STATUSES = [DRAFT, ACCEPTED, DECLINED].freeze
|
9
|
+
|
10
|
+
belongs_to :dispatch
|
11
|
+
belongs_to :prepared_by, class_name: 'Cats::Core::User'
|
12
|
+
|
13
|
+
validates :quantity, :commodity_status, :status, presence: true
|
14
|
+
validates :quantity, numericality: { greater_than: 0 }
|
15
|
+
validates :status, inclusion: { in: RECEIPT_STATUSES }
|
16
|
+
validates :commodity_status, inclusion: { in: Cats::Core::Commodity::COMMODITY_STATUSES }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -9,8 +9,8 @@ module Cats
|
|
9
9
|
|
10
10
|
belongs_to :commodity
|
11
11
|
belongs_to :store
|
12
|
-
has_many :
|
13
|
-
has_many :
|
12
|
+
has_many :dispatch_transactions, foreign_key: :source_id
|
13
|
+
has_many :receipt_transactions, foreign_key: :destination_id
|
14
14
|
|
15
15
|
validates :code, :length, :width, :height, :start_x, :start_y, :commodity_status, :stack_status,
|
16
16
|
:quantity, presence: true
|
@@ -15,6 +15,8 @@ module Cats
|
|
15
15
|
allow_nil: true
|
16
16
|
validate :validate_location
|
17
17
|
|
18
|
+
after_save :update_store_keeper
|
19
|
+
|
18
20
|
def validate_location
|
19
21
|
return if warehouse.nil?
|
20
22
|
|
@@ -25,6 +27,22 @@ module Cats
|
|
25
27
|
"#{store_keeper.first_name} #{store_keeper.last_name}"
|
26
28
|
end
|
27
29
|
|
30
|
+
def update_store_keeper
|
31
|
+
return unless store_keeper_id_previously_changed?
|
32
|
+
|
33
|
+
unless id_previously_changed?
|
34
|
+
old_storekeeper = Cats::Core::User.find(store_keeper_id_previously_was)
|
35
|
+
old_storekeeper.details['stores'].delete(id)
|
36
|
+
old_storekeeper.save
|
37
|
+
end
|
38
|
+
if store_keeper.details.key?('stores')
|
39
|
+
store_keeper.details['stores'] << id
|
40
|
+
else
|
41
|
+
store_keeper.details['stores'] = [id]
|
42
|
+
end
|
43
|
+
store_keeper.save
|
44
|
+
end
|
45
|
+
|
28
46
|
delegate(:phone_number, to: :store_keeper, prefix: true)
|
29
47
|
end
|
30
48
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cats
|
2
|
+
module Core
|
3
|
+
class Transaction < ApplicationRecord
|
4
|
+
self.abstract_class = true
|
5
|
+
|
6
|
+
# Transaction statuses
|
7
|
+
DRAFT = 'Draft'.freeze
|
8
|
+
COMMITTED = 'Committed'.freeze
|
9
|
+
STATUSES = [DRAFT, COMMITTED].freeze
|
10
|
+
|
11
|
+
validates :transaction_date, :quantity, :status, presence: true
|
12
|
+
validates :quantity, numericality: { greater_than: 0 }
|
13
|
+
validates :status, inclusion: { in: STATUSES }
|
14
|
+
validate :validate_quantity
|
15
|
+
|
16
|
+
def validate_quantity
|
17
|
+
return unless quantity.present? && source.present?
|
18
|
+
|
19
|
+
errors.add(:quantity, 'cannot be more than source quantity') if quantity > source.quantity
|
20
|
+
end
|
21
|
+
|
22
|
+
def commit
|
23
|
+
Transaction.transaction do
|
24
|
+
source.quantity -= quantity
|
25
|
+
destination.quantity += quantity
|
26
|
+
source.save
|
27
|
+
destination.save
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -5,7 +5,6 @@ module Cats
|
|
5
5
|
rolify role_cname: 'Cats::Core::Role'
|
6
6
|
|
7
7
|
belongs_to :application_module
|
8
|
-
has_and_belongs_to_many :roles, join_table: :cats_core_users_cats_core_roles
|
9
8
|
has_many :notifications, as: :recipient
|
10
9
|
|
11
10
|
validates :password, length: { minimum: 6 }, if: proc { |u| u.password.present? }, on: :update
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateCatsCoreOperators < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_operators do |t|
|
4
|
+
t.string :code, unique: true
|
5
|
+
t.string :name, null: false
|
6
|
+
t.string :description
|
7
|
+
t.string :contact_name, null: false
|
8
|
+
t.string :contact_phone, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateCatsCoreSuppliers < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_suppliers do |t|
|
4
|
+
t.string :code, unique: true
|
5
|
+
t.string :name, null: false
|
6
|
+
t.string :description
|
7
|
+
t.string :address
|
8
|
+
t.string :contact_name, null: false
|
9
|
+
t.string :contact_phone, null: false
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateCatsCoreRations < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_rations do |t|
|
4
|
+
t.string :reference_no, unique: true
|
5
|
+
t.references :program,
|
6
|
+
null: false,
|
7
|
+
index: { name: 'program_on_ration_indx' },
|
8
|
+
foreign_key: { to_table: :cats_core_programs }
|
9
|
+
t.references :commodity_category,
|
10
|
+
null: false,
|
11
|
+
index: { name: 'cc_on_ration_indx' },
|
12
|
+
foreign_key: { to_table: :cats_core_commodity_categories }
|
13
|
+
t.float :amount, null: false
|
14
|
+
t.boolean :current, null: false, default: true
|
15
|
+
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateCatsCoreHrps < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_hrps do |t|
|
4
|
+
t.string :reference_no, unique: true
|
5
|
+
t.integer :year, null: false
|
6
|
+
t.string :season, null: false
|
7
|
+
t.string :status, null: false, default: 'Draft'
|
8
|
+
t.references :program,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'program_on_hrp_indx' },
|
11
|
+
foreign_key: { to_table: :cats_core_programs }
|
12
|
+
t.references :ration,
|
13
|
+
null: false,
|
14
|
+
index: { name: 'ration_on_hrp_indx' },
|
15
|
+
foreign_key: { to_table: :cats_core_rations }
|
16
|
+
|
17
|
+
t.timestamps
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateCatsCoreHrpItems < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_hrp_items do |t|
|
4
|
+
t.references :hrp,
|
5
|
+
null: false,
|
6
|
+
index: { name: 'hrp_on_hrp_items_indx' },
|
7
|
+
foreign_key: { to_table: :cats_core_hrps }
|
8
|
+
t.references :woreda,
|
9
|
+
null: false,
|
10
|
+
index: { name: 'woreda_on_hrp_items_idnx' },
|
11
|
+
foreign_key: { to_table: :cats_core_locations }
|
12
|
+
t.integer :beneficiaries, null: false
|
13
|
+
t.float :commodity_amount, null: false
|
14
|
+
t.references :operator,
|
15
|
+
null: false,
|
16
|
+
index: { name: 'operator_on_hrp_items_indx' },
|
17
|
+
foreign_key: { to_table: :cats_core_operators }
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CreateCatsCoreDonations < ActiveRecord::Migration[6.1]
|
2
|
+
def change
|
3
|
+
create_table :cats_core_donations do |t|
|
4
|
+
t.string :reference_no, unique: true
|
5
|
+
t.string :donation_type, null: false
|
6
|
+
t.date :donated_on, null: false
|
7
|
+
t.references :donor,
|
8
|
+
null: false,
|
9
|
+
index: { name: 'donor_on_donation_indx' },
|
10
|
+
foreign_key: { to_table: :cats_core_donors }
|
11
|
+
t.references :hrp,
|
12
|
+
null: false,
|
13
|
+
index: { name: 'hrp_on_donation_indx' },
|
14
|
+
foreign_key: { to_table: :cats_core_hrps }
|
15
|
+
t.float :amount
|
16
|
+
t.references :currency,
|
17
|
+
null: true,
|
18
|
+
index: { name: 'currency_on_donation_indx' },
|
19
|
+
foreign_key: { to_table: :cats_core_currencies }
|
20
|
+
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|