105 lines
3.1 KiB
Go
105 lines
3.1 KiB
Go
package value_objects
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
// InvoiceInfo 发票信息值对象
|
|
type InvoiceInfo struct {
|
|
CompanyName string `json:"company_name"` // 公司名称
|
|
TaxpayerID string `json:"taxpayer_id"` // 纳税人识别号
|
|
BankName string `json:"bank_name"` // 基本开户银行
|
|
BankAccount string `json:"bank_account"` // 基本开户账号
|
|
CompanyAddress string `json:"company_address"` // 企业注册地址
|
|
CompanyPhone string `json:"company_phone"` // 企业注册电话
|
|
ReceivingEmail string `json:"receiving_email"` // 发票接收邮箱
|
|
}
|
|
|
|
// NewInvoiceInfo 创建发票信息值对象
|
|
func NewInvoiceInfo(companyName, taxpayerID, bankName, bankAccount, companyAddress, companyPhone, receivingEmail string) *InvoiceInfo {
|
|
return &InvoiceInfo{
|
|
CompanyName: strings.TrimSpace(companyName),
|
|
TaxpayerID: strings.TrimSpace(taxpayerID),
|
|
BankName: strings.TrimSpace(bankName),
|
|
BankAccount: strings.TrimSpace(bankAccount),
|
|
CompanyAddress: strings.TrimSpace(companyAddress),
|
|
CompanyPhone: strings.TrimSpace(companyPhone),
|
|
ReceivingEmail: strings.TrimSpace(receivingEmail),
|
|
}
|
|
}
|
|
|
|
// ValidateForGeneralInvoice 验证普票信息
|
|
func (ii *InvoiceInfo) ValidateForGeneralInvoice() error {
|
|
if ii.CompanyName == "" {
|
|
return errors.New("公司名称不能为空")
|
|
}
|
|
if ii.TaxpayerID == "" {
|
|
return errors.New("纳税人识别号不能为空")
|
|
}
|
|
if ii.ReceivingEmail == "" {
|
|
return errors.New("发票接收邮箱不能为空")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ValidateForSpecialInvoice 验证专票信息
|
|
func (ii *InvoiceInfo) ValidateForSpecialInvoice() error {
|
|
// 先验证普票必填项
|
|
if err := ii.ValidateForGeneralInvoice(); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 专票额外必填项
|
|
if ii.BankName == "" {
|
|
return errors.New("基本开户银行不能为空")
|
|
}
|
|
if ii.BankAccount == "" {
|
|
return errors.New("基本开户账号不能为空")
|
|
}
|
|
if ii.CompanyAddress == "" {
|
|
return errors.New("企业注册地址不能为空")
|
|
}
|
|
if ii.CompanyPhone == "" {
|
|
return errors.New("企业注册电话不能为空")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// IsComplete 检查信息是否完整(专票要求)
|
|
func (ii *InvoiceInfo) IsComplete() bool {
|
|
return ii.CompanyName != "" &&
|
|
ii.TaxpayerID != "" &&
|
|
ii.BankName != "" &&
|
|
ii.BankAccount != "" &&
|
|
ii.CompanyAddress != "" &&
|
|
ii.CompanyPhone != "" &&
|
|
ii.ReceivingEmail != ""
|
|
}
|
|
|
|
// GetMissingFields 获取缺失的字段(专票要求)
|
|
func (ii *InvoiceInfo) GetMissingFields() []string {
|
|
var missing []string
|
|
if ii.CompanyName == "" {
|
|
missing = append(missing, "公司名称")
|
|
}
|
|
if ii.TaxpayerID == "" {
|
|
missing = append(missing, "纳税人识别号")
|
|
}
|
|
if ii.BankName == "" {
|
|
missing = append(missing, "基本开户银行")
|
|
}
|
|
if ii.BankAccount == "" {
|
|
missing = append(missing, "基本开户账号")
|
|
}
|
|
if ii.CompanyAddress == "" {
|
|
missing = append(missing, "企业注册地址")
|
|
}
|
|
if ii.CompanyPhone == "" {
|
|
missing = append(missing, "企业注册电话")
|
|
}
|
|
if ii.ReceivingEmail == "" {
|
|
missing = append(missing, "发票接收邮箱")
|
|
}
|
|
return missing
|
|
} |