package com.app.hxqh.udlld;

import psdi.mbo.MAXTableDomain;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.mbo.MboValue;
import psdi.util.MXApplicationException;
import psdi.util.MXException;

import java.rmi.RemoteException;

/**
 * 领料申请单/退库申请单子表选择实际移动类型
 * edit 20230424
 */
public class FldSjydtype extends MAXTableDomain {

    public FldSjydtype(MboValue mbv) {
        super(mbv);
        String thisAttr = getMboValue().getAttributeName();
        setRelationship("UDSITEYDLX", "");
        String[] FromStr = { "YDLX" };
        String[] ToStr = { thisAttr };
        setLookupKeyMapInOrder(ToStr, FromStr);
    }

    public MboSetRemote getList() throws MXException, RemoteException {
        MboSetRemote set = super.getList();
        MboRemote mbo=getMboValue().getMbo();
        String appName = mbo.getThisMboSet().getApp();
        String userid=mbo.getThisMboSet().getUserInfo().getPersonId();
        String appname=mbo.getString("APPNAME");
        String ORGID=mbo.getString("ORGID");//组织
        String SITEID=mbo.getString("SITEID");//地点
        String KOSTL=mbo.getString("KOSTL");//成本中心
        if(KOSTL==null || "".equalsIgnoreCase(KOSTL)){
            //选择移动类型前，必须先选择成本中心
            throw new MXApplicationException("KOSTL", "KOSTL_YD", new String[]{});//提示消息(请先选择成本中心)
        }
        //领料单
        if("UDLLD".equalsIgnoreCase(appName) || "UDCLLLD".equalsIgnoreCase(appname)) {
            //set.setWhere(" BWART in('Z43','Z57','Z61','Z85') AND SITEID IS null");//原来
            //必须是当前配置上线的移动类型，同时满足该成本中心下对应的移动类型
//            set.setWhere(" SITEID='"+SITEID+"' AND KOSTL ='"+KOSTL+"' AND BWART in(SELECT BWART FROM udcostmove where BWART2 is null AND SITEID IS NULL)");//2024-5-30修改（后续增加其它移动类型只需对UDCOSTMOVE的表进行维护）
            //未增加安全组限制
            set.setWhere(" UDSITEYDLXID IN( SELECT y.UDSITEYDLXID FROM UDCOSTMOVE m right join UDSITEYDLX y on m.siteid=y.siteid and m.BWART=y.ydlx where y.CXYDLX is NULL AND m.SITEID='"+SITEID+"' AND m.KOSTL='"+KOSTL+"' ) ");
//             选择工厂移动类型增加安全组后的条件，待用户测试充分后在发布
//        set.setWhere("UDSITEYDLXID IN( SELECT y.UDSITEYDLXID FROM UDCOSTMOVE m right join UDSITEYDLX y on m.siteid=y.siteid and m.BWART=y.ydlx where y.CXYDLX is NULL AND m.SITEID='"+SITEID+"' AND m.KOSTL='"+KOSTL+"' ) AND UDSITEYDLXID IN(SELECT PARENTID FROM UDSITEYDLXLINE WHERE GROUPNAME IN(SELECT GROUPNAME FROM GROUPUSER WHERE USERID='"+userid+"' ))");
            set.reset();
        }else if("UDTKD".equalsIgnoreCase(appName) || "UDCLTKD".equalsIgnoreCase(appname)){//退库申请单
//            set.setWhere(" BWART2 in(SELECT SJYDTYPE FROM UDLLD WHERE WONUM='"+mbo.getString("YWONUM")+"') ");
//            set.setWhere(" UDCOSTMOVEID IN(SELECT max(UDCOSTMOVEID) FROM UDCOSTMOVE WHERE BWART2 in(SELECT SJYDTYPE FROM UDLLD WHERE WONUM='"+mbo.getString("YWONUM")+"') GROUP BY BWART) ");
            set.setWhere("UDSITEYDLXID IN(SELECT max(UDSITEYDLXID) FROM UDSITEYDLX WHERE CXYDLX in(SELECT SJYDTYPE FROM UDLLD WHERE WONUM='"+mbo.getString("YWONUM")+"') GROUP BY YDLX)");
            set.reset();
        }
        return set;
    }

    @Override
    public void action() throws MXException, RemoteException {
        super.action();
        MboRemote mbo=getMboValue().getMbo();
        String KOSTL = mbo.getString("KOSTL");//成本中心
        String sjydtype = mbo.getString("SJYDTYPE");//实际移动类型
        if("Z57".equalsIgnoreCase(sjydtype)){
            mbo.setFieldFlag("AUFNR", 128L, true);
        }else{
            mbo.setValueNull("AUFNR");
            mbo.setFieldFlag("AUFNR", 128L, false);
        }
    }
}
