Index: grails-app/services/com/lemans/ds/flag/FlagValueManagerService.groovy =================================================================== diff -u -reac1ffa6958791ce4f9ebefae73824155025cb66 -r8504acad0b23d04cec31def961c671b6f5899021 --- grails-app/services/com/lemans/ds/flag/FlagValueManagerService.groovy (.../FlagValueManagerService.groovy) (revision eac1ffa6958791ce4f9ebefae73824155025cb66) +++ grails-app/services/com/lemans/ds/flag/FlagValueManagerService.groovy (.../FlagValueManagerService.groovy) (revision 8504acad0b23d04cec31def961c671b6f5899021) @@ -104,7 +104,7 @@ flagIds - flagValueService.existingFlagIdsForEntityId(flagIds, entityId) } - private void deleteFlagValues(List flagIds, String entityId, List errors, String username) { + void deleteFlagValues(List flagIds, String entityId, List errors, String username) { FlagValue.withTransaction { status -> flagIds.each { Integer flagId -> FlagValue flagValue = findFlagValue(entityId, flagId) Index: grails-app/services/com/lemans/ds/qualitycontrol/PartReviewManagerService.groovy =================================================================== diff -u -r8711e6e33713ce2120df611ca5dcfb08468ec903 -r8504acad0b23d04cec31def961c671b6f5899021 --- grails-app/services/com/lemans/ds/qualitycontrol/PartReviewManagerService.groovy (.../PartReviewManagerService.groovy) (revision 8711e6e33713ce2120df611ca5dcfb08468ec903) +++ grails-app/services/com/lemans/ds/qualitycontrol/PartReviewManagerService.groovy (.../PartReviewManagerService.groovy) (revision 8504acad0b23d04cec31def961c671b6f5899021) @@ -43,19 +43,32 @@ [messages: [[type: 'error', text: 'Some or All of the changes have already been approved, please refresh to get the latest changes']]] } else { qcChangeLogService.approveOrDeclineChangeLog(changeLogIds, 13002, username) //Approved + List parentEntityIds = qcChangeLogService.getParentEntityIds(changeLogIds) + if (13002 && qcChangeLogService.hasAllChangeLogsApproved(parentEntityIds)) { + parentEntityIds.collect { String partNumber -> + qcChangeLogService.deleteQCPriorityFlag(partNumber, 'Part', 19001, username) + } + } qcRejectionLogService.insertOrUpdateMessage(changeLogIds, '', '', username, 'Part') } } Map approveByPartNumber(String partNumber, String username) { List changeLogIds = sql().rows([partNumber: partNumber], QC_LOGS_QUERY)*.changeLogId - changeLogIds ? approveByChangeLogIds(changeLogIds, username) : [messages: [[type: 'error', text: 'partNumber has no changes to be approved']]] + if (changeLogIds) { + approveByChangeLogIds(changeLogIds, username) + qcChangeLogService.deleteQCPriorityFlag(partNumber, 'Part', 19001, username) + return [:] + } else { + return [messages: [[type: 'error', text: 'partNumber has no changes to be approved']]] + } } Map approveByPartNumberAndEmail(String partNumber, String username) { List changeLogIds = sql().rows([partNumber: partNumber], QC_LOGS_QUERY)*.changeLogId if (changeLogIds) { approveByChangeLogIds(changeLogIds, username) + qcChangeLogService.deleteQCPriorityFlag(partNumber, 'Part', 19001, username) sendEmail(partNumber, changeLogIds, username) } } @@ -151,8 +164,7 @@ FROM qc.vwChangeLog cl WITH(NOLOCK) WHERE - cl.changeLogId IN (${changeLogIds.join(', ')}) - AND cl.approvalStatusId IN (${statuses.join(', ')}) + cl.changeLogId IN (${changeLogIds.join(', ')}) AND cl.approvalStatusId IN (${statuses.join(', ')}) """ sql().firstRow(query)?.count } Index: grails-app/services/com/lemans/ds/qualitycontrol/ProductReviewManagerService.groovy =================================================================== diff -u -rd3058168e345aba9287766f8cb45c76cd753d848 -r8504acad0b23d04cec31def961c671b6f5899021 --- grails-app/services/com/lemans/ds/qualitycontrol/ProductReviewManagerService.groovy (.../ProductReviewManagerService.groovy) (revision d3058168e345aba9287766f8cb45c76cd753d848) +++ grails-app/services/com/lemans/ds/qualitycontrol/ProductReviewManagerService.groovy (.../ProductReviewManagerService.groovy) (revision 8504acad0b23d04cec31def961c671b6f5899021) @@ -37,18 +37,31 @@ void approveByChangeLogIds(List changeLogIds, String username) { qcChangeLogService.approveOrDeclineChangeLog(changeLogIds.unique(), 13002, username) //Approved + List parentEntityIds = qcChangeLogService.getParentEntityIds(changeLogIds) + if (13002 && qcChangeLogService.hasAllChangeLogsApproved(parentEntityIds)) { + parentEntityIds.collect { String productId -> + qcChangeLogService.deleteQCPriorityFlag(productId, 'Product', 19003, username) + } + } qcRejectionLogService.insertOrUpdateMessage(changeLogIds, '', '', username, 'Product') } Map approveByProductId(Integer productId, String username) { List changeLogIds = sql().rows([productId: productId], QC_LOGS_QUERY)*.changeLogId - changeLogIds ? approveByChangeLogIds(changeLogIds, username) : [messages: [[type: 'error', text: 'productId has no changes to be approved']]] + if (changeLogIds) { + approveByChangeLogIds(changeLogIds, username) + qcChangeLogService.deleteQCPriorityFlag(productId, 'Product', 19003, username) + return [:] + } else { + return [messages: [[type: 'error', text: 'productId has no changes to be approved']]] + } } Map approveByProductIdAndEmail(Integer productId, String username) { List changeLogIds = sql().rows([productId: productId], QC_LOGS_QUERY)*.changeLogId if (changeLogIds) { approveByChangeLogIds(changeLogIds, username) + qcChangeLogService.deleteQCPriorityFlag(productId, 'Product', 19003, username) sendEmail(productId, changeLogIds, username) } } Index: grails-app/services/com/lemans/ds/qualitycontrol/QcChangeLogService.groovy =================================================================== diff -u -rdc37e548f64e258d31f0b1c7c0955446009f4f0a -r8504acad0b23d04cec31def961c671b6f5899021 --- grails-app/services/com/lemans/ds/qualitycontrol/QcChangeLogService.groovy (.../QcChangeLogService.groovy) (revision dc37e548f64e258d31f0b1c7c0955446009f4f0a) +++ grails-app/services/com/lemans/ds/qualitycontrol/QcChangeLogService.groovy (.../QcChangeLogService.groovy) (revision 8504acad0b23d04cec31def961c671b6f5899021) @@ -1,5 +1,7 @@ package com.lemans.ds.qualitycontrol +import com.lemans.ds.flag.FlagService +import com.lemans.ds.flag.FlagValueManagerService import com.lemans.services.LemansManager import grails.transaction.Transactional @@ -12,7 +14,10 @@ @SuppressWarnings(['ClosureAsLastMethodParameter', 'BuilderMethodWithSideEffects', 'CyclomaticComplexity', 'ParameterCount', 'MethodCount', 'AbcMetric']) class QcChangeLogService extends LemansManager { + FlagService flagService + FlagValueManagerService flagValueManagerService + QcConfigService qcConfigService private static final String CHANGE_LOG_INSERT_SQL = ''' @@ -410,6 +415,34 @@ } } + void deleteQCPriorityFlag(String entity, String entityClass, Integer flagTypeId, String username) { + Integer flagId = flagService.findFlags([entityClass: entityClass, flagTypeId: flagTypeId, flagName: ['QC Priority']])?.results[0]?.flagId + flagValueManagerService.deleteFlagValues([flagId], entity, [], username) + } + + List getParentEntityIds(List changeLogIds) { + sql().rows(""" + SELECT + DISTINCT parentEntityId + FROM qc.vwChangeLog cl WITH(NOLOCK) + WHERE + cl.changeLogId IN ('${changeLogIds.join("', '")}') + AND cl.dateDeleted IS NULL + """)*.parentEntityId + } + + Boolean hasAllChangeLogsApproved(List parentEntityIds) { + List hasAllApproved = sql().rows( + """SELECT + cl.* + FROM qc.changeLog cl WITH(NOLOCK) + WHERE + cl.parentEntityId in ('${parentEntityIds.join("', '")}') + AND cl.approvalStatusId <> 13002 + AND cl.dateDeleted IS NULL""")*.changeLogId + hasAllApproved.size() <= 0 + } + private List findAllChangeLogsByEntityIds(List entityIds, List entityNames) { if (entityIds) { String query = """