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

in.succinct.plugins.ecommerce.extensions.order.BeforeSaveOrder Maven / Gradle / Ivy

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

import com.venky.cache.Cache;
import com.venky.swf.db.Database;
import com.venky.swf.db.model.reflection.ModelReflector;
import com.venky.swf.sql.Expression;
import com.venky.swf.sql.Operator;
import com.venky.swf.sql.Select;
import in.succinct.plugins.ecommerce.agents.order.tasks.pack.PacklistPrintTask;
import in.succinct.plugins.ecommerce.agents.order.tasks.ship.CreateManifestTask;
import in.succinct.plugins.ecommerce.db.model.order.Order;
import com.venky.swf.db.extensions.BeforeModelSaveExtension;
import com.venky.swf.plugins.background.core.TaskManager;
import in.succinct.plugins.ecommerce.db.model.order.OrderLine;
import in.succinct.plugins.ecommerce.db.model.order.OrderStatus;
import in.succinct.plugins.ecommerce.db.model.participation.Facility;
import in.succinct.plugins.ecommerce.db.model.participation.MarketPlaceIntegration;
import in.succinct.plugins.ecommerce.integration.MarketPlace;
import in.succinct.plugins.ecommerce.integration.unicommerce.UniCommerce;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class BeforeSaveOrder extends BeforeModelSaveExtension {
	static { 
		registerExtension(new BeforeSaveOrder());
	}



	@Override
	public void beforeSave(Order order) {
		List lines = order.getRawRecord().isNewRecord() ? new ArrayList<>() : order.getOrderLines();

		Facility facility = lines.isEmpty()? null : lines.get(0).getShipFrom();
		List marketPlaceIntegrations;

		if (facility != null && !facility.getPreferredMarketPlaceIntegrations().isEmpty()){
			 marketPlaceIntegrations = MarketPlace.get(facility.getId());
		}else {
			marketPlaceIntegrations = new ArrayList<>();
		}
		if (order.getFulfillmentStatus().equals(Order.FULFILLMENT_STATUS_DELIVERED) && order.getRawRecord().isFieldDirty("FULFILLMENT_STATUS")) {
			for (MarketPlace mp : marketPlaceIntegrations){
				mp.getWarehouseActionHandler().deliver(order);
			}
		}else if (order.getFulfillmentStatus().equals(Order.FULFILLMENT_STATUS_SHIPPED) && order.getRawRecord().isFieldDirty("FULFILLMENT_STATUS")) {
			for (MarketPlace mp : marketPlaceIntegrations){
				mp.getWarehouseActionHandler().ship(order);
			}
		}else if (order.getFulfillmentStatus().equals(Order.FULFILLMENT_STATUS_MANIFESTED) && order.getRawRecord().isFieldDirty("FULFILLMENT_STATUS")){
			TaskManager.instance().executeAsync(new PacklistPrintTask(order.getId()),false);
			for (MarketPlace mp : marketPlaceIntegrations){
				mp.getWarehouseActionHandler().pack(order);
			}
        }else if (order.getFulfillmentStatus().equals(Order.FULFILLMENT_STATUS_PACKED) && order.getRawRecord().isFieldDirty("FULFILLMENT_STATUS")){
			Set facilityIds = new HashSet<>();
			for (OrderLine orderLine : order.getOrderLines()) {
				Long facilityId = orderLine.getShipFromId();
				if (facilityId != null) {
					facilityIds.add(facilityId);
				}
			}
			List facilities = new Select().from(Facility.class).where(new Expression(ModelReflector.instance(Facility.class).getPool(),"ID", Operator.IN,facilityIds.toArray())).execute();
			facilities.forEach(f->{
				f.getPreferredCarriers().forEach(preferredCarrier->{
					TaskManager.instance().executeAsync(new CreateManifestTask(preferredCarrier.getId()),false);
				});
			});
		}
		if (!order.getRawRecord().isNewRecord() && order.getRawRecord().isFieldDirty("FULFILLMENT_STATUS")){
			Cache cache = new Cache() {
				@Override
				protected OrderStatus getValue(String status) {
					OrderStatus orderStatus = Database.getTable(OrderStatus.class).newRecord();
					orderStatus.setFulfillmentStatus(status);
					orderStatus.setOrderId(order.getId());
					orderStatus.setStatusDate(new Timestamp(System.currentTimeMillis()));
					return orderStatus;
				}
			};
			order.getOrderStatuses().forEach(orderStatus -> cache.put(orderStatus.getFulfillmentStatus(),orderStatus));
			cache.get(order.getFulfillmentStatus()).save(); //Only fist time order reaches a status it is logged.
		}
    }



}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy