Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.26 KB | None | 0 0
  1. ALTER PROCEDURE [dbo].[getECOsByOrderNumLineNew]
  2. -- Add the parameters for the stored procedure here
  3. @OrderNum VARCHAR(80)=NULL,
  4. @OrderLine INT=NULL,
  5. @PartNum VARCHAR(30)=NULL,
  6. @SplitLineitems INT=0,
  7. @ECODataTable VARCHAR(80)
  8. AS
  9. BEGIN
  10. SET NOCOUNT ON;
  11.  
  12. DECLARE @SQL NVARCHAR(MAX)
  13. DECLARE @out_var NVARCHAR(MAX)
  14. DECLARE @CURRECONUM INT
  15. DECLARE @ECODescription VARCHAR(200)
  16. DECLARE @ECOInitiator VARCHAR(80)
  17. DECLARE @InitiationDate VARCHAR(20)
  18. DECLARE @TEMPSQL VARCHAR(500)
  19. DECLARE @Status VARCHAR(80)
  20. DECLARE @Critical VARCHAR(1)
  21.  
  22. -- Temp table to hold all material parts for the given SO number and line or top level part number
  23. CREATE TABLE #BOM (
  24. OrderNum VARCHAR(80),
  25. OrderLine INT,
  26. PartNum VARCHAR(50),
  27. MtlPartNum VARCHAR(50),
  28. PartDescription VARCHAR(MAX)
  29. )
  30.  
  31. IF (@OrderNum IS NULL AND @OrderLine IS NULL AND @PartNum IS NULL)
  32. BEGIN
  33. RAISERROR ('Please provide a Sales Order number, a Sales Order and Line number or a top level part number ',16,1);
  34. RETURN
  35. END
  36.  
  37. -- When Part number isn't provided, we are working with the order number and line
  38. IF @PartNum IS NULL
  39. BEGIN
  40. DECLARE @CurrPartNum VARCHAR(80)
  41. DECLARE @CurrLine VARCHAR(80)
  42.  
  43. IF CURSOR_STATUS('global','TOPLEVEL_CURSOR') = 1 DEALLOCATE TOPLEVEL_CURSOR;
  44.  
  45. -- Create cursor based on order number and line
  46. IF @OrderLine IS NOT NULL
  47. DECLARE TOPLEVEL_CURSOR CURSOR FOR SELECT DISTINCT Orderline,PartNum FROM EP_OpenSO WHERE OrderNum=@Ordernum AND @OrderLine=@Orderline
  48. ELSE -- Create cursor based on order number only
  49. DECLARE TOPLEVEL_CURSOR CURSOR FOR SELECT DISTINCT OrderLine,PartNum FROM EP_OpenSO WHERE OrderNum=@Ordernum
  50.  
  51. OPEN TOPLEVEL_CURSOR
  52.  
  53. FETCH NEXT FROM TOPLEVEL_CURSOR INTO @CurrLine,@CurrPartNum
  54.  
  55. WHILE @@FETCH_STATUS = 0
  56. BEGIN
  57. INSERT INTO #BOM (PartNum,MtlPartNum,PartDescription) EXEC CreateBOMTree @PartNum=@CurrPartNum,@ExpandUncoated=1
  58.  
  59. IF @OrderLine IS NOT NULL
  60. UPDATE #BOM SET OrderNum=@OrderNum,OrderLine=@OrderLine WHERE OrderNum IS NULL
  61. ELSE
  62. UPDATE #BOM SET OrderNum=@OrderNum,OrderLine=@CurrLine WHERE OrderNum IS NULL
  63.  
  64. FETCH NEXT FROM TOPLEVEL_CURSOR INTO @CurrLine,@CurrPartNum
  65. END
  66.  
  67. CLOSE TOPLEVEL_CURSOR
  68. DEALLOCATE TOPLEVEL_CURSOR
  69. END
  70. ELSE
  71. SELECT GETDATE()
  72. INSERT INTO #BOM (PartNum,MtlPartNum,PartDescription) EXEC CreateBOMTree @PartNum=@PartNum,@ExpandUncoated=1
  73. SELECT GETDATE()
  74.  
  75. -- When @SplitLineitems is 0, only get the ECO #s based on the Order number. Otherwise get the ECO based on Order number and line number
  76. IF @SplitLineitems=0
  77. BEGIN
  78. -- Get the ECO number for any parts in the current sales order by joining with ECOLookup based on SO number. 66 Assemblies have the postfix (everything from the last dash to the end of the partnum) removed
  79. SET @SQL='SELECT @out_var=(SELECT STUFF((SELECT DISTINCT '','' + CONVERT(VARCHAR(10),ECONum) FROM #BOM JOIN ' + @ECODataTable + ' ON ' + @ECODataTable + '.PartNum LIKE CASE WHEN SUBSTRING(#BOM.MtlPartnum,1,3)=''64-'' OR SUBSTRING(#BOM.MtlPartnum,1,3)=''65-'' OR SUBSTRING(#BOM.MtlPartnum,1,3)=''66-'' THEN REVERSE(SUBSTRING(REVERSE(#BOM.MtlPartnum), CHARINDEX(REVERSE(''-''), REVERSE(#BOM.MtlPartnum)) + DATALENGTH(''-''), DATALENGTH(#BOM.MtlPartnum))) ELSE #BOM.MtlPartnum END + ''%'' FOR XML PATH('''')),1,1,''''))'
  80. EXEC sp_executesql @SQL,N'@out_var varchar(max) OUTPUT',@out_var=@out_var OUTPUT
  81.  
  82. SELECT @out_var AS ImpactedECOs
  83. END
  84. ELSE
  85. BEGIN
  86. -- Get the ECO number for any parts in the current sales order by joining with ECOLookup based on SO number and line. 66 Assemblies have the postfix (everything from the last dash to the end of the partnum) removed
  87. SET @SQL='INSERT INTO #ECOLookup (OrderNum,OrderLine,PartNum,MtlPartNum,ECONum) (SELECT DISTINCT OrderNum,OrderLine,#BOM.PartNum,MtlPartNum,ECONum FROM #BOM JOIN ' + @ECODataTable + ' ON ' + @ECODataTable + '.PartNum LIKE CASE WHEN SUBSTRING(#BOM.MtlPartnum,1,3)=''64-'' OR SUBSTRING(#BOM.MtlPartnum,1,3)=''65-'' OR SUBSTRING(#BOM.MtlPartnum,1,3)=''66-'' THEN REVERSE(SUBSTRING(REVERSE(#BOM.MtlPartnum), CHARINDEX(REVERSE(''-''), REVERSE(#BOM.MtlPartnum)) + DATALENGTH(''-''), DATALENGTH(#BOM.MtlPartnum))) ELSE #BOM.MtlPartnum END + ''%'')'
  88. EXEC(@SQL)
  89.  
  90. -- If nothing was returned, we have nothing else to do. This check prevents an error that will occur if you try to create a cursor on empty temp table
  91. IF (SELECT COUNT(*) FROM #ECOLOOKUP) = 0
  92. RETURN
  93.  
  94. IF CURSOR_STATUS('global','ECO_CURSOR') = 1
  95. BEGIN
  96. CLOSE ECO_CURSOR;
  97. DEALLOCATE ECO_CURSOR;
  98. END
  99.  
  100. -- Loop through each eco num in #ECOLookup
  101. DECLARE ECO_CURSOR CURSOR LOCAL FOR SELECT DISTINCT ECONum FROM #ECOLookup
  102.  
  103. OPEN ECO_CURSOR
  104.  
  105. FETCH NEXT FROM ECO_CURSOR INTO @CURRECONUM
  106.  
  107. DECLARE @DocumentID INT
  108. DECLARE @DocumentRev INT
  109.  
  110. IF @SplitLineitems = 2 -- Per Reeves on 03-21-16, Added this Split line item to only get MtlPartNum and ECO num so it can be displayed on the RO page
  111. SELECT DISTINCT MtlPartNum,ECONum FROM #ECOLookup
  112. ELSE -- @SplitLineitems = 1
  113. BEGIN
  114. WHILE @@FETCH_STATUS = 0
  115. BEGIN
  116. -- Because of a distributed transaction error that occurs when executing a stored procedure over a linked server, I use queries instead to get the document id for the current ECO and get the individual data card items based on the doc id
  117. SET @TEMPSQL='SELECT DocumentID,Documents.LatestRevisionNo,Status.Name AS Status FROM [ACME_DATA].[Vault].dbo.Documents LEFT JOIN [ACME_DATA].[Vault].dbo.Status ON Status.StatusID=Documents.CurrentStatusID WHERE Filename=''' + CONVERT(VARCHAR(10),@CURRECONUM) + '.doc''' + ' OR Filename=''' + CONVERT(VARCHAR(10),@CURRECONUM) + '.docx'''
  118.  
  119. DECLARE @ECODTL_CURSOR as cursor
  120.  
  121. DECLARE @vsql as nvarchar(max)
  122.  
  123. SET @vsql='SET @cursor = CURSOR FORWARD_ONLY STATIC FOR ' + @TEMPSQL + ' OPEN @cursor;'
  124.  
  125. -- CREATES THE CURSOR
  126. EXEC sys.sp_executesql @vsql,N'@cursor CURSOR OUTPUT',@ECODTL_CURSOR output
  127.  
  128. -- FETCH NEXT FROM @ECODTL_CURSOR INTO @ECODescription,@Initiator,@InitiationDate,@Critical,@Status
  129. FETCH NEXT FROM @ECODTL_CURSOR INTO @DocumentID,@DocumentRev,@Status
  130.  
  131. WHILE @@FETCH_STATUS = 0
  132. BEGIN
  133. SET @ECODescription=(SELECT TOP 1 ValueText FROM [ACME_DATA].[Vault].dbo.VariableValue LEFT JOIN [ACME_DATA].[Vault].dbo.Variable ON Variable.VariableID=VariableValue.VariableID WHERE DocumentID=@DocumentID AND RevisionNo<=@DocumentRev AND VariableName='Description' ORDER BY RevisionNo DESC)
  134. SET @ECOInitiator=(SELECT TOP 1 ValueText FROM [ACME_DATA].[Vault].dbo.VariableValue LEFT JOIN [ACME_DATA].[Vault].dbo.Variable ON Variable.VariableID=VariableValue.VariableID WHERE DocumentID=@DocumentID AND RevisionNo<=@DocumentRev AND VariableName='Author' ORDER BY RevisionNo DESC)
  135. SET @InitiationDate=(SELECT TOP 1 ValueText FROM [ACME_DATA].[Vault].dbo.VariableValue LEFT JOIN [ACME_DATA].[Vault].dbo.Variable ON Variable.VariableID=VariableValue.VariableID WHERE DocumentID=@DocumentID AND RevisionNo<=@DocumentRev AND VariableName='Date' ORDER BY RevisionNo DESC)
  136.  
  137. SET @InitiationDate=SUBSTRING(CONVERT(VARCHAR(20),@InitiationDate),1,10)
  138.  
  139. SET @Critical=(SELECT TOP 1 ValueText FROM [ACME_DATA].[Vault].dbo.VariableValue LEFT JOIN [ACME_DATA].[Vault].dbo.Variable ON Variable.VariableID=VariableValue.VariableID WHERE DocumentID=@DocumentID AND RevisionNo<=@DocumentRev AND VariableName='Critical' ORDER BY RevisionNo DESC)
  140.  
  141. UPDATE #ECOLookup SET ECODescription=@ECODescription,ECOInitiator=@ECOInitiator,InitiationDate=@InitiationDate,Critical=@Critical,ECOStatus=@Status WHERE ECoNum=@CURRECONUM
  142.  
  143. FETCH NEXT FROM @ECODTL_CURSOR INTO @DocumentID,@DocumentRev,@Status
  144. END
  145.  
  146. CLOSE @ECODTL_CURSOR
  147. DEALLOCATE @ECODTL_CURSOR
  148.  
  149. FETCH NEXT FROM ECO_CURSOR INTO @CURRECONUM
  150. END
  151.  
  152. CLOSE ECO_CURSOR
  153. DEALLOCATE ECO_CURSOR
  154. END
  155.  
  156. IF @SplitLineitems = 1
  157. -- Added WHERE CLAUSE ON 05-01-19. If this causes other issues remove it
  158. -- 06-19-19 Commented out where clause because it was causing ECOs to be excluded
  159. SELECT * FROM #ECOLookup --WHERE PartNum LIKE CASE WHEN SUBSTRING(@Partnum,1,3)='64-' OR SUBSTRING(@Partnum,1,3)='65-' OR SUBSTRING(@Partnum,1,3)='66-' THEN REVERSE(SUBSTRING(REVERSE(@Partnum), CHARINDEX(REVERSE('-'), REVERSE(@Partnum)) + DATALENGTH('-'), DATALENGTH(@Partnum))) ELSE @Partnum END + '%' ORDER BY OrderNum,OrderLine,ECONum
  160. END
  161. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement