RejectedBill.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Controllers\LogisticNumberFeatureController;
  5. use Carbon\Carbon;
  6. use Illuminate\Database\Eloquent\Model;
  7. use Illuminate\Database\Eloquent\SoftDeletes;
  8. use Illuminate\Support\Facades\Auth;
  9. use Overtrue\LaravelPinyin\Facades\Pinyin;
  10. /**
  11. * @method static find(array|string|null $param)
  12. */use App\Traits\ModelTimeFormat;
  13. class RejectedBill extends Model
  14. {
  15. use ModelTimeFormat;
  16. use SoftDeletes;
  17. protected $fillable=['id_owner','order_number','sender','mobile_sender',
  18. 'logistic_number','logistic_number_return','id_logistic_return',
  19. 'is_loaded','fee_collected','remark','id_operator','is_checked'
  20. ,'is_finished','checked_numbers','remark','common_01','common_02'];
  21. protected $appends = ['owner_name','logistic_name','created_at_short'
  22. ,'is_loaded_str','goods_amount','is_loaded_null','operator_name'];
  23. function owner(){
  24. return $this->hasOne('App\Owner','id','id_owner');
  25. }
  26. function logistic(){
  27. return $this->hasOne('App\Logistic','id','id_logistic_return');
  28. }
  29. function items(){
  30. return $this->hasMany('App\RejectedBillItem','id_rejected_bill','id');
  31. }
  32. function user(){
  33. return $this->hasOne('App\User','id','id_operator');
  34. }
  35. function rejectedBillItems(){
  36. return $this->items();
  37. }
  38. function wmsReflectReceive(){
  39. return $this->belongsTo('App\WMSReflectReceive','id','id_rejected_bill');
  40. }
  41. function setIsLoaded_toWaitConfirm(){
  42. if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"将待推单修改为待确认! 退单号:".$this['logistic_number_return'],Auth::user()['id']);
  43. $bill=RejectedBill::find($this['id']);
  44. $bill['is_loaded']=4;
  45. $bill->save();
  46. }
  47. function logisticName(){
  48. $logistic=$this->hasOne('App\Logistic','id','id_logistic_return')->first();
  49. return $logistic?$logistic['name']:'';
  50. }
  51. function makeCheckedNumbers(){
  52. $owner = $this->owner()->first();
  53. if(!$owner)return '';
  54. $pinyinOwnerName=Pinyin::convert($owner->name);
  55. $pinyinArr=array_map(function($pinyin){
  56. return $pinyin[0];
  57. },$pinyinOwnerName);
  58. $initials=implode("", $pinyinArr);
  59. $this['checked_numbers']=$initials.Carbon::now()->format('Ymd').$owner->getIncreasedCheckingCount();
  60. return $this['checked_numbers'];
  61. }
  62. function orderIssue()
  63. {
  64. return $this->hasOne( OrderIssue::class, 'logistic_number_return', 'logistic_number_return');
  65. }
  66. function update(array $attributes = [], array $options = [])
  67. {
  68. (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  69. return parent::update($attributes, $options);
  70. }
  71. function save(array $options = [])
  72. {
  73. (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  74. return parent::save($options);
  75. }
  76. public function getOwnerNameAttribute(){
  77. $id_owner=$this['id_owner']??0;
  78. $owner=Owner::find($id_owner);
  79. return $this['owner_name']=$owner['name'];
  80. }
  81. public function getLogisticNameAttribute(){
  82. $id_logistic=$this['id_logistic_return']??0;
  83. $logistic=Logistic::find($id_logistic);
  84. return $this['logistic_name']=$logistic['name'];
  85. }
  86. public function getIsLoadedStrAttribute(){
  87. $val=$this['is_loaded']===null?'null':$this['is_loaded'];
  88. $val=$val===0?'0':$val;
  89. switch ($val){
  90. case 'null':return '无需入库';
  91. case '0':return '否';
  92. case 1:return '是';
  93. case 2:return '待推单';
  94. case 3:return '上传异常';
  95. }
  96. return '';
  97. }
  98. public function getCreatedAtShortAttribute(){
  99. return $this['created_at']?$this['created_at_short']=$this['created_at']->format('m-d H:i:s'):'';
  100. }
  101. public function getGoodsAmountAttribute(){
  102. $amount=0;
  103. $this->items()->get()->each(function (RejectedBillItem $item)use(&$amount){
  104. $amount+=$item['amount'];
  105. });
  106. return $amount;
  107. }
  108. public function getOperatorNameAttribute(){
  109. return $this['user'] ? $this['user']['name'] : null;
  110. }
  111. public function getIsLoadedNullAttribute(){
  112. if($this['is_loaded']===null) return 'null';
  113. return $this['is_loaded'];
  114. }
  115. public function changeIsLoaded_ifItemsAllLoaded(){
  116. $allItemsAreLoaded=true;
  117. $this->items->each(function (RejectedBillItem $item)use(&$allItemsAreLoaded){
  118. if($item['is_loaded']=='未入库'){
  119. $allItemsAreLoaded=false;
  120. return false;
  121. }
  122. });
  123. if($allItemsAreLoaded){
  124. $this['is_loaded']=1;
  125. }else{
  126. $this['is_loaded']=0;
  127. }
  128. $this->update();
  129. return $this['is_loaded'];
  130. }
  131. public function 同步问题件退件状态()
  132. {
  133. $orderIssue = $this->orderIssue()->first();
  134. if ($orderIssue ?? false) {
  135. $this->同步退单状态();
  136. $orderIssue->update(['is_new_rejecting' => '有']);
  137. } else {
  138. OrderIssue::query()->where('logistic_number_return', $this->logistic_number_return)->update(['is_new_rejecting' => '有']);
  139. }
  140. }
  141. public function 同步问题件(){
  142. $order = null;
  143. if($this->order_number ?? false){
  144. $order = Order::query()->with('issue')->where('client_code',$this->order_number)->first();
  145. }else if($this->logistic_number_return ?? false){
  146. $asn_header = OracleDOCASNHeader::query()->where('asnreference3',$this->logistic_number_return)->first();
  147. if(!$asn_header)return;
  148. $order_header = OracleDOCOrderHeader::query()->where('soreference1',$asn_header['asnreference1'])->first();
  149. $order = Order::query()->with('issue')->where('code',$order_header['orderno'])->first();
  150. }
  151. if($order['issue'] ?? false){
  152. $order_issue = $order->issue;
  153. $order_issue->update(['logistic_number_return'=>$this->logistic_number_return]);
  154. }
  155. }
  156. private function 同步退单状态()
  157. {
  158. /** @var OrderIssue $orderIssue */
  159. $orderIssue = $this->orderIssue()->first();
  160. if($orderIssue ?? false)
  161. $orderIssue->同步退单状态();
  162. }
  163. }