package com.uas.search.console.b2b.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * 买家的采购验收单
 * 
 * @author yingp
 * 
 */
@Table(name = PurchaseAcceptSimpleInfo.TABLE_NAME)
@Entity
public class PurchaseAcceptSimpleInfo {

	/**
	 * 表名
	 */
	// 必须与com.uas.search.b2b.service.SearchService.Table_name对应的单据类型的value保持一致
	public static final String TABLE_NAME = "PURC$ACCEPT";

	/**
	 * 各字段列名（也是存储索引时的field名）
	 */
	public static final String ID_FIELD = "pa_id";

	public static final String CODE_FIELD = "pa_code";

	public static final String VEND_FIELD = "pa_venduu";

	public static final String ENTERPRISE_FIELD = "pa_enuu";

	public static final String DATE_FIELD = "pa_date";

	public static final String ITEMS_FIELD = "pai_paid";

	public static final String SENDCODE_FIELD = "pa_sendcode";

	@Id
	@Column(name = ID_FIELD)
	private Long id;

	/**
	 * 单号
	 */
	@Column(name = CODE_FIELD)
	private String code;

	/**
	 * 日期
	 */
	@Column(name = DATE_FIELD)
	private Date date;

	/**
	 * 企业UU
	 */
	@OneToOne
	@JoinColumn(name = ENTERPRISE_FIELD, insertable = false, updatable = false)
	private EnterpriseSimpleInfo enterprise;

	/**
	 * 供应商企业UU
	 */
	@OneToOne
	@JoinColumn(name = VEND_FIELD, insertable = false, updatable = false)
	private EnterpriseSimpleInfo vend;

	/**
	 * 验收明细
	 */
	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
	@JoinColumn(name = ITEMS_FIELD, updatable = false, insertable = false)
	private Set<PurchaseAcceptItemSimpleInfo> acceptItems;

	/**
	 * 送货单号
	 */
	@Column(name = SENDCODE_FIELD)
	private String sendCode;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public EnterpriseSimpleInfo getVend() {
		return vend;
	}

	public void setVend(EnterpriseSimpleInfo vend) {
		this.vend = vend;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public EnterpriseSimpleInfo getEnterprise() {
		return enterprise;
	}

	public void setEnterprise(EnterpriseSimpleInfo enterprise) {
		this.enterprise = enterprise;
	}

	public Set<PurchaseAcceptItemSimpleInfo> getAcceptItems() {
		return acceptItems;
	}

	public void setAcceptItems(Set<PurchaseAcceptItemSimpleInfo> acceptItems) {
		this.acceptItems = acceptItems;
	}

	public String getSendCode() {
		return sendCode;
	}

	public void setSendCode(String sendCode) {
		this.sendCode = sendCode;
	}

	/**
	 * 获取所有可以搜索的字段列名（索引的field名）
	 * 
	 * @return 可以搜索的字段列名
	 */
	public static List<String> getKeywordFields() {
		List<String> fields = new ArrayList<>();
		fields.add(CODE_FIELD);
		fields.add(VEND_FIELD);
		fields.add(ITEMS_FIELD);
		fields.add(SENDCODE_FIELD);
		fields.add(ENTERPRISE_FIELD);
		return fields;
	}

	@Override
	public String toString() {
		return "PurchaseAcceptSimpleInfo [id=" + id + ", code=" + code + ", date=" + date + ", enterprise=" + enterprise
				+ ", vend=" + vend + ", acceptItems=" + acceptItems + ", sendCode=" + sendCode + "]";
	}
}