package com.engine.htsc.ReimbursementFlow.tool;

import com.engine.htsc.ReimbursementFlow.Dao.UfZbbxandclsplDaoImpl;
import com.engine.htsc.ReimbursementFlow.model.NewUser;
import com.engine.htsc.ReimbursementFlow.model.ReportUfZbtybxsp;
import com.engine.htsc.ReimbursementFlow.model.UfZbtybxsp;
import weaver.general.Util;
import weaver.interfaces.htsc.GlobatTools.JAVATools;
import weaver.interfaces.htsc.comInfo.PropBean;

import javax.media.rtp.rtcp.Report;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ModelToVOTools {




    public static ReportUfZbtybxsp ConvertModelToVO(UfZbtybxsp ufZbtybxsp,
                                                    Map<String,Object> UserMap,
                                                    String numbertable,
                                                    String nodeunnumber,
                                                    Map<String,Object> mainmap,
                                                    Map<String,Object> detaimap){
        ElementInstance elementInstance=new ElementInstance();
        String zbbxfilter=new PropBean().getPropName("DT_zbbxfilter");
        //    List<ReportUfZbtybxsp> listReportUfZbtybxsp=new ArrayList<>();

        NewUser cxsplryUser=(NewUser)UserMap.get("cxspuser");
        NewUser ngruser=(NewUser)UserMap.get("ngruser");
        NewUser bxruser=(NewUser)UserMap.get("bxruser");
        ReportUfZbtybxsp reportUfZbtybxsp=new ReportUfZbtybxsp();
        UfZbbxandclsplDaoImpl ufZbbxandclsplDao=new UfZbbxandclsplDaoImpl();
        Map map=ufZbbxandclsplDao.getSelectValue(numbertable);
        String bxrbm=  Util.null2String(map.get("bxrbm"));
        String fycdbmfzr=  Util.null2String(map.get("fycdbmfzr"));
        String fysjcdbm=Util.null2String(map.get("fysjcdbm"));
        String bmld=   Util.null2String(map.get("bmld"));
        String sfqwdzfpsm = Util.null2String(mainmap.get("sfqwdzfpsm"));
        String smsdqxkg = Util.null2String(mainmap.get("smsdqxkg"));
        String bxrbmid="";
        String fycdbmfzrid="";
        String bmlduserid="";
        String fysjcdbmid="";
        if(!"".equals(bxrbm)){
            bxrbmid= Util.null2String(detaimap.get(bxrbm));
        }
        if(!"".equals(fycdbmfzr)){
            fycdbmfzrid= Util.null2String( detaimap.get(fycdbmfzr));
        }
        if(!"".equals(bmld)){
            bmlduserid= Util.null2String( mainmap.get(bmld));
        }
        if(!"".equals(fysjcdbm)){
            fysjcdbmid= Util.null2String(  detaimap.get(fysjcdbm));

        }


        reportUfZbtybxsp.setNgr(ngruser);
        reportUfZbtybxsp.setBxr(bxruser);
        String sfldsp=Util.null2String(mainmap.get("sfldsp"));
        //将筛选出来的数据封装到vo上面
        reportUfZbtybxsp.setUfZbtybxsp(ufZbtybxsp);
        //费用确认
        reportUfZbtybxsp.setFyqr(elementInstance.getfyqr(ufZbtybxsp.getFyqr(),bxruser,ngruser));

        //预算管理员
        reportUfZbtybxsp.setYsgly(elementInstance.getysgly(ufZbtybxsp.getYsgly(),cxsplryUser.getDepId()));

        //判断如果前端传参数里面选择否并且是否送领导选择1则隐藏分管领导
        reportUfZbtybxsp.setSfsld(elementInstance.getsfsld(ufZbtybxsp.getSfsld(),mainmap));
        //如果说前端参数有值的话则删除分管领导
        if(!"0".equals(sfldsp) || !"1".equals(reportUfZbtybxsp.getSfsld()))
        {
            //分管领导
            reportUfZbtybxsp.setFgldsp(elementInstance.getfgldry(ufZbtybxsp.getFgldsp(), cxsplryUser));
        }

        //如果是信息技术部的话并且前端按钮选择否并且符合条件
        if(zbbxfilter.indexOf(cxsplryUser.getDepId())<0||!"0".equals(sfldsp) || !"1".equals(reportUfZbtybxsp.getSfsld())) {
            //获取总裁审批
            reportUfZbtybxsp.setZcsp(elementInstance.getzcsp(ufZbtybxsp.getZcsp()));
        }
        //当报销人领导审批人为韩臻聪时，不再需要过周易审批
        if (!"".equals(reportUfZbtybxsp.getFgldsp())&&"016500".equals(JAVATools.gethrmidtoworkcode(reportUfZbtybxsp.getFgldsp()))){
            reportUfZbtybxsp.setZcsp("");
        }

        if ("0".equals(smsdqxkg)&&"0".equals(sfqwdzfpsm)){
            //纸质发票提交,扫码收单权限开关smsdqxkg、是否全为电子发票（扫码）sfqwdzfpsm两个值，都等于0时，取值纸质发票节点值,这里的纸质发票提交人直接取会计
            reportUfZbtybxsp.setZzfptjr(elementInstance.getfykj(fysjcdbmid, numbertable,ufZbtybxsp.getFyhjsp()));
        }else {
            //标记为不过费用会计节点
            reportUfZbtybxsp.setZzfptjr("0");
        }

        //费用会计
        //cxsplryUser.getDepId()
        reportUfZbtybxsp.setFyhjsp(elementInstance.getfykj(fysjcdbmid, numbertable,ufZbtybxsp.getFyhjsp()));
        //复核人fhr与会计节点取值逻辑一致
        reportUfZbtybxsp.setFhr(elementInstance.getfykj(fysjcdbmid, numbertable,ufZbtybxsp.getFhr()));
        //财务总监
        reportUfZbtybxsp.setCwzj(elementInstance.getcwzj(ufZbtybxsp.getCwzj()));

        reportUfZbtybxsp.setOnebbmfzr(elementInstance.getNewDeptAdmin(Util.null2String(ufZbtybxsp.getOnebbmfzr()),bxrbmid,fycdbmfzrid,bmlduserid,bxruser.getUserId(),ngruser));

        reportUfZbtybxsp.setTwobbmfzr(elementInstance.gettwoDeptAdmin(Util.null2String(ufZbtybxsp.getTwobbmfzr()),bxrbmid,fycdbmfzrid,bmlduserid,ngruser));
        return  distinctflowid(reportUfZbtybxsp,nodeunnumber);

    }


    public static ReportUfZbtybxsp distinctflowid(ReportUfZbtybxsp reportUfZbtybxsp,String nodeunnumber){
        String filterstr=new PropBean().getPropName("zbbxfgldfilter");
        String specialworkflowid=new PropBean().getPropName("specialworkflowid");
        NewUser bxruser= reportUfZbtybxsp.getBxr();
        NewUser ngruser= reportUfZbtybxsp.getNgr();
        if("".equals(filterstr) || "".equals(nodeunnumber) || filterstr.indexOf(nodeunnumber)<0){
            return reportUfZbtybxsp;
        }

        if(specialworkflowid.indexOf(bxruser.getDeptLevelcode())>=0){
            //去重操作
            reportUfZbtybxsp.setOnebbmfzr(JAVATools.leavedistinct(reportUfZbtybxsp.getOnebbmfzr(),reportUfZbtybxsp.getFgldsp()));
            reportUfZbtybxsp.setTwobbmfzr(JAVATools.leavedistinct(reportUfZbtybxsp.getTwobbmfzr(),reportUfZbtybxsp.getFgldsp()));
            reportUfZbtybxsp.setCwzj(JAVATools.leavedistinct(reportUfZbtybxsp.getCwzj(),reportUfZbtybxsp.getFgldsp()));
        }
        return reportUfZbtybxsp;
    }
}
