RejectedBill.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. /*
  22. * id_owner 货主
  23. * order_number 订单号 OracleDOCOrderHeader->SOReference1
  24. * mobile_sender 电话 OracleDOCOrderHeader->[c_tell1,c_tell2]
  25. * logistic_number 原单单号
  26. * logistic_number_return 退回单号
  27. * id_logistic_return
  28. * is_loaded 是否入库
  29. * fee_collected 到付费用
  30. * remark 备注 OracleDOCOrderHeader->notes
  31. * id_operator
  32. * is_checked 是否审核
  33. * is_finished 是否完结
  34. * checked_numbers 审核编号
  35. */
  36. protected $appends = ['owner_name','logistic_name','created_at_short'
  37. ,'is_loaded_str','goods_amount','is_loaded_null','operator_name'];
  38. function owner(){
  39. return $this->hasOne('App\Owner','id','id_owner');
  40. }
  41. function logistic(){
  42. return $this->hasOne('App\Logistic','id','id_logistic_return');
  43. }
  44. function items(){
  45. return $this->hasMany('App\RejectedBillItem','id_rejected_bill','id');
  46. }
  47. function user(){
  48. return $this->hasOne('App\User','id','id_operator');
  49. }
  50. function rejectedBillItems(){
  51. return $this->items();
  52. }
  53. function wmsReflectReceive(){
  54. return $this->belongsTo('App\WMSReflectReceive','id','id_rejected_bill');
  55. }
  56. function orderIssue(){
  57. return $this->hasOne( OrderIssue::class, 'logistic_number_return', 'logistic_number_return');
  58. }
  59. function setIsLoaded_toWaitConfirm(){
  60. if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"将待推单修改为待确认! 退单号:".$this['logistic_number_return'],Auth::user()['id']);
  61. $bill=RejectedBill::find($this['id']);
  62. $bill['is_loaded']=4;
  63. $bill->save();
  64. }
  65. function logisticName(){
  66. $logistic=$this->hasOne('App\Logistic','id','id_logistic_return')->first();
  67. return $logistic?$logistic['name']:'';
  68. }
  69. function makeCheckedNumbers(){
  70. $owner = $this->owner()->first();
  71. if(!$owner)return '';
  72. $pinyinOwnerName=Pinyin::convert($owner->name);
  73. $pinyinArr=array_map(function($pinyin){
  74. return $pinyin[0];
  75. },$pinyinOwnerName);
  76. $initials=implode("", $pinyinArr);
  77. $this['checked_numbers']=$initials.Carbon::now()->format('Ymd').$owner->getIncreasedCheckingCount();
  78. return $this['checked_numbers'];
  79. }
  80. function update(array $attributes = [], array $options = [])
  81. {
  82. (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  83. return parent::update($attributes, $options);
  84. }
  85. function save(array $options = [])
  86. {
  87. if($this['logistic_number_return'])(new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
  88. return parent::save($options);
  89. }
  90. public function getOwnerNameAttribute(){
  91. return $this->owner['name']??'';
  92. }
  93. public function getLogisticNameAttribute(){
  94. return $this->logistic['name']??'';
  95. }
  96. public function getIsLoadedStrAttribute(){
  97. $val=$this['is_loaded']===null?'null':$this['is_loaded'];
  98. $val=$val===0?'0':$val;
  99. switch ($val){
  100. case 'null':return '无需入库';
  101. case '0':return '否';
  102. case 1:return '是';
  103. case 2:return '待推单';
  104. case 3:return '上传异常';
  105. }
  106. return '';
  107. }
  108. public function getCreatedAtShortAttribute(){
  109. return $this['created_at']?$this['created_at_short']=$this['created_at']->format('m-d H:i:s'):'';
  110. }
  111. public function getGoodsAmountAttribute(){
  112. $amount=0;
  113. $this->items->each(function (RejectedBillItem $item)use(&$amount){
  114. $amount+=$item['amount'];
  115. });
  116. return $amount;
  117. }
  118. public function getOperatorNameAttribute(){
  119. return $this['user'] ? $this['user']['name'] : null;
  120. }
  121. public function getIsLoadedNullAttribute(){
  122. if($this['is_loaded']===null) return 'null';
  123. return $this['is_loaded'];
  124. }
  125. public function changeIsLoaded_ifItemsAllLoaded(){
  126. $allItemsAreLoaded=true;
  127. $this->items->each(function (RejectedBillItem $item)use(&$allItemsAreLoaded){
  128. if($item['is_loaded']=='未入库'){
  129. $allItemsAreLoaded=false;
  130. return false;
  131. }
  132. });
  133. if($allItemsAreLoaded){
  134. $this['is_loaded']=1;
  135. }else{
  136. $this['is_loaded']=0;
  137. }
  138. $this->update();
  139. return $this['is_loaded'];
  140. }
  141. public function 同步问题件退件状态()
  142. {
  143. $orderIssue = $this->orderIssue()->first();
  144. if ($orderIssue ?? false) {
  145. // $this->同步退单状态();
  146. $orderIssue->update(['is_new_rejecting' => '有']);
  147. } else {
  148. OrderIssue::query()->where('logistic_number_return', $this->logistic_number_return)->update(['is_new_rejecting' => '有']);
  149. }
  150. }
  151. public function 同步问题件()
  152. {
  153. $orderIssue = $this->orderIssue()->first();
  154. if(!isset($orderIssue)){
  155. if(isset($this->order_number)){
  156. $orderNumber = $this->order_number;
  157. $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderNumber){
  158. $query->where('client_code',$orderNumber);
  159. })->first();
  160. }
  161. if(isset($this->logistic_number_return) && !isset($orderIssue)){
  162. $logistic_number_return = $this->logistic_number_return;
  163. $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($logistic_number_return){
  164. $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$logistic_number_return)->first();
  165. })->first();
  166. $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
  167. $query->where('code',$orderHeader->orderno);
  168. })->first();
  169. }
  170. }
  171. if(isset($orderIssue)){
  172. // $orderIssue->同步退单状态();
  173. $orderIssue->update(['is_new_rejecting' => '有']);
  174. }
  175. }
  176. private function 同步退单状态()
  177. {
  178. /** @var OrderIssue $orderIssue */
  179. $orderIssue = $this->orderIssue()->first();
  180. if($orderIssue ?? false)
  181. $orderIssue->同步退单状态();
  182. }
  183. }