Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/inventory.corals.io/Corals/modules/Inventory/Classes/Customer.php
<?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');
    }
}

Spamworldpro Mini