feature: job preferences - On Device Ready For Return expression

This commit is contained in:
Gary Sharp
2024-05-16 22:09:42 +10:00
parent 565e1707ce
commit bb846d14c5
14 changed files with 416 additions and 40 deletions
@@ -64,12 +64,34 @@ namespace Disco.Services
!j.DeviceReadyForReturn.HasValue && !j.DeviceReturnedDate.HasValue;
}
public static void OnDeviceReadyForReturn(this Job j, User Technician)
public static void OnDeviceReadyForReturn(this Job j, DiscoDataContext Database, User Technician)
{
if (!j.CanDeviceReadyForReturn())
throw new InvalidOperationException("Device Ready for Return was Denied");
j.DeviceReadyForReturn = DateTime.Now;
j.DeviceReadyForReturnTechUserId = Technician.UserId;
// Evaluate OnDeviceReadyForReturnExpression Expression
try
{
var result = j.EvaluateOnDeviceReadyForReturnExpression(Database);
if (!string.IsNullOrWhiteSpace(result))
{
var jl = new JobLog()
{
Job = j,
TechUser = Technician,
Timestamp = DateTime.Now,
Comments = result
};
Database.JobLogs.Add(jl);
}
}
catch (Exception ex)
{
SystemLog.LogException("Job Expression - OnDeviceReadyForReturnExpression", ex);
}
}
#endregion
+15
View File
@@ -407,6 +407,21 @@ namespace Disco.Services
return null;
}
public static string EvaluateOnDeviceReadyForReturnExpression(this Job job, DiscoDataContext Database)
{
if (!string.IsNullOrEmpty(Database.DiscoConfiguration.JobPreferences.OnDeviceReadyForReturnExpression))
{
Expression compiledExpression = Jobs.Jobs.OnDeviceReadyForReturnExpressionFromCache(Database);
IDictionary evaluatorVariables = Expression.StandardVariables(null, Database, job.OpenedTechUser, DateTime.Now, null, job);
object result = compiledExpression.EvaluateFirst<object>(job, evaluatorVariables);
if (result == null)
return null;
else
return result.ToString();
}
return null;
}
public static string EvaluateOnCloseExpression(this Job job, DiscoDataContext Database)
{
if (!string.IsNullOrEmpty(Database.DiscoConfiguration.JobPreferences.OnCloseExpression))
+10
View File
@@ -131,6 +131,16 @@ namespace Disco.Services.Jobs
ExpressionCache.InvalidateSingleCache("Job_OnCreateExpression");
}
public static Expression OnDeviceReadyForReturnExpressionFromCache(DiscoDataContext Database)
{
return ExpressionCache.GetOrCreateSingleExpressions("Job_OnDeviceReadyForReturnExpression", () => Expression.TokenizeSingleDynamic(null, Database.DiscoConfiguration.JobPreferences.OnDeviceReadyForReturnExpression, 0));
}
public static void OnDeviceReadyForReturnExpressionInvalidateCache()
{
ExpressionCache.InvalidateSingleCache("Job_OnDeviceReadyForReturnExpression");
}
public static Expression OnCloseExpressionFromCache(DiscoDataContext Database)
{
return ExpressionCache.GetOrCreateSingleExpressions("Job_OnCloseExpression", () => Expression.TokenizeSingleDynamic(null, Database.DiscoConfiguration.JobPreferences.OnCloseExpression, 0));