cats_core 1.4.8 → 1.4.11
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.
- checksums.yaml +4 -4
- data/app/controllers/cats/core/access_controller.rb +2 -2
- data/app/controllers/cats/core/application_controller.rb +2 -2
- data/app/controllers/cats/core/commodities_controller.rb +2 -15
- data/app/controllers/cats/core/commodity_categories_controller.rb +8 -39
- data/app/controllers/cats/core/dispatch_plan_items_controller.rb +4 -3
- data/app/controllers/cats/core/dispatch_plans_controller.rb +3 -3
- data/app/controllers/cats/core/dispatch_transactions_controller.rb +3 -2
- data/app/controllers/cats/core/dispatches_controller.rb +16 -20
- data/app/controllers/cats/core/locations_controller.rb +5 -4
- data/app/controllers/cats/core/lost_commodities_controller.rb +3 -2
- data/app/controllers/cats/core/monthly_plans_controller.rb +5 -4
- data/app/controllers/cats/core/notifications_controller.rb +1 -0
- data/app/controllers/cats/core/receipt_transactions_controller.rb +16 -18
- data/app/controllers/cats/core/receipts_controller.rb +9 -13
- data/app/controllers/cats/core/roles_controller.rb +7 -7
- data/app/controllers/cats/core/routes_controller.rb +1 -1
- data/app/controllers/cats/core/stacks_controller.rb +3 -2
- data/app/controllers/cats/core/transporters_controller.rb +2 -2
- data/app/controllers/cats/core/unit_of_measures_controller.rb +1 -37
- data/app/controllers/cats/core/users_controller.rb +33 -44
- data/app/controllers/concerns/cats/core/common.rb +23 -6
- data/app/models/cats/core/commodity.rb +9 -0
- data/app/models/cats/core/transport_order.rb +24 -0
- data/app/models/cats/core/transport_order_item.rb +25 -0
- data/app/models/cats/core/transport_requisition.rb +21 -5
- data/db/migrate/20220506082329_create_cats_core_transport_orders.rb +21 -0
- data/db/migrate/20220506083042_create_cats_core_transport_order_items.rb +33 -0
- data/lib/cats/core/version.rb +1 -1
- data/spec/factories/cats/core/transport_order_items.rb +10 -0
- data/spec/factories/cats/core/transport_orders.rb +8 -0
- data/spec/factories/cats/core/transport_requisitions.rb +7 -0
- metadata +8 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 76ca8cc4de9fdcbcc3f6a6b183fe9a8ec3b207e9fe0d60433a173eb854c9e482
         | 
| 4 | 
            +
              data.tar.gz: 39c1d04223ff01f1d0ada3fc7b9587b2b0db778dd8e7d113ac262359dc8cbf2b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e8b3bfbdf2c3f776f9a00c46453c7e720e217ca5a092e938371d256bd10f2f5751832464c73622a75728bc70e6588069125c2560308e1400b8e8fe3aa55a0427
         | 
| 7 | 
            +
              data.tar.gz: '0768b2e8680b04b02293061ab4eb1adb884657c21c29457adca4c56f4c4583572784495bde0c09e0d52779c9ec59e1db426d4c0e8769b0f867759820bb494a0b'
         | 
| @@ -4,7 +4,7 @@ module Cats | |
| 4 4 | 
             
                  skip_before_action :authenticate, only: [:login]
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def login
         | 
| 7 | 
            -
                    user =  | 
| 7 | 
            +
                    user = User.find_by(email: auth_params[:email])
         | 
| 8 8 | 
             
                    if user
         | 
| 9 9 | 
             
                      if user.authenticate(auth_params[:password])
         | 
| 10 10 | 
             
                        roles = user.roles.map(&:name)
         | 
| @@ -18,7 +18,7 @@ module Cats | |
| 18 18 | 
             
                          id: user.id, email: user.email, first_name: user.first_name, last_name: user.last_name, roles: roles,
         | 
| 19 19 | 
             
                          details: user.details
         | 
| 20 20 | 
             
                        }
         | 
| 21 | 
            -
                        jwt =  | 
| 21 | 
            +
                        jwt = TokenAuthService.issue(payload)
         | 
| 22 22 | 
             
                        render json: { token: jwt, user: payload }
         | 
| 23 23 | 
             
                      else
         | 
| 24 24 | 
             
                        render json: { error: 'Invalid password.' }, status: 400
         | 
| @@ -6,7 +6,7 @@ module Cats | |
| 6 6 | 
             
                  def current_user
         | 
| 7 7 | 
             
                    return if token.nil?
         | 
| 8 8 |  | 
| 9 | 
            -
                    user =  | 
| 9 | 
            +
                    user = User.find(auth['id'])
         | 
| 10 10 | 
             
                    @current_user ||= user
         | 
| 11 11 | 
             
                  end
         | 
| 12 12 |  | 
| @@ -27,7 +27,7 @@ module Cats | |
| 27 27 | 
             
                  end
         | 
| 28 28 |  | 
| 29 29 | 
             
                  def auth
         | 
| 30 | 
            -
                     | 
| 30 | 
            +
                    TokenAuthService.decode(token)
         | 
| 31 31 | 
             
                  end
         | 
| 32 32 | 
             
                end
         | 
| 33 33 | 
             
              end
         | 
| @@ -4,28 +4,15 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def approve
         | 
| 7 | 
            -
                    commodity =  | 
| 7 | 
            +
                    commodity = Commodity.find(params[:id])
         | 
| 8 8 | 
             
                    result = commodity.approve
         | 
| 9 9 | 
             
                    render json: { success: result, data: serialize(commodity) }
         | 
| 10 10 | 
             
                  rescue StandardError => e
         | 
| 11 11 | 
             
                    render json: { success: false, error: e.message }
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 | 
            -
                  def update
         | 
| 15 | 
            -
                    if @obj.status == Cats::Core::Commodity::APPROVED
         | 
| 16 | 
            -
                      render json: { success: false, error: 'An approved record cannot be edited.' }
         | 
| 17 | 
            -
                      return
         | 
| 18 | 
            -
                    end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                    if @obj.update(model_params)
         | 
| 21 | 
            -
                      render json: { success: true, data: serialize(@obj) }
         | 
| 22 | 
            -
                    else
         | 
| 23 | 
            -
                      render json: { success: false, error: @obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 24 | 
            -
                    end
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
             | 
| 27 14 | 
             
                  def filter
         | 
| 28 | 
            -
                    query =  | 
| 15 | 
            +
                    query = Commodity.ransack(params[:q])
         | 
| 29 16 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 30 17 | 
             
                  end
         | 
| 31 18 |  | 
| @@ -1,62 +1,31 @@ | |
| 1 1 | 
             
            module Cats
         | 
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class CommodityCategoriesController < ApplicationController
         | 
| 4 | 
            -
                   | 
| 4 | 
            +
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 9 | 
            -
                     | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      CommodityCategory.all.reject(&:has_children?)
         | 
| 9 | 
            +
                    end
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 |  | 
| 12 12 | 
             
                  def all
         | 
| 13 | 
            -
                    data =  | 
| 13 | 
            +
                    data = CommodityCategory.all
         | 
| 14 14 | 
             
                    render json: { success: true, data: data }
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| 17 17 | 
             
                  def root
         | 
| 18 | 
            -
                    data =  | 
| 18 | 
            +
                    data = CommodityCategory.roots
         | 
| 19 19 | 
             
                    render json: { success: true, data: serialize(data) }
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 |  | 
| 22 | 
            -
                  def show
         | 
| 23 | 
            -
                    data = ActiveModelSerializers::SerializableResource.new(@commodity_category)
         | 
| 24 | 
            -
                    render json: { success: true, data: data }
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
             | 
| 27 22 | 
             
                  def children
         | 
| 28 | 
            -
                    parent =  | 
| 29 | 
            -
                    data  | 
| 30 | 
            -
                    render json: { success: true, data: data }
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                  def create
         | 
| 34 | 
            -
                    obj = Cats::Core::CommodityCategory.new(model_params)
         | 
| 35 | 
            -
                    if obj.save
         | 
| 36 | 
            -
                      data = ActiveModelSerializers::SerializableResource.new(obj)
         | 
| 37 | 
            -
                      render json: { success: true, data: data }, status: :created
         | 
| 38 | 
            -
                    else
         | 
| 39 | 
            -
                      render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                  def update
         | 
| 44 | 
            -
                    if @commodity_category.update(model_params)
         | 
| 45 | 
            -
                      data = ActiveModelSerializers::SerializableResource.new(@commodity_category)
         | 
| 46 | 
            -
                      render json: { success: true, data: data }
         | 
| 47 | 
            -
                    else
         | 
| 48 | 
            -
                      render json: {
         | 
| 49 | 
            -
                        success: false, error: @commodity_category.errors.full_messages[0]
         | 
| 50 | 
            -
                      }, status: :unprocessable_entity
         | 
| 51 | 
            -
                    end
         | 
| 23 | 
            +
                    parent = CommodityCategory.find(params[:id])
         | 
| 24 | 
            +
                    render json: { success: true, data: serialize(parent.children) }
         | 
| 52 25 | 
             
                  end
         | 
| 53 26 |  | 
| 54 27 | 
             
                  private
         | 
| 55 28 |  | 
| 56 | 
            -
                  def set_commodity_category
         | 
| 57 | 
            -
                    @commodity_category = Cats::Core::CommodityCategory.find(params[:id])
         | 
| 58 | 
            -
                  end
         | 
| 59 | 
            -
             | 
| 60 29 | 
             
                  def model_params
         | 
| 61 30 | 
             
                    params.require('payload').permit(:code, :name, :description, :parent_id)
         | 
| 62 31 | 
             
                  end
         | 
| @@ -4,12 +4,13 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      DispatchPlanItem.where(dispatch_plan_id: params[:id])
         | 
| 9 | 
            +
                    end
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def filter
         | 
| 12 | 
            -
                    query =  | 
| 13 | 
            +
                    query = DispatchPlanItem.ransack(params[:q])
         | 
| 13 14 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 14 15 | 
             
                  end
         | 
| 15 16 |  | 
| @@ -4,12 +4,12 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def plans_for_user
         | 
| 7 | 
            -
                    plans =  | 
| 7 | 
            +
                    plans = DispatchPlan.where(prepared_by: current_user)
         | 
| 8 8 | 
             
                    render json: { success: true, data: serialize(plans) }
         | 
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def filter
         | 
| 12 | 
            -
                    query =  | 
| 12 | 
            +
                    query = DispatchPlan.ransack(params[:q])
         | 
| 13 13 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| @@ -23,7 +23,7 @@ module Cats | |
| 23 23 |  | 
| 24 24 | 
             
                  def approve
         | 
| 25 25 | 
             
                    service = DispatchPlanService.new
         | 
| 26 | 
            -
                    plan =  | 
| 26 | 
            +
                    plan = DispatchPlan.find(params[:id])
         | 
| 27 27 | 
             
                    plan = service.approve(plan)
         | 
| 28 28 | 
             
                    render json: { success: true, data: serialize(plan) }
         | 
| 29 29 | 
             
                  rescue StandardError => e
         | 
| @@ -4,8 +4,9 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      DispatchTransaction.where(dispatch_id: params[:id])
         | 
| 9 | 
            +
                    end
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  # This end-point is used to create upstream dispatch transactions.
         | 
| @@ -4,41 +4,41 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  before_action :set_service, only: %i[create_receipt_authorization approve start search confirm]
         | 
| 7 | 
            -
                  before_action :set_dispatch, only: %i[approve start confirm commodity]
         | 
| 8 7 |  | 
| 9 8 | 
             
                  def index
         | 
| 10 | 
            -
                     | 
| 11 | 
            -
             | 
| 9 | 
            +
                    super do
         | 
| 10 | 
            +
                      Dispatch.where(dispatch_plan_item_id: params[:id])
         | 
| 11 | 
            +
                    end
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 14 | 
             
                  def create
         | 
| 15 | 
            -
                     | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                       | 
| 20 | 
            -
                    else
         | 
| 21 | 
            -
                      render json: { success: false, error: dispatch.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 15 | 
            +
                    super do
         | 
| 16 | 
            +
                      dispatch = Dispatch.new(model_params)
         | 
| 17 | 
            +
                      dispatch.dispatch_status = Dispatch::DRAFT
         | 
| 18 | 
            +
                      dispatch.prepared_by = current_user
         | 
| 19 | 
            +
                      dispatch
         | 
| 22 20 | 
             
                    end
         | 
| 23 21 | 
             
                  end
         | 
| 24 22 |  | 
| 25 23 | 
             
                  def approve
         | 
| 26 | 
            -
                     | 
| 27 | 
            -
                     | 
| 24 | 
            +
                    dispatch = set_object
         | 
| 25 | 
            +
                    dispatch.approve
         | 
| 26 | 
            +
                    render json: { success: true, data: serialize(dispatch) }
         | 
| 28 27 | 
             
                  rescue StandardError => e
         | 
| 29 28 | 
             
                    render json: { success: false, error: e.message }
         | 
| 30 29 | 
             
                  end
         | 
| 31 30 |  | 
| 32 31 | 
             
                  def start
         | 
| 33 | 
            -
                    dispatch = @service.start( | 
| 32 | 
            +
                    dispatch = @service.start(set_object)
         | 
| 34 33 | 
             
                    render json: { success: true, data: serialize(dispatch) }
         | 
| 35 34 | 
             
                  rescue StandardError => e
         | 
| 36 35 | 
             
                    render json: { success: false, error: e.message }
         | 
| 37 36 | 
             
                  end
         | 
| 38 37 |  | 
| 39 38 | 
             
                  def confirm
         | 
| 40 | 
            -
                     | 
| 41 | 
            -
                     | 
| 39 | 
            +
                    dispatch = set_object
         | 
| 40 | 
            +
                    dispatch.confirm
         | 
| 41 | 
            +
                    render json: { success: true, data: serialize(dispatch) }
         | 
| 42 42 | 
             
                  rescue StandardError => e
         | 
| 43 43 | 
             
                    render json: { success: false, error: e.message }
         | 
| 44 44 | 
             
                  end
         | 
| @@ -49,7 +49,7 @@ module Cats | |
| 49 49 | 
             
                  end
         | 
| 50 50 |  | 
| 51 51 | 
             
                  def commodity
         | 
| 52 | 
            -
                    data =  | 
| 52 | 
            +
                    data = set_object.dispatch_plan_item.commodity
         | 
| 53 53 | 
             
                    render json: { success: true, data: serialize(data) }
         | 
| 54 54 | 
             
                  end
         | 
| 55 55 |  | 
| @@ -59,10 +59,6 @@ module Cats | |
| 59 59 | 
             
                    @service = DispatchService.new
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 |  | 
| 62 | 
            -
                  def set_dispatch
         | 
| 63 | 
            -
                    @dispatch = Cats::Core::Dispatch.find(params[:id])
         | 
| 64 | 
            -
                  end
         | 
| 65 | 
            -
             | 
| 66 62 | 
             
                  def model_params
         | 
| 67 63 | 
             
                    params.require(:payload).permit(:reference_no, :dispatch_plan_item_id, :transporter_id, :plate_no,
         | 
| 68 64 | 
             
                                                    :driver_name, :driver_phone, :quantity, :remark)
         | 
| @@ -4,17 +4,18 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      Location.where(location_type: params[:location_type])
         | 
| 9 | 
            +
                    end
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def children
         | 
| 12 | 
            -
                    parent =  | 
| 13 | 
            +
                    parent = Location.find(params[:id])
         | 
| 13 14 | 
             
                    render json: { success: true, data: serialize(parent.children) }
         | 
| 14 15 | 
             
                  end
         | 
| 15 16 |  | 
| 16 17 | 
             
                  def filter
         | 
| 17 | 
            -
                    query =  | 
| 18 | 
            +
                    query = Location.ransack(params[:q])
         | 
| 18 19 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 19 20 | 
             
                  end
         | 
| 20 21 |  | 
| @@ -6,17 +6,18 @@ module Cats | |
| 6 6 | 
             
                  before_action :set_service, only: %i[generate remove_items generate_monthly_needs]
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def index
         | 
| 9 | 
            -
                     | 
| 10 | 
            -
             | 
| 9 | 
            +
                    super do
         | 
| 10 | 
            +
                      MonthlyPlan.where(plan: params[:id])
         | 
| 11 | 
            +
                    end
         | 
| 11 12 | 
             
                  end
         | 
| 12 13 |  | 
| 13 14 | 
             
                  def filter
         | 
| 14 | 
            -
                    query =  | 
| 15 | 
            +
                    query = MonthlyPlan.ransack(params[:q])
         | 
| 15 16 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 16 17 | 
             
                  end
         | 
| 17 18 |  | 
| 18 19 | 
             
                  def approve
         | 
| 19 | 
            -
                    plan =  | 
| 20 | 
            +
                    plan = MonthlyPlan.find(params[:id])
         | 
| 20 21 | 
             
                    plan.approve
         | 
| 21 22 | 
             
                    render json: { success: true, data: serialize(plan) }
         | 
| 22 23 | 
             
                  rescue StandardError => e
         | 
| @@ -2,6 +2,7 @@ module Cats | |
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class NotificationsController < ApplicationController
         | 
| 4 4 | 
             
                  before_action :set_notification, only: %i[mark_as_read mark_as_unread]
         | 
| 5 | 
            +
             | 
| 5 6 | 
             
                  def index
         | 
| 6 7 | 
             
                    data = Notification.messages(current_user.notifications.newest_first)
         | 
| 7 8 | 
             
                    render json: { success: true, data: data }
         | 
| @@ -4,28 +4,26 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      ReceiptTransaction.where(receipt_id: params[:id])
         | 
| 9 | 
            +
                    end
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def create
         | 
| 12 | 
            -
                     | 
| 13 | 
            -
             | 
| 14 | 
            -
                    # Look for a transaction with the same destination as incoming
         | 
| 15 | 
            -
                    transaction = Cats::Core::ReceiptTransaction.find_by(
         | 
| 16 | 
            -
                      receipt_id: p[:receipt_id],
         | 
| 17 | 
            -
                      destination_id: p[:destination_id]
         | 
| 18 | 
            -
                    )
         | 
| 19 | 
            -
                    if transaction
         | 
| 20 | 
            -
                      transaction.quantity += p[:quantity]
         | 
| 21 | 
            -
                    else
         | 
| 22 | 
            -
                      transaction = Cats::Core::ReceiptTransaction.new(p)
         | 
| 23 | 
            -
                    end
         | 
| 13 | 
            +
                    super do
         | 
| 14 | 
            +
                      p = model_params
         | 
| 24 15 |  | 
| 25 | 
            -
             | 
| 26 | 
            -
                       | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 16 | 
            +
                      # Look for a transaction with the same destination as incoming
         | 
| 17 | 
            +
                      transaction = ReceiptTransaction.find_by(
         | 
| 18 | 
            +
                        receipt_id: p[:receipt_id],
         | 
| 19 | 
            +
                        destination_id: p[:destination_id]
         | 
| 20 | 
            +
                      )
         | 
| 21 | 
            +
                      if transaction
         | 
| 22 | 
            +
                        transaction.quantity += p[:quantity]
         | 
| 23 | 
            +
                      else
         | 
| 24 | 
            +
                        transaction = ReceiptTransaction.new(p)
         | 
| 25 | 
            +
                      end
         | 
| 26 | 
            +
                      transaction
         | 
| 29 27 | 
             
                    end
         | 
| 30 28 | 
             
                  end
         | 
| 31 29 |  | 
| @@ -4,25 +4,21 @@ module Cats | |
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def index
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
             | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      Receipt.where(dispatch_id: params[:id])
         | 
| 9 | 
            +
                    end
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def create
         | 
| 12 | 
            -
                     | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
                      render json: { success: true, data: serialize(receipt) }
         | 
| 17 | 
            -
                    else
         | 
| 18 | 
            -
                      render json: { success: false, error: receipt.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 13 | 
            +
                    super do
         | 
| 14 | 
            +
                      service = ReceiptService.new
         | 
| 15 | 
            +
                      receipt = service.init(model_params)
         | 
| 16 | 
            +
                      receipt
         | 
| 19 17 | 
             
                    end
         | 
| 20 | 
            -
                  rescue StandardError => e
         | 
| 21 | 
            -
                    render json: { success: false, error: e.message }
         | 
| 22 18 | 
             
                  end
         | 
| 23 19 |  | 
| 24 20 | 
             
                  def start_stacking
         | 
| 25 | 
            -
                    receipt =  | 
| 21 | 
            +
                    receipt = Receipt.find(params[:id])
         | 
| 26 22 | 
             
                    service = ReceiptService.new
         | 
| 27 23 | 
             
                    result = service.start_stacking(receipt)
         | 
| 28 24 | 
             
                    render json: { success: true, data: serialize(result) }
         | 
| @@ -31,7 +27,7 @@ module Cats | |
| 31 27 | 
             
                  end
         | 
| 32 28 |  | 
| 33 29 | 
             
                  def finish_stacking
         | 
| 34 | 
            -
                    receipt =  | 
| 30 | 
            +
                    receipt = Receipt.find(params[:id])
         | 
| 35 31 | 
             
                    service = ReceiptService.new
         | 
| 36 32 | 
             
                    result = service.finish_stacking(receipt)
         | 
| 37 33 | 
             
                    render json: { success: true, data: serialize(result) }
         | 
| @@ -6,21 +6,21 @@ module Cats | |
| 6 6 | 
             
                  before_action :set_role, only: [:users]
         | 
| 7 7 |  | 
| 8 8 | 
             
                  def index
         | 
| 9 | 
            -
                     | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 9 | 
            +
                    super do
         | 
| 10 | 
            +
                      Role.joins(:application_module)
         | 
| 11 | 
            +
                          .where(cats_core_application_modules: { prefix: params[:prefix] })
         | 
| 12 | 
            +
                    end
         | 
| 12 13 | 
             
                  end
         | 
| 13 14 |  | 
| 14 15 | 
             
                  def unassigned_roles
         | 
| 15 | 
            -
                    user =  | 
| 16 | 
            -
                    roles =  | 
| 16 | 
            +
                    user = User.find(params[:id])
         | 
| 17 | 
            +
                    roles = Role.where(application_module_id: user.application_module_id)
         | 
| 17 18 | 
             
                    unassigned = roles - user.roles
         | 
| 18 19 | 
             
                    render json: { success: true, data: serialize(unassigned) }
         | 
| 19 20 | 
             
                  end
         | 
| 20 21 |  | 
| 21 22 | 
             
                  def users
         | 
| 22 | 
            -
                    data  | 
| 23 | 
            -
                    render json: { success: true, data: data }
         | 
| 23 | 
            +
                    render json: { success: true, data: serialize(@role.users) }
         | 
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 26 | 
             
                  private
         | 
| @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            module Cats
         | 
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class TransportersController < ApplicationController
         | 
| 4 | 
            -
                  include  | 
| 4 | 
            +
                  include Common
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def filter
         | 
| 7 | 
            -
                    query =  | 
| 7 | 
            +
                    query = Transporter.ransack(params[:q])
         | 
| 8 8 | 
             
                    render json: { success: true, data: serialize(query.result) }
         | 
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| @@ -1,46 +1,10 @@ | |
| 1 1 | 
             
            module Cats
         | 
| 2 2 | 
             
              module Core
         | 
| 3 3 | 
             
                class UnitOfMeasuresController < ApplicationController
         | 
| 4 | 
            -
                   | 
| 5 | 
            -
             | 
| 6 | 
            -
                  def index
         | 
| 7 | 
            -
                    data = ActiveModelSerializers::SerializableResource.new(Cats::Core::UnitOfMeasure.all)
         | 
| 8 | 
            -
                    render json: { success: true, data: data }
         | 
| 9 | 
            -
                  end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  def show
         | 
| 12 | 
            -
                    data = ActiveModelSerializers::SerializableResource.new(@unit_of_measure)
         | 
| 13 | 
            -
                    render json: { success: true, data: data }
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  def create
         | 
| 17 | 
            -
                    obj = Cats::Core::UnitOfMeasure.new(model_params)
         | 
| 18 | 
            -
                    if obj.save
         | 
| 19 | 
            -
                      data = ActiveModelSerializers::SerializableResource.new(obj)
         | 
| 20 | 
            -
                      render json: { success: true, data: data }, status: :created
         | 
| 21 | 
            -
                    else
         | 
| 22 | 
            -
                      render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 23 | 
            -
                    end
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  def update
         | 
| 27 | 
            -
                    if @unit_of_measure.update(model_params)
         | 
| 28 | 
            -
                      data = ActiveModelSerializers::SerializableResource.new(@unit_of_measure)
         | 
| 29 | 
            -
                      render json: { success: true, data: data }
         | 
| 30 | 
            -
                    else
         | 
| 31 | 
            -
                      render json: {
         | 
| 32 | 
            -
                        success: false,
         | 
| 33 | 
            -
                        error: @unit_of_measure.errors.full_messages[0]
         | 
| 34 | 
            -
                      }, status: :unprocessable_entity
         | 
| 35 | 
            -
                    end
         | 
| 36 | 
            -
                  end
         | 
| 4 | 
            +
                  include Common
         | 
| 37 5 |  | 
| 38 6 | 
             
                  private
         | 
| 39 7 |  | 
| 40 | 
            -
                  def set_unit_of_measure
         | 
| 41 | 
            -
                    @unit_of_measure = Cats::Core::UnitOfMeasure.find(params[:id])
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 8 | 
             
                  def model_params
         | 
| 45 9 | 
             
                    params.require(:payload).permit(:abbreviation, :name, :unit_type)
         | 
| 46 10 | 
             
                  end
         | 
| @@ -3,95 +3,84 @@ module Cats | |
| 3 3 | 
             
                class UsersController < ApplicationController
         | 
| 4 4 | 
             
                  include Common
         | 
| 5 5 |  | 
| 6 | 
            -
                  before_action :set_user, only: %i[update roles assign_role revoke_role stores warehouse hub]
         | 
| 7 | 
            -
             | 
| 8 6 | 
             
                  def index
         | 
| 9 | 
            -
                     | 
| 10 | 
            -
             | 
| 11 | 
            -
                     | 
| 7 | 
            +
                    super do
         | 
| 8 | 
            +
                      User.joins(:application_module).where(cats_core_application_modules: { prefix: params[:prefix] })
         | 
| 9 | 
            +
                    end
         | 
| 12 10 | 
             
                  end
         | 
| 13 11 |  | 
| 14 12 | 
             
                  def create
         | 
| 15 | 
            -
                     | 
| 16 | 
            -
             | 
| 13 | 
            +
                    super do
         | 
| 14 | 
            +
                      prefix = model_params[:application_prefix]
         | 
| 15 | 
            +
                      application_module = ApplicationModule.find_by(prefix: prefix)
         | 
| 17 16 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                      render json: { success: true, data: serialize(obj) }, status: :created
         | 
| 22 | 
            -
                    else
         | 
| 23 | 
            -
                      render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 17 | 
            +
                      obj = User.new(model_params.except(:application_prefix))
         | 
| 18 | 
            +
                      obj.application_module = application_module
         | 
| 19 | 
            +
                      obj
         | 
| 24 20 | 
             
                    end
         | 
| 25 21 | 
             
                  end
         | 
| 26 22 |  | 
| 27 23 | 
             
                  def update
         | 
| 24 | 
            +
                    user = set_object
         | 
| 28 25 | 
             
                    if model_params[:application_prefix]
         | 
| 29 26 | 
             
                      prefix = model_params[:application_prefix]
         | 
| 30 | 
            -
                      application_module =  | 
| 31 | 
            -
                       | 
| 32 | 
            -
                       | 
| 27 | 
            +
                      application_module = ApplicationModule.find_by(prefix: prefix)
         | 
| 28 | 
            +
                      user.assign_attributes(model_params.except(:application_prefix))
         | 
| 29 | 
            +
                      user.application_module = application_module
         | 
| 33 30 | 
             
                    else
         | 
| 34 | 
            -
                       | 
| 31 | 
            +
                      user.assign_attributes(model_params)
         | 
| 35 32 | 
             
                    end
         | 
| 36 33 |  | 
| 37 | 
            -
                    if  | 
| 38 | 
            -
                      render json: { success: true, data: serialize( | 
| 34 | 
            +
                    if user.save
         | 
| 35 | 
            +
                      render json: { success: true, data: serialize(user) }
         | 
| 39 36 | 
             
                    else
         | 
| 40 | 
            -
                      render json: { success: false, error:  | 
| 37 | 
            +
                      render json: { success: false, error: user.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 41 38 | 
             
                    end
         | 
| 42 39 | 
             
                  end
         | 
| 43 40 |  | 
| 44 41 | 
             
                  def roles
         | 
| 45 | 
            -
                    data  | 
| 46 | 
            -
                    render json: { success: true, data: data }
         | 
| 42 | 
            +
                    render json: { success: true, data: serialize(set_object.roles) }
         | 
| 47 43 | 
             
                  end
         | 
| 48 44 |  | 
| 49 45 | 
             
                  def assign_role
         | 
| 50 | 
            -
                    role =  | 
| 51 | 
            -
                     | 
| 46 | 
            +
                    role = Role.find(params[:role_id])
         | 
| 47 | 
            +
                    user = set_object
         | 
| 48 | 
            +
                    user.roles << role
         | 
| 52 49 |  | 
| 53 50 | 
             
                    case role.name
         | 
| 54 51 | 
             
                    when 'warehouse_manager'
         | 
| 55 | 
            -
                       | 
| 52 | 
            +
                      user.add_detail(:warehouse, params[:warehouse_id])
         | 
| 56 53 | 
             
                    when 'hub_manager'
         | 
| 57 | 
            -
                       | 
| 54 | 
            +
                      user.add_detail(:hub, params[:hub_id])
         | 
| 58 55 | 
             
                    when 'regional_manager'
         | 
| 59 | 
            -
                       | 
| 56 | 
            +
                      user.add_detail(:region, params[:region_id])
         | 
| 60 57 | 
             
                    end
         | 
| 61 58 |  | 
| 62 | 
            -
                    data  | 
| 63 | 
            -
                    render json: { success: true, data: data }
         | 
| 59 | 
            +
                    render json: { success: true, data: serialize(role) }
         | 
| 64 60 | 
             
                  end
         | 
| 65 61 |  | 
| 66 62 | 
             
                  def revoke_role
         | 
| 67 | 
            -
                     | 
| 68 | 
            -
                     | 
| 69 | 
            -
                     | 
| 70 | 
            -
                     | 
| 71 | 
            -
                    render json: { success: true, data:  | 
| 63 | 
            +
                    user = set_object
         | 
| 64 | 
            +
                    role = Role.find(params[:role_id])
         | 
| 65 | 
            +
                    user.roles.delete(role)
         | 
| 66 | 
            +
                    user.remove_detail(role.name) if %w[warehouse_manager hub_manager regional_manager].include?(role.name)
         | 
| 67 | 
            +
                    render json: { success: true, data: serialize(role) }
         | 
| 72 68 | 
             
                  end
         | 
| 73 69 |  | 
| 74 70 | 
             
                  def stores
         | 
| 75 | 
            -
                    data  | 
| 76 | 
            -
                    render json: { success: true, data: data }
         | 
| 71 | 
            +
                    render json: { success: true, data: serialize(set_object.stores) }
         | 
| 77 72 | 
             
                  end
         | 
| 78 73 |  | 
| 79 74 | 
             
                  def warehouse
         | 
| 80 | 
            -
                    data  | 
| 81 | 
            -
                    render json: { success: true, data: data }
         | 
| 75 | 
            +
                    render json: { success: true, data: serialize(set_object.warehouse) }
         | 
| 82 76 | 
             
                  end
         | 
| 83 77 |  | 
| 84 78 | 
             
                  def hub
         | 
| 85 | 
            -
                    data  | 
| 86 | 
            -
                    render json: { success: true, data: data }
         | 
| 79 | 
            +
                    render json: { success: true, data: serialize(set_object.hub) }
         | 
| 87 80 | 
             
                  end
         | 
| 88 81 |  | 
| 89 82 | 
             
                  private
         | 
| 90 83 |  | 
| 91 | 
            -
                  def set_user
         | 
| 92 | 
            -
                    @user = Cats::Core::User.find(params[:id])
         | 
| 93 | 
            -
                  end
         | 
| 94 | 
            -
             | 
| 95 84 | 
             
                  def model_params
         | 
| 96 85 | 
             
                    params.require(:payload).permit(
         | 
| 97 86 | 
             
                      :first_name, :last_name, :email, :phone_number, :active, :password, :password_confirmation, :details,
         | 
| @@ -9,8 +9,12 @@ module Cats | |
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def index
         | 
| 12 | 
            -
                    data =  | 
| 13 | 
            -
             | 
| 12 | 
            +
                    data = if block_given?
         | 
| 13 | 
            +
                             yield
         | 
| 14 | 
            +
                           else
         | 
| 15 | 
            +
                             @clazz.all
         | 
| 16 | 
            +
                           end
         | 
| 17 | 
            +
                    render json: { success: true, data: serialize(data) }
         | 
| 14 18 | 
             
                  end
         | 
| 15 19 |  | 
| 16 20 | 
             
                  def show
         | 
| @@ -18,20 +22,33 @@ module Cats | |
| 18 22 | 
             
                  end
         | 
| 19 23 |  | 
| 20 24 | 
             
                  def create
         | 
| 21 | 
            -
                    obj =  | 
| 25 | 
            +
                    obj = if block_given?
         | 
| 26 | 
            +
                            yield
         | 
| 27 | 
            +
                          else
         | 
| 28 | 
            +
                            @clazz.new(model_params)
         | 
| 29 | 
            +
                          end
         | 
| 22 30 | 
             
                    if obj.save
         | 
| 23 31 | 
             
                      render json: { success: true, data: serialize(obj) }, status: :created
         | 
| 24 32 | 
             
                    else
         | 
| 25 33 | 
             
                      render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 26 34 | 
             
                    end
         | 
| 35 | 
            +
                  rescue StandardError => e
         | 
| 36 | 
            +
                    render json: { success: false, error: e.message }
         | 
| 27 37 | 
             
                  end
         | 
| 28 38 |  | 
| 29 39 | 
             
                  def update
         | 
| 30 | 
            -
                    if  | 
| 31 | 
            -
             | 
| 40 | 
            +
                    obj = if block_given?
         | 
| 41 | 
            +
                            yield
         | 
| 42 | 
            +
                          else
         | 
| 43 | 
            +
                            obj = @obj
         | 
| 44 | 
            +
                          end
         | 
| 45 | 
            +
                    if obj.update(model_params)
         | 
| 46 | 
            +
                      render json: { success: true, data: serialize(obj) }
         | 
| 32 47 | 
             
                    else
         | 
| 33 | 
            -
                      render json: { success: false, error:  | 
| 48 | 
            +
                      render json: { success: false, error: obj.errors.full_messages[0] }, status: :unprocessable_entity
         | 
| 34 49 | 
             
                    end
         | 
| 50 | 
            +
                  rescue StandardError => e
         | 
| 51 | 
            +
                    render json: { success: false, error: e.message }
         | 
| 35 52 | 
             
                  end
         | 
| 36 53 |  | 
| 37 54 | 
             
                  private
         | 
| @@ -37,6 +37,7 @@ module Cats | |
| 37 37 | 
             
                  validates :volume_per_metric_ton, numericality: { greater_than: 0, allow_nil: true }
         | 
| 38 38 | 
             
                  validates :arrival_status, presence: true, inclusion: { in: ARRIVAL_STATUSES }
         | 
| 39 39 | 
             
                  validates :status, presence: true, inclusion: { in: STATUSES }
         | 
| 40 | 
            +
                  validate :validate_updateability, on: :update
         | 
| 40 41 |  | 
| 41 42 | 
             
                  delegate(:abbreviation, to: :unit_of_measure, prefix: 'unit')
         | 
| 42 43 | 
             
                  delegate(:reference_no, to: :source, prefix: true)
         | 
| @@ -45,6 +46,14 @@ module Cats | |
| 45 46 | 
             
                    source.commodity_category.name
         | 
| 46 47 | 
             
                  end
         | 
| 47 48 |  | 
| 49 | 
            +
                  def validate_updateability
         | 
| 50 | 
            +
                    return unless status
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    return if status_changed?
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    errors.add(:base, 'Commodity cannot be updated because it is in approved state.') if status == APPROVED
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 48 57 | 
             
                  def approve
         | 
| 49 58 | 
             
                    raise(StandardError, 'Commodity already approved.') if status == APPROVED
         | 
| 50 59 |  | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module Cats
         | 
| 2 | 
            +
              module Core
         | 
| 3 | 
            +
                class TransportOrder < ApplicationRecord
         | 
| 4 | 
            +
                  DRAFT = 'Draft'.freeze
         | 
| 5 | 
            +
                  APPROVED = 'Approved'.freeze
         | 
| 6 | 
            +
                  STATUSES = [DRAFT, APPROVED].freeze
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  belongs_to :transport_requisition
         | 
| 9 | 
            +
                  belongs_to :prepared_by, class_name: 'Cats::Core::User'
         | 
| 10 | 
            +
                  belongs_to :approved_by, class_name: 'Cats::Core::User'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  validates :status, presence: true, inclusion: { in: STATUSES }
         | 
| 13 | 
            +
                  validate :validate_against_requisition
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def validate_against_requisition
         | 
| 16 | 
            +
                    return unless transport_requisition
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    return if transport_requisition.approved?
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    errors.add(:transport_requisition, 'is not approved.')
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module Cats
         | 
| 2 | 
            +
              module Core
         | 
| 3 | 
            +
                class TransportOrderItem < ApplicationRecord
         | 
| 4 | 
            +
                  belongs_to :transport_order
         | 
| 5 | 
            +
                  belongs_to :transporter
         | 
| 6 | 
            +
                  belongs_to :transport_requisition_item
         | 
| 7 | 
            +
                  belongs_to :transport_contract, optional: true
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  validates :order_date, :valid_for, presence: true
         | 
| 10 | 
            +
                  validates :valid_for, numericality: { greater_than: 0 }
         | 
| 11 | 
            +
                  validates :transport_requisition_item_id, uniqueness: true
         | 
| 12 | 
            +
                  validate :validate_requisition
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def validate_requisition
         | 
| 15 | 
            +
                    return unless transport_requisition_item
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    return unless transport_order
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    return if transport_order.transport_requisition_id == transport_requisition_item.transport_requisition_id
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    errors.add(:transport_requisition_item, 'does not belong to the requisition of the order.')
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -14,6 +14,7 @@ module Cats | |
| 14 14 |  | 
| 15 15 | 
             
                  validates :reference_no, presence: true, uniqueness: true
         | 
| 16 16 | 
             
                  validates :status, presence: true, inclusion: { in: STATUSES }
         | 
| 17 | 
            +
                  validate :validate_status
         | 
| 17 18 |  | 
| 18 19 | 
             
                  delegate(:full_name, to: :requested_by, prefix: 'requestor')
         | 
| 19 20 | 
             
                  delegate(:full_name, to: :approved_by, prefix: 'approver', allow_nil: true)
         | 
| @@ -28,13 +29,28 @@ module Cats | |
| 28 29 | 
             
                  def approve
         | 
| 29 30 | 
             
                    raise(StandardError, 'Transport requisition is already approved.') if status == APPROVED
         | 
| 30 31 |  | 
| 31 | 
            -
                     | 
| 32 | 
            -
                       | 
| 32 | 
            +
                    begin
         | 
| 33 | 
            +
                      self.status = APPROVED
         | 
| 34 | 
            +
                      save!
         | 
| 35 | 
            +
                      self
         | 
| 36 | 
            +
                    rescue ActiveRecord::RecordInvalid => e
         | 
| 37 | 
            +
                      error = e.record.errors.full_messages_for(:status)[0]
         | 
| 38 | 
            +
                      raise(StandardError, error)
         | 
| 33 39 | 
             
                    end
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def approved?
         | 
| 43 | 
            +
                    status == APPROVED
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def validate_status
         | 
| 47 | 
            +
                    return unless status
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    return if status == DRAFT
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    return if transport_requisition_items.count.positive?
         | 
| 34 52 |  | 
| 35 | 
            -
                     | 
| 36 | 
            -
                    save!
         | 
| 37 | 
            -
                    self
         | 
| 53 | 
            +
                    errors.add(:status, 'cannot be set to "APPROVED" because the requisition has no items.') if status == APPROVED
         | 
| 38 54 | 
             
                  end
         | 
| 39 55 | 
             
                end
         | 
| 40 56 | 
             
              end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            class CreateCatsCoreTransportOrders < ActiveRecord::Migration[7.0]
         | 
| 2 | 
            +
              def change
         | 
| 3 | 
            +
                create_table :cats_core_transport_orders do |t|
         | 
| 4 | 
            +
                  t.references :transport_requisition,
         | 
| 5 | 
            +
                               null: false,
         | 
| 6 | 
            +
                               index: { name: 'tr_on_to_indx' },
         | 
| 7 | 
            +
                               foreign_key: { to_table: :cats_core_transport_requisitions }
         | 
| 8 | 
            +
                  t.references :prepared_by,
         | 
| 9 | 
            +
                               null: false,
         | 
| 10 | 
            +
                               index: { name: 'pb_on_to_indx' },
         | 
| 11 | 
            +
                               foreign_key: { to_table: :cats_core_users }
         | 
| 12 | 
            +
                  t.references :approved_by,
         | 
| 13 | 
            +
                               null: false,
         | 
| 14 | 
            +
                               index: { name: 'ab_on_to_indx' },
         | 
| 15 | 
            +
                               foreign_key: { to_table: :cats_core_users }
         | 
| 16 | 
            +
                  t.string :status, null: false, default: 'Draft'
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  t.timestamps
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            class CreateCatsCoreTransportOrderItems < ActiveRecord::Migration[7.0]
         | 
| 2 | 
            +
              def change
         | 
| 3 | 
            +
                create_table :cats_core_transport_order_items do |t|
         | 
| 4 | 
            +
                  t.references :transport_order,
         | 
| 5 | 
            +
                               null: false,
         | 
| 6 | 
            +
                               index: { name: 'to_on_toi_indx' },
         | 
| 7 | 
            +
                               foreign_key: { to_table: :cats_core_transport_orders }
         | 
| 8 | 
            +
                  t.references :transporter,
         | 
| 9 | 
            +
                               null: false,
         | 
| 10 | 
            +
                               index: { name: 'transporter_on_toi_indx' },
         | 
| 11 | 
            +
                               foreign_key: { to_table: :cats_core_transporters }
         | 
| 12 | 
            +
                  t.references :transport_contract,
         | 
| 13 | 
            +
                               null: true,
         | 
| 14 | 
            +
                               index: { name: 'tc_on_toi_indx' },
         | 
| 15 | 
            +
                               foreign_key: { to_table: :cats_core_transport_contracts }
         | 
| 16 | 
            +
                  t.references :transport_requisition_item,
         | 
| 17 | 
            +
                               null: false,
         | 
| 18 | 
            +
                               index: { name: 'tri_on_toi_indx' },
         | 
| 19 | 
            +
                               foreign_key: { to_table: :cats_core_transport_requisition_items }
         | 
| 20 | 
            +
                  t.date :order_date, null: false, default: Date.today
         | 
| 21 | 
            +
                  t.integer :valid_for, null: false, default: 10
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  t.timestamps
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                add_index(
         | 
| 27 | 
            +
                  :cats_core_transport_order_items,
         | 
| 28 | 
            +
                  :transport_requisition_item_id,
         | 
| 29 | 
            +
                  unique: true,
         | 
| 30 | 
            +
                  name: 'tri_on_toi_uniq_indx'
         | 
| 31 | 
            +
                )
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/cats/core/version.rb
    CHANGED
    
    
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            FactoryBot.define do
         | 
| 2 | 
            +
              factory :transport_order_item, class: 'Cats::Core::TransportOrderItem' do
         | 
| 3 | 
            +
                transport_order
         | 
| 4 | 
            +
                transporter
         | 
| 5 | 
            +
                transport_contract
         | 
| 6 | 
            +
                transport_requisition_item { transport_order.transport_requisition.transport_requisition_items.first }
         | 
| 7 | 
            +
                order_date { Date.today }
         | 
| 8 | 
            +
                valid_for { 10 }
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -6,5 +6,12 @@ FactoryBot.define do | |
| 6 6 | 
             
                approved_by factory: :user
         | 
| 7 7 | 
             
                status { Cats::Core::TransportRequisition::DRAFT }
         | 
| 8 8 | 
             
                unit factory: :unit_of_measure
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                trait :approved do
         | 
| 11 | 
            +
                  after(:create) do |requisition|
         | 
| 12 | 
            +
                    create(:transport_requisition_item, transport_requisition: requisition)
         | 
| 13 | 
            +
                    requisition.approve
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 9 16 | 
             
              end
         | 
| 10 17 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cats_core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.4. | 
| 4 | 
            +
              version: 1.4.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Henock L.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022- | 
| 11 | 
            +
            date: 2022-05-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: active_model_serializers
         | 
| @@ -307,6 +307,8 @@ files: | |
| 307 307 | 
             
            - app/models/cats/core/transport_bid_item.rb
         | 
| 308 308 | 
             
            - app/models/cats/core/transport_contract.rb
         | 
| 309 309 | 
             
            - app/models/cats/core/transport_offer.rb
         | 
| 310 | 
            +
            - app/models/cats/core/transport_order.rb
         | 
| 311 | 
            +
            - app/models/cats/core/transport_order_item.rb
         | 
| 310 312 | 
             
            - app/models/cats/core/transport_plan.rb
         | 
| 311 313 | 
             
            - app/models/cats/core/transport_plan_item.rb
         | 
| 312 314 | 
             
            - app/models/cats/core/transport_requisition.rb
         | 
| @@ -410,6 +412,8 @@ files: | |
| 410 412 | 
             
            - db/migrate/20220417105839_create_cats_core_transport_requisitions.rb
         | 
| 411 413 | 
             
            - db/migrate/20220417123835_create_cats_core_transport_requisition_items.rb
         | 
| 412 414 | 
             
            - db/migrate/20220417151821_create_cats_core_transport_requisition_details.rb
         | 
| 415 | 
            +
            - db/migrate/20220506082329_create_cats_core_transport_orders.rb
         | 
| 416 | 
            +
            - db/migrate/20220506083042_create_cats_core_transport_order_items.rb
         | 
| 413 417 | 
             
            - lib/cats/core.rb
         | 
| 414 418 | 
             
            - lib/cats/core/engine.rb
         | 
| 415 419 | 
             
            - lib/cats/core/version.rb
         | 
| @@ -464,6 +468,8 @@ files: | |
| 464 468 | 
             
            - spec/factories/cats/core/transport_bids.rb
         | 
| 465 469 | 
             
            - spec/factories/cats/core/transport_contracts.rb
         | 
| 466 470 | 
             
            - spec/factories/cats/core/transport_offers.rb
         | 
| 471 | 
            +
            - spec/factories/cats/core/transport_order_items.rb
         | 
| 472 | 
            +
            - spec/factories/cats/core/transport_orders.rb
         | 
| 467 473 | 
             
            - spec/factories/cats/core/transport_plan_items.rb
         | 
| 468 474 | 
             
            - spec/factories/cats/core/transport_plans.rb
         | 
| 469 475 | 
             
            - spec/factories/cats/core/transport_requisition_details.rb
         |