|
|
@@ -68,7 +68,7 @@ class OrderIssue extends Model
|
|
|
|
|
|
public function orderIssueRejectedBills(): HasMany
|
|
|
{
|
|
|
- return $this->hasMany(OrderIssueRejectedBill::class);
|
|
|
+ return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id');
|
|
|
}
|
|
|
|
|
|
public function issueType(): BelongsTo
|
|
|
@@ -101,6 +101,11 @@ class OrderIssue extends Model
|
|
|
return $this->hasOne('App\Order', 'client_code', 'second_client_no');
|
|
|
}
|
|
|
|
|
|
+ public function orderDetail(): HasOne
|
|
|
+ {
|
|
|
+ return $this->hasOne(OrderDetail::class,'order_id','order_id');
|
|
|
+ }
|
|
|
+
|
|
|
public function getCreateLogAttribute()
|
|
|
{
|
|
|
return $this->logs->where('type', '创建')->first();
|
|
|
@@ -134,76 +139,76 @@ class OrderIssue extends Model
|
|
|
return $createLog->user->name ?? '';
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 同步退货状态
|
|
|
- */
|
|
|
- public function syncRejectingStatus()
|
|
|
- {
|
|
|
- $this->syncRejectedBillStatus($this);
|
|
|
- }
|
|
|
-
|
|
|
- public function syncRejectedBillStatus($orderIssue)
|
|
|
- {
|
|
|
- if (!$orderIssue->order_id) return;
|
|
|
- $orderIssueMap = [];
|
|
|
- $rejectedMap = [];
|
|
|
- $owner_id = $orderIssue->order->owner_id;
|
|
|
-
|
|
|
- // 获取对应订单的所有商品
|
|
|
- $orderPackageQuery = OrderPackage::query()->selectRaw("id")->where('order_id', $orderIssue->order_id);
|
|
|
- $orderPackageCommodities = OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageQuery)->get();
|
|
|
- foreach ($orderPackageCommodities as $orderPackageCommodity) {
|
|
|
- $code = $orderPackageCommodity->commodity->sku;
|
|
|
- if (empty($orderIssueMap[$code])) $orderIssueMap[$code] = $orderPackageCommodity->amount;
|
|
|
- else $orderIssueMap[$code] += $orderPackageCommodity->amount;
|
|
|
- }
|
|
|
-
|
|
|
- // 获取对应退回单的所有商品
|
|
|
- $orderIssueRejectedBillQuery = OrderIssueRejectedBill::query()->selectRaw("logistic_number_return")->where("order_issue_id", $orderIssue->id);
|
|
|
- $RejectedBills = RejectedBill::query()->with('items.quality')->whereIn("logistic_number_return", $orderIssueRejectedBillQuery)->get();
|
|
|
- /** @var RejectedBill $rejectedBill */
|
|
|
- foreach ($RejectedBills as $rejectedBill) {
|
|
|
- foreach ($rejectedBill->items as $item) {
|
|
|
- $code = $item->barcode_goods;
|
|
|
- $exists = Commodity::query()->where("sku", $code)->where('owner_id',$owner_id)->exists();
|
|
|
- if (!$exists) {
|
|
|
- $commodityBarcodeQuery = CommodityBarcode::query()->select('commodity_id')->where('code',$code);
|
|
|
- $commodity = Commodity::query()->where('owner_id',$owner_id)->whereIn('id',$commodityBarcodeQuery)->first();
|
|
|
- if ($commodity)$code = $commodity->sku;
|
|
|
- }
|
|
|
- $qualityName = $item->quality->name;
|
|
|
- if (empty($rejectedMap[$code]) || empty($rejectedMap[$code][$qualityName])) $rejectedMap[$code][$qualityName] = $item->amount;
|
|
|
- else $rejectedMap[$code][$qualityName] += $item->amount;
|
|
|
- }
|
|
|
- }
|
|
|
- // 比较
|
|
|
- $status = $this->getRejectingStatus($orderIssueMap, $rejectedMap);
|
|
|
- $this->update(['rejecting_status' => $status]);
|
|
|
- $this->syncWorkOrder();
|
|
|
- }
|
|
|
-
|
|
|
- private function getRejectingStatus($orderIssueMap, $rejectedMap): string
|
|
|
- {
|
|
|
- //未退回,差异退回,全部退回,超量退回,部分退回
|
|
|
- if (count($rejectedMap) == 0) return "未退回";
|
|
|
- $equal = 0;
|
|
|
- $portion = 0;
|
|
|
- foreach ($rejectedMap as $key => $map) {
|
|
|
- if (isset($map['残次']) && $map['残次'] > 0) return "差异退回";
|
|
|
- if (empty($orderIssueMap[$key])) return "差异退回";
|
|
|
- if(isset($rejectedMap[$key]['正品']) && isset($orderIssueMap[$key])){
|
|
|
- if ( $rejectedMap[$key]['正品'] < $orderIssueMap[$key]) $portion += 1;
|
|
|
- if ( $rejectedMap[$key]['正品'] > $orderIssueMap[$key]) return "超量退回"; // 超量退回
|
|
|
- if ( $rejectedMap[$key]['正品'] == $orderIssueMap[$key]) $equal += 1;
|
|
|
- }
|
|
|
- }
|
|
|
- if ($equal == count($orderIssueMap) && $equal == count($rejectedMap) && $portion == 0) return "全部退回"; // 全部退回
|
|
|
- if ($portion > 0) return "部分退回"; // 部分退回
|
|
|
- // 部分退回
|
|
|
- if (count(array_diff_key($orderIssueMap,$rejectedMap)) > 0)return '部分退回';
|
|
|
- if (count(array_diff_key($rejectedMap,$orderIssueMap)) > 0)return '差异退回';
|
|
|
- return "无";
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 同步退货状态
|
|
|
+// */
|
|
|
+// public function syncRejectingStatus()
|
|
|
+// {
|
|
|
+// $this->syncRejectedBillStatus($this);
|
|
|
+// }
|
|
|
+
|
|
|
+// public function syncRejectedBillStatus($orderIssue)
|
|
|
+// {
|
|
|
+// if (!$orderIssue->order_id) return;
|
|
|
+// $orderIssueMap = [];
|
|
|
+// $rejectedMap = [];
|
|
|
+// $owner_id = $orderIssue->order->owner_id;
|
|
|
+//
|
|
|
+// // 获取对应订单的所有商品
|
|
|
+// $orderPackageQuery = OrderPackage::query()->selectRaw("id")->where('order_id', $orderIssue->order_id);
|
|
|
+// $orderPackageCommodities = OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageQuery)->get();
|
|
|
+// foreach ($orderPackageCommodities as $orderPackageCommodity) {
|
|
|
+// $code = $orderPackageCommodity->commodity->sku;
|
|
|
+// if (empty($orderIssueMap[$code])) $orderIssueMap[$code] = $orderPackageCommodity->amount;
|
|
|
+// else $orderIssueMap[$code] += $orderPackageCommodity->amount;
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 获取对应退回单的所有商品
|
|
|
+// $orderIssueRejectedBillQuery = OrderIssueRejectedBill::query()->selectRaw("logistic_number_return")->where("order_issue_id", $orderIssue->id);
|
|
|
+// $RejectedBills = RejectedBill::query()->with('items.quality')->whereIn("logistic_number_return", $orderIssueRejectedBillQuery)->get();
|
|
|
+// /** @var RejectedBill $rejectedBill */
|
|
|
+// foreach ($RejectedBills as $rejectedBill) {
|
|
|
+// foreach ($rejectedBill->items as $item) {
|
|
|
+// $code = $item->barcode_goods;
|
|
|
+// $exists = Commodity::query()->where("sku", $code)->where('owner_id',$owner_id)->exists();
|
|
|
+// if (!$exists) {
|
|
|
+// $commodityBarcodeQuery = CommodityBarcode::query()->select('commodity_id')->where('code',$code);
|
|
|
+// $commodity = Commodity::query()->where('owner_id',$owner_id)->whereIn('id',$commodityBarcodeQuery)->first();
|
|
|
+// if ($commodity)$code = $commodity->sku;
|
|
|
+// }
|
|
|
+// $qualityName = $item->quality->name;
|
|
|
+// if (empty($rejectedMap[$code]) || empty($rejectedMap[$code][$qualityName])) $rejectedMap[$code][$qualityName] = $item->amount;
|
|
|
+// else $rejectedMap[$code][$qualityName] += $item->amount;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// // 比较
|
|
|
+// $status = $this->getRejectingStatus($orderIssueMap, $rejectedMap);
|
|
|
+// $this->update(['rejecting_status' => $status]);
|
|
|
+// $this->syncWorkOrder();
|
|
|
+// }
|
|
|
+
|
|
|
+// private function getRejectingStatus($orderIssueMap, $rejectedMap): string
|
|
|
+// {
|
|
|
+// //未退回,差异退回,全部退回,超量退回,部分退回
|
|
|
+// if (count($rejectedMap) == 0) return "未退回";
|
|
|
+// $equal = 0;
|
|
|
+// $portion = 0;
|
|
|
+// foreach ($rejectedMap as $key => $map) {
|
|
|
+// if (isset($map['残次']) && $map['残次'] > 0) return "差异退回";
|
|
|
+// if (empty($orderIssueMap[$key])) return "差异退回";
|
|
|
+// if(isset($rejectedMap[$key]['正品']) && isset($orderIssueMap[$key])){
|
|
|
+// if ( $rejectedMap[$key]['正品'] < $orderIssueMap[$key]) $portion += 1;
|
|
|
+// if ( $rejectedMap[$key]['正品'] > $orderIssueMap[$key]) return "超量退回"; // 超量退回
|
|
|
+// if ( $rejectedMap[$key]['正品'] == $orderIssueMap[$key]) $equal += 1;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if ($equal == count($orderIssueMap) && $equal == count($rejectedMap) && $portion == 0) return "全部退回"; // 全部退回
|
|
|
+// if ($portion > 0) return "部分退回"; // 部分退回
|
|
|
+// // 部分退回
|
|
|
+// if (count(array_diff_key($orderIssueMap,$rejectedMap)) > 0)return '部分退回';
|
|
|
+// if (count(array_diff_key($rejectedMap,$orderIssueMap)) > 0)return '差异退回';
|
|
|
+// return "无";
|
|
|
+// }
|
|
|
|
|
|
public function delete()
|
|
|
{
|
|
|
@@ -217,64 +222,64 @@ class OrderIssue extends Model
|
|
|
return parent::delete();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 同步退货单号
|
|
|
- */
|
|
|
- public function syncRejectedBills()
|
|
|
- {
|
|
|
- $order_packages = $this->order->packages;
|
|
|
- if($order_packages){
|
|
|
- foreach ($order_packages as $order_package) {
|
|
|
- $logistic_number = $order_package->logistic_number;
|
|
|
- $rejectedBill = RejectedBill::query()->where('logistic_number_return',$logistic_number)->first();
|
|
|
- if($rejectedBill){
|
|
|
- if(OrderIssueRejectedBill::isExit($this->id,$logistic_number))continue;
|
|
|
- $this->joinRejectedBill($logistic_number);
|
|
|
- if(isset($rejectedBill->items))
|
|
|
- $this->is_new_rejecting = '有';
|
|
|
- }
|
|
|
- }
|
|
|
- $this->save();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public function syncRejected($logistic_number)
|
|
|
- {
|
|
|
- $query = RejectedBill::query()->selectRaw('id');
|
|
|
- if(is_array($logistic_number)){
|
|
|
- $query->whereIn('logistic_number_return',$logistic_number);
|
|
|
- }elseif (is_string($logistic_number)){
|
|
|
- $query->where('logistic_number_return',$logistic_number);
|
|
|
- }else return;
|
|
|
- $items = RejectedBillItem::query()->whereIn('id_rejected_bill',$query);
|
|
|
- if($items->count() > 0) $this->update(['is_new_rejecting'=>'有']);
|
|
|
- elseif($items->count() == 0) $this->update(['is_new_rejecting'=>'无']);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * @param array|string $logistic_number
|
|
|
- * @return array|void
|
|
|
- */
|
|
|
- public function joinRejectedBill($logistic_number)
|
|
|
- {
|
|
|
- if(!$logistic_number)return null;
|
|
|
- $this->syncRejected($logistic_number);
|
|
|
- if(is_array($logistic_number)){
|
|
|
- return $this->rejectedBills()->sync($logistic_number,false);
|
|
|
- }
|
|
|
- return $this->rejectedBills()->attach($logistic_number);
|
|
|
- }
|
|
|
-
|
|
|
- public function unJoinRejectedBill($logistic_number)
|
|
|
- {
|
|
|
- return $this->rejectedBills()->detach($logistic_number);
|
|
|
- }
|
|
|
-
|
|
|
- public function reviseJoinRejectedBill($logistic_number,$logistic_number_update)
|
|
|
- {
|
|
|
- return $this->rejectedBills()->updateExistingPivot($logistic_number,['logistic_number_return'=>$logistic_number_update]);
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 同步退货单号
|
|
|
+// */
|
|
|
+// public function syncRejectedBills()
|
|
|
+// {
|
|
|
+// $order_packages = $this->order->packages;
|
|
|
+// if($order_packages){
|
|
|
+// foreach ($order_packages as $order_package) {
|
|
|
+// $logistic_number = $order_package->logistic_number;
|
|
|
+// $rejectedBill = RejectedBill::query()->where('logistic_number_return',$logistic_number)->first();
|
|
|
+// if($rejectedBill){
|
|
|
+// if(OrderIssueRejectedBill::isExit($this->id,$logistic_number))continue;
|
|
|
+// $this->joinRejectedBill($logistic_number);
|
|
|
+// if(isset($rejectedBill->items))
|
|
|
+// $this->is_new_rejecting = '有';
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $this->save();
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// public function syncRejected($logistic_number)
|
|
|
+// {
|
|
|
+// $query = RejectedBill::query()->selectRaw('id');
|
|
|
+// if(is_array($logistic_number)){
|
|
|
+// $query->whereIn('logistic_number_return',$logistic_number);
|
|
|
+// }elseif (is_string($logistic_number)){
|
|
|
+// $query->where('logistic_number_return',$logistic_number);
|
|
|
+// }else return;
|
|
|
+// $items = RejectedBillItem::query()->whereIn('id_rejected_bill',$query);
|
|
|
+// if($items->count() > 0) $this->update(['is_new_rejecting'=>'有']);
|
|
|
+// elseif($items->count() == 0) $this->update(['is_new_rejecting'=>'无']);
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+// /**
|
|
|
+// * @param array|string $logistic_number
|
|
|
+// * @return array|void
|
|
|
+// */
|
|
|
+// public function joinRejectedBill($logistic_number)
|
|
|
+// {
|
|
|
+// if(!$logistic_number)return null;
|
|
|
+// $this->syncRejected($logistic_number);
|
|
|
+// if(is_array($logistic_number)){
|
|
|
+// return $this->rejectedBills()->sync($logistic_number,false);
|
|
|
+// }
|
|
|
+// return $this->rejectedBills()->attach($logistic_number);
|
|
|
+// }
|
|
|
+//
|
|
|
+// public function unJoinRejectedBill($logistic_number)
|
|
|
+// {
|
|
|
+// return $this->rejectedBills()->detach($logistic_number);
|
|
|
+// }
|
|
|
+//
|
|
|
+// public function reviseJoinRejectedBill($logistic_number,$logistic_number_update)
|
|
|
+// {
|
|
|
+// return $this->rejectedBills()->updateExistingPivot($logistic_number,['logistic_number_return'=>$logistic_number_update]);
|
|
|
+// }
|
|
|
|
|
|
public function scopeFilter($query, $filters)
|
|
|
{
|
|
|
@@ -306,7 +311,7 @@ class OrderIssue extends Model
|
|
|
$query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity.barcodes']);
|
|
|
},'orderIssueRejectedBills.rejectedBill'=>function($query){
|
|
|
$query->with(['owner','logistic','user','items.quality']);
|
|
|
- },'userWorkgroups','userOwnerGroup']);
|
|
|
+ },'userWorkgroups','userOwnerGroup','orderDetail']);
|
|
|
|
|
|
}
|
|
|
|