package fms import ( "hongze/fms_api/global" "hongze/fms_api/models/base" "hongze/fms_api/utils" "time" ) // PreRegister 合同开票表 type ContractPreRegister struct { PreRegisterId int `gorm:"primaryKey;column:pre_register_id" json:"pre_register_id" description:"预登记ID"` ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"` InvoiceId int `gorm:"column:invoice_id" json:"invoice_id" description:"开票ID"` ArriveId int `gorm:"column:arrive_id" json:"arrive_id" description:"到款ID"` CompanyName string `json:"company_name" description:"客户名称"` Amount float64 `gorm:"column:amount" json:"amount" description:"开票换算后的金额(人民币)"` OriginAmount float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票金额"` CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"开票货币国际代码"` ArriveAmount float64 `gorm:"column:arrive_amount" json:"arrive_amount" description:"到款换算后的金额(人民币)"` ArriveOriginAmount float64 `gorm:"column:arrive_origin_amount" json:"arrive_origin_amount" description:"到款金额"` InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"` InvoiceDate time.Time `gorm:"column:invoice_time" json:"invoice_time" description:"开票日"` ArriveDate time.Time `gorm:"column:arrive_time" json:"arrive_time" description:"到款日"` SellerId int `gorm:"column:seller_id" json:"seller_id" description:"销售ID"` SellerName string `gorm:"column:seller_name" json:"seller_name" description:"销售名称"` SellerGroupId int `gorm:"column:seller_group_id" json:"seller_group_id" description:"销售分组ID"` SellerGroupName string `gorm:"column:seller_group_name" json:"seller_group_name" description:"销售分组名称"` SellerTeamId int `gorm:"column:seller_team_id" json:"seller_team_id" description:"销售小组ID"` SellerTeamName string `gorm:"column:seller_team_name" json:"seller_team_name" description:"销售小组名称"` AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"` AdminName string `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"` Remark string `gorm:"column:remark" json:"remark" description:"备注信息"` ArriveRemark string `gorm:"column:arrive_remark" json:"arrive_remark" description:"到款备注信息"` ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"` IsPrePay int `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"` StartDate time.Time `gorm:"column:start_date" json:"start_date" description:"约定开始时间"` EndDate time.Time `gorm:"column:end_date" json:"end_date" description:"约定结束时间"` base.TimeBase } func (c *ContractPreRegister) TableName() string { return "contract_pre_register" } // ContractPreRegisterItem 合同开票/到款 type ContractPreRegisterItem struct { PreRegisterId int `gorm:"primaryKey;column:pre_register_id" json:"pre_register_id" description:"预登记ID"` ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"` InvoiceId int `gorm:"column:invoice_id" json:"invoice_id" description:"开票ID"` ArriveId int `gorm:"column:arrive_id" json:"arrive_id" description:"到款ID"` CompanyName string `json:"company_name" description:"客户名称"` Amount float64 `gorm:"column:amount" json:"amount" description:"开票换算后的金额(人民币)"` OriginAmount float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票金额"` CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"开票货币国际代码"` ArriveAmount float64 `gorm:"column:arrive_amount" json:"arrive_amount" description:"到款换算后的金额(人民币)"` ArriveOriginAmount float64 `gorm:"column:arrive_origin_amount" json:"arrive_origin_amount" description:"到款金额"` UnitName string `json:"unit_name" description:"货币单位名称"` InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"` InvoiceDate string `gorm:"column:invoice_time" json:"invoice_time" description:"开票日"` ArriveDate string `gorm:"column:arrive_time" json:"arrive_time" description:"到款日"` SellerId int `gorm:"column:seller_id" json:"seller_id" description:"销售ID"` SellerName string `gorm:"column:seller_name" json:"seller_name" description:"销售名称"` PayType int `gorm:"column:pay_type" json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"` Remark string `gorm:"column:remark" json:"remark" description:"开票备注信息"` ArriveRemark string `gorm:"column:arrive_remark" json:"arrive_remark" description:"到款备注信息"` ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"` IsPrePay int `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"` StartDate string `gorm:"column:start_date" json:"start_date" description:"约定开始时间"` EndDate string `gorm:"column:end_date" json:"end_date" description:"约定结束时间"` AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"` CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"` } // formatContractInvoice2Item 格式化ContractInvoiceItem func formatContractPreRegister2Item(item *ContractPreRegister) (formatItem *ContractPreRegisterItem) { formatItem = new(ContractPreRegisterItem) formatItem.PreRegisterId = item.PreRegisterId formatItem.ContractRegisterId = item.ContractRegisterId formatItem.InvoiceId = item.InvoiceId formatItem.ArriveId = item.ArriveId formatItem.CompanyName = item.CompanyName formatItem.Amount = item.Amount formatItem.OriginAmount = item.OriginAmount formatItem.CurrencyUnit = item.CurrencyUnit formatItem.ArriveAmount = item.ArriveAmount formatItem.ArriveOriginAmount = item.ArriveOriginAmount formatItem.InvoiceType = item.InvoiceType formatItem.InvoiceDate = utils.TimeTransferString(utils.FormatDate, item.InvoiceDate) formatItem.ArriveDate = utils.TimeTransferString(utils.FormatDate, item.ArriveDate) formatItem.SellerId = item.SellerId formatItem.SellerName = item.SellerName formatItem.Remark = item.Remark formatItem.ArriveRemark = item.ArriveRemark formatItem.IsPrePay = item.IsPrePay formatItem.ServiceProductId = item.ServiceProductId formatItem.AdminId = item.AdminId formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime) formatItem.StartDate = item.StartDate.Format(utils.FormatDate) formatItem.EndDate = item.EndDate.Format(utils.FormatDate) return } // GetContractInvoiceItemPageList 获取合同开票/到款列表-分页 func GetContractPreRegisterItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractPreRegisterItem, err error) { list := make([]*ContractPreRegister, 0) query := global.DEFAULT_MYSQL.Table("contract_pre_register"). Where(condition, pars...) query.Count(&count) if len(page.GetOrderItemsString()) > 0 { query = query.Order(page.GetOrderItemsString()) } err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&list).Error if err != nil { return } for i := range list { results = append(results, formatContractPreRegister2Item(list[i])) } return } func (c *ContractPreRegister) Create() (err error) { err = global.DEFAULT_MYSQL.Create(c).Error return } func (c *ContractPreRegister) Fetch(id int) (item *ContractPreRegister, err error) { err = global.DEFAULT_MYSQL.Model(c).Where(" pre_register_id = ?", id).First(&item).Error return } func (c *ContractPreRegister) FetchByRegisterId(id int) (items []*ContractPreRegister, err error) { err = global.DEFAULT_MYSQL.Model(c).Where(" contract_register_id = ?", id).Find(&items).Error return } // 删除 func (c *ContractPreRegister) Delete() (err error) { err = global.DEFAULT_MYSQL.Delete(c).Error return } func (c *ContractPreRegister) Update(updateCols []string) (err error) { err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error return } // GetContractInvoiceItemList 获取开票到款列表 func GetContractPreRegisterItemList(condition string, pars []interface{}) (itemList []*ContractPreRegisterItem, err error) { list := make([]*ContractPreRegister, 0) err = global.DEFAULT_MYSQL.Model(ContractPreRegister{}). Where("is_deleted = 0"). Where(condition, pars...). Order("contract_invoice_id ASC"). Find(&list).Error if err != nil { return } itemList = formatContractPreRegister2ItemList(list) return } // formatContractPreRegister2ItemList 格式化ContractInvoice func formatContractPreRegister2ItemList(list []*ContractPreRegister) (itemList []*ContractPreRegisterItem) { itemList = make([]*ContractPreRegisterItem, 0) for i := range list { itemList = append(itemList, &ContractPreRegisterItem{ PreRegisterId: list[i].PreRegisterId, ContractRegisterId: list[i].ContractRegisterId, Amount: list[i].Amount, OriginAmount: list[i].OriginAmount, CurrencyUnit: list[i].CurrencyUnit, ArriveAmount: list[i].ArriveAmount, ArriveOriginAmount: list[i].ArriveOriginAmount, InvoiceType: list[i].InvoiceType, InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate), SellerId: list[i].SellerId, SellerName: list[i].SellerName, Remark: list[i].Remark, ServiceProductId: list[i].ServiceProductId, IsPrePay: list[i].IsPrePay, StartDate: list[i].StartDate.Format(utils.FormatDate), EndDate: list[i].StartDate.Format(utils.FormatDate), CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime), }) } return } // ContractPreRegisterList 预登记列表 type ContractPreRegisterList struct { *ContractPreRegisterItem ServicesName string `json:"services" description:"套餐名称"` } // PreRegisterDetailReq 预登记详情请求体 type PreRegisterDetailReq struct { ContractRegisterId int `json:"contract_register_id" form:"contract_register_id" binding:"required,gte=1"` InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"` PreRegisterId int `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"` InvoiceId int `gorm:"column:invoice_id" json:"invoice_id" description:"开票ID"` ArriveId int `gorm:"column:arrive_id" json:"arrive_id" description:"到款ID"` } // ContractPreRegisterDetail 预登记详情 type ContractPreRegisterDetail struct { *ContractRegisterItem List []*ContractInvoiceDetailItem `json:"list" description:"开票到款列表"` Services []*ContractServiceAndDetail `json:"services" description:"套餐列表"` ServiceTemplateIds []int `json:"serviceTemplateIds" description:"小套餐列表"` }