feat(form_1_2): add New2570 fields to local model, fix report template
continuous-integration/drone/push Build is passing

Two fixes needed together to make the new 3-page เอกสารแนบ ร.1 template
actually render:

1. rmutr_report keeps its own separate copy of the form_1_2 C# model
   (Models/RoReport/form_1_2.cs), which never got the New2570-spec
   fields (division_name, request_count, overall_reason, signer_*,
   approver_*) or the form_1_2_positions child list that rmutr-api's
   model already has. FastReport's RegisterData binds by reflecting
   the actual runtime object, so any Dictionary column not present on
   this local class silently fails to compile ("does not exist in
   current context") for every field on it.

2. Nested BusinessObjectDataSource fields must be referenced by their
   full dotted path from the report root ([form_1_2.form_1_2_positions.
   field]), not the bare child name ([form_1_2_positions.field]) —
   confirmed against another working report (academic_position.frx)
   in this same codebase that uses the identical nesting pattern
   correctly.

Verified locally: report now compiles and reaches PDF export (the
only remaining local failure is a NullReferenceException in libgdiplus
font handling specific to this macOS dev machine, unrelated to the
report itself — production runs Linux where this already works for
every other report using TH Sarabun New).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
This commit is contained in:
Nut.ไปเรื่อย
2026-09-08 13:32:39 +07:00
parent 9292bc2782
commit 62fbf99073
2 changed files with 55 additions and 16 deletions
+39
View File
@@ -63,6 +63,45 @@ namespace rmutr_report.Models.RoThree
public string budget_year_name_th { get; set; }
public List<t_form_1_2_images> form_1_2_images { get; set; }
public List<t_form_1_2_images_2> form_1_2_images_2 { get; set; }
// New2570 spec — header-level
public int? request_count { get; set; }
public string division_name { get; set; }
public string overall_reason { get; set; }
// New2570 spec — signer (ผู้ขอ)
public string signer_type { get; set; }
public string signer_name { get; set; }
public string signer_position { get; set; }
// New2570 spec — approver (หัวหน้าหน่วยงาน)
public string approver_decision { get; set; }
public string approver_reason { get; set; }
public string approver_name { get; set; }
public string approver_admin_position { get; set; }
public List<form_1_2_positions> form_1_2_positions { get; set; }
}
public class form_1_2_positions
{
[Key] public Guid? form_1_2_position_uid { get; set; }
public Guid? form_1_2_uid { get; set; }
public int? row { get; set; }
public string old_position_no { get; set; }
public string old_position_name { get; set; }
public string old_qualification { get; set; }
public string old_division_name { get; set; }
public string old_workload { get; set; }
public string new_position_no { get; set; }
public string new_position_name { get; set; }
public string new_qualification { get; set; }
public string new_division_name { get; set; }
public string new_workload { get; set; }
public string reason { get; set; }
}
public class t_form_1_2_images