de.hybris.platform.commerceorgaddon.controllers.pages.CostCenterManagementPageController.java Source code

Java tutorial

Introduction

Here is the source code for de.hybris.platform.commerceorgaddon.controllers.pages.CostCenterManagementPageController.java

Source

/*
 * [y] hybris Platform
 *
 * Copyright (c) 2000-2016 hybris AG
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of hybris
 * ("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 hybris.
 *
 *  
 */
package de.hybris.platform.commerceorgaddon.controllers.pages;

import de.hybris.platform.acceleratorstorefrontcommons.annotations.RequireHardLogIn;
import de.hybris.platform.acceleratorstorefrontcommons.breadcrumb.Breadcrumb;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.ThirdPartyConstants;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.AbstractSearchPageController;
import de.hybris.platform.acceleratorstorefrontcommons.controllers.util.GlobalMessages;
import de.hybris.platform.b2b.model.B2BBudgetModel;
import de.hybris.platform.b2b.model.B2BCostCenterModel;
import de.hybris.platform.b2bcommercefacades.company.data.B2BBudgetData;
import de.hybris.platform.b2bcommercefacades.company.data.B2BCostCenterData;
import de.hybris.platform.b2bcommercefacades.company.data.B2BSelectionData;
import de.hybris.platform.b2bcommercefacades.search.data.BudgetSearchStateData;
import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException;
import de.hybris.platform.commerceorgaddon.controllers.ControllerConstants;
import de.hybris.platform.commerceorgaddon.forms.B2BCostCenterForm;
import de.hybris.platform.commerceservices.search.pagedata.PageableData;
import de.hybris.platform.commerceservices.search.pagedata.SearchPageData;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

/**
 * Controller defines routes to mange Budgets and Cost Centers within My Company section.
 */
@Controller
@Scope("tenant")
@RequestMapping("/my-company/organization-management/manage-costcenters")
public class CostCenterManagementPageController extends MyCompanyPageController {
    private static final Logger LOG = Logger.getLogger(CostCenterManagementPageController.class);

    @RequestMapping(value = "/unitDetails", method = RequestMethod.GET)
    @RequireHardLogIn
    public String viewCostCenterUnitDetails(@RequestParam("costCenterCode") final String costCenterCode,
            @RequestParam("unit") final String unit, final Model model) throws CMSItemNotFoundException {
        final String viewCostCenterUnitUrl = unitDetails(unit, model);
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        final List<Breadcrumb> breadcrumbs = myCompanyBreadcrumbBuilder.createManageCostCenterBreadCrumbs();
        myCompanyBreadcrumbBuilder.addViewCostCenterBreadCrumbs(breadcrumbs, costCenterCode);
        breadcrumbs.add(new Breadcrumb(
                String.format("/organization-management/manage-costcenters/unitDetails/?costCenterCode=%s&unit=%s",
                        urlEncode(costCenterCode), urlEncode(unit)),
                getMessageSource().getMessage("text.company.manage.units.details", new Object[] { unit },
                        "View {0} Business Unit ", getI18nService().getCurrentLocale()),
                null));
        model.addAttribute("breadcrumbs", breadcrumbs);
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return viewCostCenterUnitUrl;
    }

    @RequestMapping(value = "", method = RequestMethod.GET)
    @RequireHardLogIn
    public String manageCostCenters(@RequestParam(value = "page", defaultValue = "0") final int page,
            @RequestParam(value = "show", defaultValue = "Page") final AbstractSearchPageController.ShowMode showMode,
            @RequestParam(value = "sort", defaultValue = B2BCostCenterModel.CODE) final String sortCode,
            final Model model) throws CMSItemNotFoundException {
        final PageableData pageableData = createPageableData(page, getSearchPageSize(), sortCode, showMode);
        final SearchPageData<B2BCostCenterData> searchPageData = b2bCostCenterFacade.search(null, pageableData);
        populateModel(model, searchPageData, showMode);
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        final List<Breadcrumb> breadcrumbs = myCompanyBreadcrumbBuilder.createManageCostCenterBreadCrumbs();
        model.addAttribute("breadcrumbs", breadcrumbs);
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return ControllerConstants.Views.Pages.MyCompany.MyCompanyManageCostCentersPage;
    }

    @Override
    @RequestMapping(value = "/view", method = RequestMethod.GET)
    @RequireHardLogIn
    public String viewCostCenterDetails(@RequestParam("costCenterCode") final String costCenterCode,
            final Model model) throws CMSItemNotFoundException {
        return super.viewCostCenterDetails(costCenterCode, model);
    }

    @RequestMapping(value = "/selectBudget", method = RequestMethod.GET)
    @RequireHardLogIn
    public String assignBudgetsForCostCenter(@RequestParam(value = "page", defaultValue = "0") final int page,
            @RequestParam(value = "show", defaultValue = "Page") final AbstractSearchPageController.ShowMode showMode,
            @RequestParam(value = "sort", defaultValue = B2BBudgetModel.CODE) final String sortCode,
            @RequestParam("costCenterCode") final String costCenterCode, final Model model,
            final HttpServletRequest request) throws CMSItemNotFoundException {
        final PageableData pageableData = createPageableData(page, getSearchPageSize(), sortCode, showMode);
        final BudgetSearchStateData searchState = new BudgetSearchStateData();

        searchState.setCostCenterCode(costCenterCode);
        final SearchPageData<B2BBudgetData> searchPageData = budgetFacade.search(searchState, pageableData);

        populateModel(model, searchPageData, showMode);
        model.addAttribute("action", "budgets");
        model.addAttribute("baseUrl", MANAGE_COST_CENTER_BASE_URL);
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        final List<Breadcrumb> breadcrumbs = myCompanyBreadcrumbBuilder.createManageCostCenterBreadCrumbs();
        myCompanyBreadcrumbBuilder.addViewCostCenterBreadCrumbs(breadcrumbs, costCenterCode);
        breadcrumbs.add(new Breadcrumb(String.format(MANAGE_COSTCENTERS_SELECTBUDGET_URL, costCenterCode),
                getMessageSource().getMessage("text.company.costCenter.select.budget", null, "Edit Related Budgets",
                        getI18nService().getCurrentLocale()),
                null));
        model.addAttribute("breadcrumbs", breadcrumbs);
        model.addAttribute("cancelUrl",
                getCancelUrl(MANAGE_COSTCENTERS_VIEW_URL, request.getContextPath(), costCenterCode));
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return ControllerConstants.Views.Pages.MyCompany.MyCompanySelectBudgetPage;
    }

    @ResponseBody
    @RequestMapping(value = "/budgets/select", method = { RequestMethod.POST })
    @RequireHardLogIn
    public B2BSelectionData selectBudgetForCostCenter(@RequestParam("costCenterCode") final String costCenterCode,
            @RequestParam("budgetCode") final String budgetCode) throws CMSItemNotFoundException {
        B2BSelectionData b2BSelectionData = null;
        try {
            b2BSelectionData = b2bCostCenterFacade.selectBudgetForCostCenter(costCenterCode, budgetCode);
        } catch (final Exception e) {
            LOG.error(e.getMessage(), e);
        }

        return b2BSelectionData;
    }

    @ResponseBody
    @RequestMapping(value = "/budgets/deselect", method = { RequestMethod.POST })
    @RequireHardLogIn
    public B2BSelectionData deselectBudgetForCostCenter(@RequestParam("costCenterCode") final String costCenterCode,
            @RequestParam("budgetCode") final String budgetCode) throws CMSItemNotFoundException {
        try {
            b2bCostCenterFacade.deSelectBudgetForCostCenter(costCenterCode, budgetCode);
        } catch (final Exception e) {
            LOG.error(e.getMessage(), e);
        }
        final B2BBudgetData b2BudgetData = budgetFacade.getBudgetDataForCode(budgetCode);
        final B2BSelectionData b2BSelectionData = new B2BSelectionData();
        if (b2BudgetData != null) {
            b2BSelectionData.setId(b2BudgetData.getCode());
            b2BSelectionData.setNormalizedCode(
                    b2BudgetData.getCode() == null ? null : b2BudgetData.getCode().replaceAll("\\W", "_"));
            b2BSelectionData.setSelected(false);
            b2BSelectionData.setActive(b2BudgetData.isActive());
        }

        return b2BSelectionData;
    }

    @RequestMapping(value = "/enable", method = RequestMethod.GET)
    @RequireHardLogIn
    public String enableCostCenter(@RequestParam("costCenterCode") final String costCenterCode, final Model model)
            throws CMSItemNotFoundException {
        try {
            b2bCostCenterFacade.enableDisableCostCenter(costCenterCode, true);
        } catch (final Exception e) {
            LOG.error(e.getMessage(), e);
            GlobalMessages.addErrorMessage(model, "form.global.error");
        }

        final B2BCostCenterData b2bCostCenterData = b2bCostCenterFacade.getCostCenterDataForCode(costCenterCode);

        if (b2bCostCenterData.getUnit() != null && !b2bCostCenterData.getUnit().isActive()) {
            GlobalMessages.addErrorMessage(model, "text.costcenter.parentunit.disabled.error");
        }

        if (model.containsAttribute(GlobalMessages.ERROR_MESSAGES_HOLDER)) {
            return viewCostCenterDetails(costCenterCode, model);
        }

        return String.format(REDIRECT_TO_COSTCENTER_DETAILS, urlEncode(costCenterCode));
    }

    @RequestMapping(value = "/disable", method = RequestMethod.GET)
    @RequireHardLogIn
    public String confirmDisableCostCenter(@RequestParam("costCenterCode") final String costCenterCode,
            final Model model) throws CMSItemNotFoundException {
        storeCmsPageInModel(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        setUpMetaDataForContentPage(model, getContentPageForLabelOrId(ORGANIZATION_MANAGEMENT_CMS_PAGE));
        final List<Breadcrumb> breadcrumbs = myCompanyBreadcrumbBuilder.createManageCostCenterBreadCrumbs();
        myCompanyBreadcrumbBuilder.addViewCostCenterBreadCrumbs(breadcrumbs, costCenterCode);
        model.addAttribute("breadcrumbs", breadcrumbs);
        model.addAttribute("costCenterCode", costCenterCode);
        model.addAttribute(ThirdPartyConstants.SeoRobots.META_ROBOTS,
                ThirdPartyConstants.SeoRobots.NOINDEX_NOFOLLOW);
        return ControllerConstants.Views.Pages.MyCompany.MyCompanyCostCenterDisableConfirm;
    }

    @RequestMapping(value = "/disable", method = RequestMethod.POST)
    @RequireHardLogIn
    public String disableCostCenter(@RequestParam("costCenterCode") final String costCenterCode, final Model model)
            throws CMSItemNotFoundException {
        try {
            b2bCostCenterFacade.enableDisableCostCenter(costCenterCode, false);
        } catch (final Exception e) {
            LOG.error(e.getMessage(), e);
            GlobalMessages.addErrorMessage(model, "form.global.error");
            return viewCostCenterDetails(costCenterCode, model);
        }

        return String.format(REDIRECT_TO_COSTCENTER_DETAILS, urlEncode(costCenterCode));
    }

    @Override
    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    @RequireHardLogIn
    public String editCostCenterDetails(@RequestParam("costCenterCode") final String costCenterCode,
            final Model model) throws CMSItemNotFoundException {
        model.addAttribute("actionUrl", "update");
        model.addAttribute("edit", Boolean.TRUE);
        model.addAttribute("title", getMessageSource().getMessage("text.company.costCenter.edit.title", null,
                "Edit Cost Center", getI18nService().getCurrentLocale()));
        return super.editCostCenterDetails(costCenterCode, model);
    }

    @Override
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    @RequireHardLogIn
    public String updateCostCenterDetails(@Valid final B2BCostCenterForm b2BCostCenterForm,
            final BindingResult bindingResult, final Model model, final RedirectAttributes redirectModel)
            throws CMSItemNotFoundException {
        model.addAttribute("actionUrl", "update");
        return super.updateCostCenterDetails(b2BCostCenterForm, bindingResult, model, redirectModel);
    }

    @Override
    @RequestMapping(value = "/add", method = RequestMethod.GET)
    @RequireHardLogIn
    public String addCostCenter(final Model model) throws CMSItemNotFoundException {
        model.addAttribute("actionUrl", "add");
        model.addAttribute("edit", Boolean.FALSE);
        model.addAttribute("title", getMessageSource().getMessage("text.company.costCenter.create.label", null,
                "Create Cost Center", getI18nService().getCurrentLocale()));
        return super.addCostCenter(model);
    }

    @Override
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @RequireHardLogIn
    public String saveCostCenter(@Valid final B2BCostCenterForm b2BCostCenterForm,
            final BindingResult bindingResult, final Model model, final RedirectAttributes redirectModel)
            throws CMSItemNotFoundException {
        model.addAttribute("actionUrl", "add");
        return super.saveCostCenter(b2BCostCenterForm, bindingResult, model, redirectModel);
    }
}