Skip to content

Commit a334cda

Browse files
authored
Merge pull request #964 from OpenSignLabs/multiuser_issue
2 parents 95d2794 + 69d4254 commit a334cda

File tree

14 files changed

+422
-120
lines changed

14 files changed

+422
-120
lines changed

apps/OpenSign/public/static/js/public-template.bundle.js

Lines changed: 10 additions & 17 deletions
Large diffs are not rendered by default.

apps/OpenSign/src/components/AddTeam.js

Lines changed: 33 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,8 @@ const AddTeam = (props) => {
1717
const getTeamList = async () => {
1818
setIsLoader(true);
1919
try {
20-
const extUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
21-
const teamCls = new Parse.Query("contracts_Teams");
22-
teamCls.equalTo("OrganizationId", {
23-
__type: "Pointer",
24-
className: "contracts_Organizations",
25-
objectId: extUser.OrganizationId.objectId
26-
});
27-
teamCls.equalTo("IsActive", true);
28-
const teamRes = await teamCls.find();
20+
const teams = await Parse.Cloud.run("getteams");
21+
const teamRes = JSON.parse(JSON.stringify(teams));
2922
if (teamRes.length > 0) {
3023
const _teamRes = JSON.parse(JSON.stringify(teamRes));
3124
const allUsersteam = _teamRes.find((x) => x.Name === "All Users");
@@ -73,76 +66,47 @@ const AddTeam = (props) => {
7366
}
7467
}
7568
try {
76-
const localUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
7769
setIsLoader(true);
78-
const team = new Parse.Query("contracts_Teams");
79-
team.equalTo("Name", formdata.name);
70+
let data = { Name: formdata.name };
8071
if (updatedAncestors.length > 0) {
8172
const ParentId = updatedAncestors[updatedAncestors.length - 1];
82-
team.equalTo("ParentId", ParentId);
73+
data["ParentId"] = ParentId?.objectId;
74+
data["Ancestors"] = updatedAncestors;
8375
}
84-
if (localUser && localUser.OrganizationId) {
85-
team.equalTo("OrganizationId", {
86-
__type: "Pointer",
87-
className: "contracts_Organizations",
88-
objectId: localUser.OrganizationId.objectId
76+
const newTeamRes = await Parse.Cloud.run("addteam", data);
77+
// console.log("teamRes ", newTeamRes);
78+
if (updatedAncestors.length > 0) {
79+
const ParentId = teamList.find((x) => x.objectId === formdata.team);
80+
props.handleTeamInfo({
81+
objectId: newTeamRes.id,
82+
Name: formdata.name,
83+
ParentId: ParentId,
84+
Ancestors: updatedAncestors,
85+
IsActive: true
8986
});
90-
}
91-
const isTeam = await team.first();
92-
if (isTeam) {
93-
props.setIsAlert({ type: "info", msg: "Teams already exists." });
94-
setIsLoader(false);
9587
} else {
96-
const newTeam = new Parse.Object("contracts_Teams");
97-
newTeam.set("Name", formdata.name);
98-
if (updatedAncestors.length > 0) {
99-
const ParentId = updatedAncestors[updatedAncestors.length - 1];
100-
newTeam.set("ParentId", ParentId);
101-
newTeam.set("Ancestors", updatedAncestors);
102-
}
103-
if (localUser && localUser.OrganizationId) {
104-
newTeam.set("OrganizationId", {
105-
__type: "Pointer",
106-
className: "contracts_Organizations",
107-
objectId: localUser.OrganizationId.objectId
108-
});
109-
}
110-
newTeam.set("IsActive", true);
111-
const newTeamRes = await newTeam.save();
112-
if (updatedAncestors.length > 0) {
113-
const ParentId = teamList.find((x) => x.objectId === formdata.team);
114-
props.handleTeamInfo({
115-
objectId: newTeamRes.id,
116-
Name: formdata.name,
117-
ParentId: ParentId,
118-
Ancestors: updatedAncestors,
119-
IsActive: true
120-
});
121-
} else {
122-
props.handleTeamInfo({
123-
objectId: newTeamRes.id,
124-
Name: formdata.name,
125-
ParentId: "",
126-
Ancestors: "",
127-
IsActive: true
128-
});
129-
}
130-
131-
if (props.closePopup) {
132-
props.closePopup();
133-
}
134-
setFormdata({
135-
name: "",
136-
team: { name: "", objectId: "" }
137-
});
138-
props.setIsAlert({
139-
type: "success",
140-
msg: "Team created successfully."
88+
props.handleTeamInfo({
89+
objectId: newTeamRes.id,
90+
Name: formdata.name,
91+
ParentId: "",
92+
Ancestors: "",
93+
IsActive: true
14194
});
14295
}
96+
if (props.closePopup) {
97+
props.closePopup();
98+
}
99+
setFormdata({ name: "", team: { name: "", objectId: "" } });
100+
props.setIsAlert({ type: "success", msg: "Team created successfully." });
143101
} catch (err) {
144102
console.log("err in save team", err);
145-
props.setIsAlert({ type: "danger", msg: "Something went wrong." });
103+
if (err.code === 137) {
104+
props.setIsAlert({ type: "danger", msg: "Teams already exists." });
105+
} else if (err.code === 102) {
106+
props.setIsAlert({ type: "warning", msg: "Provide team name." });
107+
} else {
108+
props.setIsAlert({ type: "danger", msg: "Something went wrong." });
109+
}
146110
} finally {
147111
setTimeout(() => props.setIsAlert({ type: "success", msg: "" }), 1500);
148112
setIsLoader(false);

apps/OpenSign/src/constant/const.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ export const templateCls = "contracts_Template";
33
export const documentCls = "contracts_Document";
44
export const themeColor = "#47a3ad";
55
export const iconColor = "#686968";
6-
export const isEnableSubscription =
7-
process.env.REACT_APP_ENABLE_SUBSCRIPTION &&
8-
process.env.REACT_APP_ENABLE_SUBSCRIPTION?.toLowerCase() === "true"
9-
? true
10-
: false;
11-
export const isStaging =
12-
window.location.origin === "https://staging-app.opensignlabs.com";
6+
export const isEnableSubscription = true;
7+
// process.env.REACT_APP_ENABLE_SUBSCRIPTION &&
8+
// process.env.REACT_APP_ENABLE_SUBSCRIPTION?.toLowerCase() === "true"
9+
// ? true
10+
// : false;
11+
export const isStaging = "http://localhost:3001";
12+
// window.location.origin === "https://staging-app.opensignlabs.com";

apps/OpenSign/src/pages/TeamList.js

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,9 @@ const TeamList = () => {
113113
: false;
114114
setIsAdmin(admin);
115115
}
116-
const teamCls = new Parse.Query("contracts_Teams");
117-
teamCls.equalTo("OrganizationId", {
118-
__type: "Pointer",
119-
className: "contracts_Organizations",
120-
objectId: extUser.OrganizationId.objectId
121-
});
122-
teamCls.descending("createdAt");
123-
const teamRes = await teamCls.find();
124-
if (teamRes.length > 0) {
125-
const _teamRes = JSON.parse(JSON.stringify(teamRes));
116+
const teams = await Parse.Cloud.run("getteams");
117+
if (teams.length > 0) {
118+
const _teamRes = JSON.parse(JSON.stringify(teams));
126119
setTeamList(_teamRes);
127120
}
128121
} catch (err) {
@@ -169,10 +162,11 @@ const TeamList = () => {
169162
newArray[index] = { ...newArray[index], IsActive: !IsActive };
170163
setTeamList(newArray);
171164
try {
172-
const teamCls = new Parse.Object("contracts_Teams");
173-
teamCls.id = team.objectId;
174-
teamCls.set("IsActive", !IsActive);
175-
await teamCls.save();
165+
await Parse.Cloud.run("updateteam", {
166+
IsActive: !IsActive,
167+
TeamId: team.objectId
168+
});
169+
// console.log("teamRes ", teamRes);
176170
setIsAlert({
177171
type: !IsActive === false ? "danger" : "success",
178172
msg: !IsActive === false ? "Team disabled." : "Team enabled."
@@ -203,10 +197,9 @@ const TeamList = () => {
203197
setIsActLoader({ [team.objectId]: true });
204198
setIsEditModal({});
205199
try {
206-
const teamCls = new Parse.Object("contracts_Teams");
207-
teamCls.id = team?.objectId;
208-
teamCls.set("Name", team.Name);
209-
await teamCls.save();
200+
const data = { Name: team.Name, TeamId: team.objectId };
201+
await Parse.Cloud.run("updateteam", data);
202+
// console.log("updateTeamRes ", updateTeamRes);
210203
setIsAlert({ type: "success", msg: "Team Update successfully." });
211204
} catch (Err) {
212205
console.log("Err in update team name"), Err;

apps/OpenSign/src/primitives/GetReportDisplay.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,7 @@ const ReportTable = (props) => {
145145
try {
146146
const extUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
147147
if (extUser?.OrganizationId?.objectId) {
148-
const team = new Parse.Query("contracts_Teams");
149-
team.equalTo("OrganizationId", {
150-
__type: "Pointer",
151-
className: "contracts_Organizations",
152-
objectId: extUser.OrganizationId.objectId
153-
});
154-
team.notEqualTo("IsActive", false);
155-
const teamtRes = await team.find();
148+
const teamtRes = await Parse.Cloud.run("getteams");
156149
if (teamtRes.length > 0) {
157150
const _teamRes = JSON.parse(JSON.stringify(teamtRes));
158151
const formatedList = _teamRes.map((x) => ({

apps/OpenSignServer/cloud/main.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ import AddAdmin from './parsefunction/AddAdmin.js';
5252
import CheckAdminExist from './parsefunction/CheckAdminExist.js';
5353
import UpdateExistUserAsAdmin from './parsefunction/UpdateExistUserAsAdmin.js';
5454
import Newsletter from './parsefunction/Newsletter.js';
55+
import getOrganizations from './parsefunction/getOrganizations.js';
56+
import addOrganization from './parsefunction/addOrganization.js';
57+
import updateOrganization from './parsefunction/updateOrganization.js';
58+
import getTeams from './parsefunction/getTeams.js';
59+
import addTeam from './parsefunction/addTeam.js';
60+
import updateTeam from './parsefunction/updateTeam.js';
5561

5662
// This afterSave function triggers after an object is added or updated in the specified class, allowing for post-processing logic.
5763
Parse.Cloud.afterSave('contracts_Document', DocumentAftersave);
@@ -113,3 +119,9 @@ Parse.Cloud.define('addadmin', AddAdmin);
113119
Parse.Cloud.define('checkadminexist', CheckAdminExist);
114120
Parse.Cloud.define('updateuserasadmin', UpdateExistUserAsAdmin);
115121
Parse.Cloud.define('newsletter', Newsletter);
122+
Parse.Cloud.define('getorganizations', getOrganizations);
123+
Parse.Cloud.define('addorganization', addOrganization);
124+
Parse.Cloud.define('updateorganization', updateOrganization);
125+
Parse.Cloud.define('getteams', getTeams);
126+
Parse.Cloud.define('addteam', addTeam);
127+
Parse.Cloud.define('updateteam', updateTeam);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
export default async function addOrganization(request) {
2+
const name = request.params.name;
3+
4+
if (!request?.user) {
5+
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
6+
}
7+
try {
8+
const extUserQuery = new Parse.Query('contracts_Users');
9+
extUserQuery.equalTo('UserId', {
10+
__type: 'Pointer',
11+
className: '_User',
12+
objectId: request.user.id,
13+
});
14+
extUserQuery.notEqualTo('IsDisabled', true);
15+
const resExt = await extUserQuery.first({ useMasterKey: true });
16+
if (!resExt) {
17+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.');
18+
}
19+
const _resExt = JSON.parse(JSON.stringify(resExt));
20+
21+
const orgQuery = new Parse.Query('contracts_Organizations');
22+
orgQuery.equalTo('Name', name);
23+
orgQuery.equalTo('CreatedBy', {
24+
__type: 'Pointer',
25+
className: '_User',
26+
objectId: request.user.id,
27+
});
28+
const resOrg = await orgQuery.first({ useMasterKey: true });
29+
if (resOrg) {
30+
throw new Parse.Error(Parse.Error.DUPLICATE_VALUE, 'Organization already exists.');
31+
} else {
32+
const newOrg = new Parse.Object('contracts_Organizations');
33+
newOrg.set('Name', name);
34+
newOrg.set('IsActive', true);
35+
newOrg.set('CreatedBy', {
36+
__type: 'Pointer',
37+
className: '_User',
38+
objectId: request.user.id,
39+
});
40+
newOrg.set('TenantId', {
41+
__type: 'Pointer',
42+
className: 'partners_Tenant',
43+
objectId: _resExt.TenantId.objectId,
44+
});
45+
newOrg.set('ExtUserId', {
46+
__type: 'Pointer',
47+
className: 'contracts_Users',
48+
objectId: resExt.id,
49+
});
50+
const newResOrg = await newOrg.save(null, { useMasterKey: true });
51+
if (newResOrg) {
52+
return newResOrg;
53+
}
54+
}
55+
} catch (err) {
56+
console.log('err in addorganization', err);
57+
const code = err?.code || 400;
58+
const msg = err?.message || 'Something went wrong.';
59+
throw new Parse.Error(code, msg);
60+
}
61+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
export default async function addTeam(request) {
2+
const Name = request.params.Name;
3+
const ParentId = request.params.ParentId;
4+
const Ancestors = request.params.Ancestors;
5+
const ParentPtr = { __type: 'Pointer', className: 'contracts_Teams', objectId: ParentId };
6+
if (Name) {
7+
if (!request?.user) {
8+
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
9+
}
10+
try {
11+
const extUserQuery = new Parse.Query('contracts_Users');
12+
extUserQuery.equalTo('UserId', {
13+
__type: 'Pointer',
14+
className: '_User',
15+
objectId: request.user.id,
16+
});
17+
extUserQuery.notEqualTo('IsDisabled', true);
18+
const resExt = await extUserQuery.first({ useMasterKey: true });
19+
const extUser = JSON.parse(JSON.stringify(resExt));
20+
if (!extUser) {
21+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.');
22+
}
23+
const teamCls = new Parse.Query('contracts_Teams');
24+
teamCls.equalTo('Name', Name);
25+
teamCls.equalTo('OrganizationId', {
26+
__type: 'Pointer',
27+
className: 'contracts_Organizations',
28+
objectId: extUser.OrganizationId.objectId,
29+
});
30+
if (ParentId) {
31+
teamCls.equalTo('ParentId', ParentPtr);
32+
}
33+
const teamRes = await teamCls.first({ useMasterKey: true });
34+
if (teamRes) {
35+
throw new Parse.Error(Parse.Error.DUPLICATE_VALUE, 'Team already exists.');
36+
} else {
37+
const newteam = new Parse.Object('contracts_Teams');
38+
newteam.set('Name', Name);
39+
newteam.set('OrganizationId', {
40+
__type: 'Pointer',
41+
className: 'contracts_Organizations',
42+
objectId: extUser.OrganizationId.objectId,
43+
});
44+
if (ParentId) {
45+
newteam.set('ParentId', ParentPtr);
46+
}
47+
if (Ancestors && Ancestors.length > 0) {
48+
newteam.set('Ancestors', Ancestors);
49+
}
50+
newteam.set('IsActive', true);
51+
const newTeamRes = await newteam.save(null, { useMasterKey: true });
52+
return newTeamRes;
53+
}
54+
} catch (err) {
55+
console.log('err in getOrganizations', err);
56+
const code = err?.code || 400;
57+
const msg = err?.message || 'Something went wrong.';
58+
throw new Parse.Error(code, msg);
59+
}
60+
} else {
61+
throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Please provide parameters');
62+
}
63+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
export default async function getOrganizations(request) {
2+
const limit = request.params.limit || 200;
3+
const skip = request.params.skip || 0;
4+
const extUserId = request.params.extUserId;
5+
if (!request?.user) {
6+
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
7+
}
8+
try {
9+
const orgQuery = new Parse.Query('contracts_Organizations');
10+
orgQuery.equalTo('CreatedBy', {
11+
__type: 'Pointer',
12+
className: '_User',
13+
objectId: request.user.id,
14+
});
15+
orgQuery.equalTo('ExtUserId', {
16+
__type: 'Pointer',
17+
className: 'contracts_Users',
18+
objectId: extUserId,
19+
});
20+
orgQuery.equalTo('IsActive', true);
21+
orgQuery.exclude('ExtUserId');
22+
orgQuery.limit(limit);
23+
orgQuery.skip(skip);
24+
const resOrg = await orgQuery.find({ useMasterKey: true });
25+
if (resOrg && resOrg.length > 0) {
26+
return resOrg;
27+
} else {
28+
return [];
29+
}
30+
} catch (err) {
31+
console.log('err in getOrganizations', err);
32+
const code = err?.code || 400;
33+
const msg = err?.message || 'Something went wrong.';
34+
throw new Parse.Error(code, msg);
35+
}
36+
}

0 commit comments

Comments
 (0)