package com.app.hxqh.udRecovery;

import psdi.mbo.Mbo;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSet;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXApplicationException;
import psdi.util.MXException;

import java.rmi.RemoteException;
import java.util.Date;

/**
 * 旧件回收-Mbo
 * createby liuxq  2023-6-15
 */
public class UdRecoveryMbo extends Mbo implements MboRemote {

    public UdRecoveryMbo(MboSet ms) throws MXException, RemoteException {
        super(ms);
    }

    @Override
    public void add() throws MXException, RemoteException {
        super.add();
        String SITEID = getString("SITEID");//工厂
        String app = getThisMboSet().getApp();
        String userid = getUserInfo().getPersonId();
        MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
        MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());//车间/部门、、
        MboSetRemote deptZHSet = MXServer.getMXServer().getMboSet("L_DEPT",MXServer.getMXServer().getSystemUserInfo());//车间/部门
        personSet.setWhere("personid='"+userid+"'");
        personSet.reset();
        String displayname = "";
        String department = "";
        Integer deptid = null;
        String deptName = "";
        if(personSet!=null && !personSet.isEmpty()){
            MboRemote personMbo = personSet.getMbo(0);
            displayname = personMbo.getString("DISPLAYNAME");
            department = personMbo.getString("DEPARTMENT");
        }
        deptSet.setWhere("deptnum='"+department+"'");
        deptSet.reset();
        if(deptSet!=null && !deptSet.isEmpty()){
            MboRemote deptMbo = deptSet.getMbo(0);
            deptid =  deptMbo.getInt("DEPTID");
        }
        deptZHSet.setWhere("ownerid="+deptid+"");
        deptZHSet.reset();
        if(deptZHSet!=null && !deptZHSet.isEmpty()){
            MboRemote deptZHMbo = deptZHSet.getMbo(0);
            deptName = deptZHMbo.getString("DESCRIPTION");
        }
        String DESCRIPTION = "JJHS" +"-" + SITEID + "-" + deptName + "-" + displayname;
        setValue("DESCRIPTION",DESCRIPTION,2L);//自动生成描述
        setValue("RCNUM","JJHS"+this.getInt("UDRECOVERYID"),2L);//自动生成单号：JJHS+表ID
    }

    @Override
    public void init() throws MXException {
        super.init();
        try {
            String status=getString("STATUS");
            String createby=getString("CREATEBY");
            String username=getThisMboSet().getUserName();
            if(!isNew()){
                if(createby.equalsIgnoreCase(username)){
                    if("EDIT".equalsIgnoreCase(status) || "CANCEL".equalsIgnoreCase(status) || "".equalsIgnoreCase(status)){
                        setFieldFlag("WONUM",7L,true);//领料单
                        boolean iscan=getBoolean("ISCANCEL");
                        if(iscan){
                            setFieldFlag("CANCELRESON", 128L, true);
                        }else{
                            setFieldFlag("CANCELRESON", 128L, false);
                        }
                    }else{
                        getMboSet("UDRECOVERYLINE").setFlag(7L, true);//子表只读（通过关系名获取子表）
                        setFieldFlag("DESCRIPTION",7L,true);//描述-只读
                        setFieldFlag("WONUM",7L,true);//领料单-只读
                        setFieldFlag("REASON",7L,true);//原因-只读
                    }
                }else{
//                    setFlag(7L, true);
                    getMboSet("UDRECOVERYLINE").setFlag(7L, true);//子表只读（通过关系名获取子表）
                    setFieldFlag("DESCRIPTION",7L,true);//描述-只读
                    setFieldFlag("WONUM",7L,true);//领料单-只读
//                    setFieldFlag("ISCANCEL",7L,true);//是否取消
//                    setFieldFlag("CANCELRESON",7L,true);//取消原因
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        String status=getString("STATUS");
        if("CLOSE".equalsIgnoreCase(status)){
            String lldh=getString("WONUM");//领料申请单号
            MboSetRemote udlldSet=getMboSet("$UDLLD", "UDLLD","WONUM='"+lldh+"'");
            MboSetRemote udmatuSet = MXServer.getMXServer().getMboSet("UDMATUSETRANS",MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote udrecoverlineSet=getMboSet("UDRECOVERYLINE");
            if(null!=udmatuSet && null!=udlldSet && null!=udrecoverlineSet){
                MboRemote udlldMbo=udlldSet.getMbo(0);
                String workshop=udlldMbo.getString("WORKSHOP");
                for(int i=0;i<udrecoverlineSet.count();i++){
                    MboRemote udrecoverlineMbo=udrecoverlineSet.getMbo(i);
                    String itemnum=udrecoverlineMbo.getString("ITEMNUM");
                    double lynum=udrecoverlineMbo.getDouble("LYNUM");//实际回收数量
                    double rknum=udrecoverlineMbo.getDouble("RKNUM");//入库SPMS数量
                    //插入交易记录表
                    setudmatuSetValue( udmatuSet, itemnum, workshop, (lynum-rknum),"UDRECOVERY","Storage");
                }
            }
        }


    }


    /**
     * 插入交易记录表
     * @param udmatuSet
     * @param itemnum
     * @param workshop
     * @throws RemoteException
     * @throws MXException
     */
    public void setudmatuSetValue(MboSetRemote udmatuSet,String itemnum,String workshop,double quantity,String appname,String issuetype) throws RemoteException, MXException {
        MboRemote udmatuMbo=udmatuSet.add();
        //ITEMNUM=:ITEMNUM and DEPTNUM=:DEPTNUM
        udmatuMbo.setValue("ITEMNUM", itemnum);
        udmatuMbo.setValue("DEPTNUM", workshop);
        udmatuMbo.setValue("QUANTITY", quantity);
        udmatuMbo.setValue("ISSUETYPE", issuetype);
        udmatuMbo.setValue("TRANSDATE", new Date());
        udmatuMbo.setValue("ENTERBY", getString("CREATEBY"));
        udmatuMbo.setValue("WONUM", getString("RCNUM"));
//        udmatuMbo.setValue("KOSTL", getString("KOSTL"));
        udmatuMbo.setValue("OUTBOUND", getString("SPMSRKNUM"));
//        udmatuMbo.setValue("ORDERUNIT", udlldMbo.getString("ORDERUNIT"));
//        udmatuMbo.setValue("BINNUM", udlldMbo.getString("BINNUM"));
//        udmatuMbo.setValue("SJYDTYPE", udlldMbo.getString("SJYDTYPE"));
//        udmatuMbo.setValue("AUFNR", udlldMbo.getString("AUFNR"));
        udmatuMbo.setValue("ORGID", getString("ORGID"));
        udmatuMbo.setValue("SITEID", getString("SITEID"));
        udmatuMbo.setValue("APPNAME", appname);
        udmatuMbo.setValue("ISJJ", 1);
        udmatuMbo.getThisMboSet().save();
    }

}
