public function save($empscreeningform)
    {
        $baseUrl = BASE_URL;
        $baseUrl = rtrim($baseUrl, '/');
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $loginUserId = $auth->getStorage()->read()->id;
            $loginuserRole = $auth->getStorage()->read()->emprole;
        }
        $agencyEmail = '';
        $lmanager1Email = '';
        $lmanager1Name = 'Manager';
        $agencysalutationName = 'Agency';
        $empscreeningmodel = new Default_Model_Empscreening();
        $usermodel = new Default_Model_Users();
        $processesmodel = new Default_Model_Processes();
        $errorflag = "true";
        $id = $this->_request->getParam('id');
        $checktype = $this->_request->getParam('checktype');
        $radio_pocId = $this->_request->getParam('contactRadio');
        $agencyids = $this->_request->getParam('agencyids');
        $bgcheck_status = $this->_request->getParam('bgcheck_status');
        $employee = $this->_request->getParam('employee');
        $candid = $this->_request->getParam('candid');
        $empid = $this->getRequest()->getParam('empid');
        $specimenId = '';
        $empFlag = 1;
        $bgtypes = '';
        $BGStatus = '';
        $newStatus = 'In process';
        $inprocess = 'no';
        $options = array();
        if ($employee) {
            $empArr = explode('-', $employee);
            $empFlag = $empArr[0] == 'emp' ? 1 : 2;
            $specimenId = $empArr[1];
        }
        if (isset($candid)) {
            $empFlag = 2;
            $empArr[0] = 2;
            $specimenId = $candid;
        } else {
            if (isset($empid)) {
                $empFlag = 1;
                $empArr[0] = 1;
                $specimenId = $empid;
            }
        }
        if (empty($checktype)) {
            $msgarray['checktype'] = "Please check at least one screening type.";
            $errorflag = "false";
        }
        if (empty($radio_pocId) || $radio_pocId == '') {
            $msgarray['contactRadio'] = "Please select point of contact.";
            $errorflag = "false";
        }
        if (empty($employee)) {
            $msgarray['employee'] = "Please select employee.";
            $errorflag = "false";
        }
        if (!isset($agencyids) || $agencyids == '') {
            $agencyids = $this->getRequest()->getParam('defaultagencyid');
        }
        if (!isset($agencyids) || $agencyids == '') {
            $msgarray['agencyids'] = "Please select agency.";
            $errorflag = "false";
        }
        $checktypeModal = new Default_Model_Bgscreeningtype();
        $agencymodel = new Default_Model_Agencylist();
        $checktypesData = $checktypeModal->fetchAll('isactive=1', 'type')->toArray();
        $checkagencyData = $agencymodel->fetchAll('isactive=1', 'agencyname')->toArray();
        $employeeData = $empscreeningmodel->getEmployeesForScreening();
        $candidateData = $empscreeningmodel->getCandidatesForScreening();
        if (empty($checktypesData)) {
            $msgarray['checktype'] = 'Screening types are not configured yet.';
            $errorflag = 'false';
        }
        if (empty($checkagencyData)) {
            $msgarray['agencyids'] = 'Agencies are not added yet.';
            $errorflag = 'false';
        }
        if (empty($candidateData) && empty($employeeData)) {
            $msgarray['employee'] = 'Employees/candidates are not added yet.';
            $errorflag = 'false';
        }
        /* Check - Adding a record with same userid, agencyid and check type (for each check type ) */
        if (is_array($checktype) && $errorflag != "false") {
            for ($i = 0; $i < sizeof($checktype); $i++) {
                $processStatus = array();
                $processStatus = $processesmodel->getProcessStatus($specimenId, $empFlag, $agencyids, $checktype[$i]);
                if (!empty($processStatus) && sizeof($processStatus > 0)) {
                    $oldstatus = $processStatus[0]['process_status'];
                    $BGStatus = $processStatus[0]['bgcheck_status'];
                    if (($oldstatus == 'On hold' || $oldstatus == 'In process') && $newStatus == $oldstatus && $BGStatus != 'Complete') {
                        $msgarray['StatusError'] = "Already a record with the given data exists. Please insert a new record";
                        $errorflag = "false";
                    }
                }
            }
        }
        /* END */
        $agencyData = array();
        $agencyPOCData = array();
        $empData = array();
        $personalData = array();
        $addressData = array();
        $companyData = array();
        $empscreeningModel = new Default_Model_Empscreening();
        if (!empty($checktype)) {
            $agencyArr = array();
            $agencyArr = $checktype;
            $agencyData = $empscreeningModel->getAgencyData($agencyArr, '', '');
        }
        if ($agencyids) {
            $agencyPOCData = $empscreeningModel->getAgencyPOCData($agencyids);
        }
        if (isset($specimenId) && isset($empArr[0])) {
            $personalData = $empscreeningModel->getEmpPersonalData($specimenId, $empArr[0]);
            $addressData = $empscreeningModel->getEmpAddressData($specimenId, $empArr[0]);
            $companyData = $empscreeningModel->getEmpCompanyData($specimenId, $empArr[0]);
        }
        if (isset($id) && $id != '') {
            $idArr = array();
            $idArr = explode('-', $id);
            $specimenid = $idArr[0];
            $userflag = $idArr[1];
            $personalData = $empscreeningModel->getEmpPersonalData($specimenid, $userflag);
            $addressData = $empscreeningModel->getEmpAddressData($specimenid, $userflag);
            $companyData = $empscreeningModel->getEmpCompanyData($specimenid, $userflag);
            if (isset($personalData[0]['ustatus'])) {
                $processData = $this->processesGrid($id, $personalData[0]['ustatus']);
            } else {
                $processData = $this->processesGrid($id, '');
            }
            $this->view->dataArray = $processData;
        }
        $hrEmail = 'false';
        $mngmntEmail = 'false';
        if (isset($personalData[0]['businessid'])) {
            if (defined('BG_CHECKS_HR_' . $personalData[0]['businessid'])) {
                $hrEmail = constant('BG_CHECKS_HR_' . $personalData[0]['businessid']);
            }
            if (defined('BG_CHECKS_MNGMNT_' . $personalData[0]['businessid'])) {
                $mngmntEmail = constant('BG_CHECKS_MNGMNT_' . $personalData[0]['businessid']);
            }
        }
        $this->view->hrEmail = $hrEmail;
        $this->view->mngmntEmail = $mngmntEmail;
        $this->view->personalData = $personalData;
        $this->view->addressData = $addressData;
        $this->view->companyData = $companyData;
        $this->view->agencyData = $agencyData;
        $this->view->agencyPOCData = $agencyPOCData;
        if ($id != '') {
            $errorflag = 'true';
            if ($bgcheck_status == '0') {
                $msgarray['bgcheck_status'] = "Please select status";
                $errorflag = "false";
            }
        }
        if ($empscreeningform->isValid($this->_request->getPost()) && $errorflag != 'false') {
            $date = new Zend_Date();
            $actionflag = '';
            $tableid = '';
            if ($id == '') {
                /*	A New process is created for a user whose background check status is in 'Complete' status. Then updating the bg status to 'In process' */
                if ($BGStatus == 'Complete' && $newStatus == 'In process') {
                    $totalstatusData = array('bgcheck_status' => 'In process', 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                    $totalstatusWhere = array('specimen_id=?' => $specimenId, 'flag=?' => $empFlag);
                    $empscreeningModel->SaveorUpdateDetails($totalstatusData, $totalstatusWhere);
                }
                /* END */
                $data = array('specimen_id' => $specimenId, 'flag' => $empFlag, 'bgagency_id' => $agencyids, 'bgagency_pocid' => $radio_pocId, 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                $data['process_status'] = $newStatus;
                $data['createdby'] = $loginUserId;
                $data['createddate'] = gmdate("Y-m-d H:i:s");
                $data['isactive'] = 1;
                $where = '';
                $actionflag = 1;
                if (is_array($checktype)) {
                    for ($i = 0; $i < sizeof($checktype); $i++) {
                        $data['bgcheck_type'] = $checktype[$i];
                        $detailId = $empscreeningModel->SaveorUpdateDetails($data, $where);
                    }
                }
                /* Updating back ground check status to In process in employees/candidates status */
                if ($empFlag == 1) {
                    $empInsertionData = array('backgroundchk_status' => 'In process', 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                    $empWhere = array('id=?' => $specimenId);
                    $usermodel->addOrUpdateUserModel($empInsertionData, $empWhere, $specimenId);
                    $options['subject'] = APPLICATION_NAME . ' :: Employee Screening';
                } else {
                    $candModel = new Default_Model_Candidatedetails();
                    $candData = array('backgroundchk_status' => 'In process', 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                    $candWhere = array('id=?' => $specimenId);
                    $candModel->SaveorUpdateUserData($candData, $candWhere);
                    $options['subject'] = APPLICATION_NAME . ' :: Candidate Screening';
                }
                /* END */
                for ($i = 0; $i < sizeof($agencyPOCData); $i++) {
                    if ($agencyPOCData[$i]['id'] == $radio_pocId) {
                        $agencyEmail = $agencyPOCData[$i]['email'];
                        $agencyfname = $agencyPOCData[$i]['first_name'];
                        $agencylname = $agencyPOCData[$i]['last_name'];
                        $agencysalutationName = $agencyfname . ' ' . $agencylname;
                    }
                }
                $hremail = explode(",", HREMAIL);
                if ($empFlag == 1) {
                    $lmanager1Email = $personalData[0]['rmanager_email'];
                    $lmanager1Name = $personalData[0]['reporting_manager'];
                }
                $bid = '';
                if (isset($personalData[0]['businessid'])) {
                    $bid = $personalData[0]['businessid'];
                }
                if (isset($lmanager1Email) && $lmanager1Email != '') {
                    $manager1 = array($lmanager1Email);
                } else {
                    $manager1 = array();
                }
                if (isset($agencyEmail) && $agencyEmail != '') {
                    $agencyemail1 = array($agencyEmail);
                } else {
                    $agencyemail1 = array();
                }
                if (defined('BG_CHECKS_MNGMNT_' . $bid) && $bid != '') {
                    $mngmntemailId = explode(",", constant('BG_CHECKS_MNGMNT_' . $bid));
                } else {
                    $mngmntemailId = array();
                }
                if (defined('BG_CHECKS_HR_' . $bid) && $bid != '') {
                    $hremailId = explode(",", constant('BG_CHECKS_HR_' . $bid));
                } else {
                    $hremailId = array();
                }
                $emailArr = array_merge($manager1, $agencyemail1, $mngmntemailId, $hremailId);
                for ($i = 0; $i < sizeof($emailArr); $i++) {
                    $salutation = 'Dear Sir/Madam,';
                    if ($i == 0) {
                        $salutation = 'Dear ' . ucfirst($lmanager1Name) . ',';
                        $options['toName'] = ucfirst($lmanager1Name);
                    } else {
                        if ($i == 1) {
                            $salutation = 'Dear ' . ucfirst($agencysalutationName) . ',';
                            $options['toName'] = ucfirst($agencysalutationName);
                        } else {
                            if ($i == 2) {
                                $salutation = 'Dear Management,';
                                $options['toName'] = 'Management';
                            } else {
                                if ($i == 3) {
                                    $salutation = 'Dear HR,';
                                    $options['toName'] = 'HR';
                                }
                            }
                        }
                    }
                    $createdbyName = $usermodel->getUserDetails($loginUserId);
                    $options['subject'] = APPLICATION_NAME . ' : Background check initiated';
                    $options['header'] = 'Background check initiated';
                    $options['toEmail'] = $emailArr[$i];
                    $options['message'] = '<div>' . $salutation . '<div>' . ucfirst($personalData[0]['name']) . ' has been sent for background check by ' . ucfirst($createdbyName[0]['userfullname']) . '.';
                    if (!empty($personalData[0]['employee_id'])) {
                        $options['message'] .= ' Please find the details below.</div>
										<div>
											<table border="1" style="border-collapse:collapse;">
												<tr><td>Employee ID</td><td>' . $personalData[0]['employee_id'] . '</td></tr>
												<tr><td>Employee Email</td><td>' . $personalData[0]['email_id'] . '</td></tr>
												<tr><td>Employee Designation</td><td>' . $personalData[0]['designation'] . '</td></tr>
											</table>
										</div>';
                    }
                    $options['message'] .= '<div style="padding:20px 0 10px 0;">Please <a href="' . $baseUrl . '/index/popup" target="_blank" style="color:#b3512f;">click here</a> to login and check the details.</div>
											</div>';
                    $options['cron'] = 'yes';
                    $result = sapp_Global::_sendEmail($options);
                }
            }
            if ($id != '') {
                for ($i = 0; $i < sizeof($agencyPOCData); $i++) {
                    if ($agencyPOCData[$i]['id'] == $radio_pocId) {
                        $agencyEmail = $agencyPOCData[$i]['email'];
                        $agencyfname = $agencyPOCData[$i]['first_name'];
                        $agencylname = $agencyPOCData[$i]['last_name'];
                    }
                }
                $data = array('modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                $empArr = explode('-', $id);
                $specimenId = $empArr[0];
                $empFlag = $empArr[1];
                $checkstatuses = $empscreeningModel->checkbgstatus($specimenId, $empFlag, 'status');
                if (!empty($checkstatuses) && $checkstatuses[0]['bgcheck_status'] != $bgcheck_status) {
                    if ($bgcheck_status == 'Complete') {
                        $inprocess = 'no';
                        for ($i = 0; $i < sizeof($checkstatuses); $i++) {
                            if (($checkstatuses[$i]['process_status'] == 'In process' || $checkstatuses[$i]['process_status'] == 'On hold') && $checkstatuses[$i]['explanation'] == '' && $checkstatuses[$i]['bgcheck_status'] != 'Complete') {
                                $inprocess = 'yes';
                            }
                        }
                        if ($inprocess != 'yes') {
                            $data['bgcheck_status'] = $bgcheck_status;
                            $where = array('specimen_id=?' => $specimenId, 'flag=?' => $empFlag, 'isactive = 1');
                            $actionflag = 2;
                            $detailId = $empscreeningModel->SaveorUpdateDetails($data, $where);
                            /* Updating back ground check status to Completed in employees/candidates status */
                            if ($empFlag == 1) {
                                $usermodel = new Default_Model_Users();
                                $empinsertionData = array('backgroundchk_status' => 'Completed', 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                                $empWhere = array('id=?' => $specimenId);
                                $usermodel->addOrUpdateUserModel($empinsertionData, $empWhere, $specimenId);
                            } else {
                                $candModel = new Default_Model_Candidatedetails();
                                $candData = array('backgroundchk_status' => 'Completed', 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                                $candWhere = array('id=?' => $specimenId);
                                $candModel->SaveorUpdateUserData($candData, $candWhere);
                            }
                            /* END */
                            /* Mail to HRD, L1 and L2 managers*/
                            $hremail = explode(",", HREMAIL);
                            if ($empFlag == 1) {
                                $lmanager1Email = $personalData[0]['rmanager_email'];
                                $lmanager1Name = $personalData[0]['reporting_manager'];
                            }
                            if (isset($lmanager1Email) && $lmanager1Email != '') {
                                $manager1 = array($lmanager1Email);
                            } else {
                                $manager1 = array();
                            }
                            if (defined('BG_CHECKS_MNGMNT_' . $bid) && $bid != '') {
                                $mngmntemailId = explode(",", constant('BG_CHECKS_MNGMNT_' . $bid));
                            } else {
                                $mngmntemailId = array();
                            }
                            if (defined('BG_CHECKS_HR_' . $bid) && $bid != '') {
                                $hremailId = explode(",", constant('BG_CHECKS_HR_' . $bid));
                            } else {
                                $hremailId = array();
                            }
                            $emailArr = array_merge($manager1, $mngmntemailId, $hremailId);
                            for ($i = 0; $i < sizeof($emailArr); $i++) {
                                $salutation = 'Dear Sir/Madam,';
                                if ($i == 0) {
                                    $salutation = 'Dear ' . ucfirst($lmanager1Name) . ',';
                                    $options['toName'] = ucfirst($lmanager1Name);
                                }
                                if ($i == 1) {
                                    $salutation = 'Dear Management,';
                                    $options['toName'] = 'Management';
                                }
                                if ($i == 2) {
                                    $salutation = 'Dear HR,';
                                    $options['toName'] = 'HR';
                                }
                                $options['subject'] = APPLICATION_NAME . ' : Background check completed';
                                $options['header'] = 'Background check completed';
                                $options['toEmail'] = $emailArr[$i];
                                $options['message'] = '<div>' . $salutation . '<div>Background check for ' . ucfirst($personalData[0]['name']) . ' has been completed.';
                                if (!empty($personalData[0]['employee_id'])) {
                                    $options['message'] .= ' Please find the details below.</div>
										<div>
											<table border="1" style="border-collapse:collapse;">
												<tr><td>Employee ID</td><td>' . $personalData[0]['employee_id'] . '</td></tr>
												<tr><td>Employee Email</td><td>' . $personalData[0]['email_id'] . '</td></tr>
												<tr><td>Employee Designation</td><td>' . $personalData[0]['designation'] . '</td></tr>
											</table>
										</div>';
                                }
                                $options['message'] .= '<div style="padding:20px 0 10px 0;">Please <a href="' . $baseUrl . '/index/popup" target="_blank" style="color:#b3512f;">click here</a> to login and check the details.</div>
														</div>';
                                $options['cron'] = 'yes';
                                $result = sapp_Global::_sendEmail($options);
                            }
                            /* END */
                        }
                    } else {
                        $data['bgcheck_status'] = $bgcheck_status;
                        $where = array('specimen_id=?' => $specimenId, 'flag=?' => $empFlag, 'isactive = 1');
                        $actionflag = 2;
                        $detailId = $empscreeningModel->SaveorUpdateDetails($data, $where);
                        if ($empFlag == 1) {
                            $usermodel = new Default_Model_Users();
                            $empInsertionData = array('backgroundchk_status' => $bgcheck_status, 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                            $empWhere = array('id=?' => $specimenId);
                            $usermodel->addOrUpdateUserModel($empInsertionData, $empWhere, $specimenId);
                            $options['subject'] = APPLICATION_NAME . ' :: Employee Screening';
                        } else {
                            $candModel = new Default_Model_Candidatedetails();
                            $candData = array('backgroundchk_status' => $bgcheck_status, 'modifiedby' => $loginUserId, 'modifieddate' => gmdate("Y-m-d H:i:s"));
                            $candWhere = array('id=?' => $specimenId);
                            $candModel->SaveorUpdateUserData($candData, $candWhere);
                        }
                    }
                } else {
                    $inprocess = 'samebgstatus';
                }
            }
            if ($inprocess == 'yes' || $inprocess == 'samebgstatus') {
                $this->view->inprocess = $inprocess;
                $this->view->specimenId = $specimenId;
                $this->view->empFlag = $empFlag;
            } else {
                if ($detailId == 'update') {
                    $tableid = $id;
                } else {
                    $tableid = $detailId;
                }
                $menuID = EMPSCREENING;
                $result = sapp_Global::logManager($menuID, $actionflag, $loginUserId, $specimenId . '-' . $empFlag);
                if ($detailId == 'update') {
                    $this->_helper->getHelper("FlashMessenger")->addMessage(array("success" => "Background check process is updated successfully."));
                } else {
                    $this->_helper->getHelper("FlashMessenger")->addMessage(array("success" => "Background check process is added successfully."));
                }
                if ($empFlag == 2) {
                    $this->_redirect('empscreening/con/pQ==');
                } else {
                    $this->_redirect('empscreening/con/pA==');
                }
            }
        } else {
            $messages = $empscreeningform->getMessages();
            foreach ($messages as $key => $val) {
                foreach ($val as $key2 => $val2) {
                    $msgarray[$key] = $val2;
                    break;
                }
                if (empty($checktypesData)) {
                    $msgarray['checktype'] = 'Screening types are not configured yet.';
                }
                if (empty($checkagencyData)) {
                    $msgarray['agencyids'] = 'Agencies are not added yet.';
                }
                if (empty($candidateData) && empty($employeeData)) {
                    $msgarray['employee'] = 'Employees/candidates are not added yet.';
                    $errorflag = 'false';
                }
            }
            return $msgarray;
        }
        $this->view->lgnrole = $loginuserRole;
    }