comee_core 0.2.96 → 0.2.97

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/comee/core/goods_received_notes_controller.rb +22 -0
  3. data/app/controllers/comee/core/stock_transfer_request_items_controller.rb +18 -0
  4. data/app/controllers/comee/core/stock_transfer_requests_controller.rb +19 -0
  5. data/app/controllers/comee/core/store_items_controller.rb +18 -0
  6. data/app/controllers/comee/core/stores_controller.rb +18 -0
  7. data/app/models/comee/core/goods_issued_item.rb +14 -0
  8. data/app/models/comee/core/goods_issued_note.rb +11 -0
  9. data/app/models/comee/core/goods_received_note.rb +28 -0
  10. data/app/models/comee/core/received_item.rb +22 -0
  11. data/app/models/comee/core/reorder_report.rb +27 -0
  12. data/app/models/comee/core/reorder_report_item.rb +18 -0
  13. data/app/models/comee/core/stock_transfer_request.rb +52 -0
  14. data/app/models/comee/core/stock_transfer_request_item.rb +22 -0
  15. data/app/models/comee/core/store.rb +14 -0
  16. data/app/models/comee/core/store_item.rb +18 -0
  17. data/app/serializers/comee/core/goods_received_note_serializer.rb +8 -0
  18. data/app/serializers/comee/core/stock_transfer_request_item_serializer.rb +9 -0
  19. data/app/serializers/comee/core/stock_transfer_request_serializer.rb +12 -0
  20. data/app/serializers/comee/core/store_item_serializer.rb +9 -0
  21. data/app/serializers/comee/core/store_serializer.rb +8 -0
  22. data/app/services/comee/core/goods_received_note_service.rb +69 -0
  23. data/config/routes.rb +30 -0
  24. data/db/migrate/20240401115953_create_comee_core_stores.rb +16 -0
  25. data/db/migrate/20240401123233_create_comee_core_store_items.rb +18 -0
  26. data/db/migrate/20240401124757_create_comee_core_stock_transfer_requests.rb +29 -0
  27. data/db/migrate/20240401131549_create_comee_core_stock_transfer_request_items.rb +17 -0
  28. data/db/migrate/20240401192505_create_comee_core_reorder_reports.rb +14 -0
  29. data/db/migrate/20240401193503_create_comee_core_reorder_report_items.rb +17 -0
  30. data/db/migrate/20240406120401_create_comee_core_goods_received_notes.rb +17 -0
  31. data/db/migrate/20240406124821_create_comee_core_received_items.rb +21 -0
  32. data/db/migrate/20240406142113_create_comee_core_goods_issued_notes.rb +14 -0
  33. data/db/migrate/20240406162711_create_comee_core_goods_issued_items.rb +17 -0
  34. data/lib/comee/core/version.rb +1 -1
  35. data/spec/factories/comee/core/goods_issued_items.rb +7 -0
  36. data/spec/factories/comee/core/goods_issued_notes.rb +7 -0
  37. data/spec/factories/comee/core/goods_received_notes.rb +11 -0
  38. data/spec/factories/comee/core/received_items.rb +10 -0
  39. data/spec/factories/comee/core/reorder_report_items.rb +7 -0
  40. data/spec/factories/comee/core/reorder_reports.rb +7 -0
  41. data/spec/factories/comee/core/stock_transfer_request_items.rb +7 -0
  42. data/spec/factories/comee/core/stock_transfer_requests.rb +13 -0
  43. data/spec/factories/comee/core/store_items.rb +8 -0
  44. data/spec/factories/comee/core/stores.rb +9 -0
  45. metadata +43 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56540db3f29e0545bc613264651f3f23caece20fb82c6d16b0a9ce27a81bf1d4
4
- data.tar.gz: 93295f483e5ab06207c5c8bfa7d44849b77da0d273e535ea82f876b463d601f3
3
+ metadata.gz: 5c8e51d4338bca0293010bb351722f44c8f2f653eb8afe8aca1b9abf152b2f98
4
+ data.tar.gz: b11f9d292f843c1798812e9f8fdf9447f13c34b6543f1f4c2d4d30e7bff413bb
5
5
  SHA512:
6
- metadata.gz: b09dd1bc4623d8832f1e7af935ffce50a379b77c25c258f28418d8bd4c9266e1e7efcfa96342c3a2faedd00b43c3f9b3f23586c050f7733e7ce4e6e193cb953c
7
- data.tar.gz: fcf183ea8a7a693b066481bb5af3001e8b5ca9952a72639ca44f84d07e59b0c0df8c5c23aa0e819036594a2d05d1796126a1847371e6e4c74d6b84170c94e49f
6
+ metadata.gz: 04d1973d5085f0961d4c47f569eeebdb7b7aea89f1c6b65c926095b027f9da10251bd77fbef14883bf8f681a25e12de5bf1938d75f8e22c64af6999d1a47ae1c
7
+ data.tar.gz: b211b69a816ece7e4354e9e81f643683d9f3b491041b404838e89d2f5730ac8d3744f07edc3c70f6915ec6cb347da77e2a4e58dc0c2313d0e19e66cc6109fda2
@@ -0,0 +1,22 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsReceivedNotesController < ApplicationController
4
+ include Common
5
+
6
+ def generate
7
+ service = GoodsReceivedNoteService.new
8
+ grn = service.generate_received_note(params[:id])
9
+ render_content(grn)
10
+ rescue StandardError => e
11
+ render json: {success: false, error: e.message}
12
+ end
13
+
14
+ private
15
+
16
+ def model_params
17
+ params.require(:payload).permit(:grn_number, :date_of_receipt, :total_quantity, :total_amount, :received_condition, :comments,
18
+ :purchase_order_id)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequestItemsController < ApplicationController
4
+ include Common
5
+
6
+ def filter
7
+ data = StockTransferRequestItem.ransack(params[:q]).result
8
+ render_content(data)
9
+ end
10
+
11
+ private
12
+
13
+ def model_params
14
+ params.require(:payload).permit(:quantity, :sales_order_item_id, :stock_transfer_request_id)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequestsController < ApplicationController
4
+ include Common
5
+
6
+ def filter
7
+ data = StockTransferRequest.ransack(params[:q]).result
8
+ render_content(data)
9
+ end
10
+
11
+ private
12
+
13
+ def model_params
14
+ params.require(:payload).permit(:reference_number, :reference_date, :due_date, :remark, :status, :from_id, :to_id,
15
+ :initiated_by_id, :sales_order_id)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module Comee
2
+ module Core
3
+ class StoreItemsController < ApplicationController
4
+ include Common
5
+
6
+ def filter
7
+ data = StoreItem.ransack(params[:q]).result
8
+ render_content(data)
9
+ end
10
+
11
+ private
12
+
13
+ def model_params
14
+ params.require(:payload).permit(:quantity, :reorder_threshold, :product_id, :store_id)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Comee
2
+ module Core
3
+ class StoresController < ApplicationController
4
+ include Common
5
+
6
+ def filter
7
+ data = Store.ransack(params[:q]).result
8
+ render_content(data)
9
+ end
10
+
11
+ private
12
+
13
+ def model_params
14
+ params.require(:payload).permit(:code, :name, :address, :email, :warehouse_manager_id)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsIssuedItem < ApplicationRecord
4
+ belongs_to :stock_transfer_request_item
5
+ belongs_to :goods_issued_note
6
+
7
+ def product
8
+ stock_transfer_request_item.sales_order_item.product
9
+ end
10
+
11
+ validates :quantity, presence: true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsIssuedNote < ApplicationRecord
4
+ belongs_to :stock_transfer_request
5
+ has_many :goods_issued_items
6
+
7
+ validates :gin_number, :stock_transfer_request, uniqueness: true
8
+ validates :date_issued, :gin_number, presence: true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsReceivedNote < ApplicationRecord
4
+ before_create :set_grn_number
5
+ belongs_to :purchase_order
6
+ has_many :received_items
7
+
8
+ validates :grn_number, uniqueness: true
9
+ validates :date_of_receipt, presence: true
10
+ validates :total_quantity, :total_amount, presence: true, numericality: {greater_than_or_equal_to: 0}
11
+
12
+ private
13
+
14
+ def set_grn_number
15
+ self.grn_number = generate_grn_number
16
+ end
17
+
18
+ def generate_grn_number
19
+ loop do
20
+ number = SecureRandom.random_number(10000000)
21
+ grn_number = "GRN-#{number}"
22
+
23
+ break grn_number unless GoodsReceivedNote.where(grn_number: grn_number).exists?
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ module Comee
2
+ module Core
3
+ class ReceivedItem < ApplicationRecord
4
+ belongs_to :goods_received_note
5
+ belongs_to :purchase_order_item
6
+ before_save :update_total_price
7
+ validate :check_quantity_received
8
+
9
+ validates :quantity_ordered, :quantity_received, :unit_price, :total_price, presence: true,
10
+ numericality: {greater_than_or_equal_to: 0}
11
+
12
+ def update_total_price
13
+ self.total_price ||= 0
14
+ self.total_price = unit_price * quantity_received
15
+ end
16
+
17
+ def check_quantity_received
18
+ errors.add(:quantity_received, "can't be greater than quantity ordered") if quantity_received.to_i > quantity_ordered.to_i
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ module Comee
2
+ module Core
3
+ class ReorderReport < ApplicationRecord
4
+ before_create :set_reference_number
5
+ belongs_to :store
6
+ has_many :reorder_report_items
7
+
8
+ validates :report_date, presence: true
9
+ validates :reference_number, uniqueness: true
10
+
11
+ private
12
+
13
+ def set_reference_number
14
+ self.reference_number = generate_reference_number
15
+ end
16
+
17
+ def generate_reference_number
18
+ loop do
19
+ number = SecureRandom.random_number(10000000)
20
+ reference_number = "RR-#{number}"
21
+
22
+ break reference_number unless ReorderReport.where(reference_number: reference_number).exists?
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ module Comee
2
+ module Core
3
+ class ReorderReportItem < ApplicationRecord
4
+ belongs_to :reorder_report
5
+ belongs_to :product
6
+
7
+ validates :quantity, presence: true
8
+
9
+ def self.ransackable_attributes(_auth_object = nil)
10
+ %w[created_at id id_value product_id quantity reorder_report_id updated_at]
11
+ end
12
+
13
+ def self.ransackable_associations
14
+ %w[reorder_report product]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,52 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequest < ApplicationRecord
4
+ before_create :set_reference_number
5
+
6
+ belongs_to :from, class_name: "Comee::Core::Store", optional: true
7
+ belongs_to :to, class_name: "Comee::Core::FulfillmentCenter", optional: true
8
+ belongs_to :initiated_by, class_name: "Comee::Core::User", optional: true
9
+ belongs_to :sales_order
10
+ has_many :stock_transfer_request_items
11
+
12
+ validates :reference_number, uniqueness: true
13
+ validates :reference_number, :reference_date, :due_date, :status, presence: true
14
+ validate :validate_due_date_is_after_reference_date, if: -> { due_date.present? && reference_date.present? }
15
+ enum status: {
16
+ draft: 0,
17
+ issued: 1,
18
+ accepted: 2,
19
+ transferred: 3
20
+ }
21
+ def validate_due_date_is_after_reference_date
22
+ return if due_date > reference_date
23
+
24
+ errors.add(:due_date, "must be after reference date")
25
+ end
26
+
27
+ def self.ransackable_attributes(_auth_object = nil)
28
+ %w[created_at due_date from_id id id_value initiated_by_id reference_date reference_number remark
29
+ sales_order_id status to_id updated_at]
30
+ end
31
+
32
+ def self.ransackable_associations(_auth_object = nil)
33
+ %w[from initiated_by sales_order to]
34
+ end
35
+
36
+ private
37
+
38
+ def set_reference_number
39
+ self.reference_number = generate_reference_number
40
+ end
41
+
42
+ def generate_reference_number
43
+ loop do
44
+ number = SecureRandom.random_number(10000000)
45
+ reference_number = "STR-#{number}"
46
+
47
+ break reference_number unless StockTransferRequest.where(reference_number: reference_number).exists?
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,22 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequestItem < ApplicationRecord
4
+ belongs_to :sales_order_item
5
+ belongs_to :stock_transfer_request
6
+
7
+ validates :quantity, presence: true
8
+
9
+ def product
10
+ sales_order_item.product
11
+ end
12
+
13
+ def self.ransackable_attributes(_auth_object = nil)
14
+ %w[created_at id id_value quantity sales_order_item_id stock_transfer_request_id updated_at]
15
+ end
16
+
17
+ def self.ransackable_associations(_auth_object = nil)
18
+ %w[sales_order_item stock_transfer_request]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Comee
2
+ module Core
3
+ class Store < ApplicationRecord
4
+ belongs_to :warehouse_manager, class_name: "Comee::Core::User", optional: true
5
+
6
+ validates :name, :address, :email, :code, presence: true
7
+ validates :email, format: {with: URI::MailTo::EMAIL_REGEXP}
8
+
9
+ def self.ransackable_attributes(_auth_object = nil)
10
+ %w[address code created_at email id id_value name updated_at]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ module Comee
2
+ module Core
3
+ class StoreItem < ApplicationRecord
4
+ belongs_to :product
5
+ belongs_to :store
6
+
7
+ validates :quantity, :reorder_threshold, presence: true
8
+
9
+ def self.ransackable_attributes(_auth_object = nil)
10
+ %w[created_at id id_value product_id quantity reorder_threshold store_id updated_at]
11
+ end
12
+
13
+ def self.ransackable_associations(_auth_object = nil)
14
+ %w[product store]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsReceivedNoteSerializer < ActiveModel::Serializer
4
+ attributes :id, :grn_number, :date_of_receipt, :total_quantity, :total_amount, :received_condition, :comments
5
+ belongs_to :purchase_order
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequestItemSerializer < ActiveModel::Serializer
4
+ attributes :id, :quantity, :product
5
+ belongs_to :stock_transfer_request
6
+ belongs_to :sales_order_item
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module Comee
2
+ module Core
3
+ class StockTransferRequestSerializer < ActiveModel::Serializer
4
+ attributes :id, :reference_number, :reference_date, :due_date, :remark, :status
5
+ belongs_to :from
6
+ belongs_to :to
7
+ belongs_to :initiated_by
8
+ belongs_to :sales_order
9
+ has_many :stock_transfer_request_items
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module Comee
2
+ module Core
3
+ class StoreItemSerializer < ActiveModel::Serializer
4
+ attributes :id, :quantity, :reorder_threshold
5
+ belongs_to :product
6
+ belongs_to :store
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Comee
2
+ module Core
3
+ class StoreSerializer < ActiveModel::Serializer
4
+ attributes :id, :code, :name, :address, :email
5
+ belongs_to :warehouse_manager
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,69 @@
1
+ module Comee
2
+ module Core
3
+ class GoodsReceivedNoteService
4
+ def generate_received_note(id)
5
+ goods_received_note = nil
6
+
7
+ begin
8
+ purchase_order = PurchaseOrder.find(id)
9
+ rescue ActiveRecord::RecordNotFound
10
+ raise StandardError, "Purchase Order does not exist."
11
+ end
12
+
13
+ if GoodsReceivedNote.exists?(purchase_order: purchase_order)
14
+ raise StandardError, "Goods Received Note already exists for this purchase order"
15
+ end
16
+
17
+ GoodsReceivedNote.transaction do
18
+ purchase_order_items = PurchaseOrderItem.where(purchase_order_id: purchase_order.id)
19
+
20
+ goods_received_note = GoodsReceivedNote.create!(
21
+ date_of_receipt: Date.current,
22
+ total_quantity: 0, # set initial quantity
23
+ total_amount: 0, # set initial amount
24
+ received_condition: "",
25
+ comments: "",
26
+ purchase_order_id: purchase_order.id
27
+ )
28
+
29
+ begin
30
+ ReceivedItem.insert_all(
31
+ purchase_order_items.map do |poi|
32
+ {
33
+ purchase_order_item_id: poi.id,
34
+ goods_received_note_id: goods_received_note.id,
35
+ unit_price: poi.price,
36
+ total_price: poi.total_price,
37
+ quantity_ordered: poi.quantity,
38
+ quantity_received: 0
39
+ }
40
+ end
41
+ )
42
+ rescue StandardError => e
43
+ raise StandardError, "Failed to generate received note items: #{e.message}"
44
+ end
45
+ total_quantity = calculate_grn_total_quantity(goods_received_note)
46
+ total_price = calculate_grn_total_price(goods_received_note)
47
+ goods_received_note.update!(total_amount: total_price, total_quantity: total_quantity)
48
+ end
49
+ goods_received_note
50
+ rescue StandardError
51
+ raise
52
+ end
53
+
54
+ def check_grn_existence(purchase_order)
55
+ return unless GoodsReceivedNote.exists?(purchase_order_id: purchase_order.id)
56
+
57
+ raise(StandardError, "Goods Received Note already exists for this purchase order")
58
+ end
59
+
60
+ def calculate_grn_total_quantity(goods_received_note)
61
+ goods_received_note.received_items.sum(:quantity_received)
62
+ end
63
+
64
+ def calculate_grn_total_price(goods_received_note)
65
+ goods_received_note.received_items.sum(:total_price)
66
+ end
67
+ end
68
+ end
69
+ end
data/config/routes.rb CHANGED
@@ -175,4 +175,34 @@ Comee::Core::Engine.routes.draw do
175
175
  resources :application_modules
176
176
 
177
177
  resources :user_application_roles
178
+
179
+ resources :stores do
180
+ collection do
181
+ post "filter"
182
+ end
183
+ end
184
+
185
+ resources :store_items do
186
+ collection do
187
+ post "filter"
188
+ end
189
+ end
190
+
191
+ resources :stock_transfer_requests do
192
+ collection do
193
+ post "filter"
194
+ end
195
+ end
196
+
197
+ resources :stock_transfer_request_items do
198
+ collection do
199
+ post "filter"
200
+ end
201
+ end
202
+
203
+ resources :goods_received_notes do
204
+ member do
205
+ post "generate"
206
+ end
207
+ end
178
208
  end
@@ -0,0 +1,16 @@
1
+ class CreateComeeCoreStores < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_stores do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :address, null: false
7
+ t.string :email, null: false
8
+ t.references :warehouse_manager,
9
+ null: false,
10
+ index: {name: "wm_on_ccstr_indx"},
11
+ foreign_key: {to_table: :comee_core_users}
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ class CreateComeeCoreStoreItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_store_items do |t|
4
+ t.float :quantity, null: false
5
+ t.float :reorder_threshold, null: false, default: 10
6
+ t.references :product,
7
+ null: false,
8
+ index: {name: "product_on_ccsi_indx"},
9
+ foreign_key: {to_table: :comee_core_products}
10
+ t.references :store,
11
+ null: false,
12
+ index: {name: "store_on_ccsi_indx"},
13
+ foreign_key: {to_table: :comee_core_stores}
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ class CreateComeeCoreStockTransferRequests < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_stock_transfer_requests do |t|
4
+ t.string :reference_number, null: false
5
+ t.date :reference_date, null: false, default: Date.current
6
+ t.date :due_date, null: false
7
+ t.string :remark
8
+ t.references :from,
9
+ null: false,
10
+ index: {name: "from_on_ccstr_indx"},
11
+ foreign_key: {to_table: :comee_core_stores}
12
+ t.references :to,
13
+ null: false,
14
+ index: {name: "to_on_ccstr_indx"},
15
+ foreign_key: {to_table: :comee_core_fulfillment_centers}
16
+ t.integer :status, null: false, default: 0
17
+ t.references :initiated_by,
18
+ null: false,
19
+ index: {name: "initiated_by_on_ccstr_indx"},
20
+ foreign_key: {to_table: :comee_core_users}
21
+ t.references :sales_order,
22
+ null: false,
23
+ index: {name: "so_on_ccstr_indx"},
24
+ foreign_key: {to_table: :comee_core_sales_orders}
25
+
26
+ t.timestamps
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ class CreateComeeCoreStockTransferRequestItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_stock_transfer_request_items do |t|
4
+ t.float :quantity, null: false
5
+ t.references :sales_order_item,
6
+ null: false,
7
+ index: {name: "soi_on_ccsri_indx"},
8
+ foreign_key: {to_table: :comee_core_sales_order_items}
9
+ t.references :stock_transfer_request,
10
+ null: false,
11
+ index: {name: "sri_on_ccsri_indx"},
12
+ foreign_key: {to_table: :comee_core_stock_transfer_requests}
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ class CreateComeeCoreReorderReports < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_reorder_reports do |t|
4
+ t.string :reference_number
5
+ t.date :report_date, null: false, default: Date.current
6
+ t.references :store,
7
+ null: false,
8
+ index: {name: "store_on_ccrr_index"},
9
+ foreign_key: {to_table: :comee_core_stores}
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ class CreateComeeCoreReorderReportItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_reorder_report_items do |t|
4
+ t.float :quantity, null: false
5
+ t.references :reorder_report,
6
+ null: false,
7
+ index: {name: "reorder_report_on_ccrri_index"},
8
+ foreign_key: {to_table: :comee_core_reorder_reports}
9
+ t.references :product,
10
+ null: false,
11
+ index: {name: "product_on_ccrri_index"},
12
+ foreign_key: {to_table: :comee_core_products}
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ class CreateComeeCoreGoodsReceivedNotes < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_goods_received_notes do |t|
4
+ t.string :grn_number
5
+ t.string :date_of_receipt
6
+ t.float :total_quantity, null: false
7
+ t.float :total_amount, null: false
8
+ t.string :received_condition
9
+ t.string :comments
10
+ t.references :purchase_order,
11
+ null: false,
12
+ index: {name: "po_on_ccgrn_indx"},
13
+ foreign_key: {to_table: :comee_core_purchase_orders}
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ class CreateComeeCoreReceivedItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_received_items do |t|
4
+ t.float :quantity_ordered, null: false
5
+ t.float :quantity_received, null: false
6
+ t.float :unit_price, null: false
7
+ t.float :total_price, null: false
8
+ t.references :goods_received_note,
9
+ null: false,
10
+ index: {name: "grn_on_ccri_indx"},
11
+ foreign_key: {to_table: :comee_core_goods_received_notes}
12
+
13
+ t.references :purchase_order_item,
14
+ null: false,
15
+ index: {name: "poi_on_ccri_indx"},
16
+ foreign_key: {to_table: :comee_core_purchase_order_items}
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ class CreateComeeCoreGoodsIssuedNotes < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_goods_issued_notes do |t|
4
+ t.string :gin_number, null: false
5
+ t.date :date_issued, null: false
6
+ t.references :stock_transfer_request,
7
+ null: false,
8
+ index: {name: "str_on_ccgin_indx"},
9
+ foreign_key: {to_table: :comee_core_stock_transfer_requests}
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ class CreateComeeCoreGoodsIssuedItems < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_goods_issued_items do |t|
4
+ t.float :quantity, null: false
5
+ t.references :stock_transfer_request_item,
6
+ null: false,
7
+ index: {name: "stri_on_ccgit_index"},
8
+ foreign_key: {to_table: :comee_core_stock_transfer_request_items}
9
+ t.references :goods_issued_note,
10
+ null: false,
11
+ index: {name: "gin_on_ccgit_index"},
12
+ foreign_key: {to_table: :comee_core_goods_issued_notes}
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.2.96".freeze
3
+ VERSION = "0.2.97".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :goods_issued_item, class: "Comee::Core::GoodsIssuedItem" do
3
+ quantity { Faker::Number.between(from: 1, to: 20) }
4
+ stock_transfer_request_item
5
+ goods_issued_note
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :goods_issued_note, class: "Comee::Core::GoodsIssuedNote" do
3
+ gin_number { Faker::Alphanumeric.alpha(number: 10) }
4
+ date_issued { Date.current }
5
+ stock_transfer_request
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ FactoryBot.define do
2
+ factory :goods_received_note, class: "Comee::Core::GoodsReceivedNote" do
3
+ grn_number { Faker::Alphanumeric.alpha(number: 10) }
4
+ date_of_receipt { Date.current }
5
+ total_quantity { Faker::Number.between(from: 1, to: 20) }
6
+ total_amount { Faker::Number.between(from: 100, to: 2000) }
7
+ received_condition { Faker::Lorem.word }
8
+ comments { Faker::Lorem.sentence }
9
+ purchase_order
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :received_item, class: "Comee::Core::ReceivedItem" do
3
+ quantity_ordered { 10 }
4
+ quantity_received { 10 }
5
+ unit_price { Faker::Number.between(from: 100, to: 200) }
6
+ total_price { Faker::Number.between(from: 100, to: 2000) }
7
+ goods_received_note
8
+ purchase_order_item
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :reorder_report_item, class: "Comee::Core::ReorderReportItem" do
3
+ quantity { Faker::Number.between(from: 0, to: 20) }
4
+ reorder_report
5
+ product
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :reorder_report, class: "Comee::Core::ReorderReport" do
3
+ report_date { Date.current }
4
+ reference_number { "RR-#{SecureRandom.random_number(10000000)}" }
5
+ store
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :stock_transfer_request_item, class: "Comee::Core::StockTransferRequestItem" do
3
+ quantity { Faker::Number.between(from: 0, to: 20) }
4
+ sales_order_item
5
+ stock_transfer_request
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ FactoryBot.define do
2
+ factory :stock_transfer_request, class: "Comee::Core::StockTransferRequest" do
3
+ reference_number { Faker::Alphanumeric.alpha(number: 10) }
4
+ reference_date { Date.current }
5
+ due_date { Date.current.advance(days: 10) }
6
+ remark { Faker::Lorem.word }
7
+ from factory: :store
8
+ to factory: :fulfillment_center
9
+ status { 0 }
10
+ initiated_by factory: :user
11
+ sales_order
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :store_item, class: "Comee::Core::StoreItem" do
3
+ quantity { Faker::Number.between(from: 0, to: 20) }
4
+ reorder_threshold { Faker::Number.between(from: 0, to: 20) }
5
+ product
6
+ store
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :store, class: "Comee::Core::Store" do
3
+ code { Faker::Alphanumeric.alpha(number: 8) }
4
+ name { Faker::Name.name }
5
+ address { Faker::Address.street_address }
6
+ email { Faker::Internet.email }
7
+ warehouse_manager factory: :user
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comee_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.96
4
+ version: 0.2.97
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-15 00:00:00.000000000 Z
11
+ date: 2024-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -294,6 +294,7 @@ files:
294
294
  - app/controllers/comee/core/customs_details_controller.rb
295
295
  - app/controllers/comee/core/external_rfqs_controller.rb
296
296
  - app/controllers/comee/core/fulfillment_centers_controller.rb
297
+ - app/controllers/comee/core/goods_received_notes_controller.rb
297
298
  - app/controllers/comee/core/item_statuses_controller.rb
298
299
  - app/controllers/comee/core/lookups_controller.rb
299
300
  - app/controllers/comee/core/notifications_controller.rb
@@ -305,6 +306,10 @@ files:
305
306
  - app/controllers/comee/core/sales_order_items_controller.rb
306
307
  - app/controllers/comee/core/sales_orders_controller.rb
307
308
  - app/controllers/comee/core/shipment_items_controller.rb
309
+ - app/controllers/comee/core/stock_transfer_request_items_controller.rb
310
+ - app/controllers/comee/core/stock_transfer_requests_controller.rb
311
+ - app/controllers/comee/core/store_items_controller.rb
312
+ - app/controllers/comee/core/stores_controller.rb
308
313
  - app/controllers/comee/core/suppliers_controller.rb
309
314
  - app/controllers/comee/core/unit_conversions_controller.rb
310
315
  - app/controllers/comee/core/units_controller.rb
@@ -337,6 +342,9 @@ files:
337
342
  - app/models/comee/core/email_setting.rb
338
343
  - app/models/comee/core/external_rfq.rb
339
344
  - app/models/comee/core/fulfillment_center.rb
345
+ - app/models/comee/core/goods_issued_item.rb
346
+ - app/models/comee/core/goods_issued_note.rb
347
+ - app/models/comee/core/goods_received_note.rb
340
348
  - app/models/comee/core/inventory.rb
341
349
  - app/models/comee/core/invoice.rb
342
350
  - app/models/comee/core/invoice_item.rb
@@ -360,12 +368,19 @@ files:
360
368
  - app/models/comee/core/purchase_requisition_item.rb
361
369
  - app/models/comee/core/quotation_request.rb
362
370
  - app/models/comee/core/quotation_request_item.rb
371
+ - app/models/comee/core/received_item.rb
372
+ - app/models/comee/core/reorder_report.rb
373
+ - app/models/comee/core/reorder_report_item.rb
363
374
  - app/models/comee/core/role.rb
364
375
  - app/models/comee/core/sales_order.rb
365
376
  - app/models/comee/core/sales_order_item.rb
366
377
  - app/models/comee/core/shipment_instruction.rb
367
378
  - app/models/comee/core/shipment_instruction_item.rb
368
379
  - app/models/comee/core/shipment_item.rb
380
+ - app/models/comee/core/stock_transfer_request.rb
381
+ - app/models/comee/core/stock_transfer_request_item.rb
382
+ - app/models/comee/core/store.rb
383
+ - app/models/comee/core/store_item.rb
369
384
  - app/models/comee/core/supplier.rb
370
385
  - app/models/comee/core/supplier_invoice.rb
371
386
  - app/models/comee/core/supplier_payment.rb
@@ -389,6 +404,7 @@ files:
389
404
  - app/serializers/comee/core/customs_detail_serializer.rb
390
405
  - app/serializers/comee/core/external_rfq_serializer.rb
391
406
  - app/serializers/comee/core/fulfillment_center_serializer.rb
407
+ - app/serializers/comee/core/goods_received_note_serializer.rb
392
408
  - app/serializers/comee/core/item_status_serializer.rb
393
409
  - app/serializers/comee/core/lookup_serializer.rb
394
410
  - app/serializers/comee/core/master_price_serializer.rb
@@ -405,6 +421,10 @@ files:
405
421
  - app/serializers/comee/core/sales_order_serializer.rb
406
422
  - app/serializers/comee/core/shipment_instruction_item_serializer.rb
407
423
  - app/serializers/comee/core/shipment_item_serializer.rb
424
+ - app/serializers/comee/core/stock_transfer_request_item_serializer.rb
425
+ - app/serializers/comee/core/stock_transfer_request_serializer.rb
426
+ - app/serializers/comee/core/store_item_serializer.rb
427
+ - app/serializers/comee/core/store_serializer.rb
408
428
  - app/serializers/comee/core/supplier_serializer.rb
409
429
  - app/serializers/comee/core/unit_conversion_serializer.rb
410
430
  - app/serializers/comee/core/unit_serializer.rb
@@ -412,6 +432,7 @@ files:
412
432
  - app/serializers/comee/core/user_serializer.rb
413
433
  - app/services/comee/core/beo_service.rb
414
434
  - app/services/comee/core/customer_order_service.rb
435
+ - app/services/comee/core/goods_received_note_service.rb
415
436
  - app/services/comee/core/product_lookup_service.rb
416
437
  - app/services/comee/core/quotation_request_service.rb
417
438
  - app/services/comee/core/sales_order_service.rb
@@ -482,6 +503,16 @@ files:
482
503
  - db/migrate/20240328132454_create_comee_core_supplier_invoices.rb
483
504
  - db/migrate/20240328132713_create_comee_core_payment_orders.rb
484
505
  - db/migrate/20240328132921_create_comee_core_supplier_payments.rb
506
+ - db/migrate/20240401115953_create_comee_core_stores.rb
507
+ - db/migrate/20240401123233_create_comee_core_store_items.rb
508
+ - db/migrate/20240401124757_create_comee_core_stock_transfer_requests.rb
509
+ - db/migrate/20240401131549_create_comee_core_stock_transfer_request_items.rb
510
+ - db/migrate/20240401192505_create_comee_core_reorder_reports.rb
511
+ - db/migrate/20240401193503_create_comee_core_reorder_report_items.rb
512
+ - db/migrate/20240406120401_create_comee_core_goods_received_notes.rb
513
+ - db/migrate/20240406124821_create_comee_core_received_items.rb
514
+ - db/migrate/20240406142113_create_comee_core_goods_issued_notes.rb
515
+ - db/migrate/20240406162711_create_comee_core_goods_issued_items.rb
485
516
  - db/migrate/20240407083617_create_comee_core_email_settings.rb
486
517
  - db/migrate/20240503040722_create_comee_core_client_addresses.rb
487
518
  - lib/comee/core.rb
@@ -509,6 +540,9 @@ files:
509
540
  - spec/factories/comee/core/email_settings.rb
510
541
  - spec/factories/comee/core/external_rfqs.rb
511
542
  - spec/factories/comee/core/fulfillment_centers.rb
543
+ - spec/factories/comee/core/goods_issued_items.rb
544
+ - spec/factories/comee/core/goods_issued_notes.rb
545
+ - spec/factories/comee/core/goods_received_notes.rb
512
546
  - spec/factories/comee/core/inventories.rb
513
547
  - spec/factories/comee/core/invoice_items.rb
514
548
  - spec/factories/comee/core/invoices.rb
@@ -531,12 +565,19 @@ files:
531
565
  - spec/factories/comee/core/purchase_requisitions.rb
532
566
  - spec/factories/comee/core/quotation_request_items.rb
533
567
  - spec/factories/comee/core/quotation_requests.rb
568
+ - spec/factories/comee/core/received_items.rb
569
+ - spec/factories/comee/core/reorder_report_items.rb
570
+ - spec/factories/comee/core/reorder_reports.rb
534
571
  - spec/factories/comee/core/roles.rb
535
572
  - spec/factories/comee/core/sales_order_items.rb
536
573
  - spec/factories/comee/core/sales_orders.rb
537
574
  - spec/factories/comee/core/shipment_instruction_items.rb
538
575
  - spec/factories/comee/core/shipment_instructions.rb
539
576
  - spec/factories/comee/core/shipment_items.rb
577
+ - spec/factories/comee/core/stock_transfer_request_items.rb
578
+ - spec/factories/comee/core/stock_transfer_requests.rb
579
+ - spec/factories/comee/core/store_items.rb
580
+ - spec/factories/comee/core/stores.rb
540
581
  - spec/factories/comee/core/supplier_invoices.rb
541
582
  - spec/factories/comee/core/supplier_payments.rb
542
583
  - spec/factories/comee/core/suppliers.rb