fr.paris.lutece.plugins.workflow.modules.ticketingfacilfamilles.service.task.TaskAutomaticAssignment.java Source code

Java tutorial

Introduction

Here is the source code for fr.paris.lutece.plugins.workflow.modules.ticketingfacilfamilles.service.task.TaskAutomaticAssignment.java

Source

/*
 * Copyright (c) 2002-2016, Mairie de Paris
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  1. Redistributions of source code must retain the above copyright notice
 *     and the following disclaimer.
 *
 *  2. Redistributions in binary form must reproduce the above copyright notice
 *     and the following disclaimer in the documentation and/or other materials
 *     provided with the distribution.
 *
 *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
 *     contributors may be used to endorse or promote products derived from
 *     this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * License 1.0
 */
package fr.paris.lutece.plugins.workflow.modules.ticketingfacilfamilles.service.task;

import fr.paris.lutece.plugins.genericattributes.business.Response;
import fr.paris.lutece.plugins.ticketing.business.assignee.AssigneeUnit;
import fr.paris.lutece.plugins.ticketing.business.assignee.AssigneeUser;
import fr.paris.lutece.plugins.ticketing.business.ticket.Ticket;
import fr.paris.lutece.plugins.ticketing.business.ticket.TicketHome;
import fr.paris.lutece.plugins.ticketing.web.TicketingConstants;
import fr.paris.lutece.plugins.unittree.business.unit.Unit;
import fr.paris.lutece.plugins.unittree.business.unit.UnitHome;
import fr.paris.lutece.plugins.workflow.modules.ticketing.service.task.AbstractTicketingTask;
import fr.paris.lutece.plugins.workflow.modules.ticketingfacilfamilles.service.assignment.IAutomaticAssignmentService;
import fr.paris.lutece.portal.business.user.AdminUser;
import fr.paris.lutece.portal.service.i18n.I18nService;
import fr.paris.lutece.portal.service.util.AppPropertiesService;

import org.apache.commons.lang.StringUtils;

import java.text.MessageFormat;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

/**
 * This class represents a task to edit a ticket
 *
 */
public class TaskAutomaticAssignment extends AbstractTicketingTask {
    // Messages
    private static final String MESSAGE_AUTOMATIC_ASSIGNMENT = "module.ticketing.ticketingfacilfamilles.task_automatic_assignment.labelAutomaticAssignment";
    private static final String MESSAGE_AUTOMATIC_ASSIGN_TICKET_INFORMATION = "module.ticketing.ticketingfacilfamilles.task_automatic_assignment.information";

    // Properties
    private static final String PROPERTY_ACCOUNT_NUMBER_REGEXP = "module.workflow.ticketingfacilfamilles.workflow.automatic_assignment.accountNumberRegexp";
    private static final String PROPERTY_ACCOUNT_NUMBER_FIELD_CODE = "module.workflow.ticketingfacilfamilles.workflow.automatic_assignment.accountNumberFieldCode";
    private static final String PROPERTY_ACCOUNT_NUMBER_DOMAIN_LABEL = "module.workflow.ticketingfacilfamilles.workflow.automatic_assignment.domainLabel";

    // Services
    @Inject
    private IAutomaticAssignmentService _automaticAssignmentService;

    @Override
    public String getTitle(Locale locale) {
        return I18nService.getLocalizedString(MESSAGE_AUTOMATIC_ASSIGNMENT, locale);
    }

    @Override
    protected String processTicketingTask(int nIdResourceHistory, HttpServletRequest request, Locale locale) {
        String strTaskInformation = null;
        Ticket ticket = getTicket(nIdResourceHistory);

        if ((ticket.getTicketDomain() != null) && ticket.getTicketDomain().getLabel()
                .equalsIgnoreCase(AppPropertiesService.getProperty(PROPERTY_ACCOUNT_NUMBER_DOMAIN_LABEL))) {
            String strSuffix = getTicketAssignCriteria(ticket);

            if (StringUtils.isNotBlank(strSuffix)) {
                AdminUser adminUser = _automaticAssignmentService.getAssignedUser(getId(), strSuffix);

                if (adminUser != null) {
                    AssigneeUser assigneeUser = new AssigneeUser(adminUser);
                    ticket.setAssigneeUser(assigneeUser);

                    List<Unit> listUnit = UnitHome.findByIdUser(adminUser.getUserId());
                    AssigneeUnit assigneeUnit = null;

                    if ((listUnit != null) && (listUnit.size() > 0)) {
                        assigneeUnit = new AssigneeUnit(listUnit.get(0));
                    }

                    if (assigneeUnit != null) {
                        if (ticket.getAssigneeUnit().getUnitId() != assigneeUnit.getUnitId() && request != null) {
                            request.setAttribute(TicketingConstants.ATTRIBUTE_IS_UNIT_CHANGED, true);
                        }

                        ticket.setAssigneeUnit(assigneeUnit);
                    }

                    TicketHome.update(ticket);

                    strTaskInformation = MessageFormat.format(
                            I18nService.getLocalizedString(MESSAGE_AUTOMATIC_ASSIGN_TICKET_INFORMATION,
                                    Locale.FRENCH),
                            adminUser.getFirstName() + " " + adminUser.getLastName(),
                            ticket.getAssigneeUnit().getName());
                }
            }
        }

        return strTaskInformation;
    }

    /**
     * returns suffix from ticket account number
     * 
     * @param ticket
     *            ticket
     * @return suffix load from ticket account number
     */
    private String getTicketAssignCriteria(Ticket ticket) {
        String strSuffix = null;

        if ((ticket.getListResponse() != null) && !ticket.getListResponse().isEmpty()) {
            for (Response response : ticket.getListResponse()) {
                if ((response.getEntry() != null) && StringUtils.isNotBlank(response.getEntry().getCode())
                        && response.getEntry().getCode()
                                .equals(AppPropertiesService.getProperty(PROPERTY_ACCOUNT_NUMBER_FIELD_CODE))) {
                    // field ff account number
                    if (StringUtils.isNotBlank(response.getResponseValue()) && response.getResponseValue()
                            .matches(AppPropertiesService.getProperty(PROPERTY_ACCOUNT_NUMBER_REGEXP))) {
                        Pattern pattern = Pattern
                                .compile(AppPropertiesService.getProperty(PROPERTY_ACCOUNT_NUMBER_REGEXP));
                        Matcher matcher = pattern.matcher(response.getResponseValue());

                        if (matcher.find()) {
                            strSuffix = matcher.group(1);
                        }

                        break;
                    }
                }
            }
        }

        return strSuffix;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void doRemoveTaskInformation(int nIdHistory) {
        super.doRemoveTaskInformation(nIdHistory);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void doRemoveConfig() {
        _automaticAssignmentService.removeConfig(getId());
        super.doRemoveConfig();
    }
}