[COLOR=blue]ALTER[/color] [COLOR=blue]PROCEDURE[/color] [dbo].[usp_ValidateDocument]
@RUBRIC [COLOR=blue]VARCHAR[/color](50),
@DOCUMENTTYPEID [COLOR=blue]INT[/color],
@FIRSTSERIALNUMBER [COLOR=blue]INT[/color],
@LASTSERIALNUMBER [COLOR=blue]INT[/color],
@YEAR [COLOR=blue]SMALLINT[/color],
@DAYNUMBER [COLOR=blue]SMALLINT[/color],
@SCANNINGSTATIONID [COLOR=blue]SMALLINT[/color]
[COLOR=blue]AS[/color]
[COLOR=green]--======================================================================
[/color][COLOR=green]--
[/color][COLOR=green]-- Procedure that validate a batch that it comes in order
[/color][COLOR=green]--
[/color][COLOR=green]-- History:
[/color][COLOR=green]-- Date Signature Comment
[/color][COLOR=green]-- 2007-09-20 GeoIss First version
[/color][COLOR=green]-- 2007-09-20 GeoIss 1.01
[/color][COLOR=green]--
[/color][COLOR=green]-- 1.00 2007-09-20 Procedure created
[/color][COLOR=green]-- 1.01 2007-09-20 Validates the scanned buntch.
======================================================================
[/color]
[COLOR=blue]SET[/color] [COLOR=#FF00FF]NOCOUNT[/color] [COLOR=blue]ON[/color]
[COLOR=blue]DECLARE[/color] @RetLastSerialNumber [COLOR=blue]AS[/color] [COLOR=blue]INT[/color]
[COLOR=blue]DECLARE[/color] @RetMessage [COLOR=blue]AS[/color] [COLOR=blue]VARCHAR[/color](100)
[COLOR=blue]DECLARE[/color] @RetLastSerialNumberTemp [COLOR=blue]AS[/color] [COLOR=blue]INT[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'Nothing'[/color]
[COLOR=green]-- Create a temp table if does not exists
[/color][COLOR=blue]IF[/color] NOT EXISTS ([COLOR=blue]SELECT[/color] * [COLOR=blue]FROM[/color] SYSOBJECTS [COLOR=blue]WHERE[/color] ID = [COLOR=#FF00FF]OBJECT_ID[/color]([COLOR=red]'Temp_Buntch'[/color])) [COLOR=blue]BEGIN[/color]
[COLOR=blue]CREATE[/color] [COLOR=blue]TABLE[/color] [dbo].[Temp_Buntch](
[AssignmentID] [[COLOR=blue]int[/color]] NULL,
[BuntchID] [[COLOR=blue]int[/color]] [COLOR=blue]IDENTITY[/color](1,1) NOT NULL,
[FirstSerialNumber] [[COLOR=blue]int[/color]] NULL,
[LastSerialNumber] [[COLOR=blue]int[/color]] NULL,
[[COLOR=#FF00FF]Year[/color]] [nvarchar](2) NULL,
[DayNumber] [[COLOR=blue]smallint[/color]] NULL,
[ScanningStationID] [[COLOR=blue]smallint[/color]] NULL,
[Lost] [[COLOR=blue]bit[/color]] NULL)
[COLOR=blue]END[/color]
[COLOR=green]-- Check if the assignment exist
[/color][COLOR=blue]IF[/color] NOT EXISTS([COLOR=blue]SELECT[/color] A.ASSIGNMENTID [COLOR=blue]FROM[/color] ASSIGNMENT A
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] CUSTOMER C [COLOR=blue]ON[/color] C.CUSTOMERID = A.CUSTOMERID
[COLOR=blue]WHERE[/color] A.RUBRIC = @RUBRIC AND A.DOCUMENTTYPEID = @DOCUMENTTYPEID
AND A.ACTIVE = 1) [COLOR=blue]BEGIN[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'AssignmentDoesNotExists'[/color]
[COLOR=blue]GOTO[/color] THE_END
[COLOR=blue]END[/color]
[COLOR=green]-- Check if document has already been scanned
[/color][COLOR=blue]ELSE[/color] [COLOR=blue]IF[/color] EXISTS
([COLOR=blue]SELECT[/color] B.*
[COLOR=blue]FROM[/color] ASSIGNMENT A
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] CUSTOMER C [COLOR=blue]ON[/color] C.CUSTOMERID = A.CUSTOMERID
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] DOCUMENTTYPE DT [COLOR=blue]ON[/color] DT.DOCUMENTTYPEID = A.DOCUMENTTYPEID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] CARDBOARD CB [COLOR=blue]ON[/color] CB.ASSIGNMENTID = A.ASSIGNMENTID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] BUNTCH B [COLOR=blue]ON[/color] CB.CARDBOARDID = B.CARDBOARDID
[COLOR=blue]WHERE[/color] A.RUBRIC = @RUBRIC
AND A.ACTIVE = 1
AND B.YEAR = @YEAR
AND B.FIRSTSERIALNUMBER = @FIRSTSERIALNUMBER
AND B.DAYNUMBER = @DAYNUMBER
AND B.SCANNINGSTATIONID = @SCANNINGSTATIONID
AND DT.DOCUMENTTYPEID = @DOCUMENTTYPEID) [COLOR=blue]BEGIN[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'DocumentAlreadyScanned'[/color]
[COLOR=blue]GOTO[/color] THE_END
[COLOR=blue]END[/color]
[COLOR=green]-- Check if document comes in order
[/color][COLOR=blue]ELSE[/color] [COLOR=blue]IF[/color] @RetMessage = [COLOR=red]'Nothing'[/color] [COLOR=blue]BEGIN[/color]
([COLOR=blue]SELECT[/color] @RetLastSerialNumber = [COLOR=#FF00FF]ISNULL[/color]([COLOR=#FF00FF]MAX[/color](B.LASTSERIALNUMBER), 0), @RetLastSerialNumberTemp = [COLOR=#FF00FF]ISNULL[/color]([COLOR=#FF00FF]MAX[/color](TB.LASTSERIALNUMBER), 0)
[COLOR=blue]FROM[/color] ASSIGNMENT A
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] CUSTOMER C [COLOR=blue]ON[/color] C.CUSTOMERID = A.CUSTOMERID
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] DOCUMENTTYPE DT [COLOR=blue]ON[/color] DT.DOCUMENTTYPEID = A.DOCUMENTTYPEID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] CARDBOARD CB [COLOR=blue]ON[/color] CB.ASSIGNMENTID = A.ASSIGNMENTID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] BUNTCH B [COLOR=blue]ON[/color] CB.CARDBOARDID = B.CARDBOARDID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] Temp_Buntch TB [COLOR=blue]ON[/color] TB.ASSIGNMENTID = A.ASSIGNMENTID
[COLOR=blue]WHERE[/color] A.RUBRIC = @RUBRIC
AND A.ACTIVE = 1
AND DT.DOCUMENTTYPEID = @DOCUMENTTYPEID
AND B.SCANNINGSTATIONID = @SCANNINGSTATIONID
AND B.CARDBOARDID = ([COLOR=blue]SELECT[/color] [COLOR=#FF00FF]MAX[/color](CB.CARDBOARDID)
[COLOR=blue]FROM[/color] ASSIGNMENT A
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] CUSTOMER C [COLOR=blue]ON[/color] C.CUSTOMERID = A.CUSTOMERID
[COLOR=blue]INNER[/color] [COLOR=blue]JOIN[/color] DOCUMENTTYPE DT [COLOR=blue]ON[/color] DT.DOCUMENTTYPEID = A.DOCUMENTTYPEID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] CARDBOARD CB [COLOR=blue]ON[/color] CB.ASSIGNMENTID = A.ASSIGNMENTID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] BUNTCH B [COLOR=blue]ON[/color] CB.CARDBOARDID = B.CARDBOARDID
[COLOR=#FF00FF]LEFT[/color] [COLOR=blue]JOIN[/color] Temp_Buntch TB [COLOR=blue]ON[/color] TB.ASSIGNMENTID = A.ASSIGNMENTID
[COLOR=blue]WHERE[/color] B.SCANNINGSTATIONID = @SCANNINGSTATIONID
AND A.RUBRIC = @RUBRIC
AND A.DOCUMENTTYPEID = @DOCUMENTTYPEID))
[COLOR=blue]IF[/color] @RetLastSerialNumberTemp + 1 = @FirstSerialNumber [COLOR=blue]BEGIN[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'DocumentIsInOrder'[/color]
[COLOR=blue]SET[/color] @RetLastSerialNumber = @RetLastSerialNumberTemp
[COLOR=blue]END[/color]
[COLOR=blue]IF[/color] @RetLastSerialNumberTemp > @RetLastSerialNumber [COLOR=blue]BEGIN[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'DocumentIsMissing'[/color]
[COLOR=blue]SET[/color] @RetLastSerialNumber = @RetLastSerialNumberTemp
[COLOR=blue]INSERT[/color] [COLOR=blue]INTO[/color] Temp_Buntch(AssignmentID, FIRSTSERIALNUMBER, LASTSERIALNUMBER, [[COLOR=#FF00FF]YEAR[/color]], DAYNUMBER, SCANNINGSTATIONID, LOST)
[COLOR=blue]VALUES[/color](2, @FirstSerialNumber, @LastSerialNumber, @YEAR, @DAYNUMBER, @SCANNINGSTATIONID, 1)
[COLOR=blue]GOTO[/color] THE_END
[COLOR=blue]END[/color]
[COLOR=blue]ELSE[/color] [COLOR=blue]IF[/color] @RetLastSerialNumber + 1 = @FIRSTSERIALNUMBER [COLOR=blue]BEGIN[/color]
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'DocumentIsInOrder'[/color]
[COLOR=blue]INSERT[/color] [COLOR=blue]INTO[/color] Temp_Buntch(AssignmentID, FIRSTSERIALNUMBER, LASTSERIALNUMBER, [[COLOR=#FF00FF]YEAR[/color]], DAYNUMBER, SCANNINGSTATIONID, LOST)
[COLOR=blue]VALUES[/color](2, @FirstSerialNumber, @LastSerialNumber, @YEAR, @DAYNUMBER, @SCANNINGSTATIONID, 1)
[COLOR=blue]GOTO[/color] THE_END
[COLOR=blue]END[/color]
[COLOR=blue]ELSE[/color] [COLOR=blue]BEGIN[/color]
[COLOR=green]-- Insert the lost LastSerialNumber in
[/color] [COLOR=blue]INSERT[/color] [COLOR=blue]INTO[/color] Temp_Buntch(AssignmentID, FIRSTSERIALNUMBER, LASTSERIALNUMBER, [[COLOR=#FF00FF]YEAR[/color]], DAYNUMBER, SCANNINGSTATIONID, LOST)
[COLOR=blue]VALUES[/color](2, @FirstSerialNumber, @LastSerialNumber, @YEAR, @DAYNUMBER, @SCANNINGSTATIONID, 1)
[COLOR=blue]SET[/color] @RetMessage = [COLOR=red]'DocumentIsMissing'[/color]
[COLOR=blue]GOTO[/color] THE_END
[COLOR=blue]END[/color]
[COLOR=blue]END[/color]
THE_END:
[COLOR=blue]SELECT[/color] @RetMessage [COLOR=blue]AS[/color] RetMessage, [COLOR=#FF00FF]ISNULL[/color](@RetLastSerialNumber, 0) RetLastSerialNumber, [COLOR=#FF00FF]ISNULL[/color](@RetLastSerialNumberTemp, 0) [COLOR=blue]AS[/color] RetLastSerialNumberTemp
[COLOR=blue]SET[/color] [COLOR=#FF00FF]NOCOUNT[/color] [COLOR=blue]OFF[/color]