This is one crazy long stored procedure. This will take 3 minute to exicute. I am looking to re write this stored procedure as a console application using entity framework. Need help.
ALTER
PROCEDURE [dbo].[okc_UpdateCyclicalWorkOrderIDAllInWhile]
(@ThruDate
DATETIME,@DomainID
NUMERIC(10,0),@EmployeeID
)
VARCHAR(11)AS
BEGIN
--SET NOCOUNT ON
--This should always be turned of for update/delete procedures
DECLARE @IDValue NUMERIC (10,0),@FromDate
SMALLDATETIME,@ChildDate
SMALLDATETIME,@DateDiff
INT,@WorkOrderErrors
VARCHAR(8000),@LocalError
INTEGER,@IsWeekend
VARCHAR(12),@WOCount
INT,@WOEntityCount
INT,@WOTaskCount
INT,@BeginID
NUMERIC (10,0),@EndID
NUMERIC (10,0),@EncounteredError
VARCHAR(32),@CycleIntervalDate
SMALLDATETIME,@ProjStartDate
SMALLDATETIME,@ProjFinishDate
SMALLDATETIME,@ProjDateDiff
SMALLDATETIME,
--@ProjStartDateDiff INT,@ProjFinishDateDiff
INT,@IsProjectWeekend
VARCHAR(12),@WOTaskIDValue
NUMERIC (10,0),@WorkIDValue
NUMERIC (18,0),@WorkOrderID
VARCHAR(20),@ItemCategoryCounter
INT,@LoopCounter
INT,@IntCounter
INT,@WOTaskError
NUMERIC (10,0),@WorkEntityError
NUMERIC (18,0),@WorkorderError
VARCHAR(20),@TemplateCheck
VARCHAR(12),@TemplateID
VARCHAR(20)
DECLARE @NewWorkOrderEntityTable TABLE (TempID INT,WorkOrderID
VARCHAR(20),EntityUid VARCHAR(35),EntityType VARCHAR(30),Feature_ID
NUMERIC(10,0),Feature_Type VARCHAR(30),OBJECTID NUMERIC(18,0),LOCATION
VARCHAR(250),LEGACYID VARCHAR(30),WARRANTYDATE DATETIME,EntitySID
NUMERIC(10,0),WORKCOMPLETED VARCHAR(2))
DECLARE @NewWorkOrderTaskTable TABLE (TempID INT,WOTASKID
NUMERIC(10,0),WORKORDERID VARCHAR(20),TASKSID NUMERIC (10,0),TASKNAME
VARCHAR(20),DESCRIPTIONVARCHAR(50),ASSIGNEDTO NUMERIC(10,0),ASSIGNEDTONAME
VARCHAR(50),SHOP VARCHAR(50),PROJSTARTDATE DATETIME,PROJFINISHDATE
DATETIME,ACTSTARTDATE DATETIME,ACTFINISHDATE DATETIME,TASKCODE
VARCHAR(20),COMMENTS VARCHAR(250),ISREWORK VARCHAR(1),
STATUSVARCHAR(8),PROCEEDOK VARCHAR(1),TASKSEQID NUMERIC(5,0),PERMITNUM
VARCHAR(20),PERMITSID NUMERIC(10,0),ENTITYUID VARCHAR(35),ENTITYTYPE
VARCHAR(30),DURATION NUMERIC(4,0),DomainID NUMERIC(10,0))
SET @LocalError = 0--This table is used to record all work orders and whether
--they failed or succeeded.
DELETEFROM azteca.OKC_CYCLICALERRORSELECT @BeginID = ID FROM azteca.PWSYSIDWHERE SYSTYPE ='WorkOrder'
DECLARE @ItemTable TABLE (Primary_Key INTIDENTITY(1,1)NOTNULL,WorkOrderID
VARCHAR(20))INSERTINTO @ItemTableSELECT WORKORDERIDFROM azteca.WORKORDERWHERE DomainID = @DomainID AND CYCLETYPE ='C'ANDDATEDIFF(day,FROMDATE,@ThruDate)>-1AND CANCEL ='Y'ANDSTATUS='CYCLICAL'
Here we will run through a loop that will generate all cyclical child work orders
through the date (@thrudate) passed in by the user. We will generate child work
orders until the fromdate exceeds the @thrudate. The fromdate will be incremented
based on the CYCLEINTERVALNUM and CYCLEINTERVALUNIT fields.
*/
SET @LoopCounter =(SELECTCOUNT(WorkOrderID)FROM @ItemTable)SET @ItemCategoryCounter = 1/*
SELECT @EncounteredError ='No',@WorkOrderErrors
=''
WHILE @LoopCounter > 0 AND @ItemCategoryCounter <= @LoopCounterBEGIN
WORKORDERID
SELECT @WorkOrderID = WORKORDERIDFROM @ItemTable WHERE primary_key = @ItemCategoryCounterSELECT @FromDate =(SELECT FROMDATE FROM azteca.WORKORDER WHERE= @WorkOrderID)
--This value is used to argue if a child work order on the fromdate + weekend
--already exists. I didn't modify the @fromdate because of datediff
SELECT @ChildDate =CASE
WHENDATENAME(WEEKDAY, @FromDate)='Saturday'THEN
DateAdd(dd,2,@FromDate)
WHENDATENAME(WEEKDAY, @FromDate)='Sunday'THEN
DateAdd(dd,1,@FromDate)
ELSE @FromDateEND
SELECT @DateDiff =DATEDIFF(day,@FromDate, @ThruDate)
WORKORDERID
SELECT @ProjStartDate =(SELECT PROJSTARTDATE FROM azteca.WORKORDER WHERE= @WorkOrderID)
WORKORDERID
SELECT @ProjFinishDate =(SELECT PROJFINISHDATE FROM azteca.WORKORDER WHERE= @WorkOrderID)
--SELECT @ProjStartDateDiff = DATEDIFF(day,@FromDate,@ProjStartDate )
SELECT @ProjFinishDateDiff =DATEDIFF(day,@FromDate,@ProjFinishDate)
SELECT @TemplateID =(SELECT WOTEMPLATEID FROM azteca.WORKORDER WHEREWORKORDERID
= @WorkOrderID)
SELECT @TemplateCheck =(SELECT WORKMONTH FROM azteca.WOTEMPLATE WHEREWOTEMPLATEID
= @TemplateID)
WHILE @DateDiff >-1 BEGIN
SELECT @IDValue = ID FROM azteca.PWSYSIDWHERE SYSTYPE ='WorkOrder'
--This argument determines if the workorderid we are going to insert already exists.
--It also ensures that the work order is allowed to be generated by comparing the
--workmonth in the wotemplate table. Finally it ensures that the work order cannot
--be created again if the user pushes back the fromdate to a date before the work
--order generation.
IF (SUBSTRING(@templatecheck,DATEPART(MONTH,@FromDate),1 )= 1 ANDNOTEXISTS(SELECT WORKORDERID FROM azteca.WORKORDER WHERE WORKORDERID = @IDValue)
ANDNOTEXISTS(SELECT WORKORDERID FROM azteca.WORKORDER WHERE SOURCEWOID = @WorkOrderIDAND FROMDATE = @ChildDate AND CYCLETYPE ='A'))
BEGIN
BEGINTRAN
INSERTINTO azteca.WORKORDER(WORKORDERID,DESCRIPTION,SUPERVISOR,REQUESTEDBY,INITIATEDBY,INITIATEDATE
,PROJECTNAME,LOCATION,PROJSTARTDATE,PROJFINISHDATE,ACTUALSTARTDATE,ACTUALFINISHDATE
,WOCLOSEDBY,CANCEL,PRIORITY,NUMDAYSBEFORE,DATETOBEPRINTED,DATEPRINTED,MAPTEMPLATENAME
,WOMAPEXTENT,WOMAPSCALE,WOOUTPUT,SOURCEWOID,CYCLETYPE,CYCLEINTERVALNUM,CYCLEINTERVALUNIT
,SCHEDULEDATE,FROMDATE,WOXCOORDINATE,WOYCOORDINATE,SHOP,WOCATEGORY,UNATTACHED
,WOCOST,WOLABORCOST,WOMATCOST,WOEQUIPCOST,WOPERMITCOST,WOTEMPLATEID,ACCTNUM,SUBMITTO
,DATESUBMITTO,SUBMITTOOPENBY,DATESUBMITTOOPEN,STATUS,CONTRACTORSID,WORKCOMPLETEDBY,DATEWOCLOSED
,MAPPAGE,LEGALBILLABLE,CONTRBILLABLE,CANCELLEDBY,DATECANCELLED,CUSTOM1,CUSTOM2
,CUSTOM3,CUSTOM4,CUSTOM5,UPDATEMAP,TILENO,CYCLEFROM,ApplyToEntity,DomainID,WoCustFieldCatID
,AssetGroup,WoAddress,CREATEDBYCYCLE,TRANSTOWOID,STAGE,EXPENSETYPE)
SELECT@IDValue
AS WORKORDERID,DESCRIPTION,SUPERVISOR,REQUESTEDBY,'SYSTEM CYCLICAL'AS INITIATEDBY,
GETDATE()AS INITIATEDATE,PROJECTNAME,LOCATION,
CASEWHENDATENAME(WEEKDAY,FROMDATE)='Saturday'THENDATEADD(dd,2,FROMDATE)
WHENDATENAME(WEEKDAY,FROMDATE)='Sunday'THEN
DATEADD(dd,1,FROMDATE)
ELSEFROMDATE
ENDAS PROJSTARTDATE,CASEWHENDATENAME(WEEKDAY,DATEADD(dd,@ProjFinishDateDiff,FROMDATE))='Saturday'THENDATEADD(dd,@ProjFinishDateDiff + 2,FROMDATE)
WHENDATENAME(WEEKDAY,DATEADD(dd,@ProjFinishDateDiff,FROMDATE))='Sunday'THEN
DATEADD(dd,@ProjFinishDateDiff + 1,FROMDATE)
ELSE
DATEADD(dd,@ProjFinishDateDiff,FROMDATE)
ENDAS PROJFINISHDATE,ACTUALSTARTDATE
,ACTUALFINISHDATE,WOCLOSEDBY,'N'AS CANCEL,PRIORITY,5
AS NUMDAYSBEFORE,GETDATE()AS DATETOBEPRINTED,DATEPRINTED,MAPTEMPLATENAME,WOMAPEXTENT,WOMAPSCALE
,WOOUTPUT,@WorkOrderID AS SOURCEWOID,'A'AS CYCLETYPE,CYCLEINTERVALNUM,CYCLEINTERVALUNIT
,SCHEDULEDATE,
CASEWHENDATENAME(WEEKDAY,FROMDATE)='Saturday'THENDATEADD(dd,2,FROMDATE)
WHENDATENAME(WEEKDAY,FROMDATE)='Sunday'THEN
DATEADD(dd,1,FROMDATE)
ELSEFROMDATE
ENDAS FROMDATE,WOXCOORDINATE
,WOYCOORDINATE,SHOP,WOCATEGORY,UNATTACHED,WOCOST,WOLABORCOST,WOMATCOST,WOEQUIPCOST
,WOPERMITCOST,WOTEMPLATEID,ACCTNUM,SUBMITTO,DATESUBMITTO,SUBMITTOOPENBY,DATESUBMITTOOPEN
,STATUS,CONTRACTORSID,WORKCOMPLETEDBY,DATEWOCLOSED,MAPPAGE,LEGALBILLABLE,CONTRBILLABLE
,'',NULL,CUSTOM1,CUSTOM2,'Y'AS CUSTOM3,CUSTOM4,CUSTOM5,UPDATEMAP
,TILENO,NULLAS CYCLEFROM,ApplyToEntity,DomainID,WoCustFieldCatID,AssetGroup,WoAddress
,'Y'AS CREATEDBYCYCLE,TRANSTOWOID,STAGE,EXPENSETYPEFROM azteca.WORKORDERWHERE WORKORDERID = @WorkOrderID-- Check for error on single work order transaction.
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
--Updates the fromdate based on the CYCLEINTERVALUNIT
--and CYCLEINTERVALNUM fields. So for example, if CYCLEINTERVALUNIT = 'W'
--and CYCLEINTERVALNUM = 1. Then we add one week to the from date.
--We want to keep moving up the fromdate until it is greater than
--the thrudate.
BEGINTRAN
UPDATE azteca.WORKORDERSET FROMDATE =CASEWHEN CYCLEINTERVALUNIT ='D'THEN
DATEADD(dd,CYCLEINTERVALNUM,FROMDATE)WHEN CYCLEINTERVALUNIT ='W'THEN
DATEADD(wk, CYCLEINTERVALNUM, FROMDATE)
WHEN CYCLEINTERVALUNIT ='M'THEN
DATEADD(mm, CYCLEINTERVALNUM, FROMDATE)
WHEN CYCLEINTERVALUNIT ='Y'THENDATEADD(yy, CYCLEINTERVALNUM, FROMDATE)
END
WHERE DomainID = @DomainID AND CYCLETYPE ='C'AND WORKORDERID = @WorkOrderID-- Check for error on single work order transaction.
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
--I made this section seperate from above becuase it would be hard to
--read nested case statements.
SELECT @CycleIntervalDate =(SELECT FROMDATE FROM azteca.WORKORDERWHERE WORKORDERID = @WorkOrderID)
SELECT @IsWeekend =(SELECTDATENAME(WEEKDAY, @CycleIntervalDate))
BEGINTRAN
IF (@IsWeekend ='Saturday')
BEGIN
UPDATE azteca.WORKORDERSET FROMDATE =DateAdd(dd,2,FROMDATE)WHERE DomainID = @DomainID AND CYCLETYPE ='C'AND WORKORDERID = @WorkOrderIDEND
IF (@IsWeekend ='Sunday')
BEGIN
UPDATE azteca.WORKORDERSET FROMDATE =DATEADD(dd,1,FROMDATE)WHERE DomainID = @DomainIDAND CYCLETYPE ='C'AND WORKORDERID = @WorkOrderIDEND
-- Check for error on single work order transaction.
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
--Increments the projstartdate and projfinishdate so that they work correctly
--in future work order generations.
BEGINTRAN
UPDATE azteca.WORKORDERSET PROJSTARTDATE = FROMDATE,
--CASE
-- WHEN DATENAME(WEEKDAY,DATEADD(dd,@ProjStartDateDiff,FROMDATE)) = 'Saturday' THEN
-- DATEADD(dd,@ProjStartDateDiff + 2,FROMDATE)
-- WHEN DATENAME(WEEKDAY,DATEADD(dd,@ProjStartDateDiff,FROMDATE)) = 'Sunday' THEN
-- DATEADD(dd,@ProjStartDateDiff + 1,FROMDATE)
-- ELSE
-- DATEADD(dd,@ProjStartDateDiff,FROMDATE)
-- END,PROJFINISHDATE
=CASEWHENDATENAME(WEEKDAY,DATEADD(dd,@ProjFinishDateDiff,FROMDATE))='Saturday'THENDATEADD(dd,@ProjFinishDateDiff + 2,FROMDATE)
WHENDATENAME(WEEKDAY,DATEADD(dd,@ProjFinishDateDiff,FROMDATE))='Sunday'THEN
DATEADD(dd,@ProjFinishDateDiff + 1,FROMDATE)
ELSE
DATEADD(dd,@ProjFinishDateDiff,FROMDATE)
END
WHERE DomainID = @DomainID AND CYCLETYPE ='C'AND WORKORDERID = @WorkOrderID-- Check for error on single work order transaction.
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
BEGINTRAN
CanView
CanViewCost
INSERT azteca.WOGroupRight(WorkOrderID,GroupID,TableName,,CanAdd,CanUpdate,CanDelete,)
WOR
SELECT @IDValue,WOR.GroupID,WOR.TableName,WOR.CanView,.CanAdd,WOR.CanUpdate,WOR.CanDelete,WOR.CanViewCostFROM azteca.WOGroupRight WORINNERJOIN azteca.Workorder WO ON WO.WORKORDERID = WOR.WorkOrderIDWHERE WO.WORKORDERID = @WorkOrderID -- Check for error on single work order transaction.
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
SELECT @WorkIDValue = [ID] FROM azteca.PWSYSIDWHERE SysType ='WorkOrderEntity'
BEGINTRAN
Feature_Type
INSERTINTO @NewWorkOrderEntityTableSELECT 0 AS TempID,WorkorderID,EntityUid,EntityType,Feature_ID,,0 AS OBJECTID,LOCATION,LEGACYID,WARRANTYDATE
,EntitySID,WORKCOMPLETEDFROM azteca.WorkOrderEntity WHERE WorkOrderID = @WorkOrderID --This is used because in memory tables do not reset
--identity columns when all rows are deleted.
SET @IntCounter = 0UPDATE @NewWorkOrderEntityTableSET @IntCounter = TempID = @IntCounter + 1--Create the ObjectID values
UPDATE @NewWorkOrderEntityTableSET ObjectID = TempID + @WorkIDValue - 1,WorkOrderID
= @IDValueSELECT @WOEntityCount =(SELECTCOUNT(TempID)from @NewWorkOrderEntityTable)
--Insert the new records into the azteca.Workorder table
EntityUid
Feature_Type
LEGACYID
WORKCOMPLETED
INSERTINTO azteca.WorkOrderEntity(WorkOrderID,,EntityType,Feature_ID,,OBJECTID,LOCATION,,WARRANTYDATE,EntitySID,)
Feature_Type
WARRANTYDATE
SELECT WorkOrderID,EntityUid,EntityType,Feature_ID,,OBJECTID,LOCATION,LEGACYID,,EntitySID,WORKCOMPLETEDFROM @NewWorkOrderEntityTableSET @LocalError =@@Error
--Delete records in the temporaray table
DELETEFROM @NewWorkOrderEntityTable --Check for error on single work order transaction
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
--This argument is to account for a primary key violation
--This essentially quarantines this issue so that only 1 work order
--will be affected.
IF(@LocalError ='2627')
BEGIN
SELECT @WorkEntityError =(SELECTMAX(OBJECTID)FROM azteca.WorkOrderEntity)
UPDATE azteca.PWSYSIDSET [ID] = [ID] + @WorkEntityError + 1WHERE SysType ='WorkOrderEntity'
END
GOTO HANDLE_ERROREND
ELSE
BEGIN
--An error has been occurring in the PWSYSID table where the objectid value has been doubling.
--At this time we are not sure if it is this interface or cityworks. This argument
--is to help determine if the interface is causing the problem.
IF (@WOEntityCount >=(SELECT ID + 100000 FROM azteca.PWSYSID WHERE SysType ='WorkOrderEntity'))BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
GOTO HANDLE_ERRORENDELSE
BEGIN
--Increment PWSysID to reserve the appropriate number of record id
--values.
UPDATE azteca.PWSYSIDSET [ID] = [ID] + @WOEntityCountWHERE SysType ='WorkOrderEntity'
COMMITTRAN
END
END
SELECT @WOTaskIDValue = ID FROM azteca.PWSYSIDWHERE SysType ='WOTask'
BEGINTRAN
INSERTINTO @NewWorkOrderTaskTableSELECT 0 AS TempID,0 AS WOTASKID,WORKORDERID,TASKSID,TASKNAME,DESCRIPTION,ASSIGNEDTO,ASSIGNEDTONAME
,SHOP,PROJSTARTDATE,PROJFINISHDATE,ACTSTARTDATE,ACTFINISHDATE
ENTITYUID
,TASKCODE,COMMENTS,ISREWORK,STATUS,PROCEEDOK,TASKSEQID,PERMITNUM,PERMITSID,,ENTITYTYPE,DURATION,DomainIDFROM azteca.WoTASK WHERE WORKORDERID = @WorkOrderID--This is used because in memory tables do not reset
--identity columns when all rows are deleted.
SET @IntCounter = 0UPDATE @NewWorkOrderTaskTableSET @IntCounter = TempID = @IntCounter + 1--Create the ObjectID values
UPDATE @NewWorkOrderTaskTableSET WOTaskID = TempID + @WOTaskIDValue - 1,WORKORDERID
= @IDValueSELECT @WOTaskCount =(SELECTCOUNT(TempID)from @NewWorkOrderTaskTable)
--Insert the new records into the azteca.WOTask table
ASSIGNEDTONAME
INSERTINTO azteca.WOTask(WOTASKID,WORKORDERID,TASKSID,TASKNAME,DESCRIPTION,ASSIGNEDTO,,SHOP,PROJSTARTDATE,PROJFINISHDATE,ACTSTARTDATE,ACTFINISHDATE
,TASKCODE,COMMENTS,ISREWORK,STATUS,PROCEEDOK,TASKSEQID,PERMITNUM
,PERMITSID,ENTITYUID,ENTITYTYPE,DURATION,DomainID)
SELECT WOTASKID,WORKORDERID,TASKSID,TASKNAME,DESCRIPTION,ASSIGNEDTO,ASSIGNEDTONAME
,SHOP,PROJSTARTDATE,PROJFINISHDATE,ACTSTARTDATE,ACTFINISHDATE
TASKSEQID
DURATION
,TASKCODE,COMMENTS,ISREWORK,STATUS,PROCEEDOK,,PERMITNUM,PERMITSID,ENTITYUID,ENTITYTYPE,,DomainIDFROM @NewWorkOrderTaskTableSET @LocalError =@@Error
--Delete the temporary table
DELETEFROM @NewWorkOrderTaskTable-- check for error on single work order transaction
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
--This argument is to account for a primary key violation
--This essentially quarantines this issue so that only 1 work order
--will be affected.
IF(@LocalError ='2627')
BEGIN
SELECT @WOTaskError =(SELECTMAX(WOTASKID)FROM azteca.WOTASK)
UPDATE azteca.PWSYSIDSET [ID] = [ID] + @WOTaskError + 1WHERE SysType ='WOTASK'
END
GOTO HANDLE_ERROREND
ELSE
BEGIN
--Increment PWSysID to reserve the appropriate number of record id
--values to reserve values
UPDATE azteca.PWSYSIDSET ID = ID + @WOTaskCountWHERE SysType ='WOTask'
COMMITTRAN
END
BEGINTRAN
INSERT azteca.WOCustField(WorkOrderID,CustFieldID,CustFieldName,CustFieldValue)
SELECT @IDValue,CustFieldID,CustFieldName, CustFieldValueFROM azteca.WOCustField WHERE WorkOrderID = @WorkOrderID-- check for error on single work order transaction
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
BEGINTRAN
INSERT azteca.WOComment(WorkOrderID,Comments,SeqID)
SELECT @IDValue,Comments,SeqIDFROM azteca.WOComment WHERE WORKORDERID = @WorkOrderID-- check for error on single work order transaction
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
BEGINTRAN
INSERT azteca.WOINSTRUCTION(WorkOrderID,Instructions, SeqID)
SELECT @IDValue,Instructions,SeqIDFROM azteca.WOINSTRUCTIONWHERE WORKORDERID = @WorkOrderID-- check for error on single work order transaction
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
SELECT @EncounteredError ='Yes'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue ,'Y',@LocalError,GETDATE())
GOTO HANDLE_ERROREND
ELSE
BEGIN
COMMITTRAN
END
WORKORDERID
SELECT @FromDate =(SELECT FROMDATE FROM azteca.WORKORDER WHERE= @WorkOrderID)
SELECT @ChildDate =CASE
WHENDATENAME(WEEKDAY, @FromDate)='Saturday'THEN
DateAdd(dd,2,@FromDate)
WHENDATENAME(WEEKDAY, @FromDate)='Sunday'THEN
DateAdd(dd,1,@FromDate)
ELSE @FromDateEND
SELECT @DateDiff =DATEDIFF(day,@FromDate, @ThruDate)
END-- Conditional for arguing if workorderid exists
ELSE
BEGIN
SELECT @EncounteredError ='Yes'
IFSUBSTRING(@templatecheck,DATEPART(MONTH,@FromDate),1 )= 0BEGIN--TODO: any work order that is subject to this error is getting left behind
--when the user attempts to generate work orders in the future after
--the work order is back into a month that is valid for it to be generated.
--the solution is to update the from date to the future. But you have to
--add 1 month the 30 day work orders vs adding 30 days or they will still get
--left behind.
UPDATE azteca.WORKORDERSET FROMDATE =CASEWHEN CYCLEINTERVALUNIT ='D'AND CYCLEINTERVALNUM = 30 THEN
DATEADD(mm,1,FROMDATE)WHEN CYCLEINTERVALUNIT ='D'AND CYCLEINTERVALNUM != 30 THEN
DATEADD(dd,CYCLEINTERVALNUM,FROMDATE)WHEN CYCLEINTERVALUNIT ='W'THEN
DATEADD(wk, CYCLEINTERVALNUM, FROMDATE)
WHEN CYCLEINTERVALUNIT ='M'THEN
DATEADD(mm, CYCLEINTERVALNUM, FROMDATE)
WHEN CYCLEINTERVALUNIT ='Y'THENDATEADD(yy, CYCLEINTERVALNUM, FROMDATE)
END
WHERE DomainID = @DomainID AND CYCLETYPE ='C'AND WORKORDERID = @WorkOrderIDINSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@WorkOrderID,'Y','50000',GETDATE())
END
ELSEIFEXISTS(SELECT WORKORDERID FROM azteca.WORKORDER WHERE SOURCEWOID = @WorkOrderID AND FROMDATE = @ChildDate and CYCLETYPE ='A')
BEGIN
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@WorkOrderID,'Y','50001',GETDATE())
END
ELSE
BEGIN
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@WorkOrderID,'Y','2627',GETDATE())
END
UPDATE azteca.PWSYSIDSET ID = ID + 1WHERE SYSTYPE ='WorkOrder'
GOTO HANDLE_ERROREND
IF (@EncounteredError !='Yes')
BEGIN
--Increment PWSysID to reserve the appropriate number of record id values
UPDATE azteca.PWSYSIDSET ID = ID + 1WHERE SYSTYPE ='WorkOrder'
INSERTINTO azteca.OKC_CYCLICALERROR(WORKORDERID,ERRORFLAG,ERRORCODE,CREATIONDATE)
VALUES(@IDValue,'N','',GETDATE())
SELECT @EncounteredError ='No'
END
END--This end statement is for the while loop for each FROMDATE
HANDLE_ERROR:
--This is here so we can avoid any unecessary trips to the database if an item
--fails. So all of the inserts/updates are ignored for that specific work order.
IF (@EncounteredError ='Yes')
BEGIN
SELECT @EncounteredError ='No'
SELECT @WorkOrderErrors = @WorkOrderErrors +' '+ @WorkOrderID--This moves the workorderid up so we can continue working on the
--rest of the work orders.
SELECT @WorkorderError =(SELECTMAX(CAST(WORKORDERID ASNUMERIC(20,0)))FROM azteca.WORKORDER)
UPDATE azteca.PWSYSIDSET [ID] = @WorkorderError + 1WHERE SysType ='WORKORDER'
END
ELSE
BEGIN
SELECT @EncounteredError ='No'
END
SET @ItemCategoryCounter = @ItemCategoryCounter + 1END-- conditional for temp table while loop
BEGINTRAN
UPDATE azteca.WorkOrderSET Custom3 =NULL
WHERE Custom3 ='Y'
-- check for error on single work order transaction
SET @LocalError =@@Error
IFNOT @LocalError = 0BEGIN
ROLLBACKTRAN
RAISERROR('Exception occurred updating the CUSTOM3 field for the WorkOrder Table',11,1)
END
ELSE
BEGIN
COMMITTRAN
END
SELECT @EndID = ID FROM azteca.PWSYSIDWHERE SYSTYPE ='WorkOrder'
DECLARE @Message VARCHAR(8000)
SELECT @Message ='Employee: '+ @EmployeeID +' generated '+CONVERT(VARCHAR(32),(@EndID - @BeginID))+' work Order(s)'
+' on '+CONVERT(VARCHAR(32),GETDATE())+' with a through date of '+CONVERT(VARCHAR(32),@ThruDate)+'.'
IF (LEN(@WorkOrderErrors)> 0 )
BEGIN
SELECT @Message = @Message +' Work Order(s) that produced errors with a through date of '+CONVERT(VARCHAR(32),@ThruDate)+' include:'+CONVERT(VARCHAR(8000),@WorkOrderErrors)END-- EXEC C3PO.Enterprise.dbo.uspInsertNotification 'CWGENERATEWORKORDERS',NULL,
-- 'SILVER\CityWorksInterface',@Message,'PLAIN TEXT'
DECLARE @ApplicationID INT
DECLARE @StartDate DATETIME
SELECT @StartDate =GETDATE()SELECT @ApplicationID = ApplicationIDFROM EnterpriseLogsDB.EnterpriseLogs.dbo.ApplicationsWHERE ApplicationName ='GenerateCyclicalOrders'
EXEC EnterpriseLogsDB.EnterpriseLogs.dbo.uspInsertApplicationPerformanceLog@Message,@StartDate
,'CWGENERATEWORKORDERS','Information',@ApplicationID,'TARANTULA',
'SILVER\CityworksInterface','','Microsoft Windows NT 5.2.3790 Service Pack 1',
'','SILVER\CityworksInterface','','okc_UpdateCyclicalWorkOrderIDAllInWhile','',''END