package com.engine.salary.entity.salaryacct.bo;

import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.googlecode.aviator.Expression;
import lombok.Data;

import java.util.*;

/**
 * @description: 薪资核算公式
 * @author: xiajun
 * @modified By: xiajun
 * @date: Created in 8/22/22 3:33 PM
 * @version:v1.0
 */
@Data
public class SalaryCalcFormulaContext {

    /**
     * 薪资核算所包含的薪资项目
     */
    private Map<Long, SalaryItemPO> salaryItemMap;

    /**
     * 本次薪资核算所涉及的公式编译后的对象
     */
    private Map<Long, Expression> expressionMap;

    /**
     * 薪资核算所包含的公式
     */
    private Map<Long, ExpressFormula> expressFormulaMap;

    /**
     * 薪资核算所包含的薪资项目id（按计算顺序排序好了）
     */
    private List<List<SalaryCalcFormula>> salaryCalcFormulas;

    /**
     * 所有公式中是否包含薪资档案
     */
    private Set<String> salaryArchiveFieldIds;

    /**
     * 所有公式中是否包含其他扣除
     */
    private Set<String> otherDeductionFieldIds;

    /**
     * 所有公式中是否包含专项附加扣除
     */
    private Set<String> addUpDeductionFieldIds;

    /**
     * 所有公式中是否包含往期累计情况
     */
    private Set<String> addUpSituationFieldIds;

    /**
     * 所有公式中是否包含考勤
     */
    private Set<String> attendFieldIds;

    /**
     * 所有公式中是否包含社保福利
     */
    private Set<String> welfareFieldIds;

    /**
     * 所有公式中是否包含人员信息
     */
    private Set<String> employeeInfoFieldIds;

    /**
     * 所有公式中是否包含外部人员
     */
    private Set<String> extEmployeeFieldIds;

    /**
     * 所有公式中包含的自定义业务数据表
     */
    private Map<Long, Set<String>> customDataFieldIdMap;

    /**
     * 所有公式中包含的已发
     */
    private Set<String> issuedFieldIds;

    public SalaryCalcFormulaContext() {
        this.salaryItemMap = new HashMap<>();
        this.expressFormulaMap = new HashMap<>();
        this.salaryCalcFormulas = new ArrayList<>();
        this.salaryArchiveFieldIds = new HashSet<>();
        this.otherDeductionFieldIds = new HashSet<>();
        this.addUpDeductionFieldIds = new HashSet<>();
        this.addUpSituationFieldIds = new HashSet<>();
        this.attendFieldIds = new HashSet<>();
        this.welfareFieldIds = new HashSet<>();
        this.employeeInfoFieldIds = new HashSet<>();
        this.extEmployeeFieldIds = new HashSet<>();
        this.customDataFieldIdMap = new HashMap<>();
        this.issuedFieldIds = new HashSet<>();
    }
}
