package com.jwipc.finance.model.po;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.WeekFields;
import java.util.Locale;

/**
 * <p>
 * 对账模块-付款计划主表
 * </p>
 *
 * @author 邓京术
 * @since 2025-07-14
 */
@Data
public class PaymentPlanDetailPO implements Serializable {

    private Long id;

    /**
     * 付款计划明细行号 按主表单号自动增加
     */
    private Integer paymentPlanDetailNo;

    /**
     * 付款计划单号
     */
    private String paymentPlanNo;

    /**
     * 付款计划id
     */
    private Long paymentPlanId;

    /**
     * 对账单的对账年份
     */
    private String accountStatementYear;

    /**
     * 对账单的对账月份
     */
    private String accountStatementMonth;

    /**
     * 付款计划单年份
     */
    private String paymentPlanYear;

    /**
     * 付款计划单月份
     */
    private String paymentPlanMonth;

    /**
     * 对账单的年月
     */
    private String accountStatementYm;

    /**
     * 对账单id
     */
    private Long accountStatementId;

    /**
     * 对账单编号
     */
    private String accountStatementNo;

    /**
     * 采购公司代码
     */
    private String companyCode;

    /**
     * 采购公司名称
     */
    private String companyName;

    /**
     * 供应商代码
     */
    private String supplierCode;

    /**
     * 供应商名称
     */
    private String supplierName;

    /**
     * 工厂编码
     */
    private String factoryCode;

    /**
     * 工厂名称
     */
    private String factoryName;

    /**
     * 货币代码
     */
    private String currencyCode;
    /**
     * 应付金额
     */
    private BigDecimal actualPayAmount;

    /**
     * 已请款未付金额（历史）
     */
    private BigDecimal appliedUnpaidAmount;

    /**
     * 付款条件
     */
    private String paymentTermCode;

    /**
     * 付款方式
     */
    private String paymentWay;

    /**
     * 采购组编码
     */
    private String purchaseGroup;

    /**
     * 付款计划周(对账单上付款到期日所在周)
     */
    private String paymentPlanWeek;

    /**
     * 付款到期日
     */
    private LocalDateTime paymentExpireDate;

    /**
     * 创建用户ID
     */
    private Long createUserId;

    /**
     * 创建用户编码
     */
    private String createUserCode;

    /**
     * 创建用户姓名
     */
    private String createUserName;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 最后更新用户ID
     */
    private Long updateUserId;

    /**
     * 最后更新用户编码
     */
    private String updateUserCode;

    /**
     * 最后更新用户姓名
     */
    private String updateUserName;

    /**
     * 最后更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 删除标识 0:未删除 1:已删除
     */
    private Integer deleteFlag;

    /**
     * 备注
     */
    private String remark;

    /**
     * 新增标识
     */
    private String newSign;
    private String paymentType;

    /**
     * 行状态1待提交 2已提交 3删除
     */
    private Integer status;

    private void setPaymentPlanWeek() {
        if (null != paymentExpireDate) {
            WeekFields weekFields = WeekFields.of(Locale.getDefault());
            // 获取当前日期的周数（周一作为一周的开始）
            int weekOfMonth = paymentExpireDate.get(weekFields.weekOfMonth());
            this.setPaymentPlanWeek(weekOfMonth + "");
        }
    }
}
