Invoice.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace app\admin\model\shopro\order;
  3. use app\admin\model\shopro\Common;
  4. use app\admin\model\shopro\user\User;
  5. use app\admin\model\shopro\user\Invoice as UserInvoiceModel;
  6. class Invoice extends Common
  7. {
  8. protected $name = 'shopro_order_invoice';
  9. protected $type = [
  10. 'download_urls' => 'array',
  11. 'finish_time' => 'timestamp'
  12. ];
  13. protected $hidden = [
  14. 'order_items'
  15. ];
  16. // 追加属性
  17. protected $append = [
  18. 'type_text',
  19. 'status_text'
  20. ];
  21. public function typeList()
  22. {
  23. return (new UserInvoiceModel)->typeList();
  24. }
  25. /**
  26. * 状态
  27. *
  28. * @return array
  29. */
  30. public function statusList()
  31. {
  32. return [
  33. 'cancel' => '已取消',
  34. 'unpaid' => '未支付',
  35. 'waiting' => '等待开票',
  36. 'finish' => '已开具',
  37. ];
  38. }
  39. public function getOrderStatusAttr($value, $data)
  40. {
  41. $order = $this->order;
  42. $order_status = 'normal';
  43. if (!$order) {
  44. $order_status = 'order_deleted';
  45. } else if (in_array($order->status, [Order::STATUS_PAID, Order::STATUS_COMPLETED])) {
  46. $items = $this->order_items;
  47. $refund_num = 0;
  48. $aftersale_num = 0;
  49. foreach ($items as $item) {
  50. if (in_array($item->refund_status, [
  51. OrderItem::REFUND_STATUS_AGREE,
  52. OrderItem::REFUND_STATUS_COMPLETED
  53. ])) {
  54. $refund_num += 1;
  55. }
  56. if (in_array($item->aftersale_status, [
  57. OrderItem::AFTERSALE_STATUS_REFUSE,
  58. OrderItem::AFTERSALE_STATUS_ING,
  59. OrderItem::AFTERSALE_STATUS_COMPLETED
  60. ])) {
  61. $aftersale_num += 1;
  62. }
  63. }
  64. if ($refund_num) {
  65. $order_status = 'refund';
  66. if ($refund_num == count($items)) {
  67. $order_status = 'refund_all';
  68. }
  69. } else if ($aftersale_num) {
  70. $order_status = 'aftersale';
  71. }
  72. } else if ($order->isOffline($order)) {
  73. $order_status = 'offline_unpaid';
  74. }
  75. return $order_status;
  76. }
  77. public function getOrderStatusTextAttr($value, $data)
  78. {
  79. $order_status = $this->order_status;
  80. switch($order_status) {
  81. case 'order_deleted':
  82. $order_status_text = '该订单已被删除';
  83. break;
  84. case 'refund_all':
  85. $order_status_text = '该订单已全部退款';
  86. break;
  87. case 'refund':
  88. $order_status_text = '该订单已部分退款';
  89. break;
  90. case 'aftersale':
  91. $order_status_text = '该订单已申请售后';
  92. break;
  93. case 'offline_unpaid':
  94. $order_status_text = '该订单货到付款-未付款';
  95. break;
  96. default :
  97. $order_status_text = '';
  98. }
  99. return $order_status_text;
  100. }
  101. public function getOrderFeeAttr($value, $data)
  102. {
  103. $order = $this->order;
  104. if ($order && $order->pay_fee != $order->original_pay_fee) {
  105. return [
  106. 'pay_fee' => $order->pay_fee,
  107. 'original_pay_fee' => $order->original_pay_fee,
  108. ];
  109. }
  110. return null;
  111. }
  112. public function scopeCancel($query)
  113. {
  114. return $query->where('status', 'cancel');
  115. }
  116. public function scopeWaiting($query)
  117. {
  118. return $query->where('status', 'waiting');
  119. }
  120. public function scopeFinish($query)
  121. {
  122. return $query->where('status', 'finish');
  123. }
  124. /**
  125. * 不展示 未支付的
  126. */
  127. public function scopeShow($query)
  128. {
  129. return $query->whereIn('status', ['cancel', 'waiting', 'finish']);
  130. }
  131. public function user()
  132. {
  133. return $this->belongsTo(User::class, 'user_id', 'id');
  134. }
  135. public function order()
  136. {
  137. return $this->belongsTo(Order::class, 'order_id', 'id');
  138. }
  139. public function orderItems()
  140. {
  141. return $this->hasMany(OrderItem::class, 'order_id', 'order_id');
  142. }
  143. }