Making something happen when the state of an order changes

When an order is saved in the database or the status of an order is changed (i.e. through the callback of a payment gateway), KonaKart instantiates a class defined by the property ORDER_INTEGRATION_CLASS. If this property isn't set, the class that is instantiated is com.konakart.bl.OrderIntegrationMgr. If you write a custom class it must implement the interface com.konakart.bl.OrderIntegrationMgrInterface which contains some methods:


    /**
     * Called just after an order has been saved. The order details are passed to the method so that
     * all the information should be available in order to integrate with external systems.
     * 
     * @param order
     */
    public void saveOrder(OrderIf order);

    /**
     * Called just before an order has been saved. This method gives the opportunity to modify any
     * detail of the order before it is saved. If null is returned, then no action is taken. If a
     * non null Order is returned, then this is the order that will be saved.
     * 
     * @param order
     * @return Returns an order object which will be saved
     */
    public OrderIf beforeSaveOrder(OrderIf order);

    /**
     * Called just after an order status change
     * 
     * @param orderId
     * @param currentStatus
     * @param newStatus
     */
    public void changeOrderStatus(int orderId, int currentStatus, int newStatus);

    /**
     * This method allows you to introduce a proprietary algorithm for creating the order number for
     * an order just before the order is saved. It is called by the saveOrder() method.
     * The value returned by this method populates the orderNumber attribute of the
     * order when it is saved.
     * If a null value is returned, then the order number of the order is left unchanged.
     * If an exception is thrown, the exception will be also thrown by the saveOrder() method and
     * the order will not be saved.
     * 
     * @param order
     * @return Return the order number for the new order
     * @throws Exception
     */
    public String createOrderNumber(OrderIf order) throws Exception;

    /**
     * This method allows you to generate a tracking number for an order just before the order is
     * saved. It is called by the saveOrder() method. The value returned by this method
     * populates the trackingNumber attribute of the order when it is saved.
     * If a null value is returned, then the tracking number of the order is left unchanged.
     * If an exception is thrown, the exception will be also thrown by the saveOrder() method and
     * the order will not be saved.
     * 
     * @param order
     * @return Return the tracking number for the new order
     * @throws Exception
     */
    public String createTrackingNumber(OrderIf order) throws Exception;

The state of an order may be changed manually through the Admin App. In this case KonaKart instantiates a class defined by the property ADMIN_ORDER_INTEGRATION_CLASS. If this property isn't set, the class that is instantiated is com.konakartadmin.bl.AdminOrderIntegrationMgr. If you write a custom class it must implement the interface com.konakartadmin.bl.AdminOrderIntegrationMgrInterface which contains the method:


    /**
     * Called just after an order status change
     * 
     * @param orderId
     * @param currentStatus
     * @param newStatus
     */
    public void changeOrderStatus(int orderId, int currentStatus, int newStatus);

This mechanism is a useful generic way to interface KonaKart to external systems since the custom classes could write data to a database, call a web service or write data to a file etc.

The ORDER_INTEGRATION_CLASS and ADMIN_ORDER_INTEGRATION_CLASS properties can be edited in the Configuration>>Stock and Orders section of the Admin App.