Skip to content

Commit a406ea0

Browse files
committed
Date fixes
1 parent 62e0b65 commit a406ea0

File tree

8 files changed

+63
-61
lines changed

8 files changed

+63
-61
lines changed

.vs/config/applicationhost.config

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,20 @@
163163
</site>
164164
<site name="Mvc.JQuery.Datatables.Example" id="2">
165165
<application path="/" applicationPool="Clr4IntegratedAppPool">
166-
<virtualDirectory path="/" physicalPath="C:\Users\Harry\Dropbox\stuff\Mvc.JQuery.DataTables2\Mvc.JQuery.DataTables.Example" />
166+
<virtualDirectory path="/" physicalPath="C:\Users\Harry\Dropbox\stuff\Mvc.JQuery.DataTables\Mvc.JQuery.DataTables.Example" />
167167
</application>
168168
<bindings>
169169
<binding protocol="http" bindingInformation="*:53281:localhost" />
170170
</bindings>
171171
</site>
172+
<site name="Mvc.JQuery.DataTables.Example(1)" id="3">
173+
<application path="/" applicationPool="Clr4IntegratedAppPool">
174+
<virtualDirectory path="/" physicalPath="C:\Users\Harry\Dropbox\stuff\Mvc.JQuery.DataTables\Mvc.JQuery.DataTables.Example" />
175+
</application>
176+
<bindings>
177+
<binding protocol="http" bindingInformation="*:53282:localhost" />
178+
</bindings>
179+
</site>
172180
<siteDefaults>
173181
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
174182
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />

Mvc.JQuery.Datatables.Core/Processing/TypeFilters.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,18 @@ public static string DateTimeOffsetFilter(string query, string columnname, DataT
127127
DateTimeOffset dateTime;
128128
if (DateTimeOffset.TryParse(query, out dateTime))
129129
{
130-
dateTime = dateTime.ToUniversalTime();
131130
if (dateTime.Date == dateTime)
132131
{
132+
dateTime = dateTime.ToUniversalTime();
133+
133134
parametersForLinqQuery.Add(dateTime);
134135
parametersForLinqQuery.Add(dateTime.AddDays(1));
135136
filterString = string.Format("{0} >= @{1} and {0} < @{2}", columnname, parametersForLinqQuery.Count - 2, parametersForLinqQuery.Count - 1);
136137
}
137138
else
138139
{
140+
dateTime = dateTime.ToUniversalTime();
141+
139142
filterString = string.Format("{0} == @" + parametersForLinqQuery.Count, columnname);
140143
parametersForLinqQuery.Add(dateTime);
141144
}
@@ -174,15 +177,16 @@ public static string DateTimeFilter(string query, string columnname, DataTablesP
174177
DateTime dateTime;
175178
if (DateTime.TryParse(query, out dateTime))
176179
{
177-
dateTime = dateTime.ToUniversalTime();
178180
if (dateTime.Date == dateTime)
179181
{
182+
dateTime = dateTime.ToUniversalTime();
180183
parametersForLinqQuery.Add(dateTime);
181184
parametersForLinqQuery.Add(dateTime.AddDays(1));
182-
filterString = string.Format("{0} >= @{1} and {0} < @{2}", columnname, parametersForLinqQuery.Count - 2, parametersForLinqQuery.Count - 1);
185+
filterString = string.Format("({0} >= @{1} and {0} < @{2})", columnname, parametersForLinqQuery.Count - 2, parametersForLinqQuery.Count - 1);
183186
}
184187
else
185188
{
189+
dateTime = dateTime.ToUniversalTime();
186190
filterString = string.Format("{0} == @" + parametersForLinqQuery.Count, columnname);
187191
parametersForLinqQuery.Add(dateTime);
188192
}

Mvc.JQuery.Datatables.Example/Controllers/FakeDatabase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ static FakeDatabase()
2222
Position = positions[i%positions.Count],
2323
IsAdmin = i%11 == 0,
2424
Number = (Numbers) r.Next(4),
25-
Hired = i % 8 == 0 ? null as DateTime? : DateTime.UtcNow.AddDays(-1*365*3* r.NextDouble()),
25+
Hired = i % 8 == 0 ? null as DateTime? : DateTime.UtcNow.AddDays(-1*365*3* r.NextDouble()).AddHours(9).AddHours(r.Next(9)),
2626
Salary =
2727
10000 + (DateTime.UtcNow.Minute*1000) +
2828
(DateTime.UtcNow.Second*100) +

Mvc.JQuery.Datatables.Example/Controllers/HomeController.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public ActionResult JSUnitTests()
2121
return View();
2222
}
2323

24-
public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
24+
public DataTablesResult<UserTableRowViewModel> GetUsers(DataTablesParam dataTableParam)
2525
{
26-
return DataTablesResult.Create(FakeDatabase.Users.Select(user => new UserView()
26+
return DataTablesResult.Create(FakeDatabase.Users.Select(user => new UserTableRowViewModel()
2727
{
2828
Id = user.Id,
2929
Name = user.Name,
@@ -35,11 +35,11 @@ public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
3535
Salary = user.Salary,
3636
Thumb = "https://randomuser.me/api/portraits/thumb/men/" + user.Id + ".jpg"
3737
}), dataTableParam,
38-
uv => new
38+
rowViewModel => new
3939
{
40-
Name = "<b>" + uv.Name + "</b>",
41-
Hired = uv.Hired == null ? "&lt;pending&gt;" : uv.Hired.Value.ToShortDateString() + " (" + FriendlyDateHelper.GetPrettyDate(uv.Hired.Value) + ") ",
42-
Thumb = "<img src='" + uv.Thumb + "' />"
40+
Name = "<b>" + rowViewModel.Name + "</b>",
41+
Hired = rowViewModel.Hired == null ? "&lt;pending&gt;" : rowViewModel.Hired.Value.ToShortDateString() + " " + rowViewModel.Hired.Value.ToShortTimeString() + " (" + FriendlyDateHelper.GetPrettyDate(rowViewModel.Hired.Value) + ") ",
42+
Thumb = "<img src='" + rowViewModel.Thumb + "' />"
4343
});
4444
}
4545

@@ -56,7 +56,7 @@ public DataTablesResult<UserView> GetUsers(DataTablesParam dataTableParam)
5656

5757

5858

59-
public class UserView
59+
public class UserTableRowViewModel
6060
{
6161

6262
[DataTables(DisplayName = "Name", DisplayNameResourceType = typeof(UserViewResource), MRenderFunction = "encloseInEmTag")]

Mvc.JQuery.Datatables.Example/Mvc.JQuery.Datatables.Example.csproj

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<AssemblyName>Mvc.JQuery.DataTables.Example</AssemblyName>
1616
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
1717
<MvcBuildViews>false</MvcBuildViews>
18-
<UseIISExpress>false</UseIISExpress>
18+
<UseIISExpress>true</UseIISExpress>
1919
<FileUpgradeFlags>
2020
</FileUpgradeFlags>
2121
<UpgradeBackupLocation>
@@ -697,12 +697,11 @@
697697
<VisualStudio>
698698
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
699699
<WebProjectProperties>
700-
<UseIIS>False</UseIIS>
700+
<UseIIS>True</UseIIS>
701701
<AutoAssignPort>True</AutoAssignPort>
702702
<DevelopmentServerPort>53281</DevelopmentServerPort>
703703
<DevelopmentServerVPath>/</DevelopmentServerVPath>
704-
<IISUrl>
705-
</IISUrl>
704+
<IISUrl>http://localhost:53282/</IISUrl>
706705
<NTLMAuthentication>False</NTLMAuthentication>
707706
<UseCustomServer>False</UseCustomServer>
708707
<CustomServerUrl>

Mvc.JQuery.Datatables.Example/Views/Home/Index.cshtml

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,52 @@
1010
Nuget install-package Mvc.JQuery.DataTables
1111

1212
Nuget install-package <a href="https://github.com/mcintyre321/EmbeddedResourceVirtualPathProvider">EmbeddedResourceVirtualPathProvider</a> <i>or</i> Nuget install-package Mvc.JQuery.DataTables.Templates
13-
1413
</pre>
1514
<p>
16-
Create a controller (see <a style="color: dodgerblue;" href="https://github.com/mcintyre321/mvc.jquery.datatables/blob/master/Mvc.JQuery.DataTables.Example/Controllers/HomeController.cs">example</a>)
15+
Create a controller (see <a style="color: dodgerblue;" href="https://github.com/mcintyre321/mvc.jquery.datatables/tree/master/Mvc.JQuery.DataTables.Example/Controllers/HomeController.cs">example</a>)
1716
</p>
1817
<pre class="highlight">
1918
public class SomeController : Controller
2019
{
2120
...
22-
public DataTablesResult&lt;UserView> GetUsers(DataTablesParam dataTableParam)
21+
public DataTablesResult&lt;UserTableRowViewModel> GetUsers(DataTablesParam dataTableParam)
2322
{
2423
IQueryable&lt;User> users = ... //take a queryable from your database...
25-
var userViews = users.Select(u => new UserView(u)); //...transform it into a view object ...
24+
var userViews = users.Select(u => new UserTableRowViewModel(u)); //...transform it into a view object ...
2625
return DataTablesResult.Create(userViews, dataTableParam) //...and return a DataTablesResult
2726
}
27+
28+
2829
}
2930
</pre>
3031

3132
<p>
32-
and render the partial (see <a href="https://github.com/mcintyre321/mvc.jquery.datatables/blob/master/Mvc.JQuery.DataTables.Example/Views/Home/Index.cshtml">example</a>)
33+
and render the partial (see <a href="https://github.com/mcintyre321/mvc.jquery.datatables/tree/master/Mvc.JQuery.DataTables.Example/Views/Home/Index.cshtml">example</a>)
3334

3435
<pre class="highlight">
35-
//include these scripts
36-
&lt;link type="text/css" href="@@Url.Content("~/Content/DataTables-1.8.2/media/css/demo_table.css")" rel="stylesheet"/>
37-
&lt;script src="@@Url.Content("~/Scripts/DataTables-1.8.2/media/js/jquery.dataTables.js")" type="text/javascript">&lt;/script>
38-
39-
@@Html.Partial("DataTable", Html.DataTableVm("table-id", (HomeController h) => h.GetUsers(null)))
36+
//include these scripts to use standard features
37+
&lt;script type="text/javascript" src="//cdn.datatables.net/1.10.0/js/jquery.dataTables.js">&lt;/script>
38+
&lt;link rel="stylesheet" href="//cdn.datatables.net/1.10.0/css/jquery.dataTables.css" />
39+
40+
//These ones if you want to use the column filters
41+
&lt;link rel="stylesheet" href="/Content/jquery-datatables-column-filter/media/js/jquery.dataTables.columnFilter.css" />
42+
&lt;script type="text/javascript" src="/Content/jquery-datatables-column-filter/media/js/jquery.dataTables.columnFilter.js">&lt;/script>
43+
//And these if you want date time pickers in the filters
44+
&lt;script type="text/javascript" src="/Content/jquery-datatables-column-filter/jquery-ui-timepicker-addon.js">&lt;/script>
45+
&lt;link rel="stylesheet" href="/Content/jquery-datatables-column-filter/jquery-ui-timepicker-addon.css" />
46+
47+
//and these if you want to use TableTools (export buttons)
48+
&lt;script type="text/javascript" src="//cdn.datatables.net/tabletools/2.2.1/js/dataTables.tableTools.min.js">&lt;/script>
49+
&lt;link rel="stylesheet" href="//cdn.datatables.net/tabletools/2.2.1/css/dataTables.tableTools.css" />
50+
51+
//And these if you want to use column visibility
52+
&lt;link rel="stylesheet" href="//cdn.datatables.net/colvis/1.1.1/css/dataTables.colVis.css" />
53+
&lt;script type="text/javascript" src="//cdn.datatables.net/colvis/1.1.1/js/dataTables.colVis.min.js">&lt;/script>
54+
55+
var dataTablesConfigVm = dataTablesConfigVmHtml.DataTableVm("table-id", (HomeController h) => h.GetUsers(null))
56+
//set options on the config here, see <a href="https://github.com/mcintyre321/mvc.jquery.datatables/tree/master/Mvc.JQuery.Datatables.Example/Views/Home/_ExampleTable.cshtml">example here</a>
4057

58+
@@Html.Partial("DataTable", dataTablesConfigVm)
4159
</pre>
4260
</p>
4361

Mvc.JQuery.Datatables.Example/Views/Home/_ExampleTable.cshtml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
@using Mvc.JQuery.DataTables.Serialization
55
@using Mvc.JQuery.DataTables
66

7+
<script type="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/highlight.min.js" language="javascript"></script>
78

89
<script type="text/javascript" src="//cdn.datatables.net/1.10.0/js/jquery.dataTables.js"></script>
910
<link rel="stylesheet" href="//cdn.datatables.net/1.10.0/css/jquery.dataTables.css" />

Mvc.JQuery.Datatables/DataTablesResult.cs

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,15 @@ namespace Mvc.JQuery.DataTables
1414
public abstract class DataTablesResult : ActionResult
1515
{
1616
/// <typeparam name="TSource"></typeparam>
17-
/// <typeparam name="TTransform"></typeparam>
18-
/// <param name="q">A queryable for the data. The properties of this can be marked up with [DataTablesAttribute] to control sorting/searchability/visibility</param>
19-
/// <param name="dataTableParam"></param>
20-
/// <returns></returns>
21-
22-
public static DataTablesResult<TSource> Create<TSource>(IQueryable<TSource> q, DataTablesParam dataTableParam,
23-
ArrayOutputType? arrayOutput = null)
24-
{
25-
return Create(q, dataTableParam, new ResponseOptions<TSource>() { ArrayOutputType = arrayOutput });
26-
}
27-
28-
/// <typeparam name="TSource"></typeparam>
29-
/// <typeparam name="TTransform"></typeparam>
3017
/// <param name="q">A queryable for the data. The properties of this can be marked up with [DataTablesAttribute] to control sorting/searchability/visibility</param>
3118
/// <param name="dataTableParam"></param>
3219
/// <param name="transform">//a transform for custom column rendering e.g. to do a custom date row => new { CreatedDate = row.CreatedDate.ToString("dd MM yy") } </param>
20+
/// <param name="responseOptions"></param>
3321
/// <returns></returns>
34-
public static DataTablesResult<TSource> Create<TSource, TTransform>(IQueryable<TSource> q, DataTablesParam dataTableParam,
35-
Func<TSource, TTransform> transform, ResponseOptions<TSource> responseOptions = null)
22+
public static DataTablesResult<TSource> Create<TSource>(IQueryable<TSource> q, DataTablesParam dataTableParam,
23+
Func<TSource, object> transform, ResponseOptions<TSource> responseOptions = null)
3624
{
25+
transform = transform ?? (s => s);
3726
var result = new DataTablesResult<TSource>(q, dataTableParam);
3827

3928
result.Data = result.Data
@@ -81,30 +70,13 @@ private static DataTablesResponseData ApplyOutputRules<TSource>(DataTablesRespon
8170

8271
/// <param name="transform">Should be a Func<T, TTransform></param>
8372
public static DataTablesResult Create(IQueryable queryable, DataTablesParam dataTableParam, object transform,
84-
ArrayOutputType? arrayOutput = null)
85-
{
86-
var s = "Create";
87-
var openCreateMethod = typeof(DataTablesResult).GetMethods().Single(x => x.Name == s && x.GetGenericArguments().Count() == 2);
88-
var queryableType = queryable.GetType().GetGenericArguments()[0];
89-
var transformType = transform.GetType().GetGenericArguments()[1];
90-
var closedCreateMethod = openCreateMethod.MakeGenericMethod(queryableType, transformType);
91-
return (DataTablesResult)closedCreateMethod.Invoke(null, new object[] { queryable, dataTableParam, transform, arrayOutput });
92-
}
93-
94-
public static DataTablesResult Create(IQueryable queryable, DataTablesParam dataTableParam,
95-
ArrayOutputType? arrayOutput = null)
73+
ResponseOptions responseOptions = null)
9674
{
9775
var s = "Create";
9876
var openCreateMethod = typeof(DataTablesResult).GetMethods().Single(x => x.Name == s && x.GetGenericArguments().Count() == 1);
9977
var queryableType = queryable.GetType().GetGenericArguments()[0];
100-
var closedCreateMethod = openCreateMethod.MakeGenericMethod(queryableType);
101-
return (DataTablesResult)closedCreateMethod.Invoke(null, new object[] { queryable, dataTableParam, arrayOutput });
102-
}
103-
104-
public static DataTablesResult<T> CreateResultUsingEnumerable<T>(IEnumerable<T> q, DataTablesParam dataTableParam,
105-
ArrayOutputType? arrayOutput = null)
106-
{
107-
return Create(q.AsQueryable(), dataTableParam, arrayOutput);
78+
var closedCreateMethod = openCreateMethod.MakeGenericMethod(queryableType, typeof(object));
79+
return (DataTablesResult)closedCreateMethod.Invoke(null, new object[] { queryable, dataTableParam, transform, responseOptions });
10880
}
10981
}
11082

0 commit comments

Comments
 (0)