dbauo_task.sru 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. $PBExportHeader$dbauo_task.sru
  2. forward
  3. global type dbauo_task from nonvisualobject
  4. end type
  5. end forward
  6. global type dbauo_task from nonvisualobject
  7. end type
  8. global dbauo_task dbauo_task
  9. type variables
  10. //====================================================================
  11. // 事件: .Declare Instance Variables()
  12. //--------------------------------------------------------------------
  13. // 描述:
  14. //--------------------------------------------------------------------
  15. // 参数:
  16. //--------------------------------------------------------------------
  17. // 返回: (none)
  18. //--------------------------------------------------------------------
  19. // 作者: lwl 日期: 2011年05月20日
  20. //--------------------------------------------------------------------
  21. // LONGJOE
  22. //--------------------------------------------------------------------
  23. // 修改历史:
  24. //
  25. //====================================================================
  26. long ins_scid = 0
  27. long ins_taskid = 0
  28. long ins_mxCnt = 0
  29. decimal ins_sumqty = 0
  30. long ins_level = 0
  31. datetime ins_requiredate
  32. // TODO: 未用到字段
  33. boolean ins_hasOutware = false
  34. boolean ins_isOK = false
  35. boolean ins_hasMoney = false
  36. long ins_priority
  37. dbauo_taskmx ins_mx[]
  38. dbauo_adapter ins_adapter
  39. end variables
  40. forward prototypes
  41. public subroutine f_clear ()
  42. public subroutine f_init (dbauo_adapter arg_adapter, long arg_scid, long arg_taskid, long arg_mxcnt, decimal arg_sumqty, long arg_level, datetime arg_requiredate)
  43. public subroutine f_writelog (string arg_logtext)
  44. end prototypes
  45. public subroutine f_clear ();long ll_i
  46. for ll_i = 1 to upperbound(ins_mx)
  47. destroy ins_mx[ll_i]
  48. next
  49. dbauo_taskmx mx_empty[]
  50. ins_mx = mx_empty
  51. end subroutine
  52. public subroutine f_init (dbauo_adapter arg_adapter, long arg_scid, long arg_taskid, long arg_mxcnt, decimal arg_sumqty, long arg_level, datetime arg_requiredate);ins_adapter = arg_adapter
  53. ins_scid = arg_scid
  54. ins_taskid = arg_taskid
  55. ins_mxCnt = arg_mxCnt
  56. ins_sumqty = arg_sumqty
  57. ins_level = arg_level
  58. ins_requiredate = DateTime(Date(arg_requiredate), Time(0))
  59. Long ll_number
  60. SELECT COUNT(0)
  61. INTO : ll_number
  62. FROM u_outwaremx INNER JOIN
  63. u_outware ON u_outwaremx.scid = u_outware.scid
  64. AND u_outwaremx.outwareid = u_outware.outwareid
  65. WHERE (u_outwaremx.relid = :ins_taskid)
  66. AND (u_outware.billtype = 1)
  67. AND (u_outware.thflag = 0)
  68. AND (u_outwaremx.ifrel = 1)
  69. And (u_outwaremx.scid = :ins_scid);
  70. IF sqlca.SQLCode <> 0 THEN
  71. RETURN
  72. END IF
  73. ins_hasOutware = (ll_number > 0)
  74. //====================================================================
  75. // 查询是否足钱
  76. //====================================================================
  77. Long ll_cusid
  78. SELECT cusid
  79. INTO :ll_cusid
  80. FROM u_SaleTask
  81. WHERE scid = :ins_scid AND
  82. taskid = :ins_taskid;
  83. IF sqlca.SQLCode <> 0 THEN
  84. goto ext_money
  85. END IF
  86. //1.客户订单已分配金额汇总
  87. decimal ld_fpamt
  88. SELECT SUM((takeamt + takedamt) * mrate) AS fpamt
  89. INTO :ld_fpamt
  90. FROM u_SaleTask
  91. WHERE (Status = 1)
  92. and CusID = :ll_cusid;
  93. if sqlca.sqlcode <> 0 then
  94. goto ext_money
  95. end if
  96. //2.结余
  97. decimal ld_sumbalc
  98. SELECT SUM(v_cus_balcamt.cus_balcamt * cw_currency.rate)
  99. AS sumbalc
  100. INTO :ld_sumbalc
  101. FROM v_cus_balcamt INNER JOIN
  102. cw_currency ON v_cus_balcamt.moneyid = cw_currency.moneyid
  103. where v_cus_balcamt.cusid = :ll_cusid;
  104. if sqlca.sqlcode <> 0 then
  105. goto ext_money
  106. end if
  107. //3.已开发货单且财审的金额
  108. decimal ld_sumamt
  109. SELECT SUM(u_outwaremx.price * u_outwaremx.qty) AS sumamt
  110. INTO :ld_sumamt
  111. FROM u_SaleTask INNER JOIN
  112. u_SaleTaskMx ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND
  113. u_SaleTask.scid = u_SaleTaskMx.scid INNER JOIN
  114. u_outwaremx ON u_SaleTaskMx.scid = u_outwaremx.scid AND
  115. u_SaleTaskMx.printid = u_outwaremx.relprintid AND
  116. u_SaleTaskMx.TaskID = u_outwaremx.relid INNER JOIN
  117. u_outware ON u_outwaremx.scid = u_outware.scid AND
  118. u_outwaremx.outwareid = u_outware.outwareid
  119. WHERE (u_SaleTask.Status = 1) AND (u_outware.billtype = 1) AND (u_outware.secflag = 1)
  120. and u_SaleTask.CusID = :ll_cusid;
  121. if sqlca.sqlcode <> 0 then
  122. goto ext_money
  123. end if
  124. //4.客户信用额
  125. decimal ld_maxmtnum
  126. select u_cust.maxmtnum
  127. INTO :ld_maxmtnum
  128. from u_cust
  129. where cusid = :ll_cusid;
  130. if sqlca.sqlcode <> 0 then
  131. goto ext_money
  132. end if
  133. //5.订单应收金额
  134. decimal ld_msttakeamt
  135. select u_saletask.msttakeamt * u_saletask.mrate
  136. INTO :ld_msttakeamt
  137. from u_saletask
  138. where scid = :ins_scid
  139. and taskid = :ins_taskid;
  140. if sqlca.sqlcode <> 0 then
  141. goto ext_money
  142. end if
  143. //6.订单已收金额
  144. decimal ld_takeamt
  145. SELECT (takeamt + takedamt) * mrate
  146. INTO :ld_takeamt
  147. FROM u_SaleTask
  148. where scid = :ins_scid
  149. and taskid = :ins_taskid;
  150. if sqlca.sqlcode <> 0 then
  151. goto ext_money
  152. end if
  153. // 符合以下条件,即足钱
  154. //
  155. // 2.结余 - (1.客户订单已分配金额汇总 + 3.已开发货单且财审的金额) + 4.客户信用额 + 6.订单已收金额 >= 5.订单应收金额
  156. ins_hasMoney = (ld_sumbalc - (ld_fpamt + ld_sumamt) + ld_maxmtnum + ld_takeamt >= ld_msttakeamt)
  157. ext_money:
  158. Long ll_printid, arr_printid[]
  159. Decimal ld_saleqty, arr_saleqty[]
  160. Long ll_mtrlid, arr_mtrlid[]
  161. String ls_mtrlcuscode, arr_mtrlcuscode[], ls_status, arr_status[], ls_pcode, arr_pcode[], ls_woodcode, arr_woodcode[]
  162. Long ll_cnt = 0, ll_i
  163. DECLARE cur1 Cursor FOR SELECT printid, SaleQty - consignedqty - stopqty, mtrlid, mtrlcuscode, status, pcode, woodcode From u_saletaskmx Where scid = :ins_scid And taskid = :ins_taskid Order By printid;
  164. OPEN cur1;
  165. FETCH cur1 Into :ll_printid, :ld_saleqty, :ll_mtrlid, :ls_mtrlcuscode, :ls_status, :ls_pcode, :ls_woodcode;
  166. DO WHILE sqlca.SQLCode = 0
  167. ll_cnt ++
  168. arr_printid[ll_cnt] = ll_printid
  169. arr_saleqty[ll_cnt] = ld_saleqty
  170. arr_mtrlid[ll_cnt] = ll_mtrlid
  171. arr_mtrlcuscode[ll_cnt] = ls_mtrlcuscode
  172. arr_status[ll_cnt] = ls_status
  173. arr_pcode[ll_cnt] = ls_pcode
  174. arr_woodcode[ll_cnt] = ls_woodcode
  175. FETCH cur1 Into :ll_printid, :ld_saleqty, :ll_mtrlid, :ls_mtrlcuscode, :ls_status, :ls_pcode, :ls_woodcode;
  176. LOOP
  177. CLOSE cur1;
  178. f_clear()
  179. ins_isOK = True
  180. FOR ll_i = 1 To ll_cnt
  181. ins_mx[ll_i] = Create dbauo_taskmx
  182. ins_mx[ll_i].f_init(This, arr_printid[ll_i], arr_mtrlid[ll_i], arr_mtrlcuscode[ll_i],arr_status[ll_i],arr_pcode[ll_i],arr_woodcode[ll_i],arr_saleqty[ll_i])
  183. IF ins_mx[ll_i].ins_saleqty <> ins_mx[ll_i].ins_allocqty THEN
  184. ins_isOK = False
  185. END IF
  186. NEXT
  187. end subroutine
  188. public subroutine f_writelog (string arg_logtext);update u_SaleTask set reallocmsg = :arg_logtext where scid = :ins_scid and taskid = :ins_taskid;
  189. end subroutine
  190. on dbauo_task.create
  191. call super::create
  192. TriggerEvent( this, "constructor" )
  193. end on
  194. on dbauo_task.destroy
  195. TriggerEvent( this, "destructor" )
  196. call super::destroy
  197. end on
  198. event destructor;f_clear()
  199. end event