浏览代码

完成部分的退款金额的操作

ChenWuJie 4 年之前
父节点
当前提交
d67561131e

+ 3 - 2
app/Admin/Actions/backstage/Refund/RefundCompleteAction.php

xqd
@@ -15,12 +15,13 @@ class RefundCompleteAction extends RowAction
 
     public function handle(Model $model)
     {
+        $money = Order::where('id',$this->row->order_id)->value('payment_amount');
         Order::where('id',$this->row->order_id)->update(['payment_status'=> 4]);
         RefundApplication::where('id',$this->row->id)->update([ 'end_time'=>date('Y-m-d H:i:s',time()),
                                                                 'financial_auditor'=>\Admin::user()->id,
-                                                                'status'=>2]);
+                                                                'status'=>2,
+                                                                'refund_amount'=> $money]);
         $user_id = Order::where('id',$this->row->order_id)->value('user_id');
-        $money = Order::where('id',$this->row->order_id)->value('payment_amount');
         $balance = User::where('id',$user_id)->value('balance');
         $new_balance = $balance+$money;
         User::where('id',$user_id)->update(['balance'=>$new_balance]);

+ 58 - 0
app/Admin/Actions/backstage/Refund/RefundPartCompleteAction.php

xqd
@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Admin\Actions\backstage\Refund;
+
+use App\Models\Order;
+use App\Models\RefundApplication;
+use App\Models\UserBalanceLog;
+use App\User;
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
+
+class RefundPartCompleteAction extends RowAction
+{
+    public $name = '部分退款完成';
+
+    public function handle(Model $model,Request $request)
+    {
+        $num = request('num');
+        $num = $num*100;
+        $total =  Order::where('id',$this->row->order_id)->value('payment_amount');
+        if ($num>=$total)
+        {
+            return $this->response()->error('部分退款金额不得大于订单金额')->refresh();
+        }
+        if ($num<0)
+        {
+            return $this->response()->error('部分退款金额不得小于0')->refresh();
+        }
+        Order::where('id',$this->row->order_id)->update(['payment_status'=> 4]);
+        RefundApplication::where('id',$this->row->id)->update([ 'end_time'=>date('Y-m-d H:i:s',time()),
+            'financial_auditor'=>\Admin::user()->id,
+            'status'=>2,
+            'refund_amount'=> $num
+        ]);
+        $user_id = Order::where('id',$this->row->order_id)->value('user_id');
+        $balance = User::where('id',$user_id)->value('balance');
+        $new_balance = $balance+$num;
+        User::where('id',$user_id)->update(['balance'=>$new_balance]);
+        $balance_log = [
+            'user_id' => $user_id,
+            'admin_user_id' => \Admin::user()->id,
+            'type' => 4,
+            'relation_id' => $this->row->order_id,
+            'before_balance' => $balance,
+            'change_balance' => '+'.$num,
+            'after_balance' => $new_balance,
+            'remark'=>'订单部分退款'
+        ];
+        UserBalanceLog::create($balance_log);
+        return $this->response()->success('退款成功')->refresh();
+    }
+    public function form(){
+        $total =  Order::where('id',$this->row->order_id)->value('payment_amount');
+        $this->text('total','当前订单金额')->value($total/100)->disable();
+        $this->text('num','部分退款金额')->help('部分退款金额应小于订单金额');
+    }
+}

+ 22 - 1
app/Admin/Controllers/OrdersManagement/BookingOrderController.php

xqd xqd
@@ -3,6 +3,8 @@
 namespace App\Admin\Controllers\OrdersManagement;
 
 use App\Admin\Actions\backstage\Orders\Evaluate;
+use App\Admin\Actions\backstage\Orders\RefundApplicationAction;
+use App\Admin\Actions\backstage\Refund\RefundCompleteAction;
 use App\Models\Order;
 use App\Admin\Actions\backstage\Orders\OrderDetails;
 use App\Models\OrderPack;
@@ -69,7 +71,26 @@ class BookingOrderController extends AdminController
             });
         });
 
-        $grid->disableActions();
+        $grid->actions(function ($actions){
+            // 1.门诊预约和儿保预约有退款操作
+            $actions->disableView();
+            $actions->disableEdit();
+            $actions->disableDelete();
+            if ($actions->row->product_type == 3 || $actions->row->product_type == 5)
+            {
+                if (
+                    //已取消 待退款
+                    ($actions->row->order_status == 5 && $actions->row->payment_status == 5)||
+                    //已超时 已支付
+                    ($actions->row->order_status == 6 && $actions->row->payment_status == 2)){
+                    $actions->add(new RefundApplicationAction());
+                }
+            }
+            //有问题 未支付是订单状态,这里冲突了
+//            if ($actions->row->product_type == 5 && $actions->row->order_status == 5 && $actions->row->payment_status == 2){
+//
+//            }
+        });
         $grid->model()->orderBy('id','desc');
         $grid->column('id', __('Id'))->sortable();
         $grid->column('user.nickname', __('用户姓名'));

+ 3 - 7
app/Admin/Controllers/OrdersManagement/ConsultingOrdersController.php

xqd xqd xqd
@@ -79,10 +79,6 @@ class ConsultingOrdersController extends AdminController
             $actions->disableView();
             $actions->disableEdit();
             $actions->disableDelete();
-           if ($actions->row->order_status == 6 && $actions->row->payment_status !=3 &&$actions->row->payment_status !=4)
-           {
-               $actions->add(new RefundApplicationAction());
-           }
         });
         $grid->model()->orderBy('id','desc');
         $grid->column('id', __('Id'))->sortable();
@@ -91,7 +87,7 @@ class ConsultingOrdersController extends AdminController
         $grid->column('orderPatient.name', __('患者姓名'));
         $grid->column('orderPatient.patient_phone', __('患者电话'));
         $grid->column('orderPatient.symptoms', __('患者描述'));
-        $grid->column('product_type', __('产品类型'))->using([1=>'电话咨询',2=>'图文咨询']);
+        $grid->column('product_type', __('产品类型'))->using([1=>'电话咨询',2=>'图文咨询',3=>'门诊预约',4=>'疫苗接种预约',5=>'儿保预约',6=>'服务包',7=>'充值',8=>'快速预约']);
         $grid->column('payment_type', __('支付方式'))->display(function ($payment_type){
             if ($payment_type == 1)
             {
@@ -106,8 +102,8 @@ class ConsultingOrdersController extends AdminController
                 return '服务包支付('.$name[0].')';
             }
         });
-        $grid->column('order_status', __('订单状态'))->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消',6=>'已超时']);
-        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款']);
+        $grid->column('order_status', __('订单状态'))->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消',6=>'已超时',7=>'已预约']);
+        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款',5=>'待退款']);
         $grid->column('total_amount', __('订单总金额'))->display(function ($money){
             return $money/100;
         });

+ 9 - 14
app/Admin/Controllers/OrdersManagement/RefundApplicationController.php

xqd xqd xqd xqd
@@ -3,6 +3,7 @@
 namespace App\Admin\Controllers\OrdersManagement;
 
 use App\Admin\Actions\backstage\Refund\RefundCompleteAction;
+use App\Admin\Actions\backstage\Refund\RefundPartCompleteAction;
 use App\Models\Organization;
 use App\Models\Patient;
 use App\Models\RefundApplication;
@@ -41,6 +42,7 @@ class RefundApplicationController extends AdminController
            {
                if (\Admin::user()->isRole('financial_staff')){
                    $actions->add(new RefundCompleteAction());
+                   $actions->add(new RefundPartCompleteAction());
                }
            }
         });
@@ -55,21 +57,16 @@ class RefundApplicationController extends AdminController
             $name = Patient::where('id',$id)->value('name');
             return $name;
         });
-        $grid->column('orders.organization_id', __('机构名'))->display(function ($id){
-            if ($id == 0 )
-            {
-                return '';
-            }
-            else
-            {
-                $name = Organization::where('id',$id)->value('name');
-                return $name;
-            }
+        $grid->column('orders.product_type','产品类型')->using([1=>'电话咨询',2=>'图文咨询',3=>'门诊预约',4=>'疫苗接种预约',5=>'儿保预约',6=>'服务包',7=>'充值',8=>'快速预约']);
+        $grid->column('orders.order_notes','取消备注');
+        $grid->column('orders.order_status','订单状态')->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消']);
+        $grid->column('status', __('退款状态'))->using([1=>'退款中',2=>'已退款']);
+        $grid->column('orders.payment_amount', __('订单金额'))->display(function ($money){
+            return $money/100;
         });
-        $grid->column('orders.payment_amount', __('退款金额'))->display(function ($money){
+        $grid->column('refund_amount', __('退款金额'))->display(function ($money){
             return $money/100;
         });
-        $grid->column('status', __('退款状态'))->using([1=>'退款中',2=>'退款完成']);
         $grid->column('refund_applicant', __('退款申请人员'))->display(function ($id){
             $name = Administrator::where('id',$id)->value('name');
             return $name;
@@ -89,8 +86,6 @@ class RefundApplicationController extends AdminController
                 return $time;
             }
         });
-        $grid->column('updated_at', __('更新时间'));
-
         return $grid;
     }