Create a Timesheet Application with SharePoint and Exchange
Overview
Preview of Summary Page
Preview of Exchange Calendar Item
- Set the item Category to Work Hours
- Set the value of Location to the Job identification Code
- Set the body of the message to the description of the work completed
Step 1 - Create Database
USE [TimesheetDB]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE TABLE [dbo].[Job] (
[DSID] uniqueidentifier DEFAULT(newid()) NOT NULL,
[Code] nvarchar(255) NOT NULL,
[Company] nvarchar(255) NOT NULL,
[Name] nvarchar(255) NOT NULL,
[Quote] int NOT NULL,
[Active] int NOT NULL
)
GO
ALTER TABLE [dbo].[Job] ADD CONSTRAINT [PK_1AD0E075] PRIMARY KEY CLUSTERED ([DSID] ASC)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE TABLE [dbo].[Billing] (
[CalendarID] nvarchar(50) NOT NULL,
[CreationDate] datetime NULL,
[LastModified] datetime NULL,
[StartDate] datetime NULL,
[EndDate] datetime NULL,
[Duration] int NULL,
[Importance] ntext NULL,
[Priority] int NULL,
[Subject] nvarchar(255) NULL,
[Body] ntext NULL,
[Location] nvarchar(255) NULL,
[Category] nvarchar(255) NULL,
[MailBoxName] nvarchar(255) NULL
)
GO
ALTER TABLE [dbo].[Billing] ADD CONSTRAINT [PK_2FA475F7] PRIMARY KEY CLUSTERED ([CalendarID] ASC)
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW Timesheet_Stats
AS
SELECT
[Billing].Location AS Code,
Job.Company,
Job.Name,
Job.Quote,
ROUND(SUM(CAST(Billing.Duration as float))/60/60, 2) AS Total,
ROUND(CAST(LAST_MONTH.Duration as float)/60/60, 2) AS [Last Month],
ROUND(CAST(THIS_MONTH.Duration as float)/60/60, 2) AS [This Month]
FROM [Billing]
INNER JOIN Job ON Job.Code = [Billing].Location
LEFT JOIN ( SELECT [Location], SUM([Duration]) AS [Duration] FROM [dbo].[Billing] WHERE Month([StartDate]) = Month(DATEADD(m, -1, GETDATE())) GROUP BY [Location]) LAST_MONTH ON LAST_MONTH.Location = [Billing].[Location]
LEFT JOIN ( SELECT [Location], SUM([Duration]) AS [Duration] FROM [dbo].[Billing] WHERE Month([StartDate]) = Month(GETDATE()) GROUP BY [Location]) THIS_MONTH ON THIS_MONTH.Location = [Billing].[Location]
GROUP BY [Billing].Location, Job.Company, Job.Name, Job.Quote, Job.Active, LAST_MONTH.Duration, THIS_MONTH.Duration
HAVING Job.Active = 0
GO
Step 2 - Create Exchange Sync Project
<Exchange>
<Server>https://yourserver/exchange</Server>
<Username></Username>
<Password></Password>
<Domain></Domain>
<FormsAuthentication>False</FormsAuthentication>
<Calendar>#SERVER#/#MAILBOX#/Calendar</Calendar>
<DaysBackToReturn>90</DaysBackToReturn>
<Category>Work Hours</Category>
<MailBoxes>
<MailBox>user1@domain.com</MailBox>
<MailBox>user2@domain.com</MailBox>
<MailBox>user3@domain.com</MailBox>
</MailBoxes>
</Exchange>
Step 3 - Create Job List
Screenshot of the Job project in Data Sync
Step 4 - Create Summary List
Step 5 - Setup Schedule
- Sync Job List
- Sync Exchange Data
- Sync Summary List
