diff --git a/app/Http/Controllers/Admin/StatisticsController.php b/app/Http/Controllers/Admin/StatisticsController.php index c40604f..c2b96f9 100755 --- a/app/Http/Controllers/Admin/StatisticsController.php +++ b/app/Http/Controllers/Admin/StatisticsController.php @@ -345,33 +345,79 @@ class StatisticsController extends CommonController if (!$projects->count()) { return $this->error($this->noProjects); } + $mode = $request->mode ?: 'customer'; $project_id = request()->project_id ?? $projects->first()->id; $before_date = $request->before_date ?: date("Y-m-d"); $before_datetime = strtotime($before_date . " 23:59:59"); + $before_datetime_text = date("Y-m-d H:i:s", $before_datetime); DB::enableQueryLog(); - $customers = (new Customer()) - ->whereNull("deleted_at") - ->with([ - "patients" => function ($query) use ($before_datetime) { - $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); - }, - // "oneBalance" => function ($query) use ($before_datetime) { -// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); -// } - ]) - // ->whereHas("oneBalance", function ($query) use ($before_datetime) { -// $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->where("balance", ">", 0)->orderBy("id", "desc"); -// }) - ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { - $query - // ->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}") - ->where("project_id", $project_id); - }) - ->get(); + $customers = collect(); + $orderBalances = collect(); + + if ($mode == 'order') { + $orderBalances = Orders::query() + ->withoutGlobalScopes() + ->leftJoin("customers", "customers.id", "=", "orders.customer_id") + ->leftJoin("patient", "patient.id", "=", "orders.patient_id") + ->leftJoin("balance", function ($join) use ($before_datetime_text) { + $join->on("balance.order_id", "=", "orders.id") + ->whereNull("balance.deleted_at") + ->where("balance.created_at", "<=", $before_datetime_text); + }) + ->whereNull("orders.deleted_at") + ->where("orders.project_id", $project_id) + ->whereDate("orders.from_date", "<=", $before_date) + ->whereDate("orders.to_date", ">=", $before_date) + ->groupBy( + "orders.id", + "orders.serial", + "orders.from_date", + "orders.to_date", + "orders.contact", + "orders.mobile", + "customers.mobile", + "patient.name" + ) + ->orderBy("orders.from_date") + ->orderBy("orders.id") + ->get([ + "orders.id", + "orders.serial", + "orders.from_date", + "orders.to_date", + "orders.contact", + "orders.mobile as contact_mobile", + "customers.mobile as customer_mobile", + "patient.name as patient_name", + DB::raw("COALESCE(SUM(balance.money), 0) as balance"), + ]); + } else { + $customers = (new Customer()) + ->whereNull("deleted_at") + ->with([ + "patients" => function ($query) use ($before_datetime) { + $query->whereRaw("UNIX_TIMESTAMP(`created_at`) <= {$before_datetime}")->orderBy("id", "desc"); + }, + ]) + ->whereHas("orders", function ($query) use ($before_datetime, $project_id) { + $query + ->where("project_id", $project_id); + }) + ->get(); + } $laravel_duration = microtime(true) - LARAVEL_START; - return view($this->bladePath . ".customer-balance", compact("customers", "before_datetime", "project_id", "laravel_duration")); + return view($this->bladePath . ".customer-balance", compact( + "customers", + "orderBalances", + "before_datetime", + "before_date", + "before_datetime_text", + "project_id", + "laravel_duration", + "mode" + )); } public function fixMonthLastDayCheckout(Request $request) diff --git a/resources/views/admin/statistics/customer-balance.blade.php b/resources/views/admin/statistics/customer-balance.blade.php index 7d4ab63..f09f435 100755 --- a/resources/views/admin/statistics/customer-balance.blade.php +++ b/resources/views/admin/statistics/customer-balance.blade.php @@ -19,9 +19,23 @@
+
-
+ - -{{-- --}} + @if(($mode ?? 'customer') == 'order') + + @endif
-
客户余额表
- - - - - - - - - - - - @foreach($customers as $item) - @if(!$item->oneBalance) - @continue - @elseif (!($item->oneBalance->balance > 0)) - @continue - @endif - + @if(($mode ?? 'customer') == 'order') +
订单时点余额表
+

统计时点:{{ $before_datetime_text }}

+
序号客户手机号客户家属截止日期未结算余额
+ + + + + + + + + + + + + + + @foreach($orderBalances as $item) + + + + + + + + + + + + @endforeach + +
序号订单号客户手机号联系人联系电话被陪护人服务开始服务结束时点余额
{{ $loop->iteration }}{{ $item->serial }}{{ $item->customer_mobile }}{{ $item->contact }}{{ $item->contact_mobile }}{{ $item->patient_name ?: "无" }}{{ $item->from_date }}{{ $item->to_date }}{{ $item->balance }}
+ @else +
客户余额表
+

统计时点:{{ $before_datetime_text }}

+ + - - - - - + + + + + - @endforeach - -
{{ $loop->iteration }}{{ $item->mobile }}{{ $item->patients->count() ? $item->patients->last()->name : "无" }}{{ date("Y-m-d",$before_datetime) }}{{ $item->balance }}序号客户手机号客户家属截止日期未结算余额
+ + + @foreach($customers as $item) + @if(!$item->oneBalance) + @continue + @elseif (!($item->oneBalance->balance > 0)) + @continue + @endif + + + {{ $loop->iteration }} + {{ $item->mobile }} + {{ $item->patients->count() ? $item->patients->last()->name : "无" }} + {{ $before_date }} + {{ $item->balance }} + + @endforeach + + + @endif