Index: grails-app/controllers/com/lemans/UrlMappings.groovy =================================================================== diff -u -r35d9f7f81e3f3e8faea2cedf72267014da01a7fb -radf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b --- grails-app/controllers/com/lemans/UrlMappings.groovy (.../UrlMappings.groovy) (revision 35d9f7f81e3f3e8faea2cedf72267014da01a7fb) +++ grails-app/controllers/com/lemans/UrlMappings.groovy (.../UrlMappings.groovy) (revision adf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b) @@ -729,11 +729,12 @@ //CatalogProduct - "/dm/$dm/catalogProduct"(controller: 'catalogProduct') { + "/dm/$dm/catalogInstance/$catalogInstanceId/product"(controller: 'catalogProduct') { action = [GET: 'index', POST: 'add'] } - "/dm/$dm/catalogProduct/$catalogProductId"(controller: 'catalogProduct') { - action = [GET: 'show', PUT: 'update', DELETE: 'remove'] + + "/dm/$dm/catalogInstance/$catalogInstanceId/product/$productId"(controller: 'catalogProduct') { + action = [GET: 'view', DELETE: 'remove'] } //PartFitmentTentative Index: grails-app/controllers/com/lemans/ds/catalog/CatalogProductController.groovy =================================================================== diff -u -r7a4664678132b2175b247d3a862a3705681f5160 -radf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b --- grails-app/controllers/com/lemans/ds/catalog/CatalogProductController.groovy (.../CatalogProductController.groovy) (revision 7a4664678132b2175b247d3a862a3705681f5160) +++ grails-app/controllers/com/lemans/ds/catalog/CatalogProductController.groovy (.../CatalogProductController.groovy) (revision adf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b) @@ -17,25 +17,30 @@ renderOne catalogProductManagerService.findCatalogProductById(catalogProductId) } - def add() { + def view(Integer catalogInstanceId, Integer productId) { + renderOne catalogProductManagerService.findByCatalogAndProduct(catalogInstanceId, productId); + } + + def add(Integer catalogInstanceId) { Map values = request.JSON + values.catalogInstanceId = catalogInstanceId List errors = validate(values) if (errors) { renderErrors(errors) } else { CatalogProduct catalogProduct = catalogProductManagerService.createCatalogProductAssociation(values, auditUserName) - renderObject catalogProduct + if(catalogProduct.hasErrors()) { + errors.addAll(catalogProduct.errors.getAllErrors()*.defaultMessage?.flatten()) + renderErrors(errors) + } else { + renderObject catalogProduct + } } - } - def update(Integer catalogProductId) { - Map values = request.JSON - CatalogProduct catalogProduct = catalogProductManagerService.updateCatalogProductAssociation(values, catalogProductId, auditUserName) - renderObject catalogProduct } - def remove(Integer catalogProductId) { - CatalogProduct catalogProduct = catalogProductManagerService.deleteCatalogProductAssociation(catalogProductId, auditUserName) + def remove(Integer catalogInstanceId, Integer productId) { + CatalogProduct catalogProduct = catalogProductManagerService.deleteCatalogProductAssociation(catalogInstanceId, productId, auditUserName) renderDelete catalogProduct } Index: grails-app/services/com/lemans/ds/catalog/CatalogProductManagerService.groovy =================================================================== diff -u -r7a4664678132b2175b247d3a862a3705681f5160 -radf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b --- grails-app/services/com/lemans/ds/catalog/CatalogProductManagerService.groovy (.../CatalogProductManagerService.groovy) (revision 7a4664678132b2175b247d3a862a3705681f5160) +++ grails-app/services/com/lemans/ds/catalog/CatalogProductManagerService.groovy (.../CatalogProductManagerService.groovy) (revision adf4fbe3994e8e6a6496a9e8a85ef3fc61ba952b) @@ -15,6 +15,10 @@ CatalogProduct.findByIdAndDateDeletedIsNull(catalogProductId) } + CatalogProduct findByCatalogAndProduct(Integer catalogInstanceId, Integer productId) { + CatalogProduct.findByCatalogInstanceIdAndProductId(catalogInstanceId, productId) + } + Map findCatalogProducts(Map criteria) { criteria.sorting = criteria.sorting ?: 'catalogProductId+ASC' dqx(criteria).executeFrom('dbo.CatalogProduct', clauses(criteria)) @@ -24,25 +28,17 @@ CatalogProduct catalogProduct = new CatalogProduct() applyValuesToDomain(values, catalogProduct) validateCatalogProduct(catalogProduct) - qcChangeLogService.createAndLogForQC('Catalog', values.catalogInstanceId.toString(), 'CatalogProduct', catalogProduct, username) - catalogProduct.save(flush: true) - return catalogProduct - } - - CatalogProduct updateCatalogProductAssociation(Map values, Integer catalogProductId, String username) { - CatalogProduct catalogProduct = CatalogProduct.findByIdAndDateDeletedIsNull(catalogProductId) - if (catalogProduct) { - applyValuesToDomain(values, catalogProduct) - validateCatalogProduct(catalogProduct) - qcChangeLogService.updateAndLogForQC('Catalog', catalogProduct.catalogInstanceId.toString(), 'CatalogProduct', catalogProduct, username) + if(catalogProduct.hasErrors()) { + catalogProduct.discard() + } else { + qcChangeLogService.createAndLogForQC('Catalog', values.catalogInstanceId.toString(), 'CatalogProduct', catalogProduct, username) catalogProduct.save(flush: true) } return catalogProduct } - - CatalogProduct deleteCatalogProductAssociation(Integer catalogProductId, String username) { - CatalogProduct catalogProduct = CatalogProduct.findByIdAndDateDeletedIsNull(catalogProductId) + CatalogProduct deleteCatalogProductAssociation(Integer catalogInstanceId, Integer productId, String username) { + CatalogProduct catalogProduct = CatalogProduct.findByCatalogInstanceIdAndProductId(catalogInstanceId, productId) if (catalogProduct) { qcChangeLogService.deleteAndLogForQC('Catalog', catalogProduct.catalogInstanceId.toString(), 'CatalogProduct', catalogProduct, username) catalogProduct.delete(flush: true) @@ -61,7 +57,6 @@ } if (CatalogProduct.countByProductIdAndCatalogInstanceId(catalogProduct.productId, catalogProduct.catalogInstanceId)) { catalogProduct.errors.rejectValue('productId', 'productId.invalid', 'Duplicate association') - catalogProduct.errors.rejectValue('catalogInstanceId', 'catalogInstanceId.invalid', 'Duplicate association') } }