Fix NCalc case sensitivity and add formula validation
- Normalize IF/Abs/Pow/etc. to lowercase before evaluation so AI-generated or manually typed uppercase function names no longer cause "Function not found" errors - Add NormalizeAndValidate() which normalizes then does a parse-only check on save — invalid formulas are rejected with a clear error before storing - Update AI system prompt to list all functions in lowercase and explicitly call out case-sensitivity; add if() to the supported function list - Add collapsible NCalc quick-reference panel in the formula editor showing all operators, functions (lowercase), built-in variables, and an example Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3054,6 +3054,10 @@ public class CompanySettingsController : Controller
|
||||
var fieldError = ValidateTemplateFields(dto.FieldsJson);
|
||||
if (fieldError != null) return Json(new { success = false, message = fieldError });
|
||||
|
||||
var (normalizedFormula, formulaError) = _formulaAiService.NormalizeAndValidate(dto.Formula);
|
||||
if (formulaError != null) return Json(new { success = false, message = $"Formula error: {formulaError}" });
|
||||
dto.Formula = normalizedFormula;
|
||||
|
||||
var companyId = _tenantContext.GetCurrentCompanyId()!.Value;
|
||||
var entity = _mapper.Map<CustomItemTemplate>(dto);
|
||||
entity.CompanyId = companyId;
|
||||
@@ -3076,6 +3080,10 @@ public class CompanySettingsController : Controller
|
||||
var fieldError = ValidateTemplateFields(dto.FieldsJson);
|
||||
if (fieldError != null) return Json(new { success = false, message = fieldError });
|
||||
|
||||
var (normalizedFormula, formulaError) = _formulaAiService.NormalizeAndValidate(dto.Formula);
|
||||
if (formulaError != null) return Json(new { success = false, message = $"Formula error: {formulaError}" });
|
||||
dto.Formula = normalizedFormula;
|
||||
|
||||
var companyId = _tenantContext.GetCurrentCompanyId()!.Value;
|
||||
var entity = await _unitOfWork.CustomItemTemplates.GetByIdAsync(dto.Id);
|
||||
if (entity == null || entity.CompanyId != companyId)
|
||||
|
||||
Reference in New Issue
Block a user