reimbursement.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package dao
  2. import (
  3. "github.com/shopspring/decimal"
  4. "gorm.io/gorm"
  5. "server/dao/system"
  6. "server/global"
  7. )
  8. type Reimbursement struct {
  9. global.GVA_MODEL
  10. ProjectCode string `json:"projectCode" form:"projectCode" gorm:"comment:项目编号"`
  11. Name string `json:"name" form:"name" gorm:"comment:项目名称"`
  12. Applicant string `json:"applicant" form:"applicant" gorm:"comment:报销申请人"`
  13. ApplicationTime string `json:"applicationTime" form:"applicationTime" gorm:"comment:申请日期"`
  14. Approval int `json:"approval" form:"approval" gorm:"comment:报销审批人"`
  15. User system.SysUser `json:"user" form:"user" gorm:"foreignKey:Approval;references:id;"`
  16. ReimbursementPrice decimal.Decimal `json:"reimbursementPrice" form:"reimbursementPrice" gorm:"comment:项目金额;type:decimal(10,2)"`
  17. Genre int `json:"genre" form:"genre" gorm:"comment:费用类型"`
  18. ExpensesGenre ExpensesGenre `json:"expensesGenre" form:"expensesGenre" gorm:"foreignKey:Genre;references:id;"`
  19. FeeDetails []FeeDetails `json:"feeDetails" form:"feeDetails" gorm:"-"`
  20. }
  21. func (Reimbursement) TableName() string {
  22. return "reimbursement"
  23. }
  24. // TODO:报销查询
  25. // QueryReimbursementList 查询报销列表
  26. func QueryReimbursementList(limit, offset int, code, name, time string) (reimbursement []Reimbursement, total int64, err error) {
  27. // 创建db
  28. db := global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code)
  29. // 如果有条件搜索 下方会自动创建搜索语句
  30. if name != "" {
  31. db = db.Where("applicant LIKE ?", "%"+name+"%")
  32. }
  33. if time != "" {
  34. db = db.Where("DATE_FORMAT(application_time, '%Y-%m') = ?", time)
  35. }
  36. err = db.Count(&total).Error
  37. if err != nil {
  38. return
  39. }
  40. err = db.Order("id desc").Limit(limit).Offset(offset).Preload("ExpensesGenre").Preload("User").Find(&reimbursement).Error
  41. return reimbursement, total, err
  42. }
  43. func QueryReimbursement(code string) (reimbursement []Reimbursement, err error) {
  44. err = global.GVA_DB.Model(&Reimbursement{}).Where("project_code = ?", code).Preload("ExpensesGenre").Preload("User").Find(&reimbursement).Error
  45. return reimbursement, err
  46. }
  47. // TODO:报销新增
  48. // CreateReimbursement 新增报销单
  49. func (r Reimbursement) CreateReimbursement() error {
  50. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  51. txErr := tx.Create(&r).Error
  52. if txErr != nil {
  53. return txErr
  54. }
  55. for _, feeDetail := range r.FeeDetails {
  56. feeDetail.ReimbursementId = r.ID
  57. txErr := tx.Create(&feeDetail).Error
  58. if txErr != nil {
  59. return txErr
  60. }
  61. }
  62. return txErr
  63. })
  64. }
  65. // TODO:报销修改
  66. // UpdateReimbursement 修改报销单
  67. func (r Reimbursement) UpdateReimbursement() error {
  68. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  69. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  70. if txErr != nil {
  71. return txErr
  72. }
  73. txErr = tx.Model(&r).Where("id = ?", r.ID).Updates(&r).Error
  74. if txErr != nil {
  75. return txErr
  76. }
  77. for _, feeDetail := range r.FeeDetails {
  78. feeDetail.ReimbursementId = r.ID
  79. txErr := tx.Create(&feeDetail).Error
  80. if txErr != nil {
  81. return txErr
  82. }
  83. }
  84. return txErr
  85. })
  86. }
  87. // TODO:报销删除
  88. // DeleteReimbursement 删除报销单
  89. func (r Reimbursement) DeleteReimbursement() error {
  90. return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
  91. txErr := tx.Unscoped().Where("reimbursement_id = ?", r.ID).Delete(&FeeDetails{}).Error
  92. if txErr != nil {
  93. return txErr
  94. }
  95. txErr = tx.Unscoped().Delete(&r).Error
  96. if txErr != nil {
  97. return txErr
  98. }
  99. return txErr
  100. })
  101. }