Index: grails-app/services/com/lemans/ds/qualitycontrol/PartReviewService.groovy =================================================================== diff -u -r30c8ef6ff9ee481867a02db5f9d4e556e23ff569 -r7d609c92ec4d4d563fa5e040f860315da701ab19 --- grails-app/services/com/lemans/ds/qualitycontrol/PartReviewService.groovy (.../PartReviewService.groovy) (revision 30c8ef6ff9ee481867a02db5f9d4e556e23ff569) +++ grails-app/services/com/lemans/ds/qualitycontrol/PartReviewService.groovy (.../PartReviewService.groovy) (revision 7d609c92ec4d4d563fa5e040f860315da701ab19) @@ -39,17 +39,17 @@ WHERE p.partNumber = :partNumber ''' - private static final String PART_REJECTION_QUERY = ''' - SELECT - rl.rejectionMessage, - rl.jiraId -FROM - QC.RejectionLog rl WITH(NOLOCK) -WHERE - rl.parentEntityId = :partNumber - And rl.parentEntity = 'Part' - And rl.qcChangeGroupId = :qcChangeGroupId + SELECT + rl.rejectionMessage, + rl.jiraId +FROM qc.RejectionLog rl WITH(NOLOCK) + inner join Common.dbo.TypeXref tx WITH(NOLOCK) + on rl.qcChangeGroupId = tx.typeId and tx.type='Part QC Change Group' +WHERE + rl.parentEntity = 'Part' + AND rl.parentEntityId = :partNumber + And tx.typeDisplayName = :qcChangeGroupId ''' private static final String PART_GLOBAL_REJECTION_QUERY = ''' SELECT @@ -854,7 +854,6 @@ QCDetailsResponse partDetails(String partNumber) { List qcPartDetails = sql().rows([partNumber: partNumber], PART_DETAILS_QC) Map partDetails = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber], PART_DETAILS)) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51000], PART_REJECTION_QUERY)) Map globalRejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber], PART_GLOBAL_REJECTION_QUERY)) Map qcPartDetailsByField = morphedPartDetails(qcPartDetails?.groupBy { it.entityField }, partDetails) @@ -867,7 +866,14 @@ new QCDetailsEntity([key: k, value: v] + entity) } - new QCDetailsResponse(mergedData, rejectionMessage, globalRejectionMessage) + QCDetailsResponse response = new QCDetailsResponse(mergedData, null, globalRejectionMessage) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Details"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } private Map morphedPartDetails(Map qcLogsByField, Map partDetails) { @@ -890,7 +896,6 @@ List partMedia = sql().rows([partNumber: partNumber], PART_MEDIA) Integer partPrimaryMediaId = sql().firstRow([partNumber: partNumber], PART_DETAILS_FOR_MEDIA)?.primaryMediaId List qcPartDetails = sql().rows([partNumber: partNumber], PART_MEDIA_QC) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51003], PART_REJECTION_QUERY)) Map qcPartDetailsByMediaEntityId = qcPartDetails.groupBy { it.mediaEntityId } @@ -910,14 +915,20 @@ new QCMediaEntity(it + [entities: [it, (wasPrimary ? partPrimaryMediaIdQC : [:])].findAll(), wasPrimary: wasPrimary]) } - new QCHolderResponse(mergedParts, rejectionMessage) + QCHolderResponse response = new QCHolderResponse(mergedParts, null) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Media"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } QCRelatedResponse relatedParts(String partNumber) { List relatedParts = sql().rows([partNumber: partNumber], RELATED_PARTS) List partAssociationTypes = sql().rows(PART_ASSOCIATION_TYPES) List qcPartDetails = sql().rows([partNumber: partNumber], RELATED_PARTS_QC) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51006], PART_REJECTION_QUERY)) Map qcPartDetailsByRelatedPartNumber = qcPartDetails.groupBy({ it.relatedPartNumber }, { it.associationTypeId }) @@ -926,7 +937,14 @@ new QCPartAssociation(it + (qcPartDetailsByRelatedPartNumber.getAt(it.relatedPartNumber)?.getAt(it.associationTypeId)?.first() ?: [:])) } + qcPartDetails.findAll { it.entityField == 'dateDeleted' }.collect { new QCPartAssociation(it) } - new QCRelatedResponse(mergedParts, partAssociationTypes, rejectionMessage) + QCRelatedResponse response = new QCRelatedResponse(mergedParts, partAssociationTypes, null) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Related Parts"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } QCPartAttributeResponse partAttributes(String partNumber) { @@ -935,7 +953,6 @@ completableFuture(partNumber, CATEGORY_ATTRIBUTE_NAMES), completableFuture(partNumber, PART_ATTRIBUTE_QC) ] - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51004], PART_REJECTION_QUERY)) def (partAttributeValues, categoryAttributeNames, partAttributesQC) = futures.parallelStream().map { it.join() }.collect(Collectors.toList()) @@ -945,13 +962,20 @@ new QCPartAttribute(it + (partAttributesQCByAttributeValue?.getAt(it.attributeNameId)?.getAt(it.attributeValueId)?.first() ?: [:])) } + partAttributesQC.findAll { it.entityField == 'dateDeleted' }.collect { new QCPartAttribute(it) } - new QCPartAttributeResponse(categoryAttributeNames + QCPartAttributeResponse response = new QCPartAttributeResponse(categoryAttributeNames .sort { it.dateDeleted } .unique(false) { a, b -> a.categoryId <=> b.categoryId ?: a.attributeNameId <=> b.attributeNameId } .collect { row -> row.remove('dateDeleted') row - }, mergedPartAttributes, rejectionMessage) + }, mergedPartAttributes, null) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Attributes & Values"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } QCPartFitmentResponse partFitments(String partNumber) { @@ -964,9 +988,7 @@ completableFuture(partNumber, PART_FITMENT_YEAR_POSITIONS_QC) ] def (years, fitmentPositions, models, makes, qcYears, qcFitmentPositions) = futures.parallelStream().map { it.join() }.collect(Collectors.toList()) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51005], PART_REJECTION_QUERY)) - Map qcFitmentsByYear = qcYears.groupBy({ it.modelId }, { it.year }) List mergedPartFitmentYears = years.collect { List entities = qcFitmentsByYear?.getAt(it.modelId)?.getAt(it.year) @@ -984,27 +1006,41 @@ year } - QCPartFitmentResponse qcPartFitmentResponse = new QCPartFitmentResponse(makes, models, yearsWithPositions, rejectionMessage) + QCPartFitmentResponse qcPartFitmentResponse = new QCPartFitmentResponse(makes, models, yearsWithPositions, null) + + if("R" == qcPartFitmentResponse?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Fitment"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + qcPartFitmentResponse.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + log.error("QC Part Fitment ChangeLogs: ${partNumber} : ${qcPartFitmentResponse.changeLogIds}") qcPartFitmentResponse } OEMQCResponse oemParts(String partNumber) { List oemParts = sql().rows([partNumber: partNumber], OEM_PARTS) List qcOemParts = sql().rows([partNumber: partNumber], QC_OEM_PARTS) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51001], PART_REJECTION_QUERY)) Map groupedParts = qcOemParts.groupBy { it.oemPartId } List mergedOEMParts = oemParts.collect { new QCOEMPart(it + (groupedParts[it?.oemPartId]?.first() ?: [:])) } + qcOemParts.findAll { it.entityField == 'dateDeleted' }.collect { new QCOEMPart(it) } - new OEMQCResponse(mergedOEMParts, rejectionMessage) + OEMQCResponse response = new OEMQCResponse(mergedOEMParts, null) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "OEM Part Numbers"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } QCHolderResponse certificationParts(String partNumber) { List certificationParts = sql().rows([partNumber: partNumber], CERTIFICATION_PARTS) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51000], PART_REJECTION_QUERY)) + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Details"], PART_REJECTION_QUERY)) List qcCertifications = certificationParts.collect { String clobDataUS = (it.certificationUS != null) ? it.certificationUS.asciiStream.text : null; @@ -1017,13 +1053,19 @@ QCResponse partKeywords(String partNumber) { List partKeywords = sql().rows([partNumber: partNumber], PART_KEYWORDS) List qcPartKeywords = sql().rows([partNumber: partNumber], QC_PART_KEYWORDS) - Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: 51002], PART_REJECTION_QUERY)) Map groupedParts = qcPartKeywords.groupBy { it.keywordId } List mergedPartKeywords = partKeywords.collect { new QCPartKeyword(it + (groupedParts[it?.keywordId]?.first() ?: [:])) } + qcPartKeywords.findAll { it.entityField == 'dateDeleted' }.collect { new QCPartKeyword(it) } - new QCResponse(mergedPartKeywords, rejectionMessage) + QCResponse response = new QCResponse(mergedPartKeywords, null) + if("R" == response?.statusCode) { + Map rejectionMessage = partService.transformMetadataClobToText(sql().firstRow([partNumber: partNumber, qcChangeGroupId: "Keywords"], PART_REJECTION_QUERY)) + if(rejectionMessage?.rejectionMessage) { + response.rejectionMessage = rejectionMessage?.rejectionMessage + } + } + response } private CompletableFuture completableFuture(String partNumber, String query) {