Fix some issues
This commit is contained in:
parent
6a8c4063e6
commit
6b09941e28
@ -4,6 +4,10 @@ import User from 'src/sdk/User';
|
||||
|
||||
import AbstractService from './AbstractService';
|
||||
|
||||
import OfficeService from './OfficeService';
|
||||
import RoleService from './RoleService';
|
||||
import OfficeRoleService from './OfficeRoleService';
|
||||
|
||||
export default class CollaboratorService extends AbstractService {
|
||||
|
||||
private constructor() {
|
||||
@ -89,11 +93,13 @@ export default class CollaboratorService extends AbstractService {
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false' &&
|
||||
!items.map((item: any) => item.processData.uid).includes(publicValues['uid'])
|
||||
).then((processes: any[]) => {
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
return items;
|
||||
} else {
|
||||
for (const process of processes) {
|
||||
for (let process of processes) {
|
||||
process = await this.completeCollaborator(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_collaborators_', process);
|
||||
|
||||
@ -104,10 +110,10 @@ export default class CollaboratorService extends AbstractService {
|
||||
});
|
||||
}
|
||||
|
||||
public static getCollaboratorByUid(uid: string): Promise<any> {
|
||||
public static getCollaboratorByUid(uid: string, forceRefresh: boolean = false): Promise<any> {
|
||||
// Check if we have valid cache
|
||||
const item: any = this.getItem('_collaborators_', uid);
|
||||
if (item) {
|
||||
if (item && !forceRefresh) {
|
||||
return Promise.resolve(item);
|
||||
}
|
||||
|
||||
@ -119,11 +125,12 @@ export default class CollaboratorService extends AbstractService {
|
||||
publicValues['utype'] === 'collaborator' &&
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false'
|
||||
).then((processes: any[]) => {
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
resolve(null);
|
||||
} else {
|
||||
const process: any = processes[0];
|
||||
let process: any = processes[0];
|
||||
process = await this.completeCollaborator(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_collaborators_', process);
|
||||
@ -143,10 +150,46 @@ export default class CollaboratorService extends AbstractService {
|
||||
const collaboratorUid: string = process.processData.uid;
|
||||
this.removeItem('_collaborators_', collaboratorUid);
|
||||
|
||||
this.getCollaboratorByUid(collaboratorUid).then(resolve).catch(reject);
|
||||
this.getCollaboratorByUid(collaboratorUid, true).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
private static async completeCollaborator(process: any): Promise<any> {
|
||||
if (process.processData.office) {
|
||||
const office: any = (await OfficeService.getOfficeByUid(process.processData.office.uid)).processData;
|
||||
process.processData.office = {
|
||||
uid: office.uid,
|
||||
idNot: office.idNot,
|
||||
crpcen: office.crpcen,
|
||||
office_status: office.office_status
|
||||
};
|
||||
}
|
||||
|
||||
if (process.processData.role) {
|
||||
const role: any = (await RoleService.getRoleByUid(process.processData.role.uid)).processData;
|
||||
process.processData.role = {
|
||||
uid: role.uid,
|
||||
name: role.name
|
||||
};
|
||||
}
|
||||
|
||||
if (process.processData.office_role) {
|
||||
const officeRole: any = (await OfficeRoleService.getOfficeRoleByUid(process.processData.office_role.uid)).processData;
|
||||
process.processData.office_role = {
|
||||
uid: officeRole.uid,
|
||||
name: officeRole.name,
|
||||
rules: officeRole.rules.map((rule: any) => {
|
||||
return {
|
||||
uid: rule.uid,
|
||||
name: rule.name
|
||||
};
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
return process;
|
||||
}
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ export default class CustomerService extends AbstractService {
|
||||
|
||||
public static getCustomers(): Promise<any[]> {
|
||||
// Check if we have valid cache
|
||||
const items: any[] = [];//this.getItems('_customers_');
|
||||
const items: any[] = this.getItems('_customers_');
|
||||
|
||||
return this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
@ -108,7 +108,7 @@ export default class CustomerService extends AbstractService {
|
||||
// Check if we have valid cache
|
||||
const item: any = this.getItem('_customers_', uid);
|
||||
if (item) {
|
||||
//return Promise.resolve(item);
|
||||
return Promise.resolve(item);
|
||||
}
|
||||
|
||||
return new Promise<any>((resolve: (process: any) => void, reject: (error: string) => void) => {
|
||||
|
@ -2,6 +2,7 @@ import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import MessageBus from 'src/sdk/MessageBus';
|
||||
import User from 'src/sdk/User';
|
||||
|
||||
import { FileData } from '../../../../front/Api/Entities/types';
|
||||
|
||||
export default class FileService {
|
||||
|
@ -4,6 +4,7 @@ import User from 'src/sdk/User';
|
||||
|
||||
import AbstractService from './AbstractService';
|
||||
import CustomerService from './CustomerService';
|
||||
import CollaboratorService from './CollaboratorService';
|
||||
import DeedTypeService from './DeedTypeService';
|
||||
import DocumentTypeService from './DocumentTypeService';
|
||||
import DocumentService from './DocumentService';
|
||||
@ -16,10 +17,6 @@ export default class FolderService extends AbstractService {
|
||||
super();
|
||||
}
|
||||
|
||||
public static invalidateCache(uid: string): void {
|
||||
this.removeItem('_folders_', uid);
|
||||
}
|
||||
|
||||
public static createFolder(folderData: any, stakeholdersId: string[], customersId: string[]): Promise<any> {
|
||||
const ownerId = User.getInstance().getPairingId()!;
|
||||
|
||||
@ -96,7 +93,7 @@ export default class FolderService extends AbstractService {
|
||||
|
||||
public static getFolders(): Promise<any[]> {
|
||||
// Check if we have valid cache
|
||||
const items: any[] = [];//this.getItems('_folders_');
|
||||
const items: any[] = this.getItems('_folders_');
|
||||
|
||||
return this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
@ -113,7 +110,7 @@ export default class FolderService extends AbstractService {
|
||||
process = await this.completeFolder(process);
|
||||
|
||||
// Update cache
|
||||
//this.setItem('_folders_', process);
|
||||
this.setItem('_folders_', process);
|
||||
|
||||
items.push(process);
|
||||
}
|
||||
@ -126,7 +123,7 @@ export default class FolderService extends AbstractService {
|
||||
// Check if we have valid cache
|
||||
const item: any = this.getItem('_folders_', uid);
|
||||
if (item) {
|
||||
//return Promise.resolve(item);
|
||||
return Promise.resolve(item);
|
||||
}
|
||||
|
||||
return new Promise<any>((resolve: (process: any) => void, reject: (error: string) => void) => {
|
||||
@ -145,7 +142,7 @@ export default class FolderService extends AbstractService {
|
||||
process = await this.completeFolder(process);
|
||||
|
||||
// Update cache
|
||||
//this.setItem('_folders_', process);
|
||||
this.setItem('_folders_', process);
|
||||
|
||||
resolve(process);
|
||||
}
|
||||
@ -160,15 +157,23 @@ export default class FolderService extends AbstractService {
|
||||
this.messageBus.notifyUpdate(process.processId, newStateId).then(() => {
|
||||
this.messageBus.validateState(process.processId, newStateId).then((_stateValidated) => {
|
||||
const folderUid: string = process.processData.uid;
|
||||
//this.removeItem('_folders_', folderUid);
|
||||
this.removeItem('_folders_', folderUid);
|
||||
|
||||
//this.getFolderByUid(folderUid).then(resolve).catch(reject);
|
||||
this.getFolderByUid(folderUid).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static refreshFolderByUid(uid: string): Promise<void> {
|
||||
return new Promise<void>((resolve: () => void, reject: (error: string) => void) => {
|
||||
this.getFolderByUid(uid).then((process: any) => {
|
||||
this.updateFolder(process, {}).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
private static async completeFolder(process: any): Promise<any> {
|
||||
if (process.processData.customers && process.processData.customers.length > 0) {
|
||||
process.processData.customers = await new Promise<any[]>(async (resolve: (customers: any[]) => void) => {
|
||||
@ -192,8 +197,7 @@ export default class FolderService extends AbstractService {
|
||||
if (document.files && document.files.length > 0) {
|
||||
const files: any[] = [];
|
||||
for (const file of document.files) {
|
||||
const p: any = await FileService.getFileByUid(file.uid);
|
||||
files.push({ uid: p.processData.uid, file_name: p.processData.file_name });
|
||||
files.push({ uid: file.uid, file_name: (await FileService.getFileByUid(file.uid)).processData.file_name });
|
||||
}
|
||||
document.files = files;
|
||||
}
|
||||
@ -202,6 +206,16 @@ export default class FolderService extends AbstractService {
|
||||
}
|
||||
}
|
||||
|
||||
if (process.processData.stakeholders && process.processData.stakeholders.length > 0) {
|
||||
process.processData.stakeholders = await new Promise<any[]>(async (resolve: (stakeholders: any[]) => void) => {
|
||||
const stakeholders: any[] = [];
|
||||
for (const stakeholder of process.processData.stakeholders) {
|
||||
stakeholders.push((await CollaboratorService.getCollaboratorByUid(stakeholder.uid)).processData);
|
||||
}
|
||||
resolve(stakeholders);
|
||||
});
|
||||
}
|
||||
|
||||
if (process.processData.deed && process.processData.deed.deed_type) {
|
||||
const deed_type: any = (await DeedTypeService.getDeedTypeByUid(process.processData.deed.deed_type.uid)).processData;
|
||||
process.processData.deed.deed_type = deed_type;
|
||||
|
98
src/common/Api/LeCoffreApi/sdk/OfficeRibService.ts
Normal file
98
src/common/Api/LeCoffreApi/sdk/OfficeRibService.ts
Normal file
@ -0,0 +1,98 @@
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import MessageBus from 'src/sdk/MessageBus';
|
||||
import User from 'src/sdk/User';
|
||||
|
||||
import { FileData } from '../../../../front/Api/Entities/types';
|
||||
|
||||
export default class OfficeRibService {
|
||||
|
||||
private static readonly messageBus: MessageBus = MessageBus.getInstance();
|
||||
|
||||
private constructor() { }
|
||||
|
||||
public static createOfficeRib(fileData: FileData, validatorId: string): Promise<any> {
|
||||
const ownerId = User.getInstance().getPairingId()!;
|
||||
|
||||
const processData: any = {
|
||||
uid: uuidv4(),
|
||||
utype: 'officeRib',
|
||||
isDeleted: 'false',
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
...fileData,
|
||||
};
|
||||
|
||||
const privateFields: string[] = Object.keys(processData);
|
||||
privateFields.splice(privateFields.indexOf('uid'), 1);
|
||||
privateFields.splice(privateFields.indexOf('utype'), 1);
|
||||
privateFields.splice(privateFields.indexOf('isDeleted'), 1);
|
||||
|
||||
const roles: any = {
|
||||
demiurge: {
|
||||
members: [...[ownerId], validatorId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
},
|
||||
owner: {
|
||||
members: [ownerId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: [...privateFields, 'roles', 'uid', 'utype'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
validator: {
|
||||
members: [validatorId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: ['idCertified', 'roles'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
{
|
||||
quorum: 0.0,
|
||||
fields: [...privateFields],
|
||||
min_sig_member: 0,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
apophis: {
|
||||
members: [ownerId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
}
|
||||
};
|
||||
|
||||
return new Promise<any>((resolve: (processCreated: any) => void, reject: (error: string) => void) => {
|
||||
this.messageBus.createProcess(processData, privateFields, roles).then((processCreated: any) => {
|
||||
this.messageBus.notifyUpdate(processCreated.processId, processCreated.process.states[0].state_id).then(() => {
|
||||
this.messageBus.validateState(processCreated.processId, processCreated.process.states[0].state_id).then((_stateValidated: any) => {
|
||||
resolve(processCreated);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static getOfficeRib(): Promise<any> {
|
||||
return this.messageBus.getFileByUtype('officeRib');
|
||||
}
|
||||
|
||||
public static updateOfficeRib(process: any, newData: any): Promise<void> {
|
||||
return new Promise<void>((resolve: () => void, reject: (error: string) => void) => {
|
||||
this.messageBus.updateProcess(process.processId, { updated_at: new Date().toISOString(), ...newData }, [], null).then((processUpdated: any) => {
|
||||
const newStateId: string = processUpdated.diffs[0]?.state_id;
|
||||
this.messageBus.notifyUpdate(process.processId, newStateId).then(() => {
|
||||
this.messageBus.validateState(process.processId, newStateId).then((_stateValidated) => {
|
||||
resolve();
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
}
|
179
src/common/Api/LeCoffreApi/sdk/OfficeRoleService.ts
Normal file
179
src/common/Api/LeCoffreApi/sdk/OfficeRoleService.ts
Normal file
@ -0,0 +1,179 @@
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import User from 'src/sdk/User';
|
||||
|
||||
import AbstractService from './AbstractService';
|
||||
|
||||
import OfficeService from './OfficeService';
|
||||
import RuleService from './RuleService';
|
||||
|
||||
export default class OfficeRoleService extends AbstractService {
|
||||
|
||||
private constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public static createOfficeRole(roleData: any, validatorId: string): Promise<any> {
|
||||
const ownerId = User.getInstance().getPairingId()!;
|
||||
|
||||
const processData: any = {
|
||||
uid: uuidv4(),
|
||||
utype: 'officeRole',
|
||||
isDeleted: 'false',
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
...roleData,
|
||||
};
|
||||
|
||||
const privateFields: string[] = Object.keys(processData);
|
||||
privateFields.splice(privateFields.indexOf('uid'), 1);
|
||||
privateFields.splice(privateFields.indexOf('utype'), 1);
|
||||
privateFields.splice(privateFields.indexOf('isDeleted'), 1);
|
||||
|
||||
const roles: any = {
|
||||
demiurge: {
|
||||
members: [...[ownerId], validatorId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
},
|
||||
owner: {
|
||||
members: [ownerId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: [...privateFields, 'roles', 'uid', 'utype'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
validator: {
|
||||
members: [validatorId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: ['idCertified', 'roles'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
{
|
||||
quorum: 0.0,
|
||||
fields: [...privateFields],
|
||||
min_sig_member: 0,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
apophis: {
|
||||
members: [ownerId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
}
|
||||
};
|
||||
|
||||
return new Promise<any>((resolve: (processCreated: any) => void, reject: (error: string) => void) => {
|
||||
this.messageBus.createProcess(processData, privateFields, roles).then((processCreated: any) => {
|
||||
this.messageBus.notifyUpdate(processCreated.processId, processCreated.process.states[0].state_id).then(() => {
|
||||
this.messageBus.validateState(processCreated.processId, processCreated.process.states[0].state_id).then((_stateValidated: any) => {
|
||||
this.getOfficeRoleByUid(processCreated.processData.uid).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static getOfficeRoles(): Promise<any[]> {
|
||||
// Check if we have valid cache
|
||||
const items: any[] = this.getItems('_office_roles_');
|
||||
|
||||
return this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
publicValues['utype'] &&
|
||||
publicValues['utype'] === 'officeRole' &&
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false' &&
|
||||
!items.map((item: any) => item.processData.uid).includes(publicValues['uid'])
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
return items;
|
||||
} else {
|
||||
for (let process of processes) {
|
||||
process = await this.completeOfficeRole(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_office_roles_', process);
|
||||
|
||||
items.push(process);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static getOfficeRoleByUid(uid: string): Promise<any> {
|
||||
// Check if we have valid cache
|
||||
const item: any = this.getItem('_office_roles_', uid);
|
||||
if (item) {
|
||||
return Promise.resolve(item);
|
||||
}
|
||||
|
||||
return new Promise<any>((resolve: (process: any) => void, reject: (error: string) => void) => {
|
||||
this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
publicValues['uid'] === uid &&
|
||||
publicValues['utype'] &&
|
||||
publicValues['utype'] === 'officeRole' &&
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false'
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
resolve(null);
|
||||
} else {
|
||||
let process: any = processes[0];
|
||||
process = await this.completeOfficeRole(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_office_roles_', process);
|
||||
|
||||
resolve(process);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static updateOfficeRole(process: any, newData: any): Promise<void> {
|
||||
return new Promise<void>((resolve: () => void, reject: (error: string) => void) => {
|
||||
this.messageBus.updateProcess(process.processId, { updated_at: new Date().toISOString(), ...newData }, [], null).then((processUpdated: any) => {
|
||||
const newStateId: string = processUpdated.diffs[0]?.state_id;
|
||||
this.messageBus.notifyUpdate(process.processId, newStateId).then(() => {
|
||||
this.messageBus.validateState(process.processId, newStateId).then((_stateValidated) => {
|
||||
const roleUid: string = process.processData.uid;
|
||||
this.removeItem('_office_roles_', roleUid);
|
||||
|
||||
this.getOfficeRoleByUid(roleUid).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
private static async completeOfficeRole(process: any): Promise<any> {
|
||||
if (process.processData.office) {
|
||||
process.processData.office = await new Promise<any>(async (resolve: (office: any) => void) => {
|
||||
const office: any = (await OfficeService.getOfficeByUid(process.processData.office.uid)).processData;
|
||||
resolve(office);
|
||||
});
|
||||
}
|
||||
|
||||
if (process.processData.rules && process.processData.rules.length > 0) {
|
||||
process.processData.rules = await new Promise<any[]>(async (resolve: (rules: any[]) => void) => {
|
||||
const rules: any[] = [];
|
||||
for (const rule of process.processData.rules) {
|
||||
rules.push((await RuleService.getRuleByUid(rule.uid)).processData);
|
||||
}
|
||||
resolve(rules);
|
||||
});
|
||||
}
|
||||
|
||||
return process;
|
||||
}
|
||||
}
|
@ -4,7 +4,6 @@ import User from 'src/sdk/User';
|
||||
|
||||
import AbstractService from './AbstractService';
|
||||
|
||||
import OfficeService from './OfficeService';
|
||||
import RuleService from './RuleService';
|
||||
|
||||
export default class RoleService extends AbstractService {
|
||||
@ -157,13 +156,7 @@ export default class RoleService extends AbstractService {
|
||||
}
|
||||
|
||||
private static async completeRole(process: any): Promise<any> {
|
||||
if (process.processData.office) {
|
||||
process.processData.office = await new Promise<any>(async (resolve: (office: any) => void) => {
|
||||
const office: any = (await OfficeService.getOfficeByUid(process.processData.office.uid)).processData;
|
||||
resolve(office);
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
if (process.processData.rules && process.processData.rules.length > 0) {
|
||||
process.processData.rules = await new Promise<any[]>(async (resolve: (rules: any[]) => void) => {
|
||||
const rules: any[] = [];
|
||||
@ -173,6 +166,7 @@ export default class RoleService extends AbstractService {
|
||||
resolve(rules);
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
return process;
|
||||
}
|
||||
|
171
src/common/Api/LeCoffreApi/sdk/RuleGroupService.ts
Normal file
171
src/common/Api/LeCoffreApi/sdk/RuleGroupService.ts
Normal file
@ -0,0 +1,171 @@
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import User from 'src/sdk/User';
|
||||
|
||||
import AbstractService from './AbstractService';
|
||||
|
||||
import RuleService from './RuleService';
|
||||
|
||||
export default class RuleGroupService extends AbstractService {
|
||||
|
||||
private constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
public static createRuleGroup(ruleGroupData: any, validatorId: string): Promise<any> {
|
||||
const ownerId = User.getInstance().getPairingId()!;
|
||||
|
||||
const processData: any = {
|
||||
uid: uuidv4(),
|
||||
utype: 'ruleGroup',
|
||||
isDeleted: 'false',
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
...ruleGroupData,
|
||||
};
|
||||
|
||||
const privateFields: string[] = Object.keys(processData);
|
||||
privateFields.splice(privateFields.indexOf('uid'), 1);
|
||||
privateFields.splice(privateFields.indexOf('utype'), 1);
|
||||
privateFields.splice(privateFields.indexOf('isDeleted'), 1);
|
||||
|
||||
const roles: any = {
|
||||
demiurge: {
|
||||
members: [...[ownerId], validatorId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
},
|
||||
owner: {
|
||||
members: [ownerId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: [...privateFields, 'roles', 'uid', 'utype'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
validator: {
|
||||
members: [validatorId],
|
||||
validation_rules: [
|
||||
{
|
||||
quorum: 0.5,
|
||||
fields: ['idCertified', 'roles'],
|
||||
min_sig_member: 1,
|
||||
},
|
||||
{
|
||||
quorum: 0.0,
|
||||
fields: [...privateFields],
|
||||
min_sig_member: 0,
|
||||
},
|
||||
],
|
||||
storages: []
|
||||
},
|
||||
apophis: {
|
||||
members: [ownerId],
|
||||
validation_rules: [],
|
||||
storages: []
|
||||
}
|
||||
};
|
||||
|
||||
return new Promise<any>((resolve: (processCreated: any) => void, reject: (error: string) => void) => {
|
||||
this.messageBus.createProcess(processData, privateFields, roles).then((processCreated: any) => {
|
||||
this.messageBus.notifyUpdate(processCreated.processId, processCreated.process.states[0].state_id).then(() => {
|
||||
this.messageBus.validateState(processCreated.processId, processCreated.process.states[0].state_id).then((_stateValidated: any) => {
|
||||
this.getRuleGroupByUid(processCreated.processData.uid).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static getRuleGroups(): Promise<any[]> {
|
||||
// Check if we have valid cache
|
||||
const items: any[] = this.getItems('_rule_groups_');
|
||||
|
||||
return this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
publicValues['utype'] &&
|
||||
publicValues['utype'] === 'ruleGroup' &&
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false' &&
|
||||
!items.map((item: any) => item.processData.uid).includes(publicValues['uid'])
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
return items;
|
||||
} else {
|
||||
for (let process of processes) {
|
||||
process = await this.completeRuleGroup(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_rule_groups_', process);
|
||||
|
||||
items.push(process);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static getRuleGroupByUid(uid: string): Promise<any> {
|
||||
// Check if we have valid cache
|
||||
const item: any = this.getItem('_rule_groups_', uid);
|
||||
if (item) {
|
||||
return Promise.resolve(item);
|
||||
}
|
||||
|
||||
return new Promise<any>((resolve: (process: any) => void, reject: (error: string) => void) => {
|
||||
this.messageBus.getProcessesDecoded((publicValues: any) =>
|
||||
publicValues['uid'] &&
|
||||
publicValues['uid'] === uid &&
|
||||
publicValues['utype'] &&
|
||||
publicValues['utype'] === 'ruleGroup' &&
|
||||
publicValues['isDeleted'] &&
|
||||
publicValues['isDeleted'] === 'false'
|
||||
).then(async (processes: any[]) => {
|
||||
if (processes.length === 0) {
|
||||
resolve(null);
|
||||
} else {
|
||||
let process: any = processes[0];
|
||||
process = await this.completeRuleGroup(process);
|
||||
|
||||
// Update cache
|
||||
this.setItem('_rule_groups_', process);
|
||||
|
||||
resolve(process);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public static updateRuleGroup(process: any, newData: any): Promise<void> {
|
||||
return new Promise<void>((resolve: () => void, reject: (error: string) => void) => {
|
||||
this.messageBus.updateProcess(process.processId, { updated_at: new Date().toISOString(), ...newData }, [], null).then((processUpdated: any) => {
|
||||
const newStateId: string = processUpdated.diffs[0]?.state_id;
|
||||
this.messageBus.notifyUpdate(process.processId, newStateId).then(() => {
|
||||
this.messageBus.validateState(process.processId, newStateId).then((_stateValidated) => {
|
||||
const ruleUid: string = process.processData.uid;
|
||||
this.removeItem('_rule_groups_', ruleUid);
|
||||
|
||||
this.getRuleGroupByUid(ruleUid).then(resolve).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
private static async completeRuleGroup(process: any): Promise<any> {
|
||||
if (process.processData.rules && process.processData.rules.length > 0) {
|
||||
process.processData.rules = await new Promise<any[]>(async (resolve: (rules: any[]) => void) => {
|
||||
const rules: any[] = [];
|
||||
for (const rule of process.processData.rules) {
|
||||
rules.push((await RuleService.getRuleByUid(rule.uid)).processData);
|
||||
}
|
||||
resolve(rules);
|
||||
});
|
||||
}
|
||||
|
||||
return process;
|
||||
}
|
||||
}
|
@ -56,7 +56,7 @@ export default abstract class BaseApiService {
|
||||
}
|
||||
|
||||
protected async postRequest<T>(url: URL, body: { [key: string]: unknown } = {}, token?: string) {
|
||||
await this.checkJwtToken();
|
||||
//await this.checkJwtToken();
|
||||
return this.sendRequest<T>(
|
||||
async () =>
|
||||
await fetch(url, {
|
||||
|
@ -89,9 +89,14 @@ export default class Customers extends BaseNotary {
|
||||
}
|
||||
|
||||
public async sendReminder(uid: string, documentsUid: string[]): Promise<void> {
|
||||
const url = new URL(this.baseURl.concat(`/${uid}/send_reminder`));
|
||||
// TODO: review
|
||||
const baseBackUrl = 'http://localhost:8080';//variables.BACK_API_PROTOCOL + variables.BACK_API_HOST;
|
||||
|
||||
const url = new URL(`${baseBackUrl}/api/${uid}/send_reminder`);
|
||||
|
||||
//const url = new URL(this.baseURl.concat(`/${uid}/send_reminder`));
|
||||
try {
|
||||
await this.postRequest<void>(url, { documentsUid });
|
||||
await this.postRequest<void>(url, { email: 'ja.janin.anthony@gmail.com', documentsUid });
|
||||
} catch (err) {
|
||||
this.onError(err);
|
||||
return Promise.reject(err);
|
||||
|
@ -20,6 +20,7 @@ import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
|
||||
import FileService from "src/common/Api/LeCoffreApi/sdk/FileService";
|
||||
import CustomerService from "src/common/Api/LeCoffreApi/sdk/CustomerService";
|
||||
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
|
||||
|
||||
type IProps = {
|
||||
onChange?: (files: File[]) => void;
|
||||
@ -257,7 +258,7 @@ export default class DepositOtherDocument extends React.Component<IProps, IState
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
const fileName: string = `${file.name.split('.')[0]}-${strDate}.${file.name.split('.').pop()}`;
|
||||
const fileName: string = `${file.name.split('.')[0]}_${strDate}.${file.name.split('.').pop()}`;
|
||||
|
||||
const arrayBuffer: ArrayBuffer = event.target.result as ArrayBuffer;
|
||||
const uint8Array: Uint8Array = new Uint8Array(arrayBuffer);
|
||||
@ -286,7 +287,9 @@ export default class DepositOtherDocument extends React.Component<IProps, IState
|
||||
}
|
||||
files.push({ uid: fileUid });
|
||||
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => resolve());
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => {
|
||||
FolderService.refreshFolderByUid(document.folder.uid).then(() => resolve());
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -4,6 +4,8 @@ import { IAppRule } from "@Front/Api/Entities/rule";
|
||||
import { useRouter } from "next/router";
|
||||
import Module from "@Front/Config/Module";
|
||||
|
||||
import UserStore from "@Front/Stores/UserStore";
|
||||
|
||||
export enum RulesMode {
|
||||
OPTIONAL = "optional",
|
||||
NECESSARY = "necessary",
|
||||
@ -23,9 +25,13 @@ export default function Rules(props: IProps) {
|
||||
// const [hasJwt, setHasJwt] = React.useState(false);
|
||||
|
||||
const getShowValue = useCallback(() => {
|
||||
//const user: any = UserStore.instance.getUser();
|
||||
if (props.mode === RulesMode.NECESSARY) {
|
||||
//return user.isAdmin && user.isAdmin === 'true';
|
||||
return props.rules.every((rule) => JwtService.getInstance().hasRule(rule.name, rule.action));
|
||||
}
|
||||
//const ruleNames: string[] = props.rules.map((rule: any) => rule.name);
|
||||
//return user.role.rules.map((rule: any) => rule.name).filter((ruleName: string) => ruleNames.includes(ruleName)).length > 0;
|
||||
return props.rules.length === 0 || !!props.rules.find((rule) => JwtService.getInstance().hasRule(rule.name, rule.action));
|
||||
}, [props.mode, props.rules]);
|
||||
|
||||
|
@ -7,7 +7,7 @@ import DefaultDashboardWithList, { IPropsDashboardWithList } from "../DefaultDas
|
||||
|
||||
import UserStore from "@Front/Stores/UserStore";
|
||||
|
||||
import RoleService from "src/common/Api/LeCoffreApi/sdk/RoleService";
|
||||
import OfficeRoleService from "src/common/Api/LeCoffreApi/sdk/OfficeRoleService";
|
||||
|
||||
type IProps = IPropsDashboardWithList;
|
||||
|
||||
@ -28,17 +28,17 @@ export default function DefaultRoleDashboard(props: IProps) {
|
||||
return;
|
||||
}
|
||||
|
||||
RoleService.getRoles().then(async (processes: any[]) => {
|
||||
OfficeRoleService.getOfficeRoles().then(async (processes: any[]) => {
|
||||
if (processes.length > 0) {
|
||||
let roles: any[] = processes.map((process: any) => process.processData);
|
||||
let officeRoles: any[] = processes.map((process: any) => process.processData);
|
||||
|
||||
// FilterBy office.uid
|
||||
roles = roles.filter((role: any) => role.office.uid === office.uid);
|
||||
officeRoles = officeRoles.filter((officeRole: any) => officeRole.office.uid === office.uid);
|
||||
|
||||
// OrderBy label
|
||||
roles = roles.sort((a: any, b: any) => a.label.localeCompare(b.label));
|
||||
// OrderBy name
|
||||
officeRoles = officeRoles.sort((a: any, b: any) => a.name.localeCompare(b.name));
|
||||
|
||||
setRoles(roles);
|
||||
setRoles(officeRoles);
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
@ -55,7 +55,7 @@ export default function DefaultRoleDashboard(props: IProps) {
|
||||
roles
|
||||
? roles.map((role) => ({
|
||||
id: role.uid!,
|
||||
primaryText: role.label,
|
||||
primaryText: role.name,
|
||||
isActive: role.uid === roleUid,
|
||||
}))
|
||||
: []
|
||||
|
@ -3,10 +3,11 @@ import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Ty
|
||||
import { ArrowDownTrayIcon } from "@heroicons/react/24/outline";
|
||||
import Customer from "le-coffre-resources/dist/Customer";
|
||||
import { OfficeFolder as OfficeFolderNotary } from "le-coffre-resources/dist/Notary";
|
||||
import { useCallback, useEffect, useMemo } from "react";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
|
||||
import classes from "./classes.module.scss";
|
||||
// import OfficeRib from "@Front/Api/LeCoffreApi/Customer/OfficeRib/OfficeRib";
|
||||
|
||||
import OfficeRibService from "src/common/Api/LeCoffreApi/sdk/OfficeRibService";
|
||||
|
||||
type IProps = {
|
||||
folder: OfficeFolderNotary;
|
||||
@ -16,23 +17,10 @@ type IProps = {
|
||||
export default function ContactBox(props: IProps) {
|
||||
const { folder, customer } = props;
|
||||
|
||||
// const [ribUrl, setRibUrl] = useState<string | null>(null);
|
||||
const ribUrl = null;
|
||||
|
||||
// TODO: review
|
||||
const stakeholder = {
|
||||
cell_phone_number: "0606060606",
|
||||
phone_number: "0606060606",
|
||||
email: "test@lecoffre.fr",
|
||||
};
|
||||
const [ribUrl, setRibUrl] = useState<string | null>(null);
|
||||
|
||||
const notaryContact = useMemo(
|
||||
() =>
|
||||
/*folder?.stakeholders!.find((stakeholder) => stakeholder.office_role?.name === "Notaire")?.contact ??
|
||||
folder?.stakeholders![0]!.contact*/
|
||||
|
||||
// TODO: review
|
||||
stakeholder,
|
||||
() => folder?.stakeholders!.find((stakeholder) => stakeholder.office_role?.name === "Notaire")?.contact ?? folder?.stakeholders![0]!.contact,
|
||||
[folder],
|
||||
);
|
||||
|
||||
@ -48,11 +36,13 @@ export default function ContactBox(props: IProps) {
|
||||
|
||||
useEffect(() => {
|
||||
if (!folder?.office?.uid) return;
|
||||
/* TODO: review
|
||||
OfficeRib.getInstance()
|
||||
.getRibStream(folder.office.uid)
|
||||
.then((blob) => setRibUrl(URL.createObjectURL(blob)));
|
||||
*/
|
||||
OfficeRibService.getOfficeRib().then((process: any) => {
|
||||
if (process) {
|
||||
const officeRib: any = process.processData;
|
||||
const fileBlob: Blob = new Blob([officeRib.file_blob.data], { type: officeRib.file_blob.type });
|
||||
setRibUrl(URL.createObjectURL(fileBlob));
|
||||
}
|
||||
});
|
||||
}, [folder]);
|
||||
|
||||
const downloadRib = useCallback(async () => {
|
||||
|
@ -48,7 +48,7 @@ export default function DepositDocumentComponent(props: IProps) {
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
const fileName: string = `${document.document_type.name}-${customer.contact.last_name}-${strDate}.${file.name.split('.').pop()}`;
|
||||
const fileName: string = `${document.document_type.name}-${customer.contact.last_name}_${strDate}.${file.name.split('.').pop()}`;
|
||||
|
||||
const arrayBuffer: ArrayBuffer = event.target.result as ArrayBuffer;
|
||||
const uint8Array: Uint8Array = new Uint8Array(arrayBuffer);
|
||||
@ -70,7 +70,6 @@ export default function DepositDocumentComponent(props: IProps) {
|
||||
DocumentService.getDocumentByUid(document.uid!).then((process: any) => {
|
||||
if (process) {
|
||||
const document: any = process.processData;
|
||||
FolderService.invalidateCache(document.folder.uid);
|
||||
|
||||
let files: any[] = document.files;
|
||||
if (!files) {
|
||||
@ -78,7 +77,9 @@ export default function DepositDocumentComponent(props: IProps) {
|
||||
}
|
||||
files.push({ uid: fileUid });
|
||||
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => resolve());
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => {
|
||||
FolderService.refreshFolderByUid(document.folder.uid).then(() => resolve());
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -100,7 +101,7 @@ export default function DepositDocumentComponent(props: IProps) {
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
const fileName: string = `${document.document_type.name}-${customer.contact.last_name}-${strDate}.${file.name.split('.').pop()}`;
|
||||
const fileName: string = `${document.document_type.name}-${customer.contact.last_name}_${strDate}.${file.name.split('.').pop()}`;
|
||||
|
||||
const arrayBuffer: ArrayBuffer = event.target.result as ArrayBuffer;
|
||||
const uint8Array: Uint8Array = new Uint8Array(arrayBuffer);
|
||||
@ -129,7 +130,9 @@ export default function DepositDocumentComponent(props: IProps) {
|
||||
}
|
||||
files.push({ uid: fileUid });
|
||||
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => resolve());
|
||||
DocumentService.updateDocument(process, { files: files, document_status: EDocumentStatus.DEPOSITED }).then(() => {
|
||||
FolderService.refreshFolderByUid(document.folder.uid).then(() => resolve());
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -1,14 +1,10 @@
|
||||
import { ChevronLeftIcon } from "@heroicons/react/24/solid";
|
||||
import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
|
||||
import Roles from "@Front/Api/LeCoffreApi/Admin/Roles/Roles";
|
||||
import Users from "@Front/Api/LeCoffreApi/Admin/Users/Users";
|
||||
import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm";
|
||||
import Switch from "@Front/Components/DesignSystem/Switch";
|
||||
import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard";
|
||||
import Module from "@Front/Config/Module";
|
||||
import User, { OfficeRole } from "le-coffre-resources/dist/Admin";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/router";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
@ -18,7 +14,9 @@ import { IOption } from "@Front/Components/DesignSystem/Dropdown/DropdownMenu/Dr
|
||||
import { getLabel } from "@Front/Components/DesignSystem/Dropdown";
|
||||
import SelectField from "@Front/Components/DesignSystem/Form/SelectField";
|
||||
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import CollaboratorService from "src/common/Api/LeCoffreApi/sdk/CollaboratorService";
|
||||
import OfficeRoleService from "src/common/Api/LeCoffreApi/sdk/OfficeRoleService";
|
||||
import RoleService from "src/common/Api/LeCoffreApi/sdk/RoleService";
|
||||
|
||||
type IProps = {};
|
||||
@ -26,7 +24,7 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
const router = useRouter();
|
||||
let { collaboratorUid } = router.query;
|
||||
|
||||
const [userSelected, setUserSelected] = useState<User | null>(null);
|
||||
const [userSelected, setUserSelected] = useState<any | null>(null);
|
||||
const [availableRoles, setAvailableRoles] = useState<IOption[]>([]);
|
||||
|
||||
const [roleModalOpened, setRoleModalOpened] = useState<boolean>(false);
|
||||
@ -38,7 +36,7 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
|
||||
useEffect(() => {
|
||||
if (!userSelected) return;
|
||||
setIsAdminChecked(userSelected.role?.name === "admin");
|
||||
setIsAdminChecked(userSelected.role.name === "admin");
|
||||
}, [userSelected]);
|
||||
|
||||
const handleRoleChange = useCallback((option: IOption) => {
|
||||
@ -49,60 +47,54 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
const closeRoleModal = useCallback(() => {
|
||||
setRoleModalOpened(false);
|
||||
setSelectedOption({
|
||||
id: (userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid) ?? "",
|
||||
label: userSelected?.office_role ? userSelected?.office_role?.name : "Utilisateur restreint",
|
||||
id: userSelected?.role?.uid ?? "",
|
||||
label: userSelected?.role?.name ?? "Utilisateur restreint"
|
||||
});
|
||||
}, [userSelected?.office_role, userSelected?.role?.uid]);
|
||||
}, [userSelected?.role]);
|
||||
|
||||
const changeRole = useCallback(async () => {
|
||||
await Users.getInstance().put(
|
||||
userSelected?.uid as string,
|
||||
User.hydrate<User>({
|
||||
uid: userSelected?.uid as string,
|
||||
office_role: OfficeRole.hydrate<OfficeRole>({
|
||||
uid: selectedOption?.id as string,
|
||||
}),
|
||||
}),
|
||||
);
|
||||
setRoleModalOpened(false);
|
||||
LoaderService.getInstance().show();
|
||||
CollaboratorService.getCollaboratorByUid(collaboratorUid as string).then((process: any) => {
|
||||
if (process) {
|
||||
CollaboratorService.updateCollaborator(process, { office_role: { uid: selectedOption?.id as string } }).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
setRoleModalOpened(false);
|
||||
});
|
||||
}
|
||||
});
|
||||
}, [selectedOption, userSelected]);
|
||||
|
||||
const changeAdmin = useCallback(async () => {
|
||||
try {
|
||||
if (adminRoleType === "add") {
|
||||
const adminRole = await Roles.getInstance().getOne({
|
||||
where: {
|
||||
name: "admin",
|
||||
},
|
||||
});
|
||||
LoaderService.getInstance().show();
|
||||
CollaboratorService.getCollaboratorByUid(collaboratorUid as string).then(async (process: any) => {
|
||||
if (process) {
|
||||
const role: any = (await RoleService.getRoles())
|
||||
.map((process: any) => process.processData)
|
||||
.filter((role: any) => role.name === "admin")[0];
|
||||
|
||||
if (!adminRole) return;
|
||||
await Users.getInstance().put(
|
||||
userSelected?.uid as string,
|
||||
User.hydrate<User>({
|
||||
uid: userSelected?.uid as string,
|
||||
office_role: undefined,
|
||||
role: adminRole,
|
||||
}),
|
||||
);
|
||||
CollaboratorService.updateCollaborator(process, { role: { uid: role.uid } }).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
setAdminModalOpened(false);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
const defaultRole = await Roles.getInstance().getOne({
|
||||
where: {
|
||||
name: "default",
|
||||
},
|
||||
});
|
||||
LoaderService.getInstance().show();
|
||||
CollaboratorService.getCollaboratorByUid(collaboratorUid as string).then(async (process: any) => {
|
||||
if (process) {
|
||||
const role: any = (await RoleService.getRoles())
|
||||
.map((process: any) => process.processData)
|
||||
.filter((role: any) => role.name === "default")[0];
|
||||
|
||||
if (!defaultRole) return;
|
||||
await Users.getInstance().put(
|
||||
userSelected?.uid as string,
|
||||
User.hydrate<User>({
|
||||
uid: userSelected?.uid as string,
|
||||
office_role: undefined,
|
||||
role: defaultRole,
|
||||
}),
|
||||
);
|
||||
CollaboratorService.updateCollaborator(process, { role: { uid: role.uid } }).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
setAdminModalOpened(false);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
setAdminModalOpened(false);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
@ -116,62 +108,29 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
}, []);
|
||||
|
||||
const closeAdminModal = useCallback(() => {
|
||||
setIsAdminChecked(userSelected?.role?.name === "admin" && !userSelected.office_role);
|
||||
setIsAdminChecked(userSelected?.role.name === "admin");
|
||||
setAdminModalOpened(false);
|
||||
}, [userSelected]);
|
||||
|
||||
useEffect(() => {
|
||||
async function getUser() {
|
||||
if (!collaboratorUid) return;
|
||||
|
||||
LoaderService.getInstance().show();
|
||||
CollaboratorService.getCollaboratorByUid(collaboratorUid as string).then(async (process: any) => {
|
||||
if (process) {
|
||||
const collaborator: any = process.processData;
|
||||
|
||||
const roles: any[] = await new Promise<any[]>((resolve: (roles: any[]) => void) => {
|
||||
RoleService.getRoles().then((processes: any[]) => {
|
||||
if (processes.length > 0) {
|
||||
const roles: any[] = processes.map((process: any) => process.processData);
|
||||
resolve(roles);
|
||||
}
|
||||
});
|
||||
});
|
||||
setAvailableRoles(roles.map((role) => ({ id: role.uid ?? "", label: role.label })));
|
||||
const officeRoles: any[] = (await OfficeRoleService.getOfficeRoles())
|
||||
.map((process: any) => process.processData);
|
||||
|
||||
setUserSelected(collaborator);
|
||||
setSelectedOption({
|
||||
id: (collaborator?.office_role ? collaborator?.office_role?.uid : collaborator?.role?.uid) ?? "",
|
||||
label: collaborator?.office_role ? collaborator?.office_role?.label : "Utilisateur restreint",
|
||||
});
|
||||
setAvailableRoles(officeRoles.map((officeRole: any) => ({ id: officeRole.uid, label: officeRole.name })));
|
||||
setSelectedOption({ id: collaborator.office_role.uid, label: collaborator.office_role.name });
|
||||
|
||||
LoaderService.getInstance().hide();
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
const user = await Users.getInstance().getByUid(collaboratorUid as string, {
|
||||
q: {
|
||||
contact: true,
|
||||
office_role: true,
|
||||
role: true,
|
||||
seats: {
|
||||
include: {
|
||||
subscription: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!user) return;
|
||||
|
||||
const roles = await OfficeRoles.getInstance().get();
|
||||
if (!roles) return;
|
||||
setAvailableRoles(roles.map((role) => ({ id: role.uid ?? "", label: role.name })));
|
||||
setUserSelected(user);
|
||||
setSelectedOption({
|
||||
id: (user?.office_role ? user?.office_role?.uid : user?.role?.uid) ?? "",
|
||||
label: user?.office_role ? user?.office_role?.name : "Utilisateur restreint",
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
getUser();
|
||||
}, [collaboratorUid]);
|
||||
|
||||
@ -182,7 +141,7 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
<Typography typo={ETypo.TITLE_H1}>
|
||||
{userSelected?.contact?.first_name + " " + userSelected?.contact?.last_name}
|
||||
</Typography>
|
||||
{userSelected && userSelected.seats?.some((seat) => new Date(seat.subscription!.end_date) >= new Date()) && (
|
||||
{userSelected && userSelected.seats?.some((seat: any) => new Date(seat.subscription!.end_date) >= new Date()) && (
|
||||
<div className={classes["subscription-active"]}>
|
||||
<div className={classes["subscription-active-dot"]} />
|
||||
<Typography typo={ETypo.TEXT_LG_REGULAR} color={ETypoColor.COLOR_SUCCESS_600}>
|
||||
|
@ -82,11 +82,15 @@ export default function AskDocuments() {
|
||||
|
||||
await DocumentService.createDocument(documentData, validatorId);
|
||||
}
|
||||
router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string),
|
||||
);
|
||||
|
||||
FolderService.refreshFolderByUid(folderUid as string).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", folderUid as string),
|
||||
);
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
@ -11,7 +11,6 @@ import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Ty
|
||||
import { ToasterService } from "@Front/Components/DesignSystem/Toaster";
|
||||
import BackArrow from "@Front/Components/Elements/BackArrow";
|
||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||
import JwtService from "@Front/Services/JwtService/JwtService";
|
||||
import { ValidationError } from "class-validator/types/validation/ValidationError";
|
||||
import { Deed, Office, OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import User from "le-coffre-resources/dist/Notary";
|
||||
@ -21,9 +20,12 @@ import { useRouter } from "next/router";
|
||||
import React, { useCallback, useEffect, useState } from "react";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
import UserStore from "@Front/Stores/UserStore";
|
||||
|
||||
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
|
||||
import DeedTypeService from "src/common/Api/LeCoffreApi/sdk/DeedTypeService";
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import CollaboratorService from "src/common/Api/LeCoffreApi/sdk/CollaboratorService";
|
||||
|
||||
export default function CreateFolder(): JSX.Element {
|
||||
/**
|
||||
@ -50,9 +52,8 @@ export default function CreateFolder(): JSX.Element {
|
||||
[key: string]: any;
|
||||
},
|
||||
) => {
|
||||
// TODO: review
|
||||
console.log(JwtService.getInstance().decodeJwt());
|
||||
const officeId = 'demo_notary_office_id'; //JwtService.getInstance().decodeJwt()?.office_Id;
|
||||
const user: any = UserStore.instance.getUser();
|
||||
const officeId: string = user.office.uid;
|
||||
|
||||
const officeFolderModel = OfficeFolder.hydrate<OfficeFolder>({
|
||||
folder_number: values["folder_number"],
|
||||
@ -93,7 +94,7 @@ export default function CreateFolder(): JSX.Element {
|
||||
customers: [],
|
||||
documents: [],
|
||||
notes: [],
|
||||
stakeholders: folderAccessType === "whole_office" ? availableCollaborators : selectedCollaborators,
|
||||
stakeholders: (folderAccessType === "whole_office" ? availableCollaborators : selectedCollaborators).map((collaborator: any) => ({ uid: collaborator.uid })),
|
||||
status: EFolderStatus.LIVE
|
||||
};
|
||||
|
||||
@ -132,32 +133,23 @@ export default function CreateFolder(): JSX.Element {
|
||||
useEffect(() => {
|
||||
DeedTypeService.getDeedTypes().then((processes: any[]) => {
|
||||
if (processes.length > 0) {
|
||||
let deedTypes: any[] = processes.map((process: any) => process.processData);
|
||||
|
||||
// FilterBy archived_at = null or not defined
|
||||
deedTypes = deedTypes.filter((deedType: any) => !deedType.archived_at);
|
||||
|
||||
const deedTypes: any[] = processes.map((process: any) => process.processData);
|
||||
setAvailableDeedTypes(deedTypes);
|
||||
}
|
||||
});
|
||||
|
||||
/* TODO: review
|
||||
// no need to pass query 'where' param here, default query for notaries include only users which are in the same office as the caller
|
||||
Users.getInstance()
|
||||
.get({
|
||||
include: { contact: true },
|
||||
})
|
||||
.then((users) => {
|
||||
setAvailableCollaborators(users);
|
||||
/ *
|
||||
// set default selected collaborators to the connected user
|
||||
const currentUser = users.find((user) => user.uid === JwtService.getInstance().decodeJwt()?.userId);
|
||||
CollaboratorService.getCollaborators().then((processes: any[]) => {
|
||||
if (processes.length > 0) {
|
||||
const collaborators: any[] = processes.map((process: any) => process.processData);
|
||||
setAvailableCollaborators(collaborators);
|
||||
|
||||
const user: any = UserStore.instance.getUser();
|
||||
const currentUser: any = collaborators.find((collaborator: any) => collaborator.uid === user.uid);
|
||||
if (currentUser) {
|
||||
setSelectedCollaborators([currentUser]);
|
||||
}
|
||||
* /
|
||||
});
|
||||
*/
|
||||
}
|
||||
});
|
||||
}, []);
|
||||
|
||||
/**
|
||||
|
@ -23,8 +23,11 @@ import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
|
||||
import FileService from "src/common/Api/LeCoffreApi/sdk/FileService";
|
||||
|
||||
import PdfService, { CertificateData, Metadata } from "@Front/Services/PdfService";
|
||||
|
||||
import MessageBus from "src/sdk/MessageBus";
|
||||
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
|
||||
type IProps = {
|
||||
customerUid: string;
|
||||
folderUid: string;
|
||||
@ -122,7 +125,13 @@ export default function DocumentTables(props: IProps) {
|
||||
const file = doc.files?.[0];
|
||||
if (!file) return;
|
||||
|
||||
return new Promise<void>((resolve: () => void) => {
|
||||
return new Promise<void>(async (resolve: () => void) => {
|
||||
if (!file.file_blob) {
|
||||
LoaderService.getInstance().show();
|
||||
file.file_blob = (await FileService.getFileByUid(file.uid)).processData.file_blob;
|
||||
LoaderService.getInstance().hide();
|
||||
}
|
||||
|
||||
const blob = new Blob([file.file_blob.data], { type: file.file_blob.type });
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
@ -223,7 +232,7 @@ export default function DocumentTables(props: IProps) {
|
||||
if (document.document_status !== EDocumentStatus.ASKED) return null;
|
||||
return {
|
||||
key: document.uid,
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "_" },
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "Autre document" },
|
||||
document_status: {
|
||||
sx: { width: 107 },
|
||||
content: (
|
||||
@ -263,7 +272,7 @@ export default function DocumentTables(props: IProps) {
|
||||
if (document.document_status !== EDocumentStatus.DEPOSITED) return null;
|
||||
return {
|
||||
key: document.uid,
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "_" },
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "Autre document" },
|
||||
document_status: {
|
||||
sx: { width: 107 },
|
||||
content: (
|
||||
@ -309,7 +318,7 @@ export default function DocumentTables(props: IProps) {
|
||||
if (document.document_status !== EDocumentStatus.VALIDATED) return null;
|
||||
return {
|
||||
key: document.uid,
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "_" },
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "Autre document" },
|
||||
document_status: {
|
||||
sx: { width: 107 },
|
||||
content: (
|
||||
@ -360,7 +369,7 @@ export default function DocumentTables(props: IProps) {
|
||||
if (document.document_status !== EDocumentStatus.REFUSED) return null;
|
||||
return {
|
||||
key: document.uid,
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "_" },
|
||||
document_type: { sx: { width: 300 }, content: document.document_type?.name ?? "Autre document" },
|
||||
document_status: {
|
||||
sx: { width: 107 },
|
||||
content: (
|
||||
|
@ -83,7 +83,7 @@ export default function SendDocuments() {
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
const fileName: string = `${customer.contact.last_name}-${strDate}.${file.name.split('.').pop()}`;
|
||||
const fileName: string = `${customer.contact.last_name}_${strDate}.${file.name.split('.').pop()}`;
|
||||
|
||||
const arrayBuffer: ArrayBuffer = event.target.result as ArrayBuffer;
|
||||
const uint8Array: Uint8Array = new Uint8Array(arrayBuffer);
|
||||
@ -117,7 +117,9 @@ export default function SendDocuments() {
|
||||
document_status: EDocumentNotaryStatus.SENT
|
||||
};
|
||||
|
||||
DocumentService.createDocument(documentData, validatorId).then(() => resolve());
|
||||
DocumentService.createDocument(documentData, validatorId).then(() => {
|
||||
FolderService.refreshFolderByUid(folderUid as string).then(() => resolve());
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
@ -6,7 +6,6 @@ import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm";
|
||||
import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
import Module from "@Front/Config/Module";
|
||||
import { Document } from "le-coffre-resources/dist/Notary";
|
||||
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
|
||||
import Image from "next/image";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
@ -19,8 +18,10 @@ import MessageBox from "@Front/Components/Elements/MessageBox";
|
||||
|
||||
import { FileBlob } from "@Front/Api/Entities/types";
|
||||
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import DocumentService from "src/common/Api/LeCoffreApi/sdk/DocumentService";
|
||||
import FileService from "src/common/Api/LeCoffreApi/sdk/FileService";
|
||||
import FolderService from "src/common/Api/LeCoffreApi/sdk/FolderService";
|
||||
|
||||
type IProps = {};
|
||||
type IPropsClass = {
|
||||
@ -323,16 +324,20 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
|
||||
|
||||
private async refuseDocument() {
|
||||
try {
|
||||
LoaderService.getInstance().show();
|
||||
DocumentService.getDocumentByUid(this.props.documentUid).then((process: any) => {
|
||||
if (process) {
|
||||
DocumentService.updateDocument(process, { document_status: EDocumentStatus.REFUSED, refused_reason: this.state.refuseText }).then(() => {
|
||||
this.props.router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid) +
|
||||
"?customerUid=" +
|
||||
this.state.document?.depositor?.uid,
|
||||
);
|
||||
FolderService.refreshFolderByUid(this.props.folderUid).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
this.props.router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid) +
|
||||
"?customerUid=" +
|
||||
this.state.document?.depositor?.uid,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -343,36 +348,34 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
|
||||
|
||||
private async validateDocument() {
|
||||
try {
|
||||
LoaderService.getInstance().show();
|
||||
DocumentService.getDocumentByUid(this.props.documentUid).then(async (process: any) => {
|
||||
if (process) {
|
||||
await new Promise<void>((resolve: () => void) => {
|
||||
FileService.getFileByUid(process.processData.files[0].uid).then((p) => {
|
||||
if (p) {
|
||||
FileService.updateFile(p, {
|
||||
file_name: `aplc-${p.processData.file_name}`
|
||||
}).then(resolve);
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
const fileName: string = p.processData.file_name;
|
||||
const extension: string = fileName.substring(fileName.lastIndexOf('.'));
|
||||
|
||||
FileService.updateFile(p, { file_name: `aplc_${fileName.substring(0, fileName.lastIndexOf('_'))}_${strDate}${extension}` }).then(resolve);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
this.props.router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid) +
|
||||
"?customerUid=" +
|
||||
this.state.document?.depositor?.uid,
|
||||
);
|
||||
*/
|
||||
|
||||
DocumentService.updateDocument(process, { document_status: EDocumentStatus.VALIDATED }).then(() => {
|
||||
this.props.router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid) +
|
||||
"?customerUid=" +
|
||||
this.state.document?.depositor?.uid,
|
||||
);
|
||||
FolderService.refreshFolderByUid(this.props.folderUid).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
this.props.router.push(
|
||||
Module.getInstance()
|
||||
.get()
|
||||
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid) +
|
||||
"?customerUid=" +
|
||||
this.state.document?.depositor?.uid,
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -17,10 +17,13 @@ import AuthModal from "src/sdk/AuthModal";
|
||||
import MessageBus from "src/sdk/MessageBus";
|
||||
import Iframe from "src/sdk/Iframe";
|
||||
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import RuleService from "src/common/Api/LeCoffreApi/sdk/RuleService";
|
||||
import RuleGroupService from "src/common/Api/LeCoffreApi/sdk/RuleGroupService";
|
||||
import RoleService from "src/common/Api/LeCoffreApi/sdk/RoleService";
|
||||
import OfficeService from "src/common/Api/LeCoffreApi/sdk/OfficeService";
|
||||
import CollaboratorService from "src/common/Api/LeCoffreApi/sdk/CollaboratorService";
|
||||
import OfficeRoleService from "src/common/Api/LeCoffreApi/sdk/OfficeRoleService";
|
||||
|
||||
export default function LoginCallBack() {
|
||||
const router = useRouter();
|
||||
@ -60,23 +63,111 @@ export default function LoginCallBack() {
|
||||
});
|
||||
};
|
||||
|
||||
const getRoles = async (office: any) => {
|
||||
const initDefaultData = async (office: any) => {
|
||||
const rules: any[] = await new Promise<any[]>((resolve: (rules: any[]) => void) => {
|
||||
const defaultRules: any[] = [
|
||||
// Actes et documents
|
||||
{
|
||||
name: "subscription",
|
||||
label: "Gestion de l'abonnement",
|
||||
namespace: "Gestion de l'abonnement"
|
||||
name: "POST deeds",
|
||||
label: "Créer un template de type d'acte",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "document_types",
|
||||
label: "Gestion des matrices d'actes et des documents",
|
||||
namespace: "Gestion des matrices d'actes et des documents"
|
||||
name: "PUT deeds",
|
||||
label: "Modifier un type d'acte",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "rib",
|
||||
label: "Intégration du RIB",
|
||||
namespace: "Intégration du RIB"
|
||||
name: "DELETE deeds",
|
||||
label: "Supprimer des types d'actes",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "GET deed-types",
|
||||
label: "Lecture des types d'actes",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "POST deed-types",
|
||||
label: "Création des types d'actes",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "PUT deed-types",
|
||||
label: "Modification des types d'actes",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "DELETE deed-types",
|
||||
label: "Suppression des types d'actes",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "GET document-types",
|
||||
label: "Lecture des types de documents",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "POST document-types",
|
||||
label: "Création des types de documents",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "PUT document-types",
|
||||
label: "Modification des types de documents",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "DELETE document-types",
|
||||
label: "Suppression des types de documents",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
// RIB
|
||||
{
|
||||
name: "GET rib",
|
||||
label: "Lire le RIB de l'office",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "POST rib",
|
||||
label: "Déposer le RIB de l'office",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "PUT rib",
|
||||
label: "Editer le RIB de l'office",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "DELETE rib",
|
||||
label: "Supprimer le RIB de l'office",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
// Abonnements
|
||||
{
|
||||
name: "GET subscriptions",
|
||||
label: "Récupérer les abonnements",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "POST subscriptions",
|
||||
label: "Inviter un collaborateur à l'abonnement",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "PUT subscriptions",
|
||||
label: "Modifier l'abonnement",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "GET stripe",
|
||||
label: "Gérer l'abonnement de l'office",
|
||||
namespace: "collaborator"
|
||||
},
|
||||
{
|
||||
name: "POST stripe",
|
||||
label: "Payer un abonnement",
|
||||
namespace: "collaborator"
|
||||
}
|
||||
];
|
||||
RuleService.getRules().then(async (processes: any[]) => {
|
||||
@ -91,23 +182,56 @@ export default function LoginCallBack() {
|
||||
});
|
||||
});
|
||||
|
||||
const roles: any[] = await new Promise<any[]>((resolve: (roles: any[]) => void) => {
|
||||
const defaultRoles: any[] = [
|
||||
await new Promise<void>((resolve: () => void) => {
|
||||
const defaultRuleGroups: any[] = [
|
||||
{
|
||||
name: 'notary',
|
||||
label: 'Notaire',
|
||||
office: {
|
||||
uid: office.uid
|
||||
},
|
||||
rules: rules.map((rule: any) => ({ uid: rule.uid }))
|
||||
name: "Gestion des matrices d'actes et des documents",
|
||||
rules: rules
|
||||
.filter((rule: any) => rule.name.includes("deeds") || rule.name.includes("deed-types") || rule.name.includes("document-types"))
|
||||
.map((rule: any) => ({ uid: rule.uid }))
|
||||
},
|
||||
{
|
||||
name: 'collaborator',
|
||||
label: 'Collaborateur',
|
||||
office: {
|
||||
uid: office.uid
|
||||
},
|
||||
rules: rules.map((rule: any) => ({ uid: rule.uid }))
|
||||
name: "Intégration du RIB",
|
||||
rules: rules
|
||||
.filter((rule: any) => rule.name.includes("rib"))
|
||||
.map((rule: any) => ({ uid: rule.uid }))
|
||||
},
|
||||
{
|
||||
name: "Gestion de l'abonnement",
|
||||
rules: rules
|
||||
.filter((rule: any) => rule.name.includes("subscriptions") || rule.name.includes("stripe"))
|
||||
.map((rule: any) => ({ uid: rule.uid }))
|
||||
}
|
||||
];
|
||||
RuleGroupService.getRuleGroups().then(async (processes: any[]) => {
|
||||
const ruleGroups: any[] = processes.map((process: any) => process.processData);
|
||||
if (ruleGroups.length === 0) {
|
||||
for (let ruleGroupData of defaultRuleGroups) {
|
||||
const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0';
|
||||
ruleGroups.push((await RuleGroupService.createRuleGroup(ruleGroupData, validatorId)).processData);
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
await new Promise<void>((resolve: () => void) => {
|
||||
const defaultRoles: any[] = [
|
||||
{
|
||||
name: 'super-admin',
|
||||
label: 'Super administrateur'
|
||||
},
|
||||
{
|
||||
name: 'admin',
|
||||
label: 'Administrateur'
|
||||
},
|
||||
{
|
||||
name: 'notary',
|
||||
label: 'Notaire'
|
||||
},
|
||||
{
|
||||
name: 'default',
|
||||
label: 'Utilisateur'
|
||||
}
|
||||
];
|
||||
RoleService.getRoles().then(async (processes: any[]) => {
|
||||
@ -118,11 +242,36 @@ export default function LoginCallBack() {
|
||||
roles.push((await RoleService.createRole(roleData, validatorId)).processData);
|
||||
}
|
||||
}
|
||||
resolve(roles);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
return roles;
|
||||
await new Promise<void>((resolve: () => void) => {
|
||||
const defaultOfficeRoles: any[] = [
|
||||
{
|
||||
name: 'Notaire',
|
||||
office: {
|
||||
uid: office.uid
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'Collaborateur',
|
||||
office: {
|
||||
uid: office.uid
|
||||
}
|
||||
}
|
||||
];
|
||||
OfficeRoleService.getOfficeRoles().then(async (processes: any[]) => {
|
||||
const roles: any[] = processes.map((process: any) => process.processData);
|
||||
if (roles.length === 0) {
|
||||
for (let officeRoleData of defaultOfficeRoles) {
|
||||
const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0';
|
||||
roles.push((await OfficeRoleService.createOfficeRole(officeRoleData, validatorId)).processData);
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const getCollaborator = async (collaboratorData: any) => {
|
||||
@ -159,8 +308,14 @@ export default function LoginCallBack() {
|
||||
const code = router.query["code"];
|
||||
if (code) {
|
||||
try {
|
||||
const idNotUser: any = await Auth.getInstance().getIdNotUser(code as string);
|
||||
setIdNotUser(idNotUser);
|
||||
// Nettoyer l'URL pour ne garder que la racine
|
||||
const rootUrl = window.location.origin;
|
||||
if (window.location.href !== rootUrl) {
|
||||
window.history.replaceState({}, document.title, rootUrl);
|
||||
}
|
||||
|
||||
const user: any = await Auth.getInstance().getIdNotUser(code as string);
|
||||
setIdNotUser(user.idNotUser);
|
||||
setIsAuthModalOpen(true);
|
||||
/*
|
||||
const token: any = null;
|
||||
@ -228,12 +383,20 @@ export default function LoginCallBack() {
|
||||
setIsAuthModalOpen(false);
|
||||
setIsConnected(true);
|
||||
setTimeout(() => {
|
||||
LoaderService.getInstance().show();
|
||||
MessageBus.getInstance().initMessageListener();
|
||||
MessageBus.getInstance().isReady().then(async () => {
|
||||
const office: any = await getOffice(idNotUser);
|
||||
await initDefaultData(office);
|
||||
|
||||
const roles: any[] = await getRoles(office);
|
||||
const role: any = roles.find((role: any) => role.name === idNotUser.role.name);
|
||||
const role: any = (await RoleService.getRoles())
|
||||
.map((process: any) => process.processData)
|
||||
.find((role: any) => role.name === idNotUser.role.name);
|
||||
|
||||
const officeRole: any = (await OfficeRoleService.getOfficeRoles())
|
||||
.map((process: any) => process.processData)
|
||||
.filter((officeRole: any) => officeRole.office.uid === office.uid)
|
||||
.find((officeRole: any) => officeRole.name === idNotUser.office_role.name);
|
||||
|
||||
const collaboratorData: any = {
|
||||
idNot: idNotUser.idNot,
|
||||
@ -243,20 +406,24 @@ export default function LoginCallBack() {
|
||||
},
|
||||
role: {
|
||||
uid: role.uid
|
||||
},
|
||||
office_role: {
|
||||
uid: officeRole.uid
|
||||
}
|
||||
};
|
||||
const collaborator: any = await getCollaborator(collaboratorData);
|
||||
collaborator.office = office;
|
||||
collaborator.role = role;
|
||||
UserStore.instance.connect(collaborator);
|
||||
|
||||
MessageBus.getInstance().destroyMessageListener();
|
||||
LoaderService.getInstance().hide();
|
||||
|
||||
/*
|
||||
if (jwt.rules && !jwt.rules.includes("GET folders")) {
|
||||
router.push(Module.getInstance().get().modules.pages.Subscription.pages.New.props.path);
|
||||
}
|
||||
*/
|
||||
router.push(Module.getInstance().get().modules.pages.Folder.props.path);
|
||||
|
||||
window.location.href = Module.getInstance().get().modules.pages.Folder.props.path;
|
||||
});
|
||||
}, 100);
|
||||
}}
|
||||
|
@ -5,11 +5,13 @@ import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate";
|
||||
import FilePreview from "@Front/Components/DesignSystem/FilePreview";
|
||||
import Button, { EButtonstyletype, EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import { useRouter } from "next/router";
|
||||
import OfficeRib from "@Front/Api/LeCoffreApi/Notary/OfficeRib/OfficeRib";
|
||||
import DepositRib from "@Front/Components/DesignSystem/DepositRib";
|
||||
import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm";
|
||||
import Loader from "@Front/Components/DesignSystem/Loader";
|
||||
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
import OfficeRibService from "src/common/Api/LeCoffreApi/sdk/OfficeRibService";
|
||||
|
||||
export default function Rib() {
|
||||
const [documentList, setDocumentList] = useState<File[]>([]);
|
||||
const router = useRouter();
|
||||
@ -24,10 +26,11 @@ export default function Rib() {
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
try {
|
||||
const blob = await OfficeRib.getInstance().getRibStream();
|
||||
setFileBlob(blob.blob);
|
||||
const officeRib: any = (await OfficeRibService.getOfficeRib()).processData;
|
||||
const fileBlob: Blob = new Blob([officeRib.file_blob.data], { type: officeRib.file_blob.type });
|
||||
setFileBlob(fileBlob);
|
||||
setKey(key);
|
||||
setFileName(blob.fileName);
|
||||
setFileName(officeRib.file_name);
|
||||
} catch (error) {
|
||||
setFileBlob(undefined);
|
||||
setFileName("");
|
||||
@ -54,13 +57,41 @@ export default function Rib() {
|
||||
async function onRibModalAccepted() {
|
||||
// Send documents to the backend for validation
|
||||
if (documentList.length === 0) return;
|
||||
const formData = new FormData();
|
||||
formData.append("file", documentList[0]!, documentList[0]!.name);
|
||||
const file = documentList[0]!;
|
||||
|
||||
await OfficeRib.getInstance().post(formData);
|
||||
LoaderService.getInstance().show();
|
||||
const reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
if (event.target?.result) {
|
||||
const date: Date = new Date();
|
||||
const strDate: string = `${date.getDate().toString().padStart(2, '0')}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getFullYear()}`;
|
||||
|
||||
onCloseRibModal();
|
||||
fetchData();
|
||||
const fileName: string = `aplc_${file.name.split('.')[0]}_${strDate}.${file.name.split('.').pop()}`;
|
||||
|
||||
const arrayBuffer: ArrayBuffer = event.target.result as ArrayBuffer;
|
||||
const uint8Array: Uint8Array = new Uint8Array(arrayBuffer);
|
||||
|
||||
const fileBlob: any = {
|
||||
type: file.type,
|
||||
data: uint8Array
|
||||
};
|
||||
|
||||
const fileData: any = {
|
||||
file_blob: fileBlob,
|
||||
file_name: fileName
|
||||
};
|
||||
const validatorId: string = '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0';
|
||||
|
||||
OfficeRibService.createOfficeRib(fileData, validatorId).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
onCloseRibModal();
|
||||
|
||||
setIsLoading(true);
|
||||
setTimeout(() => fetchData(), 2000);
|
||||
});
|
||||
}
|
||||
};
|
||||
reader.readAsArrayBuffer(file);
|
||||
}
|
||||
|
||||
function openRibModal(): void {
|
||||
@ -73,10 +104,18 @@ export default function Rib() {
|
||||
}
|
||||
|
||||
async function onDeleteModalAccepted() {
|
||||
await OfficeRib.getInstance().delete();
|
||||
LoaderService.getInstance().show();
|
||||
OfficeRibService.getOfficeRib().then((process: any) => {
|
||||
if (process) {
|
||||
OfficeRibService.updateOfficeRib(process, { isDeleted: 'true', archived_at: new Date().toISOString() }).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
onCloseDeleteModal();
|
||||
|
||||
onCloseDeleteModal();
|
||||
fetchData();
|
||||
setIsLoading(true);
|
||||
setTimeout(() => fetchData(), 2000);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function openDeleteModal(): void {
|
||||
@ -88,7 +127,23 @@ export default function Rib() {
|
||||
}
|
||||
|
||||
const onDocumentChange = (documentList: File[]) => {
|
||||
setDocumentList(documentList);
|
||||
if (documentList.length === 0) return;
|
||||
if (fileBlob) {
|
||||
LoaderService.getInstance().show();
|
||||
OfficeRibService.getOfficeRib().then((process: any) => {
|
||||
if (process) {
|
||||
OfficeRibService.updateOfficeRib(process, { isDeleted: 'true', archived_at: new Date().toISOString() }).then(() => {
|
||||
LoaderService.getInstance().hide();
|
||||
onCloseDeleteModal();
|
||||
|
||||
setIsLoading(true);
|
||||
setDocumentList(documentList);
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
setDocumentList(documentList);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
|
@ -1,31 +1,25 @@
|
||||
import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
|
||||
import Button from "@Front/Components/DesignSystem/Button";
|
||||
import CheckBox from "@Front/Components/DesignSystem/CheckBox";
|
||||
import Form from "@Front/Components/DesignSystem/Form";
|
||||
import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm";
|
||||
import Typography, { ETypo } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultRoleDashboard from "@Front/Components/LayoutTemplates/DefaultRoleDashboard";
|
||||
import { OfficeRole, Rule, RulesGroup } from "le-coffre-resources/dist/Admin";
|
||||
import { useRouter } from "next/router";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import React from "react";
|
||||
|
||||
import classes from "./classes.module.scss";
|
||||
import RulesGroups from "@Front/Api/LeCoffreApi/Admin/RulesGroups/RulesGroups";
|
||||
|
||||
import RoleService from "src/common/Api/LeCoffreApi/sdk/RoleService";
|
||||
import LoaderService from "src/common/Api/LeCoffreApi/sdk/Loader/LoaderService";
|
||||
|
||||
type RuleGroupsCheckbox = RulesGroup & {
|
||||
checked: boolean;
|
||||
};
|
||||
import OfficeRoleService from "src/common/Api/LeCoffreApi/sdk/OfficeRoleService";
|
||||
import RuleGroupService from "src/common/Api/LeCoffreApi/sdk/RuleGroupService";
|
||||
|
||||
export default function RolesInformations() {
|
||||
const router = useRouter();
|
||||
let { roleUid } = router.query;
|
||||
|
||||
const [roleSelected, setRoleSelected] = useState<any | null>(null);
|
||||
const [rulesGroupsCheckboxes, setRulesGroupsCheckboxes] = useState<any[]>([]);
|
||||
const [rulesCheckboxes, setRulesCheckboxes] = useState<any[]>([]);
|
||||
const [selectAll, setSelectAll] = useState<boolean>(false);
|
||||
|
||||
const [isConfirmModalOpened, setIsConfirmModalOpened] = useState<boolean>(false);
|
||||
@ -43,77 +37,28 @@ export default function RolesInformations() {
|
||||
async function getUser() {
|
||||
if (!roleUid) return;
|
||||
|
||||
/*
|
||||
const role = await OfficeRoles.getInstance().getByUid(roleUid as string, {
|
||||
q: {
|
||||
rules: true,
|
||||
},
|
||||
});
|
||||
*/
|
||||
|
||||
LoaderService.getInstance().show();
|
||||
const role: any = await new Promise<any>((resolve: (role: any) => void) => {
|
||||
RoleService.getRoleByUid(roleUid as string).then((process: any) => {
|
||||
if (process) {
|
||||
const role: any = process.processData;
|
||||
resolve(role);
|
||||
LoaderService.getInstance().hide();
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
/* TODO: review
|
||||
const rulesGroups = await RulesGroups.getInstance().get({
|
||||
include: {
|
||||
rules: true,
|
||||
},
|
||||
});
|
||||
*/
|
||||
const officeRole: any = (await OfficeRoleService.getOfficeRoleByUid(roleUid as string)).processData;
|
||||
const ruleGroups: any[] = (await RuleGroupService.getRuleGroups())
|
||||
.map((process: any) => process.processData);
|
||||
|
||||
/*
|
||||
const rulesGroups: RulesGroup[] = [
|
||||
{
|
||||
uid: 'toto',
|
||||
name: 'toto',
|
||||
rules: [
|
||||
{
|
||||
uid: 'toto',
|
||||
name: 'toto',
|
||||
label: 'toto',
|
||||
namespace: 'toto',
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
}
|
||||
],
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
}
|
||||
];
|
||||
*/
|
||||
const rulesCheckboxes: any[] = officeRole.rules ? ruleGroups.map((ruleGroup: any) => {
|
||||
const isChecked: boolean = officeRole.rules.find((r1: any) => ruleGroup.rules.find((r2: any) => r2.uid === r1.uid)) !== undefined;
|
||||
return {
|
||||
...ruleGroup,
|
||||
checked: isChecked
|
||||
};
|
||||
}) : ruleGroups;
|
||||
|
||||
if (!role) return;
|
||||
setRoleSelected(role);
|
||||
setRoleSelected(officeRole);
|
||||
setRulesCheckboxes(rulesCheckboxes);
|
||||
|
||||
// TODO: review
|
||||
if (!role.rules) return;
|
||||
/*
|
||||
const rulesCheckboxes = rulesGroups
|
||||
.map((ruleGroup) => {
|
||||
if (ruleGroup.rules?.every((rule) => role.rules?.find((r: any) => r.uid === rule.uid))) {
|
||||
return { ...ruleGroup, checked: true };
|
||||
}
|
||||
return { ...ruleGroup, checked: false };
|
||||
})
|
||||
.sort((ruleA, ruleB) => (ruleA.name! < ruleB.name! ? 1 : -1))
|
||||
.sort((rule) => (rule.checked ? -1 : 1));
|
||||
|
||||
const selectAll = rulesCheckboxes.every((rule) => rule.checked);
|
||||
const selectAll: boolean = rulesCheckboxes.every((ruleCheckbox: any) => ruleCheckbox.checked);
|
||||
setSelectAll(selectAll);
|
||||
setRulesGroupsCheckboxes(rulesCheckboxes);
|
||||
*/
|
||||
setRulesGroupsCheckboxes(role.rules);
|
||||
}
|
||||
|
||||
LoaderService.getInstance().hide();
|
||||
}
|
||||
getUser();
|
||||
}, [roleUid]);
|
||||
|
||||
@ -121,45 +66,64 @@ export default function RolesInformations() {
|
||||
(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
setSelectAll(e.target.checked);
|
||||
const checked = e.target.checked;
|
||||
rulesGroupsCheckboxes.forEach((rule) => (rule.checked = checked));
|
||||
setRulesGroupsCheckboxes([...rulesGroupsCheckboxes]);
|
||||
rulesCheckboxes.forEach((rule) => (rule.checked = checked));
|
||||
setRulesCheckboxes([...rulesCheckboxes]);
|
||||
},
|
||||
[rulesGroupsCheckboxes],
|
||||
[rulesCheckboxes],
|
||||
);
|
||||
|
||||
const modifyRules = useCallback(async () => {
|
||||
if (!roleSelected || !roleSelected.uid) return;
|
||||
const rulesGroupsChecked = rulesGroupsCheckboxes.filter((rule) => rule.checked);
|
||||
|
||||
let newRules: Rule[] = [];
|
||||
LoaderService.getInstance().show();
|
||||
|
||||
for (let ruleGroup of rulesGroupsChecked) {
|
||||
if (!ruleGroup.rules) continue;
|
||||
newRules = [...newRules, ...ruleGroup.rules];
|
||||
}
|
||||
await OfficeRoles.getInstance().put(roleSelected.uid, {
|
||||
uid: roleSelected.uid,
|
||||
rules: newRules,
|
||||
const ruleGroups: any[] = (await RuleGroupService.getRuleGroups())
|
||||
.map((process: any) => process.processData);
|
||||
|
||||
const newRules: any[] = rulesCheckboxes
|
||||
.filter((ruleCheckbox: any) => ruleCheckbox.checked)
|
||||
.map((ruleCheckbox: any) => ruleCheckbox.rules)
|
||||
.reduce((acc: any, curr: any) => [...acc, ...curr], [])
|
||||
.map((ruleCheckbox: any) => ({ uid: ruleCheckbox.uid }));
|
||||
|
||||
await new Promise<void>(async (resolve: () => void) => {
|
||||
OfficeRoleService.getOfficeRoleByUid(roleSelected.uid).then((process: any) => {
|
||||
if (process) {
|
||||
OfficeRoleService.updateOfficeRole(process, { rules: newRules }).then(resolve);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const roleUpdated = await OfficeRoles.getInstance().getByUid(roleSelected.uid, {
|
||||
q: {
|
||||
rules: true,
|
||||
},
|
||||
});
|
||||
setRoleSelected(roleUpdated);
|
||||
const officeRoleUpdated: any = (await OfficeRoleService.getOfficeRoleByUid(roleSelected.uid)).processData;
|
||||
|
||||
const rulesCheckboxesUpdated: any[] = officeRoleUpdated.rules ? ruleGroups.map((ruleGroup: any) => {
|
||||
const isChecked: boolean = officeRoleUpdated.rules.find((r1: any) => ruleGroup.rules.find((r2: any) => r2.uid === r1.uid)) !== undefined;
|
||||
return {
|
||||
...ruleGroup,
|
||||
checked: isChecked
|
||||
};
|
||||
}) : ruleGroups;
|
||||
|
||||
setRoleSelected(officeRoleUpdated);
|
||||
setRulesCheckboxes(rulesCheckboxesUpdated);
|
||||
|
||||
const selectAllUpdated = rulesCheckboxesUpdated.every((ruleCheckbox: any) => ruleCheckbox.checked);
|
||||
setSelectAll(selectAllUpdated);
|
||||
|
||||
LoaderService.getInstance().hide();
|
||||
|
||||
closeConfirmModal();
|
||||
}, [closeConfirmModal, roleSelected, rulesGroupsCheckboxes]);
|
||||
}, [closeConfirmModal, roleSelected, rulesCheckboxes]);
|
||||
|
||||
const handleRuleChange = useCallback(
|
||||
(e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
const ruleUid = e.target.value;
|
||||
const rule = rulesGroupsCheckboxes.find((rule) => rule.uid === ruleUid);
|
||||
const rule = rulesCheckboxes.find((rule) => rule.uid === ruleUid);
|
||||
if (!rule) return;
|
||||
rule.checked = e.target.checked;
|
||||
setRulesGroupsCheckboxes([...rulesGroupsCheckboxes]);
|
||||
setRulesCheckboxes([...rulesCheckboxes]);
|
||||
},
|
||||
[rulesGroupsCheckboxes],
|
||||
[rulesCheckboxes],
|
||||
);
|
||||
|
||||
return (
|
||||
@ -187,11 +151,11 @@ export default function RolesInformations() {
|
||||
</div>
|
||||
<Form>
|
||||
<div className={classes["rights"]}>
|
||||
{rulesGroupsCheckboxes.map((ruleGroup) => (
|
||||
<div className={classes["right"]} key={ruleGroup.uid}>
|
||||
{rulesCheckboxes.map((rule) => (
|
||||
<div className={classes["right"]} key={rule.uid}>
|
||||
<CheckBox
|
||||
option={{ label: ruleGroup.label!, value: ruleGroup.uid }}
|
||||
checked={ruleGroup.checked}
|
||||
option={{ label: rule.name, value: rule.uid }}
|
||||
checked={rule.checked}
|
||||
onChange={handleRuleChange}
|
||||
/>
|
||||
</div>
|
||||
|
@ -132,10 +132,118 @@ export default class MessageBus {
|
||||
publicDataDecoded[key] = await this.getPublicData(publicDataEncoded[key]);
|
||||
}
|
||||
|
||||
if (!(publicDataDecoded['uid'] && publicDataDecoded['uid'] === uid && publicDataDecoded['utype'] && publicDataDecoded['utype'] === 'file')) {
|
||||
if (!(publicDataDecoded['uid'] && publicDataDecoded['uid'] === uid && publicDataDecoded['utype'] && publicDataDecoded['utype'] === 'file' && publicDataDecoded['isDeleted'] === 'false')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const lastArchivedAtFileState = process.states.findLast((state: any) => state.pcd_commitment['archived_at']);
|
||||
if (lastArchivedAtFileState) {
|
||||
const archivedAt = (await this.getPublicData(lastArchivedAtFileState.public_data['archived_at']));
|
||||
if (archivedAt) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} catch (error) { }
|
||||
|
||||
// We take the file in it's latest commited state
|
||||
let file: any;
|
||||
|
||||
// Which is the last state that updated file_blob?
|
||||
const lastUpdatedFileNameState = process.states.findLast((state: any) => state.pcd_commitment['file_name']);
|
||||
const lastUpdatedFileState = process.states.findLast((state: any) => state.pcd_commitment['file_blob']);
|
||||
if (!lastUpdatedFileNameState || !lastUpdatedFileState) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const fileName: string = (await this.getData(processId, lastUpdatedFileNameState.state_id)).file_name;
|
||||
|
||||
const processData = await this.getData(processId, lastUpdatedFileState.state_id);
|
||||
const isEmpty = Object.keys(processData).length === 0;
|
||||
if (isEmpty) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const publicDataEncoded = lastUpdatedFileState.public_data;
|
||||
if (!publicDataEncoded) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!file) {
|
||||
file = {
|
||||
processId,
|
||||
lastUpdatedFileState,
|
||||
processData,
|
||||
publicDataDecoded,
|
||||
};
|
||||
} else {
|
||||
for (const key of Object.keys(processData)) {
|
||||
file.processData[key] = processData[key];
|
||||
}
|
||||
file.lastUpdatedFileState = lastUpdatedFileState;
|
||||
for (const key of Object.keys(publicDataDecoded)) {
|
||||
file.publicDataDecoded[key] = publicDataDecoded[key];
|
||||
}
|
||||
}
|
||||
file.processData.file_name = fileName;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
files.push(file);
|
||||
break;
|
||||
}
|
||||
|
||||
resolve(files[0]);
|
||||
}).catch(reject);
|
||||
});
|
||||
}
|
||||
|
||||
public getFileByUtype(utype: string): Promise<any> {
|
||||
return new Promise<any>((resolve: (files: any[]) => void, reject: (error: string) => void) => {
|
||||
this.getProcesses().then(async (processes: any) => {
|
||||
const files: any[] = [];
|
||||
|
||||
for (const processId of Object.keys(processes)) {
|
||||
const process = processes[processId];
|
||||
if (!process.states) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const publicDataDecoded: { [key: string]: any } = {};
|
||||
|
||||
// We only care about the public data as they are in the last commited state
|
||||
const processTip = process.states[process.states.length - 1].commited_in;
|
||||
const lastCommitedState = process.states.findLast((state: any) => state.commited_in !== processTip);
|
||||
|
||||
if (!lastCommitedState) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const publicDataEncoded = lastCommitedState.public_data;
|
||||
if (!publicDataEncoded) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const key of Object.keys(publicDataEncoded)) {
|
||||
publicDataDecoded[key] = await this.getPublicData(publicDataEncoded[key]);
|
||||
}
|
||||
|
||||
if (!(publicDataDecoded['uid'] && publicDataDecoded['utype'] && publicDataDecoded['utype'] === utype && publicDataDecoded['isDeleted'] === 'false')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const lastArchivedAtFileState = process.states.findLast((state: any) => state.pcd_commitment['archived_at']);
|
||||
if (lastArchivedAtFileState) {
|
||||
const archivedAt = (await this.getPublicData(lastArchivedAtFileState.public_data['archived_at']));
|
||||
if (archivedAt) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} catch (error) { }
|
||||
|
||||
// We take the file in it's latest commited state
|
||||
let file: any;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user