feat: implement advanced bidirectional field referencing and cross-module path resolution

- Core Logic Enhancements:
    - Implement bidirectional field referencing between <FIELDS>, <LAYOUT>, and <TITLES> tags in .frml files, enabling seamless navigation from definitions to usages and vice versa.
    - Add robust support for AJAX-OPTION field mapping:
        - SRC attribute: Links to field definitions within defs/ajax.xml datasets.
        - TARGET attribute: Links to local field definitions within the same form.
    - Implement global grid resolution: GRID-ID now searches across the current file and all recursively included files (<INCLUDE>).
    - Enhance deep recursive search for fields/sections within nested tags like <SECTION>, <ROW>, and <FIELD-LIST>.

- Path Resolution & Helpers (DynFormPathUtils):
    - Added support for module-relative paths starting with # (mapping to view/frm/).
    - Added support for cross-module paths starting with / (mapping to WEB-INF/app/module/{module}/view/frm/).
    - Implemented auto-correction for common keyboard typos (Thai 'ิ' instead of /).
    - Added specialized helpers for locating ajax.xml and included files within the framework's structure.

- Smart Completion Enhancements:
    - Added context-aware completion for TARGET and SRC fields in AJAX update-fields.
    - Enabled global GRID-ID completion by scanning all included resources.
    - Improved dataset completion to include both local and AJAX-defined datasets.

- Test Resources:
    - Added a comprehensive set of real-world examples (bdgt04, bdgt05, bdgt06) in DevResources/full-examples/ to validate complex cross-module and master-detail scenarios.
This commit is contained in:
2026-04-10 12:56:04 +07:00
parent da049ea016
commit f705cd11b9
99 changed files with 20379 additions and 30 deletions

View File

@@ -0,0 +1,297 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-construct-budget.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECTS</TABLENAME>
<KEYFIELDS>PROJ_ID</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, PROJ_TYPE
, PROJ_YEAR
, PJM_CODE
, STM_CODE
, BTM_CODE
, ACM_CODE
, BUD.GET_ACTIVITY(ACM_CODE) ACM_NAME
, PLAN_TYPE
, PROJ_DURATION
, PROJ_INST_COUNT
, PROJ_START_YEAR
, PROJ_END_YEAR
, PROJ_FOR_STAFF
, PROJ_FROM_YEAR
, CREATE_BY
, CREATE_TIME
, UPDATE_BY
, UPDATE_TIME
</SELECT>
<FROM>FROM PROJECTS</FROM>
<FILTER>WHERE STM_CODE = :STM_CODE AND PROJ_TYPE='CNST'</FILTER>
<ORDER>ORDER BY PROJ_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="PROJ_TYPE" TYPE="TEXT" LABEL="ประเภทโครงการ" WIDTH="25"/>
<FIELD NAME="PROJ_YEAR" TYPE="NUMBER" LABEL="ปีงบประมาณ" WIDTH="15"/>
<FIELD NAME="PJM_CODE" TYPE="TEXT" LABEL="รหัสโครงการ (BUD)" WIDTH="20"/>
<FIELD NAME="STM_CODE" TYPE="TEXT" LABEL="รหัสหน่วยงาน" WIDTH="10"/>
<FIELD NAME="BTM_CODE" TYPE="TEXT" LABEL="รหัสประเภทงบประมาณ" WIDTH="10"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20"/>
<FIELD NAME="PLAN_TYPE" TYPE="TEXT" LABEL="ประเภทแผน" WIDTH="15"/>
<FIELD NAME="PROJ_DURATION" TYPE="NUMBER" LABEL="ระยะเวลาดำเนินการ (วัน)" WIDTH="15"/>
<FIELD NAME="PROJ_INST_COUNT" TYPE="NUMBER" LABEL="ระยะเวลาดำเนินการ (วัน)" WIDTH="15"/>
<FIELD NAME="PROJ_START_YEAR" TYPE="NUMBER" LABEL="ปีที่เริ่มโครงการ (ก่อสร้าง)" WIDTH="15"/>
<FIELD NAME="PROJ_END_YEAR" TYPE="NUMBER" LABEL="ปีที่สิ้นสุดโครงการ (ก่อสร้าง)" WIDTH="15"/>
<FIELD NAME="PROJ_FOR_STAFF" TYPE="NUMBER" LABEL="จำนวนบุคลากรที่รองรับ" WIDTH="15"/>
<FIELD NAME="PROJ_FROM_YEAR" TYPE="NUMBER" LABEL="ต่อเนื่องจากปี" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
</DATASET>
<DATASET ID="DS-PROJECT-CONST">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_CONST_INFO</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>
SELECT PROJ_ID
, ACM_CODE
, PCTI_ADDRESS
, PCTI_TUMBON
, PCTI_AMPUR
, PCTI_PROVINCE
, PCTI_ADDR_NOTE
, PCTI_AREA
, PCTI_EMP_COUNT
, PCTI_CHK_LOCATION
, PCTI_CHK_DOCUMENT
, PCTI_REMARK
, CREATE_BY
, JDTOE(CREATE_TIME) CREATE_TIME, CREATE_TIME DT_CREATE_TIME
, UPDATE_BY
, JDTOE(UPDATE_TIME) UPDATE_TIME, UPDATE_TIME DT_UPDATE_TIME
</SELECT>
<FROM>FROM PROJECT_CONST_INFO</FROM>
<ORDER>ORDER BY PROJ_ID, ACM_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="project.id" WIDTH="50"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="project.acm_code" WIDTH="20"/>
<FIELD NAME="PCTI_ADDRESS" TYPE="TEXT" LABEL="pcti.address" WIDTH="200"/>
<FIELD NAME="PCTI_TUMBON" TYPE="TEXT" LABEL="pcti.tumbon" WIDTH="200"/>
<FIELD NAME="PCTI_AMPUR" TYPE="TEXT" LABEL="pcti.ampur" WIDTH="200"/>
<FIELD NAME="PCTI_PROVINCE" TYPE="TEXT" LABEL="pcti.province" WIDTH="200"/>
<FIELD NAME="PCTI_ADDR_NOTE" TYPE="TEXT" LABEL="pcti.addr_note" WIDTH="1000"/>
<FIELD NAME="PCTI_AREA" TYPE="NUMBER" LABEL="pcti.area" WIDTH="15"/>
<FIELD NAME="PCTI_EMP_COUNT" TYPE="NUMBER" LABEL="pcti.emp_count" WIDTH="15"/>
<FIELD NAME="PCTI_CHK_LOCATION" TYPE="TEXT" LABEL="pcti.chk_location" WIDTH="500"/>
<FIELD NAME="PCTI_CHK_DOCUMENT" TYPE="TEXT" LABEL="pcti.chk_document" WIDTH="500"/>
<FIELD NAME="PCTI_REMARK" TYPE="TEXT" LABEL="pcti.remark" WIDTH="2000"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="sys.create_by" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="sys.create_time" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="sys.update_by" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="sys.update_time" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
</DATASET>
</DATASETS>
<FORM>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RESET="Y" RETURN="Y">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_TYPE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PJM_CODE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="STM_CODE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="BTM_CODE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PLAN_TYPE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_DURATION" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="ACM_CODE" CAPTION="project.const_code" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="ACM_NAME" CAPTION="project.const_name" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="PROJ_START_YEAR" CAPTION="project.start_year" INPUTTYPE="TEXT" DATATYPE="NUMTEXT" ALIGN="center"/>
<FIELD NAME="PROJ_END_YEAR" CAPTION="project.end_year" INPUTTYPE="TEXT" DATATYPE="NUMTEXT" ALIGN="center"/>
<FIELD NAME="PROJ_DURATION" CAPTION="project.duration" INPUTTYPE="TEXT" DATATYPE="NUMBER" ALIGN="center" DECIMAL="0" SUFFIX="day"/>
<FIELD NAME="PROJ_INST_COUNT" CAPTION="project.inst_count" INPUTTYPE="TEXT" DATATYPE="NUMTEXT" ALIGN="center" REQUIRE="Y"/>
<FIELD NAME="BUDGET_YEAR_01" CAPTION="2567" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="BUDGET_YEAR_02" CAPTION="2568" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="BUDGET_YEAR_03" CAPTION="2569" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="BUDGET_YEAR_04" CAPTION="2570" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="BUDGET_YEAR_05" CAPTION="2571" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<SECTION ID="SECT-PROJECT-CONST">
<FIELD NAME="PCTI_ADDRESS" CAPTION="pcti.address" INPUTTYPE="TEXT"/>
<FIELD NAME="PCTI_TUMBON" CAPTION="pcti.tumbon" INPUTTYPE="TEXT"/>
<FIELD NAME="PCTI_AMPUR" CAPTION="pcti.ampur" INPUTTYPE="TEXT"/>
<FIELD NAME="PCTI_PROVINCE" CAPTION="pcti.province" INPUTTYPE="TEXT"/>
<FIELD NAME="PCTI_ADDR_NOTE" CAPTION="pcti.addr_note" INPUTTYPE="TEXT"/>
<FIELD NAME="PCTI_AREA" CAPTION="pcti.area" INPUTTYPE="TEXT" DATATYPE="NUMBER" SUFFIX="segtor"/>
<FIELD NAME="PCTI_EMP_COUNT" CAPTION="pcti.emp_count" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PCTI_CHK_LOCATION" CAPTION="pcti.chk_location" INPUTTYPE="CHECKBOXGROUP">
<LIST-OPTION TABLE="REFER_CODE" VALUE="RFC_CODE" TEXT="RFC_DESC" FILTER="RFG_GRP='CNT-PAREA'" COLUMN="4" ORDER="RFC_ORDER"/>
</FIELD>
<FIELD NAME="PCTI_CHK_DOCUMENT" CAPTION="pcti.chk_document" INPUTTYPE="CHECKBOXGROUP">
<LIST-OPTION TABLE="REFER_CODE" VALUE="RFC_CODE" TEXT="RFC_DESC" FILTER="RFG_GRP='CNT-PDOC'" COLUMN="4" ORDER="RFC_ORDER"/>
</FIELD>
<FIELD NAME="PCTI_REMARK" CAPTION="pcti.remark" INPUTTYPE="TEXTAREA" ROWS="3"/>
</SECTION>
<FIELD NAME="GRID-BUDGET" INPUTTYPE="DATA-GRID" GRID-ID="GRID-CONST-BUDGET" ROWS="5" CAPTION="project.budget"/>
<SECTION ID="SEC-ATTATCH-FILE">
<FIELD NAME="FILE_BOX_01" CAPTION="แบบ/ประมาณการราคาอาคารสำนักงาน" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_02" CAPTION="หนังสืออนุญาตให้ใช้ที่ดิน ได้มาซึ่งกรรมสิทธิ์ในที่ดิน" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_03" CAPTION="ผังบริเวณ ประมาณราคาผังบริเวณ สิ่งก่อสร้างประกอบ" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_04" CAPTION="ประมาณการถมดิน/รื้อถอนอาคาร/กำแพงกันดิน ฯลฯ (ถ้ามี)" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_05" CAPTION="ประมาณการขยายเขตไฟฟ้า ขยายเขตประปา" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
</SECTION>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="4"/>
<FIELD NAME="ACM_NAME" LAYOUT_WIDTH="18"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_EMP_COUNT" LAYOUT_WIDTH="4" OFFSET="4"/>
<FIELD NAME="PROJ_DURATION" LAYOUT_WIDTH="4"/>
<FIELD NAME="PROJ_INST_COUNT" LAYOUT_WIDTH="4"/>
<FIELD NAME="PROJ_START_YEAR" LAYOUT_WIDTH="4"/>
<FIELD NAME="PROJ_END_YEAR" LAYOUT_WIDTH="4"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-CONST" DATASET="DS-PROJECT-CONST" AUTO-INSERT="Y" TYPE="DATA-SECTION">
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[<h4 class="ml-3 col-24">@M{project.year_budgets}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="BUDGET_YEAR_01" LAYOUT_WIDTH="4" OFFSET="4"/>
<FIELD NAME="BUDGET_YEAR_02" LAYOUT_WIDTH="4"/>
<FIELD NAME="BUDGET_YEAR_03" LAYOUT_WIDTH="4"/>
<FIELD NAME="BUDGET_YEAR_04" LAYOUT_WIDTH="4"/>
<FIELD NAME="BUDGET_YEAR_05" LAYOUT_WIDTH="4"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-CONST" DATASET="DS-PROJECT-CONST" AUTO-INSERT="Y" TYPE="DATA-SECTION">
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[
<h4 class="ml-3 col-24">@M{pcti.location_info}</h4>
]]>
</HEADER>
<ROW>
<FIELD NAME="PCTI_ADDRESS" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_TUMBON" LAYOUT_WIDTH="4" OFFSET="4"/>
<FIELD NAME="PCTI_AMPUR" LAYOUT_WIDTH="4"/>
<FIELD NAME="PCTI_PROVINCE" LAYOUT_WIDTH="4"/>
<FIELD NAME="PCTI_AREA" LAYOUT_WIDTH="4"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_ADDR_NOTE" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_CHK_LOCATION" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_CHK_DOCUMENT" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="PCTI_REMARK" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[<h4 class="ml-3 border-bottom-1 col-24">@M{project.budget}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="GRID-BUDGET" LAYOUT_WIDTH="24" OFFSET=""/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[<h4 class="ml-3 border-bottom-1 col-24">@M{project.constructor_attatchment}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="FILE_BOX_01" LAYOUT_WIDTH="10" OFFSET="4"/>
<FIELD NAME="FILE_BOX_02" LAYOUT_WIDTH="10"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_03" LAYOUT_WIDTH="10" OFFSET="4"/>
<FIELD NAME="FILE_BOX_04" LAYOUT_WIDTH="10"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_05" LAYOUT_WIDTH="10" OFFSET="4"/>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<EVENTS>
<BEFORE-SAVE>
<![CDATA[
({form, data}) => {
console.log("before save data ...");
if ($PageCtx.$action === "add") {
let projYear = $$("PROJ_YEAR").val();
let projType = "CNST";
let stmCode = $user.deptCode;
let pjmCode = "B.2.01";
let btmCode = "01";
let acmCode = $$("ACM_CODE").val();
let projId = `${projYear}x${projType}x${stmCode}x${pjmCode}x${btmCode}x${acmCode}`;
$$("PROJ_ID").val(projId);
$$("PROJ_TYPE").val("CONST");
$$("STM_CODE").val(stmCode);
$$("PJM_CODE").val(pjmCode);
$$("BTM_CODE").val(btmCode);
$$("AC_CODE").val(acmCode);
}
//update data to save
Object.assign(data, $PageCtx.$form.jsonData());
}
]]>
</BEFORE-SAVE>
</EVENTS>
</SCRIPT>
</FORM_ENTRY>
</FORM>
</FORMS>

View File

@@ -0,0 +1,314 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_BUDGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PBDG.PROJ_ID
, PBDG.PBDG_ID
, PBDG.ACM_CODE
, BUD.GET_ACTIVITY(PBDG.ACM_CODE) ACM_NAME
, PBDG.PBDG_TOTAL
, PBDG.PBDG_COUNT
, PBDG.PBDG_ASSET_TYPE
, PBDG.PBDG_REASON
, PMAS.PROJ_YEAR
, PMAS.STM_CODE
, PMAS.PROJ_YEAR||'/'||PMAS.STM_CODE||'/'||PBDG.PROJ_ID FILEPATH
</SELECT>
<FROM>FROM PROJECT_BUDGETS PBDG
INNER JOIN PROJECTS PMAS ON PMAS.PROJ_ID = PBDG.PROJ_ID
</FROM>
<ORDER>ORDER BY PROJ_ID,PBDG_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="รหัสงบประมาณโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20" ORIGIN="PBDG.ACM_CODE"/>
<FIELD NAME="PBDG_TOTAL" TYPE="NUMBER" LABEL="ยอดรวม" WIDTH="15"/>
<FIELD NAME="PBDG_COUNT" TYPE="NUMBER" LABEL="จำนวนกิจกรรม" WIDTH="15"/>
<FIELD NAME="PBDG_ASSET_TYPE" TYPE="TEXT" LABEL="ประเภทครุภัณฑ์" WIDTH="25"/>
<FIELD NAME="PBDG_REASON" TYPE="TEXT" LABEL="เหตุผลในการจัดหา" WIDTH="2000"/>
</FIELDS>
</DATASET>
<DATASET ID="DS-PROJECT-TARGETS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_TARGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, ACM_CODE
, PWMT_UNIT
, PTGT_QT_0101
, PTGT_QT_0102
, PTGT_QT_0201
, PTGT_QT_0202
, PTGT_QT_0301
, PTGT_QT_0302
, PTGT_QT_0401
, PTGT_QT_0402
</SELECT>
<FROM>FROM PROJECT_TARGETS</FROM>
<ORDER>ORDER BY PROJ_ID,ACM_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="33"/>
<FIELD NAME="PWMT_UNIT" TYPE="TEXT" LABEL="หน่วยนับ" WIDTH="32"/>
<FIELD NAME="PTGT_QT_0101" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0102" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0201" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0202" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0301" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0302" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0401" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0402" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (ผล)" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
</DATASET>
<DATASET ID="DS-BUDGET-ITEMS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_BUDGET_ITEMS</TABLENAME>
<KEYFIELDS>PROJ_ID,BGM_CODE,PBDG_ID</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, PBDG_ID
, BGM_CODE
, PBGI_QT_01
, PBGI_QT_02
, PBGI_QT_03
, PBGI_QT_04
, PBGI_QTY
, PBGI_COST
, PBGI_FREQ
, PBGI_ASSET_TYPE
, PBGI_REPLACE
, PBGI_ADDITION
, PBGI_ACQUIRE
, PBGI_TOTAL
, PBGI_REASON
</SELECT>
<FROM>FROM PROJECT_BUDGET_ITEMS</FROM>
<ORDER>ORDER BY PROJ_ID,BGM_CODE,PBDG_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="pbgi.id" WIDTH="32"/>
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="pbgi.pbdg_id" WIDTH="32"/>
<FIELD NAME="BGM_CODE" TYPE="TEXT" LABEL="pbgi.bgm_code" WIDTH="20"/>
<FIELD NAME="PBGI_QT_01" TYPE="NUMBER" LABEL="pwbg.quotr_01" WIDTH="15"/>
<FIELD NAME="PBGI_QT_02" TYPE="NUMBER" LABEL="pwbg.quotr_02" WIDTH="15"/>
<FIELD NAME="PBGI_QT_03" TYPE="NUMBER" LABEL="pwbg.quotr_03" WIDTH="15"/>
<FIELD NAME="PBGI_QT_04" TYPE="NUMBER" LABEL="pwbg.quotr_04" WIDTH="15"/>
<FIELD NAME="PBGI_QTY" TYPE="NUMBER" LABEL="pbgi.qty" WIDTH="10"/>
<FIELD NAME="PBGI_COST" TYPE="NUMBER" LABEL="pbgi.cost" WIDTH="15"/>
<FIELD NAME="PBGI_FREQ" TYPE="NUMBER" LABEL="pbgi.freq" WIDTH="10"/>
<FIELD NAME="PBGI_ASSET_TYPE" TYPE="TEXT" LABEL="pbgi.asset_type" WIDTH="10"/>
<FIELD NAME="PBGI_REPLACE" TYPE="NUMBER" LABEL="pbgi.replace" WIDTH="10"/>
<FIELD NAME="PBGI_ADDITION" TYPE="NUMBER" LABEL="pbgi.addition" WIDTH="10"/>
<FIELD NAME="PBGI_ACQUIRE" TYPE="NUMBER" LABEL="pbgi.acquire" WIDTH="10"/>
<FIELD NAME="PBGI_TOTAL" TYPE="NUMBER" LABEL="pbgi.total" WIDTH="15"/>
<FIELD NAME="PBGI_REASON" TYPE="TEXT" LABEL="pbgi.reason" WIDTH="4000"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="sys.create_by" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="sys.create_time" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="sys.update_by" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="sys.update_time" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,PBDG_ID" DETAIL-FIELDS="PROJ_ID,PBDG_ID"/>
</DATASET>
</DATASETS>
<FORM>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="Y">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="ACM_CODE" CAPTION="project.equipt_code" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="ACM_NAME" CAPTION="project.equipt_name" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="PBDG_ASSET_TYPE" CAPTION="pbge.asset_type" INPUTTYPE="COMBOBOX" REQUIRE="Y">
<LIST-OPTION TABLE="REFER_CODE" TEXT="RFC_DESC" VALUE="RFC_CODE" ORDER="RFC_ORDER" FILTER="RFG_GRP='ASSET-TYPE'" FIRSTLIST="@{CAPTION}"/>
</FIELD>
<FIELD NAME="PBDG_REASON" CAPTION="pbge.reason" INPUTTYPE="TEXT" />
<FIELD NAME="FILE_BOX_01" CAPTION="pbge.quotaion_file 1" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_02" CAPTION="pbge.quotaion_file 2" INPUTTYPE="FILE-BOX">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-02"/>
</FIELD>
<FIELD NAME="FILE_BOX_03" CAPTION="pbge.quotaion_file 3" INPUTTYPE="FILE-BOX">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-03"/>
</FIELD>
<SECTION ID="SECT-PROJECT-TARGET">
<FIELD NAME="PBDG_TOTAL" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_COUNT" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PWMT_UNIT" CAPTION="project.unit" INPUTTYPE="TEXT" READONLY="Y"></FIELD>
<FIELD NAME="PTGT_QT_0101" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 1"/>
<FIELD NAME="PTGT_QT_0201" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 2"/>
<FIELD NAME="PTGT_QT_0301" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 3"/>
<FIELD NAME="PTGT_QT_0401" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.quoter 4"/>
<FIELD NAME="QT_TOTAL_01" INPUTTYPE="TEXT" DATATYPE="NUMBER" CAPTION="project.total" READONLY="Y"/>
</SECTION>
<SECTION ID="SECT-BUDGET-ITEMS">
<FIELD NAME="VBGM_CODE" CAPTION="pwbg.bgm_code" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="BGM_CODE" CAPTION="pwbg.bgm_name" INPUTTYPE="COMBOBOX" REQUIRE="Y">
<AJAX-OPTION URL="/api-data.jbx" DATASET="DS-EQUIPT-BUDGET" VALUE-FIELD="BGM_CODE" TEXT-FIELD="BGM_NAME">
<UPDATE-FIELDS>
<FIELD SRC="BGM_CODE" TARGET="VBGM_CODE"></FIELD>
<FIELD SRC="BGM_NAME" TARGET="BGM_NAME"></FIELD>
</UPDATE-FIELDS>
</AJAX-OPTION>
<LIST-OPTION>
<FORMATTER><![CDATA[
(data) => {
console.log("call formater with ", data);
return $(`<div><label class="offset-${data.node_level}">[${data.bgm_code}]</label> : <label>${data.bgm_name}</label></div>`);
}
]]></FORMATTER>
</LIST-OPTION>
</FIELD>
<FIELD NAME="PBGI_QT_01" CAPTION="pbge.origin" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PBGI_REPLACE" CAPTION="pbge.replace" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
<FIELD NAME="PBGI_ADDITION" CAPTION="pbge.addition" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
<FIELD NAME="PBGI_ACQUIRE" CAPTION="pbge.acquire" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME="equipt-qty equipt-item"/>
<FIELD NAME="PBGI_QTY" CAPTION="pbge.qty" INPUTTYPE="TEXT" DATATYPE="NUMBER" READONLY="Y" CLASS-NAME="equipt-item"/>
<FIELD NAME="PBGI_COST" CAPTION="pbge.cost" INPUTTYPE="TEXT" DATATYPE="NUMBER" CLASS-NAME=" equipt-item"/>
<FIELD NAME="PBGI_TOTAL" CAPTION="pbge.total" INPUTTYPE="TEXT" DATATYPE="NUMBER" READONLY="Y"/>
</SECTION>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="4"/>
<FIELD NAME="ACM_NAME" LAYOUT_WIDTH="18"/>
</ROW>
<ROW>
<FIELD NAME="PBDG_ASSET_TYPE" LAYOUT_WIDTH="4"/>
<FIELD NAME="PBDG_REASON" LAYOUT_WIDTH="18"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET" TYPE="DATA-SECTION" DATASET="DS-BUDGET-ITEMS">
<ROW ID="ROW-BUDGET-DATA">
<FIELD NAME="PBGI_QT_01" LAYOUT_WIDTH="4"/>
<FIELD NAME="PBGI_REPLACE" LAYOUT_WIDTH="3"/>
<FIELD NAME="PBGI_ADDITION" LAYOUT_WIDTH="3"/>
<FIELD NAME="PBGI_ACQUIRE" LAYOUT_WIDTH="3"/>
<FIELD NAME="PBGI_QTY" LAYOUT_WIDTH="3"/>
<FIELD NAME="PBGI_COST" LAYOUT_WIDTH="3"/>
<FIELD NAME="PBGI_TOTAL" LAYOUT_WIDTH="3"/>
</ROW>
<ROW>
<FIELD NAME="VBGM_CODE" LAYOUT_WIDTH="4" OFFSET="4"/>
<FIELD NAME="BGM_CODE" LAYOUT_WIDTH="14"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-TARGET" TYPE="DATA-SECTION" DATASET="DS-PROJECT-TARGETS">
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[<h4 class="ml-3 col-24">@M{project.target}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="PTGT_QT_0101" LAYOUT_WIDTH="3" OFFSET="4"/>
<FIELD NAME="PTGT_QT_0201" LAYOUT_WIDTH="3"/>
<FIELD NAME="PTGT_QT_0301" LAYOUT_WIDTH="3"/>
<FIELD NAME="PTGT_QT_0401" LAYOUT_WIDTH="3"/>
<FIELD NAME="QT_TOTAL_01" LAYOUT_WIDTH="3"/>
<FIELD NAME="PWMT_UNIT" LAYOUT_WIDTH="3"/>
</ROW>
</SECTION>
<SECTION ID="SECT-QUOTATION-FILE">
<HEADER CLASS="col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[<h4 class="ml-3 col-24">@M{pbge.quotaion_file}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="FILE_BOX_01" LAYOUT_WIDTH="12" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_02" LAYOUT_WIDTH="12" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_03" LAYOUT_WIDTH="12" OFFSET="4"/>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<DECLARATION>
const equiptQty = $$(".equipt-qty");
const equiptItem = $$(".equipt-item");
const txtEquiptQty = $$("PBGI_QTY");
const txtEquiptCost = $$("PBGI_COST");
const txtEquiptTotal = $$("PBGI_TOTAL");
</DECLARATION>
<EVENTS>
<BEFORE-SAVE><![CDATA[
({form, data}) => {
console.log("before save data");
if ($PageCtx.$action === "add") {
let $data = $PageCtx.main.pageData;
let budgetId = $$("VACM_CODE").val();
$$("PBDG_ID").val(budgetId);
}
$$("PBDG_COUNT").val(txtEquiptQty.number());
$$("PBDG_TOTAL").val(txtEquiptTotal.number());
Object.assign(data, form.mainForm.jsonData());
}
]]></BEFORE-SAVE>
</EVENTS>
<INITIALIZE>
<![CDATA[
const quoterSum = () => {
let summary = 0;
for (let qt = 1; qt <= 4; qt++) {
summary += $$(`PTGT_QT_0${qt}01`).number();
}
$$(`QT_TOTAL_01`).val(formatNumber(summary));
}
$$("^PTGT_QT_").on("change", quoterSum);
const equiptSum = ()=>{
let sumEquipt = equiptQty.sum();
txtEquiptQty.val(formatNumber(sumEquipt));
let equiptCost = txtEquiptCost.number();
txtEquiptTotal.val(formatNumber(sumEquipt*equiptCost));
}
equiptItem.on("change",equiptSum);
]]>
</INITIALIZE>
</SCRIPT>
</FORM_ENTRY>
</FORM>
</FORMS>

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-construct-budget.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECTS</TABLENAME>
<KEYFIELDS>PROJ_ID</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ.PROJ_ID
, PROJ.PROJ_TYPE
, PROJ.PROJ_YEAR
, PROJ.PJM_CODE
, PROJ.STM_CODE
, PROJ.BTM_CODE
, PROJ.ACM_CODE
, BUD.GET_ACTIVITY(PROJ.ACM_CODE) ACM_NAME
, PROJ.PLAN_TYPE
, PROJ.PROJ_DURATION
, PROJ.PROJ_START_YEAR
, PROJ.PROJ_END_YEAR
, PROJ.PROJ_FOR_STAFF
, PROJ.PROJ_FROM_YEAR
, 0 BDGT_TOTAL
</SELECT>
<FROM>FROM PROJECTS PROJ
INNER JOIN REFER_CODE RFC ON RFC.RFG_GRP='PROJ-TYPE' AND RFC.RFC_CODE=PROJ.PROJ_TYPE AND RFC.RFC_FLAG = 'GENERAL'
</FROM>
<FILTER>WHERE STM_CODE = :STM_CODE AND PROJ.PROJ_YEAR = :PROJ_YEAR</FILTER>
<ORDER>ORDER BY RFC.RFC_ORDER, PROJ.PROJ_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="PROJ_TYPE" TYPE="TEXT" LABEL="ประเภทโครงการ" WIDTH="25"/>
<FIELD NAME="PROJ_YEAR" TYPE="NUMBER" LABEL="ปีงบประมาณ" WIDTH="15"/>
<FIELD NAME="PJM_CODE" TYPE="TEXT" LABEL="รหัสโครงการ (BUD)" WIDTH="20"/>
<FIELD NAME="STM_CODE" TYPE="TEXT" LABEL="รหัสหน่วยงาน" WIDTH="10"/>
<FIELD NAME="BTM_CODE" TYPE="TEXT" LABEL="รหัสประเภทงบประมาณ" WIDTH="10"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20"/>
<FIELD NAME="PLAN_TYPE" TYPE="TEXT" LABEL="ประเภทแผน" WIDTH="15"/>
<FIELD NAME="PROJ_DURATION" TYPE="NUMBER" LABEL="ระยะเวลาดำเนินการ (วัน)" WIDTH="15"/>
<FIELD NAME="PROJ_START_YEAR" TYPE="NUMBER" LABEL="ปีที่เริ่มโครงการ (ก่อสร้าง)" WIDTH="15"/>
<FIELD NAME="PROJ_END_YEAR" TYPE="NUMBER" LABEL="ปีที่สิ้นสุดโครงการ (ก่อสร้าง)" WIDTH="15"/>
<FIELD NAME="PROJ_FOR_STAFF" TYPE="NUMBER" LABEL="จำนวนบุคลากรที่รองรับ" WIDTH="15"/>
<FIELD NAME="PROJ_FROM_YEAR" TYPE="NUMBER" LABEL="ต่อเนื่องจากปี" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
<SUBDATASETS>
<SUBDATASET NAME="ACTIVITIES" DATASET-ID="DS-ACTIVITY-TREE" LINK-FIELDS="PROJ_ID"/>
</SUBDATASETS>
</DATASET>
<DATASET ID="DS-ACTIVITY-TREE">
<SCHEMA>APP</SCHEMA>
<TABLENAME>V_ACTIVITY_TREE</TABLENAME>
<SQL>
<SELECT>
SELECT PACT.PROJ_ID
, PACT.PROJ_YEAR
, PACT.PROJ_TYPE
, PACT.PROJ_GROUP
, ACTT.ACM_CODE
, ACTT.ACM_NAME
, ACTT.ACM_SEQ
, ACTT.NODE_LEVEL+1 NODE_LEVEL
, ACTT.MAIN_NODE
, ACTT.ACM_UNIT
, ACTT.ACM_START_YEAR
, ACTT.ACM_END_YEAR
, ACTT.NODE_TYPE
, PACT.BDGT_COUNT
, PACT.BDGT_TOTAL
</SELECT>
<FROM>
FROM BGT.V_ACTIVITY_TREE ACTT
INNER JOIN (SELECT DISTINCT ACM.ACM_CODE
FROM BUD.ACTIVITY_M ACM
INNER JOIN BUD.ACTIVITY_CTRL_H ACH ON ACM.ACM_CODE = ACH.ACH_CODE
START WITH ACM.ACM_CODE IN (SELECT ACM_CODE FROM V_PROJECT_ACTIVITY PACT WHERE PACT.PROJ_ID = :PROJ_ID)
CONNECT BY PRIOR ACH.ACH_CTRL_CODE = ACH.ACH_CODE) FLTR ON FLTR.ACM_CODE = ACTT.ACM_CODE
LEFT OUTER JOIN V_PROJECT_ACTIVITY PACT ON PACT.ACM_CODE = ACTT.ACM_CODE AND PACT.PROJ_ID = :PROJ_ID
</FROM>
<ORDER>
ORDER BY ACTT.ACM_SEQ
</ORDER>
</SQL>
</DATASET>
</DATASETS>
<FORM>
<FORM_BROWSE DATAID="DS-MASTER">
<HEADER NAVI="N" EDIT="N" ADD="N" DELETE="N" VIEW="N"/>
<PAGESIZE>0</PAGESIZE>
<FIELDS>
<FIELD NAME="$itemno" LABEL="no" ALIGN="right" WIDTH="5em"/>
<FIELD NAME="ACM_CODE" LABEL="project.const_code" ALIGN="left">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return $(`<div class="col-24 row text-nowrap"><div class="col offset-${+(row.node_level)-1}">${value}</div></div>`);}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="ACM_NAME" LABEL="project.const_name" ALIGN="left">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return $(`<div class="col-24 row text-nowrap"><div class="col offset-${+(row.node_level)-1}">${value}</div></div>`);}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="BDGT_COUNT" LABEL="pbdg.acm_count" ALIGN="right" WIDTH="10em">
<DATA-FORMATTER>
<![CDATA[(value, row, idx) => {
if (row["node_type"] === "D") {
return `<div class="col-24 text-nowrap">${formatNumber(value)} ${row["acm_unit"]}</div>`;
// return formatNumber(value)+" "+row["acm_unit"];
} else {
return ""
}
}]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="BDGT_TOTAL" LABEL="project.bgt_amount" ALIGN="right" WIDTH="10em">
<DATA-FORMATTER>
<![CDATA[(value, row, idx) => {return formatNumber(value);}]]>
</DATA-FORMATTER>
</FIELD>
<COMMAND-BUTTONS>
<BUTTON-X NAME="btnEditor" CLASS="btn btn-warning btn-editor" ICON-CLASS="fa fa-edit white">
<FILTER><![CDATA[({$ctx,row})=>{return ["D"].includes(row["node_type"]);}]]></FILTER>
<EVENT ON="click"><![CDATA[
({ev, row}) => {
console.log(row);
$PageCtx.saveSessionData("edit", row);
let proj = {proj_id : row.proj_id,acm_code : row.acm_code, type: row.proj_type.toLowerCase()};
let data = base64(JSON.stringify(proj)) ;
let editUrl = `/bdgt04/bgt0403020-general?edit&data=${data}`;
$WebNavi.goto(editUrl);
}
]]></EVENT>
</BUTTON-X>
<BUTTON NAME="btnViewer" CLASS="btn btn-primary btn-viewer" ICON-CLASS="fa fa-file-alt white">
<FILTER><![CDATA[({$ctx,row})=>{return ["D"].includes(row["node_type"]);}]]></FILTER>
<EVENT ON="click"><![CDATA[
({ev, row}) => {
console.log(row);
$PageCtx.saveSessionData("edit", row);
let proj = {proj_id : row.proj_id,acm_code : row.acm_code, type: row.proj_type.toLowerCase()};
let data = base64(JSON.stringify(proj)) ;
let editUrl = `/bdgt04/bgt0403020-general?view&data=${data}`;
$WebNavi.goto(editUrl);
}
]]></EVENT>
</BUTTON>
</COMMAND-BUTTONS>
</FIELDS>
<FILTERS AUTO-APPLY="N" ALLOW-NO-FILTER="Y">
<FIELDS>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="VERSION" CAPTION="props.version" INPUTTYPE="COMBOBOX" DATATYPE="TEXT">
<LIST-OPTION TABLE="VL_VERSIONS" TEXT="VER_NAME" VALUE="VERSION" FILTER="VERSION &lt; 6" ORDER="VERSION DESC" FIRSTLIST="@{NONE}"></LIST-OPTION>
</FIELD>
</FIELDS>
<LAYOUT>
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="12" VAL_WIDTH="5" CAPT_WIDTH="14"/>
<FIELD NAME="VERSION" LAYOUT_WIDTH="12" VAL_WIDTH="5" CAPT_WIDTH="6"/>
</ROW>
</LAYOUT>
</FILTERS>
<FOOTER SHOW="Y"/>
<SCRIPT>
<EVENTS>
<AFTER-LOAD>
<![CDATA[
($ctx,data)=>{
let src = [...data]; // clone data to src
data.splice(0); // clear data element
let id = 1;
for (let item of src) {
item["node_type"] = "P";
item["node_level"] = "0";
item["$itemno"] = id++;
data.push(item);
if (isArray(item.activities)) {
for (let sitem of item.activities) {
sitem["$itemno"] = id++;
data.push(sitem);
}
}
}
// console.log(data);
}
]]>
</AFTER-LOAD>
</EVENTS>
<INITIALIZE>
<![CDATA[
{
// console.log("init activity grid");
const fieldFormat = (value,row) => {
if (row["node_type"] === "P") {
return "";
}
return formatNumber(value, 0);
}
const summary = (field, data) => {
let total = 0;
for (let id=0; id < data.length; id++) {
let row = data[id];
if (row["node_type"] === "D") {
total += (+row[field]) || 0;
}
}
if ($PageCtx.$dataGrid.load && !$PageCtx.$dataGrid.reload) {
$PageCtx.$dataGrid.reload = true;
for (let id=data.length-1; id>=0; id--) {
let row = data[id];
if (row["node_type"] === "C") {
let grpTotal = 0;
let mainNode = row["acm_code"];
let nodes = [];
nodes.push($$("main_node="+mainNode,data));
for (let node of nodes.flat()) {
grpTotal += +node[field];
}
data[id][field] = grpTotal;
}
}
$PageCtx.$dataGrid.load(data);
$PageCtx.$dataGrid.reload = false;
}
return formatNumber(total, 0);
}
const $ctx = $PageCtx;
const gridFields = [$$("field=bdgt_total", $ctx.gridColumn.flat())].flat();
for (let field of gridFields) {
field.formatter = fieldFormat;
field.footerFormatter = function (data) {
return summary(this.field, data);
}
}
$ctx.rowStyle = function (row, index) {
if (row["node_type"] === "C") {
return {classes : `group-level-${row["node_level"]}`};
}
if (row["node_type"] === "P") {
return {classes : `group-level-0`};
}
return {}; // Default style for other rows
}
}
]]>
</INITIALIZE>
</SCRIPT>
</FORM_BROWSE>
</FORM>
</FORMS>

View File

@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-manage-budget.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_BUDGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PBDG.PROJ_ID
, PROJ.PROJ_YEAR
, PBDG.PBDG_ID
, PBDG.ACM_CODE
, BUD.GET_ACTIVITY(PBDG.ACM_CODE) ACM_NAME
, PBDG.PBDG_TOTAL
, PBDG.PBDG_COUNT
</SELECT>
<FROM>FROM PROJECT_BUDGETS PBDG
INNER JOIN PROJECTS PROJ ON PROJ.PROJ_ID=PBDG.PROJ_ID
</FROM>
<ORDER>ORDER BY PBDG.PROJ_ID,PBDG.PBDG_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="รหัสงบประมาณโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20" ORIGIN="PBDG.ACM_CODE"/>
<FIELD NAME="PBDG_TOTAL" TYPE="NUMBER" LABEL="ยอดรวม" WIDTH="15"/>
<FIELD NAME="PBDG_COUNT" TYPE="NUMBER" LABEL="จำนวนกิจกรรม" WIDTH="15"/>
</FIELDS>
</DATASET>
<DATASET ID="DS-PROJECT-TARGETS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_TARGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, ACM_CODE
, PWMT_UNIT
, PTGT_QT_0101
, PTGT_QT_0102
, PTGT_QT_0201
, PTGT_QT_0202
, PTGT_QT_0301
, PTGT_QT_0302
, PTGT_QT_0401
, PTGT_QT_0402
</SELECT>
<FROM>FROM PROJECT_TARGETS</FROM>
<ORDER>ORDER BY PROJ_ID,ACM_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="33"/>
<FIELD NAME="PWMT_UNIT" TYPE="TEXT" LABEL="หน่วยนับ" WIDTH="32"/>
<FIELD NAME="PTGT_QT_0101" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0102" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0201" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0202" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0301" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0302" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0401" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0402" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (ผล)" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
</DATASET>
</DATASETS>
<FORM>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="Y">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="ACM_CODE" CAPTION="project.acm_code" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="PROJ_PRINCIPLES" CAPTION="project.remak" INPUTTYPE="TEXT" ROWS="3"/>
<FIELD NAME="ACM_NAME" CAPTION="project.acm_name" INPUTTYPE="TEXT" EDIT-READONLY="Y"/>
<SECTION ID="SECT-PROJECT-TARGET">
<FIELD NAME="PBDG_TOTAL" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_COUNT" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PWMT_UNIT" CAPTION="project.target" INPUTTYPE="TEXT" READONLY="Y"></FIELD>
<FIELD NAME="QUOTER_1" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 1" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0101" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0102" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_2" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 2" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0201" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0202" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_3" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 3" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0301" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0302" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_4" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 4" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0401" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0402" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="TOTAL_QT" INPUTTYPE="MULTI-FIELD" CAPTION="project.total" FIELD-SEPARATOR="/" READONLY="Y">
<FIELD-LIST>
<FIELD NAME="QT_TOTAL_01" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="QT_TOTAL_02" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
</SECTION>
<FIELD NAME="GRID-BUDGET" INPUTTYPE="DATA-GRID" GRID-ID="GRID-WORK-BUDGET" ROWS="5" CAPTION="project.budget"/>
<SECTION ID="SEC-ATTATCH-FILE">
<FIELD NAME="FILE_BOX_01" CAPTION="file.upload 1" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_02" CAPTION="file.upload 2" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_03" CAPTION="file.upload 3" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
</SECTION>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="6"/>
</ROW>
<ROW>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="6"/>
<FIELD NAME="ACM_NAME" LAYOUT_WIDTH="18"/>
</ROW>
<ROW>
<FIELD NAME="PROJ_PRINCIPLES" LAYOUT_WIDTH="18" OFFSET="6"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-TARGET" TYPE="DATA-SECTION" DATASET="DS-PROJECT-TARGETS">
<ROW>
<FIELD NAME="PWMT_UNIT" LAYOUT_WIDTH="6"/>
<FIELD NAME="QUOTER_1" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_2" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_3" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_4" LAYOUT_WIDTH="3"/>
<FIELD NAME="TOTAL_QT" LAYOUT_WIDTH="4"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[
<h4 class="ml-3 border-bottom-1 col-24">@M{project.budget}</h4>
]]></HEADER>
<ROW>
<FIELD NAME="GRID-BUDGET" LAYOUT_WIDTH="24" OFFSET=""/>
</ROW>
</SECTION>
<SECTION ID="SECT-FILE-UPLOAD">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[<h4 class="ml-3 border-bottom-1 col-24">@M{project.constructor_attatchment}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="FILE_BOX_01" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_02" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_03" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<EVENTS>
<BEFORE-SAVE><![CDATA[
({form, data}) => {
console.log("before save data");
if ($PageCtx.$action === "add") {
let $data = $PageCtx.main.pageData;
let budgetId = $$("VACM_CODE").val();
$$("PBDG_ID").val(budgetId);
}
let acmCount = $$("^QT_TOTAL_0").sum();
$$("PBDG_COUNT").val(acmCount);
let gridCtx = ($PageCtx.widgets["GRID-BUDGET"]||{})["$GridCtx"];
if (gridCtx) {
let bdgTotal = gridCtx.sum_of["pbgi_total"];
$$("PBDG_TOTAL").val(bdgTotal);
}
Object.assign(data,form.mainForm.jsonData());
}
]]></BEFORE-SAVE>
</EVENTS>
<INITIALIZE>
<![CDATA[
const quoterSum = ()=>{
for (let sect=1; sect <=2; sect++) {
let summary = 0;
for (let qt = 1; qt <= 4; qt++) {
summary += $$(`PTGT_QT_0${qt}0${sect}`).number();
}
$$(`QT_TOTAL_0${sect}`).val(formatNumber(summary));
}
}
$$("^PTGT_QT_").on("change",quoterSum);
]]>
</INITIALIZE>
</SCRIPT>
</FORM_ENTRY>
</FORM>
</FORMS>

View File

@@ -0,0 +1,321 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-proj-budget.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-BROWSER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>V_ACTIVITY_TREE</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>
SELECT :PROJ_ID PROJ_ID
, ACTT.ACM_CODE
, ACTT.ACM_NAME
, ACTT.ACM_SEQ
, ACTT.NODE_LEVEL
, ACTT.MAIN_NODE
, ACTT.ACM_UNIT
, ACTT.ACM_START_YEAR
, ACTT.ACM_END_YEAR
, ACTT.NODE_TYPE
, PJBG.PBDG_TOTAL PBDG_TOTAL
, PJBG.PBDG_COUNT PBDG_COUNT
</SELECT>
<FROM>
FROM BGT.V_ACTIVITY_TREE ACTT
INNER JOIN ( SELECT DISTINCT ACM.ACM_CODE
FROM BUD.ACTIVITY_M ACM
INNER JOIN BUD.ACTIVITY_CTRL_H ACH ON ACM.ACM_CODE = ACH.ACH_CODE
START WITH ACM.ACM_CODE IN (SELECT ACM_CODE FROM PROJECT_BUDGETS PJBD WHERE PROJ_ID = :PROJ_ID)
CONNECT BY PRIOR ACH.ACH_CTRL_CODE = ACH.ACH_CODE) FLTR ON FLTR.ACM_CODE = ACTT.ACM_CODE
LEFT OUTER JOIN PROJECT_BUDGETS PJBG ON PJBG.PROJ_ID=:PROJ_ID AND PJBG.ACM_CODE = ACTT.ACM_CODE
</FROM>
<ORDER>ORDER BY ACTT.ACM_SEQ</ORDER>
</SQL>
</DATASET>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_BUDGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, PBDG_ID
, ACM_CODE
, PBDG_TOTAL
, PBDG_COUNT
</SELECT>
<FROM>FROM PROJECT_BUDGETS</FROM>
<ORDER>ORDER BY PROJ_ID,PBDG_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="รหัสงบประมาณโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20"/>
<FIELD NAME="PBDG_TOTAL" TYPE="NUMBER" LABEL="ยอดรวม" WIDTH="15"/>
<FIELD NAME="PBDG_COUNT" TYPE="NUMBER" LABEL="จำนวนกิจกรรม" WIDTH="15"/>
</FIELDS>
</DATASET>
<DATASET ID="DS-PROJECT-TARGETS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_TARGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, ACM_CODE
, PWMT_UNIT
, PTGT_QT_0101
, PTGT_QT_0102
, PTGT_QT_0201
, PTGT_QT_0202
, PTGT_QT_0301
, PTGT_QT_0302
, PTGT_QT_0401
, PTGT_QT_0402
</SELECT>
<FROM>FROM PROJECT_TARGETS</FROM>
<ORDER>ORDER BY PROJ_ID,ACM_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="33"/>
<FIELD NAME="PWMT_UNIT" TYPE="TEXT" LABEL="หน่วยนับ" WIDTH="32"/>
<FIELD NAME="PTGT_QT_0101" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0102" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0201" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0202" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0301" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0302" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0401" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0402" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (ผล)" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
</DATASET>
</DATASETS>
<FORM>
<FORM_BROWSE DATAID="DS-BROWSER">
<HEADER NAVI="Y" ADD="N" EDIT="N" DELETE="N" VIEW="Y"/>
<PAGESIZE>0</PAGESIZE>
<FIELDS>
<FIELD NAME="$itemno" LABEL="no" ALIGN="right" WIDTH="5em"/>
<FIELD NAME="ACM_CODE" LABEL="project.acm_code" ALIGN="left" WIDTH="15em">
<DATA-FORMATTER><![CDATA[
(value,row,idx)=>{
return $(`<div class="col-24 row"><div class="col offset-${row.node_level}">${value}</div></div>`);
}
]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="ACM_NAME" LABEL="project.acm_name" ALIGN="left">
<DATA-FORMATTER><![CDATA[
(value,row,idx)=>{
return $(`<div class="col-24 row"><div class="col offset-${row.node_level}">${value}</div></div>`);
}
]]>
</DATA-FORMATTER>
</FIELD>
<FIELD NAME="PBDG_TOTAL" LABEL="project.bgt_amount" ALIGN="right" WIDTH="10em">
<DATA-FORMATTER>
<![CDATA[(value,row,idx)=>{return (row["node_type"]==="D")? value : "";}]]>
</DATA-FORMATTER>
</FIELD>
<COMMAND-BUTTONS>
<BUTTONS-FILTER>
<EDIT><![CDATA[(row)=>{return row["node_type"] !== "C"}]]></EDIT>
<DELETE><![CDATA[(row)=>{return row["node_type"] !== "C"}]]></DELETE>
<VIEW><![CDATA[(row)=>{return row["node_type"] !== "C"}]]></VIEW>
</BUTTONS-FILTER>
</COMMAND-BUTTONS>
</FIELDS>
<FILTERS AUTO-APPLY="Y" ALLOW-NO-FILTER="Y" >
<FIELDS>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" DATATYPE="TEXT" ALIGN="center"/>
<FIELD NAME="PROJ_NAME" CAPTION="project.name" INPUTTYPE="TEXT" DATATYPE="TEXT" ALIGN="left"/>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"></FIELD>
<FIELD NAME="VERSION" CAPTION="props.version" INPUTTYPE="COMBOBOX" DATATYPE="TEXT">
<LIST-OPTION TABLE="VL_VERSIONS" TEXT="VER_NAME" VALUE="VERSION" FILTER="VERSION &lt; 6" ORDER="VERSION DESC" FIRSTLIST="@{NONE}"></LIST-OPTION>
</FIELD>
</FIELDS>
<LAYOUT>
<ROW>
<FIELD NAME="PROJ_YEAR" CAPT_WIDTH="10" VAL_WIDTH="6" LAYOUT_WIDTH="12"/>
<FIELD NAME="VERSION" CAPT_WIDTH="6" VAL_WIDTH="6" LAYOUT_WIDTH="12"/>
</ROW>
<ROW>
<FIELD NAME="PROJ_NAME" CAPT_WIDTH="5" VAL_WIDTH="18" LAYOUT_WIDTH="24"/>
</ROW>
</LAYOUT>
</FILTERS>
<FOOTER SHOW="Y"/>
<SCRIPT>
<INITIALIZE>
<![CDATA[
{
console.log("init activity grid");
const fieldFormat = (value) => {
return formatNumber(value, 0);
}
$PageCtx.sum_of = {};
const summary = (field, data) => {
console.log("budget summary process.")
let total = 0;
for (let id=0; id < data.length; id++) {
let row = data[id];
if (row["node_type"] === "D") {
total += (+row[field]) || 0;
}
}
$PageCtx.sum_of[field] = total;
if ($PageCtx.$dataGrid.load && !$PageCtx.$dataGrid.reload) {
$PageCtx.$dataGrid.reload = true;
for (let id=data.length-1; id>=0; id--) {
let row = data[id];
if (row["node_type"] === "C") {
let grpTotal = 0;
let mainNode = row["acm_code"];
let nodes = [];
nodes.push($$("main_node="+mainNode,data));
for (let node of nodes.flat()) {
grpTotal += +node[field];
}
data[id][field] = grpTotal;
}
}
$PageCtx.$dataGrid.load(data);
$PageCtx.$dataGrid.reload = false;
}
return formatNumber(total, 0);
}
const $ctx = $PageCtx;
const gridFields = [$$("field^pbdg_", $ctx.gridColumn.flat())].flat();
for (let field of gridFields) {
field.formatter = fieldFormat;
field.footerFormatter = function (data) {
return summary(this.field, data);
}
}
$ctx.rowStyle = function (row, index) {
if (row["node_type"] === "C") {
return {
classes : `group-level-${row["node_level"]}`
};
}
return {}; // Default style for other rows
}
}
]]>
</INITIALIZE>
</SCRIPT>
</FORM_BROWSE>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="Y">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_TOTAL" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="PROJ_NAME" CAPTION="project.name" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="VACM_CODE" CAPTION="project.acm_code" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="ACM_CODE" CAPTION="project.acm_name" INPUTTYPE="COMBOBOX" REQUIRE="Y" EDIT-READONLY="Y">
<AJAX-OPTION URL="/api-data.jbx" DATASET="DS-ACTIVITY-02-BDGT" VALUE-FIELD="ACM_CODE" TEXT-FIELD="ACM_NAME" PARAMETERS="DV_YEAR=PROJ_YEAR,STM_CODE=STM_CODE">
<UPDATE-FIELDS>
<FIELD SRC="ACM_CODE" TARGET="VACM_CODE"></FIELD>
<FIELD SRC="ACM_UNIT" TARGET="TARGET_UNIT"></FIELD>
<FIELD SRC="ACM_UNIT" TARGET="PWMT_UNIT"></FIELD>
<FIELD SRC="PJM_CODE" TARGET="PJM_CODE"></FIELD>
</UPDATE-FIELDS>
</AJAX-OPTION>
<LIST-OPTION>
<FORMATTER><![CDATA[
(data) => {
console.log("call formater with ", data);
if (data.node_type === "C") {
data.disabled = true;
}
return $(`<div><label>[${data.acm_code}]</label> : <label>${data.acm_name}</label></div>`);
}
]]></FORMATTER>
</LIST-OPTION>
</FIELD>
<FIELD NAME="GRID-BUDGET" INPUTTYPE="DATA-GRID" GRID-ID="GRID-WORK-BUDGET" ROWS="5" CAPTION="project.budget"/>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="PROJ_NAME" LAYOUT_WIDTH="18" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="VACM_CODE" LAYOUT_WIDTH="4"/>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="18"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[<h4 class="ml-3 border-bottom-1 col-24">@M{project.budget}</h4>]]></HEADER>
<ROW>
<FIELD NAME="GRID-BUDGET" LAYOUT_WIDTH="24" OFFSET=""/>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<EVENTS>
<BEFORE-SAVE><![CDATA[
({form, data}) => {
console.log("before save data");
if ($PageCtx.$action === "add") {
let $data = $PageCtx.main.pageData;
let budgetId = $$("VACM_CODE").val();
$$("PBDG_ID").val(budgetId);
}
let acmCount = $$("^QT_TOTAL_0").sum();
$$("PBDG_COUNT").val(acmCount);
let gridCtx = ($PageCtx.widgets["GRID-BUDGET"]||{})["$GridCtx"];
if (gridCtx) {
let bdgTotal = gridCtx.sum_of["pbgi_total"];
$$("PBDG_TOTAL").val(bdgTotal);
}
Object.assign(data,form.mainForm.jsonData());
}
]]></BEFORE-SAVE>
</EVENTS>
<INITIALIZE>
<![CDATA[
const quoterSum = ()=>{
for (let sect=1; sect <=2; sect++) {
let summary = 0;
for (let qt = 1; qt <= 4; qt++) {
summary += $$(`PTGT_QT_0${qt}0${sect}`).number();
}
$$(`QT_TOTAL_0${sect}`).val(formatNumber(summary));
}
}
$$("^PTGT_QT_").on("change",quoterSum);
]]>
</INITIALIZE>
</SCRIPT>
</FORM_ENTRY>
</FORM>
</FORMS>

View File

@@ -0,0 +1,621 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-stratigy.frml"></INCLUDE>
<INCLUDE FILE="#grids/grid-stratigy-item.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECTS</TABLENAME>
<KEYFIELDS>PROJ_ID</KEYFIELDS>
<SQL>
<SELECT>
SELECT PROJ.PROJ_ID
, PROJ.PROJ_TYPE
, PROJ.PROJ_YEAR
, PROJ.PJM_CODE
, BUD.GET_PROJECT(PROJ.PJM_CODE) PROJ_NAME
, PROJ.STM_CODE
, PROJ.BTM_CODE
, PROJ.ACM_CODE
, BUD.GET_ACTIVITY(PROJ.ACM_CODE) ACM_NAME
, PROJ.PLAN_TYPE
, PROJ.PROJ_DURATION
, PROJ.PROJ_START_YEAR
, PROJ.PROJ_END_YEAR
, PROJ.PROJ_FOR_STAFF
, PROJ.PROJ_CATE
, PROJ.PROJ_KIND
, PROJ.PROJ_FROM_YEAR
</SELECT>
<FROM>FROM PROJECTS PROJ</FROM>
<FILTER>WHERE STM_CODE=:STM_CODE</FILTER>
<ORDER>ORDER BY PROJ_YEAR DESC, PROJ_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="VARCHAR" WIDTH="50" LABEL="plcp.id"/>
<FIELD NAME="PROJ_TYPE" TYPE="VARCHAR" WIDTH="25" LABEL="plcp.type"/>
<FIELD NAME="PROJ_YEAR" TYPE="NUMBER" WIDTH="4" LABEL="plcp.year"/>
<FIELD NAME="PJM_CODE" TYPE="VARCHAR" WIDTH="20" LABEL="plcp.pjm_code"/>
<FIELD NAME="STM_CODE" TYPE="VARCHAR" WIDTH="10" LABEL="plcp.stm_code"/>
<FIELD NAME="BTM_CODE" TYPE="VARCHAR" WIDTH="10" LABEL="plcp.btm_code"/>
<FIELD NAME="ACM_CODE" TYPE="VARCHAR" WIDTH="20" LABEL="plcp.acm_code"/>
<FIELD NAME="ACM_NAME" TYPE="VARCHAR" WIDTH="200" LABEL="plcp.acm_name"/>
<FIELD NAME="PLAN_TYPE" TYPE="VARCHAR" WIDTH="15" LABEL="plcp.plan_type"/>
<FIELD NAME="PROJ_DURATION" TYPE="NUMBER" WIDTH="10" LABEL="plcp.duration"/>
<FIELD NAME="PROJ_START_YEAR" TYPE="NUMBER" WIDTH="4" LABEL="plcp.start_year"/>
<FIELD NAME="PROJ_END_YEAR" TYPE="NUMBER" WIDTH="4" LABEL="plcp.end_year"/>
<FIELD NAME="PROJ_FOR_STAFF" TYPE="NUMBER" WIDTH="10" LABEL="plcp.for_staff"/>
<FIELD NAME="PROJ_CATE" TYPE="VARCHAR" WIDTH="25" LABEL="plcp.catagory"/>
<FIELD NAME="PROJ_KIND" TYPE="VARCHAR" WIDTH="25" LABEL="plcp.kine"/>
<FIELD NAME="PROJ_FROM_YEAR" TYPE="NUMBER" WIDTH="4" LABEL="plcp.from_year"/>
</FIELDS>
</DATASET>
</DATASETS>
<FORM>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="N">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_TYPE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="STM_CODE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="BTM_CODE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PLAN_TYPE" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_DURATION" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PROJ_YEAR" CAPTION="plcp.year" INPUTTYPE="TEXT" READONLY="Y" DATATYPE="TEXT"/>
<FIELD NAME="VERSION" CAPTION="props.version" INPUTTYPE="COMBOBOX" DATATYPE="TEXT">
<LIST-OPTION TABLE="VL_VERSIONS" TEXT="VER_NAME" VALUE="VERSION" FILTER="VERSION &lt; 6" ORDER="VERSION DESC" FIRSTLIST="@{NONE}"></LIST-OPTION>
</FIELD>
<FIELD NAME="VPJM_CODE" CAPTION="plcp.pjm_code" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="PJM_CODE" CAPTION="plcp.pjm_name" INPUTTYPE="COMBOBOX" REQUIRE="Y" EDIT-READONLY="Y">
<AJAX-OPTION URL="/api-data.jbx" DATASET="DS-PROJECT-02" VALUE-FIELD="PJM_CODE" TEXT-FIELD="PJM_NAME">
<UPDATE-FIELDS>
<FIELD SRC="PJM_CODE" TARGET="VPJM_CODE"></FIELD>
</UPDATE-FIELDS>
</AJAX-OPTION>
<LIST-OPTION>
<FORMATTER><![CDATA[
(data) => {
console.log("call formater with ", data);
// data.disabled = data["node_type"] === "C";
return $(`<div class="d-flex flex-row gap-1 dyn-list-item"><label class="flex-column text-nowrap col-3">[${data.pjm_code}]</label> : <label>${data.pjm_name}</label></div>`);
}
]]></FORMATTER>
</LIST-OPTION>
</FIELD>
<FIELD NAME="VACM_CODE" CAPTION="plcp.acm_code" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="ACM_CODE" CAPTION="plcp.acm_name" INPUTTYPE="COMBOBOX" REQUIRE="Y" EDIT-READONLY="Y">
<AJAX-OPTION URL="/api-data.jbx" DATASET="DS-ACTIVITY-02" VALUE-FIELD="ACM_CODE" TEXT-FIELD="ACM_NAME" PARAMETERS="DV_YEAR=PROJ_YEAR,STM_CODE=STM_CODE">
<UPDATE-FIELDS>
<FIELD SRC="ACM_CODE" TARGET="VACM_CODE"></FIELD>
</UPDATE-FIELDS>
</AJAX-OPTION>
<LIST-OPTION>
<FORMATTER><![CDATA[
(data) => {
console.log("call formater with ", data);
// data.disabled = data["node_type"] === "C";
return $(`<div class="d-flex flex-row gap-1 dyn-list-item"><label class="flex-column text-nowrap col-3">[${data.acm_code}]</label> : <label>${data.acm_name}</label></div>`);
}
]]></FORMATTER>
</LIST-OPTION>
</FIELD>
<FIELD NAME="STM_CODE" CAPTION="plcp.stm_code" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="BTM_CODE" CAPTION="plcp.btm_code" INPUTTYPE="TEXT"/>
<FIELD NAME="PLAN_TYPE" CAPTION="plcp.plan_type" INPUTTYPE="TEXT"/>
<FIELD NAME="PROJ_DURATION" CAPTION="plcp.duration" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PROJ_START_YEAR" CAPTION="plcp.start_year" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PROJ_END_YEAR" CAPTION="plcp.end_year" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PROJ_FOR_STAFF" CAPTION="plcp.for_staff" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="PROJ_CATE" CAPTION="plcp.catagory" INPUTTYPE="RADIOGROUP" DATATYPE="TEXT" CLASS-NAME="flex-option">
<LIST-OPTION TABLE="BGT.REFER_CODE" TEXT="#RFC_DESC" VALUE="RFC_CODE" FILTER="RFG_GRP='PROJ-CATE'" ORDER="RFC_CODE"/>
</FIELD>
<FIELD NAME="PROJ_KIND" CAPTION="plcp.kind" INPUTTYPE="SWITCH" DATATYPE="TEXT"
VALUE="NEW" UNCHECK_VALUE="OLD" SUFFIX="#plcp.new|plcp.continue"></FIELD>
<FIELD NAME="PROJ_PHASE" CAPTION="#--" SHOWCAPT="Y" INPUTTYPE="CHECKBOXGROUP" DATATYPE="TEXT">
<LIST-OPTION TABLE="BGT.REFER_CODE" TEXT="#RFC_DESC" VALUE="RFC_CODE" FILTER="RFG_GRP='PROJ-PHASE'" ORDER="RFC_CODE" COLUMN="4"/>
</FIELD>
<FIELD NAME="PROJ_BUDGET" CAPTION="plcp.budget" INPUTTYPE="TEXT" DATATYPE="NUMBER" SUFFIX="บาท"/>
<FIELD NAME="PROJ_FROM_YEAR" CAPTION="plcp.from_year" INPUTTYPE="TEXT" DATATYPE="NUMBER"/>
<FIELD NAME="GRID-STRATEGY" INPUTTYPE="DATA-GRID" GRID-ID="GRID-PROJECT-STTGYS" CAPTION="pstg.header"/>
<FIELD NAME="PROJ_INVOLVERS" INPUTTYPE="TEXTAREA" CAPTION="plcp.involvers" ROWS="4"/>
<FIELD NAME="PROJ_INVOLVISSE" INPUTTYPE="TEXTAREA" CAPTION="plcp.involv_issue" ROWS="4"/>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="4"/>
<FIELD NAME="VERSION" LAYOUT_WIDTH="6" OFFSET="6"/>
</ROW>
<ROW>
<FIELD NAME="VPJM_CODE" LAYOUT_WIDTH="4"/>
<FIELD NAME="PJM_CODE" LAYOUT_WIDTH="18"/>
</ROW>
<ROW>
<FIELD NAME="VACM_CODE" LAYOUT_WIDTH="4"/>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="18"/>
</ROW>
</SECTION>
<SECTION>
<HEADER CLASS="form-section-header col-24 mg-b-n30 mg-t-16 border-top-1">
<![CDATA[<h4 class="ml-3 col-24">@M{pstg.header}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="GRID-STRATEGY" LAYOUT_WIDTH="20" OFFSET="4"/>
</ROW>
</SECTION>
<SECTION>
<ROW>
<FIELD NAME="PROJ_CATE" OFFSET="4" LAYOUT_WIDTH="20"/>
</ROW>
<ROW>
<FIELD NAME="PROJ_KIND" OFFSET="4" LAYOUT_WIDTH="6"/>
<FIELD NAME="PROJ_FROM_YEAR" LAYOUT_WIDTH="6"/>
</ROW>
</SECTION>
<SECTION ID="SECT-STRATEGY">
<HEADER CLASS="form-section-header col-24 mg-t-30 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">ความเชื่อมโยงของโครงการกับประเด็นการยกระดับคะแนนดัชนีการรับรู้การทุจริต(CPI)และแหล่งข้อมูล</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="bootstrap-table bootstrap5">
<![CDATA[
<div class="fixed-table-container fixed-table-header col-20 offset-4">
<table class="col-24 no-padding table table-bordered table-hover with-command">
<thead class="table-primary">
<tr>
<th class="center">ประเด็น/แหล่งข้อมูล</th>
<th class="center" style="width: 5em">BF(TI)<br>(1)</th>
<th class="center" style="width: 5em">EIU<br>(2)</th>
<th class="center" style="width: 5em">GI<br>(3)</th>
<th class="center" style="width: 5em">IMD<br>(4)</th>
<th class="center" style="width: 5em">PERC<br>(5)</th>
<th class="center" style="width: 5em">PRS<br>(6)</th>
<th class="center" style="width: 5em">WEF<br>(7)</th>
<th class="center" style="width: 5em">WJP<br>(8)</th>
<th class="center" style="width: 5em">VDEM<br>(9)</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">1.สินบน</td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
</tr>
<tr>
<td class="left">2.การขัดกันแห่งผลประโยชน์</td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
</tr>
<tr>
<td class="left">3.นโยบายของรัฐบาลในการแก้ไขปัญหาการทุจริต</td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
</tr>
<tr>
<td class="left">4.การตรวจสอบเจ้าหน้าที่รัฐ</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
</tr>
<tr>
<td class="left">5.ความโปร่งใสในระบบงบประมาณและการจัดซื้อจัดจ้าง</td>
<td class="center empt-dark">&nbsp</td>
<td class="center"><input type="checkbox"></td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
<td class="center empt-dark">&nbsp</td>
</tr>
</tbody>
</table>
</div>
]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-1">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">1.หลักการและเหตุผล</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-2">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">2.วัตถุประสงค์</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-3">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">3.ประโยชน์ที่คาดว่าจะได้รับ</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-4">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">4.เป้าหมาย</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-5">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">5.กลุ่มเป้าหมาย</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-6">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">6.พื้นที่ดำเนินการ</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-7">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">7.กิจกรรมที่จะดำเนินการ</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
<ROW TYPE="CONTENT" CLASS="bootstrap-table bootstrap5">
<![CDATA[
<div class="fixed-table-container fixed-table-header col-20 offset-3">
<table class="col-24 no-padding table table-bordered table-hover with-command">
<thead class="table-primary">
<tr>
<th class="center" rowspan="2">ขั้นตอนการดำเนินงาน</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 1</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 2</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 3</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 4</th>
<th class="operate-header" style="text-align: center; width: 90px;" data-field="grid-operate" rowspan="2">
<button type="button" id="add-btn" class="btn btn-primary btn-round data-grid-add-btn mg-y-5 w-100 white"><i class="fa fa-plus"></i></button>
</th>
</tr>
<tr>
<th class="center" style="width: 3em">ต.ค.</th>
<th class="center" style="width: 3em">พ.ย.</th>
<th class="center" style="width: 3em">ธ.ค.</th>
<th class="center" style="width: 3em">ม.ค.</th>
<th class="center" style="width: 3em">ก.พ.</th>
<th class="center" style="width: 3em">มี.ค.</th>
<th class="center" style="width: 3em">เม.ย.</th>
<th class="center" style="width: 3em">พ.ค.</th>
<th class="center" style="width: 3em">มิ.ย.</th>
<th class="center" style="width: 3em">ก.ค.</th>
<th class="center" style="width: 3em">ส.ค.</th>
<th class="center" style="width: 3em">ก.ย.</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">กิจกรรมที่ ๑ การระดมความคิดเห็นเพื่อ
กำหนดประเด็นจัดทำแผนงานและ
แนวทางในการขับเคลื่อนเพื่อป้องปราม
หรือเฝ้าระวังปัญหาการทุจริตในพื้นที่</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="operate-header" style="text-align: center; width: 90px;">
<div class="d-flex flex-row gap-1 justify-content-center width-100">
<button type="button" class="btn btn-grid-command btn-warning btn-edit" title="Edit "><i class="fa fa-edit white"></i></button>
<button type="button" class="btn btn-grid-command btn-danger btn-delete" title="Delete "><i class="fa fa-trash-alt white"></i></button>
<button type="button" class="btn btn-grid-command btn-primary btn-view" title="View "><i class="fa fa-file-alt white"></i></button>
</div>
</td>
</tr>
<tr>
<td class="left">กิจกรรมที่ ๒ การลงพื้นที่เพื่อเฝ้าระวังและ
ป้องปรามการทุจริตในพื้นที่ตามนโยบาย
ของสำนักงานป.ป.ช.หรือตามประเด็นที่
ได้รับแจ้งข้อมูลจากศูนย์ป้องปราม
การทุจริตแห่งชาติสำนักงานป.ป.ช.</td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="center"><input type="checkbox"></td>
<td class="operate-header" style="text-align: center; width: 90px;">
<div class="d-flex flex-row gap-1 justify-content-center width-100">
<button type="button" class="btn btn-grid-command btn-warning btn-edit" title="Edit "><i class="fa fa-edit white"></i></button>
<button type="button" class="btn btn-grid-command btn-danger btn-delete" title="Delete "><i class="fa fa-trash-alt white"></i></button>
<button type="button" class="btn btn-grid-command btn-primary btn-view" title="View "><i class="fa fa-file-alt white"></i></button>
</div>
</td>
</tr>
</tbody>
</table>
]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-8">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">8.ตัวชี้วัดของผลผลิต/ผลลัพธ์การดำเนินโครงการ</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="bootstrap-table bootstrap5">
<![CDATA[
<div class="fixed-table-container fixed-table-header col-20 offset-3">
<table class="col-24 no-padding table table-bordered table-hover with-command">
<thead class="table-primary">
<tr>
<th class="center" rowspan="2">ผลผลิต(Output)/ผลลัพธ์(Outcome)</th>
<th class="center" style="width: 12em">ตัวชี้วัด</th>
<th class="center" style="width: 12em">ค่าเป้าหมาย</th>
<th class="center" style="width: 12em">ระยะเวลา</th>
<th class="operate-header" style="text-align: center; width: 90px;" data-field="grid-operate" rowspan="2">
<button type="button" id="add-btn" class="btn btn-primary btn-round data-grid-add-btn mg-y-5 w-100 white"><i class="fa fa-plus"></i></button>
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left"><b>ผลผลิต(Output)</b><br>
รายงานสรุปผลโครงการแก้ไขปัญหา
การทุจริตในพื้นที่
</td>
<td class="center">แนวทางการแก้ไขปัญหา
การทุจริตในพื้นที่</td>
<td class="center">รายงาน ๑ ฉบับ</td>
<td class="center">ไตรมาสที่ ๔</td>
<td class="operate-header" style="text-align: center; width: 90px;">
<div class="d-flex flex-row gap-1 justify-content-center width-100">
<button type="button" class="btn btn-grid-command btn-warning btn-edit" title="Edit "><i class="fa fa-edit white"></i></button>
<button type="button" class="btn btn-grid-command btn-danger btn-delete" title="Delete "><i class="fa fa-trash-alt white"></i></button>
<button type="button" class="btn btn-grid-command btn-primary btn-view" title="View "><i class="fa fa-file-alt white"></i></button>
</div>
</td>
</tr>
<tr>
<td class="left"><b>ผลลัพธ์(Outcome)</b><br>
หน่วยงานที่เกี่ยวข้องนำแนวทางการแก้ไข
ปัญหาการทุจริตไปใช้ในการป้องกัน
การทุจริตในพื้นที่เพื่อทำให้คดีทุจริต
ในพื้นที่ลดลง
</td>
<td class="center">จำนวนหน่วยงานที่นำแนวทาง
การแก้ไขปัญหาการทุจริตในพื้นที่
ไปใช้ในการป้องกันการทุจริต
ในพื้นที่่</td>
<td class="center">อย่างน้อย ๑ หน่วยงาน</td>
<td class="center">ไตรมาสที่ ๔</td>
<td class="operate-header" style="text-align: center; width: 90px;">
<div class="d-flex flex-row gap-1 justify-content-center width-100">
<button type="button" class="btn btn-grid-command btn-warning btn-edit" title="Edit "><i class="fa fa-edit white"></i></button>
<button type="button" class="btn btn-grid-command btn-danger btn-delete" title="Delete "><i class="fa fa-trash-alt white"></i></button>
<button type="button" class="btn btn-grid-command btn-primary btn-view" title="View "><i class="fa fa-file-alt white"></i></button>
</div>
</td>
</tr>
</tbody>
</table>
]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-9">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">9.งบประมาณ</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="PROJ_BUDGET" OFFSET="4" LAYOUT_WIDTH="6"/>
</ROW>
<ROW TYPE="CONTENT" CLASS="bootstrap-table bootstrap5">
<![CDATA[
<div class="fixed-table-container fixed-table-header col-20 offset-3">
<table class="col-24 no-padding table table-bordered table-hover with-command">
<thead class="table-primary">
<tr>
<th class="center" rowspan="2">งบรายจ่าย</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 1</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 2</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 3</th>
<th class="center" style="width: 10em" colspan="3">ไตรมาส 4</th>
<th class="operate-header" style="text-align: center; width: 90px;" data-field="grid-operate" rowspan="2"></th>
</tr>
<tr>
<th class="center" style="width: 3em">ต.ค.</th>
<th class="center" style="width: 3em">พ.ย.</th>
<th class="center" style="width: 3em">ธ.ค.</th>
<th class="center" style="width: 3em">ม.ค.</th>
<th class="center" style="width: 3em">ก.พ.</th>
<th class="center" style="width: 3em">มี.ค.</th>
<th class="center" style="width: 3em">เม.ย.</th>
<th class="center" style="width: 3em">พ.ค.</th>
<th class="center" style="width: 3em">มิ.ย.</th>
<th class="center" style="width: 3em">ก.ค.</th>
<th class="center" style="width: 3em">ส.ค.</th>
<th class="center" style="width: 3em">ก.ย.</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left">งบบริหารจัดการรายเดือน</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="operate-header" style="text-align: center; width: 90px;">
<div class="d-flex flex-row gap-1 justify-content-center width-100">
<button type="button" class="btn btn-grid-command btn-warning btn-edit" title="Edit "><i class="fa fa-edit white"></i></button>
</div>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td class="left">รวมงบประมาณรายไตรมาส</td>
<td class="right" colspan="3">0</td>
<td class="right" colspan="3">0</td>
<td class="right" colspan="3">0</td>
<td class="right" colspan="3">0</td>
<td class="operate-header" style="text-align: center; width: 90px;"></td>
</tr>
</tfoot>
</table>
]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-10">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">10.ผู้รับผิดชอบโครงการ</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-13">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">11.ผู้ที่เกี่ยวข้องที่อาจจะได้รับผลกระทบ</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="PROJ_INVOLVERS" LAYOUT_WIDTH="10" OFFSET="4"/>
<FIELD NAME="PROJ_INVOLVISSE" LAYOUT_WIDTH="10"/>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-11">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">12.ลักษณะโครงการ</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="PROJ_PHASE" OFFSET="4" LAYOUT_WIDTH="16"/>
</ROW>
</SECTION>
<SECTION ID="SECT-NOTE-12">
<HEADER CLASS="form-section-header col-24 mg-t-16 mg-b-6 border-bottom-1">
<![CDATA[<h4 class="ml-3 col-24">13.การติดตามประเมินผล</h4>]]>
</HEADER>
<ROW TYPE="CONTENT" CLASS="col-20 form-group offset-4">
<![CDATA[<textarea class="form-control pd-y-3 mg-y-3" rows="3"></textarea>]]>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<EVENTS>
<BEFORE-SAVE><![CDATA[
({form, data}) => {
if ($PageCtx.$action === "add") {
let projYear = $$("PROJ_YEAR").val();
let projType = "PLCY";
let btmCode = "01";
let stmCode = $user.deptCode;
let acmCode = $$("ACM_CODE").val();
let projId = `${projYear}x${projType}x${stmCode}x${acmCode}`;
$$("PROJ_ID").val(projId);
$$("PROJ_TYPE").val(projType);
$$("STM_CODE").val(stmCode);
$$("BTM_CODE").val(btmCode);
}
Object.assign(data, form.mainForm.jsonData());
}
]]></BEFORE-SAVE>
</EVENTS>
</SCRIPT>
<BUTTONS>
<BUTTON NAME="btnReturn" CAPTION="Return" CLASS="btn btn-primary" SECTION="CENTER" POSITION="AFTER-RESET" ICON-CLASS="fa fa-reply-all">
<EVENT ON="click"><![CDATA[(ev)=>{
ev.preventDefault();
$WebNavi.goto("/bdgt04/bgt0403020");
}]]>
</EVENT>
</BUTTON>
<BUTTON NAME="btnButton2" CAPTION="รายละเอียดงบประมาณ" CLASS="btn btn-outline-success" SECTION="LEFT">
<EVENT ON="click"><![CDATA[
(ev) => {
ev.preventDefault();
let data = $PageCtx.$data;
let projId = data.proj_id;
let targetUrl = url("/bdgt04/bgt0403020-project-budget?proj_id=" + projId);
data.pageTitle = $("h4.page-title").html();
data.postData = $PageCtx.$Params.get("data");
$PageCtx.saveSessionData("budget", data);
$PageCtx.saveStorageData("budget#search", {PROJ_ID: projId});
$WebNavi.goto(targetUrl);
}
]]></EVENT>
</BUTTON>
</BUTTONS>
</FORM_ENTRY>
</FORM>
</FORMS>

View File

@@ -0,0 +1,230 @@
<?xml version="1.0" encoding="UTF-8"?>
<FORMS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/#dynf_form_def.xsd">
<INCLUDES>
<INCLUDE FILE="#grids/grid-routine-budget.frml"></INCLUDE>
</INCLUDES>
<DATASETS>
<DATASET ID="DS-MASTER">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_BUDGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PBDG.PROJ_ID
, PROJ.PROJ_YEAR
, PBDG.PBDG_ID
, PBDG.ACM_CODE
, BUD.GET_ACTIVITY(PBDG.ACM_CODE) ACM_NAME
, PBDG.PBDG_TOTAL
, PBDG.PBDG_COUNT
</SELECT>
<FROM>FROM PROJECT_BUDGETS PBDG
INNER JOIN PROJECTS PROJ ON PROJ.PROJ_ID=PBDG.PROJ_ID
</FROM>
<ORDER>ORDER BY PBDG.PROJ_ID,PBDG.PBDG_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32" ORIGIN="PBDG.PROJ_ID"/>
<FIELD NAME="PBDG_ID" TYPE="TEXT" LABEL="รหัสงบประมาณโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="20" ORIGIN="PBDG.ACM_CODE"/>
<FIELD NAME="PBDG_TOTAL" TYPE="NUMBER" LABEL="ยอดรวม" WIDTH="15"/>
<FIELD NAME="PBDG_COUNT" TYPE="NUMBER" LABEL="จำนวนกิจกรรม" WIDTH="15"/>
</FIELDS>
</DATASET>
<DATASET ID="DS-PROJECT-TARGETS">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECT_TARGETS</TABLENAME>
<KEYFIELDS>PROJ_ID,ACM_CODE</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, ACM_CODE
, PWMT_UNIT
, PTGT_QT_0101
, PTGT_QT_0102
, PTGT_QT_0201
, PTGT_QT_0202
, PTGT_QT_0301
, PTGT_QT_0302
, PTGT_QT_0401
, PTGT_QT_0402
</SELECT>
<FROM>FROM PROJECT_TARGETS</FROM>
<ORDER>ORDER BY PROJ_ID,ACM_CODE</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="รหัสอ้างอิงโครงการ" WIDTH="32"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="รหัสกิจกรรม" WIDTH="33"/>
<FIELD NAME="PWMT_UNIT" TYPE="TEXT" LABEL="หน่วยนับ" WIDTH="32"/>
<FIELD NAME="PTGT_QT_0101" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0102" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 1 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0201" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0202" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 2 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0301" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0302" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 3 (ผล)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0401" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (แผน)" WIDTH="15"/>
<FIELD NAME="PTGT_QT_0402" TYPE="NUMBER" LABEL="เป้าหมายไตรมาส 4 (ผล)" WIDTH="15"/>
<FIELD NAME="CREATE_BY" TYPE="TEXT" LABEL="ผู้สร้างรายการ" WIDTH="50"/>
<FIELD NAME="CREATE_TIME" TYPE="DATE" LABEL="เวลาที่สร้างรายการ" WIDTH="0"/>
<FIELD NAME="UPDATE_BY" TYPE="TEXT" LABEL="ผู้แก้ไขรายการล่าสุด" WIDTH="50"/>
<FIELD NAME="UPDATE_TIME" TYPE="DATE" LABEL="เวลาที่แก้ไขรายการล่าสุด" WIDTH="0"/>
</FIELDS>
<MASTER-DATA DATASET-ID="DS-MASTER" MASTER-FIELDS="PROJ_ID,ACM_CODE" DETAIL-FIELDS="PROJ_ID,ACM_CODE"/>
</DATASET>
</DATASETS>
<FORM>
<FORM_ENTRY DATAID="DS-MASTER" SAVE="Y" RETURN="Y">
<FIELDS>
<FIELD NAME="PROJ_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_ID" INPUTTYPE="HIDDEN"/>
<FIELD NAME="ACM_CODE" CAPTION="project.acm_code" INPUTTYPE="TEXT" READONLY="Y"/>
<FIELD NAME="PROJ_YEAR" CAPTION="project.year" INPUTTYPE="TEXT" REQUIRE="Y" READONLY="Y"/>
<FIELD NAME="PROJ_PRINCIPLES" CAPTION="project.remak" INPUTTYPE="TEXT" ROWS="3"/>
<FIELD NAME="ACM_NAME" CAPTION="project.acm_name" INPUTTYPE="TEXT" EDIT-READONLY="Y"/>
<SECTION ID="SECT-PROJECT-TARGET">
<FIELD NAME="PBDG_TOTAL" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PBDG_COUNT" INPUTTYPE="HIDDEN"/>
<FIELD NAME="PWMT_UNIT" CAPTION="project.target" INPUTTYPE="TEXT" READONLY="Y"></FIELD>
<FIELD NAME="QUOTER_1" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 1" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0101" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0102" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_2" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 2" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0201" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0202" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_3" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 3" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0301" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0302" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="QUOTER_4" INPUTTYPE="MULTI-FIELD" CAPTION="project.quoter 4" FIELD-SEPARATOR="/">
<FIELD-LIST>
<FIELD NAME="PTGT_QT_0401" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="PTGT_QT_0402" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
<FIELD NAME="TOTAL_QT" INPUTTYPE="MULTI-FIELD" CAPTION="project.total" FIELD-SEPARATOR="/" READONLY="Y">
<FIELD-LIST>
<FIELD NAME="QT_TOTAL_01" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
<FIELD NAME="QT_TOTAL_02" INPUTTYPE="TEXT" DATATYPE="NUMBER" DECIMAL="0"></FIELD>
</FIELD-LIST>
</FIELD>
</SECTION>
<FIELD NAME="GRID-BUDGET" INPUTTYPE="DATA-GRID" GRID-ID="GRID-WORK-BUDGET" ROWS="5" CAPTION="project.budget"/>
<SECTION ID="SEC-ATTATCH-FILE">
<FIELD NAME="FILE_BOX_01" CAPTION="file.upload 1" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_02" CAPTION="file.upload 2" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
<FIELD NAME="FILE_BOX_03" CAPTION="file.upload 3" INPUTTYPE="FILE-BOX" DATATYPE="TEXT">
<FILE-BOX FILE-TYPE="budget" FILE-ACCEPTS="pdf,docx,xlsx,jpeg,jpg,png"
UPLOAD-URL="/file-upload.jbx" FILE-URL="/get-file.jbx"
DEFAULT-NAME="@{filepath}/@{acm_code}/file-01"/>
</FIELD>
</SECTION>
</FIELDS>
<LAYOUT CLASS="block-layout-form">
<SECTION ID="SECT-MAIN">
<ROW>
<FIELD NAME="PROJ_YEAR" LAYOUT_WIDTH="6" OFFSET="6"/>
</ROW>
<ROW>
<FIELD NAME="ACM_CODE" LAYOUT_WIDTH="6"/>
<FIELD NAME="ACM_NAME" LAYOUT_WIDTH="18"/>
</ROW>
<ROW>
<FIELD NAME="PROJ_PRINCIPLES" LAYOUT_WIDTH="18" OFFSET="6"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-TARGET" TYPE="DATA-SECTION" DATASET="DS-PROJECT-TARGETS">
<ROW>
<FIELD NAME="PWMT_UNIT" LAYOUT_WIDTH="6"/>
<FIELD NAME="QUOTER_1" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_2" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_3" LAYOUT_WIDTH="3"/>
<FIELD NAME="QUOTER_4" LAYOUT_WIDTH="3"/>
<FIELD NAME="TOTAL_QT" LAYOUT_WIDTH="4"/>
</ROW>
</SECTION>
<SECTION ID="SECT-PROJECT-BUTGET">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[
<h4 class="ml-3 border-bottom-1 col-24">@M{project.budget}</h4>
]]></HEADER>
<ROW>
<FIELD NAME="GRID-BUDGET" LAYOUT_WIDTH="24" OFFSET=""/>
</ROW>
</SECTION>
<SECTION ID="SECT-FILE-UPLOAD">
<HEADER CLASS="col-24 pd-t-16">
<![CDATA[<h4 class="ml-3 border-bottom-1 col-24">@M{project.constructor_attatchment}</h4>]]>
</HEADER>
<ROW>
<FIELD NAME="FILE_BOX_01" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_02" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
<ROW>
<FIELD NAME="FILE_BOX_03" LAYOUT_WIDTH="16" OFFSET="4"/>
</ROW>
</SECTION>
</LAYOUT>
<SCRIPT>
<EVENTS>
<BEFORE-SAVE><![CDATA[
({form, data}) => {
console.log("before save data");
if ($PageCtx.$action === "add") {
let $data = $PageCtx.main.pageData;
let budgetId = $$("VACM_CODE").val();
$$("PBDG_ID").val(budgetId);
}
let acmCount = $$("^QT_TOTAL_0").sum();
$$("PBDG_COUNT").val(acmCount);
let gridCtx = ($PageCtx.widgets["GRID-BUDGET"]||{})["$GridCtx"];
if (gridCtx) {
let bdgTotal = gridCtx.sum_of["pbgi_total"];
$$("PBDG_TOTAL").val(bdgTotal);
}
Object.assign(data,form.mainForm.jsonData());
}
]]></BEFORE-SAVE>
</EVENTS>
<INITIALIZE>
<![CDATA[
const quoterSum = ()=>{
for (let sect=1; sect <=2; sect++) {
let summary = 0;
for (let qt = 1; qt <= 4; qt++) {
summary += $$(`PTGT_QT_0${qt}0${sect}`).number();
}
$$(`QT_TOTAL_0${sect}`).val(formatNumber(summary));
}
}
$$("^PTGT_QT_").on("change",quoterSum);
]]>
</INITIALIZE>
</SCRIPT>
</FORM_ENTRY>
</FORM>
</FORMS>