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

public class BusinessRequirementUtil {
    
    @Caller
    def caller;

    @Service("BPRequirementRuleService")
    def service;

    def selectedItem;
    def oldReq;

    def getEntity() {
        return caller.entity;
    }

    def fetch() {
        oldReq = entity.requirements;
        def result = service.execute( entity );
        entity.requirements = result.requirements;
        if(oldReq) {
            entity.requirements.each {x->
                def z = oldReq.find{ it.reftype == x.reftype  };
                if(z) x.putAll( z );
            }
        }
        listModel.reload();
    }

    def listModel = [
        fetchList: { o-> 
            return entity.requirements; 
        },
        onOpenItem: { o,col->
           return edit();
        }
    ] as BasicListModel; 
    

    def update_handler;

    def edit() { 
        def item = selectedItem; 
        if ( !item ) return null;

        def default_handler = { o-> 
            item.putAll( o ); 
            listModel.reload(); 
        } 

        def param = [:]; 
        param.info = item; 
        param.handler = ( update_handler ? update_handler : default_handler );  
        return Inv.lookupOpener( "business_application:requirement", param );
    }

    void verify() {
        def info = entity.requirements?.find{( it.completed && !it.refno )} 
        if ( info ) throw new Exception('Please provide a refno for '+ info.title + ' requirement'); 
    } 

    void reset(){
        listModel.reload();
    }
}