Untitled

 avatar
unknown
ruby
a year ago
4.2 kB
17
Indexable
Instrumentation::Instrumentation.execute_with_metrics('POST_warehouses_warehouse_id_transfer_list_list_id_confirm_and_close_tote') do
      outbound_request_status = false
      transfer_list_status = ResourceLock.hold!('transfer_list', {:transfer_list => @params.list_id}) do
        BaseModel.transaction do
          # tote_label was added as a new parameter in the payload to handle empty tote close
          tote_label = @input[:tote_label]
          transfer_list_service = BusinessServiceFactory.get_transfer_list_service(@params.warehouse_id)
          transfer_list = transfer_list_service.get_vo_by_display_id(@params.list_id)
          movement_request_service = BusinessServiceFactory.get_movement_request_service(@params.warehouse_id)
          movement_request_vo = movement_request_service.get_vos_by_ids([transfer_list.movement_request_id]).first
          is_flolite_v2_enabled = transfer_list_service.is_flolite_v2_enabled( transfer_list.assigned_to , @params.warehouse_id )
          if is_flolite_v2_enabled && movement_request_vo.group_type == MovementRequestGroupTypeEnum::CUSTOMER_OUTBOUND
            raise SupplyChainError.new(:message => "Customer Outbound Picking is enabled on Flolite 2.0. Pls refresh your app")
          end
          if WarehouseService.settings.kalash_warehouses.include?(@params.warehouse_id) && movement_request_vo.group_type == MovementRequestGroupTypeEnum::MERGE_AREA_TRANSFER
            raise SupplyChainError.new(:message => "Merge Area Picking is enabled on Flolite 2.0. Please follow the correct SOP")
          end
          outbound_request_status = if @input[:pickable_items].present?
                                      transfer_list_service.batch_pick(@params.list_id, @input)
                                    else
                                      false
                                    end
          unless @input[:lost_items].blank?
            logger.info "KLIWIT | confirm_and_close_tote api controller | Calling transfer_list_service.mark_lost method"
            transfer_list_service.mark_lost(@params.list_id, @input, tote_label)
          end
          if tote_label.present?
            tote_handler_input = ToteHandlerInput.new(@params.warehouse_id, tote_label, ToteEntityTypeEnum::TRANSFER_LIST_ID,
                                                      @params.list_id, nil, nil, nil)
            ToteHandler.new.close_for_transfer_list(tote_handler_input)
          else
            is_iwit_containerisation_enabled_TL = false
            if movement_request_vo.group_type == MovementRequestGroupTypeEnum::OUTBOUND_REQUEST
              outbound_request_service = BusinessServiceFactory.get_outbound_request_service(@params.warehouse_id)
              outbound_request = outbound_request_service.get_vos_by_ids([movement_request_vo.group_id]).first
              is_iwit_containerisation_enabled_TL =  outbound_request_service.is_iwit_containerisation_enabled_process?(@params.warehouse_id,
                                                                                                                             outbound_request.outbound_request_type,
                                                                                                                             outbound_request.id)
            end
            pickable_items_totes = @input[:pickable_items].present? ? @input[:pickable_items].collect{|item| item[:tote]}.compact.uniq : []
            if pickable_items_totes.present? and pickable_items_totes.size > 1
              logger.info "CLOSE_TOTE_BAD_INPUT : close tote for #{@params.list_id} : there are more than one totes for pickable items : #{pickable_items_totes.join(',')} "
            end
            transfer_list_service.close_tote(@params.list_id,
                                             {:is_iwit_containerisation_enabled_TL => is_iwit_containerisation_enabled_TL,
                                             :pickable_items_totes => pickable_items_totes})
          end
          transfer_list_service.transfer_list_status(@params.list_id)
        end
      end
      return  {:status => transfer_list_status, :outbound_request_cancelled => outbound_request_status}
    end
Editor is loading...
Leave a Comment