package com.ese.service;
import com.ese.model.TableValue;
import com.ese.model.dao.*;
import com.ese.model.db.*;
import com.ese.model.view.*;
import com.ese.service.security.UserDetail;
import com.ese.transform.PickingOrderLineTransform;
import com.ese.transform.ReservedOrderTransform;
import com.ese.utils.Utils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Component
@Transactional
public class PickingOrderShowItemService extends Service{
private static final long serialVersionUID = 4112577774029874840L;
@Resource private PickingOrderLineDAO pickingOrderLineDAO;
@Resource private ReservedOrderDAO reservedOrderDAO;
@Resource private ReservedOrderTransform reservedOrderTransform;
@Resource private LocationDAO locationDAO;
@Resource private StatusDAO statusDAO;
@Resource private WarehouseDAO warehouseDAO;
@Resource private ItemDAO itemDAO;
@Resource private PickingOrderLineTransform pickingOrderLineTransform;
@Resource private PickingOrderDAO pickingOrderDAO;
private int sumReservedOrder;
private int inventoryQty;
private String message;
public List<PickingOrderShowItemView> getPickingOrderLineByPickingOrderId(int pickingOrderId){
return pickingOrderLineDAO.findByPickingOrderId(pickingOrderId);
}
public void updateIsFoil(int pickingLineId, int isFoil){
if (!Utils.isZero(isFoil)){
pickingOrderLineDAO.updateToUnWrap(pickingLineId);
} else {
pickingOrderLineDAO.updateToWrap(pickingLineId);
}
}
public String checkQty(int pickingOrderLineId){
FIFOReservedView fifoReservedView = pickingOrderLineDAO.findQtyOnInventTran(pickingOrderLineId);
inventoryQty = fifoReservedView.getInventtransQty();
sumReservedOrder = pickingOrderLineDAO.getSumReservedOrder(pickingOrderLineId);
log.debug("InvenQty : [{}], sumReservedOrder : [{}]", inventoryQty, sumReservedOrder);
if (inventoryQty > sumReservedOrder){
return "Success";
}
return "Fail";
}
public void onReserved(int pickingOrderLineId, String startBatch, String toBatch){
ReservedOrderModel reservedOrderModel;
PickingOrderLineModel pickingOrderLineModel;
MSLocationModel msLocationModel;
List<LocationQtyView> locationQtyViewList = Utils.getEmptyList();
int restQty = 0;
//Check reserved qty in reserved order
int reservedQty = reservedOrderDAO.reservedOrderQtyByPickingOrderLineId(pickingOrderLineId);
FIFOReservedView fifoReservedView = pickingOrderLineDAO.findQtyOnInventTran(pickingOrderLineId);
if (Utils.isZero(startBatch.trim().length()) && Utils.isZero(toBatch.trim().length())){
//FIFO Reserved
locationQtyViewList = pickingOrderLineDAO.findByItemId(fifoReservedView.getItemId(), "", "", 0, 0, 0);
} else if (!Utils.isZero(startBatch.trim().length()) && !Utils.isZero(toBatch.trim().length())){
//Period Reserved
locationQtyViewList = pickingOrderLineDAO.findByItemId(fifoReservedView.getItemId(), startBatch.trim(), toBatch.trim(), 0, 0, 0);
}
StatusModel statusModel = statusDAO.findByStatusSeqTablePickingOrder(TableValue.RESERVED_ORDER.getId());
if (Utils.isSafetyList(locationQtyViewList)){
pickingOrderLineDAO.updateInventTransByUse(fifoReservedView.getInventtransId());
for (LocationQtyView locationQtyView : locationQtyViewList){
log.debug("-- restQty : [{}]", restQty);
if (locationQtyView.getQty() - locationQtyView.getReservedQty() > 0){
try {
pickingOrderLineModel = pickingOrderLineDAO.findByID(fifoReservedView.getPickingOrderLineId());
msLocationModel = locationDAO.findByID(locationQtyView.getLocationId());
if (!Utils.isZero(restQty)){
if (locationQtyView.getAvailable() - restQty >= 0){
log.debug("---------------4");
if (!Utils.isZero(reservedQty)){
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, restQty - reservedQty, locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), restQty - reservedQty);
} else {
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, restQty, locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), restQty);
}
reservedOrderDAO.persist(reservedOrderModel);
pickingOrderLineDAO.updateInventTransByUseFinish(fifoReservedView.getInventtransId());
break;
} else {
log.debug("---------------3");
if (!Utils.isZero(reservedQty)){
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, restQty - (restQty - locationQtyView.getAvailable() - reservedQty), locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), restQty - (restQty - locationQtyView.getAvailable() - reservedQty));
} else {
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, restQty - (restQty - locationQtyView.getAvailable()), locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), restQty - (restQty - locationQtyView.getAvailable()));
}
reservedOrderDAO.persist(reservedOrderModel);
//update location_qty.reserved_qty = restQty - (restQty - locationQtyView.getAvilable);
restQty = restQty - locationQtyView.getAvailable();
}
} else if (locationQtyView.getAvailable() - fifoReservedView.getInventtransQty() >= 0 && Utils.isZero(restQty)){
log.debug("---------------2");
if (!Utils.isZero(reservedQty)){
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, fifoReservedView.getInventtransQty() - reservedQty, locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), fifoReservedView.getInventtransQty() - reservedQty);
} else {
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, fifoReservedView.getInventtransQty(), locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), fifoReservedView.getInventtransQty());
}
reservedOrderDAO.persist(reservedOrderModel);
pickingOrderLineDAO.updateInventTransByUseFinish(fifoReservedView.getInventtransId());
break;
} else {
log.debug("------------1");
if (!Utils.isZero(reservedQty)){
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, fifoReservedView.getInventtransQty() - (fifoReservedView.getInventtransQty() - locationQtyView.getAvailable() - reservedQty), locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), fifoReservedView.getInventtransQty() - (fifoReservedView.getInventtransQty() - locationQtyView.getAvailable()) - reservedQty);
} else {
reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, fifoReservedView.getInventtransQty() - (fifoReservedView.getInventtransQty() - locationQtyView.getAvailable()), locationQtyView.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyView.getId(), fifoReservedView.getInventtransQty() - (fifoReservedView.getInventtransQty() - locationQtyView.getAvailable()));
}
reservedOrderDAO.persist(reservedOrderModel);
// update location_qty.reserved_qty = fifoReservedView.getInventtransQty - (fifoReservedView.getInventtransQty - locationQtyView.getAvailable());
restQty = fifoReservedView.getInventtransQty() - locationQtyView.getAvailable();
}
} catch (Exception e){
log.debug("Exception error onFIFOReServed : ", e);
}
}
}
// }
}
}
public List<LocationQtyView> onManualReserved(int pickingOrderLineId, String batchNo, int warehouseId, int locationId){
FIFOReservedView fifoReservedView = pickingOrderLineDAO.findQtyOnInventTran(pickingOrderLineId);
pickingOrderLineDAO.updateInventTransByUse(fifoReservedView.getInventtransId());
return pickingOrderLineDAO.findByItemId(fifoReservedView.getItemId(), batchNo, batchNo, warehouseId, locationId, 0);
}
public List<MSWarehouseModel> getWarehouseAll(){
List<MSWarehouseModel> msWarehouseModelList = Utils.getEmptyList();
try {
msWarehouseModelList = warehouseDAO.findAll();
} catch (Exception e) {
log.debug("Exception error getWarehouseAll : ", e);
}
return msWarehouseModelList;
}
public List<MSLocationModel> getLocationByWarehouse(int warehouseId){
return locationDAO.findByWarehouseId(warehouseId);
}
public List<LocationQtyView> getBatchByLocation(int locationId){
return pickingOrderLineDAO.findByLocationId(locationId);
}
public List<LocationQtyView> getLocationQtyBySearch(String itemId, int warehouseId, int locationId, int locationQtyId){
return pickingOrderLineDAO.findByItemId(itemId, "", "", warehouseId, locationId, locationQtyId);
}
public boolean saveManualReserved(LocationQtyView locationQtyId, int reservedQty, int pickingLineId){
StatusModel statusModel = statusDAO.findByStatusSeqTablePickingOrder(TableValue.RESERVED_ORDER.getId());
FIFOReservedView fifoReservedView = pickingOrderLineDAO.findQtyOnInventTran(pickingLineId);
inventoryQty = fifoReservedView.getInventtransQty();
sumReservedOrder = pickingOrderLineDAO.getSumReservedOrder(pickingLineId);
log.debug("------- sumReservedOrder : {} , inventoryQty : {}", sumReservedOrder, inventoryQty);
try {
PickingOrderLineModel pickingOrderLineModel = pickingOrderLineDAO.findByID(pickingLineId);
MSLocationModel msLocationModel = locationDAO.findByID(locationQtyId.getLocationId());
if (reservedQty + sumReservedOrder <= inventoryQty){
ReservedOrderModel reservedOrderModel = reservedOrderTransform.tramsformToModel(pickingOrderLineModel, msLocationModel, statusModel, reservedQty, locationQtyId.getBatchNo());
pickingOrderLineDAO.updateReservedQtyByLocaitonQtyId(locationQtyId.getId(), reservedQty);
reservedOrderDAO.persist(reservedOrderModel);
pickingOrderLineDAO.updateInventTransByUseFinish(fifoReservedView.getInventtransId());
return true;
}
} catch (Exception e) {
log.debug("Exception error saveManualReserved : ", e);
}
return false;
}
public void saveItemQty(int pickingLineId, int orderQty){
pickingOrderLineDAO.updateOrderQty(pickingLineId, orderQty);
}
public List<MSItemModel> searchItemQty(ItemQtySearchView itemQtySearchView){
return itemDAO.findBySearch(itemQtySearchView);
}
public void onSavePickingLine(PickingOrderModel pickingOrderModel, UserDetail userDetail, ItemQtyView itemQtyView){
StatusModel statusModel = statusDAO.findByStatusSeqTablePickingOrder(TableValue.PICKING_LINE.getId());
PickingOrderLineModel pickingOrderLineModel = pickingOrderLineTransform.transformToModelByAddItemQty(pickingOrderModel, statusModel, userDetail, itemQtyView);
try {
pickingOrderLineDAO.persist(pickingOrderLineModel);
} catch (Exception e) {
log.debug("Exception error onSavePickingLine : ", e);
}
}
public List<ShowItemStatusView> getReservedOrder(int pickingLineId){
return reservedOrderDAO.findByPickingLineId(pickingLineId);
}
public void onRemove(int reservedOrderId, String itemId){
try {
ReservedOrderModel orderModel = reservedOrderDAO.findByID(reservedOrderId);
updateLocationQtyOnRemove(orderModel.getLocationId(), orderModel.getBatchNo(), itemId, orderModel.getReservedQty());
reservedOrderDAO.delete(reservedOrderDAO.remove(reservedOrderId));
} catch (Exception e) {
log.debug("Exception error onRemove");
}
}
public void closeManual(int pickingLineId){
FIFOReservedView fifoReservedView = pickingOrderLineDAO.findQtyOnInventTran(pickingLineId);
pickingOrderLineDAO.updateInventTransByUseFinish(fifoReservedView.getInventtransId());
}
public void setStatusPickingOrder(int pickingOrderId){
pickingOrderDAO.updateStatus(pickingOrderId);
}
public void updateLocationQtyOnRemove(int locationId, String batchNo, String itemId, int reservedQty){
MSItemModel model = itemDAO.findByItemId(itemId);
LocationQtyView locationQtyView = pickingOrderLineDAO.findLocationQtyByRemoveShowItem(locationId, batchNo, model.getId());
pickingOrderLineDAO.updateLocationQtyByRemoveShowItem(locationQtyView.getId(), locationQtyView.getReservedQty() - reservedQty);
}
public boolean checkReserve(String itemName){
int itemId = itemDAO.findByItemId(itemName).getId();
List<LocationQtyView> locationQtyViewList = pickingOrderLineDAO.findOnHand(itemId);
for (LocationQtyView qtyView : locationQtyViewList){
if (qtyView.getQty() > 0){
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
}