reimbursement.go 2.9 KB

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