// DLG_SignNameSee.cpp: 实现文件
//

#include "stdafx.h"
#include "SmsManager.h"
#include "DLG_SignNameSee.h"
#include "afxdialogex.h"
#include "DLG_Corp_LXR_SF.h"


// DLG_Corp_File dialog
#include "MainFrm.h"
#include "K_SignName.h"


// DLG_SignNameSee 对话框

IMPLEMENT_DYNAMIC(DLG_SignNameSee, CDialogEx)

DLG_SignNameSee::DLG_SignNameSee(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_SIGNNAMESEE, pParent)
	, m_strAuditKF(_T(""))
	, m_strAuditOpinon(_T(""))
	, m_strBelongTo(_T(""))
	, m_strCorp(_T(""))
	, m_strCreateTime(_T(""))
	, m_bDefaultSignName(FALSE)
	, m_strDocType1(_T(""))
	, m_strDocType2(_T(""))
	, m_strDocType3(_T(""))
	, m_strFileName1(_T(""))
	, m_strFileName2(_T(""))
	, m_strFileName3(_T(""))
	, m_strRemark(_T(""))
	, m_strSignName(_T(""))
	, m_strSignNameType(_T(""))
	, m_bOpenCorp(FALSE)
	, m_strCorpBelongTo(_T(""))
{

	m_pDlg = (CDialog  *)pParent;

	m_lSeeType = 0;  //0-仅查看,1-允许修改
	m_lAuditStatus = 0;  //0-不改变审核;1-改变审核成功,2-改为审核失败
	memset(&m_SeeData, 0, sizeof(m_SeeData));

	m_lDownAllSize = 0;
	m_lDownUpSize = 0;
	m_lDownFileID = 0;
}

DLG_SignNameSee::~DLG_SignNameSee()
{
}

void DLG_SignNameSee::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_SIGNNAMESEE_AUDITKF, m_strAuditKF);
	DDX_Text(pDX, IDC_SIGNNAMESEE_AUDITOPINION, m_strAuditOpinon);
	DDX_Text(pDX, IDC_SIGNNAMESEE_BELONGTO, m_strBelongTo);
	DDX_Text(pDX, IDC_SIGNNAMESEE_CORP, m_strCorp);
	DDX_Text(pDX, IDC_SIGNNAMESEE_CREATETIME, m_strCreateTime);
	DDX_Check(pDX, IDC_SIGNNAMESEE_DEFAULTSIGNNAME, m_bDefaultSignName);
	DDX_Text(pDX, IDC_SIGNNAMESEE_DOCTYPE1, m_strDocType1);
	DDX_Text(pDX, IDC_SIGNNAMESEE_DOCTYPE2, m_strDocType2);
	DDX_Text(pDX, IDC_SIGNNAMESEE_DOCTYPE3, m_strDocType3);
	DDX_Text(pDX, IDC_SIGNNAMESEE_FILENAME1, m_strFileName1);
	DDX_Text(pDX, IDC_SIGNNAMESEE_FILENAME2, m_strFileName2);
	DDX_Text(pDX, IDC_SIGNNAMESEE_FILENAME3, m_strFileName3);
	DDX_Text(pDX, IDC_SIGNNAMESEE_REMARK, m_strRemark);
	DDV_MaxChars(pDX, m_strRemark, 200);
	DDX_Text(pDX, IDC_SIGNNAMESEE_SIGNNAME, m_strSignName);
	DDX_Text(pDX, IDC_SIGNNAMESEE_SIGNNAMETYPE, m_strSignNameType);
	DDX_Check(pDX, IDC_SIGNNAMESEE_OPEN, m_bOpenCorp);
	DDX_Control(pDX, IDC_SIGNNAMESEE_GDT, m_P_GDT);
	DDX_Text(pDX, IDC_SIGNNAMESEE_CORPBELONGTO, m_strCorpBelongTo);
}


BEGIN_MESSAGE_MAP(DLG_SignNameSee, CDialogEx)
	ON_BN_CLICKED(IDOK, &DLG_SignNameSee::OnBnClickedOk)
	ON_BN_CLICKED(IDCANCEL, &DLG_SignNameSee::OnBnClickedCancel)
	ON_BN_CLICKED(IDC_SIGNNAMESEE_DOCSEE1, &DLG_SignNameSee::OnBnClickedSignnameseeDocsee1)
	ON_BN_CLICKED(IDC_SIGNNAMESEE_DOCSEE2, &DLG_SignNameSee::OnBnClickedSignnameseeDocsee2)
	ON_BN_CLICKED(IDC_SIGNNAMESEE_DOCSEE3, &DLG_SignNameSee::OnBnClickedSignnameseeDocsee3)
END_MESSAGE_MAP()


// DLG_SignNameSee 消息处理程序



void DLG_SignNameSee::SetParam(ANS_SignName_SeeData seeData, long lSeeType, long lAuditStatus)
{
	m_SeeData = seeData;
	m_lSeeType = lSeeType;
	m_lAuditStatus = lAuditStatus;
}


void DLG_SignNameSee::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_lSeeType == 0)//仅查看
	{
		CDialogEx::OnCancel();
		return;
	}
	if (!UpdateData(true))
		return;
	//取审核状态
	long lStatus = 0;
	if (((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AUDIT_PASS))->GetCheck())
		lStatus = 1;
	if (((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AIDIT_FAIL))->GetCheck())
		lStatus = 2;

	if (lStatus == 0)
	{
		MessageBox(_T("请选择一种审核状态!"), _T("错误"), MB_ICONWARNING);
		GetDlgItem(IDC_SIGNNAMESEE_AUDIT_PASS)->SetFocus();
		return;
	}
	if (lStatus == 2 && m_strAuditOpinon.GetLength() <= 5) //审核失败
	{

		MessageBox(_T("请输入审核失败的详细原因!"), _T("错误"), MB_ICONWARNING);
		GetDlgItem(IDC_SIGNNAMESEE_AUDITOPINION)->SetFocus();
		return;
	}
	if (m_SeeData.lStatus != 0 && lStatus == 1 && m_strAuditOpinon.GetLength() <= 5) //审核失败
	{

		MessageBox(_T("重新审核的短信签名必须输入审核原因!"), _T("错误"), MB_ICONWARNING);
		GetDlgItem(IDC_SIGNNAMESEE_AUDITOPINION)->SetFocus();
		return;
	}
	m_SeeData.lStatus = lStatus;
	_tcscpy(m_SeeData.szAuditOpinion, m_strAuditOpinon);

	CDialogEx::OnOK();
}


void DLG_SignNameSee::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialogEx::OnCancel();
}


BOOL DLG_SignNameSee::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	if (m_SeeData.lUserSignName == 1)
	{
		SetWindowText(_T("[子帐号签名]查看签名申请"));
	}
	CString strTemp;
	strTemp = m_SeeData.szCreateUser;
	//if (m_SeeData.lAgentID > 0)
	//{
	//	strTemp.Format(_T("代理商:%s"), m_SeeData.szCreateUser);
	//	strTemp= m_SeeData.szCreateUser;
	//}
	//提交用户
	m_strCorp.Format(_T("%d-%s[%s]"), m_SeeData.lCorpID, m_SeeData.szCorpName, strTemp);

	if (_tcslen(m_SeeData.szUserName) > 0)
	{
		m_strCorpBelongTo.Append(_T("子账户:"));
		m_strCorpBelongTo.Append(m_SeeData.szUserName);
	}
	if (_tcslen(m_SeeData.szAgentName) > 0)
	{
		m_strCorpBelongTo.Append(_T(" 代理商:"));
		m_strCorpBelongTo.Append(m_SeeData.szAgentName);
	}
	if (_tcslen(m_SeeData.szYWYName) > 0)
	{
		m_strCorpBelongTo.Append(_T(" 客户经理:"));
		m_strCorpBelongTo.Append(m_SeeData.szYWYName);
	}
	//提交时间
	m_strCreateTime.Format(_T("%s / %04d.%02d.%02d %02d:%02d:%02d / %d"), GetSignNameStatus(m_SeeData.lStatus), m_SeeData.tCreateTime.wYear, m_SeeData.tCreateTime.wMonth, m_SeeData.tCreateTime.wDay, m_SeeData.tCreateTime.wHour, m_SeeData.tCreateTime.wMinute, m_SeeData.tCreateTime.wSecond, m_SeeData.lReqCount);
	//签名类型,名称,归属,申请备注
	m_strSignNameType = GetSignNameType(m_SeeData.lSignNameType);
	m_strSignName = m_SeeData.szSignName;
	m_strBelongTo = GetSignNameBelongTo(m_SeeData.lSignNameBelongTo);
	m_strRemark = m_SeeData.szRemark;
	m_bDefaultSignName = m_SeeData.lDefaultSignName;
	//文件
	m_strDocType1 = GetSignNameDocType(m_SeeData.lDocument1Type);
	m_strFileName1 = m_SeeData.szDocument1FileName;
	m_strDocType2 = GetSignNameDocType(m_SeeData.lDocument2Type);
	m_strFileName2 = m_SeeData.szDocument2FileName;
	m_strDocType3 = GetSignNameDocType(m_SeeData.lDocument3Type);
	m_strFileName3 = m_SeeData.szDocument3FileName;
	//按扭
	if (m_SeeData.lDocument1FileID <= 0)
		GetDlgItem(IDC_SIGNNAMESEE_DOCSEE1)->EnableWindow(false);
	if (m_SeeData.lDocument2FileID <= 0)
		GetDlgItem(IDC_SIGNNAMESEE_DOCSEE2)->EnableWindow(false);
	if (m_SeeData.lDocument3FileID <= 0)
		GetDlgItem(IDC_SIGNNAMESEE_DOCSEE3)->EnableWindow(false);
	//审核情况
	long lAuditStatus = 0;
	lAuditStatus = m_SeeData.lStatus;

	if (m_lSeeType == 1 && m_lAuditStatus == 1)  //强制改成已审核
	{
		lAuditStatus = 1;
	}
	if (m_lSeeType == 1 && m_lAuditStatus == 2)  //强制改成审核失败
	{
		lAuditStatus = 2;
	}
	if (lAuditStatus == 1)
	{
		((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AUDIT_PASS))->SetCheck(true);
		((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AIDIT_FAIL))->SetCheck(false);
	}
	if (lAuditStatus == 2)
	{
		((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AUDIT_PASS))->SetCheck(false);
		((CButton*)GetDlgItem(IDC_SIGNNAMESEE_AIDIT_FAIL))->SetCheck(true);
	}

	if (_tcslen(m_SeeData.szAuditKF) > 0)
	{
		m_strAuditKF.Format(_T("%s / %04d.%02d.%02d %02d:%02d:%02d"), m_SeeData.szAuditKF, m_SeeData.tAuditTime.wYear, m_SeeData.tAuditTime.wMonth, m_SeeData.tAuditTime.wDay, m_SeeData.tAuditTime.wHour, m_SeeData.tAuditTime.wMinute, m_SeeData.tAuditTime.wSecond);
	}
	m_strAuditOpinon = m_SeeData.szAuditOpinion;

	if (m_lSeeType == 0)//仅查看
	{
		GetDlgItem(IDC_SIGNNAMESEE_AUDIT_PASS)->EnableWindow(false);
		GetDlgItem(IDC_SIGNNAMESEE_AIDIT_FAIL)->EnableWindow(false);
		((CEdit*)GetDlgItem(IDC_SIGNNAMESEE_AUDITOPINION))->SetReadOnly(true);
	}

	if (m_SeeData.lCorpStatus != 0 && m_SeeData.lUserSignName==0 )  //企业状态为未开通,并且为企业签名
	{
		COleDateTime t(m_SeeData.tCorpCreateTime);
		if (t.GetStatus() == COleDateTime::valid &&
			COleDateTime::GetCurrentTime() - t < COleDateTimeSpan(31, 0, 0, 0)) //创建时间1个月内的
		{
			strTemp.Format(_T("同时开通此企业(此企业创建时间为:%04d.%02d.%02d)"), t.GetYear(), t.GetMonth(), t.GetDay());
			GetDlgItem(IDC_SIGNNAMESEE_OPEN)->SetWindowText(strTemp);
			GetDlgItem(IDC_SIGNNAMESEE_OPEN)->ShowWindow(SW_SHOW);
			m_bOpenCorp = true;
		}
	}
	m_P_GDT.ShowWindow(SW_HIDE);  //滚动条默认关闭。
	UpdateData(false);

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}



CString DLG_SignNameSee::GetSignNameStatus(long lStatus)
{
	CString strTemp;
	switch (lStatus)
	{
	case 0:
		strTemp = _T("待审核");
		break;
	case 1:
		strTemp = _T("审核成功");
		break;
	case 2:
		strTemp = _T("审核失败");
		break;
	default:
		strTemp = _T("未知状态");
		break;
	}
	return strTemp;
}
CString DLG_SignNameSee::GetSignNameType(long lType)
{
	CString strTemp;
	switch (lType)
	{
	case 0:
		strTemp = _T("企业/单位名称");
		break;
	case 1:
		strTemp = _T("商标名称");
		break;
	case 2:
		strTemp = _T("网站名称");
		break;
	case 3:
		strTemp = _T("App/公众号/小程序名称");
		break;
	case 4:
		strTemp = _T("其它名称");
		break;
	default:
		strTemp = _T("未知类型");
		break;
	}
	return strTemp;
}
CString DLG_SignNameSee::GetSignNameDocType(long lType)
{
	CString strTemp;
	switch (lType)
	{
	case 0:
		strTemp = _T("三证合一/营业执照");
		break;
	case 1:
		strTemp = _T("组织机构代码证");
		break;
	case 2:
		strTemp = _T("社会信用代码证");
		break;
	case 3:
		strTemp = _T("商标证书");
		break;
	case 4:
		strTemp = _T("网站备案证明");
		break;
	case 5:
		strTemp = _T("授权书");
		break;
	case 6:
		strTemp = _T("其它证明文件");
		break;
	default:
		strTemp = _T("未知文件");
		break;
	}
	return strTemp;
}
CString DLG_SignNameSee::GetSignNameBelongTo(long lBelongTo)
{
	CString strTemp;
	switch (lBelongTo)
	{
	case 0:
		strTemp = _T("自用");
		break;
	case 1:
		strTemp = _T("他人");
		break;
	default:
		strTemp = _T("未知");
		break;
	}
	return strTemp;
}

BOOL DLG_SignNameSee::ProcessSocket(Socket_Head *pHead)
{
	//查看文件
	if (pHead->lFuncType == SMSFUNC_CORP_FILE)
	{
		ANS_Corp_File     * pFile = (ANS_Corp_File     *)pHead->pFrame;
		ANS_Corp_FileData * pFileData = (ANS_Corp_FileData *)(pHead->pFrame + sizeof(ANS_Corp_File));
		if (pFile->lCount < 0)   //权限不足,返回错误
			return true;
		if (pFile->ret.lReqType == 5) //下载
		{
			if (pFile->bOK && pFile->lCount > 0)
			{
				if (pFile->ret.lSize <= pFile->ret.lUpSize)  //收到第一帧
				{
					m_P_GDT.SetRange32(0, pFile->ret.lAllSize);
					m_P_GDT.ShowWindow(SW_SHOW);
				}

				m_DownFile.Write((BYTE*)pFileData, pFile->ret.lSize);  //写文件

				if (pFile->ret.lAllSize == pFile->ret.lUpSize)  //下载完成
				{
					m_P_GDT.SetRange(0, 0); //上传完成,关闭滚动条
					m_P_GDT.ShowWindow(SW_HIDE);
					m_DownFile.Close();

					//下载完成,打开文件
					ShellExecute(NULL, _T("open"), m_strDownFileName, NULL, m_strDownFilePath, SW_SHOWNORMAL);
				}
				else
				{
					m_P_GDT.SetPos(pFile->ret.lUpSize);
				}

			}
		}

		return true;
	}

	return false;
}

void DLG_SignNameSee::OnBnClickedSignnameseeDocsee1()
{
	DownLoadFile(m_SeeData.lDocument1FileID, m_SeeData.szDocument1FileName);
}


void DLG_SignNameSee::DownLoadFile(long lFileID, CString strFileName)
{
	if (lFileID <= 0 || strFileName.GetLength() < 2)
		return;
	//取扩展名
	TCHAR * pFilename = strFileName.GetBuffer();
	TCHAR *ext = _tcsrchr(pFilename, _T('.'));
	if (ext)
	{
		*ext = '\0';
		ext++;
	}
	CString strFileTitle = pFilename;
	CString strExtName = ext;

	//取当前文件夹
	TCHAR szPath[512] = { 0 };
	DLG_Corp_LXR_SF::GetCurrentPath(szPath);
	_tcscat(szPath, _T("Files\\"));
	::CreateDirectory(szPath, NULL); //创建文件夹
	CString strDownLoadFile;
	strDownLoadFile.Format(_T("%s%d.%s"), szPath,lFileID, strExtName);
	if (_taccess(strDownLoadFile, 0) != -1)
	{
		if (!::DeleteFile(strDownLoadFile))
		{
			MessageBox(_T("文件冲突,建议重启后再试!"), _T("错误"), MB_ICONWARNING);
			return;
		}
	}
	m_strDownRarFile = strDownLoadFile;
	m_strDownFilePath = szPath;
	m_strDownFileName = strDownLoadFile;  //原始文件名

	if (!m_DownFile.Open(m_strDownRarFile, CFile::modeCreate | CFile::modeWrite))
	{
		MessageBox(_T("创建文件失败,建议重启后再试!"), _T("错误"), MB_ICONWARNING);
		return;
	}

	REQ_Corp_File * pFile = new REQ_Corp_File;
	memset(pFile, 0, sizeof(REQ_Corp_File));
	pFile->lFileID = lFileID;
	pFile->lReqType = 5; //下载
	_tcscpy(pFile->szCorpName, strFileName);  //原始文件名
	if (m_pDlg)
	{
		((CK_SignName*)m_pDlg)->m_pMainFrame->SendFrame(SMSFUNC_CORP_FILE, (BYTE*)pFile, sizeof(REQ_Corp_File));
	}
}


void DLG_SignNameSee::OnBnClickedSignnameseeDocsee2()
{
	DownLoadFile(m_SeeData.lDocument2FileID, m_SeeData.szDocument2FileName);
}


void DLG_SignNameSee::OnBnClickedSignnameseeDocsee3()
{
	DownLoadFile(m_SeeData.lDocument3FileID, m_SeeData.szDocument3FileName);
}