/*
 * This file is generated by jOOQ.
 */
package cn.vertxup.erp.domain.tables.interfaces;


import io.github.jklingsporn.vertx.jooq.shared.internal.VertxPojo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import static io.github.jklingsporn.vertx.jooq.shared.internal.VertxPojo.setOrThrow;
/**
 * This class is generated by jOOQ.
 */
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public interface IEProject extends VertxPojo, Serializable {

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.KEY</code>. 「key」- 项目ID
     */
    public IEProject setKey(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.KEY</code>. 「key」- 项目ID
     */
    public String getKey();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.NAME</code>. 「name」- 项目名称
     */
    public IEProject setName(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.NAME</code>. 「name」- 项目名称
     */
    public String getName();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.CODE</code>. 「code」- 项目编号
     */
    public IEProject setCode(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.CODE</code>. 「code」- 项目编号
     */
    public String getCode();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.SHORT_NAME</code>. 「shortName」-
     * 项目简称
     */
    public IEProject setShortName(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.SHORT_NAME</code>. 「shortName」-
     * 项目简称
     */
    public String getShortName();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.DEPT_ID</code>. 「deptId」- 所属部门,
     * resource.departments
     */
    public IEProject setDeptId(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.DEPT_ID</code>. 「deptId」- 所属部门,
     * resource.departments
     */
    public String getDeptId();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.TYPE</code>. 「type」-
     * 项目分类，zero.project
     */
    public IEProject setType(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.TYPE</code>. 「type」-
     * 项目分类，zero.project
     */
    public String getType();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.STATUS</code>. 「status」-
     * 项目状态，zero.project.status
     */
    public IEProject setStatus(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.STATUS</code>. 「status」-
     * 项目状态，zero.project.status
     */
    public String getStatus();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.BUDGET</code>. 「budget」-
     * 所属预算，zero.project.budget
     */
    public IEProject setBudget(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.BUDGET</code>. 「budget」-
     * 所属预算，zero.project.budget
     */
    public String getBudget();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.LEVEL</code>. 「level」-
     * 项目级别，zero.project.level
     */
    public IEProject setLevel(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.LEVEL</code>. 「level」-
     * 项目级别，zero.project.level
     */
    public String getLevel();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.PRIORITY</code>. 「priority」-
     * 项目优先级，zero.project.priority
     */
    public IEProject setPriority(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.PRIORITY</code>. 「priority」-
     * 项目优先级，zero.project.priority
     */
    public String getPriority();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.RISK</code>. 「risk」-
     * 项目风险，zero.project.risk
     */
    public IEProject setRisk(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.RISK</code>. 「risk」-
     * 项目风险，zero.project.risk
     */
    public String getRisk();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.TITLE</code>. 「title」- 项目标题
     */
    public IEProject setTitle(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.TITLE</code>. 「title」- 项目标题
     */
    public String getTitle();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.ICON</code>. 「icon」- 项目图标
     */
    public IEProject setIcon(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.ICON</code>. 「icon」- 项目图标
     */
    public String getIcon();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.AMOUNT</code>. 「amount」- 项目金额
     */
    public IEProject setAmount(BigDecimal value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.AMOUNT</code>. 「amount」- 项目金额
     */
    public BigDecimal getAmount();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.SUBJECT</code>. 「subject」- 项目目标
     */
    public IEProject setSubject(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.SUBJECT</code>. 「subject」- 项目目标
     */
    public String getSubject();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.DESCRIPTION</code>. 「description」-
     * 主单描述内容
     */
    public IEProject setDescription(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.DESCRIPTION</code>. 「description」-
     * 主单描述内容
     */
    public String getDescription();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.REMARK</code>. 「remark」- 项目备注
     */
    public IEProject setRemark(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.REMARK</code>. 「remark」- 项目备注
     */
    public String getRemark();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.LEAD_BY</code>. 「leadBy」- 项目经理
     */
    public IEProject setLeadBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.LEAD_BY</code>. 「leadBy」- 项目经理
     */
    public String getLeadBy();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.PLAN_START_AT</code>.
     * 「planStartAt」- 开始日期
     */
    public IEProject setPlanStartAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.PLAN_START_AT</code>.
     * 「planStartAt」- 开始日期
     */
    public LocalDateTime getPlanStartAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.PLAN_END_AT</code>. 「planEndAt」-
     * 结束日期
     */
    public IEProject setPlanEndAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.PLAN_END_AT</code>. 「planEndAt」-
     * 结束日期
     */
    public LocalDateTime getPlanEndAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.START_AT</code>. 「startAt」- 实际开始日期
     */
    public IEProject setStartAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.START_AT</code>. 「startAt」- 实际开始日期
     */
    public LocalDateTime getStartAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.END_AT</code>. 「endAt」- 实际结束日期
     */
    public IEProject setEndAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.END_AT</code>. 「endAt」- 实际结束日期
     */
    public LocalDateTime getEndAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.METADATA</code>. 「metadata」- 附加配置
     */
    public IEProject setMetadata(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.METADATA</code>. 「metadata」- 附加配置
     */
    public String getMetadata();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.ACTIVE</code>. 「active」- 是否启用
     */
    public IEProject setActive(Boolean value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.ACTIVE</code>. 「active」- 是否启用
     */
    public Boolean getActive();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.SIGMA</code>. 「sigma」- 统一标识（项目所属应用）
     */
    public IEProject setSigma(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.SIGMA</code>. 「sigma」- 统一标识（项目所属应用）
     */
    public String getSigma();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.LANGUAGE</code>. 「language」- 使用的语言
     */
    public IEProject setLanguage(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.LANGUAGE</code>. 「language」- 使用的语言
     */
    public String getLanguage();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.CREATED_AT</code>. 「createdAt」-
     * 创建时间
     */
    public IEProject setCreatedAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.CREATED_AT</code>. 「createdAt」-
     * 创建时间
     */
    public LocalDateTime getCreatedAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.CREATED_BY</code>. 「createdBy」- 创建人
     */
    public IEProject setCreatedBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.CREATED_BY</code>. 「createdBy」- 创建人
     */
    public String getCreatedBy();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.UPDATED_AT</code>. 「updatedAt」-
     * 更新时间
     */
    public IEProject setUpdatedAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.UPDATED_AT</code>. 「updatedAt」-
     * 更新时间
     */
    public LocalDateTime getUpdatedAt();

    /**
     * Setter for <code>DB_ETERNAL.E_PROJECT.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    public IEProject setUpdatedBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.E_PROJECT.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    public String getUpdatedBy();

    // -------------------------------------------------------------------------
    // FROM and INTO
    // -------------------------------------------------------------------------

    /**
     * Load data from another generated Record/POJO implementing the common
     * interface IEProject
     */
    public void from(IEProject from);

    /**
     * Copy data into another generated Record/POJO implementing the common
     * interface IEProject
     */
    public <E extends IEProject> E into(E into);

        @Override
        public default IEProject fromJson(io.vertx.core.json.JsonObject json) {
                setOrThrow(this::setKey,json::getString,"KEY","java.lang.String");
                setOrThrow(this::setName,json::getString,"NAME","java.lang.String");
                setOrThrow(this::setCode,json::getString,"CODE","java.lang.String");
                setOrThrow(this::setShortName,json::getString,"SHORT_NAME","java.lang.String");
                setOrThrow(this::setDeptId,json::getString,"DEPT_ID","java.lang.String");
                setOrThrow(this::setType,json::getString,"TYPE","java.lang.String");
                setOrThrow(this::setStatus,json::getString,"STATUS","java.lang.String");
                setOrThrow(this::setBudget,json::getString,"BUDGET","java.lang.String");
                setOrThrow(this::setLevel,json::getString,"LEVEL","java.lang.String");
                setOrThrow(this::setPriority,json::getString,"PRIORITY","java.lang.String");
                setOrThrow(this::setRisk,json::getString,"RISK","java.lang.String");
                setOrThrow(this::setTitle,json::getString,"TITLE","java.lang.String");
                setOrThrow(this::setIcon,json::getString,"ICON","java.lang.String");
                setOrThrow(this::setAmount,key -> {String s = json.getString(key); return s==null?null:new java.math.BigDecimal(s);},"AMOUNT","java.math.BigDecimal");
                setOrThrow(this::setSubject,json::getString,"SUBJECT","java.lang.String");
                setOrThrow(this::setDescription,json::getString,"DESCRIPTION","java.lang.String");
                setOrThrow(this::setRemark,json::getString,"REMARK","java.lang.String");
                setOrThrow(this::setLeadBy,json::getString,"LEAD_BY","java.lang.String");
                setOrThrow(this::setPlanStartAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"PLAN_START_AT","java.time.LocalDateTime");
                setOrThrow(this::setPlanEndAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"PLAN_END_AT","java.time.LocalDateTime");
                setOrThrow(this::setStartAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"START_AT","java.time.LocalDateTime");
                setOrThrow(this::setEndAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"END_AT","java.time.LocalDateTime");
                setOrThrow(this::setMetadata,json::getString,"METADATA","java.lang.String");
                setOrThrow(this::setActive,json::getBoolean,"ACTIVE","java.lang.Boolean");
                setOrThrow(this::setSigma,json::getString,"SIGMA","java.lang.String");
                setOrThrow(this::setLanguage,json::getString,"LANGUAGE","java.lang.String");
                setOrThrow(this::setCreatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CREATED_AT","java.time.LocalDateTime");
                setOrThrow(this::setCreatedBy,json::getString,"CREATED_BY","java.lang.String");
                setOrThrow(this::setUpdatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"UPDATED_AT","java.time.LocalDateTime");
                setOrThrow(this::setUpdatedBy,json::getString,"UPDATED_BY","java.lang.String");
                return this;
        }


        @Override
        public default io.vertx.core.json.JsonObject toJson() {
                io.vertx.core.json.JsonObject json = new io.vertx.core.json.JsonObject();
                json.put("KEY",getKey());
                json.put("NAME",getName());
                json.put("CODE",getCode());
                json.put("SHORT_NAME",getShortName());
                json.put("DEPT_ID",getDeptId());
                json.put("TYPE",getType());
                json.put("STATUS",getStatus());
                json.put("BUDGET",getBudget());
                json.put("LEVEL",getLevel());
                json.put("PRIORITY",getPriority());
                json.put("RISK",getRisk());
                json.put("TITLE",getTitle());
                json.put("ICON",getIcon());
                json.put("AMOUNT",getAmount()==null?null:getAmount().toString());
                json.put("SUBJECT",getSubject());
                json.put("DESCRIPTION",getDescription());
                json.put("REMARK",getRemark());
                json.put("LEAD_BY",getLeadBy());
                json.put("PLAN_START_AT",getPlanStartAt()==null?null:getPlanStartAt().toString());
                json.put("PLAN_END_AT",getPlanEndAt()==null?null:getPlanEndAt().toString());
                json.put("START_AT",getStartAt()==null?null:getStartAt().toString());
                json.put("END_AT",getEndAt()==null?null:getEndAt().toString());
                json.put("METADATA",getMetadata());
                json.put("ACTIVE",getActive());
                json.put("SIGMA",getSigma());
                json.put("LANGUAGE",getLanguage());
                json.put("CREATED_AT",getCreatedAt()==null?null:getCreatedAt().toString());
                json.put("CREATED_BY",getCreatedBy());
                json.put("UPDATED_AT",getUpdatedAt()==null?null:getUpdatedAt().toString());
                json.put("UPDATED_BY",getUpdatedBy());
                return json;
        }

}
