Compare commits
No commits in common. "d5ea35de8496d460c3c4ef24e2f624eccfd66c47" and "ae183c77cfefc2c6b86fec2da7bdc0be3ef06efc" have entirely different histories.
d5ea35de84
...
ae183c77cf
@ -1,29 +0,0 @@
|
||||
namespace ILoan.Tools.Application.Layout;
|
||||
|
||||
public partial class MainLayout
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
|
||||
private bool sidebarExpanded = true;
|
||||
|
||||
void SidebarToggleClick()
|
||||
{
|
||||
sidebarExpanded = !sidebarExpanded;
|
||||
}
|
||||
}
|
@ -1,202 +0,0 @@
|
||||
@page "/add-core-rule"
|
||||
@using ILoan.Tools.Domain.Entities
|
||||
|
||||
<PageTitle>Add CoreRule</PageTitle>
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRule</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRule" Data="@coreRule" Visible="@(coreRule != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule ID" Component="RuleId" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.ID" Name="RuleId" />
|
||||
<RadzenRequiredValidator Component="RuleId" Text="Rule id is required" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule Name" Component="RuleName" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.RuleName" Name="RuleName"/>
|
||||
<RadzenRequiredValidator Component="RuleName" Text="RuleName is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Source" Component="Source" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.Source" Name="Source"/>
|
||||
<RadzenRequiredValidator Component="Source" Text="Source is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Default Threshold" Component="DefaultThreshold" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.DefaultThreshold" Name="DefaultThreshold"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Blocked" Component="Blocked" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.Blocked" Name="Blocked"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Triggers Manual Review" Component="TriggersManualReview" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.TriggersManualReview" Name="TriggersManualReview"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Suggested Resolution" Component="SuggestedResolution" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.SuggestedResolution" Name="SuggestedResolution"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Trigger Reason" Component="TriggerReason" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.TriggerReason" Name="TriggerReason"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Use Last Record" Component="UseLastRecord" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.UseLastRecord" Name="UseLastRecord"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Applicant Type" Component="ApplicantType" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.ApplicantType" Name="ApplicantType"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Filter On Clickthrough" Component="FilterOnClickthrough" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.FilterOnClickthrough" Name="FilterOnClickthrough"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Run Before Status" Component="RunBeforeStatus" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.RunBeforeStatus" Name="RunBeforeStatus"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Display Section" Component="DisplaySection" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DisplaySection" Name="DisplaySection"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Warning Field" Component="WarningField" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.WarningField" Name="WarningField"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Rule Name" Component="DutchRuleName" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.DutchRuleName" Name="DutchRuleName"/>
|
||||
<RadzenRequiredValidator Component="DutchRuleName" Text="DutchRuleName is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Trigger Reason" Component="DutchTriggerReason" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchTriggerReason" Name="DutchTriggerReason"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Suggested Resolution" Component="DutchSuggestedResolution" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchSuggestedResolution" Name="DutchSuggestedResolution"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Filter On Clickthrough" Component="DutchFilterOnClickthrough" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchFilterOnClickthrough" Name="DutchFilterOnClickthrough"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule Explanation" Component="RuleExplanation" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.RuleExplanation" Name="RuleExplanation"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Rule Explanation" Component="DutchRuleExplanation" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.DutchRuleExplanation" Name="DutchRuleExplanation"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Work Item Id" Component="WorkItemId" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.WorkItemId" Name="WorkItemId"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Title" Component="Title" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.Title" Name="Title"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Update" Component="Update" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.Update" Name="Update"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat"/>
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick"/>
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,51 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages;
|
||||
|
||||
public partial class AddCoreRule
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
coreRule = new CoreRule();
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRule coreRule;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
await RulesService.CreateCoreRule(coreRule);
|
||||
DialogService.Close(coreRule);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
@page "/add-core-rule-criteria-operator"
|
||||
|
||||
<PageTitle>Add CoreRuleCriteriaOperator</PageTitle>
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRuleCriteriaOperator</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRuleCriteriaOperator" Data="@coreRuleCriteriaOperator" Visible="@(coreRuleCriteriaOperator != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Core Rule" Component="CoreRule" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown Data="@coreRulesForRuleID" TextProperty="RuleName" ValueProperty="ID" AllowClear=true
|
||||
Disabled=@(hasRuleIDValue) Placeholder="Choose CoreRule" style="display: block; width: 100%" @bind-Value="@coreRuleCriteriaOperator.RuleID" Name="RuleID"
|
||||
/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Operator1" Component="Operator1" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriteriaOperator.Operator1" Name="Operator1" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat" />
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick" />
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,75 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages;
|
||||
|
||||
public partial class AddCoreRuleCriteriaOperator
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
||||
coreRulesForRuleID = await RulesService.GetCoreRules();
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRuleCriteriaOperator coreRuleCriteriaOperator;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleID;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
await RulesService.CreateCoreRuleCriteriaOperator(coreRuleCriteriaOperator);
|
||||
DialogService.Close(coreRuleCriteriaOperator);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool hasRuleIDValue;
|
||||
|
||||
[Parameter]
|
||||
public int? RuleID { get; set; }
|
||||
public override async Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
coreRuleCriteriaOperator = new CoreRuleCriteriaOperator();
|
||||
|
||||
hasRuleIDValue = parameters.TryGetValue<int?>("RuleID", out var hasRuleIDResult);
|
||||
|
||||
if (hasRuleIDValue)
|
||||
{
|
||||
coreRuleCriteriaOperator.RuleID = hasRuleIDResult;
|
||||
}
|
||||
await base.SetParametersAsync(parameters);
|
||||
}
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
@page "/add-core-rule-criterion"
|
||||
|
||||
<PageTitle>Add CoreRuleCriterion</PageTitle>
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRuleCriterion</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRuleCriterion" Data="@coreRuleCriterion" Visible="@(coreRuleCriterion != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Core Rule" Component="CoreRule" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown Data="@coreRulesForRuleID" TextProperty="RuleName" ValueProperty="ID" AllowClear=true
|
||||
Disabled=@(hasRuleIDValue) Placeholder="Choose CoreRule" style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.RuleID" Name="RuleID"
|
||||
/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Property" Component="Property" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenAutoComplete Data="@Properties" @bind-Value="@coreRuleCriterion.Property"
|
||||
Placeholder="Choose property or type your own" style="display: block; width: 100%" Name="Property"
|
||||
/>
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.Property" Name="Value" class="rz-pa-1" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Comparison" Component="Comparison" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown TValue="string" Data="@Comparisons" @bind-Value="@coreRuleCriterion.Comparison" AllowClear=true
|
||||
Placeholder="Choose comparer" style="display: block; width: 100%" Name="Comparison" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Value" Component="Value" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.Value" Name="Value" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Value Is Property" Component="ValueIsProperty" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.ValueIsProperty" Name="ValueIsProperty" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Return Count" Component="ReturnCount" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.ReturnCount" Name="ReturnCount" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Is Threshold Criterium" Component="IsThresholdCriterium" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.IsThresholdCriterium" Name="IsThresholdCriterium" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat" />
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick" />
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,85 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages;
|
||||
|
||||
public partial class AddCoreRuleCriterion
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
public List<string> Properties { get; set; }
|
||||
public List<string> Comparisons { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Properties = RulesService.GetProperties();
|
||||
Comparisons = RulesService.GetComparisons();
|
||||
|
||||
coreRulesForRuleID = await RulesService.GetCoreRules();
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRuleCriterion coreRuleCriterion;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleID;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
await RulesService.CreateCoreRuleCriterion(coreRuleCriterion);
|
||||
DialogService.Close(coreRuleCriterion);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool hasRuleIDValue;
|
||||
|
||||
[Parameter]
|
||||
public int? RuleID { get; set; }
|
||||
public override async Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
coreRuleCriterion = new CoreRuleCriterion();
|
||||
|
||||
hasRuleIDValue = parameters.TryGetValue<int?>("RuleID", out var hasRuleIDResult);
|
||||
|
||||
if (hasRuleIDValue)
|
||||
{
|
||||
coreRuleCriterion.RuleID = hasRuleIDResult;
|
||||
}
|
||||
await base.SetParametersAsync(parameters);
|
||||
}
|
||||
|
||||
void OnChange(dynamic args)
|
||||
{
|
||||
coreRuleCriterion.Property = args;
|
||||
}
|
||||
}
|
@ -1,139 +0,0 @@
|
||||
@page "/"
|
||||
@using ILoan.Tools.Domain.Entities
|
||||
|
||||
<PageTitle>CoreRules</PageTitle>
|
||||
<RadzenStack>
|
||||
<RadzenRow AlignItems="AlignItems.Center">
|
||||
<RadzenColumn Size="12" SizeMD="6">
|
||||
<RadzenText Text="CoreRules" TextStyle="TextStyle.H3" TagName="TagName.H1" style="margin: 0"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="12" SizeMD="6">
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton Icon="build" Text="Generate" Click="@GenerateButtonClick" Variant="Variant.Flat"/>
|
||||
<RadzenButton Icon="add_circle_outline" Text="Add" Click="@AddButtonClick" Variant="Variant.Flat"/>
|
||||
</RadzenStack>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow>
|
||||
<RadzenColumn SizeMD="12">
|
||||
<RadzenDataGrid @ref="grid0" ColumnWidth="200px" ExpandMode="DataGridExpandMode.Single" AllowFiltering="true" FilterMode="FilterMode.Advanced" AllowPaging="true" AllowSorting="true" ShowPagingSummary="true" PageSizeOptions="@(new[] { 5, 10, 20, 30 })"
|
||||
Data="@coreRules" TItem="CoreRule" RowSelect="@EditRow" RowExpand="@GetChildData">
|
||||
<Columns>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="ID" Title="ID">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="RuleName" Title="Rule Name" Width="400px">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="Source" Title="Source">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DefaultThreshold" Title="Default Threshold">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="Blocked" Title="Blocked">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="TriggersManualReview" Title="Triggers Manual Review">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="SuggestedResolution" Title="Suggested Resolution">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="TriggerReason" Title="Trigger Reason">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="UseLastRecord" Title="Use Last Record">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="ApplicantType" Title="Applicant Type">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="FilterOnClickthrough" Title="Filter On Clickthrough">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="RunBeforeStatus" Title="Run Before Status">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DisplaySection" Title="Display Section">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="WarningField" Title="Warning Field">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DutchRuleName" Title="Dutch Rule Name">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DutchTriggerReason" Title="Dutch Trigger Reason">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DutchSuggestedResolution" Title="Dutch Suggested Resolution">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DutchFilterOnClickthrough" Title="Dutch Filter On Clickthrough">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="RuleExplanation" Title="Rule Explanation">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="DutchRuleExplanation" Title="Dutch Rule Explanation">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="WorkItemId" Title="Work Item Id">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="Title" Title="Title">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Property="update" Title="update">
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRule" Filterable="false" Sortable="false" Width="70px" TextAlign="TextAlign.Center">
|
||||
<Template Context="coreRule">
|
||||
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Size="ButtonSize.Medium"
|
||||
Shade="Shade.Lighter" Variant="Variant.Flat"
|
||||
Click="@(args => GridDeleteButtonClick(args, coreRule))"@onclick:stopPropagation="true"/>
|
||||
</Template>
|
||||
</RadzenDataGridColumn>
|
||||
</Columns>
|
||||
<Template Context="coreRule">
|
||||
|
||||
<RadzenStack Class="rz-my-8">
|
||||
<RadzenRow Gap="0" AlignItems="AlignItems.Center">
|
||||
<RadzenColumn Size="12" SizeMD="6">
|
||||
<RadzenText Visible="@(coreRuleChild != null)" Text="CoreRuleCriteria" TextStyle="TextStyle.H4" TagName="TagName.H2" style="margin: 0"/>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Start" Gap="0.5rem">
|
||||
<RadzenButton Visible="true" Icon="add_circle_outline" Text="Add" Click="@(args => CoreRuleCriteriaAddButtonClick(args, coreRuleChild))"/>
|
||||
</RadzenStack>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenDataGrid ColumnWidth="50px" Visible="@(coreRuleChild != null)" @ref="CoreRuleCriteriaDataGrid" AllowFiltering="true" FilterMode="FilterMode.Advanced" AllowPaging="true" AllowSorting="true" ShowPagingSummary="true" PageSizeOptions="@(new[] { 5, 10, 20, 30 })"
|
||||
Data="@coreRuleChild?.CoreRuleCriteria" TItem="CoreRuleCriterion" RowSelect="@(args => CoreRuleCriteriaRowSelect(args, coreRuleChild))">
|
||||
<Columns>
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Property="ID" Title="ID" Width="15px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Title="Description">
|
||||
<Template Context="coreRuleCriterionChild">
|
||||
@(coreRuleCriterionChild.Property + " " + coreRuleCriterionChild.Comparison + " " + coreRuleCriterionChild.Value)
|
||||
</Template>
|
||||
</RadzenDataGridColumn>
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Property="ValueIsProperty" Title="Value Is Property" Width="10px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Property="ReturnCount" Title="Return Count" Width="10px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Property="IsThresholdCriterium" Title="Is Threshold Criterium" Width="10px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Property="CoreRule.RuleName" Title="Core Rule" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriterion" Filterable="false" Sortable="false" Width="70px" TextAlign="TextAlign.Center">
|
||||
<Template Context="coreRuleCriterionChild">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Size="ButtonSize.Medium" Shade="Shade.Lighter" Variant="Variant.Flat"
|
||||
Click="@(args => CoreRuleCriteriaDeleteButtonClick(args, coreRuleCriterionChild))"@onclick:stopPropagation="true"/>
|
||||
</Template>
|
||||
</RadzenDataGridColumn>
|
||||
</Columns>
|
||||
</RadzenDataGrid>
|
||||
</RadzenStack>
|
||||
<RadzenStack Class="rz-my-8">
|
||||
<RadzenRow Gap="0" AlignItems="AlignItems.Center">
|
||||
<RadzenColumn Size="12" SizeMD="6">
|
||||
<RadzenText Visible="@(coreRuleChild != null)" Text="CoreRuleCriteriaOperators" TextStyle="TextStyle.H4" TagName="TagName.H2" style="margin: 0"/>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.Start" Gap="0.5rem">
|
||||
<RadzenButton Visible="true" Icon="add_circle_outline" Text="Add" Click="@(args => CoreRuleCriteriaOperatorsAddButtonClick(args, coreRuleChild))"/>
|
||||
</RadzenStack>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenDataGrid ColumnWidth="200px" Visible="@(coreRuleChild != null)" @ref="CoreRuleCriteriaOperatorsDataGrid" AllowFiltering="true" FilterMode="FilterMode.Advanced" AllowPaging="true" AllowSorting="true" ShowPagingSummary="true" PageSizeOptions="@(new[] { 5, 10, 20, 30 })"
|
||||
Data="@coreRuleChild?.CoreRuleCriteriaOperators" TItem="CoreRuleCriteriaOperator" RowSelect="@(args => CoreRuleCriteriaOperatorsRowSelect(args, coreRuleChild))">
|
||||
<Columns>
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriteriaOperator" Property="ID" Title="ID" Width="15px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriteriaOperator" Property="Operator1" Title="Operator1" Width="15px" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriteriaOperator" Property="CoreRule.RuleName" Title="Core Rule" />
|
||||
<RadzenDataGridColumn TItem="CoreRuleCriteriaOperator" Filterable="false" Sortable="false" Width="70px" TextAlign="TextAlign.Center">
|
||||
<Template Context="coreRuleCriteriaOperatorChild">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Danger" Icon="delete" Size="ButtonSize.Medium" Shade="Shade.Lighter" Variant="Variant.Flat"
|
||||
Click="@(args => CoreRuleCriteriaOperatorsDeleteButtonClick(args, coreRuleCriteriaOperatorChild))"@onclick:stopPropagation="true"/>
|
||||
</Template>
|
||||
</RadzenDataGridColumn>
|
||||
</Columns>
|
||||
</RadzenDataGrid>
|
||||
</RadzenStack>
|
||||
</Template>
|
||||
</RadzenDataGrid>
|
||||
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
</RadzenStack>
|
@ -1,207 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages;
|
||||
|
||||
public partial class CoreRules
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
[Inject]
|
||||
public RuleFileGeneratorService RuleFileGeneratorService { get; set; }
|
||||
|
||||
protected IEnumerable<CoreRule> coreRules;
|
||||
|
||||
protected RadzenDataGrid<CoreRule> grid0;
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
coreRules = await RulesService.GetCoreRules();
|
||||
}
|
||||
|
||||
protected async Task AddButtonClick(MouseEventArgs args)
|
||||
{
|
||||
await DialogService.OpenAsync<AddCoreRule>("Add CoreRule", null);
|
||||
await grid0.Reload();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Execute RuleFileGeneratorService to generate SQL files
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
protected async Task GenerateButtonClick()
|
||||
{
|
||||
await RuleFileGeneratorService.GenerateRuleFilesAsync();
|
||||
NotificationService.Notify(new NotificationMessage
|
||||
{
|
||||
Severity = NotificationSeverity.Success,
|
||||
Summary = $"Success",
|
||||
Detail = $"Rule files generated successfully",
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
protected async Task EditRow(CoreRule args)
|
||||
{
|
||||
await DialogService.OpenAsync<EditCoreRule>("Edit CoreRule", new Dictionary<string, object> { {"ID", args.ID} });
|
||||
}
|
||||
|
||||
protected async Task GridDeleteButtonClick(MouseEventArgs args, CoreRule coreRule)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (await DialogService.Confirm("Are you sure you want to delete this record?") == true)
|
||||
{
|
||||
var deleteResult = await RulesService.DeleteCoreRule(coreRule.ID);
|
||||
|
||||
if (deleteResult != null)
|
||||
{
|
||||
await grid0.Reload();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
NotificationService.Notify(new NotificationMessage
|
||||
{
|
||||
Severity = NotificationSeverity.Error,
|
||||
Summary = $"Error",
|
||||
Detail = $"Unable to delete CoreRule"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected CoreRule coreRuleChild;
|
||||
protected async Task GetChildData(CoreRule args)
|
||||
{
|
||||
coreRuleChild = args;
|
||||
var CoreRuleCriteriaResult = await RulesService.GetCoreRuleCriteria(new Query { Filter = $@"i => i.RuleID == {args.ID}", Expand = "CoreRule" });
|
||||
if (CoreRuleCriteriaResult != null)
|
||||
{
|
||||
args.CoreRuleCriteria = CoreRuleCriteriaResult.ToList();
|
||||
}
|
||||
var CoreRuleCriteriaOperatorsResult = await RulesService.GetCoreRuleCriteriaOperators(new Query { Filter = $@"i => i.RuleID == {args.ID}", Expand = "CoreRule" });
|
||||
if (CoreRuleCriteriaOperatorsResult != null)
|
||||
{
|
||||
args.CoreRuleCriteriaOperators = CoreRuleCriteriaOperatorsResult.ToList();
|
||||
}
|
||||
}
|
||||
protected CoreRuleCriterion coreRuleCriterionCoreRuleCriteria;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleIDCoreRuleCriteria;
|
||||
|
||||
protected RadzenDataGrid<CoreRuleCriterion> CoreRuleCriteriaDataGrid;
|
||||
|
||||
protected async Task CoreRuleCriteriaAddButtonClick(MouseEventArgs args, CoreRule data)
|
||||
{
|
||||
|
||||
var dialogResult = await DialogService.OpenAsync<AddCoreRuleCriterion>("Add CoreRuleCriteria", new Dictionary<string, object> { {"RuleID" , data.ID} }, new DialogOptions
|
||||
{
|
||||
Width = "70%"
|
||||
});
|
||||
|
||||
await GetChildData(data);
|
||||
await CoreRuleCriteriaDataGrid.Reload();
|
||||
|
||||
}
|
||||
|
||||
protected async Task CoreRuleCriteriaRowSelect(CoreRuleCriterion args, CoreRule data)
|
||||
{
|
||||
var dialogResult = await DialogService.OpenAsync<EditCoreRuleCriterion>("Edit CoreRuleCriteria", new Dictionary<string, object> { {"ID", args.ID} });
|
||||
await GetChildData(data);
|
||||
await CoreRuleCriteriaDataGrid.Reload();
|
||||
}
|
||||
|
||||
protected async Task CoreRuleCriteriaDeleteButtonClick(MouseEventArgs args, CoreRuleCriterion coreRuleCriterion)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (await DialogService.Confirm("Are you sure you want to delete this record?") == true)
|
||||
{
|
||||
var deleteResult = await RulesService.DeleteCoreRuleCriterion(coreRuleCriterion.ID);
|
||||
|
||||
await GetChildData(coreRuleChild);
|
||||
|
||||
if (deleteResult != null)
|
||||
{
|
||||
await CoreRuleCriteriaDataGrid.Reload();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
NotificationService.Notify(new NotificationMessage
|
||||
{
|
||||
Severity = NotificationSeverity.Error,
|
||||
Summary = $"Error",
|
||||
Detail = $"Unable to delete CoreRuleCriterion"
|
||||
});
|
||||
}
|
||||
}
|
||||
protected CoreRuleCriteriaOperator coreRuleCriteriaOperatorCoreRuleCriteriaOperators;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleIDCoreRuleCriteriaOperators;
|
||||
|
||||
protected RadzenDataGrid<CoreRuleCriteriaOperator> CoreRuleCriteriaOperatorsDataGrid;
|
||||
|
||||
protected async Task CoreRuleCriteriaOperatorsAddButtonClick(MouseEventArgs args, CoreRule data)
|
||||
{
|
||||
|
||||
var dialogResult = await DialogService.OpenAsync<AddCoreRuleCriteriaOperator>("Add CoreRuleCriteriaOperators", new Dictionary<string, object> { {"RuleID" , data.ID} });
|
||||
await GetChildData(data);
|
||||
await CoreRuleCriteriaOperatorsDataGrid.Reload();
|
||||
|
||||
}
|
||||
|
||||
protected async Task CoreRuleCriteriaOperatorsRowSelect(CoreRuleCriteriaOperator args, CoreRule data)
|
||||
{
|
||||
var dialogResult = await DialogService.OpenAsync<EditCoreRuleCriteriaOperator>("Edit CoreRuleCriteriaOperators", new Dictionary<string, object> { {"ID", args.ID} });
|
||||
await GetChildData(data);
|
||||
await CoreRuleCriteriaOperatorsDataGrid.Reload();
|
||||
}
|
||||
|
||||
protected async Task CoreRuleCriteriaOperatorsDeleteButtonClick(MouseEventArgs args, CoreRuleCriteriaOperator coreRuleCriteriaOperator)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (await DialogService.Confirm("Are you sure you want to delete this record?") == true)
|
||||
{
|
||||
var deleteResult = await RulesService.DeleteCoreRuleCriteriaOperator(coreRuleCriteriaOperator.ID);
|
||||
|
||||
await GetChildData(coreRuleChild);
|
||||
|
||||
if (deleteResult != null)
|
||||
{
|
||||
await CoreRuleCriteriaOperatorsDataGrid.Reload();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
NotificationService.Notify(new NotificationMessage
|
||||
{
|
||||
Severity = NotificationSeverity.Error,
|
||||
Summary = $"Error",
|
||||
Detail = $"Unable to delete CoreRuleCriteriaOperator"
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -1,203 +0,0 @@
|
||||
@page "/edit-core-rule"
|
||||
@using ILoan.Tools.Domain.Entities
|
||||
|
||||
<PageTitle>Edit CoreRule</PageTitle>
|
||||
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRule</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRule" Data="@coreRule" Visible="@(coreRule != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule ID" Component="RuleId" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.ID" Name="RuleId" />
|
||||
<RadzenRequiredValidator Component="RuleId" Text="Rule id is required" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule Name" Component="RuleName" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.RuleName" Name="RuleName"/>
|
||||
<RadzenRequiredValidator Component="RuleName" Text="RuleName is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Source" Component="Source" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.Source" Name="Source"/>
|
||||
<RadzenRequiredValidator Component="Source" Text="Source is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Default Threshold" Component="DefaultThreshold" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.DefaultThreshold" Name="DefaultThreshold"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Blocked" Component="Blocked" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.Blocked" Name="Blocked"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Triggers Manual Review" Component="TriggersManualReview" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.TriggersManualReview" Name="TriggersManualReview"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Suggested Resolution" Component="SuggestedResolution" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.SuggestedResolution" Name="SuggestedResolution"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Trigger Reason" Component="TriggerReason" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.TriggerReason" Name="TriggerReason"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Use Last Record" Component="UseLastRecord" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRule.UseLastRecord" Name="UseLastRecord"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Applicant Type" Component="ApplicantType" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.ApplicantType" Name="ApplicantType"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Filter On Clickthrough" Component="FilterOnClickthrough" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.FilterOnClickthrough" Name="FilterOnClickthrough"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Run Before Status" Component="RunBeforeStatus" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.RunBeforeStatus" Name="RunBeforeStatus"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Display Section" Component="DisplaySection" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DisplaySection" Name="DisplaySection"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Warning Field" Component="WarningField" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.WarningField" Name="WarningField"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Rule Name" Component="DutchRuleName" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.DutchRuleName" Name="DutchRuleName"/>
|
||||
<RadzenRequiredValidator Component="DutchRuleName" Text="DutchRuleName is required"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Trigger Reason" Component="DutchTriggerReason" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchTriggerReason" Name="DutchTriggerReason"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Suggested Resolution" Component="DutchSuggestedResolution" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchSuggestedResolution" Name="DutchSuggestedResolution"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Filter On Clickthrough" Component="DutchFilterOnClickthrough" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.DutchFilterOnClickthrough" Name="DutchFilterOnClickthrough"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Rule Explanation" Component="RuleExplanation" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.RuleExplanation" Name="RuleExplanation"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Dutch Rule Explanation" Component="DutchRuleExplanation" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextArea style="display: block; width: 100%" @bind-Value="@coreRule.DutchRuleExplanation" Name="DutchRuleExplanation"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Work Item Id" Component="WorkItemId" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.WorkItemId" Name="WorkItemId"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Title" Component="Title" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRule.Title" Name="Title"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="update" Component="Update" style="width: 100%"/>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRule.Update" Name="Update"/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat"/>
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick"/>
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,53 +0,0 @@
|
||||
namespace ILoan.Tools.Application.Pages;
|
||||
|
||||
public partial class EditCoreRule
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int ID { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
coreRule = await RulesService.GetCoreRuleById(ID);
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRule coreRule;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
coreRule.Update += 1;
|
||||
await RulesService.UpdateCoreRule(ID, coreRule);
|
||||
DialogService.Close(coreRule);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
@page "/edit-core-rule-criteria-operator"
|
||||
|
||||
<PageTitle>Edit CoreRuleCriteriaOperator</PageTitle>
|
||||
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRuleCriteriaOperator</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRuleCriteriaOperator" Data="@coreRuleCriteriaOperator" Visible="@(coreRuleCriteriaOperator != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Core Rule" Component="CoreRule" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown Data="@coreRulesForRuleID" TextProperty="RuleName" ValueProperty="ID" AllowClear=true
|
||||
Disabled=@(hasRuleIDValue) Placeholder="Choose CoreRule" style="display: block; width: 100%" @bind-Value="@coreRuleCriteriaOperator.RuleID" Name="RuleID"
|
||||
/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Operator1" Component="Operator1" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriteriaOperator.Operator1" Name="Operator1" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="update" Component="Update" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRuleCriteriaOperator.Update" Name="Update" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat" />
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick" />
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,81 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages
|
||||
{
|
||||
public partial class EditCoreRuleCriteriaOperator
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int ID { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
coreRuleCriteriaOperator = await RulesService.GetCoreRuleCriteriaOperatorById(ID);
|
||||
|
||||
coreRulesForRuleID = await RulesService.GetCoreRules();
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRuleCriteriaOperator coreRuleCriteriaOperator;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleID;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
coreRuleCriteriaOperator.Update += 1;
|
||||
await RulesService.UpdateCoreRuleCriteriaOperator(ID, coreRuleCriteriaOperator);
|
||||
DialogService.Close(coreRuleCriteriaOperator);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool hasRuleIDValue;
|
||||
|
||||
[Parameter]
|
||||
public int? RuleID { get; set; }
|
||||
public override async Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
coreRuleCriteriaOperator = new CoreRuleCriteriaOperator();
|
||||
|
||||
hasRuleIDValue = parameters.TryGetValue<int?>("RuleID", out var hasRuleIDResult);
|
||||
|
||||
if (hasRuleIDValue)
|
||||
{
|
||||
coreRuleCriteriaOperator.RuleID = hasRuleIDResult;
|
||||
}
|
||||
await base.SetParametersAsync(parameters);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
@page "/edit-core-rule-criterion"
|
||||
|
||||
<PageTitle>Edit CoreRuleCriterion</PageTitle>
|
||||
|
||||
<RadzenColumn SizeMD=12>
|
||||
<RadzenAlert Shade="Shade.Lighter" Variant="Variant.Flat" Size="AlertSize.Small" AlertStyle="AlertStyle.Danger" Visible="@errorVisible">Cannot save CoreRuleCriterion</RadzenAlert>
|
||||
<RadzenTemplateForm TItem="CoreRuleCriterion" Data="@coreRuleCriterion" Visible="@(coreRuleCriterion != null)" Submit="@FormSubmit">
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Core Rule" Component="CoreRule" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown Data="@coreRulesForRuleID" TextProperty="RuleName" ValueProperty="ID" AllowClear=true
|
||||
Disabled=@(hasRuleIDValue) Placeholder="Choose CoreRule" style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.RuleID" Name="RuleID"
|
||||
/>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Property" Component="Property" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown TValue="string" Data="@Properties" @bind-Value="@coreRuleCriterion.Property" AllowClear=true
|
||||
Placeholder="Choose property" style="display: block; width: 100%" Name="Property" />
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.Property" Name="Value" class="rz-pa-1" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Comparison" Component="Comparison" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenDropDown TValue="string" Data="@Comparisons" @bind-Value="@coreRuleCriterion.Comparison" AllowClear=true
|
||||
Placeholder="Choose comparer" style="display: block; width: 100%" Name="Comparison" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Value" Component="Value" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenTextBox style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.Value" Name="Value" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Value Is Property" Component="ValueIsProperty" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.ValueIsProperty" Name="ValueIsProperty" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Return Count" Component="ReturnCount" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.ReturnCount" Name="ReturnCount" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="Is Threshold Criterium" Component="IsThresholdCriterium" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenCheckBox @bind-Value="@coreRuleCriterion.IsThresholdCriterium" Name="IsThresholdCriterium" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenRow style="margin-bottom: 1rem">
|
||||
<RadzenColumn SizeMD="3">
|
||||
<RadzenLabel Text="update" Component="Update" style="width: 100%" />
|
||||
</RadzenColumn>
|
||||
<RadzenColumn SizeMD="9">
|
||||
<RadzenNumeric style="display: block; width: 100%" @bind-Value="@coreRuleCriterion.Update" Name="Update" />
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
<RadzenStack Orientation="Orientation.Horizontal" AlignItems="AlignItems.Center" JustifyContent="JustifyContent.End" Gap="0.5rem">
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Primary" ButtonType="ButtonType.Submit" Icon="save" Text="Save" Variant="Variant.Flat" />
|
||||
<RadzenButton ButtonStyle="ButtonStyle.Light" Text="Cancel" Variant="Variant.Flat" Click="@CancelButtonClick" />
|
||||
</RadzenStack>
|
||||
</RadzenTemplateForm>
|
||||
</RadzenColumn>
|
||||
|
@ -1,87 +0,0 @@
|
||||
using ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
namespace ILoan.Tools.Application.Pages
|
||||
{
|
||||
public partial class EditCoreRuleCriterion
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
[Inject]
|
||||
public RulesService RulesService { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int ID { get; set; }
|
||||
|
||||
public List<string> Properties { get; set; }
|
||||
public List<string> Comparisons { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Properties = RulesService.GetProperties();
|
||||
Comparisons = RulesService.GetComparisons();
|
||||
|
||||
coreRuleCriterion = await RulesService.GetCoreRuleCriterionById(ID);
|
||||
|
||||
coreRulesForRuleID = await RulesService.GetCoreRules();
|
||||
}
|
||||
protected bool errorVisible;
|
||||
protected CoreRuleCriterion coreRuleCriterion;
|
||||
|
||||
protected IEnumerable<CoreRule> coreRulesForRuleID;
|
||||
|
||||
protected async Task FormSubmit()
|
||||
{
|
||||
try
|
||||
{
|
||||
coreRuleCriterion.Update += 1;
|
||||
await RulesService.UpdateCoreRuleCriterion(ID, coreRuleCriterion);
|
||||
DialogService.Close(coreRuleCriterion);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorVisible = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task CancelButtonClick(MouseEventArgs args)
|
||||
{
|
||||
DialogService.Close(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool hasRuleIDValue;
|
||||
|
||||
[Parameter]
|
||||
public int? RuleID { get; set; }
|
||||
public override async Task SetParametersAsync(ParameterView parameters)
|
||||
{
|
||||
coreRuleCriterion = new CoreRuleCriterion();
|
||||
|
||||
hasRuleIDValue = parameters.TryGetValue<int?>("RuleID", out var hasRuleIDResult);
|
||||
|
||||
if (hasRuleIDValue)
|
||||
{
|
||||
coreRuleCriterion.RuleID = hasRuleIDResult;
|
||||
}
|
||||
await base.SetParametersAsync(parameters);
|
||||
}
|
||||
}
|
||||
}
|
@ -21,13 +21,13 @@
|
||||
</RadzenBody>
|
||||
<RadzenSidebar Expanded="@sidebarExpanded" style="z-index: 2">
|
||||
<RadzenStack AlignItems="Radzen.AlignItems.Center" class="rz-py-4 rz-py-lg-6" Style="padding: var(--rz-panel-menu-item-padding); border-bottom: var(--rz-panel-menu-item-border);">
|
||||
<RadzenText Text="iLoan.Tools" TextStyle="Radzen.Blazor.TextStyle.Subtitle1" class="rz-mb-0" style="color: var(--rz-sidebar-color);" />
|
||||
<RadzenText Text="iLoan.Rules.Web" TextStyle="Radzen.Blazor.TextStyle.Subtitle1" class="rz-mb-0" style="color: var(--rz-sidebar-color);" />
|
||||
</RadzenStack>
|
||||
<RadzenPanelMenu>
|
||||
<RadzenPanelMenuItem Text="Rules" Path="" />
|
||||
<RadzenPanelMenuItem Text="Home" Path="" />
|
||||
</RadzenPanelMenu>
|
||||
<RadzenStack AlignItems="Radzen.AlignItems.Center" Gap="0" class="rz-py-4 rz-py-lg-6" Style="padding: var(--rz-panel-menu-item-padding);">
|
||||
<RadzenText Text="iLoan.Tools v1.0.0" TextStyle="Radzen.Blazor.TextStyle.Caption" TagName="Radzen.Blazor.TagName.P" TextAlign="Radzen.TextAlign.Center" />
|
||||
<RadzenText Text="iLoan.Rules.Web v1.0.0" TextStyle="Radzen.Blazor.TextStyle.Caption" TagName="Radzen.Blazor.TagName.P" TextAlign="Radzen.TextAlign.Center" />
|
||||
<RadzenText Text="Copyright Ⓒ 2024" TextStyle="Radzen.Blazor.TextStyle.Caption" class="rz-mb-0" TagName="Radzen.Blazor.TagName.P" TextAlign="Radzen.TextAlign.Center" />
|
||||
</RadzenStack>
|
||||
</RadzenSidebar>
|
42
src/iLoan.Rules.Web/Components/Layout/MainLayout.razor.cs
Normal file
42
src/iLoan.Rules.Web/Components/Layout/MainLayout.razor.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System.Net.Http;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Microsoft.AspNetCore.Components.Routing;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Virtualization;
|
||||
using Microsoft.JSInterop;
|
||||
using Radzen;
|
||||
using Radzen.Blazor;
|
||||
|
||||
namespace ILoan.Rules.Web.Components.Layout
|
||||
{
|
||||
public partial class MainLayout
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
|
||||
private bool sidebarExpanded = true;
|
||||
|
||||
void SidebarToggleClick()
|
||||
{
|
||||
sidebarExpanded = !sidebarExpanded;
|
||||
}
|
||||
}
|
||||
}
|
31
src/iLoan.Rules.Web/Components/Pages/Index.razor
Normal file
31
src/iLoan.Rules.Web/Components/Pages/Index.razor
Normal file
@ -0,0 +1,31 @@
|
||||
@page "/"
|
||||
<PageTitle>Index</PageTitle>
|
||||
<RadzenRow Gap="5" RowGap="5">
|
||||
<RadzenColumn Size="12">
|
||||
<RadzenText Text="Welcome to your new app" TextStyle="Radzen.Blazor.TextStyle.DisplayH2" TagName="Radzen.Blazor.TagName.Auto"></RadzenText>
|
||||
<RadzenText Text="Your Success Is Our Biggest Priority" TextStyle="Radzen.Blazor.TextStyle.H4" TagName="Radzen.Blazor.TagName.H2" class="mt-5"></RadzenText>
|
||||
<RadzenText Text="With Radzen Blazor Studio, application development is just one-click away." TextStyle="Radzen.Blazor.TextStyle.Body1" TagName="Radzen.Blazor.TagName.Auto" class="mt-4" Style="font-size: 20px; line-height: 24px"></RadzenText>
|
||||
<RadzenText Text="Simple to setup, maintain and update." TextStyle="Radzen.Blazor.TextStyle.Body1" TagName="Radzen.Blazor.TagName.Auto" class="mt-3" Style="font-size: 20px; line-height: 24px"></RadzenText>
|
||||
<RadzenCard Style="margin-top: 40px; padding: 20px 40px 40px;">
|
||||
<RadzenRow>
|
||||
<RadzenColumn Size="12" SizeMD="4">
|
||||
<RadzenIcon Icon="smart_button" Style="margin-top: 20px; width: 48px; height: 48px; font-size: 48px; color: var(--rz-text-title-color);"></RadzenIcon>
|
||||
<RadzenText Text="Learn the Fundamentals" TextStyle="Radzen.Blazor.TextStyle.DisplayH6" TagName="Radzen.Blazor.TagName.H3"></RadzenText>
|
||||
<RadzenLink Text="Docs" Path="https://www.radzen.com/blazor-studio/documentation/" Icon="east" Target="_blank" Style="font-size: 18px"></RadzenLink>
|
||||
<RadzenLink Text="Videos" Path="https://youtube.com/playlist?list=PLQyJPeb3xHcBij_RbHD__2TOo8Jv5HQVc" Icon="east" Target="_blank" Style="display: block; font-size: 18px"></RadzenLink>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="12" SizeMD="4">
|
||||
<RadzenIcon Icon="code" Style="margin-top: 20px; width: 48px; height: 48px; font-size: 48px; color: var(--rz-text-title-color);"></RadzenIcon>
|
||||
<RadzenText Text="Radzen Blazor Components" TextStyle="Radzen.Blazor.TextStyle.DisplayH6" TagName="Radzen.Blazor.TagName.H3"></RadzenText>
|
||||
<RadzenLink Text="Demos" Path="https://blazor.radzen.com" Icon="east" Target="_blank" Style="font-size: 18px"></RadzenLink>
|
||||
</RadzenColumn>
|
||||
<RadzenColumn Size="12" SizeMD="4">
|
||||
<RadzenIcon Icon="people_outline" Style="margin-top: 20px; width: 48px; height: 48px; font-size: 48px; color: var(--rz-text-title-color);"></RadzenIcon>
|
||||
<RadzenText Text="Radzen Community" TextStyle="Radzen.Blazor.TextStyle.DisplayH6" TagName="Radzen.Blazor.TagName.H3"></RadzenText>
|
||||
<RadzenLink Text="Radzen Blazor Studio Forums" Path="https://forum.radzen.com/c/radzen-blazor-studio/12" Icon="east" Target="_blank" Style="font-size: 18px"></RadzenLink>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
</RadzenCard>
|
||||
</RadzenColumn>
|
||||
</RadzenRow>
|
||||
|
35
src/iLoan.Rules.Web/Components/Pages/Index.razor.cs
Normal file
35
src/iLoan.Rules.Web/Components/Pages/Index.razor.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using System.Net.Http;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Microsoft.AspNetCore.Components.Routing;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.AspNetCore.Components.Web.Virtualization;
|
||||
using Microsoft.JSInterop;
|
||||
using Radzen;
|
||||
using Radzen.Blazor;
|
||||
|
||||
namespace ILoan.Rules.Web.Components.Pages
|
||||
{
|
||||
public partial class Index
|
||||
{
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected DialogService DialogService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected TooltipService TooltipService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ContextMenuService ContextMenuService { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected NotificationService NotificationService { get; set; }
|
||||
}
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
@using Radzen
|
||||
@using Radzen.Blazor
|
||||
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||
@using ILoan.Tools
|
||||
@using ILoan.Tools.Application
|
||||
@using ILoan.Tools.Application.Layout
|
||||
@using ILoan.Rules.Web
|
||||
@using ILoan.Rules.Web.Components
|
||||
@using ILoan.Rules.Web.Components.Layout
|
243
src/iLoan.Rules.Web/Controllers/ReportController.cs
Normal file
243
src/iLoan.Rules.Web/Controllers/ReportController.cs
Normal file
@ -0,0 +1,243 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Extensions;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace ILoan.Rules.Web.Controllers
|
||||
{
|
||||
public partial class ReportController : Controller
|
||||
{
|
||||
[HttpGet("/__ssrsreport")]
|
||||
public async Task Get(string url)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(url))
|
||||
{
|
||||
using (var httpClient = CreateHttpClient())
|
||||
{
|
||||
var responseMessage = await ForwardRequest(httpClient, Request, url);
|
||||
|
||||
CopyResponseHeaders(responseMessage, Response);
|
||||
|
||||
await WriteResponse(Request, url, responseMessage, Response, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Route("/ssrsproxy/{*url}")]
|
||||
public async Task Proxy()
|
||||
{
|
||||
var urlToReplace = String.Format("{0}://{1}{2}/{3}/", Request.Scheme, Request.Host.Value, Request.PathBase, "ssrsproxy");
|
||||
var requestedUrl = Request.GetDisplayUrl().Replace(urlToReplace, "", StringComparison.InvariantCultureIgnoreCase);
|
||||
var reportServerIndex = requestedUrl.IndexOf("/ReportServer", StringComparison.InvariantCultureIgnoreCase);
|
||||
if (reportServerIndex == -1)
|
||||
{
|
||||
reportServerIndex = requestedUrl.IndexOf("/Reports", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
var reportUrlParts = requestedUrl.Substring(0, reportServerIndex).Split('/');
|
||||
|
||||
var url = String.Format("{0}://{1}:{2}{3}", reportUrlParts[0], reportUrlParts[1], reportUrlParts[2],
|
||||
requestedUrl.Substring(reportServerIndex, requestedUrl.Length - reportServerIndex));
|
||||
|
||||
using (var httpClient = CreateHttpClient())
|
||||
{
|
||||
var responseMessage = await ForwardRequest(httpClient, Request, url);
|
||||
|
||||
CopyResponseHeaders(responseMessage, Response);
|
||||
|
||||
if (Request.Method == "POST")
|
||||
{
|
||||
await WriteResponse(Request, url, responseMessage, Response, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (responseMessage.Content.Headers.ContentType != null && responseMessage.Content.Headers.ContentType.MediaType == "text/html")
|
||||
{
|
||||
await WriteResponse(Request, url, responseMessage, Response, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var responseStream = await responseMessage.Content.ReadAsStreamAsync())
|
||||
{
|
||||
await responseStream.CopyToAsync(Response.Body, 81920, HttpContext.RequestAborted);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnHttpClientHandlerCreate(ref HttpClientHandler handler);
|
||||
|
||||
private HttpClient CreateHttpClient()
|
||||
{
|
||||
var httpClientHandler = new HttpClientHandler();
|
||||
|
||||
httpClientHandler.AllowAutoRedirect = true;
|
||||
httpClientHandler.UseDefaultCredentials = true;
|
||||
|
||||
if (httpClientHandler.SupportsAutomaticDecompression)
|
||||
{
|
||||
httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
|
||||
}
|
||||
|
||||
OnHttpClientHandlerCreate(ref httpClientHandler);
|
||||
|
||||
return new HttpClient(httpClientHandler);
|
||||
}
|
||||
|
||||
partial void OnReportRequest(ref HttpRequestMessage requestMessage);
|
||||
|
||||
async Task<HttpResponseMessage> ForwardRequest(HttpClient httpClient, HttpRequest currentReqest, string url)
|
||||
{
|
||||
var proxyRequestMessage = new HttpRequestMessage(new HttpMethod(currentReqest.Method), url);
|
||||
|
||||
foreach (var header in currentReqest.Headers)
|
||||
{
|
||||
if (header.Key != "Host")
|
||||
{
|
||||
proxyRequestMessage.Headers.TryAddWithoutValidation(header.Key, new string[] { header.Value });
|
||||
}
|
||||
}
|
||||
|
||||
this.OnReportRequest(ref proxyRequestMessage);
|
||||
|
||||
if (currentReqest.Method == "POST")
|
||||
{
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
await currentReqest.Body.CopyToAsync(stream);
|
||||
stream.Position = 0;
|
||||
|
||||
string body = new StreamReader(stream).ReadToEnd();
|
||||
proxyRequestMessage.Content = new StringContent(body);
|
||||
|
||||
if (body.IndexOf("AjaxScriptManager") != -1)
|
||||
{
|
||||
proxyRequestMessage.Content.Headers.Remove("Content-Type");
|
||||
proxyRequestMessage.Content.Headers.Add("Content-Type", new string[] { currentReqest.ContentType });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return await httpClient.SendAsync(proxyRequestMessage);
|
||||
}
|
||||
|
||||
static void CopyResponseHeaders(HttpResponseMessage responseMessage, HttpResponse response)
|
||||
{
|
||||
response.StatusCode = (int)responseMessage.StatusCode;
|
||||
foreach (var header in responseMessage.Headers)
|
||||
{
|
||||
response.Headers[header.Key] = header.Value.ToArray();
|
||||
}
|
||||
|
||||
foreach (var header in responseMessage.Content.Headers)
|
||||
{
|
||||
response.Headers[header.Key] = header.Value.ToArray();
|
||||
}
|
||||
|
||||
response.Headers.Remove("transfer-encoding");
|
||||
}
|
||||
|
||||
static async Task WriteResponse(HttpRequest currentReqest, string url, HttpResponseMessage responseMessage, HttpResponse response, bool isAjax)
|
||||
{
|
||||
var result = await responseMessage.Content.ReadAsStringAsync();
|
||||
|
||||
var ReportServer = url.Contains("/ReportServer/", StringComparison.InvariantCultureIgnoreCase) ? "ReportServer" : "Reports";
|
||||
|
||||
var reportUri = new Uri(url);
|
||||
var proxyUrl = String.Format("{0}://{1}{2}/ssrsproxy/{3}/{4}/{5}", currentReqest.Scheme, currentReqest.Host.Value, currentReqest.PathBase,
|
||||
reportUri.Scheme, reportUri.Host, reportUri.Port);
|
||||
|
||||
if (isAjax && result.IndexOf("|") != -1)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
|
||||
var delimiterIndex = 0;
|
||||
var length = 0;
|
||||
var index = 0;
|
||||
|
||||
var type = "";
|
||||
var id = "";
|
||||
var content = "";
|
||||
|
||||
while (index < result.Length)
|
||||
{
|
||||
delimiterIndex = result.IndexOf("|", index);
|
||||
if (delimiterIndex == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
length = int.Parse(result.Substring(index, delimiterIndex - index));
|
||||
if ((length % 1) != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
index = delimiterIndex + 1;
|
||||
delimiterIndex = result.IndexOf("|", index);
|
||||
if (delimiterIndex == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
type = result.Substring(index, delimiterIndex - index);
|
||||
index = delimiterIndex + 1;
|
||||
delimiterIndex = result.IndexOf("|", index);
|
||||
if (delimiterIndex == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
id = result.Substring(index, delimiterIndex - index);
|
||||
index = delimiterIndex + 1;
|
||||
if ((index + length) >= result.Length)
|
||||
{
|
||||
break;
|
||||
}
|
||||
content = result.Substring(index, length);
|
||||
index += length;
|
||||
if (result.Substring(index, 1) != "|")
|
||||
{
|
||||
break;
|
||||
}
|
||||
index++;
|
||||
|
||||
content = content.Replace($"/{ReportServer}/", $"{proxyUrl}/{ReportServer}/", StringComparison.InvariantCultureIgnoreCase);
|
||||
if (content.Contains("./ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
content = content.Replace("./ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
else
|
||||
{
|
||||
content = content.Replace("ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
|
||||
builder.Append(String.Format("{0}|{1}|{2}|{3}|", content.Length, type, id, content));
|
||||
}
|
||||
|
||||
result = builder.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = result.Replace($"/{ReportServer}/", $"{proxyUrl}/{ReportServer}/", StringComparison.InvariantCultureIgnoreCase);
|
||||
|
||||
if (result.Contains("./ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
result = result.Replace("./ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = result.Replace("ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
||||
response.Headers.Remove("Content-Length");
|
||||
response.Headers.Append("Content-Length", new string[] { System.Text.Encoding.UTF8.GetByteCount(result).ToString() });
|
||||
|
||||
await response.WriteAsync(result);
|
||||
}
|
||||
}
|
||||
}
|
88
src/iLoan.Rules.Web/Controllers/UploadController.cs
Normal file
88
src/iLoan.Rules.Web/Controllers/UploadController.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
|
||||
namespace ILoan.Rules.Web.Controllers
|
||||
{
|
||||
public partial class UploadController : Controller
|
||||
{
|
||||
private readonly IWebHostEnvironment environment;
|
||||
|
||||
public UploadController(IWebHostEnvironment environment)
|
||||
{
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
// Single file upload
|
||||
[HttpPost("upload/single")]
|
||||
public IActionResult Single(IFormFile file)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Put your code here
|
||||
return StatusCode(200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
// Multiple files upload
|
||||
[HttpPost("upload/multiple")]
|
||||
public IActionResult Multiple(IFormFile[] files)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Put your code here
|
||||
return StatusCode(200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
// Multiple files upload with parameter
|
||||
[HttpPost("upload/{id}")]
|
||||
public IActionResult Post(IFormFile[] files, int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Put your code here
|
||||
return StatusCode(200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
// Image file upload (used by HtmlEditor components)
|
||||
[HttpPost("upload/image")]
|
||||
public IActionResult Image(IFormFile file)
|
||||
{
|
||||
try
|
||||
{
|
||||
var fileName = $"{Guid.NewGuid()}{Path.GetExtension(file.FileName)}";
|
||||
|
||||
using (var stream = new FileStream(Path.Combine(environment.WebRootPath, fileName), FileMode.Create))
|
||||
{
|
||||
// Save the file
|
||||
file.CopyTo(stream);
|
||||
|
||||
// Return the URL of the file
|
||||
var url = Url.Content($"~/{fileName}");
|
||||
|
||||
return Ok(new { Url = url });
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,61 +0,0 @@
|
||||
namespace ILoan.Tools.Domain.Entities;
|
||||
|
||||
[Table("Core_Rules", Schema = "core")]
|
||||
public partial class CoreRule
|
||||
{
|
||||
[Key]
|
||||
public int ID { get; set; }
|
||||
|
||||
[Required]
|
||||
public string RuleName { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Source { get; set; }
|
||||
|
||||
public decimal? DefaultThreshold { get; set; }
|
||||
|
||||
public bool Blocked { get; set; }
|
||||
|
||||
public bool TriggersManualReview { get; set; }
|
||||
|
||||
public string SuggestedResolution { get; set; }
|
||||
|
||||
public string TriggerReason { get; set; }
|
||||
|
||||
public bool? UseLastRecord { get; set; }
|
||||
|
||||
public string ApplicantType { get; set; }
|
||||
|
||||
public string FilterOnClickthrough { get; set; }
|
||||
|
||||
public string RunBeforeStatus { get; set; }
|
||||
|
||||
public string DisplaySection { get; set; }
|
||||
|
||||
public string WarningField { get; set; }
|
||||
|
||||
[Required]
|
||||
public string DutchRuleName { get; set; }
|
||||
|
||||
public string DutchTriggerReason { get; set; }
|
||||
|
||||
public string DutchSuggestedResolution { get; set; }
|
||||
|
||||
public string DutchFilterOnClickthrough { get; set; }
|
||||
|
||||
public string RuleExplanation { get; set; }
|
||||
|
||||
public string DutchRuleExplanation { get; set; }
|
||||
|
||||
public int? WorkItemId { get; set; }
|
||||
|
||||
public string Title { get; set; }
|
||||
|
||||
public int Update { get; set; }
|
||||
|
||||
public string Scope { get; set; }
|
||||
|
||||
public ICollection<CoreRuleCriterion> CoreRuleCriteria { get; set; } = [];
|
||||
|
||||
public ICollection<CoreRuleCriteriaOperator> CoreRuleCriteriaOperators { get; set; } = [];
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
namespace ILoan.Tools.Domain.Entities;
|
||||
|
||||
[Table("Core_RuleCriteriaOperator", Schema = "core")]
|
||||
public partial class CoreRuleCriteriaOperator
|
||||
{
|
||||
[Key]
|
||||
public int ID { get; set; }
|
||||
|
||||
public int? RuleID { get; set; }
|
||||
|
||||
public CoreRule CoreRule { get; set; }
|
||||
|
||||
[Column("Operator")]
|
||||
public string Operator1 { get; set; }
|
||||
|
||||
|
||||
public int Update { get; set; } = 0;
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
namespace ILoan.Tools.Domain.Entities;
|
||||
|
||||
[Table("Core_RuleCriteria", Schema = "core")]
|
||||
public partial class CoreRuleCriterion
|
||||
{
|
||||
[Key]
|
||||
public int ID { get; set; }
|
||||
|
||||
public int? RuleID { get; set; }
|
||||
|
||||
public CoreRule CoreRule { get; set; }
|
||||
|
||||
public string Property { get; set; }
|
||||
|
||||
public string Comparison { get; set; }
|
||||
|
||||
public string Value { get; set; }
|
||||
|
||||
public bool? ValueIsProperty { get; set; }
|
||||
|
||||
public bool? ReturnCount { get; set; }
|
||||
|
||||
public bool? IsThresholdCriterium { get; set; }
|
||||
|
||||
|
||||
public int Update { get; set; }
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
namespace ILoan.Tools.Domain.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// The comparison to apply to the rule value.
|
||||
/// </summary>
|
||||
[Description("The comparison to apply to the rule value")]
|
||||
public enum RuleComparison
|
||||
{
|
||||
/// <summary>
|
||||
/// The rule should contain a value.
|
||||
/// </summary>
|
||||
[Display(Name = "contains")]
|
||||
Contains,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should not contain a value.
|
||||
/// </summary>
|
||||
[Display(Name = "does not contain")]
|
||||
DoesNotContain,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should start with a value.
|
||||
/// </summary>
|
||||
[Display(Name = "starts with")]
|
||||
StartsWith,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should not start with a value.
|
||||
/// </summary>
|
||||
[Display(Name = "does not start with")]
|
||||
DoesNotStartWith,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should be lower than a value.
|
||||
/// </summary>
|
||||
[Display(Name = "lower than")]
|
||||
LowerThan,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should be lower than or equal to a value.
|
||||
/// </summary>
|
||||
[Display(Name = "lower than or equal to")]
|
||||
LowerThanOrEqualTo,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should be greater than a value.
|
||||
/// </summary>
|
||||
[Display(Name = "greater than")]
|
||||
GreaterThan,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should be greater than or equal to a value.
|
||||
/// </summary>
|
||||
[Display(Name = "greater than or equal to")]
|
||||
GreaterThanOrEqualTo,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should be equal to a value.
|
||||
/// </summary>
|
||||
[Display(Name = "is")]
|
||||
Is,
|
||||
|
||||
/// <summary>
|
||||
/// The rule should not be equal to a value.
|
||||
/// </summary>
|
||||
[Display(Name = "is not")]
|
||||
IsNot,
|
||||
|
||||
/// <summary>
|
||||
/// The rule value should be similar to a value.
|
||||
/// </summary>
|
||||
[Display(Name = "similar to")]
|
||||
SimilarTo
|
||||
}
|
||||
|
@ -1,210 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using ILoan.Tools.Domain;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ILoan.Tools.Domain.Migrations
|
||||
{
|
||||
[DbContext(typeof(RulesContext))]
|
||||
[Migration("20240708140259_CreateToolsSchema")]
|
||||
partial class CreateToolsSchema
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "8.0.6");
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRule", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("ApplicantType")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("Blocked")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<decimal?>("DefaultThreshold")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DisplaySection")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchFilterOnClickthrough")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchRuleExplanation")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchRuleName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchSuggestedResolution")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchTriggerReason")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("FilterOnClickthrough")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RuleExplanation")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RuleName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RunBeforeStatus")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Scope")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Source")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("SuggestedResolution")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("TriggerReason")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("TriggersManualReview")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<bool?>("UseLastRecord")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("true");
|
||||
|
||||
b.Property<string>("WarningField")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("WorkItemId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.ToTable("Core_Rules", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_Rules_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriteriaOperator", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Operator1")
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("Operator");
|
||||
|
||||
b.Property<int?>("RuleID")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.HasIndex("RuleID");
|
||||
|
||||
b.ToTable("Core_RuleCriteriaOperator", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_RuleCriteriaOperator_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriterion", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Comparison")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("IsThresholdCriterium")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.Property<string>("Property")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("ReturnCount")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.Property<int?>("RuleID")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Value")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("ValueIsProperty")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.HasIndex("RuleID");
|
||||
|
||||
b.ToTable("Core_RuleCriteria", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_RuleCriteria_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriteriaOperator", b =>
|
||||
{
|
||||
b.HasOne("ILoan.Tools.Domain.Entities.CoreRule", "CoreRule")
|
||||
.WithMany("CoreRuleCriteriaOperators")
|
||||
.HasForeignKey("RuleID");
|
||||
|
||||
b.Navigation("CoreRule");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriterion", b =>
|
||||
{
|
||||
b.HasOne("ILoan.Tools.Domain.Entities.CoreRule", "CoreRule")
|
||||
.WithMany("CoreRuleCriteria")
|
||||
.HasForeignKey("RuleID");
|
||||
|
||||
b.Navigation("CoreRule");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRule", b =>
|
||||
{
|
||||
b.Navigation("CoreRuleCriteria");
|
||||
|
||||
b.Navigation("CoreRuleCriteriaOperators");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -1,130 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ILoan.Tools.Domain.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class CreateToolsSchema : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.EnsureSchema(
|
||||
name: "core");
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Core_Rules",
|
||||
schema: "core",
|
||||
columns: table => new
|
||||
{
|
||||
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
RuleName = table.Column<string>(type: "TEXT", nullable: false),
|
||||
Source = table.Column<string>(type: "TEXT", nullable: false),
|
||||
DefaultThreshold = table.Column<decimal>(type: "TEXT", nullable: true),
|
||||
Blocked = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||
TriggersManualReview = table.Column<bool>(type: "INTEGER", nullable: false),
|
||||
SuggestedResolution = table.Column<string>(type: "TEXT", nullable: true),
|
||||
TriggerReason = table.Column<string>(type: "TEXT", nullable: true),
|
||||
UseLastRecord = table.Column<bool>(type: "INTEGER", nullable: true, defaultValueSql: "true"),
|
||||
ApplicantType = table.Column<string>(type: "TEXT", nullable: true),
|
||||
FilterOnClickthrough = table.Column<string>(type: "TEXT", nullable: true),
|
||||
RunBeforeStatus = table.Column<string>(type: "TEXT", nullable: true),
|
||||
DisplaySection = table.Column<string>(type: "TEXT", nullable: true),
|
||||
WarningField = table.Column<string>(type: "TEXT", nullable: true),
|
||||
DutchRuleName = table.Column<string>(type: "TEXT", nullable: false),
|
||||
DutchTriggerReason = table.Column<string>(type: "TEXT", nullable: true),
|
||||
DutchSuggestedResolution = table.Column<string>(type: "TEXT", nullable: true),
|
||||
DutchFilterOnClickthrough = table.Column<string>(type: "TEXT", nullable: true),
|
||||
RuleExplanation = table.Column<string>(type: "TEXT", nullable: true),
|
||||
DutchRuleExplanation = table.Column<string>(type: "TEXT", nullable: true),
|
||||
WorkItemId = table.Column<int>(type: "INTEGER", nullable: true),
|
||||
Title = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Update = table.Column<int>(type: "INTEGER", nullable: false),
|
||||
Scope = table.Column<string>(type: "TEXT", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Core_Rules", x => x.ID);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Core_RuleCriteria",
|
||||
schema: "core",
|
||||
columns: table => new
|
||||
{
|
||||
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
RuleID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||
Property = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Comparison = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Value = table.Column<string>(type: "TEXT", nullable: true),
|
||||
ValueIsProperty = table.Column<bool>(type: "INTEGER", nullable: true, defaultValueSql: "false"),
|
||||
ReturnCount = table.Column<bool>(type: "INTEGER", nullable: true, defaultValueSql: "false"),
|
||||
IsThresholdCriterium = table.Column<bool>(type: "INTEGER", nullable: true, defaultValueSql: "false"),
|
||||
Update = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Core_RuleCriteria", x => x.ID);
|
||||
table.ForeignKey(
|
||||
name: "FK_Core_RuleCriteria_Core_Rules_RuleID",
|
||||
column: x => x.RuleID,
|
||||
principalSchema: "core",
|
||||
principalTable: "Core_Rules",
|
||||
principalColumn: "ID");
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Core_RuleCriteriaOperator",
|
||||
schema: "core",
|
||||
columns: table => new
|
||||
{
|
||||
ID = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
RuleID = table.Column<int>(type: "INTEGER", nullable: true),
|
||||
Operator = table.Column<string>(type: "TEXT", nullable: true),
|
||||
Update = table.Column<int>(type: "INTEGER", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Core_RuleCriteriaOperator", x => x.ID);
|
||||
table.ForeignKey(
|
||||
name: "FK_Core_RuleCriteriaOperator_Core_Rules_RuleID",
|
||||
column: x => x.RuleID,
|
||||
principalSchema: "core",
|
||||
principalTable: "Core_Rules",
|
||||
principalColumn: "ID");
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Core_RuleCriteria_RuleID",
|
||||
schema: "core",
|
||||
table: "Core_RuleCriteria",
|
||||
column: "RuleID");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_Core_RuleCriteriaOperator_RuleID",
|
||||
schema: "core",
|
||||
table: "Core_RuleCriteriaOperator",
|
||||
column: "RuleID");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Core_RuleCriteria",
|
||||
schema: "core");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Core_RuleCriteriaOperator",
|
||||
schema: "core");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Core_Rules",
|
||||
schema: "core");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,207 +0,0 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using ILoan.Tools.Domain;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ILoan.Tools.Domain.Migrations
|
||||
{
|
||||
[DbContext(typeof(RulesContext))]
|
||||
partial class RulesContextModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "8.0.6");
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRule", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("ApplicantType")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("Blocked")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<decimal?>("DefaultThreshold")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DisplaySection")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchFilterOnClickthrough")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchRuleExplanation")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchRuleName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchSuggestedResolution")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("DutchTriggerReason")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("FilterOnClickthrough")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RuleExplanation")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RuleName")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("RunBeforeStatus")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Scope")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Source")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("SuggestedResolution")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("Title")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<string>("TriggerReason")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("TriggersManualReview")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<bool?>("UseLastRecord")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("true");
|
||||
|
||||
b.Property<string>("WarningField")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("WorkItemId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.ToTable("Core_Rules", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_Rules_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriteriaOperator", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Operator1")
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("Operator");
|
||||
|
||||
b.Property<int?>("RuleID")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.HasIndex("RuleID");
|
||||
|
||||
b.ToTable("Core_RuleCriteriaOperator", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_RuleCriteriaOperator_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriterion", b =>
|
||||
{
|
||||
b.Property<int>("ID")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Comparison")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("IsThresholdCriterium")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.Property<string>("Property")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("ReturnCount")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.Property<int?>("RuleID")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("Update")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Value")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool?>("ValueIsProperty")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasDefaultValueSql("false");
|
||||
|
||||
b.HasKey("ID");
|
||||
|
||||
b.HasIndex("RuleID");
|
||||
|
||||
b.ToTable("Core_RuleCriteria", "core", t =>
|
||||
{
|
||||
t.HasTrigger("Core_RuleCriteria_Trigger");
|
||||
});
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriteriaOperator", b =>
|
||||
{
|
||||
b.HasOne("ILoan.Tools.Domain.Entities.CoreRule", "CoreRule")
|
||||
.WithMany("CoreRuleCriteriaOperators")
|
||||
.HasForeignKey("RuleID");
|
||||
|
||||
b.Navigation("CoreRule");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRuleCriterion", b =>
|
||||
{
|
||||
b.HasOne("ILoan.Tools.Domain.Entities.CoreRule", "CoreRule")
|
||||
.WithMany("CoreRuleCriteria")
|
||||
.HasForeignKey("RuleID");
|
||||
|
||||
b.Navigation("CoreRule");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ILoan.Tools.Domain.Entities.CoreRule", b =>
|
||||
{
|
||||
b.Navigation("CoreRuleCriteria");
|
||||
|
||||
b.Navigation("CoreRuleCriteriaOperators");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
namespace ILoan.Tools.Domain;
|
||||
|
||||
public partial class RulesContext : DbContext
|
||||
{
|
||||
public RulesContext()
|
||||
{
|
||||
}
|
||||
|
||||
public RulesContext(DbContextOptions<RulesContext> options) : base(options)
|
||||
{
|
||||
}
|
||||
|
||||
partial void OnModelBuilding(ModelBuilder builder);
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder builder)
|
||||
{
|
||||
base.OnModelCreating(builder);
|
||||
|
||||
builder.Entity<CoreRuleCriteriaOperator>()
|
||||
.HasOne(i => i.CoreRule)
|
||||
.WithMany(i => i.CoreRuleCriteriaOperators)
|
||||
.HasForeignKey(i => i.RuleID)
|
||||
.HasPrincipalKey(i => i.ID);
|
||||
|
||||
builder.Entity<CoreRuleCriterion>()
|
||||
.HasOne(i => i.CoreRule)
|
||||
.WithMany(i => i.CoreRuleCriteria)
|
||||
.HasForeignKey(i => i.RuleID)
|
||||
.HasPrincipalKey(i => i.ID);
|
||||
|
||||
builder.Entity<CoreRule>()
|
||||
.Property(p => p.UseLastRecord)
|
||||
.HasDefaultValueSql(@"true");
|
||||
|
||||
builder.Entity<CoreRuleCriterion>()
|
||||
.Property(p => p.ValueIsProperty)
|
||||
.HasDefaultValueSql(@"false");
|
||||
|
||||
builder.Entity<CoreRuleCriterion>()
|
||||
.Property(p => p.ReturnCount)
|
||||
.HasDefaultValueSql(@"false");
|
||||
|
||||
builder.Entity<CoreRuleCriterion>()
|
||||
.Property(p => p.IsThresholdCriterium)
|
||||
.HasDefaultValueSql(@"false");
|
||||
this.OnModelBuilding(builder);
|
||||
}
|
||||
|
||||
public DbSet<CoreRuleCriteriaOperator> CoreRuleCriteriaOperators { get; set; }
|
||||
|
||||
public DbSet<CoreRule> CoreRules { get; set; }
|
||||
|
||||
public DbSet<CoreRuleCriterion> CoreRuleCriteria { get; set; }
|
||||
|
||||
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
|
||||
{
|
||||
configurationBuilder.Conventions.Add(_ => new BlankTriggerAddingConvention());
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
namespace ILoan.Tools.Domain.Triggers;
|
||||
|
||||
public class BlankTriggerAddingConvention : Microsoft.EntityFrameworkCore.Metadata.Conventions.IModelFinalizingConvention
|
||||
{
|
||||
public virtual void ProcessModelFinalizing(
|
||||
Microsoft.EntityFrameworkCore.Metadata.Builders.IConventionModelBuilder modelBuilder,
|
||||
Microsoft.EntityFrameworkCore.Metadata.Conventions.IConventionContext<Microsoft.EntityFrameworkCore.Metadata.Builders.IConventionModelBuilder> context)
|
||||
{
|
||||
foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
|
||||
{
|
||||
var table = Microsoft.EntityFrameworkCore.Metadata.StoreObjectIdentifier.Create(entityType, Microsoft.EntityFrameworkCore.Metadata.StoreObjectType.Table);
|
||||
if (table != null
|
||||
&& entityType.GetDeclaredTriggers().All(t => t.GetDatabaseName(table.Value) == null))
|
||||
{
|
||||
entityType.Builder.HasTrigger(table.Value.Name + "_Trigger");
|
||||
}
|
||||
|
||||
foreach (var fragment in entityType.GetMappingFragments(Microsoft.EntityFrameworkCore.Metadata.StoreObjectType.Table))
|
||||
{
|
||||
if (entityType.GetDeclaredTriggers().All(t => t.GetDatabaseName(fragment.StoreObject) == null))
|
||||
{
|
||||
entityType.Builder.HasTrigger(fragment.StoreObject.Name + "_Trigger");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
// Global using directives
|
||||
|
||||
global using ILoan.Tools.Domain;
|
||||
global using ILoan.Tools.Domain.Entities;
|
||||
global using ILoan.Tools.Domain.Enums;
|
||||
global using ILoan.Tools.Infrastructure.Services;
|
||||
global using Microsoft.AspNetCore.Components;
|
||||
global using Microsoft.AspNetCore.Components.Web;
|
||||
global using Microsoft.EntityFrameworkCore;
|
||||
global using Microsoft.JSInterop;
|
||||
global using Radzen;
|
||||
global using Radzen.Blazor;
|
||||
global using System.ComponentModel;
|
||||
global using System.ComponentModel.DataAnnotations;
|
||||
global using System.ComponentModel.DataAnnotations.Schema;
|
||||
global using System.Linq.Dynamic.Core;
|
||||
global using System.Text.Encodings.Web;
|
||||
global using ILoan.Tools.Domain.Triggers;
|
||||
global using EnumExtensions = ILoan.Tools.Infrastructure.Extensions.EnumExtensions;
|
@ -1,24 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup>
|
||||
<NoWarn>CS0168,CS1998,BL9993,CS0649,CS0436,0436</NoWarn>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Radzen.Blazor" Version="*" />
|
||||
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Domain\Data\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
12
src/iLoan.Rules.Web/ILoan.Rules.Web.csproj
Normal file
12
src/iLoan.Rules.Web/ILoan.Rules.Web.csproj
Normal file
@ -0,0 +1,12 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<NoWarn>CS0168,CS1998,BL9993,CS0649,CS0436,0436</NoWarn>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Radzen.Blazor" Version="*" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -2,7 +2,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.0.0
|
||||
MinimumVisualStudioVersion = 17.0.0.0
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILoan.Tools", "ILoan.Tools.csproj", "{E9962792-F259-417D-9699-6283FE80DB7C}"
|
||||
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILoan.Rules.Web", "ILoan.Rules.Web.csproj", "{E9962792-F259-417D-9699-6283FE80DB7C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -21,4 +22,4 @@ Global
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {5931232A-DB88-407E-9DB0-2437600E6ED6}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
EndGlobal
|
@ -1,25 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup>
|
||||
<NoWarn>CS0168,CS1998,BL9993,CS0649,CS0436,0436</NoWarn>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="8.0.6" />
|
||||
<PackageReference Include="Radzen.Blazor" Version="*" />
|
||||
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.6">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Domain\Data\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,16 +0,0 @@
|
||||
namespace ILoan.Tools.Infrastructure.Extensions;
|
||||
|
||||
public static class EnumExtensions
|
||||
{
|
||||
public static List<string> ToList<T>() where T : Enum
|
||||
{
|
||||
var names = new List<string>();
|
||||
|
||||
foreach (var name in Enum.GetNames(typeof(T)))
|
||||
{
|
||||
names.Add(name);
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
}
|
@ -1,160 +0,0 @@
|
||||
using System.Text;
|
||||
|
||||
namespace ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
public class RuleFileGeneratorService(RulesContext context, IConfiguration configuration)
|
||||
{
|
||||
private readonly int _startRuleId = configuration.GetValue<int>("Parameters:StartRuleId");
|
||||
private int _startSeq = configuration.GetValue<int>("Parameters:StartSeqNo");
|
||||
private readonly string _root = configuration.GetValue<string>("Parameters:GeneratorRoot");
|
||||
private readonly string _workitem = configuration.GetValue<string>("Parameters:Workitem");
|
||||
|
||||
public async Task GenerateRuleFilesAsync()
|
||||
{
|
||||
if (!_root.EndsWith("migrations"))
|
||||
{
|
||||
if (Directory.Exists(_root)) Directory.Delete(_root, true);
|
||||
if (!Directory.Exists(_root)) Directory.CreateDirectory(_root);
|
||||
}
|
||||
|
||||
var rules = await context.CoreRules
|
||||
.Include(r => r.CoreRuleCriteria)
|
||||
.Include(r => r.CoreRuleCriteriaOperators)
|
||||
.Where(rule => rule.ID >= _startRuleId)
|
||||
.ToListAsync();
|
||||
|
||||
foreach (var rule in rules.Where(r => _workitem.Contains(r.WorkItemId.ToString())).OrderBy(x => x.ID))
|
||||
{
|
||||
var fileName = $"V3.{_startSeq:00}__{rule.WorkItemId}_Rules_{rule.ID}_{rule.Title}.sql";
|
||||
|
||||
if (rule.Update > 0)
|
||||
{
|
||||
fileName = $"V3.{_startSeq:00}__{rule.WorkItemId}_Rules_{rule.ID}_{rule.Title}_Update({rule.Update}).sql";
|
||||
}
|
||||
|
||||
var sql = GenerateSqlStatement(rule);
|
||||
Console.WriteLine($"Generating file: {fileName}");
|
||||
await File.WriteAllTextAsync(Path.Combine(_root, fileName), sql, Encoding.UTF8);
|
||||
_startSeq++;
|
||||
}
|
||||
}
|
||||
|
||||
private string GenerateSqlStatement(CoreRule rule)
|
||||
{
|
||||
var sqlBuilder = new StringBuilder();
|
||||
|
||||
if (rule.Update == 0)
|
||||
{
|
||||
// SQL for inserting CoreRule
|
||||
sqlBuilder.AppendLine($@"
|
||||
INSERT INTO core.""Core_Rules"" (
|
||||
""ID"", ""RuleName"", ""Source"", ""DefaultThreshold"", ""Blocked"", ""TriggersManualReview"",
|
||||
""SuggestedResolution"", ""TriggerReason"", ""UseLastRecord"", ""ApplicantType"", ""FilterOnClickthrough"",
|
||||
""RunBeforeStatus"", ""DisplaySection"", ""WarningField"", ""DutchRuleName"", ""DutchTriggerReason"",
|
||||
""DutchSuggestedResolution"", ""DutchFilterOnClickthrough"", ""RuleExplanation"", ""DutchRuleExplanation"", ""Scope""
|
||||
) OVERRIDING SYSTEM VALUE VALUES (
|
||||
{rule.ID}, '{EscapeSingleQuote(rule.RuleName)}', '{EscapeSingleQuote(rule.Source)}', {rule.DefaultThreshold?.ToString() ?? "NULL"},
|
||||
{rule.Blocked.ToString().ToUpper()}, {rule.TriggersManualReview.ToString().ToUpper()}, '{EscapeSingleQuote(rule.SuggestedResolution)}',
|
||||
'{EscapeSingleQuote(rule.TriggerReason)}', {rule.UseLastRecord?.ToString().ToUpper() ?? "NULL"}, '{EscapeSingleQuote(rule.ApplicantType)}',
|
||||
'{EscapeSingleQuote(rule.FilterOnClickthrough)}', '{EscapeSingleQuote(rule.RunBeforeStatus)}', '{EscapeSingleQuote(rule.DisplaySection)}',
|
||||
'{EscapeSingleQuote(rule.WarningField)}', '{EscapeSingleQuote(rule.DutchRuleName)}', '{EscapeSingleQuote(rule.DutchTriggerReason)}',
|
||||
'{EscapeSingleQuote(rule.DutchSuggestedResolution)}', '{EscapeSingleQuote(rule.DutchFilterOnClickthrough)}',
|
||||
'{EscapeSingleQuote(rule.RuleExplanation)}', '{EscapeSingleQuote(rule.DutchRuleExplanation)}', '{EscapeSingleQuote(rule.Scope)}'
|
||||
);
|
||||
");
|
||||
|
||||
// SQL for inserting CoreRuleCriteria
|
||||
foreach (var criterion in rule.CoreRuleCriteria)
|
||||
{
|
||||
sqlBuilder.AppendLine($@"
|
||||
INSERT INTO core.""Core_RuleCriteria"" (
|
||||
""ID"", ""RuleID"", ""Property"", ""Comparison"", ""Value"", ""ValueIsProperty"", ""ReturnCount"", ""IsThresholdCriterium""
|
||||
) OVERRIDING SYSTEM VALUE VALUES (
|
||||
{criterion.ID}, {criterion.RuleID}, '{EscapeSingleQuote(criterion.Property)}', '{EscapeSingleQuote(criterion.Comparison)}', '{EscapeSingleQuote(criterion.Value)}',
|
||||
{criterion.ValueIsProperty?.ToString().ToUpper() ?? "NULL"}, {criterion.ReturnCount?.ToString().ToUpper() ?? "NULL"}, {criterion.IsThresholdCriterium?.ToString().ToUpper() ?? "NULL"}
|
||||
);
|
||||
");
|
||||
}
|
||||
|
||||
// SQL for inserting CoreRuleCriteriaOperator
|
||||
foreach (var coreRuleCriteriaOperator in rule.CoreRuleCriteriaOperators)
|
||||
{
|
||||
sqlBuilder.AppendLine($@"
|
||||
INSERT INTO core.""Core_RuleCriteriaOperator"" (
|
||||
""ID"", ""RuleID"", ""Operator""
|
||||
) OVERRIDING SYSTEM VALUE VALUES (
|
||||
{coreRuleCriteriaOperator.ID}, {coreRuleCriteriaOperator.RuleID}, '{EscapeSingleQuote(coreRuleCriteriaOperator.Operator1)}'
|
||||
);
|
||||
");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// SQL for updating CoreRule
|
||||
sqlBuilder.AppendLine($@"
|
||||
UPDATE core.""Core_Rules""
|
||||
SET
|
||||
""RuleName"" = '{EscapeSingleQuote(rule.RuleName)}',
|
||||
""Source"" = '{EscapeSingleQuote(rule.Source)}',
|
||||
""DefaultThreshold"" = {rule.DefaultThreshold?.ToString() ?? "NULL"},
|
||||
""Blocked"" = {rule.Blocked.ToString().ToUpper()},
|
||||
""TriggersManualReview"" = {rule.TriggersManualReview.ToString().ToUpper()},
|
||||
""SuggestedResolution"" = '{EscapeSingleQuote(rule.SuggestedResolution)}',
|
||||
""TriggerReason"" = '{EscapeSingleQuote(rule.TriggerReason)}',
|
||||
""UseLastRecord"" = {rule.UseLastRecord?.ToString().ToUpper() ?? "NULL"},
|
||||
""ApplicantType"" = '{EscapeSingleQuote(rule.ApplicantType)}',
|
||||
""FilterOnClickthrough"" = '{EscapeSingleQuote(rule.FilterOnClickthrough)}',
|
||||
""RunBeforeStatus"" = '{EscapeSingleQuote(rule.RunBeforeStatus)}',
|
||||
""DisplaySection"" = '{EscapeSingleQuote(rule.DisplaySection)}',
|
||||
""WarningField"" = '{EscapeSingleQuote(rule.WarningField)}',
|
||||
""DutchRuleName"" = '{EscapeSingleQuote(rule.DutchRuleName)}',
|
||||
""DutchTriggerReason"" = '{EscapeSingleQuote(rule.DutchTriggerReason)}',
|
||||
""DutchSuggestedResolution"" = '{EscapeSingleQuote(rule.DutchSuggestedResolution)}',
|
||||
""DutchFilterOnClickthrough"" = '{EscapeSingleQuote(rule.DutchFilterOnClickthrough)}',
|
||||
""RuleExplanation"" = '{EscapeSingleQuote(rule.RuleExplanation)}',
|
||||
""DutchRuleExplanation"" = '{EscapeSingleQuote(rule.DutchRuleExplanation)}',
|
||||
""Scope"" = '{EscapeSingleQuote(rule.Scope)}'
|
||||
WHERE ""ID"" = {rule.ID};
|
||||
");
|
||||
|
||||
// SQL for updating CoreRuleCriteria
|
||||
foreach (var criterion in rule.CoreRuleCriteria)
|
||||
{
|
||||
sqlBuilder.AppendLine($@"
|
||||
UPDATE core.""Core_RuleCriteria""
|
||||
SET
|
||||
""Property"" = '{EscapeSingleQuote(criterion.Property)}',
|
||||
""Comparison"" = '{EscapeSingleQuote(criterion.Comparison)}',
|
||||
""Value"" = '{EscapeSingleQuote(criterion.Value)}',
|
||||
""ValueIsProperty"" = {criterion.ValueIsProperty?.ToString().ToUpper() ?? "NULL"},
|
||||
""ReturnCount"" = {criterion.ReturnCount?.ToString().ToUpper() ?? "NULL"},
|
||||
""IsThresholdCriterium"" = {criterion.IsThresholdCriterium?.ToString().ToUpper() ?? "NULL"}
|
||||
WHERE ""ID"" = {criterion.ID};
|
||||
");
|
||||
}
|
||||
|
||||
// SQL for updating CoreRuleCriteriaOperator
|
||||
foreach (var coreRuleCriteriaOperator in rule.CoreRuleCriteriaOperators)
|
||||
{
|
||||
sqlBuilder.AppendLine($@"
|
||||
UPDATE core.""Core_RuleCriteriaOperator""
|
||||
SET
|
||||
""Operator"" = '{EscapeSingleQuote(coreRuleCriteriaOperator.Operator1)}'
|
||||
WHERE ""ID"" = {coreRuleCriteriaOperator.ID};
|
||||
");
|
||||
}
|
||||
}
|
||||
|
||||
return sqlBuilder.ToString();
|
||||
}
|
||||
|
||||
private static string EscapeSingleQuote(string value)
|
||||
{
|
||||
return value?.Replace("'", "''");
|
||||
}
|
||||
}
|
||||
|
||||
// Usage example:
|
||||
// var context = new RulesContext();
|
||||
// var generator = new RuleFileGeneratorService(context, configuration);
|
||||
// await generator.GenerateRuleFilesAsync();
|
@ -1,512 +0,0 @@
|
||||
namespace ILoan.Tools.Infrastructure.Services;
|
||||
|
||||
public partial class RulesService(IDbContextFactory<RulesContext> factory, NavigationManager navigationManager)
|
||||
{
|
||||
public void ApplyQuery<T>(ref IQueryable<T> items, Query query = null)
|
||||
{
|
||||
if (query != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(query.Filter))
|
||||
{
|
||||
if (query.FilterParameters != null)
|
||||
items = items.Where(query.Filter, query.FilterParameters);
|
||||
else
|
||||
items = items.Where(query.Filter);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(query.OrderBy)) items = items.OrderBy(query.OrderBy);
|
||||
|
||||
if (query.Skip.HasValue) items = items.Skip(query.Skip.Value);
|
||||
|
||||
if (query.Top.HasValue) items = items.Take(query.Top.Value);
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaOperatorsRead(ref IQueryable<CoreRuleCriteriaOperator> items);
|
||||
|
||||
public async Task<IQueryable<CoreRuleCriteriaOperator>> GetCoreRuleCriteriaOperators(Query query = null)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRuleCriteriaOperators.AsQueryable();
|
||||
|
||||
items = items.Include(i => i.CoreRule);
|
||||
|
||||
if (query != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(query.Expand))
|
||||
{
|
||||
var propertiesToExpand = query.Expand.Split(',');
|
||||
foreach (var p in propertiesToExpand) items = items.Include(p.Trim());
|
||||
}
|
||||
|
||||
ApplyQuery(ref items, query);
|
||||
}
|
||||
|
||||
OnCoreRuleCriteriaOperatorsRead(ref items);
|
||||
|
||||
return await Task.FromResult(items);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaOperatorGet(CoreRuleCriteriaOperator item);
|
||||
partial void OnGetCoreRuleCriteriaOperatorById(ref IQueryable<CoreRuleCriteriaOperator> items);
|
||||
|
||||
|
||||
public async Task<CoreRuleCriteriaOperator> GetCoreRuleCriteriaOperatorById(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRuleCriteriaOperators
|
||||
.AsNoTracking()
|
||||
.Where(i => i.ID == id);
|
||||
|
||||
items = items.Include(i => i.CoreRule);
|
||||
|
||||
OnGetCoreRuleCriteriaOperatorById(ref items);
|
||||
|
||||
var itemToReturn = items.FirstOrDefault();
|
||||
|
||||
OnCoreRuleCriteriaOperatorGet(itemToReturn);
|
||||
|
||||
return await Task.FromResult(itemToReturn);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaOperatorCreated(CoreRuleCriteriaOperator item);
|
||||
partial void OnAfterCoreRuleCriteriaOperatorCreated(CoreRuleCriteriaOperator item);
|
||||
|
||||
public async Task<CoreRuleCriteriaOperator> CreateCoreRuleCriteriaOperator(
|
||||
CoreRuleCriteriaOperator corerulecriteriaoperator)
|
||||
{
|
||||
OnCoreRuleCriteriaOperatorCreated(corerulecriteriaoperator);
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
|
||||
var existingItem = context.CoreRuleCriteriaOperators
|
||||
.FirstOrDefault(i => i.ID == corerulecriteriaoperator.ID);
|
||||
|
||||
if (existingItem != null) throw new Exception("Item already available");
|
||||
|
||||
try
|
||||
{
|
||||
context.CoreRuleCriteriaOperators.Add(corerulecriteriaoperator);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(corerulecriteriaoperator).State = EntityState.Detached;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleCriteriaOperatorCreated(corerulecriteriaoperator);
|
||||
|
||||
return corerulecriteriaoperator;
|
||||
}
|
||||
|
||||
public async Task<CoreRuleCriteriaOperator> CancelCoreRuleCriteriaOperatorChanges(CoreRuleCriteriaOperator item)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var entityToCancel = context.Entry(item);
|
||||
if (entityToCancel.State == EntityState.Modified)
|
||||
{
|
||||
entityToCancel.CurrentValues.SetValues(entityToCancel.OriginalValues);
|
||||
entityToCancel.State = EntityState.Unchanged;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaOperatorUpdated(CoreRuleCriteriaOperator item);
|
||||
partial void OnAfterCoreRuleCriteriaOperatorUpdated(CoreRuleCriteriaOperator item);
|
||||
|
||||
public async Task<CoreRuleCriteriaOperator> UpdateCoreRuleCriteriaOperator(int id,
|
||||
CoreRuleCriteriaOperator corerulecriteriaoperator)
|
||||
{
|
||||
OnCoreRuleCriteriaOperatorUpdated(corerulecriteriaoperator);
|
||||
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var itemToUpdate = context.CoreRuleCriteriaOperators
|
||||
.FirstOrDefault(i => i.ID == corerulecriteriaoperator.ID);
|
||||
|
||||
if (itemToUpdate == null) throw new Exception("Item no longer available");
|
||||
|
||||
var entryToUpdate = context.Entry(itemToUpdate);
|
||||
entryToUpdate.CurrentValues.SetValues(corerulecriteriaoperator);
|
||||
entryToUpdate.State = EntityState.Modified;
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
OnAfterCoreRuleCriteriaOperatorUpdated(corerulecriteriaoperator);
|
||||
|
||||
return corerulecriteriaoperator;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaOperatorDeleted(CoreRuleCriteriaOperator item);
|
||||
partial void OnAfterCoreRuleCriteriaOperatorDeleted(CoreRuleCriteriaOperator item);
|
||||
|
||||
public async Task<CoreRuleCriteriaOperator> DeleteCoreRuleCriteriaOperator(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var itemToDelete = context.CoreRuleCriteriaOperators
|
||||
.FirstOrDefault(i => i.ID == id);
|
||||
|
||||
if (itemToDelete == null) throw new Exception("Item no longer available");
|
||||
|
||||
OnCoreRuleCriteriaOperatorDeleted(itemToDelete);
|
||||
|
||||
|
||||
context.CoreRuleCriteriaOperators.Remove(itemToDelete);
|
||||
|
||||
try
|
||||
{
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(itemToDelete).State = EntityState.Unchanged;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleCriteriaOperatorDeleted(itemToDelete);
|
||||
|
||||
return itemToDelete;
|
||||
}
|
||||
|
||||
public async Task ExportCoreRulesToExcel(Query query = null, string fileName = null)
|
||||
{
|
||||
navigationManager.NavigateTo(
|
||||
query != null
|
||||
? query.ToUrl(
|
||||
$"export/rules/corerules/excel(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')")
|
||||
: $"export/rules/corerules/excel(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')",
|
||||
true);
|
||||
}
|
||||
|
||||
public async Task ExportCoreRulesToCSV(Query query = null, string fileName = null)
|
||||
{
|
||||
navigationManager.NavigateTo(
|
||||
query != null
|
||||
? query.ToUrl(
|
||||
$"export/rules/corerules/csv(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')")
|
||||
: $"export/rules/corerules/csv(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')",
|
||||
true);
|
||||
}
|
||||
|
||||
partial void OnCoreRulesRead(ref IQueryable<CoreRule> items);
|
||||
|
||||
public async Task<IQueryable<CoreRule>> GetCoreRules(Query query = null)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRules.OrderBy(r => r.ID).AsQueryable();
|
||||
|
||||
|
||||
if (query != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(query.Expand))
|
||||
{
|
||||
var propertiesToExpand = query.Expand.Split(',');
|
||||
foreach (var p in propertiesToExpand) items = items.Include(p.Trim());
|
||||
}
|
||||
|
||||
ApplyQuery(ref items, query);
|
||||
}
|
||||
|
||||
OnCoreRulesRead(ref items);
|
||||
|
||||
return await Task.FromResult(items);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleGet(CoreRule item);
|
||||
partial void OnGetCoreRuleById(ref IQueryable<CoreRule> items);
|
||||
|
||||
|
||||
public async Task<CoreRule> GetCoreRuleById(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRules
|
||||
.AsNoTracking()
|
||||
.Where(i => i.ID == id);
|
||||
|
||||
|
||||
OnGetCoreRuleById(ref items);
|
||||
|
||||
var itemToReturn = items.FirstOrDefault();
|
||||
|
||||
OnCoreRuleGet(itemToReturn);
|
||||
|
||||
return await Task.FromResult(itemToReturn);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCreated(CoreRule item);
|
||||
partial void OnAfterCoreRuleCreated(CoreRule item);
|
||||
|
||||
public async Task<CoreRule> CreateCoreRule(CoreRule corerule)
|
||||
{
|
||||
OnCoreRuleCreated(corerule);
|
||||
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var existingItem = context.CoreRules
|
||||
.FirstOrDefault(i => i.ID == corerule.ID);
|
||||
|
||||
if (existingItem != null) throw new Exception("Item already available");
|
||||
|
||||
try
|
||||
{
|
||||
context.CoreRules.Add(corerule);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(corerule).State = EntityState.Detached;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleCreated(corerule);
|
||||
|
||||
return corerule;
|
||||
}
|
||||
|
||||
public async Task<CoreRule> CancelCoreRuleChanges(CoreRule item)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var entityToCancel = context.Entry(item);
|
||||
if (entityToCancel.State == EntityState.Modified)
|
||||
{
|
||||
entityToCancel.CurrentValues.SetValues(entityToCancel.OriginalValues);
|
||||
entityToCancel.State = EntityState.Unchanged;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleUpdated(CoreRule item);
|
||||
partial void OnAfterCoreRuleUpdated(CoreRule item);
|
||||
|
||||
public async Task<CoreRule> UpdateCoreRule(int id, CoreRule corerule)
|
||||
{
|
||||
OnCoreRuleUpdated(corerule);
|
||||
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var itemToUpdate = context.CoreRules
|
||||
.FirstOrDefault(i => i.ID == corerule.ID);
|
||||
|
||||
if (itemToUpdate == null) throw new Exception("Item no longer available");
|
||||
|
||||
var entryToUpdate = context.Entry(itemToUpdate);
|
||||
entryToUpdate.CurrentValues.SetValues(corerule);
|
||||
entryToUpdate.State = EntityState.Modified;
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
OnAfterCoreRuleUpdated(corerule);
|
||||
|
||||
return corerule;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleDeleted(CoreRule item);
|
||||
partial void OnAfterCoreRuleDeleted(CoreRule item);
|
||||
|
||||
public async Task<CoreRule> DeleteCoreRule(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var itemToDelete = context.CoreRules
|
||||
.Where(i => i.ID == id)
|
||||
.Include(i => i.CoreRuleCriteria)
|
||||
.Include(i => i.CoreRuleCriteriaOperators)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (itemToDelete == null) throw new Exception("Item no longer available");
|
||||
|
||||
OnCoreRuleDeleted(itemToDelete);
|
||||
|
||||
|
||||
context.CoreRules.Remove(itemToDelete);
|
||||
|
||||
try
|
||||
{
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(itemToDelete).State = EntityState.Unchanged;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleDeleted(itemToDelete);
|
||||
|
||||
return itemToDelete;
|
||||
}
|
||||
|
||||
public async Task ExportCoreRuleCriteriaToExcel(Query query = null, string fileName = null)
|
||||
{
|
||||
navigationManager.NavigateTo(
|
||||
query != null
|
||||
? query.ToUrl(
|
||||
$"export/rules/corerulecriteria/excel(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')")
|
||||
: $"export/rules/corerulecriteria/excel(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')",
|
||||
true);
|
||||
}
|
||||
|
||||
public async Task ExportCoreRuleCriteriaToCSV(Query query = null, string fileName = null)
|
||||
{
|
||||
navigationManager.NavigateTo(
|
||||
query != null
|
||||
? query.ToUrl(
|
||||
$"export/rules/corerulecriteria/csv(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')")
|
||||
: $"export/rules/corerulecriteria/csv(fileName='{(!string.IsNullOrEmpty(fileName) ? UrlEncoder.Default.Encode(fileName) : "Export")}')",
|
||||
true);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriteriaRead(ref IQueryable<CoreRuleCriterion> items);
|
||||
|
||||
public async Task<IQueryable<CoreRuleCriterion>> GetCoreRuleCriteria(Query query = null)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRuleCriteria.AsQueryable();
|
||||
|
||||
items = items.Include(i => i.CoreRule);
|
||||
|
||||
if (query != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(query.Expand))
|
||||
{
|
||||
var propertiesToExpand = query.Expand.Split(',');
|
||||
foreach (var p in propertiesToExpand) items = items.Include(p.Trim());
|
||||
}
|
||||
|
||||
ApplyQuery(ref items, query);
|
||||
}
|
||||
|
||||
OnCoreRuleCriteriaRead(ref items);
|
||||
|
||||
return await Task.FromResult(items);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriterionGet(CoreRuleCriterion item);
|
||||
partial void OnGetCoreRuleCriterionById(ref IQueryable<CoreRuleCriterion> items);
|
||||
|
||||
|
||||
public async Task<CoreRuleCriterion> GetCoreRuleCriterionById(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var items = context.CoreRuleCriteria
|
||||
.AsNoTracking()
|
||||
.Where(i => i.ID == id);
|
||||
|
||||
items = items.Include(i => i.CoreRule);
|
||||
|
||||
OnGetCoreRuleCriterionById(ref items);
|
||||
|
||||
var itemToReturn = items.FirstOrDefault();
|
||||
|
||||
OnCoreRuleCriterionGet(itemToReturn);
|
||||
|
||||
return await Task.FromResult(itemToReturn);
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriterionCreated(CoreRuleCriterion item);
|
||||
partial void OnAfterCoreRuleCriterionCreated(CoreRuleCriterion item);
|
||||
|
||||
public async Task<CoreRuleCriterion> CreateCoreRuleCriterion(CoreRuleCriterion corerulecriterion)
|
||||
{
|
||||
OnCoreRuleCriterionCreated(corerulecriterion);
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
|
||||
var existingItem = context.CoreRuleCriteria
|
||||
.FirstOrDefault(i => i.ID == corerulecriterion.ID);
|
||||
|
||||
if (existingItem != null) throw new Exception("Item already available");
|
||||
|
||||
try
|
||||
{
|
||||
context.CoreRuleCriteria.Add(corerulecriterion);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(corerulecriterion).State = EntityState.Detached;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleCriterionCreated(corerulecriterion);
|
||||
|
||||
return corerulecriterion;
|
||||
}
|
||||
|
||||
public async Task<CoreRuleCriterion> CancelCoreRuleCriterionChanges(CoreRuleCriterion item)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var entityToCancel = context.Entry(item);
|
||||
if (entityToCancel.State == EntityState.Modified)
|
||||
{
|
||||
entityToCancel.CurrentValues.SetValues(entityToCancel.OriginalValues);
|
||||
entityToCancel.State = EntityState.Unchanged;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriterionUpdated(CoreRuleCriterion item);
|
||||
partial void OnAfterCoreRuleCriterionUpdated(CoreRuleCriterion item);
|
||||
|
||||
public async Task<CoreRuleCriterion> UpdateCoreRuleCriterion(int id, CoreRuleCriterion corerulecriterion)
|
||||
{
|
||||
OnCoreRuleCriterionUpdated(corerulecriterion);
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
|
||||
var itemToUpdate = context.CoreRuleCriteria
|
||||
.FirstOrDefault(i => i.ID == corerulecriterion.ID);
|
||||
|
||||
if (itemToUpdate == null) throw new Exception("Item no longer available");
|
||||
|
||||
var entryToUpdate = context.Entry(itemToUpdate);
|
||||
entryToUpdate.CurrentValues.SetValues(corerulecriterion);
|
||||
entryToUpdate.State = EntityState.Modified;
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
OnAfterCoreRuleCriterionUpdated(corerulecriterion);
|
||||
|
||||
return corerulecriterion;
|
||||
}
|
||||
|
||||
partial void OnCoreRuleCriterionDeleted(CoreRuleCriterion item);
|
||||
partial void OnAfterCoreRuleCriterionDeleted(CoreRuleCriterion item);
|
||||
|
||||
public async Task<CoreRuleCriterion> DeleteCoreRuleCriterion(int id)
|
||||
{
|
||||
var context = await factory.CreateDbContextAsync();
|
||||
var itemToDelete = context.CoreRuleCriteria
|
||||
.FirstOrDefault(i => i.ID == id);
|
||||
|
||||
if (itemToDelete == null) throw new Exception("Item no longer available");
|
||||
|
||||
OnCoreRuleCriterionDeleted(itemToDelete);
|
||||
|
||||
|
||||
context.CoreRuleCriteria.Remove(itemToDelete);
|
||||
|
||||
try
|
||||
{
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
context.Entry(itemToDelete).State = EntityState.Unchanged;
|
||||
throw;
|
||||
}
|
||||
|
||||
OnAfterCoreRuleCriterionDeleted(itemToDelete);
|
||||
|
||||
return itemToDelete;
|
||||
}
|
||||
|
||||
// get properties from CoreRuleCriterion as a disctinct list for type ahead
|
||||
public List<string> GetProperties()
|
||||
{
|
||||
var context = factory.CreateDbContext();
|
||||
var properties = context.CoreRuleCriteria.Select(c => c.Property).Distinct().OrderBy(x => x).ToList();
|
||||
return properties;
|
||||
}
|
||||
|
||||
public List<string> GetComparisons()
|
||||
{
|
||||
return EnumExtensions.ToList<RuleComparison>();
|
||||
}
|
||||
}
|
@ -1,16 +1,17 @@
|
||||
using Radzen;
|
||||
using ILoan.Rules.Web.Components;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorComponents().AddInteractiveServerComponents().AddHubOptions(options => options.MaximumReceiveMessageSize = 10 * 1024 * 1024);
|
||||
builder.Services.AddRazorComponents()
|
||||
.AddInteractiveServerComponents().AddHubOptions(options => options.MaximumReceiveMessageSize = 10 * 1024 * 1024);
|
||||
|
||||
builder.Services.AddControllers();
|
||||
builder.Services.AddRadzenComponents();
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddScoped<RulesService>();
|
||||
builder.Services.AddScoped<RuleFileGeneratorService>();
|
||||
builder.Services.AddDbContextFactory<RulesContext>(options =>
|
||||
{
|
||||
options.UseSqlite(builder.Configuration.GetConnectionString("Sqlite"));
|
||||
});
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
@ -23,5 +24,8 @@ app.UseHttpsRedirection();
|
||||
app.MapControllers();
|
||||
app.UseStaticFiles();
|
||||
app.UseAntiforgery();
|
||||
app.MapRazorComponents<ILoan.Tools.Application.App>().AddInteractiveServerRenderMode();
|
||||
|
||||
app.MapRazorComponents<App>()
|
||||
.AddInteractiveServerRenderMode();
|
||||
|
||||
app.Run();
|
@ -8,11 +8,11 @@
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"ILoan.Tools": {
|
||||
"ILoan.Rules.Web.Server": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7001;http://localhost:7000",
|
||||
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
|
@ -5,15 +5,5 @@
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RulesConnection": "Host=localhost;User ID=wendell@iloan.nl;Password=8o%2FGjK&A#p^De1;Timeout=30;Port=5432;Database=iloan-dev-rules"
|
||||
},
|
||||
"Databases": {
|
||||
"Rules": {
|
||||
"NoPluralize": false,
|
||||
"UseDatabaseNames": false,
|
||||
"UseEFNaming": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,22 +5,5 @@
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"Pgsql": "Host=localhost;User ID=wendell@iloan.nl;Password=8o%2FGjK&A#p^De1;Timeout=30;Port=5432;Database=iloan-dev-rules",
|
||||
"Sqlite": "Data Source=./Domain/Data/iloan.tools.db"
|
||||
},
|
||||
"Databases": {
|
||||
"Rules": {
|
||||
"NoPluralize": false,
|
||||
"UseDatabaseNames": false,
|
||||
"UseEFNaming": false
|
||||
}
|
||||
},
|
||||
"Parameters": {
|
||||
"GeneratorRoot": "C:\\iloan\\iloan-base-dev\\migrations",
|
||||
"StartSeqNo": 27,
|
||||
"StartRuleId": 499,
|
||||
"Workitem": "3130"
|
||||
}
|
||||
}
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user