diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index ddd3d47..2d40c82 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -133,10 +133,10 @@ class OrdersController extends CommonController public function list() { - $data = (new Orders()); + $model = $this->_getOrderModel(); if (request()->keyword) { $keyword = request()->keyword; - $data = $data->where(function ($query) use ($keyword) { + $model = $model->where(function ($query) use ($keyword) { $query ->where("serial", "like", "%{$keyword}%") ->orWhereHas("patient", function ($query) use ($keyword) { @@ -149,42 +149,27 @@ class OrdersController extends CommonController switch (request()->status) { case "unconfirmed": - $data = $data + $model = $model ->where("status", Orders::STATUS_UNCONFIRMED) ->ofProject($this->manager->projects->pluck("id")->toArray()); break; case "unassigned": case "ongoing": case "finished": - $data = $data + $model = $model ->where("status", constant(Orders::class . "::STATUS_" . strtoupper(request()->status))) ->ofProject($this->manager->projects->pluck("id")->toArray()); break; default: - $data = $data + $model = $model ->ofProject($this->manager->projects->pluck("id")->toArray()); } $page_size = request()->page_size ?? 5; - $data = $data - ->with([ - "patient" => function ($query) { - $query->select("id", "customer_id", "name", "sex", "age"); - }, - "productItem", - "productParamedicLevel", - "bed" => function ($query) { - $query->with(["room", "building"])->select("id", "room_id", "building_id"); - }, - "paramedic" => function ($query) { - $query->select(); - } - ]) - ->orderBy("id", "desc") - ->select("id", "serial", "customer_id", "patient_id", "project_id", "product_id", "manager_id", "from_date", "to_date", "remark", "status", "contact", "mobile", "price", "patient_quantity") - ->paginate($page_size); + $data = $model->orderBy("id", "desc")->paginate($page_size); foreach ($data as $order) { $order = $order->refreshTotal(); + $order->balance = $order->customer->balance; } return response()->json($data->toArray()); } @@ -205,52 +190,63 @@ class OrdersController extends CommonController public function getOrder($id) { - $order = (new Orders())->with([ - "orderItems" => function ($query) { - $query->with([ - "bed" => function ($query) { - $query->with(["room", "building"]); - }, - "room", - "building", - "paramedic", - "productParamedicLevel", - "paramedicLevel" - ]); - }, - "project", - "product" => function ($query) { - $query->with(["productParamedicLevels" => function ($query) { - $query->with("paramedicLevel"); - }]); - }, - "customer", - "manager", - "patient", - "productItem", - "productParamedicLevel", - "bed" => function ($query) { - $query->with(["room", "building"]); - }, - "room", - "building", - "paramedic", - "handlingApprovalItem" => function ($query) { - $query->with("approval"); - }, - "recharges" => function ($query) { - $query->with("manager"); - }, - "refunds" => function ($query) { - $query->with("manager"); - } - ])->find($id); + $model = $this->_getOrderModel(); + $order = $model->find($id); $order = $order->refreshTotal(); $order->balance = $order->customer->balance; return response()->json($order->toArray()); } + public function _getOrderModel() + { + $model = $order = (new Orders()) + ->select( + "orders.id", + "orders.serial", + "orders.customer_id", + "orders.manager_id", + "orders.bed_id", + "orders.patient_id", + "orders.project_id", + "orders.product_id", + "orders.from_date", + "orders.to_date", + "orders.status", + "orders.total", + "orders.paid_total", + "orders.contact", + "orders.mobile", + "orders.paramedic_id", + "orders.price", + "orders.factors", + "orders.patient_quantity", + "orders.created_at" + ) + ->with([ + "project" => function ($query) { + $query->select("id", "name"); + }, + "bed" => function ($query) { + $query->select("bed.id", "bed.name") + ->leftJoin("building", "building.id", "=", "bed.building_id") + ->leftJoin("area", "area.id", "=", "bed.area_id") + ->leftJoin("room", "room.id", "=", "bed.room_id") + ->addSelect("room.name as room_name", "area.name as area_name", "building.name as building_name"); + }, + "customer" => function ($query) { + $query->select("id", "name", "balance"); + }, + "patient" => function ($query) { + $query->select("id", "name", "sex", "age", "mobile"); + }, + "paramedic" => function ($query) { + $query->select("id", "name", "mobile"); + } + ]); + return $model; + } + /** * @OA\Get( * path="/manager/get-project-areas/{project_id}", diff --git a/app/Models/Orders.php b/app/Models/Orders.php index 676bfce..5d5d2c4 100755 --- a/app/Models/Orders.php +++ b/app/Models/Orders.php @@ -21,7 +21,7 @@ class Orders extends SoftDeletesModel const TEXT_ONGOING = "进行中"; const TEXT_FINISHED = "已完成"; - protected $appends = ["status_name"]; + protected $appends = ["status_name", "days"]; public function getStatusLabelAttribute($pure_text = true) { @@ -52,6 +52,11 @@ class Orders extends SoftDeletesModel return $this->getStatusLabelAttribute(); } + public function getDaysAttribute() + { + return Carbon::parse($this->from_date)->diffInDays($this->to_date); + } + protected static function booted() { static::addGlobalScope(new AdminProjectScope()); @@ -261,7 +266,7 @@ class Orders extends SoftDeletesModel $total = $items_total + $un_generated_total; break; case self::STATUS_FINISHED: - $total = $this->orderItems()->sum("total"); + $total = $order_items->sum("total"); } if ($order_items->last()) {