//**************************************************************************//
//**************** 资金类型处理 ***************************//
//**************************************************************************//
private bool ProcessFundGrid(long clearingAcctNumber, long deductSchedNbr, long? submNbrToCopy, string deductSubOrgNbr)//
{
if (base.ExceptionList.Count <= 0)
{
string rtxnTranTypeCode = string.Empty;
decimal availaibleSubAcctBalance = decimal.MinValue;
decimal glavailaibleSubAcctBalance = 0M;
string rtxnTypeCode = string.Empty;
string intlRtxnDesc = string.Empty;
bool isCopy = this._formMode == FormMode.Copy;
if ((((base.ActiveTask != null) && (base.ActiveTask.ActiveAccount != null)) && (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"] != null)) && (this.txtAmount.Value != null))
{
decimal totCash = 0M;
//是否超过最大限额的判断--start
if (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.HasValue)
{
availaibleSubAcctBalance = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.Value;
}
else
{
availaibleSubAcctBalance = 0M;
}
if ((this.txtAmount.Value + availaibleSubAcctBalance) > 999999999999999.99M)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账户余额{0} 与交易金额{1} 之和已超过最大限额【999,999,999,999,999.99】", new object[] { FI.FormatCurrency(availaibleSubAcctBalance), FI.FormatCurrency((decimal)this.txtAmount.Value) });
return false;
}
//是否超过最大限额的判断--end
//if (base.ActiveTask.ActiveAccount.CurrAcctStatCd == "APPR")
//{
// rtxnTypeCode = "NA";
//}
//交易类型
rtxnTypeCode = "PAYD";//
Rtxn rtxn = Rtxn.NewRtxn(new long?(base.ActiveTask.ActiveAccount.AcctNbr.Value), rtxnTypeCode);
//现金箱
if (CoreUser.CashboxNbr != long.MinValue)
{
rtxn.CashboxNbr = CoreUser.CashboxNbr;
}
//生效日期
if (this.calDepositEffectiveDate.SelectedDate.HasValue)
{
rtxn.EffectiveDate = this.calDepositEffectiveDate.SelectedDate.Value;
}
//交易发生额
if (this.txtAmount.Text != null)
{
rtxn.TranAmt = decimal.Parse(this.txtAmount.Text);
}
//交易子账号
rtxn.HoldSubAcctNbr = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr;
//资金列表的判断
for (int iCount = 0; iCount < this.grdFundGrid.Funds.Count; iCount++)
{
if (!((this.grdFundGrid.Funds[iCount].Amt != 0M) && this.grdFundGrid.Funds[iCount].Amt.HasValue))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "金额无效", new object[0]);
return false;
}
if (this.grdFundGrid.Funds[iCount].FundTypCd == null)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "资金类型不可为空", new object[0]);
return false;
}
if (this.grdFundGrid.Funds[iCount].FundTypCd == "CASH")
{
totCash += this.grdFundGrid.Funds[iCount].Amt.Value;
}
if (!this.grdFundGrid.Funds[iCount].ParentRtxnIsNull)
{
rtxnTranTypeCode = this.grdFundGrid.Funds[iCount].ParentRtxn.RtxnTypCd;
}
if ((!this.grdFundGrid.Funds[iCount].AcctNbr.HasValue && (rtxnTranTypeCode != string.Empty)) && (rtxnTranTypeCode != null))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账号不可为空.", new object[0]);
return false;
}
string wthacctnbr = string.Empty;
string wthacctorgnbr = string.Empty;
this.approvepersnbr = long.MinValue;
wthacctnbr = this.grdFundGrid.WthAccount;
if (wthacctnbr != string.Empty)
{
if (this._contractAcctNbr.ToString() != wthacctnbr)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "划款账户不是签约账户!");
return false;
}
Acct acctOrgNbr = Acct.GetAcct(long.Parse(wthacctnbr), new object[] { AcctFetch.Basic });
//20110417--款项有内部账划出时加授权页面
if (acctOrgNbr.MjAcctType.ToString() == "GL")
{
判断取款账户内是否有足够的资金
//if (acctOrgNbr.SubAccounts["NOTE", "BAL"].BalanceHistoryIsNull==false)
//{
// glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
//}
//else
//{
// glavailaibleSubAcctBalance = 0M;
//}
//判断取款账户内是否有足够的资金
try
{
glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
}
catch (Exception ex)
{
glavailaibleSubAcctBalance = 0M;
}
if (glavailaibleSubAcctBalance > (decimal?)(this.txtAmount.Value * -1M))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "此内部户内余额不足!");
return false;
}
if (!this.InvokeOverrideScreen(0x185L))
{
return false;
}
}
}
//交易描述
if (CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate] != null)
{
CalcTypVarValue calcTypVarValue = CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate];
if ((calcTypVarValue.CalcVarValue == "Y") && (((rtxnTypeCode == "PAYD") && ((rtxnTranTypeCode == "WTH") || (rtxnTranTypeCode == "GLD"))) && (Math.Abs(this.grdFundGrid.Funds[iCount].Amt.Value) == Math.Abs(this.grdFundGrid.TotalAmount))))
{
intlRtxnDesc = "Transfer from " + this.grdFundGrid.Funds[iCount].AcctNbr.ToString();
}
}
//子交易的添加
rtxn.AddFund(this.grdFundGrid.Funds[iCount].FundTypCd, this.grdFundGrid.Funds[iCount].FundTypDtlCd, this.grdFundGrid.Funds[iCount].ClearCatCd, this.grdFundGrid.Funds[iCount].Amt, this.grdFundGrid.Funds[iCount].NbrOfItems);
}
rtxn.AddBalance(base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr, "NOTE", "BAL", (decimal?)(this.txtAmount.Value * -1M));//20110321将【RTXNBAL】表中变为负数
rtxn.InternalDescription = intlRtxnDesc;
long? numberOfItems = long.MinValue;
RtxnCollection rtxnCollection = this.grdFundGrid.ChildTrxns;
//string strCheckNbr = string.Empty;
//string[] strArrayCheckNbr;
bool flag = false;
foreach (Rtxn rtxnChild in rtxnCollection)
{
//if (rtxnChild.CheckNbr != null)
//{
// strCheckNbr = strCheckNbr + rtxnChild.CheckNbr.ToString() + ";";
//}
if (rtxnChild.RtxnFundTyps.Count > 0)
{
//strCheckNbr = rtxnChild.CheckNbr.ToString();
long? nbrOfItemsTemp = rtxnChild.RtxnFundTyps[0].NbrOfItems;
if (!nbrOfItemsTemp.HasValue || nbrOfItemsTemp.GetValueOrDefault() <= 0L)
{
numberOfItems = 1L;
}
else
{
numberOfItems = rtxnChild.RtxnFundTyps[0].NbrOfItems;
}
rtxn.ChildRtxns.Add(rtxnChild);
}
}
重复支票号的判断
//if (strCheckNbr.Length > 0)
//{
// strArrayCheckNbr = strCheckNbr.Split(';');
// if (strArrayCheckNbr.Length > 1)
// {
// CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "转账失败!批次入账一次只能使用一张转账支票!");
// return false;
// }
// for (int i = 0; i < strArrayCheckNbr.Length - 1; i++)
// {
// for (int j = i + 1; j < strArrayCheckNbr.Length; j++)
// {
// if (strArrayCheckNbr[i] == strArrayCheckNbr[j])
// {
// flag = true;
// break;
// }
// }
// }
// if (flag)
// {
// CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "发现重复的支票号,转账失败!");
// return false;
// }
//}
rtxn.SetupDeposit(RtxnValidator.Deposit);
DeductSchedSubmProcessor deductSchedSubmProcessor = new DeductSchedSubmProcessor();
try
{
if (rtxn != null)
{
deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, false, submNbrToCopy);
deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
rtxn = deductSchedSubmProcessor.RtxnObj;
}
}
catch (CoreTransactionException tExcp)
{
if (rtxn != null)
{
frmOverride verrideFrm = new frmOverride(tExcp.Transaction);
if (overrideFrm.ShowDialog(this) == DialogResult.Cancel)
{
return false;
}
rtxn.ApproverPersNbr = overrideFrm.PersNbr;
deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, true, submNbrToCopy);
deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
rtxn = deductSchedSubmProcessor.RtxnObj;
}
}
if (totCash > 0M)
{
TxnCashCount.ClearCashCounts();
TxnCashCount.IsRtxn = true;
TxnCashCount.TxnTypCd = rtxn.RtxnTypCd;
TxnCashCount.AcctNbr = rtxn.Account.AcctNbr.Value;
TxnCashCount.CashboxNbr = CoreUser.CashboxNbr;
TxnCashCount.TxnNbr = rtxn.RtxnNbr.Value;
TxnCashCount.RequestAmount = totCash;
TxnCashCount.DispenseOrCashCount();
TxnCashCount.CallCashCount();
}
if (deductSchedSubmProcessor.ErrorNbr <= 0)
{
this.PopulateGrid();
//打印凭证的方法
PrePrint(rtxn, rtxnCollection, deductSchedNbr.ToString().PadLeft(8, '0'), deductSchedSubmProcessor.SubmdNbr.ToString(), approvepersnbr);
}
return true;
}
}
return false;
}
//**************************************************************************//
//**************** 转账支票取款时打印凭条 ***************************//
//**************************************************************************//
private void PrePrint(Rtxn rtxn, RtxnCollection childRtxn, string deductSchedNbr, string submdNbr, long approvepersnbr)
{
string rgAcctnbr = null;//付款人账号
string rgName = null;//付款人名称
string rgChecknbr = null;//转账支票号
Acct rgAcct = null;
string resultString = string.Empty;
if ((childRtxn != null) && (childRtxn[0].CheckNbr.ToString() != null) && (childRtxn[0].CheckNbr.ToString() != ""))
{
resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入支票背面,按确定按钮开始打印", new object[0]);
}
else
{
resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入通用业务凭证,按确定按钮开始打印", new object[0]);
}
if (resultString == "确定")
{
try
{
//子交易(通过转账支票从单位账户取款)
if (childRtxn != null)
{
Rtxn rtxnChild = childRtxn[0];
rgAcct = Acct.GetAcct(rtxnChild.AcctNbr, new object[] { 0L });
if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
{
rgAcctnbr = rtxnChild.AcctNbr.ToString();
//orgName = orgAcct.BranchOrg.OrgName;//通过内部户转到清算账户
rgName = GlAcctTitle.GetDecodeGLAccttitl(rtxnChild.AcctNbr, new object[] { }).GlAcctTitleName.ToString();//
}
else
{
rgAcctnbr = rtxnChild.MediumId; //单位帐号
if (orgAcct != null && orgAcct.TaxRptForOrgNbr.HasValue && (orgAcct.TaxRptForOrgNbr.Value > 0L))
{
rgName = orgAcct.TaxRptForOrganization.OrgName; //单位名称
}
else
{
rgName = ""; //单位名称
}
}
rgChecknbr = rtxnChild.CheckNbr.ToString(); //转账支票号
}
else
{
CoreMessageBox.Show("没有需要打印的交易!");
return;
}
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("serialNumber", string.Concat(rtxn.AcctNbr, rtxn.RtxnNbr)); //交易流水号
ht.Add("tranType", "(代发工资)批次入账"); //交易类型
RtxnStatHist _rtxnStatHist = RtxnStatHist.GetRtxnStatHist(rtxn.AcctNbr, rtxn.RtxnNbr, new object[] { RtxnStatHistFetch.TransDetail });
if (_rtxnStatHist != null)
{
ht.Add("tranDate", _rtxnStatHist.PostDate.Value.ToString("yyyy-MM-dd")); //交易记账日期
ht.Add("tranTime", ((DateTime)_rtxnStatHist.ActDateTime).ToString("HH:mm:ss")); //交易时间
}
else
{
ht.Add("tranDate", CoreUser.PostingDate.ToString("yyyy-MM-dd")); //交易记账日期
ht.Add("tranTime", base.CurrTime.ToString("HH:mm:ss")); //交易时间
}
ht.Add("checkno", orgChecknbr); //支票号
ht.Add("deductschednbr", deductSchedNbr); //协议号
ht.Add("submdnbr", submdNbr); //批次号
ht.Add("payeeName", orgName); //付款人名称(单位账户)
ht.Add("payeeAcctnbr", orgAcctnbr); //付款人账号
if (rtxn.Account != null && rtxn.Account.BranchOrgNbr.HasValue && (rtxn.Account.BranchOrgNbr.Value > 0L))
{
ht.Add("receiverName", rtxn.Account.BranchOrg.OrgName); //收款人名称(银行内部户)
ht.Add("receiverBankName", rtxn.Account.BranchOrg.OrgName); //收款人开户行(银行内部户)
}
else
{
ht.Add("receiverName", ""); //收款人名称(银行内部户)
ht.Add("receiverBankName", ""); //收款人开户行(银行内部户)
}
ht.Add("receiverAcctnbr", rtxn.AcctNbr); //收款人账号(银行内部户)
ht.Add("Currency", Acct.GetAcct(rtxn.AcctNbr).AccountCurrency.CurrencyDesc); //币种
ht.Add("traamtxiaoxie", Math.Abs(rtxn.TranAmt.Value).ToString("C"));//金额 (小写)
ht.Add("traamtdaxie", Math.Abs(rtxn.TranAmt.Value).ToString());//金额 (大写)
//ht.Add("des", "代发单位通过转账支票进行代发工资批次入账");//备 注
if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
{
ht.Add("des", "代发单位通过【内部账户】进行代发工资批次入账");//备 注
}
else
{
if (orgChecknbr != null && orgChecknbr != "")
{
ht.Add("des", "代发单位通过【转账支票】进行代发工资批次入账");//备 注
}
else
{
ht.Add("des", "代发单位通过【提款】进行代发工资批次入账");//备 注
}
}
ht.Add("transactor", CoreUser.SAFUserName);//经 办
Pers pers;
string approverPersName = "";
if (approvepersnbr != long.MinValue)
{
pers = Pers.GetPers(approvepersnbr, new object[] { });
if (pers != null)
{
approverPersName = pers.LastName;
}
}
if (rtxn != null && rtxn.ApproverPersNbr != long.MinValue)
{
pers = Pers.GetPers(rtxn.ApproverPersNbr, new object[] { });
if (pers != null)
{
approverPersName = pers.LastName;
}
}
ht.Add("authorization", approverPersName);//授 权
//数据准备完成开始打印
#region 转账支票取款凭证
//OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
//OSI.Core.Windows.Query.DynamicQueryManager dqm = new OSI.Core.Windows.Query.DynamicQueryManager();
//CoreMessageBox.Show("请插入支票背面,开始打印");
//20110916 zxy 修改 {16} 自2623换行到2628 新加 {18},用于在通用凭证右上角打印 年 月 日
string str = string.Format(
@"
{18}
{0}{1}
{2}{3}
{4}{5}
{6}
{7}
{8}
{9}
{10}
{11}
{12}
{13}{14}
{15}
{16}{17}
",
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("流 水 号:", ht["serialNumber"]), 39),
string.Concat("交易类型:", ht["tranType"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("交易日期:", ht["tranDate"]), 39),
string.Concat("交易时间:", ht["tranTime"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("协 议 号:", ht["deductschednbr"]), 39),
string.Concat("批 次 号:", ht["submdnbr"]),
string.Concat("支 票 号:", ht["checkno"]),
string.Concat("付 款 人:", ht["payeeName"]),
string.Concat("付款账号:", ht["payeeAcctnbr"]),
string.Concat("收 款 人:", ht["receiverName"]),
string.Concat("收款账号:", ht["receiverAcctnbr"]),
string.Concat("收款人开户行:", ht["receiverBankName"]),
string.Concat("币 种:", ht["Currency"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("金 额(小写):", ht["traamtxiaoxie"]), 39),
string.Concat("金 额(大写):", OSI.Core.Windows.Printing.PrintUtil.MoneyToChinese(ht["traamtdaxie"].ToString())),
string.Concat("备 注:", ht["des"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("经 办:", ht["transactor"].ToString().Trim()), 39),//20110916 zxy 添加OSI.Core.Windows.Printing.PrintUtil.PadLeft(
string.Concat("授 权:", ht["authorization"]),//20110916 zxy 新加右括号及逗号
OSI.Core.Windows.Printing.PrintUtil.PadLeft("年" + OSI.Core.Security.CoreUser.PostingDate.Year.ToString() + "月" + OSI.Core.Security.CoreUser.PostingDate.Month.ToString() + "日" + OSI.Core.Security.CoreUser.PostingDate.Day.ToString(), 100));//20110916 zxy 新添
OSI.Framework.Trace.TraceWriter.WriteFile(str);
//dqm.ClearPrtVarArray();
//dqm.SetPrtVarArrayText(0, str);
//pm.Print(6000020, dqm);
RtxnStatHistPrt rxhp = RtxnStatHistPrt.NewRtxnStatHistPrt();
rxhp.AcctNbr = Convert.ToInt64(rtxn.AcctNbr);
rxhp.RtxnNbr = Convert.ToInt32(rtxn.RtxnNbr);
rxhp.ActDateTime = _rtxnStatHist.ActDateTime.GetValueOrDefault();
rxhp.TimeUniquExtn = _rtxnStatHist.TimeUniqueExtn.GetValueOrDefault();
rxhp.PrtItemTypCd = "PAYD";
rxhp.PrtItemStr = str;
rxhp.Save();
OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
pm.Print(6000223, str, "代发工资批次入账凭条打印");
#endregion
}
catch (Exception ex)
{
CoreMessageBox.Show("打印失败");
}
}
}
//打印凭证的结果
年2012月5日15
流 水 号:183903053010ss290 交易类型:(xss)abc
交易日期:2023-05-15 交易时间:19:40:23
协 议 号:00000192 批 次 号:6
支 票 号:
付 款 人:ab
付款账号:2334
收 款 人:sx银行结算管理部(清算中心)
收款账号:22333
收款人开户行:sx银行结算管理部(清算中心)
币 种:人民币
金 额(小写):¥20.00 金 额(大写):貳拾元整
备 注:代发单位通过【提款】进行代发工资批次入账
经 办:axs 授 权:
//**************** 资金类型处理 ***************************//
//**************************************************************************//
private bool ProcessFundGrid(long clearingAcctNumber, long deductSchedNbr, long? submNbrToCopy, string deductSubOrgNbr)//
{
if (base.ExceptionList.Count <= 0)
{
string rtxnTranTypeCode = string.Empty;
decimal availaibleSubAcctBalance = decimal.MinValue;
decimal glavailaibleSubAcctBalance = 0M;
string rtxnTypeCode = string.Empty;
string intlRtxnDesc = string.Empty;
bool isCopy = this._formMode == FormMode.Copy;
if ((((base.ActiveTask != null) && (base.ActiveTask.ActiveAccount != null)) && (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"] != null)) && (this.txtAmount.Value != null))
{
decimal totCash = 0M;
//是否超过最大限额的判断--start
if (base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.HasValue)
{
availaibleSubAcctBalance = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].OrigBal.Value;
}
else
{
availaibleSubAcctBalance = 0M;
}
if ((this.txtAmount.Value + availaibleSubAcctBalance) > 999999999999999.99M)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账户余额{0} 与交易金额{1} 之和已超过最大限额【999,999,999,999,999.99】", new object[] { FI.FormatCurrency(availaibleSubAcctBalance), FI.FormatCurrency((decimal)this.txtAmount.Value) });
return false;
}
//是否超过最大限额的判断--end
//if (base.ActiveTask.ActiveAccount.CurrAcctStatCd == "APPR")
//{
// rtxnTypeCode = "NA";
//}
//交易类型
rtxnTypeCode = "PAYD";//
Rtxn rtxn = Rtxn.NewRtxn(new long?(base.ActiveTask.ActiveAccount.AcctNbr.Value), rtxnTypeCode);
//现金箱
if (CoreUser.CashboxNbr != long.MinValue)
{
rtxn.CashboxNbr = CoreUser.CashboxNbr;
}
//生效日期
if (this.calDepositEffectiveDate.SelectedDate.HasValue)
{
rtxn.EffectiveDate = this.calDepositEffectiveDate.SelectedDate.Value;
}
//交易发生额
if (this.txtAmount.Text != null)
{
rtxn.TranAmt = decimal.Parse(this.txtAmount.Text);
}
//交易子账号
rtxn.HoldSubAcctNbr = base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr;
//资金列表的判断
for (int iCount = 0; iCount < this.grdFundGrid.Funds.Count; iCount++)
{
if (!((this.grdFundGrid.Funds[iCount].Amt != 0M) && this.grdFundGrid.Funds[iCount].Amt.HasValue))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "金额无效", new object[0]);
return false;
}
if (this.grdFundGrid.Funds[iCount].FundTypCd == null)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "资金类型不可为空", new object[0]);
return false;
}
if (this.grdFundGrid.Funds[iCount].FundTypCd == "CASH")
{
totCash += this.grdFundGrid.Funds[iCount].Amt.Value;
}
if (!this.grdFundGrid.Funds[iCount].ParentRtxnIsNull)
{
rtxnTranTypeCode = this.grdFundGrid.Funds[iCount].ParentRtxn.RtxnTypCd;
}
if ((!this.grdFundGrid.Funds[iCount].AcctNbr.HasValue && (rtxnTranTypeCode != string.Empty)) && (rtxnTranTypeCode != null))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "账号不可为空.", new object[0]);
return false;
}
string wthacctnbr = string.Empty;
string wthacctorgnbr = string.Empty;
this.approvepersnbr = long.MinValue;
wthacctnbr = this.grdFundGrid.WthAccount;
if (wthacctnbr != string.Empty)
{
if (this._contractAcctNbr.ToString() != wthacctnbr)
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "划款账户不是签约账户!");
return false;
}
Acct acctOrgNbr = Acct.GetAcct(long.Parse(wthacctnbr), new object[] { AcctFetch.Basic });
//20110417--款项有内部账划出时加授权页面
if (acctOrgNbr.MjAcctType.ToString() == "GL")
{
判断取款账户内是否有足够的资金
//if (acctOrgNbr.SubAccounts["NOTE", "BAL"].BalanceHistoryIsNull==false)
//{
// glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
//}
//else
//{
// glavailaibleSubAcctBalance = 0M;
//}
//判断取款账户内是否有足够的资金
try
{
glavailaibleSubAcctBalance = decimal.Parse(acctOrgNbr.GetAvailableFunds(acctOrgNbr.SubAccounts["NOTE", "BAL"].SubAcctNbr.Value).ToString());
}
catch (Exception ex)
{
glavailaibleSubAcctBalance = 0M;
}
if (glavailaibleSubAcctBalance > (decimal?)(this.txtAmount.Value * -1M))
{
CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "此内部户内余额不足!");
return false;
}
if (!this.InvokeOverrideScreen(0x185L))
{
return false;
}
}
}
//交易描述
if (CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate] != null)
{
CalcTypVarValue calcTypVarValue = CalcTypVarValue.BankVariables["BANK", "TRAN", CoreUser.PostingDate];
if ((calcTypVarValue.CalcVarValue == "Y") && (((rtxnTypeCode == "PAYD") && ((rtxnTranTypeCode == "WTH") || (rtxnTranTypeCode == "GLD"))) && (Math.Abs(this.grdFundGrid.Funds[iCount].Amt.Value) == Math.Abs(this.grdFundGrid.TotalAmount))))
{
intlRtxnDesc = "Transfer from " + this.grdFundGrid.Funds[iCount].AcctNbr.ToString();
}
}
//子交易的添加
rtxn.AddFund(this.grdFundGrid.Funds[iCount].FundTypCd, this.grdFundGrid.Funds[iCount].FundTypDtlCd, this.grdFundGrid.Funds[iCount].ClearCatCd, this.grdFundGrid.Funds[iCount].Amt, this.grdFundGrid.Funds[iCount].NbrOfItems);
}
rtxn.AddBalance(base.ActiveTask.ActiveAccount.SubAccounts["NOTE", "BAL"].SubAcctNbr, "NOTE", "BAL", (decimal?)(this.txtAmount.Value * -1M));//20110321将【RTXNBAL】表中变为负数
rtxn.InternalDescription = intlRtxnDesc;
long? numberOfItems = long.MinValue;
RtxnCollection rtxnCollection = this.grdFundGrid.ChildTrxns;
//string strCheckNbr = string.Empty;
//string[] strArrayCheckNbr;
bool flag = false;
foreach (Rtxn rtxnChild in rtxnCollection)
{
//if (rtxnChild.CheckNbr != null)
//{
// strCheckNbr = strCheckNbr + rtxnChild.CheckNbr.ToString() + ";";
//}
if (rtxnChild.RtxnFundTyps.Count > 0)
{
//strCheckNbr = rtxnChild.CheckNbr.ToString();
long? nbrOfItemsTemp = rtxnChild.RtxnFundTyps[0].NbrOfItems;
if (!nbrOfItemsTemp.HasValue || nbrOfItemsTemp.GetValueOrDefault() <= 0L)
{
numberOfItems = 1L;
}
else
{
numberOfItems = rtxnChild.RtxnFundTyps[0].NbrOfItems;
}
rtxn.ChildRtxns.Add(rtxnChild);
}
}
重复支票号的判断
//if (strCheckNbr.Length > 0)
//{
// strArrayCheckNbr = strCheckNbr.Split(';');
// if (strArrayCheckNbr.Length > 1)
// {
// CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "转账失败!批次入账一次只能使用一张转账支票!");
// return false;
// }
// for (int i = 0; i < strArrayCheckNbr.Length - 1; i++)
// {
// for (int j = i + 1; j < strArrayCheckNbr.Length; j++)
// {
// if (strArrayCheckNbr[i] == strArrayCheckNbr[j])
// {
// flag = true;
// break;
// }
// }
// }
// if (flag)
// {
// CoreMessageBox.Show(MessageBoxOption.Error, 99999L, "发现重复的支票号,转账失败!");
// return false;
// }
//}
rtxn.SetupDeposit(RtxnValidator.Deposit);
DeductSchedSubmProcessor deductSchedSubmProcessor = new DeductSchedSubmProcessor();
try
{
if (rtxn != null)
{
deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, false, submNbrToCopy);
deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
rtxn = deductSchedSubmProcessor.RtxnObj;
}
}
catch (CoreTransactionException tExcp)
{
if (rtxn != null)
{
frmOverride verrideFrm = new frmOverride(tExcp.Transaction);
if (overrideFrm.ShowDialog(this) == DialogResult.Cancel)
{
return false;
}
rtxn.ApproverPersNbr = overrideFrm.PersNbr;
deductSchedSubmProcessor.PostOptionalCopy(rtxn, deductSchedNbr, clearingAcctNumber, this.calSubmissionEffectiveDate.SelectedDate, isCopy, true, submNbrToCopy);
deductSchedSubmProcessor = deductSchedSubmProcessor.Save(base.ActvCatCd, base.ActvTypCd) as DeductSchedSubmProcessor;
rtxn = deductSchedSubmProcessor.RtxnObj;
}
}
if (totCash > 0M)
{
TxnCashCount.ClearCashCounts();
TxnCashCount.IsRtxn = true;
TxnCashCount.TxnTypCd = rtxn.RtxnTypCd;
TxnCashCount.AcctNbr = rtxn.Account.AcctNbr.Value;
TxnCashCount.CashboxNbr = CoreUser.CashboxNbr;
TxnCashCount.TxnNbr = rtxn.RtxnNbr.Value;
TxnCashCount.RequestAmount = totCash;
TxnCashCount.DispenseOrCashCount();
TxnCashCount.CallCashCount();
}
if (deductSchedSubmProcessor.ErrorNbr <= 0)
{
this.PopulateGrid();
//打印凭证的方法
PrePrint(rtxn, rtxnCollection, deductSchedNbr.ToString().PadLeft(8, '0'), deductSchedSubmProcessor.SubmdNbr.ToString(), approvepersnbr);
}
return true;
}
}
return false;
}
//**************************************************************************//
//**************** 转账支票取款时打印凭条 ***************************//
//**************************************************************************//
private void PrePrint(Rtxn rtxn, RtxnCollection childRtxn, string deductSchedNbr, string submdNbr, long approvepersnbr)
{
string rgAcctnbr = null;//付款人账号
string rgName = null;//付款人名称
string rgChecknbr = null;//转账支票号
Acct rgAcct = null;
string resultString = string.Empty;
if ((childRtxn != null) && (childRtxn[0].CheckNbr.ToString() != null) && (childRtxn[0].CheckNbr.ToString() != ""))
{
resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入支票背面,按确定按钮开始打印", new object[0]);
}
else
{
resultString = CoreMessageBox.Show(new string[] { "确定" }, 0L, "请插入通用业务凭证,按确定按钮开始打印", new object[0]);
}
if (resultString == "确定")
{
try
{
//子交易(通过转账支票从单位账户取款)
if (childRtxn != null)
{
Rtxn rtxnChild = childRtxn[0];
rgAcct = Acct.GetAcct(rtxnChild.AcctNbr, new object[] { 0L });
if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
{
rgAcctnbr = rtxnChild.AcctNbr.ToString();
//orgName = orgAcct.BranchOrg.OrgName;//通过内部户转到清算账户
rgName = GlAcctTitle.GetDecodeGLAccttitl(rtxnChild.AcctNbr, new object[] { }).GlAcctTitleName.ToString();//
}
else
{
rgAcctnbr = rtxnChild.MediumId; //单位帐号
if (orgAcct != null && orgAcct.TaxRptForOrgNbr.HasValue && (orgAcct.TaxRptForOrgNbr.Value > 0L))
{
rgName = orgAcct.TaxRptForOrganization.OrgName; //单位名称
}
else
{
rgName = ""; //单位名称
}
}
rgChecknbr = rtxnChild.CheckNbr.ToString(); //转账支票号
}
else
{
CoreMessageBox.Show("没有需要打印的交易!");
return;
}
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("serialNumber", string.Concat(rtxn.AcctNbr, rtxn.RtxnNbr)); //交易流水号
ht.Add("tranType", "(代发工资)批次入账"); //交易类型
RtxnStatHist _rtxnStatHist = RtxnStatHist.GetRtxnStatHist(rtxn.AcctNbr, rtxn.RtxnNbr, new object[] { RtxnStatHistFetch.TransDetail });
if (_rtxnStatHist != null)
{
ht.Add("tranDate", _rtxnStatHist.PostDate.Value.ToString("yyyy-MM-dd")); //交易记账日期
ht.Add("tranTime", ((DateTime)_rtxnStatHist.ActDateTime).ToString("HH:mm:ss")); //交易时间
}
else
{
ht.Add("tranDate", CoreUser.PostingDate.ToString("yyyy-MM-dd")); //交易记账日期
ht.Add("tranTime", base.CurrTime.ToString("HH:mm:ss")); //交易时间
}
ht.Add("checkno", orgChecknbr); //支票号
ht.Add("deductschednbr", deductSchedNbr); //协议号
ht.Add("submdnbr", submdNbr); //批次号
ht.Add("payeeName", orgName); //付款人名称(单位账户)
ht.Add("payeeAcctnbr", orgAcctnbr); //付款人账号
if (rtxn.Account != null && rtxn.Account.BranchOrgNbr.HasValue && (rtxn.Account.BranchOrgNbr.Value > 0L))
{
ht.Add("receiverName", rtxn.Account.BranchOrg.OrgName); //收款人名称(银行内部户)
ht.Add("receiverBankName", rtxn.Account.BranchOrg.OrgName); //收款人开户行(银行内部户)
}
else
{
ht.Add("receiverName", ""); //收款人名称(银行内部户)
ht.Add("receiverBankName", ""); //收款人开户行(银行内部户)
}
ht.Add("receiverAcctnbr", rtxn.AcctNbr); //收款人账号(银行内部户)
ht.Add("Currency", Acct.GetAcct(rtxn.AcctNbr).AccountCurrency.CurrencyDesc); //币种
ht.Add("traamtxiaoxie", Math.Abs(rtxn.TranAmt.Value).ToString("C"));//金额 (小写)
ht.Add("traamtdaxie", Math.Abs(rtxn.TranAmt.Value).ToString());//金额 (大写)
//ht.Add("des", "代发单位通过转账支票进行代发工资批次入账");//备 注
if ((orgAcct != null) && (orgAcct.MjAcctTypCd.ToString() == "GL"))
{
ht.Add("des", "代发单位通过【内部账户】进行代发工资批次入账");//备 注
}
else
{
if (orgChecknbr != null && orgChecknbr != "")
{
ht.Add("des", "代发单位通过【转账支票】进行代发工资批次入账");//备 注
}
else
{
ht.Add("des", "代发单位通过【提款】进行代发工资批次入账");//备 注
}
}
ht.Add("transactor", CoreUser.SAFUserName);//经 办
Pers pers;
string approverPersName = "";
if (approvepersnbr != long.MinValue)
{
pers = Pers.GetPers(approvepersnbr, new object[] { });
if (pers != null)
{
approverPersName = pers.LastName;
}
}
if (rtxn != null && rtxn.ApproverPersNbr != long.MinValue)
{
pers = Pers.GetPers(rtxn.ApproverPersNbr, new object[] { });
if (pers != null)
{
approverPersName = pers.LastName;
}
}
ht.Add("authorization", approverPersName);//授 权
//数据准备完成开始打印
#region 转账支票取款凭证
//OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
//OSI.Core.Windows.Query.DynamicQueryManager dqm = new OSI.Core.Windows.Query.DynamicQueryManager();
//CoreMessageBox.Show("请插入支票背面,开始打印");
//20110916 zxy 修改 {16} 自2623换行到2628 新加 {18},用于在通用凭证右上角打印 年 月 日
string str = string.Format(
@"
{18}
{0}{1}
{2}{3}
{4}{5}
{6}
{7}
{8}
{9}
{10}
{11}
{12}
{13}{14}
{15}
{16}{17}
",
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("流 水 号:", ht["serialNumber"]), 39),
string.Concat("交易类型:", ht["tranType"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("交易日期:", ht["tranDate"]), 39),
string.Concat("交易时间:", ht["tranTime"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("协 议 号:", ht["deductschednbr"]), 39),
string.Concat("批 次 号:", ht["submdnbr"]),
string.Concat("支 票 号:", ht["checkno"]),
string.Concat("付 款 人:", ht["payeeName"]),
string.Concat("付款账号:", ht["payeeAcctnbr"]),
string.Concat("收 款 人:", ht["receiverName"]),
string.Concat("收款账号:", ht["receiverAcctnbr"]),
string.Concat("收款人开户行:", ht["receiverBankName"]),
string.Concat("币 种:", ht["Currency"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("金 额(小写):", ht["traamtxiaoxie"]), 39),
string.Concat("金 额(大写):", OSI.Core.Windows.Printing.PrintUtil.MoneyToChinese(ht["traamtdaxie"].ToString())),
string.Concat("备 注:", ht["des"]),
OSI.Core.Windows.Printing.PrintUtil.PadLeft(string.Concat("经 办:", ht["transactor"].ToString().Trim()), 39),//20110916 zxy 添加OSI.Core.Windows.Printing.PrintUtil.PadLeft(
string.Concat("授 权:", ht["authorization"]),//20110916 zxy 新加右括号及逗号
OSI.Core.Windows.Printing.PrintUtil.PadLeft("年" + OSI.Core.Security.CoreUser.PostingDate.Year.ToString() + "月" + OSI.Core.Security.CoreUser.PostingDate.Month.ToString() + "日" + OSI.Core.Security.CoreUser.PostingDate.Day.ToString(), 100));//20110916 zxy 新添
OSI.Framework.Trace.TraceWriter.WriteFile(str);
//dqm.ClearPrtVarArray();
//dqm.SetPrtVarArrayText(0, str);
//pm.Print(6000020, dqm);
RtxnStatHistPrt rxhp = RtxnStatHistPrt.NewRtxnStatHistPrt();
rxhp.AcctNbr = Convert.ToInt64(rtxn.AcctNbr);
rxhp.RtxnNbr = Convert.ToInt32(rtxn.RtxnNbr);
rxhp.ActDateTime = _rtxnStatHist.ActDateTime.GetValueOrDefault();
rxhp.TimeUniquExtn = _rtxnStatHist.TimeUniqueExtn.GetValueOrDefault();
rxhp.PrtItemTypCd = "PAYD";
rxhp.PrtItemStr = str;
rxhp.Save();
OSI.Core.Windows.Printing.PrintManager pm = new OSI.Core.Windows.Printing.PrintManager();
pm.Print(6000223, str, "代发工资批次入账凭条打印");
#endregion
}
catch (Exception ex)
{
CoreMessageBox.Show("打印失败");
}
}
}
//打印凭证的结果
年2012月5日15
流 水 号:183903053010ss290 交易类型:(xss)abc
交易日期:2023-05-15 交易时间:19:40:23
协 议 号:00000192 批 次 号:6
支 票 号:
付 款 人:ab
付款账号:2334
收 款 人:sx银行结算管理部(清算中心)
收款账号:22333
收款人开户行:sx银行结算管理部(清算中心)
币 种:人民币
金 额(小写):¥20.00 金 额(大写):貳拾元整
备 注:代发单位通过【提款】进行代发工资批次入账
经 办:axs 授 权:
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-707749/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-707749/