Browse Source

add DateSubtract.cs function to SDR syntax DateSubtract(endDate,startDate)

pull/37/head
Peter Forstmeier 13 years ago
parent
commit
3036889042
  1. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs
  2. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  3. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs
  4. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs
  5. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs
  6. 64
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateSubtract.cs
  7. 15
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs
  8. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs
  9. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj
  10. 82
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/DateTimeFunctionsFixture.cs
  11. 43
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/FunctionsFixture.cs
  12. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs

@ -38,10 +38,7 @@ namespace ICSharpCode.Reports.Addin.Dialogs @@ -38,10 +38,7 @@ namespace ICSharpCode.Reports.Addin.Dialogs
public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
// return new StandardValuesCollection(
// new string[] { "entry1", "entry2", "entry3" });
return new StandardValuesCollection(GlobalLists.Formats());
}
}

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -176,6 +176,7 @@ @@ -176,6 +176,7 @@
<Compile Include="Project\Exporter\ExportRenderer\IExportRunner.cs" />
<Compile Include="Project\Exporter\GapList.cs" />
<Compile Include="Project\Expressions\EvaluationHelper.cs" />
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\DateSubtract.cs" />
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Compilation\Functions\ReportingService\FieldReference.cs" />
<Compile Include="Project\Exporter\BasePager.cs" />
<Compile Include="Project\Exporter\Converters\BaseConverter.cs" />

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs

@ -23,8 +23,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing @@ -23,8 +23,7 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing
string dataType, string nullValue )
{
TypeCode typeCode = TypeHelpers.TypeCodeFromString(dataType);
return StandardFormatter.FormatItem(valueToFormat,format,
typeCode,nullValue);
return FormatItem(valueToFormat,format,typeCode,nullValue);
}

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs

@ -67,6 +67,9 @@ namespace ICSharpCode.Reports.Core.Project.BaseClasses @@ -67,6 +67,9 @@ namespace ICSharpCode.Reports.Core.Project.BaseClasses
if (String.IsNullOrEmpty(type)) {
throw new ArgumentNullException("type");
}
var s = Type.GetTypeCode( Type.GetType(type));
Console.WriteLine ("typeCode for {0} - {1}",type,s);
return Type.GetTypeCode( Type.GetType(type));
}
}

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs

@ -31,7 +31,6 @@ $Log: /CoreServices/Hsi/ExpressionEvaluator/Parser/Functions/ToString.cs $ @@ -31,7 +31,6 @@ $Log: /CoreServices/Hsi/ExpressionEvaluator/Parser/Functions/ToString.cs $
using System;
using System.Text.RegularExpressions;
using SimpleExpressionEvaluator.Compilation.Functions;
using SimpleExpressionEvaluator.Utilities;
namespace SimpleExpressionEvaluator.Compilation.Functions

64
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateSubtract.cs

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 06.02.2013
* Time: 20:18
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Text.RegularExpressions;
using SimpleExpressionEvaluator.Utilities;
namespace SimpleExpressionEvaluator.Compilation.Functions
{
/// <summary>
/// DateSubtract (endDate,startDate)
/// </summary>
public class DateSubtract: Function<TimeSpan>
{
private static readonly Regex VALIDATOR = new Regex("[dDwWmMyY]", RegexOptions.Compiled);
protected override int ExpectedArgumentCount
{
get
{
return 2;
}
}
private static void ValidatePeriodCode(string code)
{
if (String.IsNullOrEmpty(code))
throw new Exception(
"The second argument in DateAdd was not provided. It must be one of the following (case insensitive): d,w,m,y");
if (code.Length != 1 || !VALIDATOR.IsMatch(code))
{
if (String.IsNullOrEmpty(code))
throw new Exception(
"The second argument in DateAdd was not provided. It must be one of the following (case insensitive): d,w,m,y");
}
}
protected override TimeSpan EvaluateFunction(object[] args)
{
args[0] = args[0] == null ? DateTime.Today : TypeNormalizer.EnsureType(args[0], typeof (DateTime));
args[1] = args[1] == null ? DateTime.Today : TypeNormalizer.EnsureType(args[1], typeof (DateTime));
var endDate = (DateTime) args[0];
var startDate = (DateTime) args[1];
if (startDate == DateTime.MinValue)
startDate = DateTime.Today;
Console.WriteLine(endDate.Subtract(startDate));
var s = endDate.Subtract(startDate);
return endDate.Subtract(startDate);
}
}
}

15
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs

@ -122,14 +122,23 @@ namespace SimpleExpressionEvaluator.Utilities @@ -122,14 +122,23 @@ namespace SimpleExpressionEvaluator.Utilities
{
return converter.ConvertFrom(value);
}
*/
try
{
return Convert.ChangeType(value, targetType);
}
catch
catch e
{ }
return nullValue;
*/
try {
return Convert.ChangeType(value, targetType);
} catch (Exception e) {
Console.WriteLine("TypeNormalizer {0} - {1}",value.ToString(),e.Message);
return value.ToString();
//throw new Exception(String.Format("TypeNormalizer for <{0}> - {1}",value.ToString(),e.Message));
}
// return nullValue;
}
}
}

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs

@ -64,6 +64,7 @@ namespace ICSharpCode.Reports.Core.Globals @@ -64,6 +64,7 @@ namespace ICSharpCode.Reports.Core.Globals
private static readonly string[] MyDataTypeList = new string[] {
"System.String",
"System.DateTime",
"System.TimeSpan",
"System.Decimal",
"System.Int"};
#endregion

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj

@ -89,7 +89,7 @@ @@ -89,7 +89,7 @@
<Compile Include="Printing\SinglePageFixture.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ReportingLanguage\ExpressionEvaluatorFixture.cs" />
<Compile Include="ReportingLanguage\FunctionsFixture.cs" />
<Compile Include="ReportingLanguage\DateTimeFunctionsFixture.cs" />
<Compile Include="ReportingLanguage\IntegrationTests\AggregateFunctionsFixture.cs" />
<Compile Include="ReportingLanguage\IntegrationTests\AggregateFunctionsFromIListFixture.cs" />
<Compile Include="ReportingLanguage\IntegrationTests\ConcatFieldsFixture.cs" />

82
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/DateTimeFunctionsFixture.cs

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
using NUnit.Framework;
using SimpleExpressionEvaluator;
namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.LanguageTests
{
[TestFixture]
public class DateTimeFunctionsFixture
{
[Test]
public void Can_Compile_Function()
{
const string expression = "today()";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today));
}
[Test]
public void Can_Compile_Expr_With_Generic_Return()
{
const string expression = "Today()";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today));
}
[Test]
public void Can_Compile_DateAdd()
{
const string expression = "dateAdd(today(),d,1)";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today.AddDays(1)));
}
[Test]
public void Can_Compile_DateDiff ()
{
const string expression = "dateSubtract('10.02.2013','09.02.2013')";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(new TimeSpan(1,0,0,0).Duration()));
}
[Test]
public void Can_Compile_DateDiff_Start_Greater_End ()
{
const string expression = "dateSubtract('09.02.2013','10.02.2013')";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(new TimeSpan(1,0,0,0)));
}
[Test]
public void Can_Compile_DateDiff_Include_Hours_Minutes()
{
// Example found at:
// http://msdn.microsoft.com/en-us/library/ae6246z1.aspx
System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0);
System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0);
// diff1 gets 185 days, 14 hours, and 47 minutes.
System.TimeSpan diff1 = date2.Subtract(date1);
const string expression = "dateSubtract('1996.12.6 13:2:0','1996.6.3 22:15:0')";
IExpression expr = CreateExpression(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(diff1));
}
private static IExpression CreateExpression (string expression)
{
var compiler = new ReportingLanguageCompiler();
return compiler.CompileExpression<object>(expression);
}
}
}

43
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/FunctionsFixture.cs

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Reports.Expressions.ReportingLanguage;
using NUnit.Framework;
using SimpleExpressionEvaluator;
namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.LanguageTests
{
[TestFixture]
public class FunctionsFixture
{
[Test]
public void Can_Compile_Function()
{
const string expression = "today()";
var compiler = new ReportingLanguageCompiler();
IExpression expr = compiler.CompileExpression<DateTime>(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today));
}
[Test]
public void Can_Compile_Expr_With_Generic_Return()
{
const string expression = "Today()";
var compiler = new ReportingLanguageCompiler();
IExpression expr = compiler.CompileExpression<object>(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today));
}
[Test]
public void Can_Compile_DateAdd()
{
const string expression = "dateAdd(today(),d,1)";
var compiler = new ReportingLanguageCompiler();
IExpression expr = compiler.CompileExpression<object>(expression);
Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today.AddDays(1)));
}
}
}

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -15,7 +15,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{
[TestFixture]
[SetCulture("en-US")]
// [SetCulture("en-US")]
public class AggregateFunctionsFromTableFixture
{
@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
const string expression = "=max(amount)";
//var s = this.evaluator.Evaluate(expression);
Assert.That(this.evaluator.Evaluate(expression),
Is.EqualTo("400.5"));
Is.EqualTo("400,5"));
}
@ -134,8 +134,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -134,8 +134,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
[TestFixtureSetUp]
public void Init()
{
this.singlePage = TestHelper.CreateSinglePage();
this.evaluator = new ExpressionEvaluatorFacade(this.singlePage);
@ -151,6 +149,5 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests @@ -151,6 +149,5 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
this.dataManager = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.testTable, new ReportSettings());
this.singlePage.IDataNavigator = this.dataManager.GetNavigator;
}
}
}

Loading…
Cancel
Save