public function actionIndex($id_app_task) { $model = AppTask::findOne($id_app_task); $loanModel = Loan::find()->where(['id_application' => $model->id_application])->one(); // 如果 loan 不存在,则新建 if (is_null($loanModel)) { $loanModel = new Loan(); $loanModel->loan_number = ''; $loanModel->id_application = $model->id_application; $loanModel->status = 0; $loanModel->loc = $model->application->loc; $loanModel->balance = 0; $loanModel->advance_rate = 50; $loanModel->maintainance_rate = 70; $loanModel->collateral_value = $model->application->collateral_value; $loanModel->save(false); } // 读取所以检查项 $checkPointsData = AppTaskCheckpoint::find()->where(['id_app_task' => $id_app_task])->all(); $checkPoints = []; $check_points_ctrl = true; foreach ($checkPointsData as $val) { $checkPoints[$val['id_app_task_checkpoint_type']] = $val; if (!$val->status) { $check_points_ctrl = false; } } // 判断是否可以 approve $loanModel->setScenario('review'); $loanCheck = clone $loanModel; $loan_ctrl = $loanCheck->validate(); if (Yii::$app->request->post()) { // 如果选择 wetsigned $post = Yii::$app->request->post(); if ($post['type'] == 'wetsigned') { //关闭sign agreements $task_e_sign_box = AppTask::findOne(['id_application' => $model->id_application, 'id_app_task_type' => DictTask::TYPE_SIGN_AGREEMENTS_BOX]); AppTask::close($task_e_sign_box->id_app_task); } // 确认 Application Review and Check 结束 $applicationModel = $model->application; //g3 AppDocument::createPdfByApplication($applicationModel, DictDocument::TYPE_G3); //control_agreement AppDocument::createPdfByApplication($applicationModel, DictDocument::TYPE_CONTROL_AGREEMENT); //line_agreements AppDocument::createPdfByApplication($applicationModel, DictDocument::TYPE_LINE_AGREEMENT); //w9 AppDocument::createPdfByApplication($applicationModel, DictDocument::TYPE_W9); $loanModel->id_application = $applicationModel->id_application; $id_application = $loanModel->id_application; //active log.loan officer approved the application. Active::operationLog($id_application, [Yii::$app->user->getIdentity()->first_name, Yii::$app->user->getIdentity()->last_name], DictActive::APPROVED_APPLICATION, Yii::$app->user->getIdentity()->id); AppTask::taskFinish($id_app_task); //find Control Agreement--type--schwab(control agreement->id_application->id_group->Coustidian) $application = Application::find()->andWhere(['id_application' => $id_application])->one(); $group = Group::find()->andWhere(['id_group' => $application->id_group])->one(); //judge for id_custodian //send application approval email to client and cc to advisor(email($email_type,[$task_type,$id_app_task,$loan,$group])) $res = SendEmail::email(DictEmail::EMAIL_LETTER_ABOUT_LINE, [DictEmail::LETTER_APPLICATION_APPROVAL, $id_app_task, $loanModel, $group]); if ($res) { //判断是否有两个client参与 $user = SendEmail::findUserByApplication($id_application); if (is_null($user['co_applicant'])) { Active::operationLog($id_application, [$user['applicant']->first_name, $user['applicant']->last_name, '', $user['advisor']->first_name, $user['advisor']->last_name], DictActive::SYSTEM_SEND_APPROVAL_LETTER, 0); } else { Active::operationLog($id_application, [$user['applicant']->first_name, $user['applicant']->last_name, ',' . $user['co_applicant']->first_name . ' ' . $user['co_applicant']->last_name, $user['advisor']->first_name, $user['advisor']->last_name], DictActive::SYSTEM_SEND_APPROVAL_LETTER, 0); } } //active.system geneerated all the line agreements Active::operationLog($id_application, [], DictActive::SYSTEM_GENERATED_LINE_AGREEMENTS, 0); //find user $user = SendEmail::findUserByApplication($id_application); //create a task line-agreement to loan officer Active::operationLog($model->id_application, [DictTask::$taskType[DictTask::TYPE_LINE_AGREEMENTS], $user['supernova']->first_name, $user['supernova']->last_name], DictActive::SYSTEM_CREATE_TASK_TO_USER, 0); //system created task line-agreements //System send email new task "Line Agrrements Notification" to betterdebt($email_type,[$task_type,$id_application,$id_app_task]) SendEmail::email(DictEmail::EMAIL_TASK_NOTIFICATION, [DictTask::TYPE_LINE_AGREEMENTS, $id_application, $id_app_task + 2]); if ($post['type'] != 'wetsigned') { // docusign $result_docusign = SendDocuSign::appReview($id_application); } //crate a task sign-line-agreement to client Active::operationLog($model->id_application, [DictTask::$taskType[DictTask::TYPE_SIGN_AGREEMENTS], $user['applicant']->first_name, $user['applicant']->last_name], DictActive::SYSTEM_CREATE_TASK_TO_USER, 0); //system created task line-agreements Active::operationLog($model->id_application, [DictTask::$taskType[DictTask::TYPE_LINE_AGREEMENTS], $user['applicant']->first_name, $user['applicant']->last_name], DictActive::SYSTEM_SEND_DOCUSIGN_EMAIL, 0); //system send sign agreement docusign email to client return $this->redirect(['/application/view', 'id' => $model->id_application]); } $data = CollateralAccount::find()->andWhere(['line_type' => 1, 'id_line' => $model->id_application])->orderBy(['data_date' => SORT_DESC])->one(); if ($data) { $account = CollateralAccount::find()->andWhere(['line_type' => 1, 'id_line' => $model->id_application, 'data_date' => $data['data_date']])->orderBy(['data_date' => SORT_DESC])->all(); $line_account = LineAccount::find()->andWhere(['line_type' => 1, 'id_line' => $model->id_application, 'data_date' => $data['data_date']])->orderBy(['data_date' => SORT_DESC])->one(); } else { $account = ''; $line_account = ''; } //credit score $applicant = AppApplicant::find()->andWhere(['id_application' => $model->id_application])->all(); return $this->render('index', ['model' => $model, 'loanModel' => $loanModel, 'checkPoints' => $checkPoints, 'approve_ctrl' => $check_points_ctrl && $loan_ctrl, 'collateral_account' => $account, 'line_account' => $line_account, 'date' => empty($data) ? '' : $data['data_date'], 'applicant' => empty($applicant) ? '' : $applicant]); }
public function safeUp() { $tableOptions = null; if ($this->db->driverName === 'mysql') { // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; } // 读取 application $application_list = Application::find()->all(); // application添加的2个字段primaty_advisor和primary_supernova补充完整 foreach ($application_list as $application) { $id_application = $application->id_application; // 读取advisor $user_advisor = AppUser::find()->andWhere(['id_application' => $id_application, 'is_primary_contact' => 1])->joinWith('user')->andWhere(['id_user_role' => Dict::USER_ROLE_ADVISOR])->one(); // 读取 supernova $user_supernova = AppUser::find()->andWhere(['id_application' => $id_application, 'is_primary_contact' => 1])->joinWith('user')->andWhere(['id_user_role' => Dict::USER_ROLE_BETTERDEBT])->one(); $application->primary_advisor = $user_advisor->id_user; $application->primary_supernova = $user_supernova->id_user; $application->save(); // 读取application初始化新的app_task和app_task_checkpoint AppTask::initialize($id_application); $app_task_list = AppTask::find()->andWhere(['id_application' => $id_application])->all(); AppTaskCheckpoint::initialize($app_task_list); //读取app_owner_task_back和app_owner_task_checkpoint_back $app_owner_task_list = Yii::$app->db->createCommand("SELECT O.* FROM app_task_back AS T, app_owner_task_back as O where T.id_app_task = O.id_app_task and T.id_application = {$id_application}")->queryAll(); $app_owner_task_checkpoint_list = Yii::$app->db->createCommand("SELECT B.* FROM app_task_back AS T, app_owner_task_checkpoint_back as B, app_owner_task_back as O where B.id_app_owner_task = O.id_app_owner_task and T.id_app_task = O.id_app_task and T.id_application = {$id_application}")->queryAll(); // app_owner_task_back foreach ($app_owner_task_list as $app_owner_task_key => $app_owner_task) { $back_to_now = ['1' => DictTask::TYPE_APPLICATION_FORM, '2' => DictTask::TYPE_SIGN_APPLICATION_FORM, '3' => DictTask::TYPE_UPLOAD_WETSIGNED_FORM, '4' => DictTask::TYPE_SUPPLEMENTAL_MATERIALS, '5' => DictTask::TYPE_APPLICATION_REVIEW, '6' => DictTask::TYPE_LINE_AGREEMENTS, '7' => DictTask::TYPE_SIGN_AGREEMENTS, '8' => DictTask::TYPE_LINE_SETUP]; // 读取对应的 app_task $app_task_where = ['id_application' => $id_application, 'id_app_task_type' => $back_to_now[$app_owner_task['id_app_owner_task_type']]]; if (in_array($app_owner_task['id_app_owner_task_type'], array('2', '7'))) { $app_task_where['id_user'] = $app_owner_task['id_user']; } $app_task = AppTask::findOne($app_task_where); // 逻辑修正 if ($app_owner_task['id_app_owner_task_type'] == 6 && $app_owner_task_list[$app_owner_task_key + 1]['delete'] == Dict::DELETE_NOT && $app_owner_task_list[$app_owner_task_key + 1]['id_app_owner_task_status'] != DictTask::STATUS_NOT_ACTIVE) { AppTask::close($app_task->id_app_task); } else { // 变更完成状态 switch ($app_owner_task['id_app_owner_task_status']) { case DictTask::STATUS_ACTIVE: $app_task->nextStart($app_task->id_app_task); break; case DictTask::STATUS_FINISH: if ($app_task->active == DictTask::INACTIVE) { $app_task->active = DictTask::ACTIVE; $app_task->save(); } $app_task->taskFinish($app_task->id_app_task); break; } } // 变更结束状态 if ($app_owner_task['delete'] == Dict::DELETE_YES) { AppTask::close($app_task->id_app_task); } // 变更任务所属人角色 if ($app_task['id_app_task_type'] != DictTask::TYPE_SIGN_APPLICATION_FORM) { if ($app_task['id_app_task_type'] != DictTask::TYPE_SIGN_AGREEMENTS) { $id_user = $app_owner_task['id_user']; $user = User::findOne(['id_user' => $id_user]); $app_task->owner_type = DictTask::$userRoleToOwner[$user->id_user_role]; $app_task->save(); } } // 判断是否是签名任务 if (in_array($app_owner_task['id_app_owner_task_type'], array('2', '7'))) { // 找到对应的签名记录 $docusign_recipient = DocusignRecipient::find(false)->andWhere(['id_application' => $id_application, 'id_app_task' => $app_owner_task['id_app_owner_task']])->one(); if (isset($docusign_recipient)) { // 找到新的 id_app_task $app_task_new = AppTask::findOne(['id_application' => $id_application, 'id_user' => $app_owner_task['id_user'], 'id_app_task_type' => $back_to_now[$app_owner_task['id_app_owner_task_type']]]); // 变更 id_app_task $docusign_recipient->id_app_task = $app_task_new->id_app_task; $docusign_recipient->save(); } } } // 变更app_task_checkpoint里面的status foreach ($app_owner_task_checkpoint_list as $app_owner_task_checkpoint) { $app_task_checkpoint = AppTaskCheckpoint::findOne(['id_application' => $id_application, 'id_app_task_checkpoint_type' => $app_owner_task_checkpoint['id_app_owner_task_checkpoint_type']]); $app_task_checkpoint->status = $app_owner_task_checkpoint['status']; $app_task_checkpoint->save(); } } }
public function actionClose($id_application, $id_app_task_type_close, $id_app_task_type_open) { if (Yii::$app->request->isPost) { $app_tasks = AppTask::getTaskByType($id_application, $id_app_task_type_close); foreach ($app_tasks as $task) { // 关闭签名信封 $result = DocusignRecipient::find()->where(['id_app_task' => $task->id_app_task])->one(); $result->delete = Dict::DELETE_YES; $result->save(false); //active log .close task Active::operationLog($id_application, [DictTask::$taskType[DictTask::TYPE_APPLICATION_FORM]], DictActive::SYSTEM_CLOSED_TASK, 0); //delete local file $outpdf_file = Yii::$app->params['outpdfPath'] . $id_application . '_app_form.pdf'; if (file_exists($outpdf_file)) { unlink($outpdf_file); } } $id_app_task_type_close_box = 0; if (DictTask::TYPE_SIGN_APPLICATION_FORM == $id_app_task_type_close) { $id_app_task_type_close_box = DictTask::TYPE_SIGN_APPLICATION_FORM_BOX; } else { if (DictTask::TYPE_SIGN_AGREEMENTS == $id_app_task_type_close) { $id_app_task_type_close_box = DictTask::TYPE_SIGN_AGREEMENTS_BOX; } } $task_e_sign_box = AppTask::find(false)->andWhere(['id_application' => $id_application, 'id_app_task_type' => $id_app_task_type_close_box])->one(); AppTask::close($task_e_sign_box->id_app_task); $task_wet_sign = AppTask::find(false)->andWhere(['id_application' => $id_application, 'id_app_task_type' => $id_app_task_type_open])->one(); $task_wet_sign->active = DictTask::ACTIVE; $task_wet_sign->delete = Dict::DELETE_NOT; $task_wet_sign->save(); $task_wet_sign->nextStart($task_wet_sign->id_app_task); //id_app_task_type:1(app-form);0:表示没有传递id_app_task SendEmail::email(DictEmail::EMAIL_TASK_NOTIFICATION, [$id_app_task_type_open, $id_application, 0]); return $this->redirect(['application/view', 'id' => $id_application]); } return $this->renderAjax('close', ['id_application' => $id_application, 'id_app_task_type_close' => $id_app_task_type_close, 'id_app_task_type_open' => $id_app_task_type_open]); }
public function actionUploadWebSigned($id_app_task) { $model = AppTask::findOne($id_app_task); $UploadModel = new AppDocument(); if (Yii::$app->request->post()) { //upload signed file // $type = intval(Yii::$app->request->get('type')); $type = intval(Yii::$app->request->post()['AppDocument']['id_document_type']); //$result = Upload::getFileUpload($id_app_task, $model->id_application, $type); $result = Upload::uploadFileByApplication($model->id_application, $_FILES['AppDocument']['tmp_name']['path'], $_FILES['AppDocument']['name']['path'], $type, 1); if (!empty($result)) { //delete local file(in file outpdf) switch ($type) { case 5: $outpdf_file = Yii::getAlias('@frontend') . "/web/outpdf/" . $model->id_application . '_loan_agreements.pdf'; if (file_exists($outpdf_file)) { unlink($outpdf_file); } break; case 6: $outpdf_file = Yii::getAlias('@frontend') . "/web/outpdf/" . $model->id_application . '_g3.pdf'; if (file_exists($outpdf_file)) { unlink($outpdf_file); } break; case 7: $outpdf_file = Yii::getAlias('@frontend') . "/web/outpdf/" . $model->id_application . '_w9.pdf'; if (file_exists($outpdf_file)) { unlink($outpdf_file); } break; } //delete control file $collateral_account = AppFormCollateralAccount::find()->andWhere(['id_application' => $model->id_application])->one(); $outpdf_file = Yii::getAlias('@frontend') . "/web/outpdf/" . $model->id_application . '_control_agreement_schwab_' . $collateral_account['account_number'] . '.pdf'; if (file_exists($outpdf_file)) { unlink($outpdf_file); } //active log (supernova upload line-agreements file) foreach (DictDocument::$documentType as $key => $val) { switch ($type) { case $key: Active::operationLog($model->id_application, [Yii::$app->user->getIdentity()->first_name, Yii::$app->user->getIdentity()->last_name, DictDocument::$documentType[$type]], DictActive::USER_UPLOADED_WET_SIGNED_FILE, Yii::$app->user->getIdentity()->id); break; } } //render to index(exit submit) return $this->redirect(['task-agreements/index', 'id_app_task' => $id_app_task]); //delete the same file before upload a new one /* $app_document = AppDocument::find()->andWhere(['id_application' => $model->id_application,'name' => $result['file_name'],'id_document_type' => $type])->one(); if (!empty($app_document)) { $app_document->delete = Dict::DELETE_YES; $app_document->save(); } $UploadModel->id_application = $model->id_application; $UploadModel->path = $result['url']; $UploadModel->name = $result['file_name']; $UploadModel->id_document_type = $type; $UploadModel->source = 1; $UploadModel->save(); */ } //关闭sign agreements $task_e_sign_box = AppTask::findOne(['id_application' => $model->id_application, 'id_app_task_type' => DictTask::TYPE_SIGN_AGREEMENTS_BOX]); AppTask::close($task_e_sign_box->id_app_task); } //find the latest one by document type and id_application $loanAgreements = AppDocument::find()->andWhere(['id_document_type' => DictDocument::TYPE_LINE_AGREEMENT, 'id_application' => $model->id_application])->orderBy(['id_app_document' => SORT_DESC])->one(); $g3 = AppDocument::find()->andWhere(['id_document_type' => DictDocument::TYPE_G3, 'id_application' => $model->id_application])->orderBy(['id_app_document' => SORT_DESC])->one(); $w9 = AppDocument::find()->andWhere(['id_document_type' => DictDocument::TYPE_W9, 'id_application' => $model->id_application])->orderBy(['id_app_document' => SORT_DESC])->one(); // check $finished_ctrl = true; if ($loanAgreements->source == 1 && $g3->source == 1 && $w9->source == 1) { $finished_ctrl = true; } else { $finished_ctrl = false; } return $this->render('index', ['model' => $model, 'UploadModel' => $UploadModel, 'loanAgreements' => $loanAgreements, 'g3' => $g3, 'w9' => $w9, 'finished_ctrl' => $finished_ctrl]); }