org.oep.cmon.portlet.hosolienthong.HoSoLienThongPortlet.java Source code

Java tutorial

Introduction

Here is the source code for org.oep.cmon.portlet.hosolienthong.HoSoLienThongPortlet.java

Source

/*
 * Copyright (c) 2014 by Open eGovPlatform (http://http://openegovplatform.org/).
 * 
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 * 
 * 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 org.oep.cmon.portlet.hosolienthong;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.portlet.PortletModeException;
import javax.portlet.PortletRequest;
import javax.portlet.ResourceRequest;
import javax.portlet.WindowStateException;

import org.apache.commons.lang.WordUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.oep.cmon.Constants;
import org.oep.cmon.dao.beans.thongtinhoso.ThongTinHoSoImpl;
import org.oep.cmon.dao.hosolienthong.model.impl.HoSoLienThongModelImpl;
import org.oep.cmon.portlet.cmon.TiepNhanHoSoPortlet;
import org.oep.cmon.portlet.hosotructiep.HoSoBusinessUtil;
import org.oep.cmon.portlet.hosotructiep.HoSoJSON;
import org.oep.cmon.portlet.ruthoso.RutHoSoBusinessUtil;
import org.oep.cmon.util.EgovUtil;
import org.oep.cmon.util.MaSoBienNhanUtil;
import org.oep.egovcore.language.BusinessMessagerUtil;
import org.oep.egovcore.language.CmonMessagerUtil;
import org.oep.egovcore.portlet.AjaxResponse;
import org.oep.egovcore.util.DateTimeUtil;
import org.oep.egovcore.util.LiferayURL;
import org.oep.egovcore.validate.Validator;
import org.oep.egovcore.validate.term.IsNumber;
import org.oep.egovcore.validate.util.DateTimePairValidator;
import org.oep.sharedservice.cmon.provider.form.FormServiceImpl;

import org.oep.cmon.dao.beans.giaytodinhkemhoso.GiayToDinhKemHoSo;
import org.oep.cmon.dao.beans.thongtinhoso.ThongTinHoSo;
import org.oep.cmon.dao.beans.thongtinthutuc.ThongTinThuTuc;
import org.oep.cmon.dao.beans.thongtinthutuc2coquan.ThongTinThuTuc2CoQuan;
import org.oep.cmon.dao.cc.model.CongChuc;
import org.oep.cmon.dao.cc.service.ChucVuLocalServiceUtil;
import org.oep.cmon.dao.cc.service.CongChucLocalServiceUtil;
import org.oep.cmon.dao.dvc.model.ThuTucHanhChinh;
import org.oep.cmon.dao.dvc.service.ThuTucHanhChinhLocalServiceUtil;
import org.oep.cmon.dao.hosohcc.model.HoSoTTHCCong;
import org.oep.cmon.dao.hosohcc.model.YKienTraoDoi;
import org.oep.cmon.dao.hosohcc.model.YKienTraoDoiClp;
import org.oep.cmon.dao.hosohcc.service.FileDinhKemLocalServiceUtil;
import org.oep.cmon.dao.hosohcc.service.HoSoTTHCCongLocalServiceUtil;
import org.oep.cmon.dao.hosohcc.service.YKienTraoDoiLocalServiceUtil;
import org.oep.cmon.dao.hosolienthong.model.HoSoLienThong;
import org.oep.cmon.dao.hosolienthong.model.HoSoLienThongClp;
import org.oep.cmon.dao.hosolienthong.service.HoSoLienThongLocalServiceUtil;
import org.oep.cmon.dao.nsd.service.TaiKhoanNguoiDungLocalServiceUtil;
import org.oep.cmon.dao.qlhc.model.CoQuanQuanLy;
import org.oep.cmon.dao.qlhc.service.CoQuanQuanLyLocalServiceUtil;
import org.oep.egovcore.sqlutil.QueryResult;
import vn.dtt.sharedservice.WebserviceFactory;
import vn.dtt.sharedservice.bpm.consumer.uengine.IBrms;
import vn.dtt.sharedservice.bpm.consumer.uengine.KeyedParameter;

import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;

/**
 * This is class HoSoLienThongPortlet
 * Version: 1.0
 *  
 * History: 
 *   DATE        AUTHOR      DESCRIPTION 
 *  ------------------------------------------------- 
 *  3-March-2013  Nam Dinh    Create new
 */
public class HoSoLienThongPortlet extends TiepNhanHoSoPortlet {

    /**
     * This is function serveThongTinHoSoThuTuc
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws Exception
     */
    @Override
    public void serveThongTinHoSoThuTuc(ResourceRequest request, AjaxResponse ajaxResponse) throws Exception {

        long thuTucId = ParamUtil.getLong(request, HSLTFields.thuTucHanhChinhId),
                coQuanId = ParamUtil.getLong(request, HSLTFields.coQuanQuanLyId),
                hoSoId = ParamUtil.getLong(request, HSLTFields.hoSoId);

        JSONObject thongTinThuTucJSON = null;
        JSONArray dsGiayToJSON = null;

        // Fill thong tin luc tiep nhan khoi tao lien thong
        // soBoHoSo: mac dinh fill thong tin da nop o co quan khoi tai lien thong, cho edit
        // lePhi, phi: mac dinh fill thong tin da nop o co quan khoi tai lien thong, khong cho edit
        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoId);
        HSLTBusinessUtil.fillThongTinHoSoLucKhoiTaoLienThong(hoSo);
        ThongTinHoSo thongTinHoSo = new ThongTinHoSoImpl(hoSo);

        // Thu tuc se la thu tuc can tiep nhan lien thong
        thongTinHoSo.setThuTucId(thuTucId);

        // So ngay xu ly: fill so ngay xu ly du kien cua thu tuc can tiep nhan
        ThongTinThuTuc2CoQuan thuTuc2CoQuanInfo = ThuTucHanhChinhLocalServiceUtil
                .fetchThongTinThuTuc2CoQuan(thuTucId, coQuanId);
        thongTinHoSo.setSoNgayXuLy(thuTuc2CoQuanInfo.getSoNgayXuLy());

        // DS giay to quy dinh: fill ds giay to cua thu tuc can tiep nhan lien thong
        List<GiayToDinhKemHoSo> ds = FileDinhKemLocalServiceUtil.getDSGiayToKhiTiepNhanHoSo(thuTucId);

        thongTinThuTucJSON = HoSoJSON.thuTucCuaHoSo(thongTinHoSo);
        dsGiayToJSON = HoSoJSON.dsGiayToDinhKemHoSo(ds);

        ajaxResponse.send(HSLTFields.thongTinThuTuc, thongTinThuTucJSON).send(HSLTFields.dsGiayToQuyDinh,
                dsGiayToJSON);
        ;
    }

    /**
     * This is function processTraKetQuaLienThong
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param hoSo
     * @throws SystemException
     * @throws PortalException
     */
    public static void processTraKetQuaLienThong(PortletRequest request, HoSoTTHCCong hoSo)
            throws SystemException, PortalException {
        Date now = DateTimeUtil.getDateTimeNow();
        String email = PortalUtil.getUser(request).getEmailAddress();
        HoSoLienThong hoSoLienThong = HoSoLienThongLocalServiceUtil
                .fetchHoSoLienThong(ParamUtil.getLong(request, HSLTFields.hoSoLienThongId));
        hoSoLienThong.setTrangThaiLienThong(HSLTBusinessUtil.TTLT_DA_TRA_KET_QUA);
        hoSoLienThong.setNgayNoiNhanTraKetQua(now);
        hoSoLienThong.setNgaySua(now);
        hoSoLienThong.setNguoiSua(email);
        HoSoLienThongLocalServiceUtil.updateHoSoLienThong(hoSoLienThong);

        hoSo.setTrangThaiHoSo(Constants.TRANGTHAIHOSO.HO_SO_DA_TRA_KET_QUA);
        hoSo.setNgaySua(now);
        hoSo.setNguoiSua(email);
        HoSoTTHCCongLocalServiceUtil.updateHoSoTTHCCong(hoSo);
    }

    /**
     * This is function serveChiTietTuChoi
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws SystemException
     */
    public void serveChiTietTuChoi(ResourceRequest request, AjaxResponse ajaxResponse) throws SystemException {

        long hoSoLienThongId = ParamUtil.getLong(request, HSLTFields.hoSoLienThongId);
        HoSoLienThong hoSoLienThong = HoSoLienThongLocalServiceUtil.fetchHoSoLienThong(hoSoLienThongId);

        String lucTuChoi = StringPool.BLANK, noiDungTuChoi = StringPool.BLANK, hoTenCanBoTuChoi = StringPool.BLANK;

        CongChuc congChucDaDangNhap = EgovUtil.getCongChucDaDangNhap(PortalUtil.getUserId(request));

        List<YKienTraoDoi> list = YKienTraoDoiLocalServiceUtil.findByHoSoTTHCCongIdAndLoai(
                hoSoLienThong.getHoSoId(), Constants.LOAI_Y_KIEN_TRAO_DOI.TU_CHOI_HO_SO);

        YKienTraoDoi yKien = null;
        for (YKienTraoDoi item : list) {
            if (item.getNguoiNhanId().equals(congChucDaDangNhap.getTaiKhoanNguoiDungId())) {
                yKien = item;
                break;
            }
        }

        if (yKien != null) {
            noiDungTuChoi = yKien.getNoiDungYKien();
            List<CongChuc> ds = CongChucLocalServiceUtil.findByTaiKhoanNguoiDungId(yKien.getNguoiGuiId());
            if (!ds.isEmpty()) {
                hoTenCanBoTuChoi = ds.get(0).getHoVaTen();
            }
        }

        lucTuChoi = DateTimeUtil.getFullDateTime(hoSoLienThong.getNgayTuChoi(), false);

        ajaxResponse.send(HSLTFields.tenThuTucGui, hoSoLienThong.getTenThuTucGui());
        ajaxResponse.send(HSLTFields.hoTenNguoiNopHoSo, hoSoLienThong.getHoTenCongDanNop());
        ajaxResponse.send(HSLTFields.lucGui, DateTimeUtil.getFullDateTime(hoSoLienThong.getNgayGui(), false));
        ajaxResponse.send(HSLTFields.lucTuChoi, lucTuChoi);
        ajaxResponse.send(HSLTFields.yKienTuChoi, noiDungTuChoi);
        ajaxResponse.send(HSLTFields.hoTenCanBoTuChoi, hoTenCanBoTuChoi);
        ajaxResponse.send(HSLTFields.tenCoQuanNhan, hoSoLienThong.getTenCoQuanNhan());
        ajaxResponse.send(HSLTFields.tenCoQuanNhan, hoSoLienThong.getTenCoQuanNhan());

        // Parameter de gui lai lien thong
        ajaxResponse.send(HSLTFields.hoSoId, hoSoLienThong.getHoSoId());
        ajaxResponse.send(HSLTFields.thuTucNhanId, hoSoLienThong.getThuTucNhanId());
        ajaxResponse.send(HSLTFields.coQuanNhanId, hoSoLienThong.getCoQuanNhanId());
    }

    /**
     * This is function processTuChoiLienThong
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws Exception
     */
    public void processTuChoiLienThong(ResourceRequest request, AjaxResponse ajaxResponse) throws Exception {
        long hoSoLienThongId = ParamUtil.getLong(request, HSLTFields.hoSoLienThongId);
        User liferayUser = PortalUtil.getUser(request);
        HoSoLienThong hoSoLienThong = HoSoLienThongLocalServiceUtil.fetchHoSoLienThong(hoSoLienThongId);
        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId());
        String emailCanBo = liferayUser.getEmailAddress();

        // GOI WS UENGINE TU CHOI HO SO LIEN THONG
        _pushUengine2NextStep(hoSo.getMaSoHoSo(), emailCanBo, UE_APPROVED_VALUE_NO);

        hoSoLienThong.setTrangThaiLienThong(HSLTBusinessUtil.TTLT_DA_TU_CHOI);
        Date now = DateTimeUtil.getDateTimeNow();
        hoSoLienThong.setNgaySua(now);
        hoSoLienThong.setNgayTuChoi(now);
        hoSoLienThong.setNguoiSua(emailCanBo);
        HoSoLienThongLocalServiceUtil.updateHoSoLienThong(hoSoLienThong);

        YKienTraoDoi yKienTuChoi = new YKienTraoDoiClp();
        yKienTuChoi.setHoSoTTHCCongId(hoSo.getId());
        yKienTuChoi.setId(CounterLocalServiceUtil.increment(YKienTraoDoi.class.getName()));

        String noiDungYKien = ParamUtil.getString(request, HSLTFields.yKienTuChoi).trim();
        yKienTuChoi.setNoiDungYKien(noiDungYKien);
        yKienTuChoi.setNguoiGuiId(EgovUtil.getCongChucDaDangNhap(liferayUser.getUserId()).getTaiKhoanNguoiDungId());
        yKienTuChoi
                .setNguoiNhanId(
                        TaiKhoanNguoiDungLocalServiceUtil
                                .fetchTaiKhoanNguoiDung(CongChucLocalServiceUtil
                                        .fetchCongChuc(hoSoLienThong.getCanBoGuiId()).getTaiKhoanNguoiDungId())
                                .getId());
        yKienTuChoi.setLoai(Constants.LOAI_Y_KIEN_TRAO_DOI.TU_CHOI_HO_SO);
        yKienTuChoi.setTieuDe(StringPool.SPACE);
        yKienTuChoi.setThoiGianGuiYKien(now);
        yKienTuChoi.setTrangThai(0);
        YKienTraoDoiLocalServiceUtil.addYKienTraoDoi(yKienTuChoi);

        ajaxResponse.sendSuccessMessage(CmonMessagerUtil.get("message.xu_ly_thanh_cong"));
        ajaxResponse.redirect(HSLTBusinessUtil.getURLDanhSachHoSoNoiNhan(request).toString());
    }

    private static final String _PREFIX = "field";

    /**
     * This is function _validate
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws SystemException
     * @return boolean
     */
    private boolean _validate(UploadPortletRequest request, AjaxResponse ajaxResponse) throws SystemException {

        Validator validator = new Validator(request, BusinessMessagerUtil.forPrefix(request, _PREFIX));
        validator.check(new IsNumber(IsNumber.GTE0), HSLTFields.soNgayXuLy);
        DateTimePairValidator.forDayAndHourMinute(validator, HSLTFields.ngayNhanHoSo, HSLTFields.gioPhutNhanHoSo,
                HSLTFields.ngayHenTraHoSo, HSLTFields.gioPhutHenTraHoSo, true);

        // Validate upload tiep nhan
        _validateUpload(request, validator);

        return ajaxResponse.sendValidateResult(validator);
    }

    /**
     * This is function _saveInfo
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param hoSoLienThong
     * @param liferayUser
     * @throws SystemException
     * @throws PortalException
     */
    private void _saveInfo(UploadPortletRequest request, HoSoLienThong hoSoLienThong, User liferayUser)
            throws SystemException, PortalException {

        Date now = DateTimeUtil.getDateTimeNow();
        Date ngayNhanHoSo = DateTimeUtil.getRequestDate(request, HSLTFields.ngayNhanHoSo,
                HSLTFields.gioPhutNhanHoSo);
        if (ngayNhanHoSo == null) {
            ngayNhanHoSo = now;
        }
        ThuTucHanhChinh thuTuc = ThuTucHanhChinhLocalServiceUtil
                .fetchThuTucHanhChinh(hoSoLienThong.getThuTucNhanId());
        CongChuc canBoTiepNhan = EgovUtil.getCongChucDaDangNhap(liferayUser.getUserId());
        CoQuanQuanLy cqql = CoQuanQuanLyLocalServiceUtil.fetchCoQuanQuanLy(canBoTiepNhan.getCoQuanQuanLyId());
        String maSoBienNhanMoi = MaSoBienNhanUtil.get(cqql.getMaCapSoBienNhan(), thuTuc.getMaDNG(), false);
        String email = liferayUser.getEmailAddress();

        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId());
        hoSo.setNguoiSua(email);
        hoSo.setNgaySua(now);
        hoSo.setCoQuanTiepNhanId(hoSoLienThong.getCoQuanNhanId());
        hoSo.setTenCoQuanTiepNhan(hoSoLienThong.getTenCoQuanNhan());
        hoSo.setCanBoTiepNhanId(canBoTiepNhan.getId());
        hoSo.setTenCanBoTiepNhan(canBoTiepNhan.getHoVaTen());
        hoSo.setThuTucHanhChinhId(hoSoLienThong.getThuTucNhanId());
        hoSo.setTenThuTucHanhChinh(hoSoLienThong.getTenThuTucNhan());
        hoSo.setCanBoXuLyHienThoiId(canBoTiepNhan.getId());

        // Truong hop Uengine chua update trang thai, thi Liferay se update thanh Dang Xu Ly
        if (hoSo.getTrangThaiHoSo() == Constants.TRANGTHAIHOSO.CHO_THUC_HIEN_LIEN_THONG) {
            hoSo.setTrangThaiHoSo(Constants.TRANGTHAIHOSO.HO_SO_DANG_XU_LY);
        }

        hoSo.setChucVuCanBoTiepNhan(ChucVuLocalServiceUtil.getChucVu(canBoTiepNhan.getChucVuId()).getTen());
        hoSo.setMoTaThanhPhanHoSo(ParamUtil.getString(request, HSLTFields.moTaGiayToKhac));
        hoSo.setLienKetThanhPhanHoSo(ParamUtil.getString(request, HSLTFields.lienKetGiayToKhac));
        hoSo.setMaSoBienNhan(maSoBienNhanMoi);
        hoSo.setSoBoHoSo(ParamUtil.getInteger(request, HSLTFields.soBoHoSo));
        HoSoTTHCCongLocalServiceUtil.updateHoSoTTHCCong(hoSo);

        hoSoLienThong.setTrangThaiLienThong(HSLTBusinessUtil.TTLT_DA_TIEP_NHAN);
        hoSoLienThong.setCanBoNhanId(canBoTiepNhan.getId());
        hoSoLienThong.setHoTenCanBoNhan(canBoTiepNhan.getHoVaTen());
        hoSoLienThong.setNgayNhan(ngayNhanHoSo);

        // Ngay hen tra va so ngay xu ly cua co quan tiep nhan lien thong
        hoSoLienThong.setNgayNoiNhanHenTra(
                DateTimeUtil.getRequestDate(request, HSLTFields.ngayHenTraHoSo, HSLTFields.gioPhutHenTraHoSo));
        hoSoLienThong.setSoNgayNoiNhanXuLyDuKien(ParamUtil.getInteger(request, HSLTFields.soNgayXuLy));

        long canBoNopHoSoGiayId = ParamUtil.getLong(request, HSLTFields.canBoNopHoSoGiayId);
        CongChuc canBoNopHoSoGiay = CongChucLocalServiceUtil.fetchCongChuc(canBoNopHoSoGiayId);

        if (canBoNopHoSoGiay != null) {
            hoSoLienThong.setCanBoNopHoSoGiayId(canBoNopHoSoGiayId);
            hoSoLienThong.setHoTenCanBoNopHoSoGiay(canBoNopHoSoGiay.getHoVaTen());
        }

        hoSoLienThong.setMaSoBienNhanLucNhan(maSoBienNhanMoi);
        hoSoLienThong.setNgaySua(now);
        hoSoLienThong.setNguoiSua(email);
        HoSoLienThongLocalServiceUtil.updateHoSoLienThong(hoSoLienThong);

        request.setAttribute(HSLTFields.hoSoId, hoSo.getId());
        request.setAttribute(HSLTFields.trangThaiHoSo, Constants.HOSO_TTHC_CONG_TRANG_THAI_HOSO_RECEIVED);
        request.setAttribute(HSLTFields.maUngDung, new FormServiceImpl().getMaUngDungTheoQuyTrinh(thuTuc.getId()));
    }

    /**
     * This is function processTiepNhanLienThong
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws Exception
     */
    public void processTiepNhanLienThong(UploadPortletRequest request, AjaxResponse ajaxResponse) throws Exception {

        if (!_validate(request, ajaxResponse)) {
            return;
        }

        User liferayUser = PortalUtil.getUser(request);
        long hoSoLienThongId = ParamUtil.getLong(request, HSLTFields.hoSoLienThongId);
        HoSoLienThong hoSoLienThong = HoSoLienThongLocalServiceUtil.fetchHoSoLienThong(hoSoLienThongId);
        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId());

        // GOI UENGINE DE CHAY TIEP NHAN LIEN THONG 
        _pushUengine2NextStep(hoSo.getMaSoHoSo(), liferayUser.getEmailAddress(), UE_APPROVED_VALUE_YES);

        // Luu thong tin tiep nhan
        _saveInfo(request, hoSoLienThong, liferayUser);

        String maUngDung = (String) request.getAttribute(HSLTFields.maUngDung);

        // Upload dinh kem giai doan tiep nhan
        _upload(request, hoSo.getId(), hoSo.getTrangThaiHoSo(), maUngDung);

        // Chuyen den trang chi tiet giay bien nhan
        LiferayURL inBienNhanURL = HoSoBusinessUtil.getURLInBienNhan(request)
                .setParameter(HSLTFields.hoSoId, hoSo.getId())
                .setParameter(HSLTFields.hoSoLienThongId, hoSoLienThongId)
                .setParameter("backURL", ParamUtil.getString(request, "backURL"));

        ajaxResponse.redirect(inBienNhanURL.toString());
    }

    protected static Log _log = LogFactoryUtil.getLog(HoSoLienThongPortlet.class);

    /**
     * This is function _pushUengine2NextStep
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param maHoSo
     * @param emailCanBo
     * @param yesOrNo
     * @throws SystemException
     */
    private void _pushUengine2NextStep(String maHoSo, String emailCanBo, String yesOrNo) throws SystemException {

        IBrms brms = WebserviceFactory.getUengineService();

        List<KeyedParameter> processVariables = new ArrayList<KeyedParameter>();
        KeyedParameter processVariable = new KeyedParameter();

        //De quy trinh re nhanh phai "H s y "
        processVariable.setKey(UE_APPROVED_KEY);
        processVariable.setValue(yesOrNo);
        processVariables.add(processVariable);

        boolean b;
        String rootExceptionMessage = StringPool.BLANK;
        try {
            _log.info("_____________GOI WS UENGINE "
                    + (yesOrNo.equals(UE_APPROVED_VALUE_YES) ? " TIEP NHAN " : " TU CHOI ") + "LIEN THONG -maHoSo:"
                    + maHoSo + " -emailCanBo:" + emailCanBo);
            b = brms.completeWorkitemByAddProfile(maHoSo, emailCanBo, processVariables);
        } catch (javax.xml.ws.WebServiceException e) {
            rootExceptionMessage = "<br>Root Exception Message:" + ExceptionUtils.getRootCauseMessage(e);
            b = false;
        }

        if (!b) {
            throw new SystemException("LOI KHI GOI WEBSERVICE UENGINE"
                    + (yesOrNo.equals(UE_APPROVED_VALUE_YES) ? " TIEP NHAN " : " TU CHOI ") + "HO SO LIEN THONG"
                    + "<br>WebserviceFactory.getUengineService().completeWorkitemByAddProfile()" + "<br>maHoSo:"
                    + maHoSo + "<br>emailCanBo:" + emailCanBo + "<br>keyedParameter.getKey():" + UE_APPROVED_KEY
                    + "<br>keyedParameter.getValue():" + yesOrNo + rootExceptionMessage);
        }
    }

    /**
     * This is function processNhanKetQuaXuLyLienThong
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws PortalException
     * @throws SystemException
     * @throws WindowStateException
     * @throws PortletModeException
     */
    public void processNhanKetQuaXuLyLienThong(ResourceRequest request, AjaxResponse ajaxResponse)
            throws PortalException, SystemException, WindowStateException, PortletModeException {
        HoSoLienThong hoSoLienThong = HoSoLienThongLocalServiceUtil
                .fetchHoSoLienThong(ParamUtil.getLong(request, HSLTFields.hoSoLienThongId));
        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId());
        Date now = DateTimeUtil.getDateTimeNow();
        String email = PortalUtil.getUser(request).getEmailAddress();

        hoSoLienThong.setTrangThaiLienThong(HSLTBusinessUtil.TTLT_DA_NHAN_KET_QUA);
        hoSoLienThong.setNgaySua(now);
        hoSoLienThong.setNgayNoiGuiNhanKetQua(now);
        hoSoLienThong.setNguoiSua(email);
        HoSoLienThongLocalServiceUtil.updateHoSoLienThong(hoSoLienThong);

        hoSo.setTrangThaiHoSo(Constants.TRANGTHAIHOSO.HO_SO_DA_XU_LY_XONG);
        hoSo.setCoQuanTiepNhanId(hoSoLienThong.getCoQuanGuiId());
        hoSo.setTenCoQuanTiepNhan(hoSoLienThong.getTenCoQuanGui());
        hoSo.setThuTucHanhChinhId(hoSoLienThong.getThuTucGuiId());
        hoSo.setTenThuTucHanhChinh(hoSoLienThong.getTenThuTucGui());
        hoSo.setCanBoXuLyHienThoiId(hoSoLienThong.getCanBoGuiId());
        hoSo.setCanBoTiepNhanId(hoSoLienThong.getCanBoTiepNhanNoiGuiId());
        hoSo.setTenCanBoTiepNhan(hoSoLienThong.getHoTenCanBoTiepNhanNoiGui());
        hoSo.setMaSoBienNhan(hoSoLienThong.getMaSoBienNhanLucGui());
        hoSo.setNgaySua(now);
        hoSo.setNguoiSua(email);
        HoSoTTHCCongLocalServiceUtil.updateHoSoTTHCCong(hoSo);
        ajaxResponse.sendSuccessMessage(BusinessMessagerUtil.get(request, "message.nhan_ket_qua_thanh_cong"));
        ajaxResponse.reload();
    }

    /**
     * This is function processGuiHoSoLienThong
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws SystemException
     * @throws PortalException
     */
    public void processGuiHoSoLienThong(ResourceRequest request, AjaxResponse ajaxResponse)
            throws SystemException, PortalException {
        long hoSoId = ParamUtil.getLong(request, HSLTFields.hoSoId),
                coQuanNhanId = ParamUtil.getLong(request, HSLTFields.coQuanNhanId),
                thuTucNhanId = ParamUtil.getLong(request, HSLTFields.thuTucNhanId);

        User liferayUser = PortalUtil.getUser(request);
        String email = liferayUser.getEmailAddress();
        Date now = DateTimeUtil.getDateTimeNow();

        CongChuc congChucDaDangNhap = EgovUtil.getCongChucDaDangNhap(liferayUser.getUserId());
        HoSoTTHCCong hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoId);
        CoQuanQuanLy coQuanGui = CoQuanQuanLyLocalServiceUtil.fetchCoQuanQuanLy(hoSo.getCoQuanTiepNhanId());
        ThuTucHanhChinh thuTucGui = ThuTucHanhChinhLocalServiceUtil
                .fetchThuTucHanhChinh(hoSo.getThuTucHanhChinhId());
        CoQuanQuanLy coQuanNhan = CoQuanQuanLyLocalServiceUtil.fetchCoQuanQuanLy(coQuanNhanId);
        ThuTucHanhChinh thuTucNhan = ThuTucHanhChinhLocalServiceUtil.fetchThuTucHanhChinh(thuTucNhanId);

        HoSoLienThong hoSoLienThong = null;
        boolean laGuiLaiSauKhiBiTuChoi = false;

        hoSo.setTrangThaiHoSo(Constants.TRANGTHAIHOSO.CHO_THUC_HIEN_LIEN_THONG);
        HoSoTTHCCongLocalServiceUtil.updateHoSoTTHCCong(hoSo);

        for (HoSoLienThong item : HSLTBusinessUtil.getDSHoSoLienThong(hoSo)) {
            if (item.getTrangThaiLienThong() == HSLTBusinessUtil.TTLT_DA_TU_CHOI
                    && item.getCoQuanGuiId() == congChucDaDangNhap.getCoQuanQuanLyId()) {
                laGuiLaiSauKhiBiTuChoi = true;
                hoSoLienThong = item;
                break;
            }
        }

        if (!laGuiLaiSauKhiBiTuChoi) {
            hoSoLienThong = new HoSoLienThongClp();
            hoSoLienThong.setId(CounterLocalServiceUtil.increment(HoSoLienThongModelImpl.TABLE_NAME));
            hoSoLienThong.setNgayTao(now);
            hoSoLienThong.setNguoiTao(email);
            hoSoLienThong.setThuTuLienThong(HoSoLienThongLocalServiceUtil.countByHoSoId(hoSo.getId()) + 1);
        }

        hoSoLienThong.setNgaySua(now);
        hoSoLienThong.setNguoiSua(email);
        hoSoLienThong.setNgayGui(now);
        hoSoLienThong.setCanBoGuiId(congChucDaDangNhap.getId());
        hoSoLienThong.setHoTenCanBoGui(congChucDaDangNhap.getHoVaTen());
        hoSoLienThong.setTrangThaiLienThong(HSLTBusinessUtil.TTLT_CHO_TIEP_NHAN);
        hoSoLienThong.setGhiChuGuiLienThong(ParamUtil.getString(request, HSLTFields.ghiChuGuiLienThong).trim());
        hoSoLienThong.setHoSoId(hoSoId);

        hoSoLienThong.setCoQuanGuiId(coQuanGui.getId());
        hoSoLienThong.setTenCoQuanGui(coQuanGui.getTen());
        hoSoLienThong.setThuTucGuiId(thuTucGui.getId());
        hoSoLienThong.setTenThuTucGui(thuTucGui.getTen());
        hoSoLienThong.setCoQuanNhanId(coQuanNhan.getId());
        hoSoLienThong.setTenCoQuanNhan(coQuanNhan.getTen());
        hoSoLienThong.setThuTucNhanId(thuTucNhan.getId());
        hoSoLienThong.setTenThuTucNhan(thuTucNhan.getTen());

        hoSoLienThong.setMaSoBienNhanLucGui(hoSo.getMaSoBienNhan());
        hoSoLienThong.setHoTenCongDanNop(hoSo.getHoTenNguoiNopHoSo());
        hoSoLienThong.setDiaChiDayDuCongDanNop(HoSoBusinessUtil.getDiaChiDayDuCongDanNopHoSo(hoSo));
        hoSoLienThong.setCanBoTiepNhanNoiGuiId(hoSo.getCanBoTiepNhanId());
        hoSoLienThong.setHoTenCanBoTiepNhanNoiGui(hoSo.getTenCanBoTiepNhan());

        HoSoLienThongLocalServiceUtil.updateHoSoLienThong(hoSoLienThong);

        ajaxResponse.sendSuccessMessage(BusinessMessagerUtil.get(request, "message.gui_ho_so_thanh_cong"));
        ajaxResponse.reload();
    }

    /**
     * This is function searchHoSoLienThongNoiGui
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws Exception
     */
    public void searchHoSoLienThongNoiGui(ResourceRequest request, AjaxResponse ajaxResponse) throws Exception {
        long thuTucGuiId = ParamUtil.getLong(request, HSLTFields.thuTucGuiId);
        long[] thuTucGuiIds;
        CongChuc canBoNoiGui = EgovUtil.getCongChucDaDangNhap(PortalUtil.getUserId(request));

        if (thuTucGuiId == 0L) {

            List<ThongTinThuTuc> thuTucs = HSLTBusinessUtil.getDSThuTucLienThongNoiGui2CanBo(canBoNoiGui);
            int size = thuTucs.size();
            thuTucGuiIds = new long[size];
            for (int i = 0; i < size; ++i) {
                thuTucGuiIds[i] = thuTucs.get(i).getThuTucId();
            }
        } else {
            thuTucGuiIds = new long[] { thuTucGuiId };
        }

        QueryResult<HoSoLienThong> queryResult = HoSoLienThongLocalServiceUtil.searchHoSoNoiGui(request,
                canBoNoiGui, thuTucGuiIds);
        JSONArray searchResultJSON = JSONFactoryUtil.createJSONArray();
        JSONObject jsitem;

        int count = queryResult.getFetchedCount();
        int trangThaiLienThong;
        List<HoSoLienThong> result = queryResult.getResult();
        HoSoLienThong hoSoLienThong = null;
        HoSoTTHCCong hoSo = null;

        for (int i = 0; i < count; i++) {
            hoSoLienThong = result.get(i);
            trangThaiLienThong = hoSoLienThong.getTrangThaiLienThong();

            jsitem = JSONFactoryUtil.createJSONObject().put(HSLTFields.hoSoLienThongId, hoSoLienThong.getId())
                    .put(HSLTFields.hoSoId, hoSoLienThong.getHoSoId())
                    .put(HSLTFields.tenThuTucGui, hoSoLienThong.getTenThuTucGui())
                    .put(HSLTFields.maSoBienNhanLucGui, hoSoLienThong.getMaSoBienNhanLucGui())
                    .put(HSLTFields.hoTenNguoiNopHoSo,
                            WordUtils.capitalizeFully(hoSoLienThong.getHoTenCongDanNop()))
                    .put(HSLTFields.hoTenCanBoGui, WordUtils.capitalizeFully(hoSoLienThong.getHoTenCanBoGui()))
                    .put(HSLTFields.lucGui, DateTimeUtil.getFullDateTimeShort(hoSoLienThong.getNgayGui(), false))
                    .put(HSLTFields.tenCoQuanNhan, hoSoLienThong.getTenCoQuanNhan())
                    .put(HSLTFields.trangThaiLienThong, trangThaiLienThong).put(HSLTFields.tenTrangThaiLienThong,
                            HSLTBusinessUtil.getTenTrangThaiLienThong(request, trangThaiLienThong));

            jsitem.put(HSLTFields.coTheXemChiTiet, (trangThaiLienThong == HSLTBusinessUtil.TTLT_DA_NHAN_KET_QUA
                    || trangThaiLienThong == HSLTBusinessUtil.TTLT_DA_TU_CHOI));

            jsitem.put(HSLTFields.daTraKetQua, trangThaiLienThong == HSLTBusinessUtil.TTLT_DA_TRA_KET_QUA);

            hoSo = HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId());
            jsitem.put(HSLTFields.coTheGuiLienThongLai,
                    trangThaiLienThong == HSLTBusinessUtil.TTLT_DA_TU_CHOI && (!hoSo.getDungXuLy()));

            if (trangThaiLienThong == HSLTBusinessUtil.TTLT_DA_TIEP_NHAN) {
                jsitem.put(HSLTFields.coTheYeuCauRut, RutHoSoBusinessUtil.laHoSoCanBoDuocPhepYeuCauRut(
                        HoSoTTHCCongLocalServiceUtil.fetchHoSoTTHCCong(hoSoLienThong.getHoSoId())));
                jsitem.put(HSLTFields.yeuCauRutURL, RutHoSoBusinessUtil.getURLCanBoYeuCauRut(request,
                        hoSoLienThong.getHoSoId(), HSLTBusinessUtil.getURLDanhSachHoSoNoiGui(request)));
            } else {
                jsitem.put(HSLTFields.coTheYeuCauRut, false);
            }

            searchResultJSON.put(jsitem);
        }

        ajaxResponse.sendSearchResult(queryResult, searchResultJSON);
    }

    /**
     * This is function searchHoSoLienThongNoiNhan
     * Version: 1.0
     *  
     * History: 
     *   DATE        AUTHOR      DESCRIPTION 
     *  ------------------------------------------------- 
     *  3-March-2013  Nam Dinh    Create new
     * @param request
     * @param ajaxResponse
     * @throws Exception
     */
    public void searchHoSoLienThongNoiNhan(ResourceRequest request, AjaxResponse ajaxResponse) throws Exception {

        long thuTucNhanId = ParamUtil.getLong(request, HSLTFields.thuTucNhanId);
        long[] thuTucNhanIds;
        CongChuc canBoNoiNhan = EgovUtil.getCongChucDaDangNhap(PortalUtil.getUserId(request));

        if (thuTucNhanId == 0L) {
            List<ThongTinThuTuc> thuTucs = HSLTBusinessUtil.getDSThuTucLienThongNoiNhan2CanBo(canBoNoiNhan);
            int size = thuTucs.size();
            thuTucNhanIds = new long[size];
            for (int i = 0; i < size; ++i) {
                thuTucNhanIds[i] = thuTucs.get(i).getThuTucId();
            }
        } else {
            thuTucNhanIds = new long[] { thuTucNhanId };
        }

        QueryResult<HoSoLienThong> queryResult = HoSoLienThongLocalServiceUtil.searchHoSoNoiNhan(request,
                canBoNoiNhan, thuTucNhanIds);
        JSONArray searchResultJSON = JSONFactoryUtil.createJSONArray();

        int count = queryResult.getFetchedCount();
        int trangThaiLienThong;
        List<HoSoLienThong> result = queryResult.getResult();
        HoSoLienThong hoSoLienThong;

        for (int i = 0; i < count; i++) {
            hoSoLienThong = result.get(i);
            trangThaiLienThong = hoSoLienThong.getTrangThaiLienThong();

            searchResultJSON.put(JSONFactoryUtil.createJSONObject()
                    .put(HSLTFields.hoSoLienThongId, hoSoLienThong.getId())
                    .put(HSLTFields.hoSoId, hoSoLienThong.getHoSoId())
                    .put(HSLTFields.tenThuTucNhan, hoSoLienThong.getTenThuTucNhan())
                    .put(HSLTFields.hoTenNguoiNopHoSo,
                            WordUtils.capitalizeFully(hoSoLienThong.getHoTenCongDanNop()))
                    .put(HSLTFields.diaChiDayDuCongDanNop, hoSoLienThong.getDiaChiDayDuCongDanNop())
                    .put(HSLTFields.tenCoQuanGui, hoSoLienThong.getTenCoQuanGui())
                    .put(HSLTFields.hoTenCanBoGui, WordUtils.capitalizeFully(hoSoLienThong.getHoTenCanBoGui()))
                    .put(HSLTFields.lucGui, DateTimeUtil.getFullDateTimeShort(hoSoLienThong.getNgayGui(), false))
                    .put(HSLTFields.trangThaiLienThong, trangThaiLienThong).put(HSLTFields.tenTrangThaiLienThong,
                            HSLTBusinessUtil.getTenTrangThaiLienThong(request, trangThaiLienThong)));
        }

        ajaxResponse.sendSearchResult(queryResult, searchResultJSON);
    }

    private static final String UE_APPROVED_KEY = "isApproved";
    private static final String UE_APPROVED_VALUE_YES = "YES";
    private static final String UE_APPROVED_VALUE_NO = "NO";
}