PlanMTDAL.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. using Common.Model;
  2. using CoreEntity.BAL;
  3. using CoreEntity.Entity;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Text;
  9. using ZcPeng.PublicLibrary;
  10. using System.Linq;
  11. namespace CoreEntity.DAL
  12. {
  13. public class PlanMTDAL
  14. {
  15. private const string RULEID = "6wfq837d3f6vfdxd";
  16. public static bool addPayPlan(
  17. string SaleManId,string ContactId,string SuppliersId,
  18. decimal PTaxAmount,string Remark,
  19. string PayType,
  20. List<APGoodsMT> apgoodsmt,
  21. out string result,
  22. string entid,//= PurOrderDAL.ENTID
  23. string orgid,//= PurOrderDAL.ORGID
  24. string depid//= PurOrderDAL.DEPID
  25. ) {
  26. SqlConnection conn = null;
  27. SqlTransaction trans = null;
  28. //如果单据中有已经申请付款的,已经付款的, 返回失败
  29. string BillNos = "";
  30. foreach (APGoodsMT gmt in apgoodsmt)
  31. {
  32. BillNos = BillNos + gmt.BillNo + ",";
  33. }
  34. BillNos = BillNos.Substring(0, BillNos.Length - 1);
  35. DataAccess.GetOneValue("select BillNo from APGoodsMT where IsSettle ='Y' and BIllNo in (" + BillNos + ")", out var obj, out var resultSettle,
  36. conn, trans, true);
  37. DataAccess.GetOneValue("select BillNo from PlanBillDT where RfBIllNo in (" + BillNos + ")", new SqlParameter[] { }, out var objPlan, out var resultPlan,
  38. out conn, out trans, true);
  39. if (obj != null || objPlan != null)
  40. {
  41. result = "已经申请付款的不能重复申请付款";
  42. if (trans != null)
  43. trans.Commit();
  44. if (conn != null)
  45. {
  46. if (conn.State != ConnectionState.Closed)
  47. conn.Close();
  48. }
  49. return false;
  50. }
  51. //初始化明细数据
  52. var i0 = 0;
  53. string billNos = "";
  54. string result1 = "";
  55. foreach (APGoodsMT apgoodsmts in apgoodsmt)
  56. {
  57. if (i0 == apgoodsmt.Count - 1)
  58. billNos = billNos + apgoodsmts.BillNo ;
  59. else
  60. billNos = billNos + apgoodsmts.BillNo + ",";
  61. i0 = i0 + 1;
  62. }
  63. DataTable dt = new DataTable();
  64. var success2 = DataAccess.GetValues("select * from APGoodsDT where BillNo in (" + billNos + ")", ref dt, new SqlParameter[] { }, out result1);
  65. //付款总额:PTaxAmount
  66. PTaxAmount = 0m;
  67. List<APGoodsDT> resultDt = new List<APGoodsDT>();
  68. if (dt != null && dt.Rows.Count > 0)
  69. {
  70. resultDt = (List<APGoodsDT>)ModelConvertHelper<APGoodsDT>.ConvertToModel(dt);
  71. var lookup = resultDt.ToLookup(x => x.BillNo, x => x);
  72. foreach (APGoodsMT apgoodsmts in apgoodsmt)
  73. {
  74. apgoodsmts.GoodsList = new List<APGoodsDT>(5);
  75. if (lookup.Contains(apgoodsmts.BillNo))
  76. {
  77. apgoodsmts.GoodsList.AddRange(lookup[apgoodsmts.BillNo]);
  78. }
  79. PTaxAmount = PTaxAmount + apgoodsmts.TaxAmount;
  80. }
  81. }
  82. string BillNo = "";
  83. string BillCode = "";
  84. var PlanBillNo = IDHelper.GetRecNo();
  85. BillNo = PlanBillNo.ToString() ;
  86. if (PlanBillNo == 0)
  87. {
  88. result = "获取billno失败";
  89. return false;
  90. }
  91. //生成billcode
  92. var PlanBillCodeNo = IDHelper.GetPlanBillCodeRecNo(entid);
  93. if (PlanBillCodeNo == 0)
  94. {
  95. result = "获取billcode失败";
  96. return false;
  97. }
  98. //取ordercode
  99. string orderNo = PlanBillCodeNo.ToString();
  100. StringBuilder sb = new StringBuilder("");
  101. if (orderNo.Length < 8)
  102. {
  103. for (int ik = 0; ik < (8 - orderNo.Length); ik++)
  104. {
  105. sb.Append('0');
  106. }
  107. sb.Append(orderNo);
  108. }
  109. string orgno = OrgDAL.GetOrgNo(orgid,entid);
  110. BillCode = "PJH" + orgno//机构标识
  111. + sb.ToString();
  112. #region 添加计划汇总
  113. string commandText = "INSERT INTO PlanMT (BillNo,EntId,BillCode,RuleId,PayOrgId,OrgId,DeptId," +
  114. "SaleManId,caozy,Dates,OnTime,SysDates,RfId,RfType," +
  115. "PTaxAmount,PayDdate,PlanPayType,IsEnd,IsSettle,jiesje,Summaries," +
  116. "Remark,BillState,PayType,K_IsXTBill)"
  117. + " VALUES (@BillNo,@EntId,@BillCode,@RuleId,@PayOrgId,@OrgId,@DeptId," +
  118. "@SaleManId,@caozy,@Dates,@OnTime,@SysDates,@RfId,@RfType," +
  119. "@PTaxAmount,@PayDdate,@PlanPayType,@IsEnd,@IsSettle,@jiesje,@Summaries," +
  120. "@Remark,@BillState,@PayType,@K_IsXTBill)";
  121. List<DataAccessCommand> list = new List<DataAccessCommand>(1+ apgoodsmt.Count * 8);
  122. //准备参数
  123. List<SqlParameter> parameters = new List<SqlParameter>();
  124. parameters.Add(new SqlParameter ("@BillNo", BillNo));
  125. parameters.Add(new SqlParameter ("@EntId", entid));
  126. parameters.Add(new SqlParameter ("@BillCode", BillCode));
  127. parameters.Add(new SqlParameter ("@RuleId", RULEID));
  128. parameters.Add(new SqlParameter ("@PayOrgId", orgid));
  129. parameters.Add(new SqlParameter ("@OrgId", orgid));
  130. parameters.Add(new SqlParameter ("@DeptId", depid));
  131. parameters.Add(new SqlParameter ("@SaleManId", SaleManId));//SysContextToken.CurrentEmployeeID
  132. parameters.Add(new SqlParameter ("@caozy", SaleManId));//SysContextToken.CurrentUserID
  133. parameters.Add(new SqlParameter ("@Dates", DateTime.Now.ToString("yyyy-MM-dd")));
  134. parameters.Add(new SqlParameter ("@OnTime", DateTime.Now.ToString("T")));
  135. parameters.Add(new SqlParameter ("@SysDates", DateTime.Now.ToString("yyyy-MM-dd")));
  136. parameters.Add(new SqlParameter ("@RfId", SuppliersId));//对应供应商Id
  137. parameters.Add(new SqlParameter ("@RfType", '0'));
  138. parameters.Add(new SqlParameter ("@PTaxAmount", PTaxAmount));
  139. parameters.Add(new SqlParameter ("@PayDdate", ""));
  140. var PlanPayType = new SqlParameter("@PlanPayType", SqlDbType.Int);
  141. PlanPayType.Value = 0;
  142. parameters.Add(PlanPayType);
  143. parameters.Add(new SqlParameter ("@IsEnd", 'N'));
  144. parameters.Add(new SqlParameter ("@IsSettle", 'N'));
  145. var jiesje = new SqlParameter("@jiesje", SqlDbType.Decimal);
  146. jiesje.Value = 0;
  147. parameters.Add(jiesje);
  148. parameters.Add(new SqlParameter ("@Summaries", "采购付款计划"));
  149. parameters.Add(new SqlParameter ("@Remark", Remark));
  150. var BillState = new SqlParameter("@BillState", SqlDbType.Int);
  151. BillState.Value = 0;
  152. parameters.Add(BillState);
  153. parameters.Add(new SqlParameter ("@PayType", PayType));
  154. parameters.Add(new SqlParameter("@K_IsXTBill", 'Y'));
  155. //int success = DataAccess.ExecuteCommand(commandText, parameters, out result);
  156. list.Add(new DataAccessCommand(commandText, parameters, CommandType.Text, true));
  157. #endregion
  158. int i = 1;
  159. int j = 1;
  160. foreach (APGoodsMT gmt in apgoodsmt) {
  161. #region 添加计划单据
  162. string commandTextBill = "INSERT INTO PlanBillDT (BillNo,EntId,BillSn,BillSort,RfBillNo,TaxAmount,PtaxAmount," +
  163. "PayDDate,IsSettle,jiesje,Remark" +
  164. ")"
  165. + " VALUES (@BillNo,@EntId,@BillSn,@BillSort,@RfBillNo,@TaxAmount,@PtaxAmount," +
  166. "@PayDDate,@IsSettle,@jiesje,@Remark)";
  167. //string resultBill;
  168. //准备参数
  169. List<SqlParameter> parametersBill = new List<SqlParameter>();
  170. parametersBill.Add(new SqlParameter ("@BillNo", BillNo));
  171. parametersBill.Add(new SqlParameter ("@EntId", entid));
  172. parametersBill.Add(new SqlParameter ("@BillSn", i));
  173. parametersBill.Add(new SqlParameter ("@BillSort", i));
  174. parametersBill.Add(new SqlParameter ("@RfBillNo", gmt.BillNo));
  175. parametersBill.Add(new SqlParameter ("@TaxAmount", gmt.TaxAmount));
  176. parametersBill.Add(new SqlParameter ("@PtaxAmount", gmt.TaxAmount));
  177. parametersBill.Add(new SqlParameter ("@PayDDate", ""));
  178. parametersBill.Add(new SqlParameter ("@IsSettle", 'N'));
  179. var jiesjeBill = new SqlParameter("@jiesje", SqlDbType.Decimal);
  180. jiesjeBill.Value = 0;
  181. parametersBill.Add(jiesjeBill);
  182. parametersBill.Add(new SqlParameter ("@Remark", gmt.Remark == null ? "" : gmt.Remark));
  183. //int successBill = DataAccess.ExecuteCommand(commandTextBill, parametersBill, out result);
  184. list.Add(new DataAccessCommand(commandTextBill, parametersBill, CommandType.Text, true));
  185. i = i + 1;
  186. #endregion
  187. foreach (APGoodsDT gdt in gmt.GoodsList)
  188. {
  189. #region 添加计划商品明细
  190. string commandTextDT = "INSERT INTO PlanGoodsDT (BillNo,EntId,BillSn,BillSort,RfBillNo,RfBillSn,TaxAmount,PtaxAmount," +
  191. "PayDDate,IsSettle,jiesje,Remark" +
  192. ")"
  193. + " VALUES (@BillNo,@EntId,@BillSn,@BillSort,@RfBillNo,@RfBillSn,@TaxAmount,@PtaxAmount," +
  194. "@PayDDate,@IsSettle,@jiesje,@Remark)";
  195. //string result;
  196. //准备参数
  197. List<SqlParameter> parametersDT = new List<SqlParameter>();
  198. parametersDT.Add(new SqlParameter("@BillNo", BillNo));
  199. parametersDT.Add(new SqlParameter("@EntId", entid));
  200. parametersDT.Add(new SqlParameter("@BillSn", j));
  201. parametersDT.Add(new SqlParameter("@BillSort", j));
  202. parametersDT.Add(new SqlParameter("@RfBillNo", gdt.BillNo));
  203. parametersDT.Add(new SqlParameter("@RfBillSn", gdt.BillSn));
  204. parametersDT.Add(new SqlParameter("@TaxAmount", gdt.TaxAmount));
  205. parametersDT.Add(new SqlParameter("@PtaxAmount", gdt.TaxAmount));//分批 结算金额
  206. parametersDT.Add(new SqlParameter("@PayDDate", ""));
  207. parametersDT.Add(new SqlParameter("@IsSettle", 'N'));
  208. var jiesjeDT = new SqlParameter("@jiesje", SqlDbType.Decimal);
  209. jiesjeDT.Value = 0;
  210. parametersDT.Add(jiesjeDT);
  211. parametersDT.Add(new SqlParameter("@Remark", gdt.Remark==null?"": gdt.Remark));
  212. //int success = DataAccess.ExecuteCommand(commandTextDT, parametersDTDT, out result);
  213. list.Add(new DataAccessCommand(commandTextDT, parametersDT, CommandType.Text, true));
  214. j = j + 1;
  215. #endregion
  216. }
  217. #region 回写计划金额到应付单据
  218. string commandTextMT = "Update APGoodsMT set K_IsApplyP = 'Y',PtaxAmount=@PtaxAmount " +
  219. " Where BillNo=@BillNo ;";
  220. #endregion
  221. List<SqlParameter> parametersMT = new List<SqlParameter>();
  222. parametersMT.Add(new SqlParameter("BillNo", gmt.BillNo));
  223. parametersMT.Add(new SqlParameter("PtaxAmount", gmt.TaxAmount));
  224. list.Add(new DataAccessCommand(commandTextMT, parametersMT, CommandType.Text, true));
  225. }
  226. bool success = DataAccess.ExecuteBatchCommands(list, out result,conn,trans);
  227. return success;
  228. }
  229. }
  230. }