⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tickethandler.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * Copyright 2006-2007 Queplix Corp.
 *
 * Licensed under the Queplix Public License, Version 1.1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.queplix.com/solutions/commercial-open-source/queplix-public-license/
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.queplix.qwoss.client.frames.mainframe;

import com.queplix.core.client.app.rpc.RPC;
import com.queplix.core.client.app.vo.EntityData;
import com.queplix.core.client.app.vo.EntityReferenceData;
import com.queplix.core.client.app.vo.EntityReferenceDataRequest;
import com.queplix.core.client.app.vo.FamgMeta;
import com.queplix.core.client.app.vo.FieldData;
import com.queplix.core.client.app.vo.FieldDataRequest;
import com.queplix.core.client.app.vo.FieldMeta;
import com.queplix.core.client.app.vo.GridSearchProperties;
import com.queplix.core.client.app.vo.ListboxDataRequest;
import com.queplix.core.client.app.vo.ListboxFieldData;
import com.queplix.core.client.app.vo.MetaData;
import com.queplix.core.client.app.vo.MultiselectFieldData;
import com.queplix.core.client.app.vo.RowData;
import com.queplix.core.client.app.vo.SubsetData;
import com.queplix.core.client.app.vo.TextareaFieldData;
import com.queplix.core.client.app.vo.TextboxFieldData;
import com.queplix.core.client.common.CollectionsHelper;
import com.queplix.core.client.common.StringUtil;
import com.queplix.core.client.common.ui.DialogHelper;
import com.queplix.core.client.frames.email.EmailComposeHelper;
import com.queplix.core.client.frames.mainframe.DefaultOperationStrategy;
import com.queplix.core.client.frames.mainframe.FormOperations;
import com.queplix.core.client.frames.mainframe.FormState;
import com.queplix.core.client.frames.mainframe.OperationContext;
import com.queplix.core.client.frames.mainframe.OperationTypes;
import com.queplix.qwoss.client.app.rpc.CustomRPC;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

/**
 * Description:
 * @author rustem.nizamiev, sergei.savchuk
 */
public class TicketHandler extends DefaultOperationStrategy {

    private static final String TICKET_ID_CAPTION = "Ticket : ";

    private static final long BASE_ENTITYROWID = -1;
    private static final int SELECTED_INDEX = 0;
    private static final int STATUS_OWNED = 2;
    private static final String MY_QUEUES = "myQueues";
    private static final String MY_TICKETS = "myTickets";
    private static final String OPEN_TICKETS = "openTickets";
    private static final String ACCEPT_TICKET = "acceptTicket";

    private static final String CHANGE_OWNER_QUESTION = "Would you like to change the owner?";
    
    private static final String TICKET_ID_FIELD_NAME = "qw_ticketid";
    private static final String SUBJECT_FIELD_NAME = "qw_problem";
    private static final String DESCRIPTION_FIELD_NAME = "qw_description";
    private static final String DESCRIPTION_TEXT_FIELD_NAME = "qw_descriptiontext";
    private static final String RESPONSE_FIELD_NAME = "qw_response";
    private static final String RESPONSE_TEXT_FIELD_NAME = "qw_responsetext";
    
    private static final String OWNER = "qw_ownerid";
    private static final String AGENT = "qw_agentid";
    private static final String STATUS = "qw_status";

    public static final String COMPONENT_ID_FIELD_NAME = "qw_componentid"; // 1st constrained control
    public static final String REP_BVERSION_ID_FIELD_NAME = "qw_repbuildversionid"; // 2nd constrained control
    public static final String RES_BVERSION_ID_FIELD_NAME = "qw_resbuildversionid"; // 3rd constrained control
    public static final String REP_ENV_ID_FIELD_NAME = "qw_repenvironmentid"; // 4th constrained control
    public static final String TEST_ENV_ID_FIELD_NAME = "qw_testenvironmentid"; // 5th constrained control

    public static final String PRODUCT_ID_FIELD_NAME = "qw_productid"; // constraint-source control
    public static final String CUSTOMER_ID_FIELD_NAME = "qw_customerid";
    public static final String EMPLOYEE_ID_FIELD_NAME = "qw_employeeid";
    public static final String CUSTOMER_TICKET_ENTITY_NAME = "customer.foreign";
    public static final String CUSTOMER_TICKET_ENTITY_PKEYFIELD_NAME = "qw_customerid";

    public static final String COMPONENT_FILTER_FIELD_NAME
            = "qw_productid"; //field name in entity, where this entityReference is referencing.
    public static final String BVERSION_FILTER_FIELD_NAME
            = "qw_productid"; //field name in entity, where this entityReference is referencing.
    public static final String ENV_FILTER_FIELD_NAME = "qw_productid"; //field name in entity, where this entityReference is referencing.
    //public static final String ENVCUST_FILTER_FIELD_NAME = "qw_orgid"; //field name in entity, where this entityReference is referencing.

    public static final String SUB_CATEGORY_FIELD_NAME = "qw_subcategory"; //filtering field
    public static final String CATEGORY_FIELD_NAME = "qw_category"; //filter sub-category by category id
    public static final String CATEGORY_FIELD_IN_SUBCATEGORY_ENTITY = "qw_categoryid"; //filter field name in sub-category entity

    private static final String CUR_INTERACTION_ID_FIELD = "qw_cur_interaction";
    private static final String SOLUTION_CUR_TICKET_ID_FIELD = "qw_cur_ticket";
    private static final String SOLUTION_PRODUCT_FIELD = "qw_productid";
    private static final String SOLUTION_COMPONENT_FIELD = "qw_componentid";
    private static final String SOLUTION_SUMMARY_FIELD = "qw_summary";
    private static final String SOLUTION_PROBLEM_FIELD = "qw_problem";
    private static final String SOLUTION_PROBLEM_TEXT_FIELD = "qw_problemtext";
    private static final String SOLUTION_SOL_FIELD = "qw_solution";
    private static final String SOLUTION_SOL_TEXT_FIELD = "qw_solutiontext";
    
    private static final String LINKET_TICKETS_FIELD = "linked_tickets";
    private static final String INTERACTION_ID_FIELD = "qw_interactionid";

    private static final String LINK_TO_INTERACTION_BUTTON = "LINK_TO_INTERACTION_BUTTON";
    private static final String NEW_SOLUTION_BUTTON = "NEW_SOLUTION_BUTTON";
    private static final String SEND_EMAIL_BUTTON = "SEND_EMAIL_BUTTON";
    
    private static final String TICKET_ENTITY = "ticket.ticket";
    private static final String INTER_TICKET_ENTITY = "inter_ticket.linkset";
    private static final String INTER_TICKET_FILTER_FIELD = "qw_ticketid";
    
    private static final String TICKETEVENT_ENTITY = "ticketevent.ticket";
    private static final String TICKETEVENT_FILTER_FIELD = "qw_ticketid";

    private static final String ATTACH_FILE = "ATTACH_FILE";
    private static final String ATTACHMENT_OBJECTS_ENTITY = "attachment_objects.ticket";
    private static final String OBJECT_ID = "object_id";
    
    private ListboxFieldData oldCategoryData = null;
    private FieldData[] initialFieldsData = null;
    private String curOriginInteractionId = "0";

    private HashMap replyInitVals;
    private ReplyComposeDialog replyDialog;

    /*
     * Interaction and AttachmentTicket form ids
     * It should initialized in HandlerFactory or it's siblings
     */
    private String interFormId, attachTicketFormId, solutionFormId, eventFormId;

    // Ties with other handlers
    private InteractionHandler interHandler;
    private AttachmentTicketHandler attachHandler;
    private SolutionHandler solutionHandler;
    private TicketEventHandler eventHandler;

    private String eventId;
    private ArrayList externalEntityFilters = new ArrayList();
    //private String externalEQLFilter = "";
    
    //void setExternalEQLFilter(String eqlFilter){
    //    externalEQLFilter = eqlFilter;
    //}
    void setExternalEntityFilters(ArrayList entityFilters){
        externalEntityFilters = entityFilters;
    }
    void addExternalFilter(EntityData entityFilter){
        if(externalEntityFilters == null)
            externalEntityFilters = new ArrayList();    
        externalEntityFilters.add(entityFilter);
    }
    void removeAllExternalFilters(){
        externalEntityFilters.clear();
    }
    
    private static final Set allowedStatus = new HashSet();
    static {
        allowedStatus.add(new Long(TicketHelper.NEW_STATUS));
        allowedStatus.add(new Long(TicketHelper.ASSIGNED_STATUS));
        allowedStatus.add(new Long(TicketHelper.OWNED_STATUS));
    }

    public void searchRecords(Collection entitiesFilters,
                              GridSearchProperties props,
                              boolean isLocalSearch) {
        //DialogHelper.showModalMessageDialog("HERE ARE:");
        if(externalEntityFilters != null && externalEntityFilters.size() > 0) {
            if(entitiesFilters != null) {
                entitiesFilters.addAll(externalEntityFilters);
            } else {
                entitiesFilters = externalEntityFilters;
            }
            externalEntityFilters = null;
        }
            
        super.searchRecords(entitiesFilters, props, isLocalSearch);
        eventId = null;
    }
    
    public void handleCustomMenuEvent(String eventId) {
        if(eventId == null) return;
        FamgMeta.Index formIndex = getFormIndex();
        //Set event for future use.
        this.eventId = eventId;
        if (eventId.equals(MY_QUEUES) || eventId.equals(MY_TICKETS) || eventId.equals(OPEN_TICKETS)) {
            FormOperations formContext = getOperationContext().getFormOperations();
            if(eventId.equals(MY_QUEUES)){
                EntityReferenceData erd = new EntityReferenceData(OWNER);
                erd.setSelectedRowID(new Long(getUserId()));
                addExternalFilter(
                        new EntityData(TICKET_ENTITY, new Long(-1), 
                        new FieldData[] { erd } ));
            } else
            if(eventId.equals(MY_TICKETS)){
                EntityReferenceData erd = new EntityReferenceData(AGENT);
                erd.setSelectedRowID(new Long(getUserId()));
                addExternalFilter(
                        new EntityData(TICKET_ENTITY, new Long(-1), 
                        new FieldData[] { erd } ));
            } else
            if(eventId.equals(OPEN_TICKETS)){
                ListboxFieldData lbfd = new ListboxFieldData(STATUS,
                   new SubsetData(CollectionsHelper.createIncrementalArray(TicketHelper.CLOSED_STATUS, 0)));
                addExternalFilter(
                        new EntityData(TICKET_ENTITY, new Long(-1), 
                        new FieldData[] { lbfd } ));
            }    
            formContext.clearForm(formIndex, true);
            getOperationContext().performOperation(OperationTypes.SEARCH_RECORDS, formIndex);
        }
        if (eventId.equals(ACCEPT_TICKET)) {
            // check all custom dependances(conditions)
            if(checkDependences(formIndex)) {
                getOperationContext().performOperation(OperationTypes.LOCK_AND_EDIT_RECORD, formIndex);
            }
        }
    }

    private boolean checkDependences(FamgMeta.Index formIndex) {
        FormOperations formContext = getOperationContext().getFormOperations();
        int state = formContext.getFormState(formIndex);
        if(state != FormState.SELECTED_STATE) {
            return false;
        }

        int type = getOperationContext().getMetaData().getFamgMeta(formIndex).getForm().getEntityMeta().getField(STATUS).getDataType();
        if(type == FieldMeta.LISTBOX) {
            //get current status
            FieldData statusField = formContext.getFieldData(formIndex, STATUS);
            long curStatus = ((ListboxFieldData) statusField).getItemsSelected()
                    .getSelectedIDs()[SELECTED_INDEX];
            if(!allowedStatus.contains(new Long(curStatus))) {
                return false;
            }
        }
        FieldData ownerField = formContext.getFieldData(formIndex, OWNER);
        if(ownerField instanceof EntityReferenceData) {
            Long selRowId = ((EntityReferenceData) ownerField) .getSelectedRowID();
            if(selRowId != null && getUserId() != selRowId.longValue()) {
                if(DialogHelper.showModalQuestionDialog(CHANGE_OWNER_QUESTION)
                        == DialogHelper.NO) {
                    return false;
                }
            }
        }

        return true;
    }

    private long getUserId() {
        return getOperationContext().getMetaData().getUserProfile().getUserID();
    }

    private String getUserFullname() {
        return getOperationContext().getMetaData().getUserProfile().getFullName();
    }

    public void handleControlDataRequest(FieldDataRequest request) {
        FamgMeta.Index formIndex = getFormIndex();
        FormOperations context = getOperationContext().getFormOperations();
        String elementID = request.getElementID();
        if(COMPONENT_ID_FIELD_NAME.equalsIgnoreCase(elementID)) {
            EntityReferenceDataRequest theRequest = (EntityReferenceDataRequest) request;
            FieldData productData = context.getFieldData(formIndex,
                    PRODUCT_ID_FIELD_NAME);
            FieldData cloned = productData.cloneData();
            cloned.setFieldID(COMPONENT_FILTER_FIELD_NAME);
            theRequest.setAdditionalFilterForRequestingEntity(cloned);
        } else if(REP_BVERSION_ID_FIELD_NAME.equalsIgnoreCase(elementID)) {
            EntityReferenceDataRequest theRequest = (EntityReferenceDataRequest) request;
            FieldData productData = context.getFieldData(formIndex,
                    PRODUCT_ID_FIELD_NAME);
            FieldData cloned = productData.cloneData();
            cloned.setFieldID(BVERSION_FILTER_FIELD_NAME);
            theRequest.setAdditionalFilterForRequestingEntity(cloned);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -