package org.onehippo.forge.konakart.hst.wizard.checkout.activity;
import com.google.common.collect.Lists;
import com.konakart.al.NotifiedProductItem;
import com.konakart.app.KKException;
import com.konakart.appif.CustomerIf;
import com.konakart.appif.OrderIf;
import com.konakart.appif.OrderProductIf;
import org.hippoecm.hst.component.support.forms.FormField;
import org.hippoecm.hst.component.support.forms.FormMap;
import org.onehippo.forge.konakart.hst.wizard.ActivityException;
import org.onehippo.forge.konakart.site.service.KKServiceHelper;
import org.onehippo.forge.konakart.site.service.impl.KKEventServiceImpl;
import java.util.List;
public class CheckoutFinishedActivity extends BaseCheckoutActivity {
public static final String REMOVE = "remove_";
public static final String GLOBAL_PRODUCT_NOTIFIER_ENABLED = "globalProductNotifierEnabled";
public static final String NOTIFIED_PRODUCTS = "notifiedProducts";
@Override
public void doBeforeRender() throws ActivityException {
// Set events
OrderIf order = kkAppEng.getOrderMgr().getCheckoutOrder();
if (order != null) {
KKServiceHelper.getKKEventService().
insertCustomerEvent(hstRequest, KKEventServiceImpl.ACTION_CONFIRM_ORDER, order.getId());
KKServiceHelper.getKKEventService().
insertCustomerEvent(hstRequest, KKEventServiceImpl.ACTION_PAYMENT_METHOD_SELECTED, order.getPaymentModuleCode());
}
CustomerIf currentCustomer = kkAppEng.getCustomerMgr().getCurrentCustomer();
if ((currentCustomer != null) && (currentCustomer.getType() != 2)) {
if (currentCustomer.getGlobalProdNotifier() == 0) {
OrderIf currentOrder = kkAppEng.getOrderMgr().getCheckoutOrder();
if (currentOrder != null && currentOrder.getOrderProducts() != null) {
List<NotifiedProductItem> notifiedProductItems = Lists.newArrayList();
for (OrderProductIf orderProductIf : currentOrder.getOrderProducts()) {
NotifiedProductItem notifiedProductItem = new NotifiedProductItem(orderProductIf.getProductId(),
orderProductIf.getName());
notifiedProductItem.setRemove(false);
notifiedProductItems.add(notifiedProductItem);
}
hstRequest.setAttribute(NOTIFIED_PRODUCTS, notifiedProductItems);
}
hstRequest.setAttribute(GLOBAL_PRODUCT_NOTIFIER_ENABLED, true);
}
}
}
@Override
public void doAction() throws ActivityException {
super.doAction();
OrderIf currentOrder = kkAppEng.getOrderMgr().getCheckoutOrder();
if (currentOrder != null) {
OrderProductIf[] orderProductIfs = currentOrder.getOrderProducts();
if (orderProductIfs != null) {
String[] definedFormFields = new String[orderProductIfs.length];
int i = 0;
for (OrderProductIf orderProductIf : orderProductIfs) {
definedFormFields[i] = REMOVE + orderProductIf.getProductId();
i++;
}
FormMap formMap = new FormMap(hstRequest, definedFormFields);
for (OrderProductIf orderProductIf : orderProductIfs) {
FormField removeFormField = formMap.getField(REMOVE + orderProductIf.getProductId());
// Remove the basket item
if (removeFormField != null && removeFormField.getValues() != null
&& removeFormField.getValues().size() > 0) {
try {
kkAppEng.getCustomerMgr().addProductNotificationsToCustomer(orderProductIf.getProductId());
} catch (KKException e) {
log.warn("Failed to notify the customer about the availability of the product", e);
}
}
}
}
}
// Remove checkout order
kkAppEng.getOrderMgr().setCheckoutOrder(null);
// Update the order history array
try {
kkAppEng.getProductMgr().fetchOrderHistoryArray();
} catch (KKException e) {
log.warn("Failed to fetch the orders' history ");
}
processorContext.getSeedData().getKkBaseHstComponent().redirectByRefId(hstRequest, hstResponse,
processorContext.getSeedData().getKkBaseHstComponent().getMyAccountRefId());
}
}