227 lines
14 KiB
C#
227 lines
14 KiB
C#
using System;
|
|
using System.Linq.Expressions;
|
|
using System.Text;
|
|
using System.Web.Mvc;
|
|
using Kreta.Framework;
|
|
|
|
namespace Kreta.Web.Helpers
|
|
{
|
|
public static class RangeDatePickerExtensions
|
|
{
|
|
public static MvcHtmlString KretaRangeDatePicker<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> fromExpression, Expression<Func<TModel, TValue>> toExpression, string title = "")
|
|
{
|
|
var fromFieldName = ExpressionHelper.GetExpressionText(fromExpression);
|
|
var fromFieldId = fromFieldName.Replace(".", "_");
|
|
var fromMetadata = ModelMetadata.FromLambdaExpression(fromExpression, helper.ViewData);
|
|
var fromDisplayName = fromMetadata.DisplayName;
|
|
|
|
var toFieldName = ExpressionHelper.GetExpressionText(toExpression);
|
|
var toFieldId = toFieldName.Replace(".", "_");
|
|
var toMetadata = ModelMetadata.FromLambdaExpression(toExpression, helper.ViewData);
|
|
var toDisplayName = toMetadata.DisplayName;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
string fromDate = "<input id='" + fromFieldId + "' name='" + fromFieldName + "' />";
|
|
string toDate = "<input id='" + toFieldId + "' name='" + toFieldName + "' />";
|
|
|
|
string scriptTag = @"<script>
|
|
$(document).ready(function () {
|
|
function start" + fromFieldId + @"Change() {
|
|
var startDate = start" + fromFieldId + @".value(), endDate = end" + toFieldId + @".value();
|
|
if (typeof startDate !== 'undefined' && typeof endDate !== 'undefined'){
|
|
if (startDate) {
|
|
startDate = new Date(startDate);
|
|
startDate.setDate(startDate.getDate());
|
|
end" + toFieldId + @".min(startDate);
|
|
} else if (endDate) {
|
|
start" + fromFieldId + @".max(new Date(endDate));
|
|
} else {
|
|
endDate = new Date();
|
|
start" + fromFieldId + @".max(endDate);
|
|
end" + toFieldId + @".min(endDate);
|
|
}
|
|
}
|
|
}
|
|
|
|
function end" + toFieldId + @"Change() {
|
|
var endDate = end" + toFieldId + @".value(), startDate = start" + fromFieldId + @".value();
|
|
|
|
if (endDate) {
|
|
endDate = new Date(endDate);
|
|
endDate.setDate(endDate.getDate());
|
|
start" + fromFieldId + @".max(endDate);
|
|
} else if (startDate) {
|
|
end" + toFieldId + @".min(new Date(startDate));
|
|
} else {
|
|
endDate = new Date();
|
|
start" + fromFieldId + @".max(endDate);
|
|
end" + toFieldId + @".min(endDate);
|
|
}
|
|
}
|
|
|
|
var start" + fromFieldId + @" = $('#" + fromFieldId + @"').kendoDatePicker({
|
|
change: start" + fromFieldId + @"Change,
|
|
'format': 'yyyy. MM. dd.'
|
|
}).data('kendoDatePicker');
|
|
|
|
var end" + toFieldId + @" = $('#" + toFieldId + @"').kendoDatePicker({
|
|
change: end" + toFieldId + @"Change,
|
|
'format': 'yyyy. MM. dd.'
|
|
}).data('kendoDatePicker');
|
|
|
|
start" + fromFieldId + @".max(end" + toFieldId + @".value());
|
|
end" + toFieldId + @".min(start" + fromFieldId + @".value());
|
|
|
|
$('#" + fromFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3080)) + @"');
|
|
$('#" + toFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3081)) + @"');
|
|
});
|
|
</script>";
|
|
|
|
string displayName = "";
|
|
if (!string.IsNullOrWhiteSpace(title))
|
|
{ displayName = title; }
|
|
else
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(fromDisplayName))
|
|
{ displayName = fromDisplayName; }
|
|
else
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(toDisplayName))
|
|
{ displayName = toDisplayName; }
|
|
}
|
|
}
|
|
|
|
sb.Append("<div class=\"searchPanelRow\">");
|
|
sb.Append("<div class=\"searchPanelRowTitle\">");
|
|
sb.Append("<label class=\"searchPanelLabel\" for=\"").Append("aaa").Append("\">").Append(displayName).Append("</label>");
|
|
sb.Append("</div>");
|
|
sb.Append("<div class=\"searchPanelRowValue\">");
|
|
sb.Append(fromDate).Append(" ").Append(toDate).Append(scriptTag);
|
|
sb.Append("</div>");
|
|
sb.Append("</div>");
|
|
|
|
return new MvcHtmlString(sb.ToString());
|
|
}
|
|
|
|
public static MvcHtmlString KretaRangeDatePickerSideBar<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> fromExpression, Expression<Func<TModel, TValue>> toExpression, string title = "")
|
|
{
|
|
var fromFieldName = ExpressionHelper.GetExpressionText(fromExpression);
|
|
var fromFieldId = fromFieldName.Replace(".", "_");
|
|
var fromMetadata = ModelMetadata.FromLambdaExpression(fromExpression, helper.ViewData);
|
|
var fromDisplayName = fromMetadata.DisplayName;
|
|
var fromValue = fromMetadata.Model;
|
|
|
|
var toFieldName = ExpressionHelper.GetExpressionText(toExpression);
|
|
var toFieldId = toFieldName.Replace(".", "_");
|
|
var toMetadata = ModelMetadata.FromLambdaExpression(toExpression, helper.ViewData);
|
|
var toDisplayName = toMetadata.DisplayName;
|
|
var toValue = toMetadata.Model;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
string fromDate = "<input id='" + fromFieldId + "' name='" + fromFieldName + "' value='" + fromValue + "' />";
|
|
string toDate = "<input id='" + toFieldId + "' name='" + toFieldName + "' value='" + toValue + "' />";
|
|
|
|
string scriptTag = @"<script>
|
|
$(document).ready(function () {
|
|
function start" + fromFieldId + @"Change() {
|
|
var startDate = start" + fromFieldId + @".value(), endDate = end" + toFieldId + @".value();
|
|
|
|
if (startDate) {
|
|
startDate = new Date(startDate);
|
|
startDate.setDate(startDate.getDate());
|
|
end" + toFieldId + @".min(startDate);
|
|
} else if (endDate) {
|
|
start" + fromFieldId + @".max(new Date(endDate));
|
|
end" + toFieldId + @".min(new Date(1900, 0, 1));
|
|
} else {
|
|
endDate = new Date();
|
|
start" + fromFieldId + @".max(endDate);
|
|
end" + toFieldId + @".min(endDate);
|
|
}
|
|
}
|
|
|
|
function end" + toFieldId + @"Change() {
|
|
var endDate = end" + toFieldId + @".value(), startDate = start" + fromFieldId + @".value();
|
|
|
|
if (endDate) {
|
|
endDate = new Date(endDate);
|
|
endDate.setDate(endDate.getDate());
|
|
start" + fromFieldId + @".max(endDate);
|
|
} else if (startDate) {
|
|
end" + toFieldId + @".min(new Date(startDate));
|
|
start" + fromFieldId + @".max(new Date(2099, 11, 31));
|
|
} else {
|
|
endDate = new Date();
|
|
start" + fromFieldId + @".max(endDate);
|
|
end" + toFieldId + @".min(endDate);
|
|
}
|
|
}
|
|
|
|
function open" + fromFieldId + @"Change() {
|
|
var endDate = Date.parse($('#" + toFieldId + @"').val());
|
|
if(isNaN(endDate)){
|
|
start" + fromFieldId + @".max(new Date(2099, 11, 31));
|
|
}
|
|
}
|
|
|
|
function open" + toFieldId + @"Change() {
|
|
var startDate = Date.parse( $('#" + fromFieldId + @"').val());
|
|
if(isNaN(startDate)){
|
|
end" + toFieldId + @".min(new Date(1900, 0, 1));
|
|
}
|
|
}
|
|
|
|
var start" + fromFieldId + @" = $('#" + fromFieldId + @"').kendoDatePicker({
|
|
change: start" + fromFieldId + @"Change,
|
|
open: open" + fromFieldId + @"Change,
|
|
'format': 'yyyy. MM. dd.'
|
|
}).data('kendoDatePicker');
|
|
|
|
var end" + toFieldId + @" = $('#" + toFieldId + @"').kendoDatePicker({
|
|
change: end" + toFieldId + @"Change,
|
|
open: open" + toFieldId + @"Change,
|
|
'format': 'yyyy. MM. dd.'
|
|
}).data('kendoDatePicker');
|
|
|
|
start" + fromFieldId + @".max(end" + toFieldId + @".value());
|
|
end" + toFieldId + @".min(start" + fromFieldId + @".value());
|
|
|
|
$('#" + fromFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3080)) + @"');
|
|
$('#" + toFieldId + @"').parent().parent().after('" + string.Format("<span class=\"searchPanelLabel\">{0}</span>", StringResourcesUtil.GetString(3081)) + @"');
|
|
});
|
|
</script>";
|
|
|
|
string displayName = "";
|
|
if (!string.IsNullOrWhiteSpace(title))
|
|
{ displayName = title; }
|
|
else
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(fromDisplayName))
|
|
{ displayName = fromDisplayName; }
|
|
else
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(toDisplayName))
|
|
{ displayName = toDisplayName; }
|
|
}
|
|
}
|
|
|
|
sb.Append("<div class=\"searchPanelRow\">");
|
|
sb.Append("<div class=\"searchPanelRowTitle\">");
|
|
sb.Append("<label class=\"searchPanelLabel\" for=\"").Append("aaa").Append("\">").Append(displayName).Append("</label>");
|
|
sb.Append("</div>");
|
|
sb.Append("<div class=\"searchPanelRowValue\">");
|
|
sb.Append(fromDate).Append("<br />").Append(toDate).Append(scriptTag);
|
|
sb.Append("</div>");
|
|
sb.Append("</div>");
|
|
|
|
sb.Append("<script>$(\"#").Append(fromFieldId).Append("\").kendoMaskedDatePicker();$(\"#").Append(toFieldName).Append("\").kendoMaskedDatePicker();");
|
|
sb.Append("$(\"#").Append(fromFieldId).Append("\").change(function() {{ KretaDateTimeHelper.validateDate($(this)); }});");
|
|
sb.Append("$(\"#").Append(toFieldId).Append("\").change(function() {{ KretaDateTimeHelper.validateDate($(this)); }});");
|
|
sb.Append("</script>");
|
|
|
|
return new MvcHtmlString(sb.ToString());
|
|
}
|
|
}
|
|
}
|