|
|
@@ -11,7 +11,7 @@ using System.Text;
|
|
|
namespace PRS.Shared.Events;
|
|
|
|
|
|
public class SaveEvent<T> : IEvent<SaveEventDataModel<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
public Type Entity => typeof(T);
|
|
|
|
|
|
@@ -40,10 +40,39 @@ public class SaveEvent<T> : IEvent<SaveEventDataModel<T>>
|
|
|
public void DeserializeBinary(CoreBinaryReader reader)
|
|
|
{
|
|
|
}
|
|
|
+
|
|
|
+ public void Init(IStore store, IEventData evData, SaveEventDataModel<T> model)
|
|
|
+ {
|
|
|
+ if (model.Entity.ID != Guid.Empty)
|
|
|
+ {
|
|
|
+ var loadCols = Columns.None<T>();
|
|
|
+
|
|
|
+ var prefix = $"{typeof(T).Name}.";
|
|
|
+ foreach (var variable in evData.ReferencedVariables)
|
|
|
+ {
|
|
|
+ if (variable.StartsWith(prefix))
|
|
|
+ {
|
|
|
+ var varName = variable[prefix.Length..];
|
|
|
+ if (!model.Entity.HasOriginalValue(varName))
|
|
|
+ {
|
|
|
+ loadCols.Add(varName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var data = store.Provider.Query(
|
|
|
+ new Filter<T>(x => x.ID).IsEqualTo(model.Entity.ID),
|
|
|
+ loadCols);
|
|
|
+ if(data.Rows.Count > 0)
|
|
|
+ {
|
|
|
+ data.Rows[0].FillObject(model.Entity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public class SaveEventDataModelDefinition<T>(SaveEvent<T> ev) : IEventDataModelDefinition
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
private IEventVariable[]? variables;
|
|
|
|
|
|
@@ -90,7 +119,7 @@ public class SaveEventDataModelDefinition<T>(SaveEvent<T> ev) : IEventDataModelD
|
|
|
}
|
|
|
|
|
|
public class SaveEventDataModel<T>(T entity) : IEventDataModel, ITypedEventDataModel
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
public T Entity { get; set; } = entity;
|
|
|
|
|
|
@@ -118,8 +147,12 @@ public class SaveEventDataModel<T>(T entity) : IEventDataModel, ITypedEventDataM
|
|
|
|
|
|
[Caption("New Record")]
|
|
|
public class CreatedSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDataModel<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
+ public string Description => "New Record";
|
|
|
+
|
|
|
+ public IEnumerable<string> ReferencedVariables => [];
|
|
|
+
|
|
|
public bool Check(SaveEventDataModel<T> dataModel)
|
|
|
{
|
|
|
return dataModel.Entity.HasOriginalValue(x => x.ID);
|
|
|
@@ -131,16 +164,20 @@ public class CreatedSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventD
|
|
|
public void DeserializeBinary(CoreBinaryReader reader)
|
|
|
{
|
|
|
}
|
|
|
-
|
|
|
- public string GetDescription() => "New Record";
|
|
|
}
|
|
|
|
|
|
[Caption("Property Changed")]
|
|
|
public class PropertyChangedSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDataModel<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
public IProperty? TriggerProperty { get; set; }
|
|
|
|
|
|
+ public string Description => TriggerProperty is null
|
|
|
+ ? $"{typeof(T).GetCaption()} changed"
|
|
|
+ : $"{typeof(T).GetCaption()}.{TriggerProperty.Name} changed";
|
|
|
+
|
|
|
+ public IEnumerable<string> ReferencedVariables => [];
|
|
|
+
|
|
|
public bool Check(SaveEventDataModel<T> dataModel)
|
|
|
{
|
|
|
if(TriggerProperty is null)
|
|
|
@@ -177,24 +214,14 @@ public class PropertyChangedSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, Sa
|
|
|
TriggerProperty = null;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- public string GetDescription()
|
|
|
- {
|
|
|
- if(TriggerProperty is null)
|
|
|
- {
|
|
|
- return $"{typeof(T).GetCaption()} changed";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return $"{typeof(T).GetCaption()}.{TriggerProperty.Name} changed";
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
[Caption("Custom Script")]
|
|
|
public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDataModel<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
+ public string Description => "Custom Script";
|
|
|
+
|
|
|
private ScriptDocument? _scriptDocument;
|
|
|
|
|
|
private string? _script;
|
|
|
@@ -211,6 +238,8 @@ public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDa
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public IEnumerable<string> ReferencedVariables => [];
|
|
|
+
|
|
|
public string DefaultScript()
|
|
|
{
|
|
|
return @"using PRS.Shared.Events;
|
|
|
@@ -254,8 +283,6 @@ public class Module
|
|
|
Script = script;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- public string GetDescription() => "Custom Script";
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -264,7 +291,7 @@ public class Module
|
|
|
|
|
|
[Caption("Custom Script")]
|
|
|
public class ScriptSaveEventAction<T> : IEventAction<SaveEvent<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
private ScriptDocument? _scriptDocument;
|
|
|
|
|
|
@@ -282,6 +309,10 @@ public class ScriptSaveEventAction<T> : IEventAction<SaveEvent<T>>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public IEnumerable<string> ReferencedVariables => [];
|
|
|
+
|
|
|
+ public string Description => "Custom Script";
|
|
|
+
|
|
|
public string DefaultScript()
|
|
|
{
|
|
|
return @"using PRS.Shared.Events;
|
|
|
@@ -319,11 +350,6 @@ public class Module
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public IEnumerable<string> ReferencedVariables()
|
|
|
- {
|
|
|
- yield break;
|
|
|
- }
|
|
|
-
|
|
|
public void SerializeBinary(CoreBinaryWriter writer)
|
|
|
{
|
|
|
writer.Write(Script ?? "");
|
|
|
@@ -341,18 +367,20 @@ public class Module
|
|
|
Script = script;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- public string GetDescription() => "Custom Script";
|
|
|
}
|
|
|
|
|
|
[Caption("Create Entity")]
|
|
|
public class CreateEntitySaveEventAction<T> : IEventAction<SaveEvent<T>>
|
|
|
- where T : Entity
|
|
|
+ where T : Entity, new()
|
|
|
{
|
|
|
public Type? EntityType { get; set; }
|
|
|
|
|
|
public List<PropertyInitializer> Initializers { get; set; } = new List<PropertyInitializer>();
|
|
|
|
|
|
+ public string Description => $"Create New {EntityType?.Name ?? "Entity"}";
|
|
|
+
|
|
|
+ public IEnumerable<string> ReferencedVariables => Initializers.SelectMany(x => x.ReferencedVariables);
|
|
|
+
|
|
|
public object? Execute(IEventDataModel dataModel)
|
|
|
{
|
|
|
if(EntityType is null)
|
|
|
@@ -368,11 +396,6 @@ public class CreateEntitySaveEventAction<T> : IEventAction<SaveEvent<T>>
|
|
|
return entity;
|
|
|
}
|
|
|
|
|
|
- public IEnumerable<string> ReferencedVariables()
|
|
|
- {
|
|
|
- return Initializers.SelectMany(x => x.ReferencedVariables());
|
|
|
- }
|
|
|
-
|
|
|
public void SerializeBinary(CoreBinaryWriter writer)
|
|
|
{
|
|
|
if(EntityType is null)
|
|
|
@@ -408,8 +431,6 @@ public class CreateEntitySaveEventAction<T> : IEventAction<SaveEvent<T>>
|
|
|
Initializers.Add(init);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- public string GetDescription() => $"Create New {EntityType?.Name ?? "Entity"}";
|
|
|
}
|
|
|
|
|
|
public class PropertyInitializer
|
|
|
@@ -441,6 +462,8 @@ public class PropertyInitializer
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public IEnumerable<string> ReferencedVariables => ValueExpression.ReferencedVariables;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// <b>Only for use in serialisation.</b>
|
|
|
/// </summary>
|
|
|
@@ -460,11 +483,6 @@ public class PropertyInitializer
|
|
|
Property.Setter()(entity, ValueExpression.Evaluate(dataModel));
|
|
|
}
|
|
|
|
|
|
- public IEnumerable<string> ReferencedVariables()
|
|
|
- {
|
|
|
- return ValueExpression.ReferencedVariables;
|
|
|
- }
|
|
|
-
|
|
|
public void SerializeBinary(CoreBinaryWriter writer)
|
|
|
{
|
|
|
writer.Write(Property.Name);
|