Initial commit: DLS - Dental Lab System
- Flutter + PocketBase dental lab management system - Clinic & lab dashboards, job tracking, patient management - Product catalog, finance tracking, multi-language support - AI assistant integration, realtime notifications - Windows installer (Inno Setup) included - Developed by kovakyazilim.com
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
/// @ts-check
|
||||
|
||||
onRecordAfterCreateSuccess((e) => {
|
||||
const APP_ID = "524cb6d8-2640-4f85-bb24-c9c762233de7";
|
||||
const API_KEY = "os_v2_app_kjglnwbgibhylozezhdweiz546iv5ns5h2hujfvrsao64p7qkqk6lwqthgwirm6naxdy37tmd5nivppfqmxrnqreoewpgqkcnawjjpy";
|
||||
try {
|
||||
const rec = e.record;
|
||||
if (rec.getString("status") !== "pending") return;
|
||||
const labTenantId = rec.getString("lab_tenant_id");
|
||||
const code = rec.getString("patient_code") || "Is";
|
||||
const type = rec.getString("prosthetic_type") || "";
|
||||
const label = type ? code + " - " + type : code;
|
||||
const jobId = rec.getString("id");
|
||||
let userIds = [];
|
||||
try {
|
||||
const members = $app.findRecordsByFilter("tenant_members", 'tenant_id = "' + labTenantId + '"', "", 100, 0);
|
||||
userIds = members.map(function(r) { return r.getString("user_id"); }).filter(Boolean);
|
||||
} catch (_) {}
|
||||
if (!userIds.length) return;
|
||||
const res = $http.send({
|
||||
url: "https://onesignal.com/api/v1/notifications",
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "Authorization": "Basic " + API_KEY },
|
||||
body: JSON.stringify({ app_id: APP_ID, include_external_user_ids: userIds, channel_for_external_user_ids: "push",
|
||||
headings: { en: "Yeni Is Talebi", tr: "Yeni Is Talebi" },
|
||||
contents: { en: label + " icin yeni bir is talebi geldi.", tr: label + " icin yeni bir is talebi geldi." },
|
||||
data: { job_id: jobId, tenant_type: "lab" } }),
|
||||
timeout: 10,
|
||||
});
|
||||
console.log("[notif-create] status=" + res.statusCode + " users=" + userIds.length);
|
||||
} catch (err) {
|
||||
console.log("[notif-create] error: " + String(err));
|
||||
}
|
||||
}, "jobs");
|
||||
|
||||
onRecordAfterUpdateSuccess((e) => {
|
||||
const APP_ID = "524cb6d8-2640-4f85-bb24-c9c762233de7";
|
||||
const API_KEY = "os_v2_app_kjglnwbgibhylozezhdweiz546iv5ns5h2hujfvrsao64p7qkqk6lwqthgwirm6naxdy37tmd5nivppfqmxrnqreoewpgqkcnawjjpy";
|
||||
try {
|
||||
const rec = e.record;
|
||||
const newStatus = rec.getString("status");
|
||||
const newLocation = rec.getString("location");
|
||||
const clinicTenantId = rec.getString("clinic_tenant_id");
|
||||
const labTenantId = rec.getString("lab_tenant_id");
|
||||
const code = rec.getString("patient_code") || "Is";
|
||||
const type = rec.getString("prosthetic_type") || "";
|
||||
const label = type ? code + " - " + type : code;
|
||||
const jobId = rec.getString("id");
|
||||
let oldStatus = "";
|
||||
let oldLocation = "";
|
||||
try {
|
||||
const orig = rec.original();
|
||||
if (orig) {
|
||||
oldStatus = orig.getString("status");
|
||||
oldLocation = orig.getString("location");
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
if (oldStatus && oldStatus === newStatus && oldLocation === newLocation) return;
|
||||
|
||||
let targetTenantId = "";
|
||||
let title = "";
|
||||
let body = "";
|
||||
let tenantType = "clinic";
|
||||
|
||||
if (oldStatus === "pending" && newStatus === "in_progress" && newLocation === "at_lab") {
|
||||
targetTenantId = clinicTenantId; title = "Is Kabul Edildi";
|
||||
body = label + " laboratuvar tarafindan kabul edildi."; tenantType = "clinic";
|
||||
} else if (newStatus === "in_progress" && newLocation === "at_clinic" && oldLocation !== "at_clinic") {
|
||||
targetTenantId = clinicTenantId; title = "Prova Onayi Bekleniyor";
|
||||
body = label + " prova icin klinik onayini bekliyor."; tenantType = "clinic";
|
||||
} else if (oldLocation === "at_clinic" && newLocation === "at_lab" && newStatus === "in_progress") {
|
||||
targetTenantId = labTenantId; title = "Klinik Geri Bildirimi";
|
||||
body = label + " icin klinikten geri bildirim geldi."; tenantType = "lab";
|
||||
} else if (newStatus === "sent" && oldStatus !== "sent") {
|
||||
targetTenantId = clinicTenantId; title = "Teslimat Hazir";
|
||||
body = label + " teslim icin hazir."; tenantType = "clinic";
|
||||
} else if (newStatus === "delivered" && oldStatus !== "delivered") {
|
||||
targetTenantId = labTenantId; title = "Is Teslim Alindi";
|
||||
body = label + " klinik tarafindan teslim alindi."; tenantType = "lab";
|
||||
} else if (newStatus === "cancelled" && oldStatus !== "cancelled") {
|
||||
let allIds = [];
|
||||
try {
|
||||
const cm = $app.findRecordsByFilter("tenant_members", 'tenant_id = "' + clinicTenantId + '"', "", 100, 0);
|
||||
const lm = $app.findRecordsByFilter("tenant_members", 'tenant_id = "' + labTenantId + '"', "", 100, 0);
|
||||
const raw = cm.concat(lm).map(function(r) { return r.getString("user_id"); }).filter(Boolean);
|
||||
allIds = raw.filter(function(id, idx) { return raw.indexOf(id) === idx; });
|
||||
} catch (_) {}
|
||||
if (!allIds.length) return;
|
||||
const res = $http.send({
|
||||
url: "https://onesignal.com/api/v1/notifications",
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "Authorization": "Basic " + API_KEY },
|
||||
body: JSON.stringify({ app_id: APP_ID, include_external_user_ids: allIds, channel_for_external_user_ids: "push",
|
||||
headings: { en: "Is Iptal Edildi", tr: "Is Iptal Edildi" },
|
||||
contents: { en: label + " iptal edildi.", tr: label + " iptal edildi." },
|
||||
data: { job_id: jobId, tenant_type: "clinic" } }),
|
||||
timeout: 10,
|
||||
});
|
||||
console.log("[notif-update] cancelled status=" + res.statusCode + " users=" + allIds.length);
|
||||
return;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
let userIds = [];
|
||||
try {
|
||||
const members = $app.findRecordsByFilter("tenant_members", 'tenant_id = "' + targetTenantId + '"', "", 100, 0);
|
||||
userIds = members.map(function(r) { return r.getString("user_id"); }).filter(Boolean);
|
||||
} catch (_) {}
|
||||
|
||||
if (!userIds.length) return;
|
||||
|
||||
const res = $http.send({
|
||||
url: "https://onesignal.com/api/v1/notifications",
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "Authorization": "Basic " + API_KEY },
|
||||
body: JSON.stringify({ app_id: APP_ID, include_external_user_ids: userIds, channel_for_external_user_ids: "push",
|
||||
headings: { en: title, tr: title },
|
||||
contents: { en: body, tr: body },
|
||||
data: { job_id: jobId, tenant_type: tenantType } }),
|
||||
timeout: 10,
|
||||
});
|
||||
console.log("[notif-update] " + title + " status=" + res.statusCode + " users=" + userIds.length);
|
||||
|
||||
} catch (err) {
|
||||
console.log("[notif-update] error: " + String(err));
|
||||
}
|
||||
}, "jobs");
|
||||
Reference in New Issue
Block a user