$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