Browse Source

每日课时,后台取消

lizhen_gitee 1 year ago
parent
commit
63753a8441

+ 88 - 1
application/admin/controller/Lessonslot.php

@@ -3,7 +3,8 @@
 namespace app\admin\controller;
 
 use app\common\controller\Backend;
-
+use think\Db;
+use app\common\library\Email;
 /**
  * 每日课时
  *
@@ -70,4 +71,90 @@ class Lessonslot extends Backend
         return $this->view->fetch();
     }
 
+    /**
+     * 取消
+     */
+    public function cancel(){
+        $id = input('id');
+        $info = Db::name('lesson_slot')->where('id',$id)->where('status',0)->find();
+        if(!$info){
+            $this->error('请刷新重试');
+        }
+
+        if($this->request->isPost()){
+            $remark        = input('remark','');
+            $cancel_reason = input('cancel_reason','');
+            $cancel_time   = strtotime(input('cancel_time',''));
+
+            Db::startTrans();
+            $update = [
+                'remark' => $remark,
+                'cancel_reason' => $cancel_reason,
+                'cancel_time' => $cancel_time
+            ];
+
+            $rs1 = Db::name('lesson_slot')->where('id',$id)->where('status',0)->update($update);
+            if($rs1 === false){
+                Db::rollback();
+                $this->error('取消失败,请刷新重试');
+            }
+
+            //找到所有的已报名订单
+            $lesson_order_list = Db::name('lesson_order')->where('slot_id',$id)->where('order_status',10)->lock(true)->select();
+            if(!empty($lesson_order_list)){
+                foreach($lesson_order_list as $lesson_order){
+                    //套餐给加回去
+                    if($lesson_order['paytype'] == 1){
+                        $package_order = Db::name('package_order')->where('id',$lesson_order['package_order_id'])->lock(true)->find();
+                        $update = [
+                            'remain' => $package_order['remain'] + $lesson_order['usernumber'],
+                            'updatetime' => time(),
+                        ];
+                        $rs_remain = Db::name('package_order')->where('id',$lesson_order['package_order_id'])->update($update);
+                        if($rs_remain === false){
+                            Db::rollback();
+                            $this->error('取消失败');
+                        }
+                    }
+                    //现金支付不给退,线下处理
+
+                    //取消预约单
+                    $update = [
+                        'order_status' => 30,
+                        'cancel_time' => $cancel_time,
+                        'cancel_reason' => $cancel_reason,
+                    ];
+                    if($lesson_order['paytype'] == 1){
+                        $update['order_status'] = 40;
+                    }
+
+                    $rs = Db::name('lesson_order')->where('id',$lesson_order['id'])->update($update);
+                    if($rs === false){
+                        Db::rollback();
+                        $this->error('取消失败');
+                    }
+
+                    //给用户发通知
+                    $user_info = Db::name('user')->where('id',$lesson_order['user_id'])->find();
+                    if($user_info['notice_email'] == 1 && !empty($user_info['email'])){
+                        $obj = new Email();
+                        $result = $obj
+                            ->to($user_info['email'])
+                            ->subject('Elin Dance Studio 订单取消!')
+                            ->message('Hi,'.$user_info['firstname']. ' ' .$user_info['lastname'].',您预约的'.date('Y-m-d H:i:s',$info['starttime']).'的课程已被取消,原因:'.$cancel_reason.'!')
+                            ->send();
+                    }
+
+                }
+            }
+
+            Db::commit();
+            $this->success('取消完成');
+
+        }
+
+        $this->view->assign('row',$info);
+        return $this->view->fetch();
+    }
+
 }

+ 1 - 1
application/admin/view/lessonorder/edit.html

@@ -87,7 +87,7 @@
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Package_order_id')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-package_order_id" disabled data-rule="required" data-source="package/order/index" class="form-control selectpage" name="row[package_order_id]" type="text" value="{$row.package_order_id|htmlentities}">
+            <input id="c-package_order_id" disabled data-rule="required" data-source="packageorder/index" class="form-control selectpage" name="row[package_order_id]" type="text" value="{$row.package_order_id|htmlentities}">
         </div>
     </div>
     <div class="form-group">

+ 50 - 0
application/admin/view/lessonslot/cancel.html

@@ -0,0 +1,50 @@
+<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Starttime')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-starttime" disabled  class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" type="text" value="{:$row.starttime?datetime($row.starttime):''}">
+        </div>
+    </div>
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Endtime')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-endtime" disabled  class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true"  type="text" value="{:$row.endtime?datetime($row.endtime):''}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Num_min')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-num_min" disabled class="form-control"  type="number" value="{$row.num_min|htmlentities}">
+        </div>
+    </div>
+
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-remark" class="form-control" name="remark" type="text" value="{$row.remark|htmlentities}">
+        </div>
+    </div>
+
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Cancel_reason')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-cancel_reason" class="form-control" name="cancel_reason" type="text" value="{$row.cancel_reason|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Cancel_time')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-cancel_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="cancel_time" type="text" value="{:$row.cancel_time?datetime($row.cancel_time):''}">
+        </div>
+    </div>
+    <div class="form-group layer-footer">
+        <label class="control-label col-xs-12 col-sm-2"></label>
+        <div class="col-xs-12 col-sm-8">
+            <button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
+            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
+        </div>
+    </div>
+</form>

+ 3 - 0
application/api/controller/Usercenter.php

@@ -191,6 +191,9 @@ class Usercenter extends Api
             'cancel_time' => time(),
             'cancel_reason' => __('用户主动取消'),
         ];
+        if($lesson_order['paytype'] == 1){
+            $update['order_status'] = 40;
+        }
 
         $rs = Db::name('lesson_order')->where($map)->update($update);
         if($rs === false){

+ 6 - 3
public/assets/js/backend/lessonslot.js

@@ -35,6 +35,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {field: 'num_max', title: __('Num_max')},
                         {field: 'coach_ids', title: __('Coach_ids'), operate: 'LIKE'},
                         {field: 'lesson_id', title: __('Lesson_id')},
+                        {field: 'lesson.name', title: __('Lesson.name'), operate: 'LIKE'},
+                        {field: 'lesson.name_en', title: __('Lesson.name_en'), operate: 'LIKE'},
 //                        {field: 'address', title: __('Address'), operate: 'LIKE'},
                         {field: 'status', title: __('Status'), searchList: {"0":__('Status 0'),"20":__('Status 20'),"30":__('Status 30')}, formatter: Table.api.formatter.status},
 //                        {field: 'remark', title: __('Remark'), operate: 'LIKE'},
@@ -43,9 +45,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {field: 'cancel_reason', title: __('Cancel_reason'), operate: 'LIKE'},
                         {field: 'cancel_time', title: __('Cancel_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
 //                        {field: 'coach.nickname', title: __('Coach.nickname'), operate: 'LIKE'},
-                        {field: 'lesson_id', title: __('Lesson_id')},
-                        {field: 'lesson.name', title: __('Lesson.name'), operate: 'LIKE'},
-                        {field: 'lesson.name_en', title: __('Lesson.name_en'), operate: 'LIKE'},
+
                         {field: 'operate', title: __('Operate'), table: table,
                             buttons:[
                                 {
@@ -75,6 +75,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
         edit: function () {
             Controller.api.bindevent();
         },
+        cancel: function () {
+            Controller.api.bindevent();
+        },
         api: {
             bindevent: function () {
                 Form.api.bindevent($("form[role=form]"));