Subversion Repositories SmartDukaan

Rev

Rev 36627 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
32907 amit.gupta 1
package com.smartdukaan.cron.scheduled.purchaseorder;
2
 
3
import com.spice.profitmandi.dao.entity.inventory.Vendor;
4
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
5
import com.spice.profitmandi.dao.entity.warehouse.WarehousePurchaseOrder;
6
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
7
import com.spice.profitmandi.dao.repository.warehouse.WarehousePurchaseOrderRepository;
8
import in.shop2020.purchase.POStatus;
9
import org.apache.logging.log4j.core.config.Scheduled;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12
import org.springframework.transaction.annotation.Transactional;
13
 
14
import java.time.LocalDate;
15
import java.util.List;
16
import java.util.Set;
17
import java.util.stream.Collectors;
18
 
19
@Component
20
@Transactional(rollbackFor = Throwable.class)
21
public class POScheduler {
22
    //Auto close non-internal vendor POs greater than seven days
23
    @Autowired
24
    WarehousePurchaseOrderRepository warehousePurchaseOrderRepository;
25
    @Autowired
26
    SupplierRepository supplierRepository;
27
 
28
 
29
    public void autoClosePurchaseOrders() {
30
        System.out.println("At autoclose pos");
31
        List<WarehousePurchaseOrder> warehousePurchaseOrderList = warehousePurchaseOrderRepository.selectAllByStatus(POStatus.READY);
32
        warehousePurchaseOrderList.addAll(warehousePurchaseOrderRepository.selectAllByStatus(POStatus.PARTIALLY_FULFILLED));
33
        //Also ignore internal pos
34
        Set<Integer> internalSupplierIds = supplierRepository.selectAll().stream().filter(x->x.isInternal()).map(x->x.getId()).collect(Collectors.toSet());
35
 
37704 amit 36
        // Aged from getOpenSince(), not createdAt: a PO reopened because its receipt was delayed gets the same fresh
37
        // window a new one gets, instead of being closed straight back on the next sweep for being older than the
38
        // window it was reopened past.
32907 amit.gupta 39
        List<WarehousePurchaseOrder> posToClose = warehousePurchaseOrderList.stream()
40
                .filter(x->!internalSupplierIds.contains(x.getSupplierId()))
37704 amit 41
                .filter(x -> x.getOpenSince().isBefore(LocalDate.now().minusDays(6).atStartOfDay()))
32907 amit.gupta 42
                .collect(Collectors.toList());
33255 amit.gupta 43
        //Close internal POS in four days
44
        posToClose.addAll(warehousePurchaseOrderList.stream().
45
                filter(x->internalSupplierIds.contains(x.getSupplierId())).
37704 amit 46
                filter(x->x.getOpenSince().isBefore(LocalDate.now().minusDays(4).atStartOfDay())).collect(Collectors.toList()));
32907 amit.gupta 47
        for (WarehousePurchaseOrder warehousePurchaseOrder : posToClose) {
48
            //System.out.println(warehousePurchaseOrder);
49
            warehousePurchaseOrder.setStatus(POStatus.CLOSED);
50
        }
51
 
52
 
53
    }
54
}