CREATE PROCEDURE [dbo].[Acount_New]
    @Msg_Num SMALLINT OUTPUT ,
    @Acc_Code VARCHAR(20) ,
    @Acc_Name NVARCHAR(90) ,
    @Status CHAR ,
    @Class SMALLINT ,
    @Force_code BIT ,
    @saghf_Bedeh MONEY ,
    @Act_Bedeh CHAR ,
    @saghf_Bestan MONEY ,
    @Act_Bestan CHAR ,
    @UserId SMALLINT
--@Msg = -1  سيستم قادر به قبول کدي با اين طول نمي باشد
--@Msg = -2 کد والد در سند داراي کارکرد ميباشد نمي توان براي آن فرزند تعريف کرد
--@Msg = -3 اين کد قبلا ايجاد شده است
--@Msg = -5  خطاي سيستم
AS
    DECLARE @Parenet_Code VARCHAR(20)
    DECLARE @level SMALLINT
    DECLARE @P_len SMALLINT
    DECLARE @P_ID INT
    IF NOT EXISTS ( SELECT  *
                    FROM    dbo.Acc_level L
                    WHERE   L.[Len] = LEN(@Acc_Code) )
        BEGIN
            SET @Msg_Num = -1
            ROLLBACK TRANSACTION A1
            RETURN @Msg_Num
        END 
    IF ( SELECT COUNT(Acc_Code)
         FROM   dbo.Account
         WHERE  Acc_Code = @Acc_Code
       ) > 0
        BEGIN
            SET @Msg_Num = -3
            RETURN @Msg_Num
        END 
    ELSE
        BEGIN 
            SET @P_len = ( SELECT   Parent_Len
                           FROM     dbo.Acc_level L
                           WHERE    L.[Len] = LEN(@Acc_Code)
                         )
            SET @level = ( SELECT   Acc_Level
                           FROM     dbo.Acc_level L
                           WHERE    L.[Len] = LEN(@Acc_Code)
                         )
            SET @Parenet_Code = ( SELECT    LEFT(@Acc_Code, @P_len)
                                )
            SET @P_ID = ( SELECT    AutoId
                          FROM      dbo.Account
                          WHERE     Acc_Code = @Parenet_Code
                        )
            IF EXISTS ( SELECT  *
                        FROM    dbo.Sanad
                        WHERE   Acc_Code = @Parenet_Code )
                BEGIN 
                    SET @Msg_Num = -2
                    RETURN @Msg_Num
                END	
            ELSE
                BEGIN
                    BEGIN TRAN A1
                    IF @level <> 1
                        BEGIN
                            INSERT  INTO dbo.Account
                                    ( Acc_Code ,
                                      Acc_Name ,
                                      Parent_Code ,
                                      Acc_Level ,
                                      Status ,
                                      Class ,
                                      Force_Code ,
                                      Saghf_Bedeh ,
                                      Act_Bedeh ,
                                      Saghf_Bestan ,
                                      Act_Bestan ,
                                      User_Id
                                    )
                            VALUES  ( @Acc_Code ,
                                      @Acc_Name ,
                                      @P_ID ,
                                      @level ,
                                      @Status ,
                                      @Class ,
                                      @Force_code ,
                                      @saghf_Bedeh ,
                                      @Act_Bedeh ,
                                      @saghf_Bestan ,
                                      @Act_Bestan ,
                                      @UserId
                                    )	
                            IF @@Error > 0
                                BEGIN
                                    SET @Msg_Num = -5
                                    ROLLBACK TRANSACTION A1
                                    RETURN @Msg_Num
                                END
                        END
                    ELSE
                        BEGIN
                            INSERT  INTO dbo.Account
                                    ( Acc_Code ,
                                      Acc_Name ,
                                      Parent_Code ,
                                      Acc_Level ,
                                      Status ,
                                      Class ,
                                      Force_Code ,
                                      Saghf_Bedeh ,
                                      Act_Bedeh ,
                                      Saghf_Bestan ,
                                      Act_Bestan ,
                                      User_Id
                                    )
                            VALUES  ( @Acc_Code ,
                                      @Acc_Name ,
                                      @P_ID ,
                                      @level ,
                                      @Status ,
                                      @Class ,
                                      @Force_code ,
                                      @saghf_Bedeh ,
                                      @Act_Bedeh ,
                                      @saghf_Bestan ,
                                      @Act_Bestan ,
                                      @UserId
                                    )		
                            IF @@Error > 0
                                BEGIN
                                    SET @Msg_Num = -5
                                    ROLLBACK TRANSACTION A1
                                    RETURN @Msg_Num
                                END
                        END 
                    UPDATE  dbo.Account
                    SET     Has_Child = 1
                    WHERE   Acc_Code = @Parenet_Code
                END	
        END

    COMMIT TRAN A1
    SELECT  @Msg_Num = 0
    RETURN @Msg_Num
