Model
public class MyEvent
{
public int EventId { get; set; }
public string tempEventId { get; set; }
public string EventName { get; set; }
public DateTime[] StartDate { get; set; }
public DateTime[] EndDate { get; set; }
public bool IsAllDay { get; set; }
public List<SelectListItem> EventUserNameIdList = new List<SelectListItem>();
public Int32? SelectedEventUserNameId { get; set; }
public List<SelectListItem> EventCalendarRoleList = new List<SelectListItem>();
public Int32? SelectedCalendarUserRoleId { get; set; }
public List<SelectListItem> EventStatusList = new List<SelectListItem>();
public Int32? SelectedEventStatusId { get; set; }
public string EventNote { get; set; }
public string[] StartTime { get; set; }
public string[] EndTime { get; set; }
public string MapStartDate { get; set; }
public string MapEndDate { get; set; }
public string MapStartTime { get; set; }
public string MapEndTime { get; set; }
}
Add these
fullcalendar.js
fullcalendar.css
fullcalendar.print.css
Main Page
<!-- Calendar-view mode -->
<div id='calendar' style="margin-top: 20px;">
</div>
<a id="lnkHdEventId" href="" data-ajax-update="#UpdatepanelModalMyEvents2" data-ajax-mode="replace" data-ajax-loading="#divLoading"
data-ajax-method="POST" data-ajax="true" data-ajax-complete="ajaxcomplte();">
</a>
<div id="UpdatepanelModalMyEvents2" class="UpdatepanelModal">
</div>
Script and my tricks
<script type="text/javascript">
$(document).ready(function () {
DisplayCalendar();
Date.prototype.toMMDDYYYYString = function () { return isNaN(this) ? 'NaN' : [this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getFullYear()].join('/') }
});
function ajaxcomplte() {
$('#EventModal').modal('show');
}
function DisplayCalendar() {
$.ajax({
url: '/Events/GetEvents',
type: "POST",
data: "{}",
contentType: 'application/json; charset=utf-8;',
dataType: "json",
success: function (data) {
$('#calendar').html('');
$('#calendar').fullCalendar({
selectable: true,
// editable: true,
defaultView: 'agendaWeek',
select: function (start, end, allDay) {
endtime = $.fullCalendar.formatDate(end, 'hh:mm TT');
starttime = $.fullCalendar.formatDate(start, 'hh:mm TT');
date = new Date(start);
var dateofEvent = date.toMMDDYYYYString();
NewEvent(dateofEvent, starttime, endtime, allDay);
},
events:
$.map(data.events, function (item, i) {
var event = new Object();
event.start = new Date(item.MapStartDate),
event.end = new Date(item.MapEndDate);
event.title = item.EventName;
event.allDay = false;
event.tempid = item.tempEventId;
return event;
}),
eventMouseover: function (calEvent, jsEvent) {
var tooltip = '<div class="tooltipevent calendertooltip">' + calEvent.title + '</div>';
$("body").append(tooltip);
$(this).mouseover(function (e) {
$(this).css('z-index', 10000);
$('.tooltipevent').fadeIn('500');
$('.tooltipevent').fadeTo('10', 1.9);
}).mousemove(function (e) {
$('.tooltipevent').css('top', e.pageY + 10);
$('.tooltipevent').css('left', e.pageX + 20);
});
},
eventMouseout: function (calEvent, jsEvent) {
$(this).css('z-index', 8);
$('.tooltipevent').remove();
},
eventClick: function (event, element) {
UpdateMyEvent(event);
}
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
var errorMessage = '';
alert(XMLHttpRequest.responseText);
}
});
}
function UpdateMyEvent(event) {
if (valdarr[0]["IsEdit"]) {
var id = event.tempid;
if (id != '') {
var url = "/Events/SetEventId?id=" + id;
var objurl = $('#lnkHdEventId');
objurl.attr("href", url);
objurl.trigger('click');
}
}
else {
alert("Access Denied");
}
}
function NewEvent(dateofEvent, starttime, endtime, allDay) {
if (valdarr[0]["IsAdd"]) {
var url = "/Events/SetEventId?dateofEvent=" + dateofEvent + "&starttime=" + starttime + "&endtime=" + endtime + "&allDay=" + allDay;
var objurl = $('#lnkHdEventId');
objurl.attr("href", url);
objurl.trigger('click');
}
else {
alert("Access Denied");
}
}
</script>
Modal partial page
@model PCCAS.Models.MyEvent
@using DAL;
@using PCCAS.Models;
@using PCCAS.Common;
@{var flag = 0;}
<div id="EventModal" class="modal hide fade longmodal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel1" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
x</button>
@if (Model.EventId == 0)
{
<h3 id="myModalLabel1">
Add Event
</h3>
}
else
{
<h3 id="myModalLabel1">
Edit Event
</h3>
}
</div>
@using (Ajax.BeginForm("EventPost", "Events", "", new AjaxOptions { UpdateTargetId = "ajaxtest", LoadingElementId = "divLoading", OnSuccess = "ModalSuccessEventPost", OnFailure = "ErrorEventPost" }, new { id = "frmEventPost", @class = "form-horizontal" }))
{
<div class="modal-body">
<span class="twoColumnFrom">
<label for="name">
User Name:</label>
@Html.DropDownListFor(m => m.SelectedEventUserNameId, Model.EventUserNameIdList, new { vid = "SelectedEventUserNameId", required = "required", @class = "input_size" })
</span><span class="twoColumnFrom">
<label for="name">
User Role:</label>
@Html.DropDownListFor(m => m.SelectedCalendarUserRoleId, Model.EventCalendarRoleList, new { vid = "SelectedCalendarUserRoleId", required = "required", @class = "input_size" })
</span>
@{var context = new PCCASEntities();
MyEvent objMyEvent = new MyEvent();
var EventId = Model.EventId;
var events = context.EventDetails.Where(m => m.EventDetails_EventId == EventId).ToList();
<span id="spanEvent">
@if (events.Count != 0)
{
foreach (var evnt in events)
{
var randdEvent = "EventNo_" + flag;
var randdStartTime = "StartTime_" + flag;
var randdEndTime = "EndTime_" + flag;
var randdEventDel = "EventDel_" + flag;
var ParentEventDivId = "EventParentId_" + flag;
<div class="row-fluid" id=@ParentEventDivId>
<div>
<span class="fourColumnFrom">
<label>
Event Date:</label>
<div class="input-append date-only">
@Html.TextBox("StartDate", @evnt.EventDetails_StartDate == null ? "" : @evnt.EventDetails_StartDate.Value.ToString("MM/dd/yyyy"), new { @id = @randdEvent, name = "StartDate", vid = "StartDate", @class = "modaldate", required = "required", placeholder = "MM/DD/YYYY", @pastdate = "true" })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span><span class="fourColumnFrom">
<label>
Start Time:</label>
<div class="input-append time-only">
@Html.TextBox("StartTime", @evnt.EventDetails_StartTime == null ? "" : @evnt.EventDetails_StartTime, new { @id = @randdStartTime, @name = "StartTime", vid = "StartTime", @class = "modaldate", required = "required", })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span><span class="fourColumnFrom">
<label>
End Time:</label>
<div class="input-append time-only">
@Html.TextBox("EndTime", @evnt.EventDetails_EndTime == null ? "" : @evnt.EventDetails_EndTime, new { @id = @randdEndTime, @name = "EndTime", vid = "EndTime", @class = "modaldate", required = "required", })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span>
</div>
<div class="span1 marL5 marTop25">
<div class="row-fluid delete_btn">
@if (flag > 0)
{
<button class="del" id=@randdEventDel title="Del a Event" type="button" onclick="DelEvent('@ParentEventDivId')">
-</button>
}
else
{
<button class="posRelative top2" id="addEvent" title="Add Another Event" type="button">
+</button>
}
</div>
</div>
</div>
flag++;
}
}
else
{
<div class="row-fluid" id="EventParentId_0">
<span class="fourColumnFrom">
<label>
Event Date:</label>
<div class="input-append date-only">
@Html.TextBox("StartDate", "", new { @id = "EventNo_0", @name = "StartDate", vid = "StartDate", @class = "modaldate", required = "required", placeholder = "MM/DD/YYYY", @pastdate = "true" })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span><span class="fourColumnFrom">
<label>
Start Time:</label>
<div class="input-append time-only">
@Html.TextBox("StartTime", "", new { @id = "StartTime_0", @name = "StartTime", vid = "StartTime", @class = "modaldate", required = "required", })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span><span class="fourColumnFrom">
<label>
End Time:</label>
<div class="input-append time-only">
@Html.TextBox("EndTime", "", new { @id = "EndTime_0", @name = "EndTime", vid = "EndTime", @class = "modaldate", required = "required", })
<span class="add-on"><i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
</span>
</div>
</span>
<div class="span1 marL5 marTop25">
<div class="row-fluid">
<button class="posRelative top2" id="addEvent" title="Add Another Event" type="button">
+</button>
</div>
</div>
</div>
flag++;
}
</span>
}
<span class="twoColumnFrom">
<label for="name">
Approval Status:</label>
@Html.DropDownListFor(m => m.SelectedEventStatusId, Model.EventStatusList, new { vid = "SelectedEventStatusId", @class = "input_size" })
</span>
<span class="twoColumnCheckBoxArea">
<label>
Notes:</label>
@Html.TextAreaFor(m => m.EventNote, new { vid = "EventNote", @class = "span8 width98P", @rows = "3", style = "resize: none;" })
</span>
@Html.HiddenFor(m => m.EventId)
@Html.HiddenFor(m => m.IsAllDay)
@Html.HiddenFor(m => m.MapStartDate)
@Html.HiddenFor(m => m.MapStartTime)
@Html.HiddenFor(m => m.MapEndTime)
</div>
<div class="modal-footer">
<input type="image" src="@Url.Content("~/Content/images/save.png")" id="btnModalSave" alt="Save" title="Save" />
<a href="javascript:void(0);" data-dismiss="modal">
<img src="@Url.Content("~/Content/images/cancel.png")" alt="Cancel" title="Cancel" data-dismiss="modal"></a>
<a href="javascript:void(0)" id="btnModalDel" class="btn btn-danger" style="display: none;">
Delete</a>
</div>
}
</div>
<script type="text/javascript">
function ModalSuccessEventPost() {
$('#EventModal').modal('hide');
DisplayCalendar();
}
// on error save of ErrorEventPost
function ErrorEventPost() {
}
</script>
<script type="text/javascript">
$(document).ready(function () {
ModalAjaxAction = "MyCalendar";
$('#frmEventPost #btnModalDel').attr("eid", "lnk" + ModalAjaxAction + "Delete");
for (i = 0; i < valdarr.length; i++) {
if(valdarr[i]["Name"] =="OtherUser" && (!valdarr[i]["IsAdd"]))
{
$("#SelectedEventUserNameId").select2("enable", false);
}
}
if ($('#EventId').val() != 0) {
$('#btnModalDel').show();
}
else
{
$('#btnModalDel').remove();
}
Date.prototype.toMMDDYYYYString = function () { return isNaN(this) ? 'NaN' : [this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getFullYear()].join('/') }
if ($('#EventId').val() == 0) {
$('#frmEventPost input[vid=StartTime]').val($('#MapStartTime').val());
$('#frmEventPost input[vid=EndTime]').val($('#MapEndTime').val());
$('#frmEventPost input[vid=StartDate]').val($('#MapStartDate').val());
}
var counterEvent = @flag;
$("#addEvent").click(function () {
var randdEvent = "EventNo_" + counterEvent;
var randdStartTime = "StartTime_" + counterEvent;
var randdEndTime = "EndTime_" + counterEvent;
var randdEventDel = "EventDel_" + counterEvent;
var ParentEventDivId = "EventParentId_" + counterEvent;
//set next date to date textbox
var lastdivid=$("#spanEvent input:last").attr('id');
var arr = lastdivid.split('_');
var counter=arr[1];
var nextdate=new Date( $('#EventNo_'+counter).val());
nextdate.setDate(nextdate.getDate() + 1);
$("#EventParentId_0").clone().appendTo("#spanEvent");
$("#spanEvent #EventParentId_0:last-child").html($("#spanEvent #EventParentId_0").last().html().replace(/_0/g, "_" + counterEvent).replace("+", "-").replace('id="addEvent"', "id='" + randdEventDel + "'"));
$('#' + randdEventDel).attr('class', 'posRelative top2 del');
$('#' + randdEventDel).attr('onclick', 'DelEvent(\"' + ParentEventDivId + '\")');
$("#spanEvent #EventParentId_0:last-child").attr("id", "EventParentId_" + counterEvent);
//set next date to date textbox
$("#"+randdEvent).val(nextdate.toMMDDYYYYString());
$("#"+randdStartTime).val( $('#StartTime_'+counter).val());
$("#"+randdEndTime).val( $('#EndTime_'+counter).val());
counterEvent++;
$('select').select2({
placeholder: "Select"
});
$('.date-only').datetimepicker({
pickTime: false,
pickDate: true
}).on('changeDate', function (ev) {
if ($(this).children('input').attr('onchange') != undefined) {
var func = $(this).children('input').attr('onchange');
func = func.replace("();", "");
if (func != undefined) {
eval(func)();
}
}
});
$('.time-only').datetimepicker({
format: 'hh:mm PP',
language: 'en',
pickTime: true,
pickDate: false,
pickSeconds: false,
pick12HourFormat: true
}).on('changeDate', function (ev) {
if ($(this).children('input').attr('onchange') != undefined) {
var func = $(this).children('input').attr('onchange');
func = func.replace("();", "");
if (func != undefined) {
eval(func)();
}
}
});
});
});
function DelEvent(EventParentDivId) {
if (confirm("Are you sure you want to delete this event?")) {
$("#" + EventParentDivId).remove();
}
}
$('#btnModalDel').click(function () {
if(!$(this).hasClass("disabled"))
{
if (confirm("Are you sure you want to delete this event series?")) {
var id = $('#EventId').val();
if (id != 0) {
$.ajax({
url: '/Events/DeleteEvent',
type: 'POST',
data: "{id:" + id + "}",
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (result) {
ModalSuccessEventPost();
},
error: function (jqXHR, textStatus, errorThrown) {
var errorMessage = '';
alert(jqXHR.responseText);
}
});
}
}
}
});
</script>
Controller
public ActionResult Calendar()
{
return View();
}
public ActionResult MyCalendar()
{
MyEvent objMyEvent = new MyEvent();
using (var context = new PCCASEntities())
{
try
{
objMyEvent.SelectedEventUserNameId = Convert.ToInt32(Session["UserId"]);
int selectedid2 = 0;
var ReceivedByList = context.appUsers.Select(d => new { appUsers_ID = d.appUsers_ID, appUsers_UserName = d.appUsers_FullName }).Distinct().AsEnumerable().
Select(x => new SelectListItem { Text = x.appUsers_UserName, Value = x.appUsers_ID.ToString(), Selected = x.appUsers_ID.Equals(selectedid2) }).ToList();
ReceivedByList.Insert(0, new SelectListItem { Text = "Select", Value = "" });
objMyEvent.EventUserNameIdList = ReceivedByList;
///Populate EventStatusList Dropdown
objMyEvent.EventStatusList = Globals.BindDropdown("ApprovalStatus", "MyCalendar", objMyEvent.SelectedEventStatusId);
///Populate EventStatusList Dropdown
objMyEvent.EventCalendarRoleList = Globals.BindDropdown("CalendarRole", "MyCalendar", objMyEvent.SelectedCalendarUserRoleId);
return View(objMyEvent);
}
catch (Exception ex)
{
return View(objMyEvent);
}
}
}
public JsonResult GetEvents()
{
List<MyEvent> objMyEventList = new List<MyEvent>();
var userid = Convert.ToInt32(Session["UserId"]);
Event_Select_Result objEvent_Select_Result = new Event_Select_Result();
using (var context = new PCCASEntities())
{
IEnumerable<Event_Select_Result> events = context.Event_Select(userid).ToList();
foreach (var EventId in events)
{
MyEvent objMyEvent = new MyEvent();
objMyEvent.tempEventId = Convert.ToString(EventId.Event_Id);
objMyEvent.EventName = EventId.EventTitle;
objMyEvent.MapStartDate = EventId.StartDate;
objMyEvent.MapEndDate = EventId.EndDate;
objMyEventList.Add(objMyEvent);
}
var result = objMyEventList;
return Json(new { events = result }, JsonRequestBehavior.AllowGet);
}
}
[HttpPost]
public PartialViewResult Event(int? id)
{
MyEvent objMyEvent = new MyEvent();
TempData["ShowMsg"] = false;
try
{
using (var context = new PCCASEntities())
{
var userid = Convert.ToInt32(Session["UserId"]);
var result = context.Events.FirstOrDefault(i => i.Event_Id == id);
if (result != null)
{
objMyEvent.SelectedEventUserNameId = result.Event_UserNameId;
objMyEvent.SelectedCalendarUserRoleId = result.Event_UserRole;
}
return PartialView("MyCalendarPartial", objMyEvent);
}
}
catch (Exception ex)
{
var err = (((ex.InnerException).Message.IndexOf('\r') > 0) ? (ex.InnerException).Message.Substring(0, (ex.InnerException).Message.IndexOf('\r')) : (ex.InnerException).Message);
TempData["ShowMsg"] = true;
TempData["Error"] = true;
TempData["Msg"] = err;
return PartialView("MyCalendarPartial", objMyEvent);
}
}
[HttpPost]
public JsonResult EventPost(MyEvent objMyEvent, FormCollection frm)
{
Event_Insert_Update_Result objEvent_Insert_Update_Result = new Event_Insert_Update_Result();
string msg = "";
using (var context = new PCCASEntities())
{
try
{
string RecordString = CreateXMLDocumentEvent(objMyEvent);
objMyEvent.IsAllDay = Convert.ToBoolean(frm["apptAllDay"]);
objMyEvent.SelectedEventUserNameId =objMyEvent.SelectedEventUserNameId.HasValue ? objMyEvent.SelectedEventUserNameId : Convert.ToInt32(Session["UserId"]);
//var username = frm["SelectedEventUserNameId"];
objEvent_Insert_Update_Result = context.Event_Insert_Update(objMyEvent.EventId, objMyEvent.SelectedEventUserNameId, objMyEvent.SelectedCalendarUserRoleId, objMyEvent.SelectedEventStatusId,
Convert.ToInt32(Session["UserId"]), objMyEvent.IsAllDay, objMyEvent.EventNote, RecordString).FirstOrDefault();
if (objEvent_Insert_Update_Result.FLAG == 1)
{
msg = "Information Saved";
}
else
{
msg = "Information Updated";
}
return Json(new { sView = "", IsSuccess = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { sView = ex.InnerException.Message, IsSuccess = false }, JsonRequestBehavior.AllowGet);
}
}
}
public PartialViewResult SetEventId(int? id, string dateofEvent, string starttime, string endtime, string allDay)
{
MyEvent objMyEvent = new MyEvent();
try
{
using (var context = new PCCASEntities())
{
objMyEvent.SelectedEventUserNameId = Convert.ToInt32(Session["UserId"]);
int selectedid2 = 0;
var ReceivedByList = context.appUsers.Select(d => new { appUsers_ID = d.appUsers_ID, appUsers_UserName = d.appUsers_FullName }).Distinct().AsEnumerable().
Select(x => new SelectListItem { Text = x.appUsers_UserName, Value = x.appUsers_ID.ToString(), Selected = x.appUsers_ID.Equals(selectedid2) }).ToList();
ReceivedByList.Insert(0, new SelectListItem { Text = "Select", Value = "" });
objMyEvent.EventUserNameIdList = ReceivedByList;
///Populate EventStatusList Dropdown
objMyEvent.EventStatusList = Globals.BindDropdown("ApprovalStatus", "MyCalendar", objMyEvent.SelectedEventStatusId);
///Populate EventStatusList Dropdown
objMyEvent.EventCalendarRoleList = Globals.BindDropdown("CalendarRole", "MyCalendar", objMyEvent.SelectedCalendarUserRoleId);
if (id.HasValue)
{
var vid = Convert.ToInt32(id);
var events = context.Events.Where(m => m.Event_Id == vid).FirstOrDefault();
objMyEvent.SelectedCalendarUserRoleId = events.Event_UserRole;
objMyEvent.SelectedEventUserNameId = events.Event_UserNameId;
objMyEvent.SelectedEventStatusId = events.Event_StatusId;
objMyEvent.EventId = vid;
}
else
{
var userid = Convert.ToInt32(Session["UserId"]);
objMyEvent.SelectedEventUserNameId = userid;
objMyEvent.MapStartDate = dateofEvent;
objMyEvent.MapStartTime = starttime;
objMyEvent.MapEndTime = endtime;
objMyEvent.IsAllDay = Convert.ToBoolean(allDay);
objMyEvent.EventId = 0;
}
return PartialView("MyCalendarPartial", objMyEvent);
}
}
catch (Exception ex)
{
var err = (((ex.InnerException).Message.IndexOf('\r') > 0) ? (ex.InnerException).Message.Substring(0, (ex.InnerException).Message.IndexOf('\r')) : (ex.InnerException).Message);
TempData["ShowMsg"] = true;
TempData["Error"] = true;
TempData["Msg"] = err;
return PartialView("MyCalendarPartial", objMyEvent);
}
}
private string CreateXMLDocumentEvent(MyEvent objMyEvent)
{
String XmlString;
XmlDocument doc = new XmlDocument();
// XML declaration
XmlNode declaration = doc.CreateNode(XmlNodeType.XmlDeclaration, null, null);
doc.AppendChild(declaration);
// Root element: RequestItemStatus
XmlElement root = doc.CreateElement("Event");
doc.AppendChild(root);
for (Int32 i = 0; i < objMyEvent.StartDate.Length; i++)
{
// Main element: RequestItem
XmlElement RequestItem = doc.CreateElement("EventDetails");
root.AppendChild(RequestItem);
// Sub-element: EventDate
XmlElement RequestItemId = doc.CreateElement("EventDate");
RequestItemId.InnerText = objMyEvent.StartDate[i].ToString();
RequestItem.AppendChild(RequestItemId);
// Sub-element: StartTime
XmlElement comments = doc.CreateElement("StartTime");
comments.InnerText = objMyEvent.StartTime[i].ToString();
RequestItem.AppendChild(comments);
// Sub-element: EndTime
XmlElement endtime = doc.CreateElement("EndTime");
endtime.InnerText = objMyEvent.EndTime[i].ToString();
RequestItem.AppendChild(endtime);
}
XmlString = doc.InnerXml;
return XmlString.ToString();
}
[HttpPost]
public JsonResult DeleteEvent(Int32? id)
{
using (var context = new PCCASEntities())
{
try
{
Event_delete_Result objEvent_delete_Result = new Event_delete_Result();
objEvent_delete_Result = context.Event_delete(id).SingleOrDefault();
if (objEvent_delete_Result.FLAG == 1)
{
return Json(new { sView = "Event deleted", IsSuccess = true }, JsonRequestBehavior.AllowGet);
}
return Json(new { sView = "", IsSuccess = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { sView = ex.InnerException.Message, IsSuccess = false }, JsonRequestBehavior.AllowGet);
}
}
}
DATABASE
create table Event
[Event_Id] [int] IDENTITY(1,1) NOT NULL,
[Event_UserNameId] [int] NULL,
[Event_UserRole] [int] NULL,
[Event_StatusId] [int] NULL,
[Event_UserId] [int] NOT NULL,
[Event_Note] [varchar](max) NULL,
[Event_IsActive] [bit] NULL,
CREATE TABLE [dbo].[EventDetails](
[EventDetails_Id] [int] IDENTITY(1,1) NOT NULL,
[EventDetails_EventId] [int] NOT NULL,
[EventDetails_StartDate] [datetime] NULL,
[EventDetails_EndDate] [datetime] NULL,
[EventDetails_StartTime] [varchar](50) NULL,
[EventDetails_EndTime] [varchar](50) NULL,
[EventDetails_IsAllDay] [bit] NULL,
CONSTRAINT [PK_EventDetails] PRIMARY KEY CLUSTERED
(
[EventDetails_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[EventDetails] WITH CHECK ADD CONSTRAINT [FK_EventDetails_Event] FOREIGN KEY([EventDetails_EventId])
REFERENCES [dbo].[Event] ([Event_Id])
GO
Store proc
ALTER PROCEDURE [dbo].[sp_Event_Select]
@UserId int
AS
BEGIN
SELECT Event.Event_Id,
dbo.fn_getUserNameById_Select(Event.Event_UserNameId)+' ('+ dbo.dmnValue_Select(Event.Event_UserRole)+')'
+' '+
CASE
WHEN Event.Event_Note IS NOT NULL THEN '<br/>Notes: '+Event.Event_Note
ELSE ''
END
--+' Notes:'+Event.Event_Note
as EventTitle,
CONVERT(VARCHAR(10),EventDetails.EventDetails_StartDate,111)+' '+EventDetails_StartTime as StartDate,
CONVERT(VARCHAR(10),EventDetails.EventDetails_EndDate,111)+' '+EventDetails_EndTime as EndDate
FROM dbo.Event join EventDetails on Event.Event_Id = EventDetails.EventDetails_EventId
WHERE Event.Event_UserId= @UserId and Event.Event_IsActive=1
END
=============================================================
ALTER PROCEDURE [dbo].[sp_Event_Insert_Update]
@Event_Id int,
@Event_UserNameId int,
@Event_UserRole int,
@Event_StatusId int,
@Event_UserId int,
@EventDetails_IsAllDay bit,
@Event_Note varchar(max),
@EventXML varchar(max)
AS
BEGIN
DECLARE @ErrMsg varchar(max);
DECLARE @InTransaction bit;
SELECT @InTransaction = 0;
DECLARE @FLAG int = 0;
DECLARE @i int
SET NOCOUNT OFF
SET FMTONLY OFF
CREATE TABLE #TempDetails
(
EventDate datetime,
StartTime VARCHAR(50),
EndTime VARCHAR(50),
)
EXEC sp_xml_preparedocument @i OUTPUT, @EventXML
INSERT INTO #TempDetails(EventDate, StartTime,EndTime)
SELECT EventDate, StartTime,EndTime
FROM OPENXML(@i, '/Event/EventDetails',2)
WITH (EventDate datetime, StartTime VARCHAR(50),EndTime VARCHAR(50))
EXEC sp_xml_removedocument @i
BEGIN TRANSACTION MAIN_TRAN;
SELECT @InTransaction = 1; -- Set Transaction Flag true
-- For insert
IF @Event_Id=0
BEGIN
BEGIN TRY
INSERT INTO dbo.Event(Event_UserNameId,
Event_UserRole,
Event_StatusId,
Event_UserId,
Event_Note,
Event_IsActive)
VALUES(@Event_UserNameId,
@Event_UserRole,
@Event_StatusId,
@Event_UserId,
@Event_Note,
1);
SET @Event_Id = @@IDENTITY;
INSERT INTO dbo.EventDetails(EventDetails_EventId,
EventDetails_StartDate,
EventDetails_EndDate,
EventDetails_StartTime,
EventDetails_EndTime
)
SELECT @Event_Id,
EventDate,
EventDate,
StartTime,
EndTime FROM #TempDetails
SET @FLAG = 1;
END TRY
BEGIN CATCH
SELECT @ErrMsg = (
SELECT *
FROM(
SELECT ERROR_MESSAGE()ErrorMessage,
ERROR_LINE()ErrorLine,
ERROR_PROCEDURE()ErrorProcedure)a
FOR XML AUTO,ELEMENTS,ROOT('root'));
GOTO ErrHandler;
END CATCH;
END
ELSE
BEGIN
BEGIN TRY
UPDATE dbo.Event
SET Event_UserNameId = @Event_UserNameId,
Event_UserRole = @Event_UserRole,
Event_StatusId = @Event_StatusId,
Event_UserId = @Event_UserId,
Event_Note=@Event_Note
WHERE Event_Id=@Event_Id;
DELETE FROM EventDetails WHERE EventDetails_EventId=@Event_Id
INSERT INTO dbo.EventDetails(EventDetails_EventId,
EventDetails_StartDate,
EventDetails_EndDate,
EventDetails_StartTime,
EventDetails_EndTime
)
SELECT @Event_Id,
EventDate,
EventDate,
StartTime,
EndTime FROM #TempDetails
SET @FLAG = 2;
END TRY
BEGIN CATCH
SELECT @ErrMsg = (
SELECT *
FROM(
SELECT ERROR_MESSAGE()ErrorMessage,
ERROR_LINE()ErrorLine,
ERROR_PROCEDURE()ErrorProcedure)a
FOR XML AUTO,ELEMENTS,ROOT('root'));
GOTO ErrHandler;
END CATCH;
END;
---- Commit The Transaction
SELECT Event_Id = @Event_Id,
FLAG = @FLAG;
COMMIT TRANSACTION MAIN_TRAN;-- all ends well
RETURN 1;
ErrHandler:
IF @InTransaction=1
BEGIN
ROLLBACK TRANSACTION MAIN_TRAN;
END;
RAISERROR(@ErrMsg,16,1,0);
RETURN 0;
END;
==========================================================
ALTER PROCEDURE [dbo].[sp_Event_delete]
@EventId int
AS
BEGIN
DECLARE @ErrMsg varchar(255)
DECLARE @InTransaction bit
SELECT @InTransaction = 0
DECLARE @FLAG INT=0
BEGIN TRANSACTION MAIN_TRAN
SELECT @InTransaction = 1 -- Set Transaction Flag true
BEGIN
UPDATE dbo.Event
SET
Event_IsActive=0
WHERE
Event_Id=@EventId
set @FLAG=1
SELECT @ErrMsg = @@ERROR
IF (@@ERROR <> 0) GOTO ErrHandler
END
---- Commit The Transaction
SELECT EventId=@EventId,FLAG= @FLAG
COMMIT TRANSACTION MAIN_TRAN-- all ends well
RETURN 1
ErrHandler:
IF (@InTransaction = 1)
BEGIN
ROLLBACK TRANSACTION MAIN_TRAN
END
RAISERROR(@ErrMsg, 16, 1, 0)
RETURN 0
END
CSS
.datemodal{
height: 30px !important;
width: 83% !important;
}
.calendertooltip
{
width:100px;height:100px;background:#E5E5E5;position:absolute;z-index:10001;padding:4px;
}
.icon-docx{
background-image: url("../images/docx-logo.png");
background-position: 14px 14px;
background-repeat: no-repeat;
display: inline-block;
height: 70px;
line-height: 14px;
margin-top: 1px;
vertical-align: middle;
width: 70px;
}