Quantcast
Viewing all articles
Browse latest Browse all 32059

Console application for this stored procedure

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 WHERE

WORKORDERID

= @WorkOrderID)


SELECT @TemplateCheck =(SELECT WORKMONTH FROM azteca.WOTEMPLATE WHERE

WOTEMPLATEID

= @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)


ELSE

FROMDATE






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)


ELSE

FROMDATE


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


Viewing all articles
Browse latest Browse all 32059

Trending Articles