Skip to content

Instantly share code, notes, and snippets.

@ooker777
Last active July 4, 2023 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ooker777/2deabdbe55d74118c9c82254c56eb013 to your computer and use it in GitHub Desktop.
Save ooker777/2deabdbe55d74118c9c82254c56eb013 to your computer and use it in GitHub Desktop.
Script quản lý tài chính bằng tiếng Việt tự nhiên trên Fibery
/*
┌───────────────────────────────────────────────────────────────┐
│ Script quản lý tài chính bằng tiếng Việt tự nhiên trên Fibery │
└───────────────────────────────────────────────────────────────┘
• Ở thẻ Actions chọn Created và Updated, với field là Name như hình: https://i.imgur.com/8iVGxfO.png
• Chỉnh sửa danhSáchLoạiChiTiêu và danhSáchPhươngThức theo nhu cầu của bạn
• Số tiền sẽ là các số có đuôi là tr, k, đ, d. Nếu có nhiều giá trị thì sẽ chọn giá trị đứng đằng sau dấu bằng ('='). Dấu thập phân là dấu chấm ('.'). Bạn có thể dùng dấu phẩy để dễ đọc. Nó sẽ được bỏ đi. Ví dụ: 1.2tr, 3,400k, 123,456,700đ, 123,456,700d.
• Nếu kết quả ra -1 nghĩa là có vấn đề
• Để kiểm tra kết quả tính toán, vào thẻ Activity
Viết bởi Quả Cầu.
*/
const fibery = context.getService('fibery');
const danhSáchLoạiChiTiêu = {
"đi chợ": "Cần thiết",
"khám": "Y tế",
"đáo": "Trả nợ",
}
const danhSáchMãLoạiChiTiêu = Object.keys(danhSáchLoạiChiTiêu)
function lấyLoạiChiTiêu(input) {
for (const mãLoạiChiTiêu of danhSáchMãLoạiChiTiêu) {
if (input.includes(mãLoạiChiTiêu)) {
console.log("mãLoạiChiTiêu:", mãLoạiChiTiêu)
return danhSáchLoạiChiTiêu[mãLoạiChiTiêu]
}
}
return 'Khác'
}
const danhSáchPhươngThức = {
"ck vcb": "Tài khoản vcb",
"ck vcb vợ em": "tài khoản vcb nợn",
"charged thẻ shinhan": "tài khoản shinhan kendy",
"momo": "tài khoản momo",
"nợn trả": "cash vợ em",
}
const danhSáchMãPhươngThức = Object.keys(danhSáchPhươngThức)
function lấyPhươngThức(input) {
for (const mãPhươngThức of danhSáchMãPhươngThức) {
if (input.includes(mãPhươngThức)) {
console.log("mãPhươngThức:", mãPhươngThức)
return danhSáchPhươngThức[mãPhươngThức]
}
}
return 'Tiền mặt'
}
const regexSốTiền = /(=|= )?(\d|,|\.)+(k|tr|d|đ)\b/g //kiếm tất cả các số có tận cùng là tr, k , d, đ. Giữa các số đó có thể có dấu chấm hoặc dấu phẩy. Trước các con số đó có thể có dấu bằng.
function lấySốTiền(input) {
const kếtQuảKiếm = input.match(regexSốTiền)
console.log("kếtQuảKiếm:", kếtQuảKiếm);
console.log("kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('=')):", kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('=')))
// Nếu kếtQuảKiếm chỉ có 1 kết quả, thì đó chính là con số mình cần. Nếu có nhiều hơn 1, thì lấy kết quả có chứa dấu '='
if (kếtQuảKiếm.length == 1) {
var tổngTrướcKhiĐịnhDạng = kếtQuảKiếm[0];
} else if (kếtQuảKiếm.join().includes('=')) {
var tổngTrướcKhiĐịnhDạng = kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('='))[0].replace('=', '');
} else {
return -1
}
console.log("Tổng trước khi định dạng:", tổngTrướcKhiĐịnhDạng);
const giáTrịCủaTổng = parseFloat(tổngTrướcKhiĐịnhDạng.replace(/k|tr|d|đ|,/, ''))
console.log("Giá trị của tổng:", giáTrịCủaTổng);
if (tổngTrướcKhiĐịnhDạng.includes('tr')) {
var tổngSauKhiĐịnhDạng = giáTrịCủaTổng * 1000000
} else if (tổngTrướcKhiĐịnhDạng.includes('k')) {
var tổngSauKhiĐịnhDạng = giáTrịCủaTổng * 1000
} else {
var tổngSauKhiĐịnhDạng = giáTrịCủaTổng
}
console.log("Tổng sau khi định dạng:", tổngSauKhiĐịnhDạng);
return tổngSauKhiĐịnhDạng
}
for (const entity of args.currentEntities) {
const input = entity['Name'];
console.log("Name: ", input);
const sốTiền = lấySốTiền(input)
const loạiChiTiêu = lấyLoạiChiTiêu(input)
const phươngThức = lấyPhươngThức(input)
await fibery.updateEntity(entity.type, entity.id, {
'Số tiền': sốTiền,
'Loại chi tiêu': loạiChiTiêu,
'Phương thức': phươngThức
});
console.log("Loại chi tiêu: ", loạiChiTiêu);
console.log("Phương thức: ", phươngThức);
console.log("Số tiền: ", sốTiền);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment