All Downloads are FREE. Search and download functionalities are using the official Maven repository.

in.succinct.plugins.ecommerce.db.model.order.ManifestImpl Maven / Gradle / Ivy

The newest version!
package in.succinct.plugins.ecommerce.db.model.order;

import com.venky.core.util.ObjectUtil;
import com.venky.swf.db.annotations.column.IS_VIRTUAL;
import com.venky.swf.db.table.ModelImpl;
import com.venky.swf.plugins.background.core.TaskManager;
import com.venky.swf.sql.Conjunction;
import com.venky.swf.sql.Expression;
import com.venky.swf.sql.Operator;
import com.venky.swf.sql.Select;
import com.venky.swf.sql.parser.SQLExpressionParser.Or;
import in.succinct.plugins.ecommerce.agents.order.tasks.ship.ManifestShippingUpdatesTask;
import in.succinct.plugins.ecommerce.integration.fedex.TrackWebServiceClient;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class ManifestImpl extends ModelImpl{
    public ManifestImpl(Manifest proxy){
        super(proxy);
    }

    public void close(){
        Manifest manifest = getProxy();
        if (!manifest.isClosed()){
            manifest.setClosed(true);
            manifest.save();
        }else {
            TaskManager.instance().executeAsync(new ManifestShippingUpdatesTask(manifest.getId()), false);
        }

    }
    public void track(){
        if (getNumOrdersPendingDelivery() > 0) {
            TrackWebServiceClient client = new TrackWebServiceClient(getProxy());
            client.track();
        }
    }



    Set orderIds = null;
    public Set getOrderIdsPendingDelivery(){
        if (orderIds == null){
            orderIds = new HashSet<>();
            Manifest manifest = getProxy();
            Select s = new Select().from(OrderAttribute.class);
            Expression where = new Expression(s.getPool(), Conjunction.AND);
            where.add(new Expression(s.getPool(), "NAME", Operator.EQ, "manifest_number"));
            where.add(new Expression(s.getPool(), "VALUE", Operator.EQ, manifest.getManifestNumber()));
            s.where(where).add(" and exists ( select 1 from order_statuses where order_id = order_attributes.order_id and fulfillment_status = 'MANIFESTED' ) ");
            List oas = s.execute();
            oas.forEach(oa -> {
                orderIds.add(oa.getOrderId());
            });
        }
        return orderIds;

    }

    List orders = null;
    public List getOrders(){
        if (orders == null){
            Set orderIds = getOrderIdsPendingDelivery();
            if (orderIds.isEmpty()){
                orders = new ArrayList<>();
            }else {
                Manifest manifest = getProxy();
                orders = new Select().from(Order.class).where(new Expression(getReflector().getPool(), "ID", Operator.IN, orderIds.toArray())).execute();
                for (Iterator i =orders.iterator(); i.hasNext() ; ){
                    Order order = i.next();
                    if (!ObjectUtil.equals(order.getAttribute("courier").getValue(), manifest.getPreferredCarrier().getName())){
                        i.remove();
                    }
                }
            }
        }
        return orders;
    }

    public int getNumOrdersPendingDelivery() {
        return getOrderIdsPendingDelivery().size();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy