Skip to content

Commit b0a38cd

Browse files
authored
(0.9.25) CaptureData Reporting and Ingest UX Fixes (#657)
* DPO3DPKRT-891/Hide Field IDs from CaptureData Ingestion (#653) * DPO3DPKRT-886/Improved scene reports and identifying ownership (#654) * DPO3DPKRT-892/CaptureData Support in Reports and Cleanup (#655) * DPO3DPKRT-894/UX Ingest Tooltips and Fixes (#656)
1 parent 50e3d11 commit b0a38cd

File tree

10 files changed

+229
-123
lines changed

10 files changed

+229
-123
lines changed

client/src/pages/Admin/components/AdminToolsView.tsx

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,11 @@ type AssetSummary = DBReference & {
527527
quality: string,
528528
usage: string,
529529
dateCreated: Date,
530+
creator: { // who created the asset
531+
idUser: number,
532+
email: string,
533+
name: string,
534+
},
530535
};
531536
type AssetList = {
532537
status: string,
@@ -754,55 +759,45 @@ const AdminToolsBatchGeneration = (): React.ReactElement => {
754759

755760
// Create CSV headers (clean names)
756761
const headers = [
762+
'Date Created',
763+
'Creator',
757764
'ID',
758765
'Scene Name',
766+
'Reviewed',
759767
'Published',
760768
// 'Date Published',
761-
'Reviewed',
769+
'Downloads',
770+
'Master Model',
771+
'AR',
772+
'Capture Data',
762773
// 'Project ID',
763774
'Project',
764775
// 'Subject ID',
765776
'Subject',
766777
// 'Media Group ID',
767778
'Media Group',
768-
'Date Created',
769-
// 'Models Status',
770-
// 'Models Items Count',
771-
'Downloads',
772-
// 'Downloads Items Count',
773-
'AR',
774-
// 'AR Items Count',
775-
'Master Model',
776-
// 'Source Models Items Count',
777-
'Capture Data',
778-
// 'Source Capture Data Items Count'
779779
];
780780

781781
// Build CSV rows
782782
const rows = projectScenes.map(scene => {
783783
return [
784+
formatDate(scene.dateCreated),
785+
handleNull(scene.sources.models?.items?.[0]?.creator?.name),
784786
handleNull(scene.id),
785787
handleNull(sanitizeForCSV(scene.name)),
788+
scene.isReviewed != null ? (scene.isReviewed ? 'Yes' : 'No') : 'N/A',
786789
handleNull(scene.publishedState),
787790
// formatDate(scene.datePublished),
788-
scene.isReviewed != null ? (scene.isReviewed ? 'Yes' : 'No') : 'N/A',
791+
handleNull(scene.derivatives.downloads?.status),
792+
handleNull(scene.sources.models?.status),
793+
handleNull(scene.derivatives.ar?.status),
794+
handleNull(scene.sources.captureData?.status),
789795
// handleNull(scene.project?.id),
790796
handleNull(sanitizeForCSV(scene.project?.name)),
791797
// handleNull(scene.subject?.id),
792798
handleNull(sanitizeForCSV(scene.subject?.name)),
793799
// handleNull(scene.mediaGroup?.id),
794800
handleNull(sanitizeForCSV(scene.mediaGroup?.name)),
795-
formatDate(scene.dateCreated),
796-
// handleNull(scene.derivatives.models?.status),
797-
// handleNull(scene.derivatives.models?.items?.length),
798-
handleNull(scene.derivatives.downloads?.status),
799-
// handleNull(scene.derivatives.downloads?.items?.length),
800-
handleNull(scene.derivatives.ar?.status),
801-
// handleNull(scene.derivatives.ar?.items?.length),
802-
handleNull(scene.sources.models?.status),
803-
// handleNull(scene.sources.models?.items?.length),
804-
handleNull(scene.sources.captureData?.status),
805-
// handleNull(scene.sources.captureData?.items?.length)
806801
].join(','); // Join the row values with commas
807802
});
808803

client/src/pages/Ingestion/components/Metadata/Model/index.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -506,23 +506,25 @@ function Model(props: ModelProps): React.ReactElement {
506506
</TableCell>
507507
</TableRow>
508508
<TableRow className={tableClasses.tableRow}>
509-
<TableCell className={tableClasses.tableCell}><Typography className={tableClasses.labelText}>Generate Voyager Scene</Typography></TableCell>
510509
<TableCell className={tableClasses.tableCell}>
511510
<Tooltip title={<span style={{ fontSize: '0.75rem', fontWeight: 300 }}>To enable, <u><b>Units</b></u> must be set to mm, cm, m, in, ft, or yd, <u><b>Purpose</b></u> must be set to Master, and <u><b>Model File Type</b></u> must be set to obj, ply, stl, x3d, wrl, dae, or fbx</span>}>
512-
<Select
513-
value={String(!model.skipSceneGenerate) ?? ''}
514-
name='skipSceneGenerate'
515-
onChange={setSceneGenerate}
516-
disableUnderline
517-
disabled={sceneGenerateDisabled || ingestionLoading}
518-
className={clsx(tableClasses.select, tableClasses.datasetFieldSelect)}
519-
SelectDisplayProps={{ style: { paddingLeft: '10px', borderRadius: '5px' } }}
520-
>
521-
<MenuItem value='true'>True</MenuItem>
522-
<MenuItem value='false'>False</MenuItem>
523-
</Select>
511+
<Typography className={tableClasses.labelText}>Generate Voyager Scene</Typography>
524512
</Tooltip>
525513
</TableCell>
514+
<TableCell className={tableClasses.tableCell}>
515+
<Select
516+
value={String(!model.skipSceneGenerate) ?? ''}
517+
name='skipSceneGenerate'
518+
onChange={setSceneGenerate}
519+
disableUnderline
520+
disabled={sceneGenerateDisabled || ingestionLoading}
521+
className={clsx(tableClasses.select, tableClasses.datasetFieldSelect)}
522+
SelectDisplayProps={{ style: { paddingLeft: '10px', borderRadius: '5px' } }}
523+
>
524+
<MenuItem value='true'>True</MenuItem>
525+
<MenuItem value='false'>False</MenuItem>
526+
</Select>
527+
</TableCell>
526528
</TableRow>
527529
</TableBody>
528530
</Table>

client/src/pages/Ingestion/components/Metadata/Photogrammetry/index.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
300300
relatedObjects={photogrammetry.sourceObjects}
301301
onAdd={openSourceObjectModal}
302302
onRemove={onRemoveSourceObject}
303-
relationshipLanguage='Source Objects For This Ingest'
303+
relationshipLanguage='Parents'
304304
disabled={ingestionLoading}
305305
/>
306306
</Box>
@@ -310,7 +310,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
310310
relatedObjects={photogrammetry.derivedObjects}
311311
onAdd={openDerivedObjectModal}
312312
onRemove={onRemoveDerivedObject}
313-
relationshipLanguage='Objects Derived From This Ingest'
313+
relationshipLanguage='Children'
314314
disabled={ingestionLoading}
315315
/>
316316
</Box>
@@ -378,7 +378,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
378378
</TableRow>
379379
}
380380

381-
<TableRow className={tableClasses.tableRow}>
381+
{/* <TableRow className={tableClasses.tableRow}>
382382
<TableCell className={tableClasses.tableCell}>
383383
<Typography className={tableClasses.labelText}>Dataset Field ID</Typography>
384384
</TableCell>
@@ -394,7 +394,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
394394
disabled={ingestionLoading}
395395
/>
396396
</TableCell>
397-
</TableRow>
397+
</TableRow> */}
398398

399399
<TableRow className={tableClasses.tableRow}>
400400
<TableCell className={tableClasses.tableCell}>
@@ -477,7 +477,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
477477
</Select>
478478
</TableCell>
479479
</TableRow>
480-
<TableRow className={tableClasses.tableRow}>
480+
{/* <TableRow className={tableClasses.tableRow}>
481481
<TableCell className={tableClasses.tableCell}>
482482
<Typography className={tableClasses.labelText}>Item Position Field ID</Typography>
483483
</TableCell>
@@ -493,8 +493,8 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
493493
disabled={ingestionLoading}
494494
/>
495495
</TableCell>
496-
</TableRow>
497-
<TableRow className={tableClasses.tableRow}>
496+
</TableRow> */}
497+
{/* <TableRow className={tableClasses.tableRow}>
498498
<TableCell className={tableClasses.tableCell}>
499499
<Typography className={tableClasses.labelText}>Item Arrangement Field ID</Typography>
500500
</TableCell>
@@ -510,7 +510,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
510510
disabled={ingestionLoading}
511511
/>
512512
</TableCell>
513-
</TableRow>
513+
</TableRow> */}
514514
<TableRow className={tableClasses.tableRow}>
515515
{/* Spacer */}
516516
<TableCell className={tableClasses.tableCell}>
@@ -595,7 +595,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
595595
</Select>
596596
</TableCell>
597597
</TableRow>
598-
<TableRow className={tableClasses.tableRow}>
598+
{/* <TableRow className={tableClasses.tableRow}>
599599
<TableCell className={tableClasses.tableCell}>
600600
<Typography className={tableClasses.labelText}>Cluster Geometry Field ID</Typography>
601601
</TableCell>
@@ -611,7 +611,7 @@ function Photogrammetry(props: PhotogrammetryProps): React.ReactElement {
611611
disabled={ingestionLoading}
612612
/>
613613
</TableCell>
614-
</TableRow>
614+
</TableRow> */}
615615
<TableRow className={tableClasses.tableRow} style={{ height: '26px' }}>
616616
<TableCell className={tableClasses.tableCell}>
617617
<Typography className={tableClasses.labelText}>Camera Settings Uniform</Typography>

client/src/pages/Repository/components/DetailsView/DetailsTab/CaptureDataDetails.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
311311
</TableRow>
312312
}
313313

314-
<TableRow className={classes.tableRow}>
314+
{/* <TableRow className={classes.tableRow}>
315315
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
316316
<Typography className={classes.labelText}>Dataset Field ID</Typography>
317317
</TableCell>
@@ -329,7 +329,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
329329
style={{ ...updatedFieldStyling(isFieldUpdated(CaptureDataDetails, captureDataData, 'datasetFieldId')) }}
330330
/>
331331
</TableCell>
332-
</TableRow>
332+
</TableRow> */}
333333

334334
<TableRow className={classes.tableRow}>
335335
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
@@ -395,7 +395,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
395395
</Select>
396396
</TableCell>
397397
</TableRow>
398-
<TableRow className={classes.tableRow}>
398+
{/* <TableRow className={classes.tableRow}>
399399
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
400400
<Typography className={classes.labelText}>Item Position Field ID</Typography>
401401
</TableCell>
@@ -412,8 +412,8 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
412412
style={{ ...updatedFieldStyling(isFieldUpdated(CaptureDataDetails, captureDataData, 'itemPositionFieldId')) }}
413413
/>
414414
</TableCell>
415-
</TableRow>
416-
<TableRow className={classes.tableRow}>
415+
</TableRow> */}
416+
{/* <TableRow className={classes.tableRow}>
417417
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
418418
<Typography className={classes.labelText}>Item Arrangement Field ID</Typography>
419419
</TableCell>
@@ -430,7 +430,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
430430
style={{ ...updatedFieldStyling(isFieldUpdated(CaptureDataDetails, captureDataData, 'itemArrangementFieldId')) }}
431431
/>
432432
</TableCell>
433-
</TableRow>
433+
</TableRow> */}
434434

435435
<TableRow className={classes.tableRow}>
436436
{/* Spacer */}
@@ -523,7 +523,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
523523
</Select>
524524
</TableCell>
525525
</TableRow>
526-
<TableRow className={classes.tableRow}>
526+
{/* <TableRow className={classes.tableRow}>
527527
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
528528
<Typography className={classes.labelText}>Cluster Geometry Field ID</Typography>
529529
</TableCell>
@@ -540,7 +540,7 @@ function CaptureDataDetails(props: DetailComponentProps): React.ReactElement {
540540
style={{ ...updatedFieldStyling(isFieldUpdated(CaptureDataDetails, captureDataData, 'clusterGeometryFieldId')) }}
541541
/>
542542
</TableCell>
543-
</TableRow>
543+
</TableRow> */}
544544
<TableRow className={classes.tableRow} style={{ height: '26px' }}>
545545
<TableCell className={clsx(classes.tableCell, classes.fieldLabel)}>
546546
<Typography className={classes.labelText}>Camera Settings Uniform</Typography>

server/auth/AuthRouter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ AuthRouter.post('/login', (request: Request, response: Response, next: NextFunct
2020

2121
AuthRouter.get('/logout', (request: Request, response: Response) => {
2222
request['logout'](err => {
23-
LOG.error('Auth logout', LOG.LS.eSYS, err);
23+
LOG.info(`AuthRouter.post: User logged out ${err ? '('+err+')': ''}`, LOG.LS.eSYS);
2424
});
2525
response.send({ success: true });
2626
});

server/cache/VocabularyCache.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,6 @@ export class VocabularyCache {
603603

604604
static async mapPhotogrammetryVariantType(variantType: string): Promise<Vocabulary | undefined> {
605605
const variant = variantType.toLowerCase().replace(/_/g, '');
606-
console.log('>>>> variant result: ',variant);
607606

608607
let eVocabID: COMMON.eVocabularyID;
609608
switch (variant) {
@@ -630,7 +629,7 @@ export class VocabularyCache {
630629
case 'mask': eVocabID = COMMON.eVocabularyID.eCaptureDataFileVariantTypeMasks; break;
631630
default: return undefined;
632631
}
633-
console.log('>>>> variant result: ',variant,eVocabID,VocabularyCache.vocabularyByEnum(eVocabID));
632+
LOG.info(`variant result (${variant} | ${eVocabID} | ${VocabularyCache.vocabularyByEnum(eVocabID)}`,LOG.LS.eDEBUG);
634633
return await VocabularyCache.vocabularyByEnum(eVocabID);
635634
}
636635

server/db/api/CaptureData.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,27 @@ export class CaptureData extends DBC.DBObject<CaptureDataBase> implements Captur
104104
return null;
105105
}
106106
}
107+
static async fecthFromModel(idModel: number): Promise<CaptureData[] | null> {
108+
109+
if (!idModel)
110+
return null;
111+
try {
112+
return DBC.CopyArray<CaptureDataBase, CaptureData>(
113+
await DBC.DBConnection.prisma.$queryRaw<CaptureData[]>`
114+
SELECT DISTINCT cd.*
115+
FROM Model AS m
116+
JOIN SystemObject AS mSO ON (mSO.idModel=m.idModel)
117+
JOIN SystemObjectXref AS mSOX ON (mSOX.idSystemObjectDerived=mSO.idSystemObject)
118+
JOIN SystemObject AS cdSO ON (cdSO.idSystemObject=mSOX.idSystemObjectMaster AND cdSO.idCaptureData IS NOT NULL)
119+
JOIN CaptureData AS cd ON (cd.idCaptureData=cdSO.idCaptureData)
120+
WHERE m.idModel=${idModel};`, CaptureData);
121+
} catch (error) /* istanbul ignore next */ {
122+
LOG.error('DBAPI.CaptureData.fetchFromModel', LOG.LS.eDB, error);
123+
return null;
124+
}
125+
126+
return null;
127+
}
107128

108129
static async fetchFromXref(idCaptureDataGroup: number): Promise<CaptureData[] | null> {
109130
if (!idCaptureDataGroup)

server/db/api/Model.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,15 +235,15 @@ export class Model extends DBC.DBObject<ModelBase> implements ModelBase, SystemO
235235
if (!idSystemObject)
236236
return null;
237237
try {
238-
const scenes: Model[] | null = DBC.CopyArray<ModelBase, Model>(
238+
const models: Model[] | null = DBC.CopyArray<ModelBase, Model>(
239239
await DBC.DBConnection.prisma.$queryRaw<Model[]>`
240240
SELECT * FROM Model AS mdl
241241
JOIN SystemObject AS so ON (mdl.idModel = so.idModel)
242242
WHERE so.idSystemObject = ${idSystemObject};`, Model);
243243

244-
// if we have scenes just return the first one, else null
245-
if(scenes)
246-
return scenes[0];
244+
// if we have models just return the first one, else null
245+
if(models)
246+
return models[0];
247247

248248
return null;
249249
} catch (error) /* istanbul ignore next */ {

0 commit comments

Comments
 (0)