Subversion Repositories SmartDukaan

Rev

Rev 32907 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.smartdukaan.cron.scheduled.purchaseorder;

import com.spice.profitmandi.dao.entity.inventory.Vendor;
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
import com.spice.profitmandi.dao.entity.warehouse.WarehousePurchaseOrder;
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
import com.spice.profitmandi.dao.repository.warehouse.WarehousePurchaseOrderRepository;
import in.shop2020.purchase.POStatus;
import in.shop2020.purchase.PurchaseOrder;
import org.apache.logging.log4j.core.config.Scheduled;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Component
@Transactional(rollbackFor = Throwable.class)
public class POScheduler {
    //Auto close non-internal vendor POs greater than seven days
    @Autowired
    WarehousePurchaseOrderRepository warehousePurchaseOrderRepository;
    @Autowired
    SupplierRepository supplierRepository;


    public void autoClosePurchaseOrders() {
        System.out.println("At autoclose pos");
        List<WarehousePurchaseOrder> warehousePurchaseOrderList = warehousePurchaseOrderRepository.selectAllByStatus(POStatus.READY);
        warehousePurchaseOrderList.addAll(warehousePurchaseOrderRepository.selectAllByStatus(POStatus.PARTIALLY_FULFILLED));
        //Also ignore internal pos
        Set<Integer> internalSupplierIds = supplierRepository.selectAll().stream().filter(x->x.isInternal()).map(x->x.getId()).collect(Collectors.toSet());

        List<WarehousePurchaseOrder> posToClose = warehousePurchaseOrderList.stream()
                .filter(x->!internalSupplierIds.contains(x.getSupplierId()))
                .filter(x -> x.getCreatedAt().isBefore(LocalDate.now().minusDays(6).atStartOfDay()))
                .collect(Collectors.toList());
        //Close internal POS in four days
        posToClose.addAll(warehousePurchaseOrderList.stream().
                filter(x->internalSupplierIds.contains(x.getSupplierId())).
                filter(x->x.getCreatedAt().isBefore(LocalDate.now().minusDays(4).atStartOfDay())).collect(Collectors.toList()));
        for (WarehousePurchaseOrder warehousePurchaseOrder : posToClose) {
            //System.out.println(warehousePurchaseOrder);
            warehousePurchaseOrder.setStatus(POStatus.CLOSED);
        }


    }
}