public string GenerateFormAndReturnError(int i, DataRow row, LogDS.ImportFormLogDetailRow logDetailRow) { SqlTransaction transaction = null; string errorInfor = string.Empty; try { FormTableAdapter TAForm = new FormTableAdapter(); FormSaleSettlementTableAdapter TAFormSettlement = new FormSaleSettlementTableAdapter(); FormSalePaymentTableAdapter TASalePayment = new FormSalePaymentTableAdapter(); FormSalePaymentDetailTableAdapter TASalePaymentDetail = new FormSalePaymentDetailTableAdapter(); FormSettlementExpenseDetailTableAdapter TAFormSettlementExpenseDetail = new FormSettlementExpenseDetailTableAdapter(); transaction = TableAdapterHelper.BeginTransaction(TAForm); TableAdapterHelper.SetTransaction(TASalePayment, transaction); TableAdapterHelper.SetTransaction(TASalePaymentDetail, transaction); FormDS.FormDataTable tbForm = new FormDS.FormDataTable(); FormDS.FormSalePaymentDataTable tbPayment = new FormDS.FormSalePaymentDataTable(); FormDS.FormSalePaymentDetailDataTable tbPaymentDetail = new FormDS.FormSalePaymentDetailDataTable(); FormDS.FormRow rowForm = null; FormDS.FormSalePaymentRow rowPayment = null; FormDS.FormSalePaymentDetailRow rowPaymentDetail = null; string settlementFormNo = string.Empty; DateTime SubmitDate = DateTime.Now; decimal PaymentAmount = 0; bool IsValid = true; if (CheckData(row) != null) { errorInfor = "第" + (i + 1) + "行有错:" + CheckData(row); IsValid = false; } else { settlementFormNo = row[0].ToString().Trim(); SubmitDate = DateTime.Parse(row[1].ToString()); PaymentAmount = decimal.Parse(row[2].ToString().Trim()); logDetailRow.SettlementFormNo = settlementFormNo; logDetailRow.PaymentAmount = PaymentAmount; FormDS.FormDataTable tbSettlement = TAForm.GetDataByFormNo(settlementFormNo); if (tbSettlement.Rows.Count <= 0) { errorInfor = "第" + (i + 1) + "行有错:系统中找不到结案单《" + settlementFormNo + "》"; IsValid = false; } FormDS.FormRow settlementForm = tbSettlement[0]; FormDS.FormSaleSettlementRow rowSettlement = TAFormSettlement.GetDataByID(settlementForm.FormID)[0]; if (rowSettlement.PaymentTypeID != 2 && rowSettlement.PaymentTypeID != 5) { errorInfor = "第" + (i + 1) + "行有错:该单据支付方式,不是票扣或者调整因子《" + settlementFormNo + "》"; IsValid = false; } if (rowSettlement.IsClose) { errorInfor = "第" + (i + 1) + "行有错:该单据已标记为支付完成《" + settlementFormNo + "》"; IsValid = false; } if (rowSettlement.PaymentTypeID == 2 && PaymentAmount > rowSettlement.AmountRMB) { errorInfor = "第" + (i + 1) + "行有错:支付金额超过结案金额《" + settlementFormNo + "》"; IsValid = false; } if (IsValid) { //生成单据 rowForm = tbForm.NewFormRow(); rowPayment = tbPayment.NewFormSalePaymentRow(); //生成Form rowForm.SetRejectedFormIDNull(); //申请人取结案单申请人 rowForm.UserID = settlementForm.UserID; UtilityBLL utility = new UtilityBLL(); rowForm.FormNo = utility.GetFormNo(utility.GetFormTypeString((int)SystemEnums.FormType.SalePayment)); rowForm.SetProxyUserIDNull(); rowForm.SetProxyPositionIDNull(); //申请人部门取结案单申请人所在部门 rowForm.OrganizationUnitID = settlementForm.OrganizationUnitID; rowForm.PositionID = settlementForm.PositionID; rowForm.FormTypeID = (int)SystemEnums.FormType.SalePayment; rowForm.StatusID = (int)SystemEnums.FormStatus.ApproveCompleted; rowForm.SubmitDate = SubmitDate; rowForm.LastModified = SubmitDate; rowForm.InTurnUserIds = "P";//待改动 rowForm.InTurnPositionIds = "P";//待改动 rowForm.PageType = (int)SystemEnums.PageType.PaymentCash; rowForm.CostCenterID = settlementForm.CostCenterID; rowForm.ApprovedDate = SubmitDate; //是否创建凭证? rowForm.IsCreateVoucher = false; rowForm.IsExportLock = false; rowForm.IsCompletePayment = false; rowForm.IsInvoiceReturned = false; tbForm.AddFormRow(rowForm); TAForm.Update(rowForm); //生成FormPayment rowPayment.FormSalePaymentID = rowForm.FormID; rowPayment.FormSaleSettlementID = settlementForm.FormID; //生成时,不考虑预付款 rowPayment.SetFormSaleApplyIDNull(); rowPayment.InvoiceStatusID = (int)SystemEnums.InvoiceStatus.No; rowPayment.PaymentTypeID = rowSettlement.PaymentTypeID; //报销申请单备注 rowPayment.Remark = "此单据为自动生成单据。"; rowPayment.SetAttachedFileNameNull(); rowPayment.SetRealAttachedFileNameNull(); //报销金额 rowPayment.AmountRMB = PaymentAmount; rowPayment.VatTypeID = 1; rowPayment.AmountBeforeTax = rowPayment.AmountRMB; rowPayment.TaxAmount = 0; rowPayment.IsAdvanced = false; //VendorID设置什么值 rowPayment.SetVendorIDNull(); tbPayment.AddFormSalePaymentRow(rowPayment); TASalePayment.Update(rowPayment); //生成FormPaymentDetail decimal UsedAmount = 0; FormDS.FormSettlementExpenseDetailDataTable tbSettlementExpenseDetail = TAFormSettlementExpenseDetail.GetDataByFormSaleSettlementID(rowSettlement.FormSaleSettlementID); FormDS.FormSettlementExpenseDetailRow rowSettlementExpenseDetail = null; for (int j = 0; j < tbSettlementExpenseDetail.Rows.Count; j++) { rowSettlementExpenseDetail = (FormDS.FormSettlementExpenseDetailRow)tbSettlementExpenseDetail.Rows[j]; rowPaymentDetail = tbPaymentDetail.NewFormSalePaymentDetailRow(); rowPaymentDetail.FormSalePaymentID = rowPayment.FormSalePaymentID; rowPaymentDetail.FormSaleApplyID = rowSettlementExpenseDetail.FormSaleApplyID; rowPaymentDetail.FormSaleExpenseDetailID = rowSettlementExpenseDetail.FormSaleExpenseDetailID; rowPaymentDetail.ApplyFormNo = rowSettlementExpenseDetail.ApplyFormNo; rowPaymentDetail.ApplyPeriod = rowSettlementExpenseDetail.ApplyPeriod; rowPaymentDetail.ApplyProjectName = rowSettlementExpenseDetail.ApplyProjectName; rowPaymentDetail.ExpenseItemID = rowSettlementExpenseDetail.ExpenseItemID; if (!rowSettlementExpenseDetail.IsShopNameNull()) { rowPaymentDetail.ShopName = rowSettlementExpenseDetail.ShopName; } rowPaymentDetail.SKUID = rowSettlementExpenseDetail.SKUID; rowPaymentDetail.ApplyAmount = rowSettlementExpenseDetail.ApplyAmount; rowPaymentDetail.ApplyAmountRMB = rowSettlementExpenseDetail.ApplyAmountRMB; rowPaymentDetail.SettlementAmount = rowSettlementExpenseDetail.AmountRMB; rowPaymentDetail.TaxAmount = 0; //待改动 if (j == tbSettlementExpenseDetail.Rows.Count - 1) { rowPaymentDetail.AmountRMB = PaymentAmount - UsedAmount; rowPaymentDetail.AmountBeforeTax = rowPaymentDetail.AmountRMB; rowPaymentDetail.TaxAmount = rowPaymentDetail.TaxAmount; rowPaymentDetail.PayedAmount = 0; rowPaymentDetail.RemainAmount = 0; UsedAmount += rowPaymentDetail.AmountRMB; } else { rowPaymentDetail.AmountRMB = decimal.Round((rowSettlementExpenseDetail.AmountRMB / rowSettlement.AmountRMB) * PaymentAmount, 2); rowPaymentDetail.AmountBeforeTax = rowPaymentDetail.AmountRMB; rowPaymentDetail.TaxAmount = 0; rowPaymentDetail.PayedAmount = 0; rowPaymentDetail.RemainAmount = 0; UsedAmount += rowPaymentDetail.AmountRMB; } tbPaymentDetail.AddFormSalePaymentDetailRow(rowPaymentDetail); TASalePaymentDetail.Update(tbPaymentDetail); } logDetailRow.PaymentFormNo = rowForm.FormNo; } } transaction.Commit(); } catch (Exception e) { transaction.Rollback(); errorInfor = e.Message.ToString(); } finally { transaction.Dispose(); } return errorInfor; }
/// <summary> /// 销售 /// </summary> /// <param name="FormID"></param> /// <returns></returns> private bool ExportSaleDataByFormID(int FormID, int logId) { ExportDataDS.ExportDataDataTable l_dtExportData = new ExportDataDS.ExportDataDataTable(); FormDS.FormSalePaymentRow l_drFormSalePayment = new FormDS.FormSalePaymentDataTable().NewFormSalePaymentRow(); FormMarketingBLL formmarkbll = new FormMarketingBLL(); FormTEBLL formtebll = new FormTEBLL(); FormSaleBLL formsalebll = new FormSaleBLL(); MasterDataBLL masterdatabll = new MasterDataBLL(); FormPurchaseBLL formPurchaseBLL = new FormPurchaseBLL(); int Count = 0; FormDS.FormDataTable l_dtform = formmarkbll.GetFormByID(FormID); FormDS.FormRow l_drform = l_dtform.NewFormRow(); try { if (l_dtform.Rows.Count > 0) { l_drform = l_dtform[0]; if (l_drform.IsFinanceRemarkNull()) { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:财务摘要为空,导出失败!"); return false; } l_drFormSalePayment = formsalebll.GetFormSalePaymentByID(l_drform.FormID); //if (l_drFormSalePayment.PaymentTypeID == (int)SystemEnums.PaymentType.FreeGoods) //{ // logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:货补的数据不导出!"); // return false; //} //if (l_drFormSalePayment.PaymentTypeID == (int)SystemEnums.PaymentType.Transfer) //{ // logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:帐扣的数据不导入!"); // return false; //} //if (l_drFormSalePayment.PaymentTypeID == (int)SystemEnums.PaymentType.PiaoKou) //{ // logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:票扣的数据不导入!"); // return false; //} //if (l_drFormSalePayment.PaymentTypeID == 5) //{ // logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:调整因子的数据不导入!"); // return false; //} FormDS.FormSalePaymentDetailDataTable l_dtFormSalePaymentDetail = formsalebll.GetFormSalePaymentDetailByPaymentID(FormID); for (int i = 0; i < l_dtFormSalePaymentDetail.Rows.Count; i++) { if (l_dtFormSalePaymentDetail[i].AmountRMB == Decimal.Zero) { Count++; continue; } //PurchaseDS.FormInvoiceDataTable l_dtFormInvoice = formPurchaseBLL.GetFormInvoiceByFormID(FormID); ExportDataDS.ExportDataRow l_drExportData = l_dtExportData.NewExportDataRow(); l_drExportData.FormID = FormID; l_drExportData.CompanyCode = l_drExportData.CompanyCode = masterdatabll.GetCompanyById(masterdatabll.GetVendorTypeById(masterdatabll.GetVendorByID(l_drFormSalePayment.VendorID).VendorTypeID).CompanyID).CompanyCode; l_drExportData.VendorCode = masterdatabll.GetVendorByID(l_drFormSalePayment.VendorID).VendorCode; if (l_drExportData.IsVendorCodeNull() || string.IsNullOrEmpty(l_drExportData.VendorCode)) { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:Vendor Code为空,无法导出!"); return false; } //发票号码改为单据编号,单据编号变为10位 l_drExportData.Invoice = l_drform.FormNo; l_drExportData.Invoicedate = l_drform.SubmitDate.ToString("yyyyMMdd"); //if (l_dtFormInvoice.Rows.Count > 1) // l_drExportData.Reference = l_dtFormInvoice[1].InvoiceNo; //if (l_dtFormInvoice.Rows.Count > 0) { // l_drExportData.Invoice = l_dtFormInvoice[0].InvoiceNo; // l_drExportData.Invoicedate = l_dtFormInvoice[0].InvoiceDate.ToString("yyyyMMdd"); //} else { // l_drExportData.Invoice = l_drform.FormNo; // l_drExportData.Invoicedate = l_drform.SubmitDate.ToString("yyyyMMdd"); //} l_drExportData.TotalMoney = l_drFormSalePayment.AmountBeforeTax; //l_drExportData.Currency = masterdatabll.GetCurrencyByID(formsalebll.GetFormSaleApplyByID(l_dtFormSalePaymentDetail[i].FormSaleApplyID)[0].CurrencyID).CurrencyShortName; //l_drExportData.ExchangeRate = formsalebll.GetFormSaleApplyByID(l_dtFormSalePaymentDetail[i].FormSaleApplyID)[0].ExchangeRate; l_drExportData.ManageExpenseItem = masterdatabll.GetExpenseItemById(l_dtFormSalePaymentDetail[i].ExpenseItemID).ExpenseItemName; //profit center取AccrualCode,如果没有报错 if (masterdatabll.GetCostCenterById(l_drform.CostCenterID).IsAccrualCodeNull()) { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:Profit Center Accrual Code为空,无法导出!"); return false; } else { l_drExportData.CostCenter = masterdatabll.GetCostCenterById(l_drform.CostCenterID).AccrualCode; } if (l_dtFormSalePaymentDetail[i].ApplyPeriod.AddMonths(5).Year == l_drform.SubmitDate.AddMonths(5).Year) l_drExportData.AccountCode = masterdatabll.GetExpenseItemById(l_dtFormSalePaymentDetail[i].ExpenseItemID).AccrualAccountingCode; else l_drExportData.AccountCode = masterdatabll.GetExpenseItemById(l_dtFormSalePaymentDetail[i].ExpenseItemID).LastAccountingCode; l_drExportData.DetailMoney = l_dtFormSalePaymentDetail[i].AmountBeforeTax; //PO No 变为取报销单的PO的No if (l_drFormSalePayment.IsFormPOIDNull()) { //PurchaseDS.FormPODataTable formPO = formPurchaseBLL.GetFormPOByParentFormID(l_dtFormSalePaymentDetail[i].FormSaleApplyID); //if (formPO.Rows.Count > 0) { // l_drExportData.PONumber = formPO[0].BPCSPONo; // PurchaseDS.FormPODetailDataTable formPODetail = formPurchaseBLL.GetPODetailByFormPOID(formPO[0].FormPOID); // l_drExportData.POLineNumber = formPODetail.Rows.Count.ToString(); //} else { l_drExportData.PONumber = 0; l_drExportData.POLineNumber = "0"; //} } else { //若已选PO,取所选PO信息 PurchaseDS.FormPORow formPO = formPurchaseBLL.GetFormPOByID(l_drFormSalePayment.FormPOID); PurchaseDS.FormPODetailDataTable formPODetail = formPurchaseBLL.GetPODetailByFormPOID(l_drFormSalePayment.FormPOID); l_drExportData.PONumber = formPO.BPCSPONo; l_drExportData.POLineNumber = formPODetail.Count.ToString(); } l_drExportData.FormNo = l_drform.FormNo; l_drExportData.FinanceRemark = l_drform.FinanceRemark; l_drExportData.TaxRateCode = masterdatabll.GetVatTypeById(l_drFormSalePayment.VatTypeID)[0].VatTypeName; l_drExportData.TaxAmt = l_dtFormSalePaymentDetail[i].TaxAmount; l_dtExportData.AddExportDataRow(l_drExportData); Count++; } if (l_dtExportData.Rows.Count == 0) { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:无明细数据,无法导出!"); return false; } if (l_dtFormSalePaymentDetail.Rows.Count == Count) ExportByFormView(l_dtExportData); else { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:明细数据数量不一致,无法导出!"); return false; } } } catch (Exception e) { logbll.InsertExportLogDetail(logId, "单据编号:" + l_drform.FormNo + ",提交人:" + new StuffUserBLL().GetStuffUserById(l_drform.UserID)[0].StuffName + ",错误信息:" + e.Message); return false; } return true; }