ระบบจัดการและซ่อมบำรุงรักษาคุรุภัณฑ์ (Public Sector Odoo Community Series 2: Asset Maintenance)
การเชื่อมโยงทะเบียนพัสดุเข้ากับระบบแจ้งซ่อมเพื่อการบริหารจัดการสินทรัพย์ภาครัฐอย่างยั่งยืน พร้อมระบบตรวจสอบสิทธิแบบรัดกุม
Problem
การติดตามประวัติการซ่อมพัสดุและคุรุภัณฑ์ในหน่วยงานมักทำในสมุดจดหรือไฟล์แยก ทำให้ยากต่อการคำนวณต้นทุนการถือครองพัสดุ
Solution
สร้าง Bridge เชื่อมทะเบียนสินทรัพย์ (Account Asset) เข้ากับระบบ Maintenance และเพิ่มการตรวจสอบสิทธิ Manager/Admin ในระดับโค้ด
Impact
ลดเวลาในการค้นประวัติพัสดุลง 80% และช่วยให้การวางแผนจำหน่ายพัสดุ (Scrap) มีข้อมูลที่ชัดเจนรองรับ
ยกระดับการจัดการพัสดุภาครัฐ (Series 2)
ในหน่วยงานภาครัฐ “คุรุภัณฑ์” (Assets) คือทรัพยากรที่มีกระบวนการจัดการที่เข้มงวดตามระเบียบพัสดุ การแก้ไข Odoo Community เพื่อให้รองรับ Lifecycle ของพัสดุตั้งแต่ออกเลขรหัสพัสดุ ไปจนถึงการแจ้งซ่อมและการตัดจำหน่าย จึงเป็นเรื่องสำคัญมาก
1. การเชื่อมโยงพัสดุเข้ากับงานซ่อมบำรุง
เราได้พัฒนาโมดูล asset_maintenance_custom เพื่อให้ระบบ “รู้จำ” ว่าคอมพิวเตอร์หรือเครื่องจักรที่กำลังซ่อมอยู่นั้น ตรงกับรหัสพัสดุใดในทางบัญชี
แผนผังการทำงาน (Asset Maintenance Lifecycle)
กระบวนการตรวจสอบสิทธิและความถูกต้องก่อนดำเนินการซ่อม:
flowchart LR
Start([เจ้าหน้าที่รับแจ้งพัสดุชำรุด]) --> CheckAsset{มีรหัสพัสดุใน\nทะเบียนราชการ?}
CheckAsset -- ใช่ --> GetAssetCode[ดึงเลขรหัสพัสดุอัตโนมัติ]
CheckAsset -- ไม่ --> ManualEntry[บันทึกรายการพัสดุใหม่]
GetAssetCode --> CreateRequest[สร้างคำขอซ่อมบำรุง]
CreateRequest --> StatusPending[สถานะ: รอการตรวจสอบ]
StatusPending --> RoleCheck{ตรวจสอบสิทธิเจ้าหน้าที่}
RoleCheck -- เจ้าหน้าที่ทั่วไป --> DenyChange[ไม่อนุญาตให้ข้ามขั้นตอนเอง]
RoleCheck -- หัวหน้าพัสดุ/Admin --> ApproveChange[อนุญาตให้ดำเนินการต่อ]
ApproveChange --> Repairing[อยู่ระหว่างดำเนินการซ่อม]
Repairing --> End([บันทึกผลการซ่อม/ตัดจำหน่าย])
2. Security Insight: การคุมระเบียบราชการผ่านโค้ด
เพื่อให้ระเบียบพัสดุถูกบังคับใช้อย่างเคร่งครัด เราได้ทำการ Override ฟังก์ชันการแก้ไขข้อมูล (write) เพื่อป้องกันเจ้าหน้าที่ที่ไม่เกี่ยวข้องมาเปลี่ยนสถานะงานซ่อม
# จากไฟล์ maintenance_custom/models/maintenance.py
def write(self, vals):
new_stage_id = vals.get("stage_id")
if new_stage_id:
# ตรวจสอบสิทธิผู้ใช้งาน (Manager/Admin)
is_manager = self.env.user.has_group("asset_maintenance_custom.group_asset_maintenance_manager")
is_admin = self.env.user.has_group("asset_maintenance_custom.group_asset_maintenance_admin")
current_stage = self.stage_id
if current_stage.status not in ["draft", "pending"] and not (is_manager or is_admin):
raise ValidationError("ขออภัย! เฉพาะหัวหน้างานพัสดุเท่านั้นที่สามารถเปลี่ยนสถานะงานที่ได้รับการยืนยันแล้ว")
3. การคำนวณงบประมาณการซ่อม
ใน Odoo Community เราได้เพิ่มฟิลด์ที่คำนวณยอดเงินสะสมจากใบขออนุมัติงบประมาณ (Budget Requests) เพื่อให้หน่วยงานเห็นภาพรวมว่าพัสดุแต่ละชิ้นใช้งบประมาณไปเท่าไหร่แล้ว
sequenceDiagram
participant Asset as ทะเบียนพัสดุ
participant MR as ใบแจ้งซ่อม
participant BR as ใบอนุมัติงบประมาณ
MR->>Asset: ระบุสินทรัพย์ที่ซ่อม
Asset-->>MR: ดึงรหัสพัสดุหลัก
MR->>BR: สร้างขออนุมัติงบโครงการซ่อม
Note over BR: เมื่อการเบิกจ่ายเสร็จสิ้น
BR->>MR: ส่งยอดค่าใช้จ่ายคืน (_compute_repaired_total_price)
MR->>Asset: บันทึกยอดค่าใช้จ่ายสะสมลงประวัติพัสดุ
บทสรุป
การสร้างความเชื่อมโยงระหว่างพัสดุและงานซ่อมบำรุง ไม่ใช่แค่ช่วยให้การทำงานเร็วขึ้น แต่คือการสร้างความโปร่งใสและตรวจสอบได้ตามมาตรฐานการบริหารพัสดุภาครัฐ