319 lines
13 KiB
Plaintext
319 lines
13 KiB
Plaintext
package com.healthcare.ohctech.controller;
|
|
|
|
import com.healthcare.ohctech.dto.IndentMasterDto;
|
|
import com.healthcare.ohctech.entity.IndentMaster;
|
|
import com.healthcare.ohctech.entity.Item;
|
|
import com.healthcare.ohctech.entity.UnitMaster;
|
|
import com.healthcare.ohctech.repository.ItemRepo;
|
|
import com.healthcare.ohctech.repository.UnitMasterRepo;
|
|
import com.healthcare.ohctech.service.impl.AuthServiceImpl;
|
|
import com.healthcare.ohctech.service.impl.IndentMasterServiceImpl;
|
|
import com.healthcare.ohctech.util.PaginationUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.*;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
@RestController
|
|
@RequestMapping("/indents")
|
|
public class IndentMasterController {
|
|
|
|
@Autowired
|
|
private IndentMasterServiceImpl indentMasterServiceImpl;
|
|
|
|
@Autowired
|
|
private AuthServiceImpl authServiceImpl;
|
|
|
|
@Autowired
|
|
private ItemRepo itemRepo;
|
|
|
|
@Autowired
|
|
private UnitMasterRepo unitMasterRepo;
|
|
|
|
@GetMapping("/items/{itemId}")
|
|
public ResponseEntity<Map<String, Object>> getIndentItemById(@PathVariable Long itemId) {
|
|
IndentMasterDto.IndentItemDto itemDto = indentMasterServiceImpl.getIndentItemByItemId(itemId);
|
|
|
|
Map<String, Object> responseMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(itemId)
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
itemMap.put("id", itemId);
|
|
itemMap.put("label", itemName);
|
|
|
|
String unitName = unitMasterRepo.findById(itemDto.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> detailsMap = new LinkedHashMap<>();
|
|
detailsMap.put("currentStock", itemDto.details().currentStock());
|
|
detailsMap.put("reorderQty", itemDto.details().reorderQty());
|
|
detailsMap.put("unitName", unitName);
|
|
detailsMap.put("ratePerUnit", itemDto.details().ratePerUnit());
|
|
detailsMap.put("indentQty", itemDto.indentQty());
|
|
detailsMap.put("totalRate", itemDto.details().totalRate());
|
|
|
|
responseMap.put("item", itemMap);
|
|
responseMap.put("details", detailsMap);
|
|
|
|
return ResponseEntity.ok(responseMap);
|
|
}
|
|
|
|
|
|
@GetMapping("/items")
|
|
public ResponseEntity<List<Map<String, Object>>> getAllIndentsItems() {
|
|
List<IndentMasterDto.IndentItemDto> indentItems = indentMasterServiceImpl.getAllIndentsItems(new ArrayList<>());
|
|
|
|
List<Map<String, Object>> responseList = indentItems.stream().map(indentItem -> {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(indentItem.itemId())
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
String unitName = unitMasterRepo.findById(indentItem.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> item = new LinkedHashMap<>();
|
|
item.put("id", indentItem.itemId());
|
|
item.put("label", itemName);
|
|
|
|
itemMap.put("item",item);
|
|
itemMap.put("currentStock", indentItem.details().currentStock());
|
|
itemMap.put("reorderQty", indentItem.details().reorderQty());
|
|
itemMap.put("unitName", unitName);
|
|
itemMap.put("ratePerUnit", indentItem.details().ratePerUnit());
|
|
itemMap.put("indentQty", indentItem.indentQty());
|
|
itemMap.put("totalRate",indentItem.details().totalRate());
|
|
|
|
return itemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
return ResponseEntity.ok(responseList);
|
|
}
|
|
|
|
@PostMapping()
|
|
public ResponseEntity<Void> addIndentMaster(@RequestBody IndentMasterDto indentMasterDto) {
|
|
Long userId = authServiceImpl.getCurrentUserId();
|
|
indentMasterServiceImpl.addIndentMaster(indentMasterDto, userId);
|
|
return ResponseEntity.ok().build();
|
|
}
|
|
|
|
@GetMapping("/all")
|
|
public ResponseEntity<List<Map<String, Object>>> getAllIndentMasters() {
|
|
List<IndentMasterDto> indentMasters = indentMasterServiceImpl.getAllIndentMasters();
|
|
|
|
List<Map<String, Object>> responseList = indentMasters.stream().map(indentMasterDto -> {
|
|
Map<String, Object> masterMap = new LinkedHashMap<>();
|
|
masterMap.put("indentId",indentMasterDto.id());
|
|
masterMap.put("indentDate", indentMasterDto.indentDate());
|
|
masterMap.put("indentRefNo", indentMasterDto.indentRefNo());
|
|
masterMap.put("remarks", indentMasterDto.remarks());
|
|
masterMap.put("status", indentMasterDto.status());
|
|
|
|
List<Map<String, Object>> itemList = indentMasterDto.indentItems().stream().map(indentItemDto -> {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(indentItemDto.itemId())
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
String unitName = unitMasterRepo.findById(indentItemDto.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> item = new LinkedHashMap<>();
|
|
item.put("id", indentItemDto.itemId());
|
|
item.put("label", itemName);
|
|
|
|
itemMap.put("item",item);
|
|
itemMap.put("currentStock", indentItemDto.details().currentStock());
|
|
itemMap.put("reorderQty", indentItemDto.details().reorderQty());
|
|
itemMap.put("unitName", unitName);
|
|
itemMap.put("ratePerUnit", indentItemDto.details().ratePerUnit());
|
|
itemMap.put("indentQty", indentItemDto.indentQty());
|
|
itemMap.put("totalRate", indentItemDto.details().totalRate());
|
|
|
|
return itemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
masterMap.put("items", itemList);
|
|
|
|
return masterMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
return ResponseEntity.ok(responseList);
|
|
}
|
|
|
|
|
|
@GetMapping("/approved-or-completed")
|
|
public ResponseEntity<List<Map<String, Object>>> getApprovedOrCompletedIndentMasters() {
|
|
List<IndentMasterDto> indentMasters = indentMasterServiceImpl.getApprovedOrCompletedIndentMasters();
|
|
|
|
List<Map<String, Object>> responseList = indentMasters.stream().map(indentMasterDto -> {
|
|
Map<String, Object> masterMap = new LinkedHashMap<>();
|
|
masterMap.put("indentId",indentMasterDto.id());
|
|
masterMap.put("indentDate", indentMasterDto.indentDate());
|
|
masterMap.put("indentRefNo", indentMasterDto.indentRefNo());
|
|
masterMap.put("remarks", indentMasterDto.remarks());
|
|
masterMap.put("status", indentMasterDto.status());
|
|
|
|
List<Map<String, Object>> itemList = indentMasterDto.indentItems().stream().map(indentItemDto -> {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(indentItemDto.itemId())
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
String unitName = unitMasterRepo.findById(indentItemDto.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> item = new LinkedHashMap<>();
|
|
item.put("id", indentItemDto.itemId());
|
|
item.put("label", itemName);
|
|
|
|
itemMap.put("item",item);
|
|
itemMap.put("currentStock", indentItemDto.details().currentStock());
|
|
itemMap.put("reorderQty", indentItemDto.details().reorderQty());
|
|
itemMap.put("unitName", unitName);
|
|
itemMap.put("ratePerUnit", indentItemDto.details().ratePerUnit());
|
|
itemMap.put("indentQty", indentItemDto.indentQty());
|
|
itemMap.put("totalRate", indentItemDto.details().totalRate());
|
|
|
|
return itemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
masterMap.put("items", itemList);
|
|
|
|
return masterMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
return ResponseEntity.ok(responseList);
|
|
}
|
|
|
|
@GetMapping("/pending-or-rejected")
|
|
public ResponseEntity<List<Map<String, Object>>> getPendingOrRejectedIndentMasters() {
|
|
List<IndentMasterDto> indentMasters = indentMasterServiceImpl.getPendingOrRejectedIndentMasters();
|
|
|
|
List<Map<String, Object>> responseList = indentMasters.stream().map(indentMasterDto -> {
|
|
Map<String, Object> masterMap = new LinkedHashMap<>();
|
|
masterMap.put("indentId",indentMasterDto.id());
|
|
masterMap.put("indentDate", indentMasterDto.indentDate());
|
|
masterMap.put("indentRefNo", indentMasterDto.indentRefNo());
|
|
masterMap.put("remarks", indentMasterDto.remarks());
|
|
masterMap.put("status", indentMasterDto.status());
|
|
|
|
List<Map<String, Object>> itemList = indentMasterDto.indentItems().stream().map(indentItemDto -> {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(indentItemDto.itemId())
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
String unitName = unitMasterRepo.findById(indentItemDto.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> item = new LinkedHashMap<>();
|
|
item.put("id", indentItemDto.itemId());
|
|
item.put("label", itemName);
|
|
|
|
itemMap.put("item",item);
|
|
itemMap.put("currentStock", indentItemDto.details().currentStock());
|
|
itemMap.put("reorderQty", indentItemDto.details().reorderQty());
|
|
itemMap.put("unitName", unitName);
|
|
itemMap.put("ratePerUnit", indentItemDto.details().ratePerUnit());
|
|
itemMap.put("indentQty", indentItemDto.indentQty());
|
|
itemMap.put("totalRate", indentItemDto.details().totalRate());
|
|
|
|
return itemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
masterMap.put("items", itemList);
|
|
|
|
return masterMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
return ResponseEntity.ok(responseList);
|
|
}
|
|
|
|
@GetMapping("/indent/{indentId}")
|
|
public ResponseEntity<Map<String, Object>> getIndentItemsByIndentId(@PathVariable Long indentId) {
|
|
IndentMasterDto indentMasterDto = indentMasterServiceImpl.getIndentItemsByIndentId(indentId);
|
|
|
|
if (indentMasterDto == null) {
|
|
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Collections.singletonMap("message", "Indent Master not found for ID: " + indentId));
|
|
}
|
|
|
|
Map<String, Object> masterMap = new LinkedHashMap<>();
|
|
masterMap.put("indentId", indentMasterDto.id());
|
|
masterMap.put("indentDate", indentMasterDto.indentDate());
|
|
masterMap.put("indentRefNo", indentMasterDto.indentRefNo());
|
|
masterMap.put("remarks", indentMasterDto.remarks());
|
|
masterMap.put("status", indentMasterDto.status());
|
|
|
|
List<Map<String, Object>> itemList = indentMasterDto.indentItems().stream().map(indentItemDto -> {
|
|
Map<String, Object> itemMap = new LinkedHashMap<>();
|
|
|
|
String itemName = itemRepo.findById(indentItemDto.itemId())
|
|
.map(Item::getItemName)
|
|
.orElse("Unknown Item");
|
|
|
|
String unitName = unitMasterRepo.findById(indentItemDto.details().unit())
|
|
.map(UnitMaster::getUnitName)
|
|
.orElse("Unknown Unit");
|
|
|
|
Map<String, Object> item = new LinkedHashMap<>();
|
|
item.put("id", indentItemDto.itemId());
|
|
item.put("label", itemName);
|
|
|
|
itemMap.put("item", item);
|
|
itemMap.put("currentStock", indentItemDto.details().currentStock());
|
|
itemMap.put("reorderQty", indentItemDto.details().reorderQty());
|
|
itemMap.put("unitName", unitName);
|
|
itemMap.put("ratePerUnit", indentItemDto.details().ratePerUnit());
|
|
itemMap.put("indentQty", indentItemDto.indentQty());
|
|
itemMap.put("totalRate", indentItemDto.details().totalRate());
|
|
|
|
return itemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
masterMap.put("items", itemList);
|
|
|
|
return ResponseEntity.ok(masterMap);
|
|
}
|
|
|
|
@PutMapping("/{indentId}")
|
|
public ResponseEntity<String> updateIndentMaster(
|
|
@PathVariable Long indentId,
|
|
@RequestBody IndentMasterDto indentMasterDto) {
|
|
|
|
Long userId = authServiceImpl.getCurrentUserId();
|
|
indentMasterServiceImpl.updateIndentMaster(indentId , indentMasterDto, userId);
|
|
return ResponseEntity.ok().build();
|
|
}
|
|
|
|
|
|
@DeleteMapping("/{indentId}")
|
|
public ResponseEntity<Void> deleteIndentById(@PathVariable Long indentId) {
|
|
indentMasterServiceImpl.deleteIndentById(indentId);
|
|
return ResponseEntity.ok().build();
|
|
}
|
|
|
|
|
|
}
|
|
|