ohctechv3/.svn/pristine/3a/3aff73adea5f19ce121a75d06feb5fd4fef28399.svn-base
2024-10-28 15:03:36 +05:30

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();
}
}