add statistic and some fixes

This commit is contained in:
Bukovenszki Tamás 2017-10-26 20:51:50 +02:00
parent b7c0ab7658
commit 7387de1c18
26 changed files with 491 additions and 20 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -17,6 +17,7 @@ namespace ResoursesManager.Controllers
{ {
private ApplicationSignInManager _signInManager; private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager; private ApplicationUserManager _userManager;
private ApplicationDbContext db = new ApplicationDbContext();
public AccountController() public AccountController()
{ {
@ -79,6 +80,13 @@ namespace ResoursesManager.Controllers
switch (result) switch (result)
{ {
case SignInStatus.Success: case SignInStatus.Success:
db.Statistic.Add(new StatisticModel()
{
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Login,
DateTime = DateTime.Now
});
db.SaveChanges();
return RedirectToLocal(returnUrl); return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut: case SignInStatus.LockedOut:
return View("Lockout"); return View("Lockout");
@ -158,7 +166,13 @@ namespace ResoursesManager.Controllers
if (result.Succeeded) if (result.Succeeded)
{ {
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
db.Statistic.Add(new StatisticModel()
{
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Register,
DateTime = DateTime.Now
});
db.SaveChanges();
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link // Send an email with this link
// string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
@ -393,6 +407,13 @@ namespace ResoursesManager.Controllers
[ValidateAntiForgeryToken] [ValidateAntiForgeryToken]
public ActionResult LogOff() public ActionResult LogOff()
{ {
db.Statistic.Add(new StatisticModel()
{
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Logout,
DateTime = DateTime.Now
});
db.SaveChanges();
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Index", "Home"); return RedirectToAction("Index", "Home");
} }

View File

@ -144,8 +144,8 @@ namespace ResoursesManager.Controllers
}; };
if (resourceId != null) if (resourceId != null)
{ {
model.Reservation.Begining = DateTime.Now; model.Reservation.Begining = DateTime.Now.AddHours(1);
model.Reservation.End = DateTime.Now.AddHours(1); model.Reservation.End = DateTime.Now.AddHours(2);
model.Reservation.ResourceId = (int)resourceId; model.Reservation.ResourceId = (int)resourceId;
model.Reservation.Resource = db.Resources.Find(resourceId); model.Reservation.Resource = db.Resources.Find(resourceId);
} }
@ -211,6 +211,14 @@ namespace ResoursesManager.Controllers
} }
db.Reservations.Add(model); db.Reservations.Add(model);
db.Statistic.Add(new StatisticModel()
{
ReservationId = model.Id,
ResourceId = model.ResourceId,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Reserv,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
log.Info("Új Foglalás: " + model.ToString()); log.Info("Új Foglalás: " + model.ToString());
@ -310,7 +318,15 @@ namespace ResoursesManager.Controllers
var r = db.Reservations.First(f => f.Id == reservation.Id); var r = db.Reservations.First(f => f.Id == reservation.Id);
r.Begining = reservation.Begining; r.Begining = reservation.Begining;
r.End = reservation.End; r.End = reservation.End;
db.Statistic.Add(new StatisticModel()
{
ReservationId = r.Id,
ResourceId = r.ResourceId,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.ReservartionModified,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
log.Info("Új foglalás: " + r.ToString()); log.Info("Új foglalás: " + r.ToString());
@ -377,6 +393,14 @@ namespace ResoursesManager.Controllers
NotificationHelper.Send(users, "Foglalás törlés", message, reservation.Resource.ImagePath, null); NotificationHelper.Send(users, "Foglalás törlés", message, reservation.Resource.ImagePath, null);
db.Reservations.Remove(reservation); db.Reservations.Remove(reservation);
db.Statistic.Add(new StatisticModel()
{
ReservationId = reservation.Id,
ResourceId = reservation.ResourceId,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.ReservationDelete,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
log.Info("Foglalás törölve id: " + id); log.Info("Foglalás törölve id: " + id);
} }

View File

@ -153,6 +153,13 @@ namespace ResoursesManager.Controllers
{ {
resource.Users = db.Users.ToList(); resource.Users = db.Users.ToList();
db.Resources.Add(pictureUploadTo(resource)); db.Resources.Add(pictureUploadTo(resource));
db.Statistic.Add(new StatisticModel()
{
ResourceId = resource.Id,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.ResourceCreate,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
} }
catch (Exception e) catch (Exception e)
@ -249,6 +256,13 @@ namespace ResoursesManager.Controllers
model.TimeLimit = resource.TimeLimit; model.TimeLimit = resource.TimeLimit;
db.Entry(model).State = EntityState.Modified; db.Entry(model).State = EntityState.Modified;
db.Statistic.Add(new StatisticModel()
{
ResourceId = resource.Id,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.ResourceModified,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
//Értesítés küldés //Értesítés küldés
@ -302,6 +316,13 @@ namespace ResoursesManager.Controllers
NotificationHelper.Send(users, "Erőforrás törlés", message, null, null); NotificationHelper.Send(users, "Erőforrás törlés", message, null, null);
db.Resources.Remove(resource); db.Resources.Remove(resource);
db.Statistic.Add(new StatisticModel()
{
ResourceId = resource.Id,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.ResourceDelete,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
pictureDelete(resource.ImagePath); pictureDelete(resource.ImagePath);
} }

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using ResoursesManager.Models;
namespace ResoursesManager.Controllers
{
public class StatisticsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Statistics
public ActionResult Index()
{
return View(db.Statistic.ToList());
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
}

View File

@ -32,6 +32,13 @@ namespace ResoursesManager.Controllers
var user = db.Users.Find(User.Identity.GetUserId()); var user = db.Users.Find(User.Identity.GetUserId());
db.Resources.Find(resourceId).Users.Add(user); db.Resources.Find(resourceId).Users.Add(user);
db.Statistic.Add(new StatisticModel()
{
ResourceId = (int)resourceId,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Subscribe,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
} }
catch (Exception e) catch (Exception e)
@ -52,6 +59,12 @@ namespace ResoursesManager.Controllers
{ {
item.Users.Remove(user); item.Users.Remove(user);
} }
db.Statistic.Add(new StatisticModel()
{
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.SubscribeAll,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
} }
catch (Exception e) catch (Exception e)
@ -71,6 +84,12 @@ namespace ResoursesManager.Controllers
{ {
item.Users.Add(user); item.Users.Add(user);
} }
db.Statistic.Add(new StatisticModel()
{
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.UnsubscirbeAll,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
} }
catch (Exception e) catch (Exception e)
@ -92,6 +111,13 @@ namespace ResoursesManager.Controllers
} }
var user = db.Users.Find(User.Identity.GetUserId()); var user = db.Users.Find(User.Identity.GetUserId());
db.Resources.Find(resourceId).Users.Remove(user); db.Resources.Find(resourceId).Users.Remove(user);
db.Statistic.Add(new StatisticModel()
{
ResourceId = (int)resourceId,
UserId = User.Identity.GetUserId(),
StatisticType = StatisticType.Unsubscirbe,
DateTime = DateTime.Now
});
db.SaveChanges(); db.SaveChanges();
} }
catch (Exception e) catch (Exception e)

View File

@ -59,13 +59,14 @@ namespace ResoursesManager.Helpers
db.Notifications.Add(notify); db.Notifications.Add(notify);
} }
db.SaveChanges(); db.SaveChanges();
//todo: null exeptionre fut
var id = db.Notifications.OrderByDescending(k => k.CreateDate).FirstOrDefault(k => k.User == HttpContext.Current.User.Identity.Name).Id;
GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>().Clients.Users(users).send(title, message, img, url, id);
} }
catch (Exception e) catch (Exception e)
{ {
logger.Error("Save notification message", e); logger.Error("Save notification message", e);
} }
var id = db.Notifications.OrderByDescending(k => k.CreateDate).FirstOrDefault(k => k.User == HttpContext.Current.User.Identity.Name).Id;
GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>().Clients.Users(users).send(title, message, img, url, id);
} }
} }
} }

View File

@ -38,6 +38,7 @@ namespace ResoursesManager.Models
public DbSet<Reservation> Reservations { get; set; } public DbSet<Reservation> Reservations { get; set; }
public DbSet<Resource> Resources { get; set; } public DbSet<Resource> Resources { get; set; }
public DbSet<Notification> Notifications { get; set; } public DbSet<Notification> Notifications { get; set; }
public DbSet<StatisticModel> Statistic { get; set; }
public static ApplicationDbContext Create() public static ApplicationDbContext Create()
{ {
@ -60,12 +61,32 @@ namespace ResoursesManager.Models
} }
} }
public class MyDbInitializer : CreateDatabaseIfNotExists<ApplicationDbContext>
public class MyDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{ {
protected override void Seed(ApplicationDbContext context) protected override void Seed(ApplicationDbContext context)
{ {
List<Resource> defaults = new List<Resource>();
defaults.Add(new Resource() { Name = "Kihangosító", AssetTag = "ASDF654", Description = "A kedvenc kihangosítónk.", TimeLimit = 1, ImagePath = "~/App_Data/ResourceImages/bluetooth.jpg" });
defaults.Add(new Resource() { Name = "Laptop", AssetTag = "GFDS5412", Description = "Ez egy szép piros laptop", TimeLimit = 24, ImagePath= "~/App_Data/ResourceImages/laptop.jpg" });
defaults.Add(new Resource() { Name = "Piros Telefon", AssetTag = "ASDHGD5423", Description = "Ez a vészhívó telefon", ImagePath = "~/App_Data/ResourceImages/phone.jpg" });
defaults.Add(new Resource() { Name = "Projektor", AssetTag = "BD435", Description = "A fekete projektor", TimeLimit = 4, ImagePath = "~/App_Data/ResourceImages/projector.jpg" });
defaults.Add(new Resource() { Name = "Tárgyaló", AssetTag = "BDFS4353", Description = "A céges tárgyaló", TimeLimit = 12, ImagePath = "~/App_Data/ResourceImages/mt.jpg" });
defaults.Add(new Resource() { Name = "Asus Laptop", AssetTag = "FSDAFAS423", Description = "Ez egy szép zöld laptop", TimeLimit = 72, ImagePath = "~/App_Data/ResourceImages/laptop.jpg" });
defaults.Add(new Resource() { Name = "Lenovo Mobil", AssetTag = "FAS324", Description = "Ez egy mobil", ImagePath = "~/App_Data/ResourceImages/mobile.jpg" });
defaults.Add(new Resource() { Name = "Benq Projektor", AssetTag = "BD434355", Description = "A szürke projektor", ImagePath = "~/App_Data/ResourceImages/projector.jpg" });
defaults.Add(new Resource() { Name = "Dell Laptop", AssetTag = "HFG435", Description = "Ez egy szép laptop", ImagePath = "~/App_Data/ResourceImages/laptop.jpg" });
defaults.Add(new Resource() { Name = "IPhone", AssetTag = "GDSG3453", Description = "Ez egy iPhone", ImagePath = "~/App_Data/ResourceImages/mobile.jpg" });
defaults.Add(new Resource() { Name = "Epson Projektor", AssetTag = "BFR435", Description = "Az Epson projektor", TimeLimit = 8, ImagePath = "~/App_Data/ResourceImages/projector.jpg" });
defaults.Add(new Resource() { Name = "Egyéb", AssetTag = "HFG345", Description = "Ez valami egyéb gyári képpel.", ImagePath = "~/App_Data/ResourceImages/DefaultResource.png" });
foreach (var item in defaults)
{
context.Resources.Add(item);
}
base.Seed(context);
} }
} }
} }

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ResoursesManager.Models
{
public enum StatisticType
{
ResourceCreate, ResourceModified, ResourceDelete, Reserv, ReservartionModified, ReservationDelete, Subscribe, Unsubscirbe, SubscribeAll, UnsubscirbeAll, Register, Login, Logout
}
public class StatisticModel
{
public int Id { get; set; }
public string UserId { get; set; }
public int ResourceId { get; set; }
public int ReservationId { get; set; }
public StatisticType StatisticType { get; set; }
public DateTime DateTime { get; set; }
}
}

View File

@ -215,6 +215,7 @@
<Compile Include="Controllers\NotificationsController.cs" /> <Compile Include="Controllers\NotificationsController.cs" />
<Compile Include="Controllers\ReservationsController.cs" /> <Compile Include="Controllers\ReservationsController.cs" />
<Compile Include="Controllers\ResourcesController.cs" /> <Compile Include="Controllers\ResourcesController.cs" />
<Compile Include="Controllers\StatisticsController.cs" />
<Compile Include="Controllers\SubscribeController.cs" /> <Compile Include="Controllers\SubscribeController.cs" />
<Compile Include="Global.asax.cs"> <Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon> <DependentUpon>Global.asax</DependentUpon>
@ -228,13 +229,20 @@
<Compile Include="Models\ReservationViewModel.cs" /> <Compile Include="Models\ReservationViewModel.cs" />
<Compile Include="Models\Reservation.cs" /> <Compile Include="Models\Reservation.cs" />
<Compile Include="Models\Resource.cs" /> <Compile Include="Models\Resource.cs" />
<Compile Include="Models\StatisticModel.cs" />
<Compile Include="NotificationsHub.cs" /> <Compile Include="NotificationsHub.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Startup.cs" /> <Compile Include="Startup.cs" />
<Compile Include="ViewModels\ImageViewModel.cs" /> <Compile Include="ViewModels\ImageViewModel.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="App_Data\ResourceImages\bluetooth.jpg" />
<Content Include="App_Data\ResourceImages\DefaultResource.png" /> <Content Include="App_Data\ResourceImages\DefaultResource.png" />
<Content Include="App_Data\ResourceImages\laptop.jpg" />
<Content Include="App_Data\ResourceImages\mobile.jpg" />
<Content Include="App_Data\ResourceImages\mt.jpg" />
<Content Include="App_Data\ResourceImages\phone.jpg" />
<Content Include="App_Data\ResourceImages\projector.jpg" />
<Content Include="Content\bootstrap-datetimepicker.css" /> <Content Include="Content\bootstrap-datetimepicker.css" />
<Content Include="Content\bootstrap-datetimepicker.min.css" /> <Content Include="Content\bootstrap-datetimepicker.min.css" />
<Content Include="Content\bootstrap-theme.css" /> <Content Include="Content\bootstrap-theme.css" />
@ -251,6 +259,8 @@
<Content Include="Content\_bootstrap-datetimepicker.less" /> <Content Include="Content\_bootstrap-datetimepicker.less" />
<Content Include="Content\bootstrap-datetimepicker-build.less" /> <Content Include="Content\bootstrap-datetimepicker-build.less" />
<None Include="Scripts\jquery-3.1.1.intellisense.js" /> <None Include="Scripts\jquery-3.1.1.intellisense.js" />
<Content Include="Scripts\dateformat.js" />
<Content Include="Scripts\dateformat.min.js" />
<Content Include="Scripts\jquery-3.1.1.js" /> <Content Include="Scripts\jquery-3.1.1.js" />
<Content Include="Scripts\jquery-3.1.1.min.js" /> <Content Include="Scripts\jquery-3.1.1.min.js" />
<Content Include="Scripts\jquery-3.1.1.slim.js" /> <Content Include="Scripts\jquery-3.1.1.slim.js" />
@ -345,6 +355,7 @@
<Content Include="Views\Reservations\ViewChange.cshtml" /> <Content Include="Views\Reservations\ViewChange.cshtml" />
<Content Include="Scripts\jquery-3.1.1.slim.min.map" /> <Content Include="Scripts\jquery-3.1.1.slim.min.map" />
<Content Include="Scripts\jquery-3.1.1.min.map" /> <Content Include="Scripts\jquery-3.1.1.min.map" />
<Content Include="Views\Statistics\Index.cshtml" />
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<ItemGroup> <ItemGroup>

View File

@ -0,0 +1,130 @@
/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*/
var dateFormat = function ()
{
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (val, len)
{
val = String(val);
len = len || 2;
while (val.length < len) val = "0" + val;
return val;
};
// Regexes and supporting functions are cached through closure
return function (date, mask, utc)
{
var dF = dateFormat;
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
mask = date;
date = undefined;
}
// Passing date through Date applies Date.parse, if necessary
date = date ? new Date(date) : new Date;
if (isNaN(date)) throw SyntaxError("invalid date");
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
// Allow setting the utc argument via the mask
if (mask.slice(0, 4) == "UTC:") {
mask = mask.slice(4);
utc = true;
}
var _ = utc ? "getUTC" : "get",
d = date[_ + "Date"](),
D = date[_ + "Day"](),
m = date[_ + "Month"](),
y = date[_ + "FullYear"](),
H = date[_ + "Hours"](),
M = date[_ + "Minutes"](),
s = date[_ + "Seconds"](),
L = date[_ + "Milliseconds"](),
o = utc ? 0 : date.getTimezoneOffset(),
flags = {
d: d,
dd: pad(d),
ddd: dF.i18n.dayNames[D],
dddd: dF.i18n.dayNames[D + 7],
m: m + 1,
mm: pad(m + 1),
mmm: dF.i18n.monthNames[m],
mmmm: dF.i18n.monthNames[m + 12],
yy: String(y).slice(2),
yyyy: y,
h: H % 12 || 12,
hh: pad(H % 12 || 12),
H: H,
HH: pad(H),
M: M,
MM: pad(M),
s: s,
ss: pad(s),
l: pad(L, 3),
L: pad(L > 99 ? Math.round(L / 10) : L),
t: H < 12 ? "a" : "p",
tt: H < 12 ? "am" : "pm",
T: H < 12 ? "A" : "P",
TT: H < 12 ? "AM" : "PM",
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
};
return mask.replace(token, function ($0)
{
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
} ();
// Some common format strings
dateFormat.masks = {
"default": "ddd mmm dd yyyy HH:MM:ss",
shortDate: "m/d/yy",
mediumDate: "mmm d, yyyy",
longDate: "mmmm d, yyyy",
fullDate: "dddd, mmmm d, yyyy",
shortTime: "h:MM TT",
mediumTime: "h:MM:ss TT",
longTime: "h:MM:ss TT Z",
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
// Internationalization strings
dateFormat.i18n = {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};
// For convenience...
Date.prototype.format = function (mask, utc)
{
return dateFormat(this, mask, utc);
}

View File

@ -0,0 +1 @@
var dateFormat=function(){var t=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,r=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,i=/[^-+\dA-Z]/g,n=function(n,t){n=String(n),t=t||2;while(n.length<t)n="0"+n;return n};return function(u,f,e){var h=dateFormat;arguments.length!=1||Object.prototype.toString.call(u)!="[object String]"||/\d/.test(u)||(f=u,u=undefined),u=u?new Date(u):new Date;if(isNaN(u))throw SyntaxError("invalid date");f=String(h.masks[f]||f||h.masks["default"]),f.slice(0,4)=="UTC:"&&(f=f.slice(4),e=!0);var o=e?"getUTC":"get",c=u[o+"Date"](),y=u[o+"Day"](),a=u[o+"Month"](),w=u[o+"FullYear"](),s=u[o+"Hours"](),b=u[o+"Minutes"](),k=u[o+"Seconds"](),l=u[o+"Milliseconds"](),v=e?0:u.getTimezoneOffset(),p={d:c,dd:n(c),ddd:h.i18n.dayNames[y],dddd:h.i18n.dayNames[y+7],m:a+1,mm:n(a+1),mmm:h.i18n.monthNames[a],mmmm:h.i18n.monthNames[a+12],yy:String(w).slice(2),yyyy:w,h:s%12||12,hh:n(s%12||12),H:s,HH:n(s),M:b,MM:n(b),s:k,ss:n(k),l:n(l,3),L:n(l>99?Math.round(l/10):l),t:s<12?"a":"p",tt:s<12?"am":"pm",T:s<12?"A":"P",TT:s<12?"AM":"PM",Z:e?"UTC":(String(u).match(r)||[""]).pop().replace(i,""),o:(v>0?"-":"+")+n(Math.floor(Math.abs(v)/60)*100+Math.abs(v)%60,4),S:["th","st","nd","rd"][c%10>3?0:(c%100-c%10!=10)*c%10]};return f.replace(t,function(n){return n in p?p[n]:n.slice(1,n.length-1)})}}();dateFormat.masks={"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"},dateFormat.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]},Date.prototype.format=function(n,t){return dateFormat(this,n,t)}

View File

@ -42,7 +42,7 @@
<div class="form-group"> <div class="form-group">
*@Html.LabelFor(model => model.Reservation.Begining, htmlAttributes: new { @class = "control-label col-md-2" }) *@Html.LabelFor(model => model.Reservation.Begining, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10 "> <div class="col-md-10 ">
<input type="datetime" name="Begining" value="@Model.Reservation.Begining.ToString("yyyy.MM.dd HH:mm")" class="form-control date-time-picker" /> <input type="datetime" name="Begining" value="@Model.Reservation.Begining.ToString("yyyy.MM.dd HH:mm")" class="form-control date-time-picker" id="begining"/>
@Html.ValidationMessageFor(model => model.Reservation.Begining, "", new { @class = "text-danger" }) @Html.ValidationMessageFor(model => model.Reservation.Begining, "", new { @class = "text-danger" })
</div> </div>
</div> </div>
@ -50,7 +50,7 @@
<div class="form-group"> <div class="form-group">
*@Html.LabelFor(model => model.Reservation.End, htmlAttributes: new { @class = "control-label col-md-2" }) *@Html.LabelFor(model => model.Reservation.End, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10 "> <div class="col-md-10 ">
<input type="datetime" name="End" value="@Model.Reservation.End.ToString("yyyy.MM.dd HH:mm")" class="form-control date-time-picker" /> <input type="datetime" name="End" value="@Model.Reservation.End.ToString("yyyy.MM.dd HH:mm")" class="form-control date-time-picker" id="end"/>
@Html.ValidationMessageFor(model => model.Reservation.End, "", new { @class = "text-danger" }) @Html.ValidationMessageFor(model => model.Reservation.End, "", new { @class = "text-danger" })
</div> </div>
</div> </div>
@ -69,12 +69,19 @@
</div> </div>
@section Scripts{ @section Scripts{
<script type="text/javascript"> <script type="text/javascript">
$(function () { $(function () {
$('.date-time-picker').datetimepicker({ $('#begining').focusout(function () {
sideBySide: true, var begining = $('#begining').val();
useCurrent: false, var date = new Date(begining);
locale: 'hu-HU' var newDate = new Date(date);
}) newDate.setHours(date.getHours() + 1);
$('#end').val(dateFormat(newDate, "yyyy.mm.dd. HH:MM"));
});
$('.date-time-picker').datetimepicker({
sideBySide: true,
useCurrent: false,
locale: 'hu-HU'
});
}); });
</script> </script>
} }

View File

@ -34,7 +34,7 @@
if (item.Begining.Hour == i.Hour) if (item.Begining.Hour == i.Hour)
{ {
<a href="@Url.Action("Details", new { id = item.Id })" class="resource-link"> <a href="@Url.Action("Details", new { id = item.Id })" class="resource-link">
<span>@item.Begining.ToString("hh:mm") - @item.End.ToString("hh:mm") @item.Resource.Name @item.Resource.AssetTag </span><br /> <span>@item.Begining.ToString("HH:mm") - @item.End.ToString("HH:mm") @item.Resource.Name @item.Resource.AssetTag </span><br />
</a> </a>
} }
} }

View File

@ -54,7 +54,7 @@
if (item.Begining.Month == i.Month && item.Begining.Day == i.Day) if (item.Begining.Month == i.Month && item.Begining.Day == i.Day)
{ {
<a href="@Url.Action("Details","Reservations", new { id = item.Id })"> <a href="@Url.Action("Details","Reservations", new { id = item.Id })">
<span><small class="time">@item.Begining.ToString("hh")-@item.Begining.ToString("hh")ó</small> @item.Resource.Name</span> <span><small class="time">@item.Begining.ToString("HH")-@item.End.ToString("HH")ó</small> @item.Resource.Name</span>
</a><br /> </a><br />
j++; j++;
} }

View File

@ -47,7 +47,7 @@
if (item.Begining.Day == j.Day && item.Begining.Hour == j.Hour) if (item.Begining.Day == j.Day && item.Begining.Hour == j.Hour)
{ {
<a href="@Url.Action("Details", new { id = item.Id })" class="resource-link"> <a href="@Url.Action("Details", new { id = item.Id })" class="resource-link">
<span><small class="time">@item.Begining.ToString("hh")-@item.Begining.ToString("hh")ó</small> @item.Resource.Name</span> <span><small class="time">@item.Begining.ToString("HH")-@item.End.ToString("HH")ó</small> @item.Resource.Name</span>
</a> </a>
<br /> <br />
} }

View File

@ -24,6 +24,10 @@
<li>@Html.ActionLink("Erőforrások", "Index", "Resources")</li> <li>@Html.ActionLink("Erőforrások", "Index", "Resources")</li>
<li>@Html.ActionLink("Felíratkozás", "Index", "Subscribe")</li> <li>@Html.ActionLink("Felíratkozás", "Index", "Subscribe")</li>
<li>@Html.ActionLink("Naptár", "Index", "Reservations")</li> <li>@Html.ActionLink("Naptár", "Index", "Reservations")</li>
@if (Context.User.IsInRole("Admin"))
{
<li>@Html.ActionLink("Statisztika", "Index", "Statistics")</li>
}
</ul> </ul>
@Html.Partial("_LoginPartial") @Html.Partial("_LoginPartial")
</div> </div>
@ -72,6 +76,7 @@
<script type="text/javascript" src="~/Scripts/bootstrap-datetimepicker.min.js"></script> <script type="text/javascript" src="~/Scripts/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="~/Scripts/notifications.js"></script> <script type="text/javascript" src="~/Scripts/notifications.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.signalR-2.2.1.min.js"></script> <script type="text/javascript" src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
<script type="text/javascript" src="~/Scripts/dateformat.min.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script> <script type="text/javascript" src="~/signalr/hubs"></script>
<script src="~/Scripts/SignalR.js"></script> <script src="~/Scripts/SignalR.js"></script>
<script charset="UTF-8"> <script charset="UTF-8">

View File

@ -0,0 +1,57 @@
@model IEnumerable<ResoursesManager.Models.StatisticModel>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserId)
</th>
<th>
@Html.DisplayNameFor(model => model.ResourceId)
</th>
<th>
@Html.DisplayNameFor(model => model.ReservationId)
</th>
<th>
@Html.DisplayNameFor(model => model.StatisticType)
</th>
<th>
@Html.DisplayNameFor(model => model.DateTime)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@Html.DisplayFor(modelItem => item.ResourceId)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReservationId)
</td>
<td>
@Html.DisplayFor(modelItem => item.StatisticType)
</td>
<td>
@Html.DisplayFor(modelItem => item.DateTime)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>

View File

@ -680,3 +680,95 @@ INFO 2017-04-10 15:55:33,924 12560606ms ReservationsController Create
INFO 2017-04-10 16:30:16,018 14642700ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 15/04/2017 13:00:00, befejezõIdõpont: 15/04/2017 14:00:00 INFO 2017-04-10 16:30:16,018 14642700ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 15/04/2017 13:00:00, befejezõIdõpont: 15/04/2017 14:00:00
INFO 2017-04-10 16:30:31,779 14658461ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 10/04/2017 17:30:00, befejezõIdõpont: 10/04/2017 18:30:00 INFO 2017-04-10 16:30:31,779 14658461ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 10/04/2017 17:30:00, befejezõIdõpont: 10/04/2017 18:30:00
INFO 2017-04-29 13:55:27,444 177511ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 30/04/2017 11:00:00, befejezõIdõpont: 30/04/2017 12:00:00 INFO 2017-04-29 13:55:27,444 177511ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 30/04/2017 11:00:00, befejezõIdõpont: 30/04/2017 12:00:00
INFO 2017-09-27 10:10:11,427 53632ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 28/09/2017 10:09:00, befejezõIdõpont: 28/09/2017 11:09:00
INFO 2017-09-27 10:10:45,591 87796ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 06/10/2017 10:00:00, befejezõIdõpont: 06/10/2017 11:00:00
INFO 2017-10-26 17:47:28,211 39607ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 30/10/2017 08:00:00, befejezõIdõpont: 30/10/2017 11:00:00
INFO 2017-10-26 19:03:53,900 144101ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 27/10/2017 20:03:00, befejezõIdõpont: 27/10/2017 21:03:00
INFO 2017-10-26 19:04:07,730 157930ms ReservationsController Edit - Új foglalás: , user: admin@admin.hu, kezdõIdõpont: 27/10/2017 20:02:00, befejezõIdõpont: 27/10/2017 21:03:00
INFO 2017-10-26 19:04:27,231 177432ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 30/10/2017 19:04:00, befejezõIdõpont: 30/10/2017 21:04:00
INFO 2017-10-26 19:04:30,498 180699ms ReservationsController DeleteConfirmed - Foglalás törölve id: 2
INFO 2017-10-26 19:09:21,641 471842ms ReservationsController Create - Új Foglalás: , user: bela@bela.hu, kezdõIdõpont: 01/11/2017 19:09:00, befejezõIdõpont: 01/11/2017 20:09:00
ERROR 2017-10-26 19:09:21,725 471926ms ReservationsController Create -
System.NullReferenceException: Object reference not set to an instance of an object.
at ResoursesManager.Helpers.NotificationHelper.Send(List`1 users, String title, String message, String img, String url) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Helpers\NotificationHelper.cs:line 67
at ResoursesManager.Controllers.ReservationsController.Create(Reservation model) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ReservationsController.cs:line 229
INFO 2017-10-26 19:12:09,099 639299ms ReservationsController Create - Új Foglalás: , user: bela@bela.hu, kezdõIdõpont: 04/11/2017 19:12:00, befejezõIdõpont: 04/11/2017 20:12:00
ERROR 2017-10-26 19:12:19,370 649571ms ReservationsController Create -
System.NullReferenceException: Object reference not set to an instance of an object.
at ResoursesManager.Helpers.NotificationHelper.Send(List`1 users, String title, String message, String img, String url) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Helpers\NotificationHelper.cs:line 67
at ResoursesManager.Controllers.ReservationsController.Create(Reservation model) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ReservationsController.cs:line 229
INFO 2017-10-26 19:12:35,888 666089ms ReservationsController Create - Új Foglalás: , user: bela@bela.hu, kezdõIdõpont: 05/11/2017 19:12:00, befejezõIdõpont: 05/11/2017 20:12:00
INFO 2017-10-26 19:19:10,594 243137ms ReservationsController Create - Új Foglalás: , user: bela@bela.hu, kezdõIdõpont: 31/10/2017 19:18:00, befejezõIdõpont: 31/10/2017 20:18:00
ERROR 2017-10-26 19:21:56,442 408985ms NotificationHelper Send - Save notification message
System.NullReferenceException: Object reference not set to an instance of an object.
at ResoursesManager.Helpers.NotificationHelper.Send(List`1 users, String title, String message, String img, String url) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Helpers\NotificationHelper.cs:line 62
ERROR 2017-10-26 19:53:21,613 2390ms ReservationsController Create -
System.InvalidOperationException: Nullable object must have a value.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Nullable`1.get_Value()
at ResoursesManager.Controllers.ReservationsController.Create(Nullable`1 resourceId, Nullable`1 time) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ReservationsController.cs:line 154
ERROR 2017-10-26 20:21:26,603 2291ms ReservationsController Create -
System.InvalidOperationException: Nullable object must have a value.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Nullable`1.get_Value()
at ResoursesManager.Controllers.ReservationsController.Create(Nullable`1 resourceId, Nullable`1 time) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ReservationsController.cs:line 154
INFO 2017-10-26 20:25:33,151 248839ms ReservationsController Create - Új Foglalás: , user: admin@admin.hu, kezdõIdõpont: 02/11/2017 20:00:00, befejezõIdõpont: 02/11/2017 21:00:00
ERROR 2017-10-26 20:30:24,684 12727ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
ERROR 2017-10-26 20:30:32,137 20180ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
ERROR 2017-10-26 20:35:02,892 6172ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
ERROR 2017-10-26 20:35:24,463 27742ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
INFO 2017-10-26 20:35:28,952 32231ms ResourcesController Edit - ImageSaved: C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\App_Data\ResourceImages\swa5he02.jpeg
INFO 2017-10-26 20:35:28,954 32233ms ResourcesController Edit - PictureDeleted:
ERROR 2017-10-26 20:35:29,125 32404ms NotificationHelper Send - Save notification message
System.NullReferenceException: Object reference not set to an instance of an object.
at ResoursesManager.Helpers.NotificationHelper.Send(List`1 users, String title, String message, String img, String url) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Helpers\NotificationHelper.cs:line 63
ERROR 2017-10-26 20:35:29,359 32638ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
ERROR 2017-10-26 20:35:32,403 35683ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32
INFO 2017-10-26 20:35:36,975 40255ms ResourcesController Edit - ImageSaved: C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\App_Data\ResourceImages\wbgbaxil.jpeg
INFO 2017-10-26 20:35:36,976 40256ms ResourcesController Edit - PictureDeleted:
ERROR 2017-10-26 20:35:37,081 40361ms NotificationHelper Send - Save notification message
System.NullReferenceException: Object reference not set to an instance of an object.
at ResoursesManager.Helpers.NotificationHelper.Send(List`1 users, String title, String message, String img, String url) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Helpers\NotificationHelper.cs:line 63
ERROR 2017-10-26 20:35:37,362 40641ms ResourcesController GetImage -
System.ArgumentException: Value cannot be null or empty.
Parameter name: fileName
at System.Web.Mvc.FilePathResult..ctor(String fileName, String contentType)
at System.Web.Mvc.Controller.File(String fileName, String contentType, String fileDownloadName)
at System.Web.Mvc.Controller.File(String fileName, String contentType)
at ResoursesManager.Controllers.ResourcesController.GetImage(String path) in C:\Users\blaketillman159\Source\Repos\thesis\ResoursesManager\ResoursesManager\Controllers\ResourcesController.cs:line 32

View File

@ -6,6 +6,7 @@
<package id="Bootstrap.v3.Datetimepicker" version="4.17.45" targetFramework="net452" /> <package id="Bootstrap.v3.Datetimepicker" version="4.17.45" targetFramework="net452" />
<package id="Bootstrap.v3.Datetimepicker.CSS" version="4.17.45" targetFramework="net452" /> <package id="Bootstrap.v3.Datetimepicker.CSS" version="4.17.45" targetFramework="net452" />
<package id="cldrjs" version="0.4.1" targetFramework="net452" /> <package id="cldrjs" version="0.4.1" targetFramework="net452" />
<package id="dateformat.js" version="1.2.3" targetFramework="net452" />
<package id="EntityFramework" version="6.1.3" targetFramework="net452" /> <package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="jQuery" version="3.1.1" targetFramework="net452" /> <package id="jQuery" version="3.1.1" targetFramework="net452" />
<package id="jQuery.Validation" version="1.16.0" targetFramework="net452" /> <package id="jQuery.Validation" version="1.16.0" targetFramework="net452" />