﻿CREATE PROCEDURE [dbo].[BO_AddTraderFeedbacks]
	@knokId			bigint,
	@userId			bigint,
	@feedbackType	smallint,
	@comment VARCHAR(100),
	@clear int null,
	@educational int null,
	@comprehensive int null,
	@knokBenefit int null

AS
DECLARE		@TranStarted		BIT,
			@ERROR				SMALLINT,
			@RC					INT,
			@ErrorMessage		VARCHAR(100),
			@OngoingFeedback float,
			@userReviewPerTrader float,
			@clearall float,
			@educationalall float,
			@comprehensiveall float,
			@knokBenefitall float,
			@countall int
	
BEGIN TRY  
	SET @TranStarted = 0 
	SET @RC	 = 0 

	BEGIN TRANSACTION
	SET @TranStarted = 1
	

	Insert TraderFeedbacks 
	(UserId, KnokId, FeedbackType,Comment,
	[Clear],[Educational ]
      ,[Comprehensive ]
      ,[KnokBenefit]
	  ) 
	  VALUES
	  
	  (@userId, @knokId,
	  @feedbackType,
	  @comment,@clear,
	  @educational,
	  @comprehensive,
	  @knokBenefit
	    ) -- failure on errors

	IF( @TranStarted = 1 )    
	COMMIT TRANSACTION 
	
	BEGIN TRANSACTION
	SET @TranStarted = 1
	--SET @countall = (Select DISTINCT COUNT([Clear]) FROM [dbo].[TraderFeedbacks] WHERE  KnokId = @knokId GROUP BY UserId)

	
		
	
			
			 SET @userReviewPerTrader =
			 (SELECT sum(val) / count(UserId) FROM (
SELECT t.UserId, 
case when count(t.UserId) = 1
then iif(sum(v1) = 0, sum(v), sum(v1)) else sum(v)*0.25
 + sum(v1)*0.75 
 end as val --,
FROM 
 (
 SELECT
 fb1.UserId, (sum(isnull(fb1.[Clear], 0))* 0.33 + sum(isnull(fb1.[Educational ], 0)) * 0.33 
 + sum(isnull(fb1.[Comprehensive ], 0)) * 0.34) v, 0 v1
 FROM [dbo].[TraderFeedbacks] fb1 WHERE fb1.FeedbackType =0 AND fb1.KnokId = @knokId 
 GROUP BY fb1.UserId
 union all
 SELECT
  fb2.UserId, 0 v, sum(isnull(fb2.[KnokBenefit], 0)) v1
 FROM [dbo].[TraderFeedbacks] fb2 WHERE fb2.FeedbackType =1 AND fb2.KnokId = @knokId
 GROUP BY fb2.UserId) t
GROUP BY t.UserId
) t1)
	

	Update Signals 
	
	  SET
	  UserReview = @userReviewPerTrader Where  KnokId = @knokId
	

	IF( @TranStarted = 1 )    
	COMMIT TRANSACTION  
END TRY 
BEGIN CATCH  
	IF( @TranStarted = 1 )    
	ROLLBACK TRANSACTION  
	
	EXEC USP_LogError            
	EXEC USP_RethrowError                       
   
	IF @RC = 0
		SET @RC = 1   ---- Unexpected Error	   
		                     
	RETURN @RC                        
END CATCH
