com.daimler.spm.b2bacceleratoraddon.controllers.pages.OrderApprovalController.java Source code

Java tutorial

Introduction

Here is the source code for com.daimler.spm.b2bacceleratoraddon.controllers.pages.OrderApprovalController.java

Source

/*
 * [y] hybris Platform
 *
 * Copyright (c) 2017 SAP SE or an SAP affiliate company.  All rights reserved.
 *
 * This software is the confidential and proprietary information of SAP
 * ("Confidential Information"). You shall not disclose such Confidential
 * Information and shall use it only in accordance with the terms of the
 * license agreement you entered into with SAP.
 */
package com.daimler.spm.b2bacceleratoraddon.controllers.pages;

/**
 * Controller for order approval dashboard.
 */

import de.hybris.platform.acceleratorstorefrontcommons.annotations.RequireHardLogIn;
import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.Breadcrumb;
import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.ResourceBreadcrumbBuilder;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.ThirdPartyConstants;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.AbstractSearchPageController;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.util.GlobalMessages;
import com.daimler.spm.b2bacceleratoraddon.forms.OrderApprovalDecisionForm;
import de.hybris.platform.b2bacceleratorfacades.order.B2BOrderFacade;
import de.hybris.platform.b2bacceleratorfacades.order.data.B2BOrderApprovalData;
import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException;
import de.hybris.platform.commerceservices.search.pagedata.PageableData;
import de.hybris.platform.commerceservices.search.pagedata.SearchPageData;
import de.hybris.platform.servicelayer.exceptions.UnknownIdentifierException;
import de.hybris.platform.workflow.enums.WorkflowActionType;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/my-account")
public class OrderApprovalController extends AbstractSearchPageController {
    private static final String REDIRECT_MY_ACCOUNT = REDIRECT_PREFIX + "/my-account";
    private static final String ORDER_APPROVAL_DASHBOARD_CMS_PAGE = "order-approval-dashboard";
    private static final String WORKFLOW_ACTION_CODE_PATH_VARIABLE_PATTERN = "{workflowActionCode:.*}";
    private static final String ORDER_APPROVAL_DETAIL_CMS_PAGE = "order-approval-details";

    private static final Logger LOG = Logger.getLogger(OrderApprovalController.class);

    @Resource(name = "b2bOrderFacade")
    private B2BOrderFacade orderFacade;

    @Resource(name = "accountBreadcrumbBuilder")
    private ResourceBreadcrumbBuilder accountBreadcrumbBuilder;

    @RequestMapping(value = "/approval-dashboard", method = RequestMethod.GET)
    @RequireHardLogIn
    public String orderApprovalDashboard(@RequestParam(value = "page", defaultValue = "0") final int page,
            @RequestParam(value = "show", defaultValue = "Page") final AbstractSearchPageController.ShowMode showMode,
            @RequestParam(value = "sort", required = false) final String sortCode, final Model model)
            throws CMSItemNotFoundException {
        final PageableData pageableData = createPageableData(page, 5, sortCode, showMode);
        final SearchPageData<? extends B2BOrderApprovalData> searchPageData = orderFacade
                .getPagedOrdersForApproval(new WorkflowActionType[] { WorkflowActionType.START }, pageableData);
        populateModel(model, searchPageData, showMode);

        model.addAttribute("breadcrumbs",
                accountBreadcrumbBuilder.getBreadcrumbs("text.account.orderApprovalDashboard"));
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORDER_APPROVAL_DASHBOARD_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORDER_APPROVAL_DASHBOARD_CMS_PAGE));
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return getViewForPage(model);
    }

    @RequestMapping(value = "/orderApprovalDetails/"
            + WORKFLOW_ACTION_CODE_PATH_VARIABLE_PATTERN, method = RequestMethod.GET)
    @RequireHardLogIn
    public String orderApprovalDetails(@PathVariable("workflowActionCode") final String workflowActionCode,
            final Model model) throws CMSItemNotFoundException {
        try {
            final B2BOrderApprovalData orderApprovalDetails = orderFacade
                    .getOrderApprovalDetailsForCode(workflowActionCode);
            model.addAttribute("orderApprovalData", orderApprovalDetails);
            model.addAttribute("orderData", orderApprovalDetails.getB2bOrderData());

            if (!model.containsAttribute("orderApprovalDecisionForm")) {
                model.addAttribute("orderApprovalDecisionForm", new OrderApprovalDecisionForm());
            }

            final List<Breadcrumb> breadcrumbs = accountBreadcrumbBuilder.getBreadcrumbs(null);
            breadcrumbs.add(new Breadcrumb("/my-account/approval-dashboard", getMessageSource().getMessage(
                    "text.account.orderApprovalDashboard", null, getI18nService().getCurrentLocale()), null));
            breadcrumbs.add(new Breadcrumb("#",
                    getMessageSource().getMessage("text.account.order.orderBreadcrumb",
                            new Object[] { orderApprovalDetails.getB2bOrderData().getCode() }, "Order {0}",
                            getI18nService().getCurrentLocale()),
                    null));

            model.addAttribute("breadcrumbs", breadcrumbs);

        } catch (final UnknownIdentifierException e) {
            LOG.warn("Attempted to load a order that does not exist or is not visible", e);
            return REDIRECT_MY_ACCOUNT;
        }
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORDER_APPROVAL_DETAIL_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORDER_APPROVAL_DETAIL_CMS_PAGE));
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return getViewForPage(model);
    }

    @RequestMapping(value = "/order/approvalDecision", method = RequestMethod.POST)
    @RequireHardLogIn
    public String orderApprovalDecision(
            @ModelAttribute("orderApprovalDecisionForm") final OrderApprovalDecisionForm orderApprovalDecisionForm,
            final Model model) throws CMSItemNotFoundException {
        try {
            if ("REJECT".contains(orderApprovalDecisionForm.getApproverSelectedDecision())
                    && StringUtils.isEmpty(orderApprovalDecisionForm.getComments())) {
                GlobalMessages.addErrorMessage(model, "text.account.orderApproval.addApproverComments");
                model.addAttribute("orderApprovalDecisionForm", orderApprovalDecisionForm);
                return orderApprovalDetails(orderApprovalDecisionForm.getWorkFlowActionCode(), model);
            }

            final B2BOrderApprovalData b2bOrderApprovalData = new B2BOrderApprovalData();
            b2bOrderApprovalData.setSelectedDecision(orderApprovalDecisionForm.getApproverSelectedDecision());
            b2bOrderApprovalData.setApprovalComments(orderApprovalDecisionForm.getComments());
            b2bOrderApprovalData.setWorkflowActionModelCode(orderApprovalDecisionForm.getWorkFlowActionCode());

            orderFacade.setOrderApprovalDecision(b2bOrderApprovalData);

        } catch (final UnknownIdentifierException e) {
            LOG.warn("Attempted to load a order that does not exist or is not visible", e);
            return REDIRECT_MY_ACCOUNT;
        }

        return REDIRECT_MY_ACCOUNT + "/orderApprovalDetails/" + orderApprovalDecisionForm.getWorkFlowActionCode();
    }

}