CREATE PROCEDURE [dbo].[Create_Sanad_Auto] @msg_num BIGINT  OUTPUT, @Act  SMALLINT ,  @Code  VARCHAR(20)  ,@Price MONEY,@Id BIGINT,@PNote NVARCHAR(100),@Nu_Over_Under BIGINT
AS

  Declare  @Acc_Code          VarChar(20)
  Declare  @Acc_Code_Equal    VarChar(20)
  Declare  @Parent_Code       VarChar(20)
  Declare  @Parent_Code_Equal VarChar(20)
  Declare  @Type              Bit  
  Declare  @ActNote           NvarChar(100)
  Declare  @Nu_Sanad          Int
  Declare  @Auto              Char(1)  
  Declare  @Flag              Char(1)
  Declare  @UserId            Smallint
  Declare  @Fiexd             Char(1)  
  Declare  @IdSanad           Int
  Declare  @TypeFactor        Char(1)
  Declare  @TypeSanad         Char(1)
  Declare  @StoreCode         Varchar(3)
  Declare  @Autoid            BIGINT
  DECLARE  @TotAfzayandeh      Money

  Begin Tran C1 

    Select @TypeFactor = Kind_Flag, @UserId = User_Id, @StoreCode = Store_Code, @TotAfzayandeh = ISNULL(Tot_Afzayandeh,0) From HeadH Where Id_Havaleh = @Id
    Select @TypeSanad = Type From Auto_Code
    if @PNote = 'Only_Ou'
    begin
      Select @UserId= User_Id From Headc Where Id_Cheqe = @Id
      SET @PNote = ''
    END
    
    if (@UserId is Null Or @UserId = '')
      Set @userId = Manager.dbo.SessionUser(@@spid,0)
    
    IF (@TypeSanad Is Null) Or (@TypeSanad = '')
      Set @TypeSanad = '0'
     

    Select @Nu_Sanad = Sanad From HeadH Where Id_Havaleh = @id
    IF @TypeFactor in(7,8)
    BEGIN
      IF @TotAfzayandeh = 0 
        SET @Nu_Sanad = 0
    END

    IF ((@Nu_Sanad Is Null) Or (@Nu_Sanad = '') Or (@Nu_Sanad = 0))
		Select @NU_Sanad=Id_Sanad  From dbo.heads 
		Where CONVERT(Varchar(10), Tarikh_User, 111) = CONVERT(Varchar(10), GETDATE(), 111)
		And Auto=1
     		
	
	IF (@NU_Sanad Is Null) Or (@NU_Sanad=0) 
	Begin 
	  Insert Into Dbo.Heads(Auto,Fiexd,Nu_Manual, Store_Code, User_Id)   Values(1,0,dbo.samsi_Date(GetDate()) , @StoreCode, @UserId)
	  Select @Nu_Sanad=SCOPE_IDENTITY() 
	  IF @@Error > 0  
	  BEGIN
	    ROLLBACK TRANSACTION C1
	    Set    @msg_num=-5
	    RETURN @msg_num  
	  END
	END  
	
    Select @msg_Num=@Nu_Sanad
    Update headH Set Sanad = @msg_num Where Id_Havaleh = @id
	   
	
    DECLARE Cursor_Act CURSOR FOR
    SELECT  Type , Note_In_Sanad , Parent_Code,Parent_Code_Equal FROM  dbo.Act Where    (Act_Code=@Act )

    OPEN Cursor_Act

    FETCH NEXT FROM Cursor_Act INTO  @Type,@ActNote , @Parent_Code,@Parent_Code_Equal

    WHILE @@FETCH_STATUS = 0
    BEGIN 
      Set @Acc_Code      ='0'
      Set @Acc_Code_Equal='0' 
      ----------------------------------------------------------------------------------------------------------------------------------------
      SELECT @Acc_Code=dbo.Acc_link.Acc_Code FROM dbo. Acc_link
      WHERE (Acc_link.Code = @Code) And (Acc_Parent_Code=@Parent_Code )
         
      SELECT @Acc_Code_Equal=dbo.Acc_link.Acc_Code FROM dbo. Acc_link
      WHERE  (Acc_link.Code = @Code) And (Acc_Parent_Code=@Parent_Code_Equal )
    
      IF (@Acc_Code='0' Or @Acc_Code Is NULL) And (@Acc_Code_Equal='0' Or @Acc_Code_Equal Is NULL)  
      Begin
        IF (Select Has_Child from Dbo.Account where Acc_Code=@Parent_Code)='0' 
          Set @Acc_Code=@Parent_Code -- ǐ     
        ELSE PRINT ' code account not exist'
      END
      ELSE      
        IF (@Acc_Code='0') AND (@Acc_Code_Equal<>'0')                 
          Set @Acc_Code=@Acc_Code_Equal -- If Code Equql exist
        ELSE
          IF (@Acc_Code<>'0') AND (@Acc_Code_Equal<>'0')                    
            IF ((SELECT SUM(Bedeh) FROM Dbo.Account WHERE Acc_Code=@Acc_Code_Equal) > 0) OR ((SELECT SUM(Bestan) FROM Dbo.Account WHERE Acc_Code=@Acc_Code_Equal) > 0 )         
              SET @Acc_Code=@Acc_Code_Equal -- If Code Equql exist
       ----------------------------------------------------------------------------------------------------------------------------------------
       IF @Type = 0   
       Begin
         IF @TypeFactor in ('7', '8')
         Begin
           IF @Code = '10000'           
           Begin 
             IF @TypeSanad = '1'
             Begin
               Select @Autoid = Autoid From Sanad Where Type = @Type 
                                                  And Acc_Code = @Acc_Code
                                                  And FlagFactor = @Act 
                                                  And User_ID = @UserId
                                                  And Id_Sanad = @Nu_Sanad
               IF @Autoid IS NOT NULL                                                   
                 Update Sanad Set Bedeh = Bedeh + @Price Where AutoId = @Autoid
               ELSE
               BEGIN
                 Insert Into  Dbo.Sanad (Id_Sanad   ,  Acc_Code ,     Note , Bedeh    , Auto_Create  , Edit_Flag ,Type  ,Nu_Havaleh ,Nu_Over_Under , FlagFactor, User_ID, Nu_Cooperative,Store_Code)  
                 Values                 (@Nu_Sanad  , @Acc_Code , @ActNote + ' ' + ' ' , @Price    , 1    ,    1      ,@Type  ,@Id ,@Nu_Over_Under, @Act, @UserId, @Act,@StoreCode)
                 IF @@Error > 0  
                 BEGIN
                   CLOSE Cursor_Act
                   DEALLOCATE Cursor_Act
                   Set  @msg_num=-5  --msg-num = -5  
                   ROLLBACK TRANSACTION C1
       	           RETURN   @msg_num  --@@Error
                 END
               END
             END --IF @TypeSanad = '1'
             ELSE
             BEGIN
               Insert Into Dbo.Sanad (Id_Sanad  , Acc_Code  , Note ,  Bedeh  , Auto_Create  , Edit_Flag ,Type    ,Nu_Havaleh ,Nu_Over_Under, User_ID, Nu_Cooperative, Store_Code)  
                           Values    (@Nu_Sanad , @Acc_Code ,@ActNote + ' '+@PNote  ,  @Price ,1  , 1 ,@Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
               If @@Error > 0  
               Begin
                 CLOSE Cursor_Act
                 DEALLOCATE Cursor_Act
                 Set  @msg_num=-5  --msg-num = -5  
                 ROLLBACK TRANSACTION C1
       	         RETURN   @msg_num  --@@Error
               END
               SELECT @msg_Num=SCOPE_IDENTITY() --          
             END
           END --IF @Code = '10000'           
           ELSE
           BEGIN
             Insert Into Dbo.Sanad (Id_Sanad  , Acc_Code  , Note ,  Bedeh  , Auto_Create  , Edit_Flag ,Type    ,Nu_Havaleh ,Nu_Over_Under, User_ID, Nu_Cooperative, Store_Code)  
             Values       (@Nu_Sanad , @Acc_Code ,@ActNote + ' '+@PNote  ,  @Price ,1  , 1 ,@Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
             If @@Error > 0  
             Begin
               CLOSE Cursor_Act
               DEALLOCATE Cursor_Act
               Set  @msg_num=-5  --msg-num = -5  
               ROLLBACK TRANSACTION C1
       	       RETURN   @msg_num  --@@Error
             END
             SELECT @msg_Num=SCOPE_IDENTITY() --        Ϙ  
           END 
         END --IF @TypeFactor in ('7', '8')
         ELSE
         BEGIN
           Insert Into Dbo.Sanad (Id_Sanad  , Acc_Code  , Note ,  Bedeh  , Auto_Create  , Edit_Flag ,Type    ,Nu_Havaleh ,Nu_Over_Under, User_ID, Nu_Cooperative, Store_Code)  
           Values       (@Nu_Sanad , @Acc_Code ,@ActNote + ' '+@PNote  ,  @Price ,1  , 1 ,@Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
           IF @@Error > 0  
           Begin
             CLOSE Cursor_Act
             DEALLOCATE Cursor_Act
             Set  @msg_num=-5  --msg-num = -5  
             ROLLBACK TRANSACTION C1
             RETURN   @msg_num  --@@Error
           END
           SELECT @msg_Num=SCOPE_IDENTITY() --          
         END
       END --If @Type = 0   
       ----------------------------------------------------------------------------------------------------------------------------------------
       ELSE --(2)
       BEGIN
         IF @TypeFactor IN ('7', '8')
         BEGIN
           IF @Code = '10000'           
           BEGIN 
             IF @TypeSanad = '1'
             Begin
               Select @Autoid = Autoid From Sanad Where Type = @Type 
												  And Acc_Code = @Acc_Code
                                                  And FlagFactor = @Act 
                                                  And User_ID = @UserId
                                                  And Id_Sanad = @Nu_Sanad
               IF @Autoid IS NOT NULL                                                   
                 Update Sanad Set Bestan = Bestan + @Price Where AutoId = @Autoid
             
               ELSE
               BEGIN
                 Insert Into  Dbo.Sanad (Id_Sanad   , Acc_Code  ,      Note , Bestan  , Auto_Create  , Edit_Flag ,Type  ,Nu_Havaleh ,Nu_Over_Under , FlagFactor,User_ID, Nu_Cooperative, Store_Code)  
                 Values                 (@Nu_Sanad  , @Acc_Code ,  @ActNote + ' ' + ' ' , @Price  ,        1     ,    1      ,@Type ,@Id        ,@Nu_Over_Under, @Act,@UserId, @Act, @StoreCode)
                 IF @@Error > 0  
                 BEGIN
                   ROLLBACK TRANSACTION C1
                   Set  @msg_num=-5
                   RETURN   @msg_num  --@@Error
                 END
               END
             END --IF @TypeSanad = '1'
             ELSE 
             BEGIN
               Insert Into  Dbo.Sanad (Id_Sanad   , Acc_Code , Note      ,   Bestan        , Auto_Create  , Edit_Flag , Type    ,Nu_Havaleh,Nu_Over_Under, User_ID, Nu_Cooperative,Store_Code )  
               Values   (@Nu_Sanad  , @Acc_Code  , @ActNote+' ' +@PNote  ,    @Price   , 1 , 1 , @Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
               IF @@Error > 0  
               BEGIN
                 CLOSE Cursor_Act
                 DEALLOCATE Cursor_Act
                 SET  @msg_num=-5  --msg-num = -5  
                 ROLLBACK TRANSACTION C1
                 RETURN   @msg_num  --@@Error
               END
               SELECT @msg_Num=SCOPE_IDENTITY() --          
             END
           END --IF @Code = '10000
           ELSE 
           BEGIN
             INSERT INTO  Dbo.Sanad (Id_Sanad   , Acc_Code , Note      ,   Bestan        , Auto_Create  , Edit_Flag , Type    ,Nu_Havaleh,Nu_Over_Under, User_ID, Nu_Cooperative , Store_Code)  
             VALUES   (@Nu_Sanad  , @Acc_Code  , @ActNote+' ' +@PNote  ,    @Price   , 1 , 1 , @Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
             IF @@Error > 0  
             BEGIN
               CLOSE Cursor_Act
               DEALLOCATE Cursor_Act
               SET  @msg_num=-5  --msg-num = -5  
               ROLLBACK TRANSACTION C1
               RETURN   @msg_num  --@@Error
             END
             SELECT @msg_Num=SCOPE_IDENTITY() --          
           END
         END -- IF @TypeFactor in ('7', '8')
         ELSE 
         BEGIN
           INSERT INTO  Dbo.Sanad (Id_Sanad   , Acc_Code , Note      ,   Bestan        , Auto_Create  , Edit_Flag , Type    ,Nu_Havaleh,Nu_Over_Under, User_ID, Nu_Cooperative, Store_Code )  
                         VALUES   (@Nu_Sanad  , @Acc_Code  , @ActNote+' ' +@PNote ,    @Price   , 1 , 1 , @Type,@Id,@Nu_Over_Under, @UserId, @Act, @StoreCode)
           IF @@Error > 0  
           BEGIN
             CLOSE Cursor_Act
             DEALLOCATE Cursor_Act
             SET  @msg_num=-5  --msg-num = -5  
             ROLLBACK TRANSACTION C1
             RETURN   @msg_num  --@@Error
           END
           SELECT @msg_Num=SCOPE_IDENTITY() --          
         END
       END --(2)
        ----------------------------------------------------------------------------------------------------------------------------------------
       FETCH NEXT FROM Cursor_Act
       INTO  @Type,@ActNote , @Parent_Code,@Parent_Code_Equal 
    END
  
    CLOSE Cursor_Act
    DEALLOCATE Cursor_Act


    COMMIT  TRAN C1 
    RETURN @msg_Num
