org.oep.cmon.portlet.taocongdan.action.TaoCongDanAction.java Source code

Java tutorial

Introduction

Here is the source code for org.oep.cmon.portlet.taocongdan.action.TaoCongDanAction.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.taocongdan.action;

import java.io.IOException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletRequest;

import org.oep.cmon.admin.portlet.util.ConvertUtil;
import org.oep.cmon.portlet.taocongdan.business.TaoCongDanBusiness;
import org.oep.cmon.portlet.taocongdan.util.FormatUtil;

import org.oep.cmon.dao.cd.model.CongDan;
import org.oep.cmon.dao.cd.service.CongDanLocalServiceUtil;
import org.oep.cmon.dao.dvc.model.DoiTuongSuDung;
import org.oep.cmon.dao.dvc.service.DoiTuongSuDungLocalServiceUtil;
import org.oep.cmon.dao.nsd.model.TaiKhoanNguoiDung;
import org.oep.cmon.dao.nsd.service.TaiKhoanNguoiDungLocalServiceUtil;
import vn.dtt.sharedservice.WebserviceFactory;

import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Organization;
import com.liferay.portal.model.User;
import com.liferay.portal.service.OrganizationLocalServiceUtil;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;

/**
*
* TaoCongDanAction class
*   
* This class is used to process TaoCongDan
* 
* 
* 
* History:
*  
*   DATE         AUTHOR      DESCRIPTION 
*  --------------------------------------------------------
*  10-Aug-2012   NamDH       Create new
*  15-Sept-2012  LanDD       Add code to generate secret confirmation code
*
*/
public class TaoCongDanAction {

    /** Date format */
    private static final String DATE_FORMAT = "dd/MM/yyyy";

    private Log _log = LogFactoryUtil.getLog(TaoCongDanAction.class);

    /**
      * This is fucntion sendEmailToCongDan
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param String ho, String dem, String ten, String matKhau, String url, String email, String uri 
      * @return void
      */
    private void sendEmailToCongDan(String ho, String dem, String ten, String matKhau, String url, String email,
            String uri) throws IOException {

        org.oep.cmon.portlet.taocongdan.mail.AccountCreationRequestMail mail = new org.oep.cmon.portlet.taocongdan.mail.AccountCreationRequestMail();

        mail.setEmail(email);
        mail.setMatKhau(matKhau);

        mail.setUrl(url);
        mail.setUri(uri);

        mail.setFullName(ho + " " + dem + " " + ten);

        // Send the email
        mail.send();
    }

    /**
      * This is fucntion sendEmailToCongDan_ChangPass
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param String ho, String dem, String ten, String matKhau, String url, String email, String uri, ActionRequest request
      * @return void
      */
    private void sendEmailToCongDan_ChangPass(String ho, String dem, String ten, String matKhau, String url,
            String email, String uri, ActionRequest request) throws IOException {

        org.oep.cmon.portlet.taocongdan.mail.ChangePassRequestMail mail = new org.oep.cmon.portlet.taocongdan.mail.ChangePassRequestMail();

        mail.setEmail(email);
        mail.setMatKhau(matKhau);

        mail.setUrl(url);
        mail.setUri(uri);

        mail.setFullName(ho + " " + dem + " " + ten);

        // Send the email
        mail.send(request);
    }

    /**
      * This is fucntion emailExists
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param String
      * @return boolean
      */
    private boolean emailExists(String email) {
        try {
            if (Validator.isNull(email)) {
                return false;
            }

            List<TaiKhoanNguoiDung> taiKhoanLst = TaiKhoanNguoiDungLocalServiceUtil.findByEmail(email);

            if (taiKhoanLst.size() < 1) {
                return false;
            }

            TaiKhoanNguoiDung taiKhoanNguoiDung = taiKhoanLst.get(0);

            if (email.equals(taiKhoanNguoiDung.getEmail())
                    || (taiKhoanNguoiDung.getDaXoa() == FormatUtil.DA_XOA_DEACTIVATE)) {

                return true;
            }
        } catch (Exception e) {
            // TODO: handle exception
        }

        return false;
    }

    /**
      * This is fucntion userLiferayExists
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param long taiKhoanLiferayId
      * @return boolean
      */
    private boolean userLiferayExists(long taiKhoanLiferayId) {
        if (Validator.isNull(taiKhoanLiferayId)) {
            return false;
        }

        TaiKhoanNguoiDung taiKhoanNguoiDung = null;
        try {
            taiKhoanNguoiDung = TaiKhoanNguoiDungLocalServiceUtil.findByTaiKhoanNguoiDungId(taiKhoanLiferayId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (taiKhoanNguoiDung == null) {
            return false;
        }

        _log.info("taikhoangnguoidung-------------:" + taiKhoanNguoiDung);
        if (taiKhoanLiferayId == taiKhoanNguoiDung.getTaiKhoanNguoiDungId()
                && (taiKhoanNguoiDung.getDaXoa() == FormatUtil.DA_XOA_DEACTIVATE)) {
            return true;
        }

        return false;
    }

    /**
      * This is fucntion requestExists
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param String
      * @return boolean
      */
    private boolean requestExists(String soCmnd) {
        DynamicQuery query = DynamicQueryFactoryUtil.forClass(CongDan.class);

        query = query.add(PropertyFactoryUtil.forName("soCmnd").eq(soCmnd));

        List<CongDan> results = null;

        try {
            results = CongDanLocalServiceUtil.dynamicQuery(query);
        } catch (SystemException e) {
            e.printStackTrace();
        }

        if (results != null && results.size() > 0) {
            return true;
        }

        return false;
    }

    /**
      * This is fucntion getLongArray
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param PortletRequest, String
      * @return long[]
      */
    protected long[] getLongArray(PortletRequest portletRequest, String name) {
        String value = portletRequest.getParameter(name);

        if (value == null) {
            return null;
        }

        return StringUtil.split(GetterUtil.getString(value), 0L);
    }

    /**
      * This is fucntion addEditTaoCongDan
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param ActionRequest actionRequest, ActionResponse actionResponse
      * @return void
      */
    public void addEditTaoCongDan(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {
        String mode = ParamUtil.getString(actionRequest, "mode");
        String isLoaded = ParamUtil.getString(actionRequest, "isLoaded", null);
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
        String taiKhoanCongDanId = ParamUtil.getString(actionRequest, "taiKhoanCongDanId");
        String congDanId = ParamUtil.getString(actionRequest, "congDanId");

        Map<String, String> userRequest = (Map<String, String>) actionRequest.getPortletSession()
                .getAttribute("USER_REQUEST_TK_CONG_DAN_OBJECT");
        if (userRequest == null) {
            userRequest = new HashMap<String, String>();
        }
        userRequest.put("mode", mode);

        userRequest.put("isLoaded", isLoaded);

        userRequest.put("congDanId", congDanId);

        userRequest.put("taiKhoanCongDanId", taiKhoanCongDanId);

        String email = ParamUtil.getString(actionRequest, "email");
        userRequest.put("email", email);

        String matKhau = ParamUtil.getString(actionRequest, "matKhau");
        userRequest.put("matKhau", matKhau);

        String reMatKhau = ParamUtil.getString(actionRequest, "reMatKhau");
        userRequest.put("reMatKhau", reMatKhau);

        String ma = ParamUtil.getString(actionRequest, "ma");
        userRequest.put("ma", ma);

        String ho = ParamUtil.getString(actionRequest, "ho", "");
        userRequest.put("ho", ho);
        String dem = ParamUtil.getString(actionRequest, "dem", "");
        userRequest.put("dem", dem);
        String ten = ParamUtil.getString(actionRequest, "ten");
        userRequest.put("ten", ten);

        String tenDayDu = ho + " " + dem + " " + ten;

        String ngaySinh = ParamUtil.getString(actionRequest, "ngaySinh");
        userRequest.put("ngaySinh", ngaySinh);

        String quocTichId = ParamUtil.getString(actionRequest, "quocTichId");
        userRequest.put("quocTichId", quocTichId);

        String soCmnd = ParamUtil.getString(actionRequest, "soCmnd");
        userRequest.put("soCmnd", soCmnd);

        String ngayCapCmnd = ParamUtil.getString(actionRequest, "ngayCapCmnd");
        userRequest.put("ngayCapCmnd", ngayCapCmnd);

        String noiCapCmndId = ParamUtil.getString(actionRequest, "noiCapCmndId");
        userRequest.put("noiCapCmndId", noiCapCmndId);

        String gioiTinh = ParamUtil.getString(actionRequest, "gioiTinh");
        userRequest.put("gioiTinh", gioiTinh);

        String tonGiaoId = ParamUtil.getString(actionRequest, "tonGiaoId");
        userRequest.put("tonGiaoId", tonGiaoId);

        String danTocId = ParamUtil.getString(actionRequest, "danTocId");
        userRequest.put("danTocId", danTocId);

        String diaChiThuongTruTinhId = ParamUtil.getString(actionRequest, "diaChiThuongTruTinhId");
        userRequest.put("diaChiThuongTruTinhId", diaChiThuongTruTinhId);

        String diaChiThuongTruHuyenId = ParamUtil.getString(actionRequest, "diaChiThuongTruHuyenId");
        userRequest.put("diaChiThuongTruHuyenId", diaChiThuongTruHuyenId);

        String diaChiThuongTruXaId = ParamUtil.getString(actionRequest, "diaChiThuongTruXaId");
        userRequest.put("diaChiThuongTruXaId", diaChiThuongTruXaId);

        String diaChiThuongTru = ParamUtil.getString(actionRequest, "diaChiThuongTru");
        userRequest.put("diaChiThuongTru", diaChiThuongTru);

        actionRequest.getPortletSession().setAttribute("USER_REQUEST_TK_CONG_DAN_OBJECT", userRequest);

        // Validate parameteter
        if (validate(userRequest, actionRequest, actionResponse)) {
            _log.info("1. validate info ok");

            TaoCongDanBusiness taoCongDanBusiness = new TaoCongDanBusiness();
            if (mode.equals(TaoCongDanBusiness.ADD_CONGDAN)) {

                User userLiferay = addUserLiferay(userRequest, actionRequest, actionResponse);

                try {

                    if (userLiferay != null) {

                        // Update organization
                        String citizenOrg = getOrganizationForCitizen();
                        _log.info("citizenOrgCodeLoaiDoiTuong:" + citizenOrg);
                        Organization organization = OrganizationLocalServiceUtil
                                .getOrganization(userLiferay.getCompanyId(), citizenOrg);

                        long[] orgIds = { organization.getOrganizationId() };

                        UserLocalServiceUtil.updateOrganizations(userLiferay.getUserId(), orgIds,
                                new ServiceContext());

                        long userLiferayId = userLiferay.getUserId();

                        if (!this.userLiferayExists(userLiferayId) && !this.emailExists(email)) {

                            TaiKhoanNguoiDung taiKhoanNguoiDung = taoCongDanBusiness
                                    .insertTaiKhoanNguoiDung(userLiferay, matKhau, email, tenDayDu, actionRequest);

                            if (taiKhoanNguoiDung != null) {
                                String maCongDan = taoCongDanBusiness.congdanExists(soCmnd, ngaySinh);
                                _log.info("maCongDan" + maCongDan);
                                if (Validator.isNull(maCongDan)) {
                                    CongDan congDan1 = CongDanLocalServiceUtil
                                            .findByTaiKhoanNguoiDungId(taiKhoanNguoiDung.getId());
                                    _log.info("congDan1: " + congDan1);
                                    boolean result = false;
                                    if (congDan1 == null) {
                                        _log.info("vao day : " + congDan1);
                                        result = taoCongDanBusiness.insertCongDan(userRequest,
                                                taiKhoanNguoiDung.getId(), tenDayDu, actionRequest);
                                    } else {
                                        SessionMessages.add(actionRequest, "TaiKhoanDaTonTai");
                                    }

                                    if (result) {
                                        SessionMessages.add(actionRequest, "successAddTKCD");
                                    } else {

                                        TaiKhoanNguoiDungLocalServiceUtil
                                                .deleteTaiKhoanNguoiDung(taiKhoanNguoiDung.getId());
                                        UserLocalServiceUtil.deleteUser(userLiferayId);
                                        SessionMessages.add(actionRequest, "successAddTKCD");
                                    }

                                } else {
                                    _log.info("update tai khoang trong csms_congdan" + taiKhoanNguoiDung.getId());
                                    taoCongDanBusiness.editCongDan(userRequest, congDanId,
                                            String.valueOf(taiKhoanNguoiDung.getId()), tenDayDu, actionRequest);
                                    SessionMessages.add(actionRequest, "successEditTKCD");

                                }

                                String uri = actionRequest.getScheme() + "://" + actionRequest.getServerName();
                                String urlTaiKhoanNguoiDung = ParamUtil.getString(actionRequest,
                                        "urlTaiKhoanNguoiDung");
                                urlTaiKhoanNguoiDung = urlTaiKhoanNguoiDung.replace("DUMMY_AUTH_CODE",
                                        taiKhoanCongDanId);
                                this.sendEmailToCongDan(ho, dem, ten, matKhau, urlTaiKhoanNguoiDung, email, uri);

                            } else {
                                UserLocalServiceUtil.deleteUser(userLiferayId);
                                SessionErrors.add(actionRequest,
                                        "org.oep.taocongdan.forms.err.isNotCreatedUserLiferay");

                            }

                        } else {
                            SessionErrors.add(actionRequest, "org.oep.taocongdan.forms.err.Error.TTKND");
                        }

                    } else {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.forms.err.isNotCreatedUserLiferay");
                    }

                } catch (Exception e) {

                    e.printStackTrace();
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.forms.err.unKnown");

                    actionResponse.setRenderParameter("jspPage", "/html/portlet/taocongdan/tao_cong_dan_form.jsp");

                }

            } else if (mode.equals(TaoCongDanBusiness.UPDATE_CONGDAN)) {

                CongDan congDan = CongDanLocalServiceUtil.fetchCongDan(FormatUtil.convertToLong(congDanId));

                try {

                    User user = UserLocalServiceUtil.getUserByEmailAddress(PortalUtil.getCompanyId(actionRequest),
                            userRequest.get("email"));
                    _log.info("email user " + user.getEmailAddress());

                    if (user != null) {
                        user = updateUserLiferay(userRequest, actionRequest, actionResponse);
                    }
                    if (taiKhoanCongDanId != null) {
                        _log.info("idthong tin tai khoan nguoi dung " + taiKhoanCongDanId);
                        taoCongDanBusiness.editTaiKhoanNguoiDung(userRequest,
                                String.valueOf(congDan.getTaiKhoanNguoiDungId()), tenDayDu, actionRequest);
                        SessionMessages.add(actionRequest, "successEditTKND");

                    }

                    if (congDanId != null) {
                        _log.info("idthong tin cong dan " + congDanId);
                        taoCongDanBusiness.editCongDan(userRequest, congDanId, taiKhoanCongDanId, tenDayDu,
                                actionRequest);
                        SessionMessages.add(actionRequest, "successEditTKCD");

                    }

                } catch (Exception e) {

                    e.printStackTrace();
                    _log.error("[addEditTaoCongDan] error: " + e.toString());
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.forms.err.unKnown");

                    actionResponse.setRenderParameter("jspPage", "/html/portlet/taocongdan/tao_cong_dan_form.jsp");

                }
            }

            String redirectUrl = ParamUtil.getString(actionRequest, "redirectUrl");

            if (!SessionErrors.isEmpty(actionRequest)) {
                actionResponse.sendRedirect(redirectUrl);
                return;
            }

            actionRequest.getPortletSession().removeAttribute("USER_REQUEST_TK_CONG_DAN_OBJECT");

            if (userRequest.get("mode").equals(TaoCongDanBusiness.ADD_CONGDAN)) {

                SessionMessages.add(actionRequest, "success");

                actionResponse.sendRedirect(redirectUrl);
            } else if (userRequest.get("mode").equals(TaoCongDanBusiness.UPDATE_CONGDAN)) {

                SessionMessages.add(actionRequest, "success");

                actionResponse.sendRedirect(redirectUrl);
            }

        } else {

            if (userRequest.get("mode").equals(TaoCongDanBusiness.ADD_CONGDAN)) {

                actionResponse.setRenderParameter("mode", TaoCongDanBusiness.ADD_CONGDAN);
                actionResponse.setRenderParameter("jspPage", "/html/portlet/taocongdan/tao_cong_dan_form.jsp");
            } else {

                actionResponse.setRenderParameter("mode", TaoCongDanBusiness.UPDATE_CONGDAN);
                actionResponse.setRenderParameter("jspPage", "/html/portlet/taocongdan/tao_cong_dan_form.jsp");
            }
        }

    }

    /**
      * This is fucntion validate
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param Map <String, String> userRequest,ActionRequest actionRequest, ActionResponse actionResponse
      * @return boolean
      */
    private boolean validate(Map<String, String> userRequest, ActionRequest actionRequest,
            ActionResponse actionResponse) throws SystemException {

        TaoCongDanBusiness taoCongDanBusiness = new TaoCongDanBusiness();

        if (userRequest.get("mode").equals(TaoCongDanBusiness.ADD_CONGDAN)) {
            String maCongDan = null;
            try {

                try {
                    User user = UserLocalServiceUtil.getUserByEmailAddress(PortalUtil.getCompanyId(actionRequest),
                            userRequest.get("email"));
                    if (user.getEmailAddress().equals(userRequest.get("email"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.emailTontai");
                    }
                } catch (PortalException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                if (userRequest.get("isLoaded").equals("load")) {
                    if (this.emailExists(userRequest.get("email"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email.daCo");
                    }

                    if (FormatUtil.isEmpty(userRequest.get("email"))) {

                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email");
                    }

                    if (FormatUtil.isEmpty(userRequest.get("matKhau"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.matKhau");
                    }

                    if (!userRequest.get("matKhau").equals(userRequest.get("reMatKhau"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.matKhau.KhongGiong");
                    }

                    if (Validator.isNull(userRequest.get("ho"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ho");
                    }

                    if (Validator.isNull(userRequest.get("ten"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ten");
                    }

                    if (Validator.isNull(userRequest.get("ngaySinh"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngaySinh");
                    }

                    long quocTichId = ConvertUtil.convertToLong(userRequest.get("quocTichId"));
                    if (quocTichId == 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.quocTichId");
                    }

                    if (Validator.isNull(userRequest.get("noiCapCmndId"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.noiCapCmndId");
                    }

                    if (Validator.isNull(userRequest.get("soCmnd"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                    }

                    if (Validator.isNull(userRequest.get("ngayCapCmnd"))) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngayCapCmnd");
                    }

                    long tinhid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruTinhId"));

                    if (tinhid == 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruTinhId");
                    }

                    long huyenid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruHuyenId"));

                    if (huyenid == 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruHuyenId");
                    }

                    long xaid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruXaId"));
                    if (xaid == 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruXaId");
                    }

                    if (userRequest.get("soCmnd").trim().length() > 0) {
                        if (ConvertUtil.convertToLong(userRequest.get("soCmnd")) <= 0) {
                            SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                        } else if (userRequest.get("soCmnd").length() != 9
                                && userRequest.get("soCmnd").length() != 12) {
                            SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd.9or12");
                        }
                    } else {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                    }

                    if (!Validator.isEmailAddress(userRequest.get("email"))) {

                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email.khongDungDinhDang");
                    }

                    if (SessionErrors.isEmpty(actionRequest)) {
                        return true;
                    }
                    return false;
                }

                maCongDan = taoCongDanBusiness.congdanExists(userRequest.get("soCmnd"),
                        userRequest.get("ngaySinh"));
                _log.error("maCongDan: " + maCongDan);
                if (maCongDan.length() > 0) {

                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd.daCo");
                }

                if (this.emailExists(userRequest.get("email"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email.daCo");
                }

                if (FormatUtil.isEmpty(userRequest.get("email"))) {

                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email");
                }

                if (FormatUtil.isEmpty(userRequest.get("matKhau"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.matKhau");
                }

                if (!userRequest.get("matKhau").equals(userRequest.get("reMatKhau"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.matKhau.KhongGiong");
                }

                if (Validator.isNull(userRequest.get("ho"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ho");
                }

                if (Validator.isNull(userRequest.get("ten"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ten");
                }

                if (Validator.isNull(userRequest.get("ngaySinh"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngaySinh");
                }

                long quocTichId = ConvertUtil.convertToLong(userRequest.get("quocTichId"));
                if (quocTichId == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.quocTichId");
                }

                if (Validator.isNull(userRequest.get("noiCapCmndId"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.noiCapCmndId");
                }

                if (Validator.isNull(userRequest.get("soCmnd"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                }

                if (Validator.isNull(userRequest.get("ngayCapCmnd"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngayCapCmnd");
                }

                long tinhid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruTinhId"));

                if (tinhid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruTinhId");
                }

                long huyenid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruHuyenId"));

                if (huyenid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruHuyenId");
                }

                long xaid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruXaId"));
                if (xaid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruXaId");
                }

                if (userRequest.get("soCmnd").trim().length() > 0) {
                    if (ConvertUtil.convertToLong(userRequest.get("soCmnd")) <= 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                    } else if (userRequest.get("soCmnd").length() != 9
                            && userRequest.get("soCmnd").length() != 12) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd.9or12");
                    }
                } else {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                }

                if (!Validator.isEmailAddress(userRequest.get("email"))) {

                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.email.khongDungDinhDang");
                }

                if (SessionErrors.isEmpty(actionRequest)) {
                    return true;
                }

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } else if (userRequest.get("mode").equals(TaoCongDanBusiness.UPDATE_CONGDAN)) {

            String maCongDan = null;
            try {

                if (!userRequest.get("matKhau").equals(userRequest.get("reMatKhau"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.matKhau.KhongGiong");
                }

                if (Validator.isNull(userRequest.get("ho"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ho");
                }

                if (Validator.isNull(userRequest.get("ten"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ten");
                }

                if (Validator.isNull(userRequest.get("ngaySinh"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngaySinh");
                }

                if (Validator.isNull(userRequest.get("quocTichId"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.quocTichId");
                }

                if (Validator.isNull(userRequest.get("soCmnd"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                }

                if (Validator.isNull(userRequest.get("ngayCapCmnd"))) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.ngayCapCmnd");
                }

                maCongDan = taoCongDanBusiness.congdanExists(userRequest.get("soCmnd"),
                        userRequest.get("ngaySinh"));

                long tinhid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruTinhId"));

                if (tinhid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruTinhId");
                }

                long huyenid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruHuyenId"));

                if (huyenid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruHuyenId");
                }

                long xaid = ConvertUtil.convertToLong(userRequest.get("diaChiThuongTruXaId"));
                if (xaid == 0) {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.diaChiThuongTruXaId");
                }

                if (userRequest.get("soCmnd").trim().length() > 0) {
                    if (ConvertUtil.convertToLong(userRequest.get("soCmnd")) <= 0) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                    } else if (userRequest.get("soCmnd").length() != 9
                            && userRequest.get("soCmnd").length() != 12) {
                        SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd.9or12");
                    }
                } else {
                    SessionErrors.add(actionRequest, "org.oep.taocongdan.form.err.soCmnd");
                }

                //            
                if (SessionErrors.isEmpty(actionRequest)) {
                    return true;
                }

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return false;
    }

    /**
      * This is fucntion addUserLiferay
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param Map <String, String> userRequest, ActionRequest actionRequest, ActionResponse actionResponse
      * @return User
      */
    private User addUserLiferay(Map<String, String> userRequest, ActionRequest actionRequest,
            ActionResponse actionResponse) throws PortalException, SystemException {

        ServiceContext serviceContext = ServiceContextFactory.getInstance(User.class.getName(), actionRequest);
        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

        User user = null;
        try {

            long userId = CounterLocalServiceUtil.increment(User.class.getName());
            long createrUserId = PortalUtil.getUserId(actionRequest);
            String screenName = "cd" + userId;
            _log.info("SR: " + screenName + ", createrUserId:" + String.valueOf(userId) + "Email :"
                    + userRequest.get("email"));

            String firstName = userRequest.get("ho");
            if (userRequest.get("dem") != null) {
                firstName = firstName + " " + userRequest.get("dem");
            }

            if (userRequest.get("ten") != null) {
                firstName = firstName + " " + userRequest.get("ten");
            }

            user = UserLocalServiceUtil.addUser(createrUserId, themeDisplay.getCompanyId(), false,
                    userRequest.get("matKhau"), userRequest.get("reMatKhau"), false, screenName,
                    userRequest.get("email"), 0L, "", LocaleUtil.getDefault(), firstName, userRequest.get("dem"),
                    userRequest.get("ho"), 1, 1, false, Calendar.JANUARY, 1, 1979, null, null, null, null, null,
                    false, serviceContext);

            _log.info("SR: " + user);
            return user;

        } catch (Exception e) {
            e.printStackTrace();
            _log.error("[addUserLiferay] error: " + e.toString());

        }

        return null;

    }

    /**
      * This is fucntion updateUserLiferay
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param Map <String, String> userRequest, ActionRequest actionRequest, ActionResponse actionResponse
      * @return User
      */
    private User updateUserLiferay(Map<String, String> userRequest, ActionRequest actionRequest,
            ActionResponse actionResponse) throws PortalException, SystemException {

        if (userRequest.get("mode").equals(TaoCongDanBusiness.UPDATE_CONGDAN)) {

            try {

                User user = UserLocalServiceUtil.getUserByEmailAddress(PortalUtil.getCompanyId(actionRequest),
                        userRequest.get("email"));

                String matkhau = ParamUtil.getString(actionRequest, "matKhau");
                _log.info("matkhau=" + matkhau);

                String reMatKhau = ParamUtil.getString(actionRequest, "reMatKhau");
                _log.info("reMatKhau=" + reMatKhau);

                String email = ParamUtil.getString(actionRequest, "email");

                String taiKhoanCongDanId = ParamUtil.getString(actionRequest, "taiKhoanCongDanId");

                String urlTaiKhoanNguoiDung = ParamUtil.getString(actionRequest, "urlTaiKhoanNguoiDung");
                urlTaiKhoanNguoiDung = urlTaiKhoanNguoiDung.replace("DUMMY_AUTH_CODE", taiKhoanCongDanId);
                String uri = actionRequest.getScheme() + "://" + actionRequest.getServerName();

                String ho = ParamUtil.getString(actionRequest, "ho");
                String dem = ParamUtil.getString(actionRequest, "dem");
                String ten = ParamUtil.getString(actionRequest, "ten");
                if (matkhau.trim().length() > 0) {
                    UserLocalServiceUtil.updatePassword(user.getUserId(), matkhau, matkhau, false);
                    _log.info("update co pass=" + user);
                    user = UserLocalServiceUtil.updateUser(user);

                    this.sendEmailToCongDan_ChangPass(ho, dem, ten, matkhau, urlTaiKhoanNguoiDung, email, uri,
                            actionRequest);

                } else {
                    user.setEmailAddress(email);
                    _log.info("update ko pass=" + user);
                    user = UserLocalServiceUtil.updateUser(user);
                }

                return user;

            } catch (Exception e) {
                e.printStackTrace();
                _log.error("[updateUserLiferay] error: " + e.toString());
            }
        }

        return null;
    }

    /**
      * This is fucntion getOrganizationForCitizen
      * Version: 1.0
      *  
      * History: 
      *   DATE        AUTHOR      DESCRIPTION 
      *  ------------------------------------------------- 
      *  3-March-2013  Nam Dinh    Create new
      * @param 
      * @return String
      */
    private String getOrganizationForCitizen() throws IOException, SystemException {
        String maOrg = WebserviceFactory.getThamSoService().getValue("CMON_CONG_DAN_ORGANIZATION_ID");
        if (maOrg == null || maOrg.length() == 0) {
            maOrg = "CD";
        }

        try {
            DoiTuongSuDung doiTuong = DoiTuongSuDungLocalServiceUtil.findByMa(maOrg);

            return doiTuong.getTen();
        } catch (Exception e) {
            // TODO: handle exception
        }
        return "CD";
    }

}