Skip to content
Snippets Groups Projects
Commit e79f803c authored by GustavChile's avatar GustavChile
Browse files

Merge branch 'dev' of gitlab.liu.se:emisv011/c3 into dev

parents ac4fe29e cb16c7fc
Branches
No related tags found
3 merge requests!139The members of the project should be showing now in pgsa pages, but there are...,!134The members of the project should be showing now in pgsa pages, but there are...,!107Added autofill from database into text boxes, but now data is taken from wrong...
Pipeline #110038 passed
......@@ -20,16 +20,16 @@ import {
} from "firebase/firestore";
import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
// const firebaseConfig = {
// apiKey: "AIzaSyDqkaVZMr11J4mfnR0auqoQilZyPfyD-x4",
// authDomain: "c3solutions-dc109.firebaseapp.com",
// projectId: "c3solutions-dc109",
// storageBucket: "c3solutions-dc109.appspot.com",
// messagingSenderId: "902143402555",
// appId: "1:902143402555:web:29213e81de0a0cba38b21e",
// };
const firebaseConfig = {
const firebaseConfig = {
apiKey: "AIzaSyDqkaVZMr11J4mfnR0auqoQilZyPfyD-x4",
authDomain: "c3solutions-dc109.firebaseapp.com",
projectId: "c3solutions-dc109",
storageBucket: "c3solutions-dc109.appspot.com",
messagingSenderId: "902143402555",
appId: "1:902143402555:web:29213e81de0a0cba38b21e",
};
/*const firebaseConfig = {
apiKey: "AIzaSyBIsZq_yOsJljp1woIxndJO1GkW6soh-g4",
authDomain: "company3-456bb.firebaseapp.com",
projectId: "company3-456bb",
......@@ -37,7 +37,7 @@ const firebaseConfig = {
messagingSenderId: "310033686522",
appId: "1:310033686522:web:63198bb0db679c98ee4e43",
measurementId: "G-PFLDQY00DB"
};
};*/
const app = initializeApp(firebaseConfig);
export const auth = getAuth();
......@@ -49,7 +49,7 @@ const taskCollection = collection(db, "task");
const hospitalCollection = collection(db, "hospital");
const suggestionCollection = collection(db, "suggestion");
const knowledgeDocumentCollection = collection(db, "knowledgeDocument");
const userImprovementWorkCollections = collection(db, "userImprovementWork");
const userImprovementWorkCollection = collection(db, "userImprovementWork");
const userTaskCollection = collection(db, "userTask");
interface improvementWorkType {
......@@ -123,8 +123,44 @@ async function createUser(
//Adds a new improvementWork to the database
// takes in Id, name, currentStage in PDSA, content, unitId refers to as string and if completed as boolean
// throws error if transaction failed
interface improvementWork {
id?: string,
name: string,
currentStage: string,
content: string,
purpose: string,
dateStarted: Date,
unitId: string,
completed: boolean,
ongoing: boolean,
tasks: [],
// TODO Replace with userImprovementWork collection
members: [],
patientRiskLevel: string,
area: string,
p1: string,
p2: string,
p3: string,
p4: string,
p5: string,
p6: string,
p7: string,
g1: string,
g2: string,
g3: string,
g4: string,
g5: string,
s1: string,
s2: string,
s3: string,
a1: string,
a2: string,
a3: string,
a4: string,
}
async function createImprovementWork(
id: string,
id: string | null,
name: string,
currentStage: string,
content: string, // Är detta description bör detta förtydligas.
......@@ -132,7 +168,6 @@ async function createImprovementWork(
purpose: string, //Bör tas bort motsvaras av p2- mål med projektet
patientRiskLevel: string,
area: string,
// patientRiskLevel: "Green" | "Blue" | "Orange" | "Red"
//Questions in planning stage
p1: string,
p2: string,
......@@ -159,12 +194,9 @@ async function createImprovementWork(
): Promise<void> {
//ID has to be a string
try {
const improvementWorkRef = doc(improvementWorkCollection, id);
await setDoc(improvementWorkRef, {
id: improvementWorkRef.id,
currentStage: currentStage,
const improvementWorkData : improvementWork = {
name: name,
currentStage: currentStage,
content: content,
purpose: purpose,
dateStarted: new Date(),
......@@ -172,7 +204,7 @@ async function createImprovementWork(
completed: false,
ongoing: false,
tasks: [],
// TODO Replace with userImprovementWork collection
// TODO Remove members array
members: [],
patientRiskLevel: patientRiskLevel,
area: area,
......@@ -195,45 +227,21 @@ async function createImprovementWork(
a2: a2,
a3: a3,
a4: a4,
});
}
if (id) {
const improvementWorkRef = doc(improvementWorkCollection, id);
await setDoc(improvementWorkRef, {id: improvementWorkRef.id, ...improvementWorkData});
} else {
const improvementWorkRef = doc(improvementWorkCollection);
await setDoc(improvementWorkRef, improvementWorkData);
}
} catch (error) {
console.log("Error creating improvementWork: ", error);
throw error;
}
}
// Replace with userTask collection (OLD)
//adds a member to task
// takes in ID, the added members hsaId, task id as string and if person is responsible as boolean
// throws error if transaction failed
// async function addMemberToTask(
// userHsaId: string,
// taskId: string,
// isResponsibleFor: boolean
// ): Promise<void> {
// try {
// // Atomically add a member to task.
// const taskRef = doc(taskCollection, taskId);
// await updateDoc(taskRef, {
// members: arrayUnion({
// userHsaId: userHsaId,
// isResponsibleFor: isResponsibleFor,
// }),
// });
// // Atomically add a task to user.
// const userRef = doc(userCollection, userHsaId);
// await updateDoc(userRef, {
// tasks: arrayUnion({
// taskId: taskId,
// isResponsibleFor: isResponsibleFor,
// }),
// });
// } catch (error) {
// console.log("Error adding member: ", error);
// throw error;
// }
// }
async function addMemberToTask(
userHsaId: string,
taskId: string,
......@@ -262,7 +270,7 @@ async function addMemberToImprovementWork(
isResponsibleFor: boolean
): Promise<void> {
try {
const relationRef = doc(userImprovementWorkCollections);
const relationRef = doc(userImprovementWorkCollection);
await setDoc(relationRef, {
id: relationRef.id,
......@@ -277,51 +285,22 @@ async function addMemberToImprovementWork(
throw error;
}
}
// TODO Replace with userImprovementWork collection (OLD)
// add a member to a improvementWork
// takes in id, users HSAid, improvementWorks id as string and if is owner, is responsible as boolean
// throws error if transaction failed
// async function addMemberToImprovementWork(
// userHsaId: string,
// improvementWorkId: string,
// isOwner: boolean,
// isResponsibleFor: boolean
// ): Promise<void> {
// try {
// const improvementWorkRef = doc(
// improvementWorkCollection,
// improvementWorkId
// );
// // return;
// // Atomically update the members array in the improvementWork document
// await updateDoc(improvementWorkRef, {
// members: arrayUnion({
// userHsaId: userHsaId,
// isOwner: isOwner,
// isResponsibleFor: isResponsibleFor,
// }),
// });
// const userRef = doc(userCollection, userHsaId);
// // Atomically add improvementWork to user
// await updateDoc(userRef, {
// improvementWorks: arrayUnion({
// improvementWorkId: improvementWorkId,
// isOwner: isOwner,
// isResponsibleFor: isResponsibleFor,
// }),
// });
// } catch (error) {
// console.log("Error adding member: ", error);
// throw error;
// }
// }
//create task to improvementWork
// takes in improvementWorkId, name, deadline date, start date, stage in PDSA and content as string
// throws error if transaction failed
interface Task {
id?: string; // Optional because it can be auto-generated
improvementWorkId: string;
name: string;
deadlineDate: Date;
startDate: Date;
stage: string;
content: string;
members: string[]; // Assuming this is an array of user IDs
}
async function createTaskOnImprovementWork(
taskId: string,
taskId: string | null,
improvementWorkId: string,
name: string,
deadlineDate: Date,
......@@ -330,25 +309,24 @@ async function createTaskOnImprovementWork(
content: string
): Promise<void> {
try {
const ref = doc(taskCollection, taskId);
await setDoc(ref, {
id: ref.id,
improvementWorkId: improvementWorkId,
name: name,
deadlineDate: deadlineDate,
startDate: startDate,
stage: stage,
content: content,
members: [],
});
const improvementWorkRef = doc(
improvementWorkCollection,
improvementWorkId
);
// Atomically add task to the tasks array field.
await updateDoc(improvementWorkRef, {
tasks: arrayUnion(taskId),
});
const taskData: Task = {
improvementWorkId,
name,
deadlineDate,
startDate,
stage,
content,
members: [], // Initialize with an empty array
};
if (taskId) {
const taskRef = doc(taskCollection, taskId);
await setDoc(taskRef, {id: taskRef.id, ...taskData});
} else {
const taskRef = doc(taskCollection);
await setDoc(taskRef, taskData);
}
} catch (error) {
console.log("Error creating task: ", error);
throw error;
......@@ -405,17 +383,28 @@ async function addDocumentToImprovementWork(
//create a hospital
// takes in ID, name as string
// throws error if transaction failed
interface Hospital {
id?: string; // Optional because it can be auto-generated
name: string;
units: string[]; // Assuming this is an array of unit IDs
}
async function createHospital(
hospitalId: string, // should be auto?
hospitalId: string | null, // should be auto?
name: string
): Promise<void> {
try {
const ref = doc(hospitalCollection, hospitalId);
await setDoc(ref, {
id: ref.id,
name: name,
units: [],
});
const hospitalData : Hospital = {
name,
units: []
}
if (hospitalId) {
const hospitalRef = doc(hospitalCollection, hospitalId);
await setDoc(hospitalRef, {id: hospitalRef.id, ...hospitalData});
} else {
const hospitalRef = doc(hospitalCollection);
await setDoc(hospitalRef, hospitalData);
}
} catch (error) {
console.log("Error creating hospital: ", error);
throw error;
......@@ -425,24 +414,31 @@ async function createHospital(
//create a unit
// takes in id, hospitals id and name as string
// throws error if transaction failed
interface Unit {
id?: string; // Optional because it can be auto-generated
hospitalId: string;
name: string;
members: string[]; // Assuming this is an array of user IDs
}
async function createUnit(
unitId: string, //should be auto?
unitId: string | null, //should be auto?
hospitalId: string,
name: string
): Promise<void> {
try {
const unitRef = doc(unitCollection, unitId);
await setDoc(unitRef, {
id: unitRef.id,
hospitalId: hospitalId,
name: name,
members: [],
});
// Atomically add unit to hospital.
const hospitalRef = doc(hospitalCollection, hospitalId);
await updateDoc(hospitalRef, {
units: arrayUnion(unitRef.id),
});
const unitData : Unit = {
hospitalId,
name,
members: []
}
if (unitId) {
const unitRef = doc(unitCollection, unitId);
await setDoc(unitRef, {id: unitRef.id, ...unitData});
} else {
const unitRef = doc(unitCollection);
await setDoc(unitRef, unitData);
}
} catch (error) {
console.log("Error creating unit: ", error);
throw error;
......@@ -452,8 +448,25 @@ async function createUnit(
//creates a suggestion
// takes in ID, the creators hsaId, name, content and the responding unitId as string
// throws error if transaction failed
interface Suggestion {
id?: string; // Optional because it can be auto-generated
creatorHsaId: string;
name: string;
area: string;
content: string;
purpose: string;
measure: string;
ideas: string;
//need: boolean
unitId: string;
departmentId: string;
public: boolean;
upvotes: string[];
comments: Comment[];
dateCreated: Date;
}
async function createSuggestion(
id: string,
id: string | null,
creatorHsaId: string,
name: string,
area: string,
......@@ -467,27 +480,30 @@ async function createSuggestion(
isPublic: boolean
): Promise<void> {
try {
const suggestionRef = doc(suggestionCollection, id);
await setDoc(suggestionRef, {
id: suggestionRef.id,
creatorHsaId: creatorHsaId,
name: name,
area: area,
content: content,
purpose: purpose,
measure: measure,
ideas: ideas,
//need: need,
unitId: unitId,
departmentId: departmentId,
const suggestionData : Suggestion = {
creatorHsaId,
name,
area,
content,
purpose,
measure,
ideas,
//need,
unitId,
departmentId,
public: isPublic,
upvotes: [],
comments: [],
dateCreated: new Date(),
});
dateCreated: new Date()
}
const commentCollection = await collection(suggestionRef, "comment");
await doc(commentCollection);
if (id) {
const suggestionRef = doc(suggestionCollection, id);
await setDoc(suggestionRef, {id: suggestionRef.id, ...suggestionData});
} else {
const suggestionRef = doc(suggestionCollection);
await setDoc(suggestionRef, suggestionData);
}
} catch (error) {
console.log("Error creating suggestion: ", error);
throw error;
......@@ -640,7 +656,7 @@ async function getObjectById(
const docSnapshot = await getDoc(docRef);
if (docSnapshot.exists()) {
return docSnapshot.data();
return {id: docSnapshot.id, ...docSnapshot.data()};
} else {
console.warn(`No such document! ${collectionPath}/${documentId}`);
return null;
......@@ -893,6 +909,48 @@ async function getImprovementWorks({
}
}
async function getImprovementWorkOwner(improvementWorkId: string) {
try {
let constraints : any[] = [];
constraints.push(where("improvementWorkId", "==", improvementWorkId));
constraints.push(where("isOwner", "==", true));
const q = query(userImprovementWorkCollection, ...constraints);
const querySnapshot = await getDocs(q);
if (querySnapshot.empty) {
console.log("Improvement work ", improvementWorkId, " has no owner");
return null;
} else {
const owner = querySnapshot.docs[0].data().userHsaId;
return owner;
}
} catch (error) {
console.log(error);
}
}
async function getImprovementWorkResponsible(improvementWorkId: string) {
try {
let constraints : any[] = [];
constraints.push(where("improvementWorkId", "==", improvementWorkId));
constraints.push(where("isResponsibleFor", "==", true));
const q = query(userImprovementWorkCollection, ...constraints);
const querySnapshot = await getDocs(q);
if (querySnapshot.empty) {
console.log("Improvement work ", improvementWorkId, " has no responsible");
return null;
} else {
const responsible = querySnapshot.docs[0].data().userHsaId;
return responsible;
}
} catch (error) {
console.log(error);
}
}
// TODO getUsersForTask!
/**
......@@ -1084,7 +1142,7 @@ async function getImprovementWorksForUser(userHsaId: string): Promise<DocumentDa
try {
console.log("Getting improvementworks for user: ", userHsaId);
// Query the userImprovementWork collection for relations involving this user
const q = query(userImprovementWorkCollections, where('userHsaId', '==', userHsaId));
const q = query(userImprovementWorkCollection, where('userHsaId', '==', userHsaId));
const querySnapshot = await getDocs(q);
// Fetch each related improvementWork document
......@@ -1105,7 +1163,7 @@ async function getUsersForImprovementWork(improvementWorkId: string): Promise<Do
try {
console.log("Getting users for improvementwork: ", improvementWorkId);
// Query the userImprovementWork collection for relations involving this improvementWork
const q = query(userImprovementWorkCollections, where('improvementWorkId', '==', improvementWorkId));
const q = query(userImprovementWorkCollection, where('improvementWorkId', '==', improvementWorkId));
const querySnapshot = await getDocs(q);
// Fetch each related user document
......@@ -1137,6 +1195,8 @@ export {
getHospitals,
getImprovementWorksForUser,
getUsersForImprovementWork,
getImprovementWorkOwner,
getImprovementWorkResponsible,
};
////////////////////////////////////DELETING/////////////////////////////////////////////
......
......@@ -135,12 +135,14 @@ export async function submitHandler() {
var user = await getUsers({uid : uid});
console.log(user);
console.log(user[0].uid);
console.log(user[0].id);
console.log(user[0].creatorHsaId);
try {
if (user[0].uid) {
if (user[0].id) {
createSuggestion(
user[0].uid,
"<Department>",
null,
user[0].id, //The unique identifyer for the user, not the idea
nameInput,
areaInput,
contentInput,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment