USE [KarghoUS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ProcessTruckRecommendations]
AS
BEGIN
DECLARE @IdTruck uniqueidentifier;
DECLARE @EquipmentCarrierId uniqueidentifier;
DECLARE @EquipmentId BIGINT;
DECLARE cur_trucks CURSOR FOR
SELECT Id
FROM Truck
WHERE Status = 1
ORDER BY NEWID();
OPEN cur_trucks;
FETCH NEXT FROM cur_trucks INTO @IdTruck;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @EquipmentId = NULL;
SET @EquipmentCarrierId = NULL;
SELECT @EquipmentId = Id,
@EquipmentCarrierId = IdCarrier
FROM Equipment
WHERE IdTruck = @IdTruck;
IF (@EquipmentId IS NOT NULL)
BEGIN
DECLARE @ExistAcceptedRec BIT = 0;
DECLARE @ExistAssignedRec BIT = 0;
DECLARE @ExistAssignedRecWaiting BIT = 0;
DECLARE @NotSameNotRespondedCarrier BIT = 0;
DECLARE @NotSameRejectCarrier BIT = 0;
DECLARE @NotSameRejectedCarrierByShipper BIT = 0;
DECLARE @NearLoadId uniqueidentifier;
DECLARE @currentDateTime DATETIME = GETDATE();
DECLARE @equipmentCarrierUser BIGINT;
DECLARE @loadCountry BIGINT;
DECLARE @differentCountries BIT;
DECLARE cur_nearloads CURSOR FOR
SELECT Id
FROM Load WHERE IdStatus IS NULL;
OPEN cur_nearloads;
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @return_value BIGINT;
SET @return_value = NULL
SELECT @ExistAcceptedRec = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId AND Status = 3
) THEN 1 ELSE 0 END;
IF (@ExistAcceptedRec = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @ExistAssignedRec = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId AND Status = 5
) THEN 1 ELSE 0 END;
IF (@ExistAssignedRec = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @ExistAssignedRecWaiting = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId AND Status = 1
) THEN 1 ELSE 0 END;
IF (@ExistAssignedRecWaiting = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @NotSameNotRespondedCarrier = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId
AND Status = 1
AND ExpiryDate <= @currentDateTime
AND IdCarrier = @EquipmentCarrierId
) THEN 1 ELSE 0 END;
IF (@NotSameNotRespondedCarrier = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @NotSameRejectCarrier = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId
AND Status = 2
AND IdCarrier = @EquipmentCarrierId
) THEN 1 ELSE 0 END;
IF (@NotSameRejectCarrier = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @NotSameRejectedCarrierByShipper = CASE WHEN EXISTS (
SELECT 1
FROM Recommendation
WHERE IdLoad = @NearLoadId
AND Status = 4
AND IdCarrier = @EquipmentCarrierId
) THEN 1 ELSE 0 END;
IF (@NotSameRejectedCarrierByShipper = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
SELECT @equipmentCarrierUser = IdCountry
FROM [User]
WHERE IdCarrier = @EquipmentCarrierId;
SELECT @loadCountry = IdCountry
FROM [Load]
WHERE Id = @NearLoadId;
SET @differentCountries = CASE
WHEN @equipmentCarrierUser <> @loadCountry
THEN 1
ELSE 0
END;
IF (@differentCountries = 1)
BEGIN
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
CONTINUE;
END
DECLARE @ExpiryDate DATETIME;
SET @ExpiryDate = DATEADD(MINUTE, 5, GETDATE());
DECLARE @Now DATETIME;
SET @Now = GETDATE();
INSERT INTO Recommendation(IdLoad, IdCarrier, IdEquipment, Status, ExpiryDate, created_at, updated_at)
VALUES (@NearLoadId, @EquipmentCarrierId, @EquipmentId, 1, @ExpiryDate, @Now, @Now);
SET @return_value = @EquipmentId;
SELECT '@return_value' = @return_value
FETCH NEXT FROM cur_nearloads INTO @NearLoadId;
END;
CLOSE cur_nearloads;
DEALLOCATE cur_nearloads;
END
FETCH NEXT FROM cur_trucks INTO @IdTruck;
END;
CLOSE cur_trucks;
DEALLOCATE cur_trucks;
END;