import com.rameses.rcp.annotations.*;
import com.rameses.rcp.common.*
import com.rameses.osiris2.client.*
import com.rameses.osiris2.common.*

class RevenueRule {

    @Service("RevenueRuleService")
    def revenueRuleSvc;

    def facts;
    def result;
    boolean cancelled = false;

    def handler = [
        fetchNext:{ newInfos->
            def m = [:];
            m.putAll( this.facts );
            m.infos = newInfos;
            return revenueRuleSvc.assess(m);
        }, 
        completed: { o->
            result  = o;
        },
        cancel: {
            cancelled = true;
        }
    ];

    public def execute(def facts) {
        cancelled = false;
        this.facts = facts;
        def m = [:];
        m.putAll( this.facts );
        def r =  revenueRuleSvc.assess(m);
        if( r.state == 'ask-info' ) {
            Modal.show( "askvariableinfo", [infos: r.infos, handler: handler] ); 
        }
        else {
            result = r;
        }
        if( cancelled ) return null;
        return result;
    }


}