![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/inventory.corals.io/Corals/modules/Inventory/Classes/ |
<?php namespace Corals\Modules\Inventory\Classes; use Corals\Modules\Inventory\Classes\Scopes\CreatedAtBetweenScope; use Corals\Modules\Inventory\Models\Order; use Corals\Modules\Payment\Common\Models\Transaction; use Illuminate\Support\Facades\DB; class Customer { protected $start_date; protected $end_date; public function __construct() { $this->start_date = request()->get('start_date', now()->startOfMonth()); $this->end_date = request()->get('end_date', now()->endOfMonth()); } public function paymentTransactionCount($user_id) { $transaction_count = Transaction::query()->where('owner_id', '=', $user_id); (new CreatedAtBetweenScope('payment_transactions', 'transaction_date'))->apply($transaction_count, $this->start_date, $this->end_date); return $transaction_count->count(); } public function paidTransactionsTotal($user_id) { $paid_transaction_total = Transaction::query()->where('owner_id', '=', $user_id); (new CreatedAtBetweenScope('payment_transactions', 'transaction_date'))->apply($paid_transaction_total, $this->start_date, $this->end_date); return $paid_transaction_total->sum('paid_amount'); } public function orderCount($user_id) { $orders_count = Order::query()->where('user_id', '=', $user_id); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($orders_count, $this->start_date, $this->end_date); return $orders_count->count(); } public function pendingOrders($user_id) { $pending_orders = Order::query()->where('user_id', '=', $user_id) ->where('status', '=', 'pending'); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($pending_orders, $this->start_date, $this->end_date); return $pending_orders->get(); } public function completedOrderCount($user_id) { $completed_orders_count = Order::query()->where('user_id', '=', $user_id) ->where('status', '=', 'completed'); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($completed_orders_count, $this->start_date, $this->end_date); return $completed_orders_count->count(); } public function cancelledOrderCount($user_id) { $cancelled_orders_count = Order::query()->where('user_id', '=', $user_id) ->where('status', '=', 'cancelled'); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($cancelled_orders_count, $this->start_date, $this->end_date); return $cancelled_orders_count->count(); } public function customerOrders($user_id) { $orders = Order::query()->select('inv_orders.*') ->join('users', 'inv_orders.user_id', '=', 'users.id') ->where('inv_orders.user_id', '=', $user_id) ->addSelect(DB::raw('order_date as record_date')); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($orders, $this->start_date, $this->end_date); return $orders->get(); } public function customerTransactions($user_id) { $transactions = Transaction::query()->select('payment_transactions.*') ->join('users', 'payment_transactions.owner_id', '=', 'users.id') ->where('payment_transactions.owner_id', '=', $user_id) ->addSelect(DB::raw('transaction_date as record_date')); (new CreatedAtBetweenScope('payment_transactions', 'transaction_date'))->apply($transactions, $this->start_date, $this->end_date); return $transactions->get(); } public function OrdersTotal($user_id): array { $available_currencies = config('inventory.supported_currencies'); $total = []; foreach ($available_currencies as $currency) { $salesOrder = Order::query()->where('user_id', '=', $user_id) ->where('type', '=', 'sales_order') ->where('currency', '=', $currency); $inventoryOrder = Order::query() ->where('type', '=', 'inventory_order') ->where('currency', '=', $currency); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($salesOrder, $this->start_date, $this->end_date); (new CreatedAtBetweenScope('inv_orders', 'order_date'))->apply($inventoryOrder, $this->start_date, $this->end_date); $salesOrderSum = $salesOrder->sum('total'); $inventoryOrderSum = $inventoryOrder->sum('total'); if ($salesOrderSum - $inventoryOrderSum == 0) { continue; } $total[$currency] = sprintf('%s: %d', $currency, $salesOrderSum - $inventoryOrderSum); } return $total; } public function TransactionsTotal($user_id) { $available_currencies = config('inventory.supported_currencies'); $total = []; foreach ($available_currencies as $currency) { $revenueTransaction = Transaction::query()->where('owner_id', '=', $user_id) ->where('type', '=', 'order_revenue') ->where('paid_currency', '=', $currency); $expenseTransaction = Transaction::query() ->where('type', '=', 'expense') ->where('paid_currency', '=', $currency); (new CreatedAtBetweenScope('payment_transactions', 'transaction_date'))->apply($revenueTransaction, $this->start_date, $this->end_date); (new CreatedAtBetweenScope('payment_transactions', 'transaction_date'))->apply($expenseTransaction, $this->start_date, $this->end_date); $transactionRevenueSum = $revenueTransaction->sum('amount'); $transactionExpenseSum = $expenseTransaction->sum('amount'); if ($transactionRevenueSum - $transactionExpenseSum == 0) { continue; } $total[$currency] = sprintf('%s: %d', $currency, $transactionRevenueSum - $transactionExpenseSum); } return $total; } public function customerFullReport($user_id) { $customerOrders = $this->customerOrders($user_id); $customerTransactions = $this->customerTransactions($user_id); return $customerOrders->concat($customerTransactions)->sortBy('record_date'); } }