CREATE PROCEDURE [dbo].[Create_Sanad_Radif]   @msg_num BIGINT  OUTPUT, @Act  SMALLINT ,  @Code  VARCHAR(20)  ,@Price MONEY,@PNote NVARCHAR(100) , @Nu_Sanad BIGINT,@TmpOrMainOrAutoSanad CHAR,@Guid_Cheqe UNIQUEIDENTIFIER ,@Acc_Code_Cheqe VARCHAR(20),@Id_Cheqe BIGINT
AS
Declare  @Guid_Sanad          Uniqueidentifier
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  @Note                NVarChar(150)
Declare  @Auto                Char
DEclare  @UserId              Smallint
Declare  @TypeSanad           Char(1)
Declare  @StoreCode           Varchar(3)
Declare  @Autoid              Bigint

Begin Tran D1 


    Select @TypeSanad = Type From Auto_Code
    IF (@TypeSanad Is Null) Or (@TypeSanad = '')
      Set @TypeSanad = '0'

    Select @Userid = User_Id, @StoreCode = Store_Code From HeadC Where Id_Cheqe = @Id_Cheqe

    if (@UserId is Null Or @UserId = '')
      Set @userId = Manager.dbo.SessionUser(@@spid,0)

    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

    Set @msg_Num=0
    --    Ϙ      Ϙ
    IF @TmpOrMainOrAutoSanad='0' 
    Begin
       IF @@FETCH_STATUS = 0 
       Begin
         SELECT @NU_Sanad=Id_Sanad,@Auto=Auto FROM dbo.heads
         Where (DateDiff(day,Tarikh_User,getdate() ) =0 ) And (Auto=1)
       
         IF (@Nu_Sanad Is not Null) And (@Auto='0') and (@Nu_Sanad  > 0) 
         Begin
           Update Dbo.Heads Set Auto='1'  Where Nu_Manual=dbo.samsi_Date(GetDate())  
           IF @@Error > 0 
           BEGIN
             ROLLBACK TRANSACTION D1
             Set  @msg_num=-5  --msg-num = -5  
             RETURN   @msg_num  --@@Error
           END 
         END  
          	
         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)
           IF @@Error > 0 
           Begin
             ROLLBACK TRANSACTION D1
             Set  @msg_num=-5  --msg-num = -5  
             RETURN   @msg_num  --@@Error
           END 
           SELECT @Nu_Sanad=SCOPE_IDENTITY() --         
         END 
         SELECT @msg_Num=@Nu_Sanad
       END --IF @@FETCH_STATUS = 0 
    END --IF @TmpOrMainOrAutoSanad=''0'' 
   -------------------------------------------------------------------------------------------
    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 (@Parent_Code='0' Or @Parent_Code Is NULL) And (@Parent_Code_Equal='0' Or @Parent_Code_Equal Is NULL) And (@Acc_Code_Cheqe <> '0' Or @Acc_Code_Cheqe Is not Null) --     ǘ                 
          Set @Acc_Code=@Acc_Code_Cheqe -- ǐ        
        ELSE
          IF  (@Parent_Code<> '0' OR @Parent_Code IS NOT  NULL)  -- ǐ     ǘ   
          Begin 
            IF (Select Has_Child from Dbo.Account where Acc_Code=@Parent_Code)=0 
              Set @Acc_Code=@Parent_Code -- ǐ     ǘ   
            ELSE
              IF (SELECT Has_Child FROM Dbo.Account WHERE Acc_Code=@Acc_Code_Cheqe)=0 
                SET @Acc_Code=@Acc_Code_Cheqe -- ǐ        
          END
          ELSE
            IF (@Parent_Code_Equal <> '0'  OR @Parent_Code_Equal IS NOT  NULL)  -- ǐ     ǘ     
            Begin  
              IF (Select Has_Child from Dbo.Account where Acc_Code=@Parent_Code_Equal)=0 
                 Set @Acc_Code=@Parent_Code_Equal -- ǐ     ǘ     
              ELSE
                IF (SELECT Has_Child FROM Dbo.Account WHERE Acc_Code=@Acc_Code_Cheqe)=0 
                  SET @Acc_Code=@Acc_Code_Cheqe -- ǐ        
            END --IF (@Parent_Code_Equal <> ''0''  Or @Parent_Code_Equal Is not  NULL)
            ELSE 
              PRINT 'code account not exist'
      END --IF (@Acc_Code=''0'' Or @Acc_Code Is NULL) And (@Acc_Code_Equal=''0'' Or @Acc_Code_Equal Is NULL
      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 @TmpOrMainOrAutoSanad='2' --                        
           Begin   
             IF @Type = 0   
             begin
               Select @Guid_Sanad = NewId() --          
               Insert Into Dbo.TmpSanad (Id_Sanad  , Acc_Code  ,         Note            ,  Bedeh   , Auto_Create  , Edit_Flag ,Type ,Guid_Sanad  ,Nu_Vajeh, User_ID  )  
                                 Values (@Nu_Sanad , @Acc_Code ,@ActNote + ' ' + @PNote  ,  @Price  ,        1     ,    1      ,@Type,@Guid_Sanad ,@Id_Cheqe, @UserId )
               IF @@Error > 0 
               Begin
                 ROLLBACK TRANSACTION D1
                 Set  @msg_num=-5  --msg-num = -5  
                 RETURN   @msg_num  --@@Error
               END 
               Insert Into dbo.TmpAcc_Cheqe_Link (Guid_Cheqe,Guid_Sanad)Values (@Guid_Cheqe,@Guid_Sanad)
               IF @@Error > 0 
               BEGIN
                 ROLLBACK TRANSACTION D1
                 Set  @msg_num=-5  --msg-num = -5  
                 RETURN   @msg_num  --@@Error
               END 
	     END --IF @Type = 0   
	     ELSE 
             BEGIN
    	        Select @Guid_Sanad = NewId() --          
	        Insert Into Dbo.TmpSanad (Id_Sanad  ,  Acc_Code  ,   Note                  , Bestan  , Auto_Create  , Edit_Flag , Type ,Guid_Sanad ,NU_Vajeh, User_ID)  
	                          Values (@Nu_Sanad , @Acc_Code  , @ActNote + ' ' + @PNote , @Price  ,        1     ,        1  , @Type,@Guid_Sanad,@Id_Cheqe, @UserId)
                IF @@Error > 0 
                Begin
                  ROLLBACK TRANSACTION D1
                  Set  @msg_num=-5  --msg-num = -5  
                  RETURN   @msg_num  --@@Error
                END 
                Insert Into dbo.TmpAcc_Cheqe_Link(Guid_Cheqe  , Guid_Sanad) Values( @Guid_Cheqe,@Guid_Sanad)
                IF @@Error > 0 
                BEGIN
                  ROLLBACK TRANSACTION D1
                  Set  @msg_num=-5  --msg-num = -5  
                  RETURN   @msg_num  --@@Error
                END 
	     END
           END --IF @TmpOrMainOrAutoSanad=''2''
           ELSE 
           BEGIN
             IF (@TmpOrMainOrAutoSanad='0') OR (@TmpOrMainOrAutoSanad='1')   --               Ϙ
               IF @Type = 0   
               Begin
                 Select @Guid_Sanad=NewId() --          
                 Set @Note= @ActNote+' '+@PNote
                 ----------------------------------------------------------------------------------------------------------------------------------------------------
                 IF @Code = '10000'
                 Begin
                   IF @TypeSanad = '1'
                   Begin
                     Select @Autoid = Autoid From Sanad Where Type = @Type 
                                                        And Acc_Code = @Acc_Code
                                                        And FlagVajh = @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  ,Guid_Sanad,Nu_Vajeh     , FlagVajh, User_ID, Store_Code )  
                               Values        (@Nu_Sanad , @Acc_Code  , @ActNote + ' '+ ' ' ,  @Price  ,        1     ,    1      ,@Type ,@Guid_Sanad  ,@Id_Cheqe , @Act, @UserId, @StoreCode)
                       IF @@Error > 0  
                       Begin
                         ROLLBACK TRANSACTION D1
                         Set  @msg_num=-5
                         RETURN   @msg_num  --@@Error
                       END
                       Insert Into dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad)Values( @Guid_Cheqe,@Guid_Sanad)
                       IF @@Error > 0  
                       BEGIN
                         ROLLBACK TRANSACTION D1
                         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  ,  Bedeh   , Auto_Create  , Edit_Flag ,Type    ,Guid_Sanad  ,Nu_Vajeh, User_ID, Store_Code )  
                                   Values  (@Nu_Sanad  , @Acc_Code  , @Note  ,  @Price  ,        1     ,    1      ,@Type   ,@Guid_Sanad ,@Id_Cheqe, @UserId, @StoreCode)
                     IF @@Error > 0  
                     Begin
                       ROLLBACK TRANSACTION D1
                       Set  @msg_num=-5
                       RETURN   @msg_num  --@@Error
                     END
                     Insert Into dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad) Values( @Guid_Cheqe,@Guid_Sanad)
                     IF @@Error > 0  
                     BEGIN
                        ROLLBACK TRANSACTION D1
                        Set  @msg_num=-5
                        RETURN   @msg_num  --@@Error
                     END
                   END
                 END --IF @Code = ''10000''
                 ELSE
                 BEGIN
                   Insert Into Dbo.Sanad (Id_Sanad   , Acc_Code   ,     Note  ,  Bedeh   , Auto_Create  , Edit_Flag ,Type    ,Guid_Sanad  ,Nu_Vajeh, User_ID, Store_Code)  
                                 Values  (@Nu_Sanad  , @Acc_Code  ,    @Note  ,  @Price  ,        1     ,    1      ,@Type   ,@Guid_Sanad ,@Id_Cheqe, @UserId, @StoreCode)
                   IF @@Error > 0  
                   Begin
                     ROLLBACK TRANSACTION D1
                     Set  @msg_num=-5
                     RETURN   @msg_num  --@@Error
                   END
                   Insert Into dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad) Values( @Guid_Cheqe,@Guid_Sanad)
                   IF @@Error > 0  
                   BEGIN
                      ROLLBACK TRANSACTION D1
                      Set  @msg_num=-5
                      RETURN   @msg_num  --@@Error
                   END
                 END
               END --IF @Type = 0   
               ELSE 
               BEGIN
  	         Select @Guid_Sanad = NewId() --          
                 Set @Note= @ActNote+' '+@PNote
                 ----------------------------------------------------------------------------------------------------------------------------------------------------
                 IF @Code = '10000'
                 BEGIN
                   IF @TypeSanad = '1'
                   BEGIN
                     Select @Autoid = Autoid From Sanad Where Type = @Type 
												                                                            And Acc_Code = @Acc_Code
                                                        And FlagVajh = @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 ,Guid_Sanad,Nu_Vajeh , FlagVajh, User_ID, Store_Code )  
                                   Values     (@Nu_Sanad , @Acc_Code , @ActNote + ' '+ ' ' ,@Price     ,   1  ,     1    , @Type,@Guid_Sanad,@Id_Cheqe, @Act, @UserId, @StoreCode)
                       IF @@Error > 0  
                       Begin
                         ROLLBACK TRANSACTION D1
                         Set  @msg_num=-5
                         RETURN   @msg_num  --@@Error
                       END
                       Insert Into dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad)Values( @Guid_Cheqe,@Guid_Sanad)
                       IF @@Error > 0  
                       BEGIN
                         ROLLBACK TRANSACTION D1
                         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 ,Guid_Sanad,Nu_Vajeh, User_ID, Store_Code )  
                                  VALUES    (@Nu_Sanad , @Acc_Code  , @Note    ,@Price   ,        1     ,        1  , @Type,@Guid_Sanad,@Id_Cheqe, @UserId, @StoreCode)
                     IF @@Error > 0  
                     BEGIN
                       ROLLBACK TRANSACTION D1
                       SET  @msg_num=-5
                       RETURN   @msg_num  --@@Error
                     END
                     INSERT INTO dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad) VALUES( @Guid_Cheqe,@Guid_Sanad)
                     IF @@Error > 0  
                     BEGIN
                       ROLLBACK TRANSACTION D1
                       SET  @msg_num=-5
                       RETURN   @msg_num  --@@Error
                     END
                   END
                 END --IF @Code = ''10000''
                 ELSE
                 BEGIN
                   INSERT INTO  Dbo.Sanad (Id_Sanad  , Acc_Code   ,   Note   , Bestan  , Auto_Create  , Edit_Flag , Type ,Guid_Sanad,Nu_Vajeh, User_ID, Store_Code )  
                                VALUES    (@Nu_Sanad , @Acc_Code  , @Note  ,@Price     ,        1     ,        1  , @Type,@Guid_Sanad,@Id_Cheqe, @UserId, @StoreCode)
                   IF @@Error > 0  
                   BEGIN
                     ROLLBACK TRANSACTION D1
                     SET  @msg_num=-5
                     RETURN   @msg_num  --@@Error
                   END
                   INSERT INTO dbo.Acc_Cheqe_Link(Guid_Cheqe,Guid_Sanad) VALUES( @Guid_Cheqe,@Guid_Sanad)
                   IF @@Error > 0  
                   BEGIN
                     ROLLBACK TRANSACTION D1
                     SET  @msg_num=-5
                     RETURN   @msg_num  --@@Error
                   END
                 END
               END -- Type = ''1''
           END
           FETCH NEXT FROM Cursor_Act
           INTO  @Type,@ActNote , @Parent_Code ,@Parent_Code_Equal
       END
  
       CLOSE Cursor_Act
       DEALLOCATE Cursor_Act

       COMMIT  TRAN D1
       RETURN @msg_Num
