21 Commits

Author SHA1 Message Date
Nut.ไปเรื่อย ab319d5a59 fix(form_1_2): truncate at last word boundary instead of mid-word
Replaced the inline Substring-based truncation (which cut mid-word,
e.g. "...เนื่องจากป") with a TruncateAtWord() helper in the report's
ScriptText that backs off to the last space before the length limit
when one exists, falling back to a hard cut only when the text has no
spaces at all within that range (common in run-on Thai text).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 20:37:09 +07:00
Nut.ไปเรื่อย ff353b65f9 fix(form_1_2): cap reason/workload text length to prevent page overflow
FastReport doesn't support splitting a single growing text object
mid-paragraph across multiple physical pages — an oversized field
just clips at the page boundary instead of flowing to a new page.
Capped the free-text fields most prone to this (reason, old/new
workload) at 200-300 characters with a "..." suffix when truncated,
so pathologically long input degrades gracefully instead of clipping
mid-sentence or overlapping following content.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 18:50:07 +07:00
Nut.ไปเรื่อย 2aa1e455e8 fix(form_1_2): keep checklist in same band as reason text so it grows correctly
Data1b (the checklist section) was a separate sibling band positioned
right after P1PositionsList. FastReport's CanGrow only reliably shifts
down objects within the SAME band — a long reason text growing past
its declared box didn't push the next sibling band down with it,
causing visible overlap. Merged the checklist into P1PositionsList so
everything shares one growable band.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 18:39:17 +07:00
Nut.ไปเรื่อย 7ba816ca90 fix(form_1_2): pull "โดยมีเหตุผลและความจำเป็นดังนี้" from per-position reason
overall_reason is never populated on this record (or apparently any
real one) — the actual "เหตุผลความจำเป็น" data users fill in on the web
form lives on form_1_2_positions.reason (the same field already shown
on page 2). Moved the heading+value into the position-list band so it
reads from there instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 18:20:52 +07:00
Nut.ไปเรื่อย bd567443fd fix(form_1_2): move position list right after สังกัด งาน, per sample
Split the page-1 band into Data1a (header through สังกัด งาน + the
list heading) and Data1b (เหตุผล.../checklist), with the repeating
position list band in between — matching the reference form's actual
ordering instead of pushing the list to the bottom of the page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 13:48:00 +07:00
Nut.ไปเรื่อย 932eb26791 fix(form_1_2): keep page 1's position summary on the same physical page
Data1's declared Height (1000) consumed nearly the whole A4 page,
pushing the sibling P1PositionsList band onto its own extra page.
Trimmed to 810 (just past the last real content) so both bands share
page 1 as intended. Also widened the "ที่ อว 0653." label — it was
being clipped at the old narrow width.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 13:37:36 +07:00
Nut.ไปเรื่อย 62fbf99073 feat(form_1_2): add New2570 fields to local model, fix report template
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
2026-09-08 13:32:39 +07:00
Nut.ไปเรื่อย 9292bc2782 feat(form_1_2): rebuild report as 3-page เอกสารแนบ ร.1 attachment form
Replaces the old 1-page บันทึกข้อความ memo layout (which didn't match
the actual paper form used) with the real 3-page แนบ ร.1 attachment:
page 1 summary + position list, page 2 old/new position detail table
(repeats once per position via form_1_2_positions, one A4 sheet per
อัตรา), page 3 signatures + หัวหน้าหน่วยงาน decision. All blanks bound
to existing form_1_2 / form_1_2_positions fields (no new backend
fields needed — the New2570 spec fields were already there, just
never wired into a template).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 13:12:20 +07:00
Nut.ไปเรื่อย 540130f52c fix(form_1_2): guard null date/start_working before .Value to prevent 500
GetForm2Report ("ร1. แบบฟอร์มเสนอขอปรับเปลี่ยนชื่อตำแหน่ง") called
.Value on nullable DateTime fields unconditionally, crashing with
InvalidOperationException whenever a record's date or start_working
was null — exactly what happened for form_1_2_uid
377a46dc-7131-4b58-ac7e-c9b54900ac34 (date is null in production).
Mirrors the null-check pattern the sibling GetForm3Report already
uses for the same kind of field.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0153wBt23EjW125ZsADwWVAs
2026-09-08 12:48:44 +07:00
Nut.ไปเรื่อย 3ce12e73fc feat(agency_report): แสดงข้อ 13.1-13.4 วิสัยทัศน์/ค่านิยม/เอกลักษณ์/อัตลักษณ์ ในรายงาน
เดิมรายงานยังผูกกับ checkbox แบบเก่า 7 ตัวเลือก (bool_13_1-7) ที่หน้าเว็บไม่ได้ใช้แล้ว
เปลี่ยนเป็นแสดงชื่อ+ตัวชี้วัดที่เลือกจริงของแต่ละหมวด (รวมข้อความด้วยขึ้นบรรทัดใหม่)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FyqMVwbVZLfTe8QJSmrUjQ
2026-09-02 07:27:13 +07:00
Nut.ไปเรื่อย 1dbec66fb2 style(kpi-finance): use colored / emoji for บรรลุ/ไม่บรรลุ
Requested a rounder icon-badge look closer to a reference screenshot;
color glyph emoji render that way natively in Excel without needing
manual font-color styling (which colored ✓/✗ can't fully replicate).
2026-09-01 15:50:39 +07:00
Nut.ไปเรื่อย 413f141593 style(kpi-finance): make the บรรลุ/ไม่บรรลุ mark bolder and colored
Was a plain black "√"/"X" at the same 16pt as the rest of the row.
Now: green ✓ (#2E7D32) for achieved, red ✗ (#C62828) for not achieved,
bold, 20pt.
2026-09-01 15:41:43 +07:00
Nut.ไปเรื่อย 400f0dbfd1 chore: retrigger CI (webhook missed previous push) 2026-09-01 12:16:25 +07:00
Nut.ไปเรื่อย ebb67d536f style(kpi): change strategic-issue header band color to #CAD1EB
Was XLColor.PurpleX11; requested lighter blue-purple for the
kpi_performance_result Excel export section header bars.
2026-09-01 12:10:46 +07:00
Nut.ไปเรื่อย 966d34d1fe fix(kpi): don't number vision/values/uniqueness/identity as strategic issues
Add is_reference_section flag to header_data/detail_kpi_data so the
kpi_performance_result and detail_kpi Excel exports render the 4
reference-indicator sections (วิสัยทัศน์/ค่านิยม/เอกลักษณ์/อัตลักษณ์)
with their bare category name instead of a "ประเด็นยุทธ์ศาสตร์ที่ N"
prefix, and skip them in the real strategic-issue numbering.
2026-08-31 15:34:23 +07:00
Nut.ไปเรื่อย 076f8ed4d7 fix(kpi): move vision/values/uniqueness/identity sections above the strategic indicator table
Matches the field order on the budget policy form itself, where these
4 categories are entered before ประเด็นยุทธศาสตร์/เป้าหมายหลัก/ตัวชี้วัดกลยุทธ์.
2026-08-27 11:20:40 +07:00
Nut.ไปเรื่อย bbfcaa088e feat(kpi): render vision/values/uniqueness/identity indicator sections in budget policy Excel export
Mirrors the existing indicator table layout for the 4 new reference
sections coming from rmutr-api (unit, target value, 3 responsible-role
columns), reusing the same 8-column styling as the strategic indicators.
2026-08-26 19:15:26 +07:00
Nut.ไปเรื่อย e2fcd26b8f feat: emit live Excel formulas for operating-expense subtotal rows
Switch the xls/xlsx export in GetExpensesReport from FastReport's
Excel2007Export (which always writes static numbers) to a ClosedXML-
built workbook, so subtotal/header rows get real =SUM-style FormulaA1
formulas instead of pre-computed values. Row hierarchy is inferred
generically from the "no" field's dot-depth and the expenditure_budget
indentation prefix, so it works for any request, not just one record.
pdf/doc export still uses the FastReport .frx template, unchanged.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LvxSgUzvZcd4mXfDWGssxm
2026-08-26 12:04:26 +07:00
Nut.ไปเรื่อย ec4b99f53e feat: emit live Excel formulas for ร.15 revenue-estimate semester rows
Replace static computed values for F/H/J/L/N/P/R with FormulaA1 cell
formulas (=B-D, =(F*10)/100, etc.) so the exported report is auditable
and recalculates in Excel, matching a reference ร15.xlsx. P/R now use
the per-row contribution/framework percent passed from rmutr-api
instead of a fixed 40%.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KhYYmBPw4LhYXoDnTNz2xV
2026-08-05 11:27:28 +07:00
kamonwan taengsuk d9bc1f742f fix(durable_articles_three): add subject field to model
FRX template references [durable_articles_three.subject] but the
model was missing the property, causing FastReport binding to fail
and the report endpoint to return 500.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 20:54:10 +07:00
kamonwan taengsuk 65303d336b feat(durable_articles_three): add ชื่อเรื่อง row under ผลผลิต
Bind to durable_articles_three.subject and shift the following
elements (รายการครุภัณฑ์ header, data band, footer, summary band)
down by 28.35 to make room.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 18:16:00 +07:00
18 changed files with 653 additions and 376 deletions
+16
View File
@@ -25,6 +25,13 @@ namespace rmutr_report.Controllers
this._setting = setting; this._setting = setting;
} }
private static string JoinNames(IEnumerable<string> names)
{
return names == null
? ""
: string.Join("\n", names.Where(n => !string.IsNullOrWhiteSpace(n)));
}
[HttpPost, Route("reports/agency_result_report/{type}")] [HttpPost, Route("reports/agency_result_report/{type}")]
[ApiExplorerSettings(GroupName = "reports")] [ApiExplorerSettings(GroupName = "reports")]
public IActionResult GetAgencyReport([FromRoute] string type, [FromBody] List<agency_report> agencyReports) public IActionResult GetAgencyReport([FromRoute] string type, [FromBody] List<agency_report> agencyReports)
@@ -61,6 +68,15 @@ namespace rmutr_report.Controllers
agencyReport.text_25_1 = agencyReport.bool_25_1 == true ? "X" : ""; agencyReport.text_25_1 = agencyReport.bool_25_1 == true ? "X" : "";
agencyReport.text_25_2 = agencyReport.bool_25_2 == true ? "X" : ""; agencyReport.text_25_2 = agencyReport.bool_25_2 == true ? "X" : "";
agencyReport.vision_names_text = JoinNames(agencyReport.agency_report_visions?.Select(c => c.vision_name_th));
agencyReport.vision_indicators_text = JoinNames(agencyReport.agency_report_vision_indicators?.Select(c => c.vision_indicator_name));
agencyReport.popularity_names_text = JoinNames(agencyReport.agency_report_popularities?.Select(c => c.popularity_name_th));
agencyReport.popularity_indicators_text = JoinNames(agencyReport.agency_report_popularity_indicators?.Select(c => c.popularity_indicator_name));
agencyReport.uniqueness_names_text = JoinNames(agencyReport.agency_report_uniquenesses?.Select(c => c.uniqueness_name_th));
agencyReport.uniqueness_indicators_text = JoinNames(agencyReport.agency_report_uniqueness_indicators?.Select(c => c.uniqueness_indicator_name));
agencyReport.identity_names_text = JoinNames(agencyReport.agency_report_identities?.Select(c => c.identity_name_th));
agencyReport.identity_indicators_text = JoinNames(agencyReport.agency_report_identity_indicators?.Select(c => c.identity_indicator_name));
} }
if (_setting == null || string.IsNullOrEmpty(_setting.report_path)) if (_setting == null || string.IsNullOrEmpty(_setting.report_path))
+10 -7
View File
@@ -2290,24 +2290,27 @@ namespace rmutr_report.Controllers
if (detail.topic_type == 3) if (detail.topic_type == 3)
{ {
var contributionPercent = detail.contribution_percent ?? 40;
var frameworkPercent = detail.framework_percent ?? 40;
ws.Cell(row, 1).Value = detail.topic; ws.Cell(row, 1).Value = detail.topic;
ws.Cell(row, 2).Value = detail.revenue_estimates; ws.Cell(row, 2).Value = detail.revenue_estimates;
ws.Cell(row, 3).Value = "บาท"; ws.Cell(row, 3).Value = "บาท";
ws.Cell(row, 4).Value = detail.less_revenue_estimates; ws.Cell(row, 4).Value = detail.less_revenue_estimates;
ws.Cell(row, 5).Value = "บาท"; ws.Cell(row, 5).Value = "บาท";
ws.Cell(row, 6).Value = detail.balance_revenue_estimates; ws.Cell(row, 6).FormulaA1 = $"=B{row}-D{row}";
ws.Cell(row, 7).Value = "บาท"; ws.Cell(row, 7).Value = "บาท";
ws.Cell(row, 8).Value = detail.less_accumulated_income; ws.Cell(row, 8).FormulaA1 = $"=(F{row}*10)/100";
ws.Cell(row, 9).Value = "บาท"; ws.Cell(row, 9).Value = "บาท";
ws.Cell(row, 10).Value = detail.balance_before_allocating_according; ws.Cell(row, 10).FormulaA1 = $"=F{row}-H{row}";
ws.Cell(row, 11).Value = "บาท"; ws.Cell(row, 11).Value = "บาท";
ws.Cell(row, 12).Value = detail.contribution_utility_bills; ws.Cell(row, 12).FormulaA1 = $"=(J{row}*5)/100";
ws.Cell(row, 13).Value = "บาท"; ws.Cell(row, 13).Value = "บาท";
ws.Cell(row, 14).Value = detail.contribution_central_budget; ws.Cell(row, 14).FormulaA1 = $"=(J{row}*15)/100";
ws.Cell(row, 15).Value = "บาท"; ws.Cell(row, 15).Value = "บาท";
ws.Cell(row, 16).Value = detail.contribution_central_expenditure; ws.Cell(row, 16).FormulaA1 = $"=(J{row}*{contributionPercent})/100";
ws.Cell(row, 17).Value = "บาท"; ws.Cell(row, 17).Value = "บาท";
ws.Cell(row, 18).Value = detail.expenditure_limit; ws.Cell(row, 18).FormulaA1 = $"=(J{row}*{frameworkPercent})/100";
ws.Cell(row, 19).Value = "บาท"; ws.Cell(row, 19).Value = "บาท";
ws.Range(ws.Cell(row, 1), ws.Cell(row, 19)).Style.Font.FontName = ws.Range(ws.Cell(row, 1), ws.Cell(row, 19)).Style.Font.FontName =
+41 -41
View File
@@ -500,8 +500,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:H4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:H4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:H4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:H4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("H4:H5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("H4:H5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -516,8 +516,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:I4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:I4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:I4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:I4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("I4:I5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("I4:I5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -532,8 +532,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:J4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:J4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:J4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:J4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("J4:J5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("J4:J5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -548,8 +548,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:K4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:K4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:K4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:K4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("K4:K5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("K4:K5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -564,8 +564,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:L4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:L4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:L4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:L4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("L4:L5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("L4:L5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -580,8 +580,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:M4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:M4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:M4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:M4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("M4:M5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("M4:M5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -596,8 +596,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:N4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:N4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:N4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:N4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("N4:N5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("N4:N5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -612,8 +612,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:O4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:O4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:O4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:O4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("O4:O5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("O4:O5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -628,8 +628,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:P4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:P4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:P4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:P4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("P4:P5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("P4:P5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -644,8 +644,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:Q4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:Q4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:Q4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:Q4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("Q4:Q5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("Q4:Q5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -660,8 +660,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:R4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:R4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:R4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:R4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("R4:R5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("R4:R5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -676,8 +676,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:S4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:S4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:S4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:S4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("S4:S5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("S4:S5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -692,8 +692,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:T4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:T4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:T4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:T4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("T4:T5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("T4:T5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -708,8 +708,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:U4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:U4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:U4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:U4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("U4:U5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("U4:U5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -724,8 +724,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:V4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:V4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:V4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:V4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("V4:V5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("V4:V5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -740,8 +740,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:W4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:W4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:W4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:W4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("W4:W5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("W4:W5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -756,8 +756,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:X4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:X4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:X4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:X4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("X4:X5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("X4:X5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -772,8 +772,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:Y4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:Y4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:Y4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:Y4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("X4:Y5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("X4:Y5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -788,8 +788,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:Z4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:Z4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:Z4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:Z4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("X4:Z5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("X4:Z5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -804,8 +804,8 @@ namespace rmutr_report.Controllers
ws.Range("A4:AA4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range("A4:AA4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range("A4:AA4").Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range("A4:AA4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
ws.Range("X4:AA5").Style.Border.RightBorder = XLBorderStyleValues.Thin; ws.Range("X4:AA5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
@@ -818,7 +818,7 @@ namespace rmutr_report.Controllers
// ws.Range("A4:W4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; // ws.Range("A4:W4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Range("A4:W4").Style.Fill.BackgroundColor = XLColor.PurpleX11; // ws.Range("A4:W4").Style.Fill.BackgroundColor = XLColor.PurpleX11;
// ws.Cell("W4").Style.Border.RightBorder = XLBorderStyleValues.Thin; // ws.Cell("W4").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues; // string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no + " " + header.strategic_issues);
// no++; // no++;
// ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; // ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
// ws.Cell(row, 1).Style.Border.OutsideBorder = // ws.Cell(row, 1).Style.Border.OutsideBorder =
+137 -155
View File
@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Net; using System.Net;
using ClosedXML.Excel; using ClosedXML.Excel;
using FastReport; using FastReport;
@@ -21,176 +22,157 @@ namespace rmutr_report.Controllers
{ {
this._setting = setting; this._setting = setting;
} }
/// <summary>ระดับชั้นของแต่ละแถว อนุมานจาก "no" (จำนวนจุด) หรือ prefix ของ expenditure_budget
/// เมื่อไม่มี "no" — ใช้กำหนดว่าแถวไหนเป็นแถวสรุปยอด (มีลูก) ต้องใส่สูตรรวม แทนตัวเลขคงที่</summary>
private static int GetDepth(operating_expenses_detail item)
{
if (!string.IsNullOrEmpty(item.no)) return item.no.Count(c => c == '.');
if (item.expenditure_budget != null && item.expenditure_budget.StartsWith(" - ")) return 4;
if (item.expenditure_budget != null && item.expenditure_budget.StartsWith(" - ")) return 3;
return 0;
}
[HttpPost, Route("reports/operating_expenses/{type}")] [HttpPost, Route("reports/operating_expenses/{type}")]
[ApiExplorerSettings(GroupName = "reports")] [ApiExplorerSettings(GroupName = "reports")]
public IActionResult GetExpensesReport([FromRoute] string type, public IActionResult GetExpensesReport([FromRoute] string type,
[FromBody] operating_expenses _operating_expenses) [FromBody] operating_expenses _operating_expenses)
{ {
var _operating_expensess = new List<operating_expenses>() { _operating_expenses };
Report report = new Report();
report.Load(_setting.report_path + "operating_expenses.frx");
report.RegisterData(_operating_expensess, "operating_expenses");
report.Prepare();
MemoryStream stream = new MemoryStream();
switch (type) switch (type)
{ {
case "pdf":
PDFExport pdf = new PDFExport();
report.Export(pdf, stream);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "application/pdf");
case "xls": case "xls":
case "xlsx": case "xlsx":
Excel2007Export excel = new Excel2007Export(); {
report.Export(excel, stream); using var workbook = new XLWorkbook();
stream.Seek(0, SeekOrigin.Begin); var ws = workbook.Worksheets.Add("ค่าใช้จ่ายดำเนินงาน");
//return File(stream, "application/vnd.ms-excel");
string date = DateTime.Now.ToString("yyyyMMddHHmmss"); ws.Column(1).Width = 11.03;
ws.Column(2).Width = 83.48;
ws.Column(3).Width = 26.77;
ws.Column(4).Width = 61.42;
void TitleRow(int row, string text, bool rightAlign = false)
{
var range = ws.Range(row, 1, row, 4).Merge();
range.Value = text;
range.Style.Font.FontName = "TH Sarabun New";
range.Style.Font.FontSize = 16;
range.Style.Font.Bold = true;
range.Style.Alignment.WrapText = true;
range.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
range.Style.Alignment.Horizontal = rightAlign
? XLAlignmentHorizontalValues.Right
: XLAlignmentHorizontalValues.Center;
}
TitleRow(1, $"ปีงบประมาณ {_operating_expenses.budget_year} {_operating_expenses.plan}");
TitleRow(2, _operating_expenses.text);
TitleRow(3, $"{_operating_expenses.faculty_name_th} {_operating_expenses.budget_location_name_th}");
TitleRow(4, $"หน่วย : {_operating_expenses.total_amount:N0} บาท", rightAlign: true);
// แถว 5 เว้นว่างไว้ (ตามรูปแบบรายงานเดิม)
const int headerRow = 6;
var headers = new[]
{
"ลำดับที่", "งบรายจ่าย", $"คำขอตั้ง\nปี {_operating_expenses.request_year}", "สรุปคำชี้แจง"
};
for (var col = 1; col <= 4; col++)
{
var cell = ws.Cell(headerRow, col);
cell.Value = headers[col - 1];
cell.Style.Font.FontName = "TH Sarabun New";
cell.Style.Font.FontSize = 16;
cell.Style.Font.Bold = true;
cell.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
cell.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
cell.Style.Alignment.WrapText = true;
cell.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
cell.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
}
var data = _operating_expenses.data ?? new List<operating_expenses_detail>();
var depths = data.Select(GetDepth).ToList();
var startRow = headerRow + 1;
for (var i = 0; i < data.Count; i++)
{
var row = startRow + i;
var item = data[i];
var depth = depths[i];
// ลูกโดยตรง = แถวถัดไปที่ลึกกว่าพอดี 1 ชั้น หยุดเมื่อเจอแถวที่ลึกเท่ากันหรือตื้นกว่า
var childRows = new List<int>();
for (var j = i + 1; j < data.Count && depths[j] > depth; j++)
{
if (depths[j] == depth + 1) childRows.Add(startRow + j);
}
ws.Cell(row, 1).Value = item.no;
ws.Cell(row, 2).Value = item.expenditure_budget;
if (childRows.Any())
{
ws.Cell(row, 3).FormulaA1 = "=" + string.Join("+", childRows.Select(r => $"C{r}"));
}
else
{
ws.Cell(row, 3).Value = item.amount ?? 0;
}
ws.Cell(row, 4).Value = item.clarification_summary;
var range = ws.Range(row, 1, row, 4);
range.Style.Font.FontName = "TH Sarabun New";
range.Style.Font.FontSize = 14;
range.Style.Alignment.WrapText = true;
range.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
range.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
range.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
ws.Cell(row, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Cell(row, 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
ws.Cell(row, 3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
ws.Cell(row, 3).Style.NumberFormat.Format = "#,##0_);(#,##0)";
ws.Cell(row, 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
}
using var xlsStream = new MemoryStream();
workbook.SaveAs(xlsStream);
xlsStream.Seek(0, SeekOrigin.Begin);
var xlsDate = DateTime.Now.ToString("yyyyMMddHHmmss");
return File( return File(
stream, xlsStream.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"operating_expenses_"+date + ".xlsx"); "operating_expenses_" + xlsDate + ".xlsx");
break; }
case "pdf":
case "doc": case "doc":
case "docx": case "docx":
Word2007Export word = new Word2007Export(); {
report.Export(word, stream); var _operating_expensess = new List<operating_expenses>() { _operating_expenses };
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "appllication/vnd.ms-word"); Report report = new Report();
break; report.Load(_setting.report_path + "operating_expenses.frx");
report.RegisterData(_operating_expensess, "operating_expenses");
report.Prepare();
MemoryStream stream = new MemoryStream();
if (type == "pdf")
{
PDFExport pdf = new PDFExport();
report.Export(pdf, stream);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "application/pdf");
}
else
{
Word2007Export word = new Word2007Export();
report.Export(word, stream);
stream.Seek(0, SeekOrigin.Begin);
return File(stream, "appllication/vnd.ms-word");
}
}
} }
return Ok(); return Ok();
} }
//{
// var workbook = new XLWorkbook();
// var ws = workbook.Worksheets.Add("ค่าใช้จ่ายดำเนินงาน");
// ws.Range("A1:D1").Merge().Value = "ปีงบประมาณ " + _operating_expenses.budget_year + " แผน " + _operating_expenses.plan;
// ws.Range("A1:D1").Style.Alignment.WrapText = true;
// ws.Range("A1:D1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Range("A1:D1").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("A1").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("A1").Style.Font.FontSize = 14;
// ws.Range("A1:D1").Style.Font.Bold = true;
// ws.Range("A2:D2").Merge().Value = "ผลผลิต " + _operating_expenses.product+ " หน่วยงาน " + _operating_expenses.agency + " พื้นที่ "+_operating_expenses.area;
// ws.Range("A2:D2").Style.Alignment.WrapText = true;
// ws.Range("A2:D2").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Range("A2:D2").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("A2").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("A2").Style.Font.FontSize = 14;
// ws.Range("A2:D2").Style.Font.Bold = true;
// ws.Cell("D3").Value = "หน่วย : "+ _operating_expenses.total_amount +" บาท";
// ws.Cell("D3").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("D3").Style.Font.FontSize = 14;
// ws.Cell("D3").Style.Font.Bold = true;
// ws.Cell("D3").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
// ws.Cell("D3").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// //ws.Cell("D3").DataType = XLDataType.Number;
// ws.Cell("D3").Style.NumberFormat.NumberFormatId = 2;
// ws.Cell("A4").Value = "ลำดับที่";
// ws.Cell("A4").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("A4").Style.Font.FontSize = 14;
// ws.Cell("A4").Style.Font.Bold = true;
// ws.Cell("A4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell("A4").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("A4").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("A4").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("A5").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("A5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("B4").Value = "งบรายจ่าย";
// ws.Cell("B4").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("B4").Style.Font.FontSize = 14;
// ws.Cell("B4").Style.Font.Bold = true;
// ws.Cell("B4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell("B4").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("B4").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("B4").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("B5").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("B5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("C4").Value = "คำขอตั้ง";
// ws.Cell("C4").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("C4").Style.Font.FontSize = 14;
// ws.Cell("C4").Style.Font.Bold = true;
// ws.Cell("C4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell("C4").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("C4").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("C4").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("C5").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("C5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("D4").Value = "สรุปคำชี้แจง";
// ws.Cell("D4").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("D4").Style.Font.FontSize = 14;
// ws.Cell("D4").Style.Font.Bold = true;
// ws.Cell("D4").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell("D4").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
// ws.Cell("D4").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("D4").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("D5").Style.Border.TopBorder = XLBorderStyleValues.Thin;
// ws.Cell("D5").Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell("A5").Style.Border.TopBorder = XLBorderStyleValues.None;
// ws.Cell("B5").Style.Border.TopBorder = XLBorderStyleValues.None;
// ws.Cell("C5").Style.Border.TopBorder = XLBorderStyleValues.None;
// ws.Cell("D5").Style.Border.TopBorder = XLBorderStyleValues.None;
//
// ws.Column(1).Width = 10;
// ws.Column(2).Width = 40;
// ws.Column(3).Width = 30;
// ws.Column(4).Width = 50;
// int row = 6;
// ws.Cell(row, 3).SetDataType(XLDataType.Number);
// if (_operating_expenses != null)
// {
// ws.Cell("C5").Value = "ปี "+_operating_expenses.request_year;
// ws.Cell("C5").Style.Alignment.WrapText = true;
// ws.Cell("C5").Style.Font.FontName = "TH SarabunPSK";
// ws.Cell("C5").Style.Font.FontSize = 14;
// ws.Cell("C5").Style.Font.Bold = true;
// ws.Cell("C5").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell("C5").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
//
// foreach (var expenses in _operating_expenses.data)
// {
// ws.Cell(row, 1).Value = "'"+expenses.no;
// ws.Cell(row, 2).Value = expenses.expenditure_budget;
// ws.Cell(row, 3).Value = expenses.amount;
// ws.Cell(row, 4).Value = expenses.clarification_summary;
//
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Font.FontName =
// "TH SarabunPSK";
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Font.FontSize = 14;
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Alignment.WrapText = true;
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Alignment.Vertical =
// XLAlignmentVerticalValues.Center;
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
// ws.Range(ws.Cell(row, 1), ws.Cell(row, 4)).Style.Border.RightBorder = XLBorderStyleValues.Thin;
// ws.Cell(row, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
// ws.Cell(row, 2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
// ws.Cell(row, 3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Right;
// ws.Cell(row, 4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
// ws.Range(ws.Cell(5, 1), ws.Cell(5, 4)).Style.Font.Bold = true;
// ws.Range(ws.Cell(6, 1), ws.Cell(6, 4)).Style.Border.BottomBorder = XLBorderStyleValues.Double;
// ws.Range(ws.Cell(6, 1), ws.Cell(6, 4)).Style.Font.Bold = true;
// //ws.Cell(row, 3).Style.NumberFormat.NumberFormatId = 2;
// //ws.Cell(row, 3).DataType = XLDataType.Number;
// //ws.Cell(row,3).SetDataType(XLDataType.Number);
// ws.Cell(row,3).Style.NumberFormat.SetFormat("#,#");
//
// row++;
// }
// }
// using (var stream = new MemoryStream())
// {
// workbook.SaveAs(stream);
// var content = stream.ToArray();
// string date = DateTime.Now.ToString("yyyyMMddHHmmss");
// return File(
// content,
// "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
// "operatingexpenses_" + date + ".xlsx");
// }
//}
//}
} }
} }
+43 -2
View File
@@ -138,6 +138,12 @@ namespace rmutr_report.Controllers
ws.Cell("A1").Style.Font.FontSize = 16; ws.Cell("A1").Style.Font.FontSize = 16;
ws.Range("D2:E2").Merge().Value = "ค่าเป้าหมาย ปี " + _kpi.academic_year.Substring(2, 2); ws.Range("D2:E2").Merge().Value = "ค่าเป้าหมาย ปี " + _kpi.academic_year.Substring(2, 2);
ws.Range("D2:E2").Style.Font.Bold = true; ws.Range("D2:E2").Style.Font.Bold = true;
WriteReferenceHeaders(ws, _kpi.vision_data, ref row, ref rowno);
WriteReferenceHeaders(ws, _kpi.popularity_data, ref row, ref rowno);
WriteReferenceHeaders(ws, _kpi.uniqueness_data, ref row, ref rowno);
WriteReferenceHeaders(ws, _kpi.identity_data, ref row, ref rowno);
foreach (var header in _kpi.header_data) foreach (var header in _kpi.header_data)
{ {
if (header.header_1 != null || header.header_1 != "") if (header.header_1 != null || header.header_1 != "")
@@ -271,8 +277,6 @@ namespace rmutr_report.Controllers
} }
} }
//} //}
// } // }
@@ -287,6 +291,43 @@ namespace rmutr_report.Controllers
"kpi_" + date + ".xlsx"); "kpi_" + date + ".xlsx");
} }
} }
private void WriteReferenceHeaders(IXLWorksheet ws, List<kpi_reference_header> headers, ref int row, ref int rowno)
{
if (headers == null) return;
foreach (var header in headers)
{
if (!string.IsNullOrEmpty(header.header_1))
{
ws.Cell(row, 1).Value = header.header_1;
ws.Cell(row, 1).Style.Font.Bold = true;
ws.Range(ws.Cell(row, 1), ws.Cell(row, 8)).Merge().Style.Fill.BackgroundColor = XLColor.Bisque;
ws.Range(ws.Cell(row, 1), ws.Cell(row, 8)).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
ws.Cell(row, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
row++;
}
foreach (var data1 in header.data_detail ?? new List<kpi_data_details2>())
{
ws.Cell(row, 2).Value = rowno;
ws.Cell(row, 3).Value = data1.name;
ws.Cell(row, 4).Value = data1.unit;
ws.Cell(row, 5).Value = data1.value;
ws.Cell(row, 6).Value = data1.responsible_person;
ws.Cell(row, 7).Value = data1.responsible_work;
ws.Cell(row, 8).Value = data1.collector;
for (var c = 1; c <= 8; c++)
{
ws.Cell(row, c).Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
ws.Cell(row, c).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
ws.Cell(row, c).Style.Border.RightBorder = XLBorderStyleValues.Thin;
ws.Cell(row, c).Style.Alignment.WrapText = true;
}
row++;
rowno++;
}
}
}
[HttpPost, Route("reports/kpi_performance_expenditure_budget/{type}")] [HttpPost, Route("reports/kpi_performance_expenditure_budget/{type}")]
[ApiExplorerSettings(GroupName = "reports")] [ApiExplorerSettings(GroupName = "reports")]
public IActionResult GetKpiBudgetReport([FromRoute] string type, [FromBody] kpi_performance_expenditure_budget kpiPerformance) public IActionResult GetKpiBudgetReport([FromRoute] string type, [FromBody] kpi_performance_expenditure_budget kpiPerformance)
+13 -7
View File
@@ -4113,13 +4113,19 @@ namespace rmutr_report.Controllers
public IActionResult GetForm2Report([FromRoute] string type, public IActionResult GetForm2Report([FromRoute] string type,
[FromBody] form_1_2 form1) [FromBody] form_1_2 form1)
{ {
form1.dates = form1.date.Value.ToString("dd MMMM yyyy", CultureInfo.CreateSpecificCulture("th-TH")); if (form1.date != null)
form1.day_start_workings = {
form1.start_working.Value.ToString("dd", CultureInfo.CreateSpecificCulture("th-TH")); form1.dates = form1.date.Value.ToString("dd MMMM yyyy", CultureInfo.CreateSpecificCulture("th-TH"));
form1.month_start_workings = }
form1.start_working.Value.ToString("MMMM", CultureInfo.CreateSpecificCulture("th-TH")); if (form1.start_working != null)
form1.year_start_workings = {
form1.start_working.Value.ToString("yyyy", CultureInfo.CreateSpecificCulture("th-TH")); form1.day_start_workings =
form1.start_working.Value.ToString("dd", CultureInfo.CreateSpecificCulture("th-TH"));
form1.month_start_workings =
form1.start_working.Value.ToString("MMMM", CultureInfo.CreateSpecificCulture("th-TH"));
form1.year_start_workings =
form1.start_working.Value.ToString("yyyy", CultureInfo.CreateSpecificCulture("th-TH"));
}
var form_1 = new List<form_1_2>() { form1 }; var form_1 = new List<form_1_2>() { form1 };
Report report = new Report(); Report report = new Report();
@@ -145,8 +145,10 @@ namespace rmutr_report.Controllers
ws.Cell(row, 5).Value = data1.responsible_person; ws.Cell(row, 5).Value = data1.responsible_person;
ws.Cell(row, 6).Value = data1.compiler_reporter; ws.Cell(row, 6).Value = data1.compiler_reporter;
ws.Cell(row, 7).Value = data1.plan_value; ws.Cell(row, 7).Value = data1.plan_value;
ws.Cell(row, 7).Style.NumberFormat.Format = "#,##0.00";
ws.Cell(row, 8).Value = data1.result; ws.Cell(row, 8).Value = data1.result;
ws.Cell(row, 9).Value = data1.achieve; ws.Cell(row, 8).Style.NumberFormat.Format = "#,##0.00";
ws.Cell(row, 9).Value = data1.achieve == "X" ? "❌" : "✅";
ws.Cell(row, 10).Value = data1.note; ws.Cell(row, 10).Value = data1.note;
ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
@@ -166,6 +168,8 @@ namespace rmutr_report.Controllers
ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.WrapText = true; ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Alignment.WrapText = true;
ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Font.FontName = "TH SarabunPSK"; ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Font.FontName = "TH SarabunPSK";
ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Font.FontSize = 16; ws.Range(ws.Cell(row, 1),ws.Cell(row,10)).Style.Font.FontSize = 16;
ws.Cell(row, 9).Style.Font.FontSize = 18;
row++; row++;
rowno++; rowno++;
} }
@@ -104,14 +104,14 @@ namespace rmutr_report.Controllers
{ {
foreach (var header in _kpi.header_data) foreach (var header in _kpi.header_data)
{ {
string kpiname = "ประเด็นยุทธ์ศาสตร์ที่ " + no +" " + header.strategic_issues; string kpiname = header.is_reference_section ? header.strategic_issues : ("ประเด็นยุทธ์ศาสตร์ที่ " + no +" " + header.strategic_issues);
no++; if (!header.is_reference_section) no++;
ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true; ws.Cell(row, 1).SetValue(kpiname).Style.Font.Bold = true;
// ws.Cell(row, 2).Value = header.header_1; // ws.Cell(row, 2).Value = header.header_1;
ws.Cell(row, 1).Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Cell(row, 1).Style.Fill.BackgroundColor = XLColor.FromHtml("#CAD1EB");
ws.Cell(row, 1).Style.Border.OutsideBorder = ws.Cell(row, 1).Style.Border.OutsideBorder =
XLBorderStyleValues.None; XLBorderStyleValues.None;
ws.Range(ws.Cell(row, 1), ws.Cell(row, 10)).Merge().Style.Fill.BackgroundColor = XLColor.PurpleX11; ws.Range(ws.Cell(row, 1), ws.Cell(row, 10)).Merge().Style.Fill.BackgroundColor = XLColor.FromHtml("#CAD1EB");
ws.Cell(row, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left; ws.Cell(row, 1).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
ws.Cell(row, 1).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; ws.Cell(row, 1).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;
+39
View File
@@ -63,6 +63,45 @@ namespace rmutr_report.Models.RoThree
public string budget_year_name_th { get; set; } 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> form_1_2_images { get; set; }
public List<t_form_1_2_images_2> form_1_2_images_2 { 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 public class t_form_1_2_images
+68
View File
@@ -304,6 +304,74 @@ public class agency_report
public string text_26_4_row_3_3 { get; set; } public string text_26_4_row_3_3 { get; set; }
public bool? is_sent { get; set; } public bool? is_sent { get; set; }
public List<agency_report_detail> agency_report_details { get; set; } public List<agency_report_detail> agency_report_details { get; set; }
// 13. วิสัยทัศน์ /ค่านิยม/เอกลักษณ์ / อัตลักษณ์
public List<agency_report_popularity> agency_report_popularities { get; set; }
public List<agency_report_vision> agency_report_visions { get; set; }
public List<agency_report_uniqueness> agency_report_uniquenesses { get; set; }
public List<agency_report_identity> agency_report_identities { get; set; }
public List<agency_report_vision_indicator> agency_report_vision_indicators { get; set; }
public List<agency_report_uniqueness_indicator> agency_report_uniqueness_indicators { get; set; }
public List<agency_report_identity_indicator> agency_report_identity_indicators { get; set; }
public List<agency_report_popularity_indicator> agency_report_popularity_indicators { get; set; }
// ข้อความรวม (คั่นด้วยขึ้นบรรทัดใหม่) สำหรับแสดงในรายงาน คำนวณใน AgencyReport.Controller.cs
public string vision_names_text { get; set; }
public string vision_indicators_text { get; set; }
public string popularity_names_text { get; set; }
public string popularity_indicators_text { get; set; }
public string uniqueness_names_text { get; set; }
public string uniqueness_indicators_text { get; set; }
public string identity_names_text { get; set; }
public string identity_indicators_text { get; set; }
}
public class agency_report_popularity
{
public Guid? popularity_uid { get; set; }
public string popularity_name_th { get; set; }
}
public class agency_report_vision
{
public Guid? vision_uid { get; set; }
public string vision_name_th { get; set; }
}
public class agency_report_uniqueness
{
public Guid? uniqueness_uid { get; set; }
public string uniqueness_name_th { get; set; }
}
public class agency_report_identity
{
public Guid? identity_uid { get; set; }
public string identity_name_th { get; set; }
}
public class agency_report_vision_indicator
{
public Guid? vision_indicator_uid { get; set; }
public string vision_indicator_name { get; set; }
}
public class agency_report_uniqueness_indicator
{
public Guid? uniqueness_indicator_uid { get; set; }
public string uniqueness_indicator_name { get; set; }
}
public class agency_report_identity_indicator
{
public Guid? identity_indicator_uid { get; set; }
public string identity_indicator_name { get; set; }
}
public class agency_report_popularity_indicator
{
public Guid? popularity_indicator_uid { get; set; }
public string popularity_indicator_name { get; set; }
} }
public class agency_report_detail public class agency_report_detail
+1
View File
@@ -31,6 +31,7 @@ namespace rmutr_report.Models
{ {
public string year_range { get; set; } public string year_range { get; set; }
public string strategic_issues { get; set;} public string strategic_issues { get; set;}
public bool is_reference_section { get; set; }
//public string agency_name { get; set; } //public string agency_name { get; set; }
public List<detail_kpi_datas> data { get; set; } public List<detail_kpi_datas> data { get; set; }
} }
+1
View File
@@ -11,6 +11,7 @@ namespace rmutr_report.Models
public string responsible_person { get; set; } public string responsible_person { get; set; }
public string phone_no { get; set; } public string phone_no { get; set; }
public string product { get; set; } public string product { get; set; }
public string subject { get; set; }
public List<durable_articles_three_detail> data { get; set; } public List<durable_articles_three_detail> data { get; set; }
public decimal? total_amount { get; set; } public decimal? total_amount { get; set; }
public string durable_type { get; set; } public string durable_type { get; set; }
+13 -2
View File
@@ -5,9 +5,20 @@ namespace rmutr_report.Models
public class kpi public class kpi
{ {
public string academic_year { get; set; } public string academic_year { get; set; }
public List<kpi_data_detail> header_data { get; set; } public List<kpi_data_detail> header_data { get; set; }
public List<kpi_reference_header> vision_data { get; set; }
public List<kpi_reference_header> popularity_data { get; set; }
public List<kpi_reference_header> uniqueness_data { get; set; }
public List<kpi_reference_header> identity_data { get; set; }
}
public class kpi_reference_header
{
public string header_1 { get; set; }
public List<kpi_data_details2> data_detail { get; set; }
} }
public class kpi_data_detail public class kpi_data_detail
+2
View File
@@ -14,6 +14,8 @@ namespace rmutr_report.Models
{ {
public string strategic_issues { get; set; } public string strategic_issues { get; set; }
public bool is_reference_section { get; set; }
public List<detail_kpi_performance_result> data { get; set; } public List<detail_kpi_performance_result> data { get; set; }
} }
+2
View File
@@ -46,6 +46,8 @@ namespace rmutr_report.Models
public decimal? contribution_central_budget { get; set; } public decimal? contribution_central_budget { get; set; }
public decimal? contribution_central_expenditure { get; set; } public decimal? contribution_central_expenditure { get; set; }
public decimal? expenditure_limit { get; set; } public decimal? expenditure_limit { get; set; }
public decimal? contribution_percent { get; set; }
public decimal? framework_percent { get; set; }
public int? topic_type { get; set; } public int? topic_type { get; set; }
+24 -18
View File
@@ -462,27 +462,33 @@
</ReportPage> </ReportPage>
<ReportPage Name="Page4" PaperHeight="300" Watermark.Font="Arial, 60pt"> <ReportPage Name="Page4" PaperHeight="300" Watermark.Font="Arial, 60pt">
<ReportTitleBand Name="ReportTitle1" Width="718.2" Height="37.8"> <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="37.8">
<TextObject Name="Text5" Left="9.45" Width="708.75" Height="28.35" Text="13. ผลการดำเนินโครงการนี้สอดคล้องค่านิยม (D - MOVE UP) ของมหาวิทยาลัยด้านใด" Font="TH Sarabun New, 16pt, style=Bold"/> <TextObject Name="Text5" Left="9.45" Width="708.75" Height="28.35" Text="13. วิสัยทัศน์ /ค่านิยม/เอกลักษณ์ / อัตลักษณ์" Font="TH Sarabun New, 16pt, style=Bold"/>
</ReportTitleBand> </ReportTitleBand>
<DataBand Name="Data4" Top="42.74" Width="718.2" Height="330.75" DataSource="agency_report"> <DataBand Name="Data4" Top="42.74" Width="718.2" Height="510.3" DataSource="agency_report">
<TextObject Name="Text458" Left="75.6" Width="642.6" Height="28.35" Text="Digital innovation (มุ่งสร้างนวัตกรรมดิจิทัลวิถีใหม่)" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x1Header" Left="9.45" Top="0" Width="708.75" Height="28.35" Text="13.1 วิสัยทัศน์" Font="TH Sarabun New, 16pt, style=Bold"/>
<TextObject Name="Text459" Left="47.25" Top="3.78" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_1]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x1NamesLabel" Left="9.45" Top="28.35" Width="349.65" Height="18.9" Text="ชื่อ" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text460" Left="75.6" Top="28.35" Width="642.6" Height="28.35" Text="Moral (มีคุณธรรม ศรัทธาหลักธรรมาภิบาล)" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x1IndicatorsLabel" Left="368.55" Top="28.35" Width="349.65" Height="18.9" Text="ตัวชี้วัด" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text461" Left="47.25" Top="32.13" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_2]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x1Names" Left="9.45" Top="47.25" Width="349.65" Height="56.7" Text="[agency_report.vision_names_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text462" Left="75.6" Top="56.7" Width="642.6" Height="28.35" Text="Open mind (ใจเปิดกว้างในการเรียนรู้ตลอดชีวิต)" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x1Indicators" Left="368.55" Top="47.25" Width="349.65" Height="56.7" Text="[agency_report.vision_indicators_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text463" Left="47.25" Top="60.48" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_3]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x2Header" Left="9.45" Top="103.95" Width="708.75" Height="28.35" Text="13.2 ค่านิยม" Font="TH Sarabun New, 16pt, style=Bold"/>
<TextObject Name="Text464" Left="75.6" Top="85.05" Width="642.6" Height="28.35" Text="Value (สอนสร้างเสริมเพิ่มคุณค่า)" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x2NamesLabel" Left="9.45" Top="132.3" Width="349.65" Height="18.9" Text="ชื่อ" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text465" Left="47.25" Top="88.83" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_4]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x2IndicatorsLabel" Left="368.55" Top="132.3" Width="349.65" Height="18.9" Text="ตัวชี้วัด" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text466" Left="75.6" Top="113.4" Width="642.6" Height="28.35" Text="Eentrepreneurship (สำนึกความเป็นผู้ประกอบการ)" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x2Names" Left="9.45" Top="151.2" Width="349.65" Height="56.7" Text="[agency_report.popularity_names_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text467" Left="47.25" Top="117.18" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_5]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text13x2Indicators" Left="368.55" Top="151.2" Width="349.65" Height="56.7" Text="[agency_report.popularity_indicators_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text468" Left="75.6" Top="141.75" Width="642.6" Height="28.35" Text="Unity (สมัครสมานสามัคคี)" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text469" Left="47.25" Top="145.53" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_6]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text470" Left="75.6" Top="170.1" Width="642.6" Height="28.35" Text="Porfessional (มืออาชีพ ประสิทธิภาพดีมีวินัยและจรรยาบรรณ)" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text471" Left="47.25" Top="173.88" Width="18.9" Height="18.9" Border.Lines="All" Text="[agency_report.text_13_7]" HorzAlign="Center" VertAlign="Center" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text472" Left="9.45" Top="207.9" Width="396.9" Height="28.35" Text="สามารถนำไปพัฒนาอย่างไร " Font="TH Sarabun New, 16pt"/> <TextObject Name="Text472" Left="9.45" Top="207.9" Width="396.9" Height="28.35" Text="สามารถนำไปพัฒนาอย่างไร " Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text473" Left="9.45" Top="236.25" Width="708.75" Height="66.15" Text="[agency_report.text_13_remark]" Font="TH Sarabun New, 16pt" Clip="false"/> <TextObject Name="Text473" Left="9.45" Top="236.25" Width="708.75" Height="66.15" Text="[agency_report.text_13_remark]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text474" Left="9.45" Top="302.4" Width="708.75" Height="28.35" Text="14.1 ตัวชี้วัดผลสัมฤทธิ์" Font="TH Sarabun New, 16pt, style=Bold"/> <TextObject Name="Text13x3Header" Left="9.45" Top="302.4" Width="708.75" Height="28.35" Text="13.3 เอกลักษณ์" Font="TH Sarabun New, 16pt, style=Bold"/>
<DataBand Name="Data6" Top="378.43" Width="718.2" Height="28.35" DataSource="agency_report_details"> <TextObject Name="Text13x3NamesLabel" Left="9.45" Top="330.75" Width="349.65" Height="18.9" Text="ชื่อ" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text13x3IndicatorsLabel" Left="368.55" Top="330.75" Width="349.65" Height="18.9" Text="ตัวชี้วัด" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text13x3Names" Left="9.45" Top="349.65" Width="349.65" Height="56.7" Text="[agency_report.uniqueness_names_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text13x3Indicators" Left="368.55" Top="349.65" Width="349.65" Height="56.7" Text="[agency_report.uniqueness_indicators_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text13x4Header" Left="9.45" Top="406.35" Width="708.75" Height="28.35" Text="13.4 อัตลักษณ์" Font="TH Sarabun New, 16pt, style=Bold"/>
<TextObject Name="Text13x4NamesLabel" Left="9.45" Top="434.7" Width="349.65" Height="18.9" Text="ชื่อ" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text13x4IndicatorsLabel" Left="368.55" Top="434.7" Width="349.65" Height="18.9" Text="ตัวชี้วัด" Font="TH Sarabun New, 14pt"/>
<TextObject Name="Text13x4Names" Left="9.45" Top="453.6" Width="349.65" Height="56.7" Text="[agency_report.identity_names_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text13x4Indicators" Left="368.55" Top="453.6" Width="349.65" Height="56.7" Text="[agency_report.identity_indicators_text]" Font="TH Sarabun New, 16pt" Clip="false"/>
<TextObject Name="Text474" Left="9.45" Top="510.3" Width="708.75" Height="28.35" Text="14.1 ตัวชี้วัดผลสัมฤทธิ์" Font="TH Sarabun New, 16pt, style=Bold"/>
<DataBand Name="Data6" Top="538.65" Width="718.2" Height="28.35" DataSource="agency_report_details">
<TextObject Name="Text476" Left="9.45" Width="708.75" Height="28.35" Text="[agency_report.agency_report_details.text_1]" Font="TH Sarabun New, 16pt" Clip="false"/> <TextObject Name="Text476" Left="9.45" Width="708.75" Height="28.35" Text="[agency_report.agency_report_details.text_1]" Font="TH Sarabun New, 16pt" Clip="false"/>
</DataBand> </DataBand>
</DataBand> </DataBand>
File diff suppressed because one or more lines are too long
+10 -7
View File
@@ -9,6 +9,7 @@
<Column Name="responsible_person" DataType="System.String"/> <Column Name="responsible_person" DataType="System.String"/>
<Column Name="phone_no" DataType="System.String"/> <Column Name="phone_no" DataType="System.String"/>
<Column Name="product" DataType="System.String"/> <Column Name="product" DataType="System.String"/>
<Column Name="subject" DataType="System.String"/>
<Column Name="total_amount" DataType="System.Decimal"/> <Column Name="total_amount" DataType="System.Decimal"/>
<Column Name="durable_type" DataType="System.String"/> <Column Name="durable_type" DataType="System.String"/>
<Column Name="building_name" DataType="System.String"/> <Column Name="building_name" DataType="System.String"/>
@@ -107,14 +108,16 @@
</BusinessObjectDataSource> </BusinessObjectDataSource>
</Dictionary> </Dictionary>
<ReportPage Name="Page1" PaperWidth="260" PaperHeight="327" LeftMargin="25" TopMargin="20" RightMargin="15" Watermark.Font="Arial, 60pt"> <ReportPage Name="Page1" PaperWidth="260" PaperHeight="327" LeftMargin="25" TopMargin="20" RightMargin="15" Watermark.Font="Arial, 60pt">
<ReportTitleBand Name="ReportTitle1" Width="831.6" Height="170.1"> <ReportTitleBand Name="ReportTitle1" Width="831.6" Height="198.45">
<TextObject Name="Text40" Width="831.6" Height="28.35" Text="รายละเอียดคำชี้แจงค่าครุภัณฑ์ งบประมาณรายจ่ายประจำปี [durable_articles_three.budget_year]" HorzAlign="Center" Font="TH Sarabun New, 16pt, style=Bold, Underline"/> <TextObject Name="Text40" Width="831.6" Height="28.35" Text="รายละเอียดคำชี้แจงค่าครุภัณฑ์ งบประมาณรายจ่ายประจำปี [durable_articles_three.budget_year]" HorzAlign="Center" Font="TH Sarabun New, 16pt, style=Bold, Underline"/>
<TextObject Name="Text42" Top="28.35" Width="831.6" Height="28.35" Text="หน่วยงาน / คณะ [durable_articles_three.agency_faculty] สาขา [durable_articles_three.major] พื้นที่ [durable_articles_three.area]" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text42" Top="28.35" Width="831.6" Height="28.35" Text="หน่วยงาน / คณะ [durable_articles_three.agency_faculty] สาขา [durable_articles_three.major] พื้นที่ [durable_articles_three.area]" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text48" Top="56.7" Width="831.6" Height="28.35" Text="ชื่อผู้รับผิดชอบ ชื่อ [durable_articles_three.responsible_person] เบอร์โทรศัพท์/มือถือ [durable_articles_three.phone_no]" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text48" Top="56.7" Width="831.6" Height="28.35" Text="ชื่อผู้รับผิดชอบ ชื่อ [durable_articles_three.responsible_person] เบอร์โทรศัพท์/มือถือ [durable_articles_three.phone_no]" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text51" Top="85.05" Width="56.7" Height="28.35" Text="ผลผลิต" Font="TH Sarabun New, 16pt, style=Bold"/> <TextObject Name="Text51" Top="85.05" Width="56.7" Height="28.35" Text="ผลผลิต" Font="TH Sarabun New, 16pt, style=Bold"/>
<TextObject Name="Text52" Left="56.7" Top="85.05" Width="774.9" Height="28.35" Text="[durable_articles_three.product]" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text52" Left="56.7" Top="85.05" Width="774.9" Height="28.35" Text="[durable_articles_three.product]" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text53" Top="113.4" Width="831.6" Height="28.35" Text="1. รายการครุภัณฑ์" Font="TH Sarabun New, 16pt, style=Bold"/> <TextObject Name="TextSubjectLabel" Top="113.4" Width="75.6" Height="28.35" Text="ชื่อเรื่อง" Font="TH Sarabun New, 16pt, style=Bold"/>
<TableObject Name="Table1" Top="141.75" Width="831.6" Height="28.35"> <TextObject Name="TextSubjectValue" Left="75.6" Top="113.4" Width="756" Height="28.35" Text="[durable_articles_three.subject]" Font="TH Sarabun New, 16pt"/>
<TextObject Name="Text53" Top="141.75" Width="831.6" Height="28.35" Text="1. รายการครุภัณฑ์" Font="TH Sarabun New, 16pt, style=Bold"/>
<TableObject Name="Table1" Top="170.1" Width="831.6" Height="28.35">
<TableColumn Name="Column1" Width="406.35"/> <TableColumn Name="Column1" Width="406.35"/>
<TableColumn Name="Column2" Width="132.3"/> <TableColumn Name="Column2" Width="132.3"/>
<TableColumn Name="Column3" Width="141.75"/> <TableColumn Name="Column3" Width="141.75"/>
@@ -127,8 +130,8 @@
</TableRow> </TableRow>
</TableObject> </TableObject>
</ReportTitleBand> </ReportTitleBand>
<DataBand Name="Data1" Top="174.4" Width="831.6"> <DataBand Name="Data1" Top="202.75" Width="831.6">
<DataBand Name="Data2" Top="178.7" Width="831.6" Height="47.25" DataSource="data"> <DataBand Name="Data2" Top="207.05" Width="831.6" Height="47.25" DataSource="data">
<TableObject Name="Table2" Width="831.6" Height="47.25"> <TableObject Name="Table2" Width="831.6" Height="47.25">
<TableColumn Name="Column5" Width="406.35"/> <TableColumn Name="Column5" Width="406.35"/>
<TableColumn Name="Column6" Width="132.3"/> <TableColumn Name="Column6" Width="132.3"/>
@@ -141,7 +144,7 @@
<TableCell Name="Cell8" Border.Lines="All" Text="[durable_articles_three.data.amount]" Format="Number" Format.UseLocale="true" Format.DecimalDigits="2" HorzAlign="Right" Font="TH Sarabun New, 14pt"/> <TableCell Name="Cell8" Border.Lines="All" Text="[durable_articles_three.data.amount]" Format="Number" Format.UseLocale="true" Format.DecimalDigits="2" HorzAlign="Right" Font="TH Sarabun New, 14pt"/>
</TableRow> </TableRow>
</TableObject> </TableObject>
<DataFooterBand Name="DataFooter1" Top="230.25" Width="831.6" Height="28.35"> <DataFooterBand Name="DataFooter1" Top="258.6" Width="831.6" Height="28.35">
<TableObject Name="Table3" Width="831.6" Height="28.35"> <TableObject Name="Table3" Width="831.6" Height="28.35">
<TableColumn Name="Column9" Width="406.35"/> <TableColumn Name="Column9" Width="406.35"/>
<TableColumn Name="Column10" Width="132.3"/> <TableColumn Name="Column10" Width="132.3"/>
@@ -157,7 +160,7 @@
</DataFooterBand> </DataFooterBand>
</DataBand> </DataBand>
</DataBand> </DataBand>
<ReportSummaryBand Name="ReportSummary1" Top="262.9" Width="831.6" Height="680.4"> <ReportSummaryBand Name="ReportSummary1" Top="291.25" Width="831.6" Height="680.4">
<TextObject Name="Text65" Top="330.75" Width="831.6" Height="28.35" Text="6. เหตุผลความจำเป็น" Font="TH Sarabun New, 16pt, style=Bold"/> <TextObject Name="Text65" Top="330.75" Width="831.6" Height="28.35" Text="6. เหตุผลความจำเป็น" Font="TH Sarabun New, 16pt, style=Bold"/>
<TextObject Name="Text66" Top="359.1" Width="831.6" Height="321.3" CanGrow="true" CanShrink="true" ShiftMode="WhenOverlapped" CanBreak="false" Text="[durable_articles_three.necessity_reason]" Font="TH Sarabun New, 16pt" Clip="false" Wysiwyg="true"/> <TextObject Name="Text66" Top="359.1" Width="831.6" Height="321.3" CanGrow="true" CanShrink="true" ShiftMode="WhenOverlapped" CanBreak="false" Text="[durable_articles_three.necessity_reason]" Font="TH Sarabun New, 16pt" Clip="false" Wysiwyg="true"/>
<TextObject Name="Text64" Top="302.4" Width="859.95" Height="28.35" Text="[durable_articles_three.strategy]" Font="TH Sarabun New, 16pt"/> <TextObject Name="Text64" Top="302.4" Width="859.95" Height="28.35" Text="[durable_articles_three.strategy]" Font="TH Sarabun New, 16pt"/>