123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- $PBExportHeader$dbauo_task.sru
- forward
- global type dbauo_task from nonvisualobject
- end type
- end forward
- global type dbauo_task from nonvisualobject
- end type
- global dbauo_task dbauo_task
- type variables
- //====================================================================
- // 事件: .Declare Instance Variables()
- //--------------------------------------------------------------------
- // 描述:
- //--------------------------------------------------------------------
- // 参数:
- //--------------------------------------------------------------------
- // 返回: (none)
- //--------------------------------------------------------------------
- // 作者: lwl 日期: 2011年05月20日
- //--------------------------------------------------------------------
- // LONGJOE
- //--------------------------------------------------------------------
- // 修改历史:
- //
- //====================================================================
- long ins_scid = 0
- long ins_taskid = 0
- long ins_mxCnt = 0
- decimal ins_sumqty = 0
- long ins_level = 0
- datetime ins_requiredate
- // TODO: 未用到字段
- boolean ins_hasOutware = false
- boolean ins_isOK = false
- boolean ins_hasMoney = false
- long ins_priority
- dbauo_taskmx ins_mx[]
- dbauo_adapter ins_adapter
- end variables
- forward prototypes
- public subroutine f_clear ()
- 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)
- public subroutine f_writelog (string arg_logtext)
- end prototypes
- public subroutine f_clear ();long ll_i
- for ll_i = 1 to upperbound(ins_mx)
- destroy ins_mx[ll_i]
- next
- dbauo_taskmx mx_empty[]
- ins_mx = mx_empty
- end subroutine
- 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
- ins_scid = arg_scid
- ins_taskid = arg_taskid
- ins_mxCnt = arg_mxCnt
- ins_sumqty = arg_sumqty
- ins_level = arg_level
- ins_requiredate = DateTime(Date(arg_requiredate), Time(0))
- Long ll_number
- SELECT COUNT(0)
- INTO : ll_number
- FROM u_outwaremx INNER JOIN
- u_outware ON u_outwaremx.scid = u_outware.scid
- AND u_outwaremx.outwareid = u_outware.outwareid
- WHERE (u_outwaremx.relid = :ins_taskid)
- AND (u_outware.billtype = 1)
- AND (u_outware.thflag = 0)
- AND (u_outwaremx.ifrel = 1)
- And (u_outwaremx.scid = :ins_scid);
- IF sqlca.SQLCode <> 0 THEN
- RETURN
- END IF
- ins_hasOutware = (ll_number > 0)
- //====================================================================
- // 查询是否足钱
- //====================================================================
- Long ll_cusid
- SELECT cusid
- INTO :ll_cusid
- FROM u_SaleTask
- WHERE scid = :ins_scid AND
- taskid = :ins_taskid;
- IF sqlca.SQLCode <> 0 THEN
- goto ext_money
- END IF
- //1.客户订单已分配金额汇总
- decimal ld_fpamt
- SELECT SUM((takeamt + takedamt) * mrate) AS fpamt
- INTO :ld_fpamt
- FROM u_SaleTask
- WHERE (Status = 1)
- and CusID = :ll_cusid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- //2.结余
- decimal ld_sumbalc
- SELECT SUM(v_cus_balcamt.cus_balcamt * cw_currency.rate)
- AS sumbalc
- INTO :ld_sumbalc
- FROM v_cus_balcamt INNER JOIN
- cw_currency ON v_cus_balcamt.moneyid = cw_currency.moneyid
- where v_cus_balcamt.cusid = :ll_cusid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- //3.已开发货单且财审的金额
- decimal ld_sumamt
- SELECT SUM(u_outwaremx.price * u_outwaremx.qty) AS sumamt
- INTO :ld_sumamt
- FROM u_SaleTask INNER JOIN
- u_SaleTaskMx ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND
- u_SaleTask.scid = u_SaleTaskMx.scid INNER JOIN
- u_outwaremx ON u_SaleTaskMx.scid = u_outwaremx.scid AND
- u_SaleTaskMx.printid = u_outwaremx.relprintid AND
- u_SaleTaskMx.TaskID = u_outwaremx.relid INNER JOIN
- u_outware ON u_outwaremx.scid = u_outware.scid AND
- u_outwaremx.outwareid = u_outware.outwareid
- WHERE (u_SaleTask.Status = 1) AND (u_outware.billtype = 1) AND (u_outware.secflag = 1)
- and u_SaleTask.CusID = :ll_cusid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- //4.客户信用额
- decimal ld_maxmtnum
- select u_cust.maxmtnum
- INTO :ld_maxmtnum
- from u_cust
- where cusid = :ll_cusid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- //5.订单应收金额
- decimal ld_msttakeamt
- select u_saletask.msttakeamt * u_saletask.mrate
- INTO :ld_msttakeamt
- from u_saletask
- where scid = :ins_scid
- and taskid = :ins_taskid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- //6.订单已收金额
- decimal ld_takeamt
- SELECT (takeamt + takedamt) * mrate
- INTO :ld_takeamt
- FROM u_SaleTask
- where scid = :ins_scid
- and taskid = :ins_taskid;
- if sqlca.sqlcode <> 0 then
- goto ext_money
- end if
- // 符合以下条件,即足钱
- //
- // 2.结余 - (1.客户订单已分配金额汇总 + 3.已开发货单且财审的金额) + 4.客户信用额 + 6.订单已收金额 >= 5.订单应收金额
- ins_hasMoney = (ld_sumbalc - (ld_fpamt + ld_sumamt) + ld_maxmtnum + ld_takeamt >= ld_msttakeamt)
- ext_money:
- Long ll_printid, arr_printid[]
- Decimal ld_saleqty, arr_saleqty[]
- Long ll_mtrlid, arr_mtrlid[]
- String ls_mtrlcuscode, arr_mtrlcuscode[], ls_status, arr_status[], ls_pcode, arr_pcode[], ls_woodcode, arr_woodcode[]
- Long ll_cnt = 0, ll_i
- 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;
- OPEN cur1;
- FETCH cur1 Into :ll_printid, :ld_saleqty, :ll_mtrlid, :ls_mtrlcuscode, :ls_status, :ls_pcode, :ls_woodcode;
- DO WHILE sqlca.SQLCode = 0
- ll_cnt ++
- arr_printid[ll_cnt] = ll_printid
- arr_saleqty[ll_cnt] = ld_saleqty
- arr_mtrlid[ll_cnt] = ll_mtrlid
- arr_mtrlcuscode[ll_cnt] = ls_mtrlcuscode
- arr_status[ll_cnt] = ls_status
- arr_pcode[ll_cnt] = ls_pcode
- arr_woodcode[ll_cnt] = ls_woodcode
- FETCH cur1 Into :ll_printid, :ld_saleqty, :ll_mtrlid, :ls_mtrlcuscode, :ls_status, :ls_pcode, :ls_woodcode;
- LOOP
- CLOSE cur1;
- f_clear()
- ins_isOK = True
- FOR ll_i = 1 To ll_cnt
- ins_mx[ll_i] = Create dbauo_taskmx
- 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])
- IF ins_mx[ll_i].ins_saleqty <> ins_mx[ll_i].ins_allocqty THEN
- ins_isOK = False
- END IF
- NEXT
- end subroutine
- public subroutine f_writelog (string arg_logtext);update u_SaleTask set reallocmsg = :arg_logtext where scid = :ins_scid and taskid = :ins_taskid;
- end subroutine
- on dbauo_task.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on dbauo_task.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event destructor;f_clear()
- end event
|