package vn.azteam.tpf.web.rest; import com.codahale.metrics.annotation.Timed; import io.github.jhipster.service.filter.LongFilter; import org.springframework.transaction.annotation.Transactional; import vn.azteam.tpf.service.*; import vn.azteam.tpf.service.dto.*; import vn.azteam.tpf.web.rest.errors.BadRequestAlertException; import vn.azteam.tpf.web.rest.util.HeaderUtil; import vn.azteam.tpf.web.rest.util.PaginationUtil; import io.github.jhipster.web.util.ResponseUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import vn.azteam.tpf.service.util.UserRoleUtil; import java.net.URI; import java.net.URISyntaxException; import java.util.List; import java.util.Optional; /** * REST controller for managing TBStockUpdate. */ @RestController @RequestMapping("/api") public class TBStockUpdateResource { private final Logger log = LoggerFactory.getLogger(TBStockUpdateResource.class); private static final String ENTITY_NAME = "tBStockUpdate"; private final TBStockUpdateService tBStockUpdateService; private final TBStockUpdateQueryService tBStockUpdateQueryService; private final UserRoleUtil userRoleUtil; private final UserService userService; private final TBSuppliesService tBSuppliesService; private final TBSuppliesInWarehouseQueryService tBSuppliesInWarehouseQueryService; private final TBSuppliesUsingDetailsService tbSuppliesUsingDetailsService; private final TBSuppliesUsingDetailsQueryService tbSuppliesUsingDetailsQueryService; private final TBSuppliesInWarehouseService tBSuppliesInWarehouseService; public TBStockUpdateResource(TBStockUpdateService tBStockUpdateService, TBStockUpdateQueryService tBStockUpdateQueryService, UserRoleUtil userRoleUtil, UserService userService, TBSuppliesService tBSuppliesService, TBSuppliesInWarehouseQueryService tBSuppliesInWarehouseQueryService, TBSuppliesUsingDetailsService tbSuppliesUsingDetailsService, TBSuppliesUsingDetailsQueryService tbSuppliesUsingDetailsQueryService, TBSuppliesInWarehouseService tBSuppliesInWarehouseService) { this.tBStockUpdateService = tBStockUpdateService; this.tBStockUpdateQueryService = tBStockUpdateQueryService; this.userRoleUtil = userRoleUtil; this.userService = userService; this.tBSuppliesService = tBSuppliesService; this.tBSuppliesInWarehouseQueryService = tBSuppliesInWarehouseQueryService; this.tbSuppliesUsingDetailsService = tbSuppliesUsingDetailsService; this.tbSuppliesUsingDetailsQueryService = tbSuppliesUsingDetailsQueryService; this.tBSuppliesInWarehouseService = tBSuppliesInWarehouseService; } /** * POST /tb-stock-updates : Create a new tBStockUpdate. * * @param tBStockUpdateDTO the tBStockUpdateDTO to create * @return the ResponseEntity with status 201 (Created) and with body the new tBStockUpdateDTO, or with status 400 (Bad Request) if the tBStockUpdate has already an ID * @throws URISyntaxException if the Location URI syntax is incorrect */ @PostMapping("/tb-stock-updates") @Timed public ResponseEntity createTBStockUpdate(@RequestBody TBStockUpdateDTO tBStockUpdateDTO) throws URISyntaxException { log.debug("REST request to save TBStockUpdate : {}", tBStockUpdateDTO); if (tBStockUpdateDTO.getId() != null) { throw new BadRequestAlertException("A new tBStockUpdate cannot already have an ID", ENTITY_NAME, "idexists"); } TBStockUpdateDTO result = tBStockUpdateService.save(tBStockUpdateDTO); return ResponseEntity.created(new URI("/api/tb-stock-updates/" + result.getId())) .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())) .body(result); } /** * PUT /tb-stock-updates : Updates an existing tBStockUpdate. * * @param tBStockUpdateDTO the tBStockUpdateDTO to update * @return the ResponseEntity with status 200 (OK) and with body the updated tBStockUpdateDTO, * or with status 400 (Bad Request) if the tBStockUpdateDTO is not valid, * or with status 500 (Internal Server Error) if the tBStockUpdateDTO couldn't be updated * @throws URISyntaxException if the Location URI syntax is incorrect */ @PutMapping("/tb-stock-updates") @Timed public ResponseEntity updateTBStockUpdate(@RequestBody TBStockUpdateDTO tBStockUpdateDTO) throws URISyntaxException { log.debug("REST request to update TBStockUpdate : {}", tBStockUpdateDTO); if (tBStockUpdateDTO.getId() == null) { throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); } TBStockUpdateDTO result = tBStockUpdateService.save(tBStockUpdateDTO); return ResponseEntity.ok() .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, tBStockUpdateDTO.getId().toString())) .body(result); } /** * GET /tb-stock-updates : get all the tBStockUpdates. * * @param pageable the pagination information * @param criteria the criterias which the requested entities should match * @return the ResponseEntity with status 200 (OK) and the list of tBStockUpdates in body */ @GetMapping("/tb-stock-updates") @Timed public ResponseEntity> getAllTBStockUpdates(TBStockUpdateCriteria criteria, Pageable pageable) { log.debug("REST request to get TBStockUpdates by criteria: {}", criteria); Page page = tBStockUpdateQueryService.findByCriteria(criteria, pageable); HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/tb-stock-updates"); return ResponseEntity.ok().headers(headers).body(page.getContent()); } /** * GET /tb-stock-updates/count : count all the tBStockUpdates. * * @param criteria the criterias which the requested entities should match * @return the ResponseEntity with status 200 (OK) and the count in body */ @GetMapping("/tb-stock-updates/count") @Timed public ResponseEntity countTBStockUpdates(TBStockUpdateCriteria criteria) { log.debug("REST request to count TBStockUpdates by criteria: {}", criteria); return ResponseEntity.ok().body(tBStockUpdateQueryService.countByCriteria(criteria)); } /** * GET /tb-stock-updates/:id : get the "id" tBStockUpdate. * * @param id the id of the tBStockUpdateDTO to retrieve * @return the ResponseEntity with status 200 (OK) and with body the tBStockUpdateDTO, or with status 404 (Not Found) */ @GetMapping("/tb-stock-updates/{id}") @Timed public ResponseEntity getTBStockUpdate(@PathVariable Long id) { log.debug("REST request to get TBStockUpdate : {}", id); Optional tBStockUpdateDTO = tBStockUpdateService.findOne(id); return ResponseUtil.wrapOrNotFound(tBStockUpdateDTO); } /** * DELETE /tb-stock-updates/:id : delete the "id" tBStockUpdate. * * @param id the id of the tBStockUpdateDTO to delete * @return the ResponseEntity with status 200 (OK) */ @DeleteMapping("/tb-stock-updates/{id}") @Timed @Transactional(readOnly = false) public ResponseEntity deleteTBStockUpdate(@PathVariable Long id) { log.debug("REST request to delete TBStockUpdate : {}", id); TBStockUpdateDTO tBStockUpdateDTO = tBStockUpdateService.findOne(id).get(); tBStockUpdateService.delete(id); TBSuppliesUsingDetailsCriteria criteria = new TBSuppliesUsingDetailsCriteria(); LongFilter tbSuppliesInWarehouseIdFilter = new LongFilter(); tbSuppliesInWarehouseIdFilter.setEquals(tBStockUpdateDTO.getTbSuppliesInWarehouseId()); criteria.setTbSuppliesInWarehouseId(tbSuppliesInWarehouseIdFilter); LongFilter tbActivityIdFilter = new LongFilter(); tbActivityIdFilter.setEquals(tBStockUpdateDTO.getTbActivityId()); criteria.setTbActivityId(tbActivityIdFilter); LongFilter tbBlockDetailsIdFilter = new LongFilter(); tbBlockDetailsIdFilter.setEquals(tBStockUpdateDTO.getTbBlockDetailsId()); criteria.setTbBlockDetailsId(tbBlockDetailsIdFilter); List tbSuppliesUsingDetailsDTOs = tbSuppliesUsingDetailsQueryService.findByCriteria(criteria); if(tbSuppliesUsingDetailsDTOs != null && tbSuppliesUsingDetailsDTOs.size() > 0) { TBSuppliesUsingDetailsDTO tbSuppliesUsingDetailsDTO = tbSuppliesUsingDetailsDTOs.get(0); tbSuppliesUsingDetailsService.delete(tbSuppliesUsingDetailsDTO.getId()); } tBSuppliesInWarehouseQueryService.updateQuantityForTBSuppliesInWarehouseDTO(tBStockUpdateDTO.getTbSuppliesInWarehouseId()); TBSuppliesInWarehouseDTO tbSuppliesInWarehouseDTO = tBSuppliesInWarehouseService.findOne(tBStockUpdateDTO.getTbSuppliesInWarehouseId()).get(); tBSuppliesInWarehouseQueryService.updateQuantityForTBBlockDetailsDTO(tBStockUpdateDTO.getTbSuppliesInWarehouseId(), tBStockUpdateDTO.getTbBlockDetailsId(), tbSuppliesInWarehouseDTO.getTbSuppliesId()); return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id.toString())).build(); } /** * SEARCH /_search/tb-stock-updates?query=:query : search for the tBStockUpdate corresponding * to the query. * * @param query the query of the tBStockUpdate search * @param pageable the pagination information * @return the result of the search */ @GetMapping("/_search/tb-stock-updates") @Timed public ResponseEntity> searchTBStockUpdates(@RequestParam String query, Pageable pageable) { log.debug("REST request to search for a page of TBStockUpdates for query {}", query); Page page = tBStockUpdateService.search(query, pageable); HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, "/api/_search/tb-stock-updates"); return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } @GetMapping("/historySupplies/{suppliesId}") @Timed public ResponseEntity> historySupplies(@PathVariable String suppliesId, TBStockUpdateCriteria criteria, Pageable pageable) { log.debug("REST request to get TBSupplies by criteria: {}", criteria); Long suppliesIdLong; suppliesIdLong = Long.parseLong(suppliesId); if (suppliesId == null){ throw new BadRequestAlertException("Invalid suppliesId", ENTITY_NAME, "idnull"); } //@CUONGLT - Filter scope customer's data UserDTO currentUser = userService.getCurrentUserDTO().get(); Optional suppliesDTO = tBSuppliesService.findOne(suppliesIdLong); if (currentUser.getCustomerId() != null && suppliesDTO.get().getTbCustomerId() != null && currentUser.getCustomerId() != suppliesDTO.get().getTbCustomerId()){ throw new BadRequestAlertException("1013", ENTITY_NAME, "1013"); } Page page = tBStockUpdateQueryService.getHistoryTBStockUpdate(criteria, pageable, suppliesIdLong); HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/historySupplies"); return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); } }