|
Mredfer
Starting Member
4 Posts |
Posted - 2009-12-03 : 11:03:15
|
| Appologies if this is in the incorrect forum, but I am having a nightmare with this.I have the following stored procedure that looks at a database and creates various projects and links to client information already stored in another database. The procedure will creat a project in the databse and then link to a project to a client (or client department) if it exists, but will create the client if it does not exist.The problem I am getting is that the creation of the clients does not work unless the project is the first in the list. If it is not the first in the list then the project will get linked to the client of the previous project instead and no new client is created.Many thanks*/DECLARE @Contact_ID_# varchar(10) ,@Contract_Code varchar(10) ,@Instructor varchar(30) ,@Contract_Descr1 varchar(40) ,@Contract_Value varchar(10) ,@Office int ,@Department int ,@Analysis_Code_1 int ,@Analysis_Code_2 int ,@Analysis_Code_3 int ,@Analysis_Code_4 int ,@Analysis_Code_5 int ,@Analysis_Code_6 int ,@Analysis_Code_7 int ,@Analysis_Code_8 int ,@Analysis_Code_9 int ,@Analysis_Code_10 int ,@New_Business_Start_Date datetime ,@Portfolio varchar(1) ,@Registered_By varchar(30) ,@iSTATUS int ,@sTEXT varchar(255) ,@sGUID varchar(255) ,@iMAND_ANAL int ,@iMAND_ANALHIST int ,@iMAND_ANALPROJCLIENT int ,@iProj int ,@iProjc int ,@iProjc1 int ,@sProjc1 varchar(30) ,@iClient int ,@dtToday datetime ,@iClihead int ,@vDESC varchar(90) ,@vPCENTRE_CODE varchar(30) ,@vLEDGER_CODE varchar(30) ,@iACCDB_CURR_ID int ,@iSCHEME_ID int ,@Formal_name varchar(200) ,@vPCENTRE_DESC varchar(40) ,@vDEP_CODE varchar(30) ,@dtMaxDet datetimeSET @dtToday = GETDATE()DECLARE csr CURSOR LOCAL FAST_FORWARDFORSELECT RIGHT('000000' + RTRIM([Contact_ID_#]), 6) ,RIGHT('000000' + CAST([Contract_Code] as varchar(10)),6) ,RTRIM(ISNULL([Instructor],'')) ,RIGHT('000000' + CAST([Contract_Code] as varchar(10)),6) + ' ' + RTRIM([Contract_Descr1]) ,RTRIM(ISNULL([Contract_Value],'0')) ,[Office] ,[Department] ,[CONTRACT].[Analysis_Code_1] ,[CONTRACT].[Analysis_Code_2] ,[CONTRACT].[Analysis_Code_3] ,ISNULL([CONTRACT].[Analysis_Code_4],0) ,[CONTRACT].[Analysis_Code_5] ,[CONTRACT].[Analysis_Code_6] ,[CONTRACT].[Analysis_Code_7] ,[CONTRACT].[Analysis_Code_8] ,[CONTRACT].[Analysis_Code_9] ,[CONTRACT].[Analysis_Code_10] ,[New_Business_Start_Date] ,RTRIM(ISNULL([Portfolio],'N')) ,RTRIM(ISNULL([CONTRACT].[Registered_By],'')) ,PCENTRE_CODE ,PCENTRE_DESC ,ACCDB_CURR_ID ,DEP_CODEFROM [SOTRANSFER].[dbo].[CONTRACT]JOIN PROJECT ON PROJ_ID = [Department]JOIN PROFIT_CENTRE ON PCENTRE_ID = [Office]JOIN ACCOUNTS_DB ON ACCDB_ID = PCENTRE_ACCDB_IDJOIN DEPARTMENT ON DEP_CODE = PCENTRE_CODEWHERE CONTRACT.Import_Flag IS NULL OR CONTRACT.Import_Flag = '0'FOR READ ONLY-- Open the cursor for processingOPEN csrFETCH NEXT FROM csrINTO@Contact_ID_#, @Contract_Code, @Instructor, @Contract_Descr1,@Contract_Value,@Office,@Department,@Analysis_Code_1,@Analysis_Code_2,@Analysis_Code_3,@Analysis_Code_4,@Analysis_Code_5,@Analysis_Code_6,@Analysis_Code_7,@Analysis_Code_8,@Analysis_Code_9,@Analysis_Code_10,@New_Business_Start_Date,@Portfolio,@Registered_By,@vPCENTRE_CODE, @vPCENTRE_DESC, @iACCDB_CURR_ID,@vDEP_CODE-- Process each row in the cursor until the fetch status is -1 (no more unread rows)WHILE @@FETCH_STATUS > -1BEGIN --Create new project from the appropriate template Execute dbo.SP_DUPLICATE_PROJECT @iPROJ_ID = @Department, @sPROJ_DESC = @Contract_Descr1, @sPROJ_CODE = @Contract_Code, @sPROJ_START_DATE = @New_Business_Start_Date, @iRETURN_STATUS = @iSTATUS, @sRETURN_TEXT = @sTEXT, @sRETURN_GUID = @sGUID, @iRETURN_MAND_ANAL = @iMAND_ANAL, @iRETURN_MAND_ANALHIST = @iMAND_ANALHIST, @iRETURN_MAND_ANALPROJCLIENT = @iMAND_ANALPROJCLIENT IF ISNULL(@iSTATUS,0) = 0 BEGIN SELECT @iProj = MAX(PROJ_ID) FROM PROJECT --Assign project status and analysis values UPDATE PROJECT SET PROJ_ANAL_ID_1 = @Analysis_Code_1, PROJ_ANAL_ID_2 = @Analysis_Code_3, PROJ_ANAL_ID_3 = @Analysis_Code_2, PROJ_ANAL_CODE_1 = vw_ANAL_P1_DESC.ANAL_CODE, PROJ_ANAL_CODE_2 = vw_ANAL_P2_DESC.ANAL_CODE, PROJ_ANAL_CODE_3 = vw_ANAL_P3_DESC.ANAL_CODE, PROJ_STATUS = CASE UPPER(@Analysis_Code_7) WHEN 1 THEN 2 WHEN 0 THEN 4 ELSE 0 END, PROJ_END_DATE = NULL, PROJ_PC_COMPLETE = 0, PROJ_PC_CMP_AS_AT = ISNULL(@New_Business_Start_Date,@dtToday), PROJ_CONTRACT = RTRIM(LTRIM(ISNULL(@Contract_Descr1,'') )) FROM PROJECT LEFT OUTER JOIN vw_ANAL_P1_DESC ON vw_ANAL_P1_DESC.ANAL_ID = CAST(@Analysis_Code_1 as int) LEFT OUTER JOIN vw_ANAL_P2_DESC ON vw_ANAL_P2_DESC.ANAL_ID = CAST(@Analysis_Code_2 as int) LEFT OUTER JOIN vw_ANAL_P3_DESC ON vw_ANAL_P3_DESC.ANAL_ID = CAST(@Analysis_Code_3 as int) WHERE PROJ_ID = @iProj --Create a new project detail record IF NOT EXISTS (SELECT PROJDET_PROJ_ID FROM PROJECTDET WHERE PROJDET_PROJ_ID = @iProj) BEGIN INSERT INTO [dbo].[PROJECTDET] ([PROJDET_PROJ_ID] ,[PROJDET_DATE_FROM] ,[PROJDET_MANAGER_ID] ,[PROJDET_ANAL_CODE_1] ,[PROJDET_ANAL_CODE_2] ,[PROJDET_UPD_DATE] ,[PROJDET_UPD_USER] ,[PROJDET_CREATE_DATE] ,[PROJDET_CREATE_USER] ,[PROJDET_IM_GUID]) SELECT [PROJDET_PROJ_ID] = @iProj ,[PROJDET_DATE_FROM] = PROJ_START_DATE ,[PROJDET_MANAGER_ID] = PROJ_MANAGER ,[PROJDET_ANAL_CODE_1] = CAST(@Contract_Value as varchar(15)) ,[PROJDET_ANAL_CODE_2] = CAST(ISNULL(@Analysis_Code_4,0) as varchar(15)) ,[PROJDET_UPD_DATE] = @dtToday ,[PROJDET_UPD_USER] = PROJ_UPD_USER ,[PROJDET_CREATE_DATE] = @dtToday ,[PROJDET_CREATE_USER] = PROJ_UPD_USER ,[PROJDET_IM_GUID] = NEWID() FROM PROJECT WHERE PROJ_ID = @iProj END ELSE BEGIN --There might be several project history records on --the template that was duplicated, so must find the --most recent. SELECT @dtMaxDet = MAX(PROJDET_DATE_FROM) FROM PROJECTDET WHERE PROJDET_PROJ_ID = @iProj UPDATE PROJECTDET SET PROJDET_ANAL_CODE_1 = CAST(@Contract_Value as varchar(15)), PROJDET_ANAL_CODE_2 = CAST(@Analysis_Code_4 as varchar(15)) WHERE PROJDET_PROJ_ID = @iProj AND PROJDET_DATE_FROM = @dtMaxDet END --Lookup client SELECT @iClient = CLIENT_ID FROM CLIENT WHERE (LEFT(CLIENT_LEDGER_CODE, 6) LIke RTRIM(@Contact_ID_#) OR '0' + LEFT(CLIENT_LEDGER_CODE, 6) LIke RTRIM(@Contact_ID_#)) AND CLIENT_PCENTRE_ID = @Office --If client / profit centre combination does not exist, create it IF @iClient is NULL BEGIN SELECT @iClihead = CLIHEAD_ID, @Formal_name = CLIHEAD_DESC FROM CLIENT_HEADER WHERE CLIHEAD_CODE = @Contact_ID_# IF @iClihead IS NULL BEGIN SELECT @Formal_name = RTRIM(LTRIM(Formal_Name)) FROM SOTRANSFER..CLIENTDB WHERE Contact_ID = CAST(@Contact_ID_# as int) SELECT @iClihead = CLIHEAD_ID FROM CLIENT_HEADER WHERE --CLIHEAD_CODE = @Formal_name CLIHEAD_CODE = @Contact_ID_# SELECT TOP 1 @Contact_ID_# = CAST(Contact_ID as varchar) FROM SOTRANSFER..CLIENTDB WHERE RTRIM(LTRIM(Formal_Name)) = @Formal_name END SELECT @vDESC = @vPCENTRE_DESC, @vLEDGER_CODE = @Contact_ID_# + @vDEP_CODE SELECT @iSCHEME_ID = SCHEME_ID FROM DEPARTMENT JOIN LOCATION ON LOC_ID = DEP_LOC_ID JOIN AREA ON AREA_ID = LOC_AREA_ID JOIN COUNTRY ON COUNTRY_ID = AREA_COUNTRY_ID JOIN SCHEMES ON LEFT(SCHEME_DESC,10) = COUNTRY_CODE WHERE DEP_PCENTRE_ID = @Office SELECT @iClient = MAX(CLIENT_ID) + 1 FROM CLIENT Execute dbo.SharpOwl_SP_MAINTAIN_CLIENT_DIVISION @iMASK = 1, @iCLIENTHEADER_ID = @iClihead, @iDIVISION_ID = @iClient, @sDIV_DESC = @vDESC, @sDIV_CODE = @vPCENTRE_CODE, @sDIV_COMMENTS = Null, @sDIV_LEDGER_CODE = @vLEDGER_CODE, @iDIV_CURR_ID = @iACCDB_CURR_ID, @sDIV_VAT_NO = Null, @iDIV_INV_ID = 3, @iDIV_LAYOUT_ID = @iSCHEME_ID, @cDIV_VAT_DUE = '1', @cDIV_SCH_BY_PROJ = '1', @iDIV_TRIANGULATE = 0, @iDIV_PCENTRE = @Office, @iDIV_APPR_REQ = 0, @iDIV_APPR_TIME = 0, @iDIV_BTC_DISBT_ID = Null, @sDIV_BTC_DISB_DESC = Null, @iDIV_ADD_ID = Null, @sDIV_FORMAL_NAME = @Formal_name, @iDIV_INACTIVE = 0, @dtDIV_INACTIVE_DATE = Null, @sDIV_INACTIVE_USER = Null END --Find next project ownership id SELECT @iProjc = MAX(PROJC_ID) + 1 FROM PROJ_CLIENT IF @iProjc IS NULL SET @iProjc = 1 SELECT @iProjc1 = CLIENT_ID, @sProjc1 = CLIENT_CODE FROM CLIENT WHERE-- LEFT(CLIENT_LEDGER_CODE,6) = @Contact_ID_#-- AND CLIENT_PCENTRE_ID = @Office CLIENT_ID = @iClient---- IF @iProjc1 IS NULL-- SELECT TOP 1-- @iProjc1 = CLIENT_ID,-- @sProjc1 = CLIENT_CODE-- FROM CLIENT-- WHERE-- LEFT(CLIENT_LEDGER_CODE,6) = @Contact_ID_# [green]IF NOT (@iProjc1 IS NULL OR @iClient IS NULL) BEGIN IF NOT EXISTS (SELECT PROJC_ID FROM PROJ_CLIENT WHERE PROJC_PROJ_ID = @iProj AND PROJC_CLIENT_ID = @iClient) --Create a link to the client INSERT INTO [dbo].[PROJ_CLIENT] ([PROJC_PROJ_ID] ,[PROJC_CLIENT_ID] ,[PROJC_PCT_OWNED] ,[PROJC_UPD_DATE] ,[PROJC_UPD_USER] ,[PROJC_PCT_CHARGE] ,[PROJC_ANAL_ID_1] ,[PROJC_ANAL_CODE_1] ,[PROJC_ANAL_CODE_2] ,[PROJC_SUPPRESS_BILL] ,[PROJC_FACTOR] ,[PROJC_FACTOR_OWNED] ,[PROJC_FACTOR_CHARGE] ,[PROJC_ID] ,[PROJC_IM_GUID]) VALUES (@iProj ,@iClient ,100 ,@dtToday ,@Registered_By ,100 ,@iProjc1 ,@sProjc1 ,Null ,0 ,Null ,1000 ,1000 ,@iProjc ,Newid()) END END UPDATE SOTRANSFER..CONTRACT SET Import_Flag = CASE @iSTATUS WHEN 1 THEN 0 ELSE 1 END, Import_Date = CASE @iSTATUS WHEN 1 THEN Null ELSE @dtToday END WHERE Contract_Code = CAST(@Contract_Code as int) FETCH NEXT FROM csr INTO @Contact_ID_#, @Contract_Code, @Instructor, @Contract_Descr1, @Contract_Value,@Office,@Department,@Analysis_Code_1, @Analysis_Code_2,@Analysis_Code_3,@Analysis_Code_4, @Analysis_Code_5,@Analysis_Code_6,@Analysis_Code_7, @Analysis_Code_8,@Analysis_Code_9,@Analysis_Code_10, @New_Business_Start_Date,@Portfolio,@Registered_By, @vPCENTRE_CODE, @vPCENTRE_DESC, @iACCDB_CURR_ID, @vDEP_CODEENDCLOSE csrDEALLOCATE csrGOI Always Need HEEEELP!! |
|