import { Component } from '@angular/core'; @Component({ selector: 'app-main-report', templateUrl: './main-report.component.html', standalone: false, styleUrls: ['./main-report.component.css'] }) export class MainReportComponent { readonly reportRange = { start: '1 มิถุนายน 2567', end: '30 มิถุนายน 2567' }; readonly summaryCards = [ { label: 'รายรับรวม', value: '฿1,284,500', detail: '+12.4% MoM', tone: 'mint' }, { label: 'รายจ่ายรวม', value: '฿732,800', detail: '-4.1% MoM', tone: 'amber' }, { label: 'กำไรสุทธิ', value: '฿551,700', detail: 'Margin 42.9%', tone: 'indigo' }, { label: 'บันทึกรายการ', value: '86 รายการ', detail: '32 รายรับ · 54 รายจ่าย', tone: 'slate' } ]; readonly ledgerRecords = [ { date: '01 มิ.ย. 2567', doc: 'RCPT-9101', type: 'income', topic: 'ค่าบริการที่ปรึกษา', category: 'บริการ', amount: 145000 }, { date: '02 มิ.ย. 2567', doc: 'EXP-4407', type: 'expense', topic: 'ค่าวัสดุโครงการ A', category: 'ต้นทุนโครงการ', amount: -38900 }, { date: '06 มิ.ย. 2567', doc: 'RCPT-9110', type: 'income', topic: 'รับเงินมัดจำโครงการ', category: 'สัญญาใหม่', amount: 220000 }, { date: '09 มิ.ย. 2567', doc: 'EXP-4412', type: 'expense', topic: 'เงินเดือนพนักงาน', category: 'บุคลากร', amount: -180000 }, { date: '12 มิ.ย. 2567', doc: 'EXP-4416', type: 'expense', topic: 'ค่าเช่าออฟฟิศ', category: 'ค่าใช้จ่ายคงที่', amount: -48000 }, { date: '19 มิ.ย. 2567', doc: 'RCPT-9122', type: 'income', topic: 'ค่าสัญญาบริการรายปี', category: 'บริการ', amount: 325000 }, { date: '23 มิ.ย. 2567', doc: 'EXP-4425', type: 'expense', topic: 'ค่าโฆษณาออนไลน์', category: 'การตลาด', amount: -72000 }, { date: '28 มิ.ย. 2567', doc: 'RCPT-9133', type: 'income', topic: 'รายรับจากคู่ค้าใหม่', category: 'พันธมิตร', amount: 210500 } ]; readonly expenseBreakdown = [ { label: 'ต้นทุนโครงการ', value: 34, color: '#10b981' }, { label: 'บุคลากร', value: 26, color: '#6366f1' }, { label: 'การตลาด', value: 18, color: '#f97316' }, { label: 'ค่าใช้จ่ายคงที่', value: 14, color: '#0ea5e9' }, { label: 'อื่นๆ', value: 8, color: '#e11d48' } ]; readonly previewTotals = [ { label: 'รายรับรวม', value: '฿1,284,500' }, { label: 'รายจ่ายรวม', value: '฿732,800' }, { label: 'กำไรสุทธิ', value: '฿551,700' } ]; printPreviewOpen = false; get expenseGradient(): string { let current = 0; const segments = this.expenseBreakdown .map(slice => { const start = current; const end = current + slice.value; current = end; return `${slice.color} ${start}% ${end}%`; }) .join(', '); return `conic-gradient(${segments})`; } get formattedRecords() { return this.ledgerRecords.map(record => ({ ...record, displayAmount: this.formatCurrency(record.amount), tone: record.type === 'income' ? 'income' : 'expense' })); } openPreview(): void { this.printPreviewOpen = true; } closePreview(): void { this.printPreviewOpen = false; } private formatCurrency(amount: number): string { const formatter = new Intl.NumberFormat('th-TH', { style: 'currency', currency: 'THB', maximumFractionDigits: 0 }); return formatter.format(amount); } }