package models

import (
	"mtp2_if/db"
	"time"
)

// 100.10仓单贸易

// Wrstandard 仓单标准表
type Wrstandard struct {
	Wrstandardid    int64     `json:"wrstandardid"  xorm:"'WRSTANDARDID'" binding:"required"` // 仓单标准ID(SEQ_WRSTANDARD)
	Wrstandardcode  string    `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`                // 仓单标准代码
	Wrstandardname  string    `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`                // 仓单标准名称
	Deliverygoodsid int32     `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"`              // 品种ID
	Unitid          int32     `json:"unitid"  xorm:"'UNITID'"`                                // 单位ID
	Minivalue       int64     `json:"minivalue"  xorm:"'MINIVALUE'"`                          // 最小变动值
	Minivaluedp     int64     `json:"minivaluedp"  xorm:"'MINIVALUEDP'"`                      // 最小变动值小数位
	Realminivalue   int64     `json:"realminivalue"  xorm:"'REALMINIVALUE'"`                  // 实际最小变动值
	Realminivaluedp int64     `json:"realminivaluedp"  xorm:"'REALMINIVALUEDP'"`              // 实际最小变动值小数位
	Wrsstatus       int32     `json:"wrsstatus"  xorm:"'WRSSTATUS'"`                          // 状态 - 作废 - 0:未激活 1:正常
	Creatorid       int64     `json:"creatorid"  xorm:"'CREATORID'"`                          // 创建人
	Createtime      time.Time `json:"createtime"  xorm:"'CREATETIME'"`                        // 创建时间
	Updatorid       int64     `json:"updatorid"  xorm:"'UPDATORID'"`                          // 更新人
	Updatetime      time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`                        // 更新时间
	Factoryitemjson string    `json:"factoryitemjson"  xorm:"'FACTORYITEMJSON'"`              // 要素项定义Json[{"DGFactoryItemTypeID": ,"ItemTypeMode": ,"FactoryItemIDs": },{.....},]DGFactoryItemTypeID - 要素项类型ID --DGFactoryItem->DGFactoryItemTypeIDItemTypeMode - 要素项类型模式 --DGFactoryItem->ItemTypeModeFactoryItemIDs - 选择项IDs--DGFactoryItem->DGFactoryItemID, 逗号分隔
	Isvalid         int32     `json:"isvalid"  xorm:"'ISVALID'"`                              // 是否有效 - 0:无效 1:有效
}

// TableName is WRSTANDARD
func (Wrstandard) TableName() string {
	return "WRSTANDARD"
}

// Warehouseinfo 仓库信息表
type Warehouseinfo struct {
	Autoid          int64     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`               // 自增ID
	Warehousecode   string    `json:"warehousecode"  xorm:"'WAREHOUSECODE'" binding:"required"` // 仓库代码
	Warehousename   string    `json:"warehousename"  xorm:"'WAREHOUSENAME'"`                    // 仓库名称
	Warehousetype   int32     `json:"warehousetype"  xorm:"'WAREHOUSETYPE'"`                    // 仓库类型 - 1 厂库  2 自有库  3 合作库
	Areauserid      int64     `json:"areauserid"  xorm:"'AREAUSERID'"`                          // 所属机构
	Warehousestatus int32     `json:"warehousestatus"  xorm:"'WAREHOUSESTATUS'"`                // 仓库状态 - 1:正常 2:注销 3:待审核 4:审核拒绝
	Countryid       int32     `json:"countryid"  xorm:"'COUNTRYID'"`                            // 国家
	Provinceid      int32     `json:"provinceid"  xorm:"'PROVINCEID'"`                          // 省
	Cityid          int32     `json:"cityid"  xorm:"'CITYID'"`                                  // 市
	Districtid      int32     `json:"districtid"  xorm:"'DISTRICTID'"`                          // 区
	Address         string    `json:"address"  xorm:"'ADDRESS'"`                                // 详细地址
	Remark          string    `json:"remark"  xorm:"'REMARK'"`                                  // 审核备注
	Createtime      time.Time `json:"createtime"  xorm:"'CREATETIME'"`                          // 创建时间
	Hasvideo        int32     `json:"hasvideo"  xorm:"'HASVIDEO'"`                              // 是否有视频 - 0:无 1:有
	Videourl        string    `json:"videourl"  xorm:"'VIDEOURL'"`                              // 视频地址
	Contactname     string    `json:"contactname"  xorm:"'CONTACTNAME'"`                        // 联系人
	Contactnum      string    `json:"contactnum"  xorm:"'CONTACTNUM'"`                          // 联系电话
}

// TableName is WAREHOUSEINFO
func (Warehouseinfo) TableName() string {
	return "WAREHOUSEINFO"
}

// WRStandardInfo 仓库信息
type WRStandardInfo struct {
	Wrstandard `xorm:"extends"`

	Unitname          string `json:"unitname" xorm:"UNITNAME"`                      // 单位
	Deliverygoodsname string `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"` // 交割商品名称
}

// GetWrstandards 获取有效的仓单标准
func GetWrstandards() ([]WRStandardInfo, error) {
	engine := db.GetEngine()

	wrStandards := make([]WRStandardInfo, 0)
	if err := engine.Table("WRSTANDARD").Select("WRSTANDARD.*, E1.ENUMDICNAME UNITNAME, DG.DELIVERYGOODSNAME").
		Join("LEFT", "ENUMDICITEM E1", "E1.ENUMITEMNAME = WRSTANDARD.UNITID and E1.ENUMDICCODE = 'GOODSUNIT'").
		Join("LEFT", "DELIVERYGOODS DG", "DG.DELIVERYGOODSID = WRSTANDARD.DELIVERYGOODSID").
		Where("WRSTANDARD.ISVALID = 1").Find(&wrStandards); err != nil {
		return nil, err
	}

	return wrStandards, nil
}

// GetWareHouseinfos 获取有效的仓库信息
func GetWareHouseinfos() ([]Warehouseinfo, error) {
	engine := db.GetEngine()

	wareHouseinfos := make([]Warehouseinfo, 0)
	if err := engine.Where("WAREHOUSESTATUS = 1").Find(&wareHouseinfos); err != nil {
		return nil, err
	}

	return wareHouseinfos, nil
}
