ในที่สุดคุณสามารถพัฒนาโปรแกรมเปิดบิลสร้างไฟล์ PDF ที่มี XML อยู่ข้างในด้วยตัวเองได้แล้ว ด่านต่อไปของ E-Tax Invoice คือการหาวิธีส่งไฟล์ทางอีเมลเพื่อประทับรับรองเวลา และส่งมอบให้ลูกค้า
เงื่อนไขหนึ่งของการเปิดใช้ E-Tax Invoice by Email ผู้ประกอบการต้องยื่นคำร้องพร้อมทั้งแจ้งอีเมลที่ใช้ส่งใบกำกับภาษี ซึ่งอีเมลนั้นต้องมาจากโดเมนที่น่าเชื่อถือเท่านั้น โดยการทดลองส่งเมลไปตรวจสอบกับ domain-check@tools.teda.th
หมายเหตุด้านล่างบอกว่าสามารถใช้ Free email ได้แก่ gmail, hotmail, outlook และ yahoo ได้โดยไม่ต้องตรวจสอบ
ขั้นตอนการทำงานแบบพื้นฐาน หลังจากสร้างไฟล์ PDF ได้แล้ว ก็อาจเปิดโปรแกรมส่งอีเมลของผู้ให้บริการ free email เหล่านั้นขึ้นมา แล้วแนบไฟล์ไปพร้อมกับระบุข้อความตามเงื่อนไขที่กำหนด
to: ให้ระบุอีเมลของผู้ซื้อ
cc: ให้ระบุ csemail@etax.teda.th
subject: ต้องมีข้อความตามรูปแบบที่กำหนดเท่านั้น - [วันเดือนปี][INV][เลขที่] สำหรับ ใบกำกับภาษี - [วันเดือนปี][DBN][เลขที่][อ้างถึง] สำหรับ ใบเพิ่มหนี้ - [วันเดือนปี][CRN][เลขที่][อ้างถึง] สำหรับ ใบลดหนี้
แต่ข้อความที่กำหนดนั้นสำหรับผู้ใช้ทั่วไปเป็นอะไรที่ต้องตั้งสติพอสมควร เช่น วันเดือนปี ต้องเป็นเลขติดกัน 8 ตัว อ่านยาก ทำให้ตรวจทานยาก (เข้าใจว่าต้องใช้เป็นปี พ.ศ. ด้วย) คิดถึงความผิดพลาดที่มีโอกาสเกิดขึ้นทุกครั้งที่ต้องส่งอีเมล แล้วจำเป็นระบุข้อความตามรูปแบบนั้นเป๊ะ ๆ เป็นเรื่องไม่สบายเนื้อสบายตัวสำหรับผู้ใช้เอาเสียเลย
หากข้อความในอีเมลถูกเขียนขึ้นอัตโนมัติโดยโปรแกรม ก็จะช่วยลดความผิดพลาดโดยไม่จำเป็น จึงเป็นที่มาของการหาทางอำนวยความสะดวกส่งเมลจากโปรแกรม
Mailto & Gmail
การออกแบบระบบส่งอีเมลทำได้หลายกระบวนท่า หลังจากที่หารือกับ Bancha Kiatruangchai ที่ช่วยกันหาทางทำ E-Tax Invoice ที่เป็น PDF มาตั้งแต่ต้น ก็ยังไม่สามารถตัดสินใจเลือกคำตอบสุดท้ายได้
ส่วนตัวผมคิดว่าไหน ๆ สร้างไฟล์ PDF ได้ด้วยตัวเองแล้ว ก็อยากเสนอทางเลือกวิธีเขียนโค้ด JavaScript เพื่ออำนวยความสะดวกมากที่สุด สำหรับการส่งอีเมลด้วยตนเองดังนี้
เตรียมข้อความสำคัญให้อัตโนมัติ โดยสร้างเป็น mailto url หรือ gmail url
ผ่านข้อความนั้นให้กับ mail client
แนบไฟล์ PDF ที่บันทึกไว้ แล้วส่ง
ตัวอย่าง mailto url
ตัวอย่าง gmail url
https://mail.google.com/mail/?cc=csemail@etax.teda.th&su=[04022567][INV][EIV67020021]&to=buyer@site.com&view=cm
ขณะที่ mailto จะเรียกโปรแกรม mail client ที่อยู่ในเครื่อง ซึ่งอาจจะแตกต่างกันขึ้นอยู่กับเครื่องคอมพิวเตอร์ที่ใช้งาน แต่ gmail จะเปิด browser ขึ้นมา ใช้งานเหมือนกันทุกเครื่อง
นอกจากนี้ ยังสามารถสร้าง url ที่ระบุอีเมลผู้ส่งโดยระบุ u/me@gmail.com/ เพิ่มได้อีกด้วย
note: การระบุอีเมลผู้ส่งที่ไม่ใช่ account ที่ใช้งานอยู่ อาจใช้ไม่ได้ เด้งไปที่ default login โดยไม่แจ้งเตือน (เครื่องที่มี multiple account ดูรายละเอียดการสร้าง url ให้ผ่าน login ที่ต้องการก่อน)
https://mail.google.com/mail/u/me@gmail.com/?cc=csemail@etax.teda.th&su=[04022567][INV][EIV67020021]&to=buyer@site.com&view=cm
ตัวอย่างโค้ด JavaScript
const composeGmail = (xdata, to, from) => {
const cc = 'csemail@etax.teda.th'
const docno = xdata.docno
const doctype = ({
"80": "DBN",
"81": "CRN",
})[xdata.doctype] || 'INV';
const doctitle = ({
"80": "ใบเพิ่มหนี้",
"81": "ใบลดหนี้",
"380": "ใบแจ้งหนี้",
"388": "ใบกำกับภาษี",
"T01": "ใบรับ",
"T02": "ใบแจ้งหนี้/ใบกำกับภาษี",
"T03": "ใบเสร็จรับเงิน/ใบกำกับภาษี",
"T04": "ใบส่งของ/ใบกำกับภาษี",
"T05": "ใบกำกับภาษีอย่างย่อ",
"T06": "ใบเสร็จรับเงิน/ใบกำกับภาษีอย่างย่อ",
"T07": "ใบแจ้งยกเลิก",
})[xdata.doctype] || 'ใบกำกับภาษี';
const y = (543 + xdata.docdate.slice(0, 4)) // convert year to BE
const m = xdata.docdate.slice(5, 7)
const d = xdata.docdate.slice(8, 10)
const docdate = d + m + y
let subject = `[${docdate}][${doctype}][${docno}]`
if (etax.doctype in ['80','81', 'T07']) {
const ref = xdata.refno
subject += `[${ref}]`
}
const mparms = {
view: 'cm',
to,
cc,
su: subject,
body: [
doctitle,
docno,
[d, m, y].join('/'),
xdata.buyer.name,
'----'
].join('\n')
}
// calculate popup dimension
let w = 0|(window.screen.availWidth * 0.4);
let h = 0|(window.screen.availHeight * 0.4);
if (w < 360)
w = 0|(window.screen.availWidth * 0.7);
if (h < 360)
h = 0|(window.screen.availHeight * 0.7);
if (w > 800)
w = 800;
if (h > 600)
h = 600;
const l = 0|((window.screen.availWidth - w) * 0.7);
const t = 0|((window.screen.availHeight - h) * 0.7);
const option = 'height=' + h + ',width=' + w + ',top=' + t + ',left=' + l
const authuser = from? `u/${from}/` : '';
// serialize query
const qry = Object.entries(mparms)
.map(kv => encodeURIComponent(kv[0]) + '=' + encodeURIComponent(kv[1])
.join('&');
const url = `https://mail.google.com/mail/${authuser}?${qry}`
window.open(url ,'_blank', option)
}
อ้างอิง
E-Tax Invoice by Email https://etax.teda.th/
mailto url https://css-tricks.com/snippets/html/mailto-links/
gmail url https://stackoverflow.com/a/70030094
Google login for multiple accounts https://stackoverflow.com/a/40447671
Create an E-Tax Invoice (PDF/A-3) using JavaScript https://www.scraftoncloud.com/post/create-an-e-tax-invoice-pdf-a-3-using-javascript
Create an E-Tax Invoice (XML) using JavaScript https://www.scraftoncloud.com/post/create-an-e-tax-invoice-xml-using-javascript
Comments