migrate to gtea from bistbucket
This commit is contained in:
244
Modules/Business/App/Http/Controllers/DashboardController.php
Normal file
244
Modules/Business/App/Http/Controllers/DashboardController.php
Normal file
@@ -0,0 +1,244 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Http\Controllers;
|
||||
|
||||
use App\Models\Business;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Sale;
|
||||
use App\Models\Party;
|
||||
use App\Models\Income;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Product;
|
||||
use App\Models\Purchase;
|
||||
use App\Models\SaleReturn;
|
||||
use App\Models\PurchaseReturn;
|
||||
use App\Models\SaleReturnDetails;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PurchaseReturnDetail;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
|
||||
$allProducts = Product::with('stocks')
|
||||
->withSum('stocks', 'productStock')
|
||||
->where('business_id', $businessId)
|
||||
->latest()
|
||||
->get();
|
||||
|
||||
$stocks = $allProducts->filter(function ($product) {
|
||||
return $product->stocks->sum('productStock') <= $product->alert_qty;
|
||||
})->take(5);
|
||||
|
||||
// Latest sales
|
||||
$sales = Sale::with('party:id,name', 'details')
|
||||
->where('business_id', $businessId)
|
||||
->latest()
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
// Latest purchases
|
||||
$purchases = Purchase::with('details', 'party:id,name')
|
||||
->where('business_id', $businessId)
|
||||
->latest()
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
return view('business::dashboard.index', compact('stocks', 'purchases', 'sales'));
|
||||
}
|
||||
|
||||
public function getDashboardData()
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
|
||||
$data['total_sales'] = currency_format(Sale::where('business_id', $businessId)->sum('totalAmount'), currency: business_currency(), abbreviate: true);
|
||||
$data['this_month_total_sales'] = currency_format(Sale::where('business_id', $businessId)
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->sum('totalAmount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
$data['total_purchase'] = currency_format(Purchase::where('business_id', $businessId)->sum('totalAmount'), currency: business_currency(), abbreviate: true);
|
||||
$data['this_month_total_purchase'] = currency_format(Purchase::where('business_id', $businessId)
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->sum('totalAmount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
// Get total and monthly lossProfit
|
||||
$sale_loss_profit = Sale::where('business_id', auth()->user()->business_id)->sum('lossProfit');
|
||||
$this_month_loss_profit = Sale::where('business_id', auth()->user()->business_id)
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->sum('lossProfit');
|
||||
|
||||
// Get total income and expense
|
||||
$total_income = Income::where('business_id', $businessId)->sum('amount');
|
||||
$this_month_total_income = Income::where('business_id', $businessId)
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->sum('amount');
|
||||
|
||||
$total_expense = Expense::where('business_id', $businessId)->sum('amount');
|
||||
$this_month_total_expense = Expense::where('business_id', $businessId)
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->sum('amount');
|
||||
|
||||
// Update income and expense based on lossProfit value
|
||||
$total_income += $sale_loss_profit > 0 ? $sale_loss_profit : 0;
|
||||
$total_expense += $sale_loss_profit < 0 ? abs($sale_loss_profit) : 0;
|
||||
|
||||
$this_month_total_income += $this_month_loss_profit > 0 ? $this_month_loss_profit : 0;
|
||||
$this_month_total_expense += $this_month_loss_profit < 0 ? abs($this_month_loss_profit) : 0;
|
||||
|
||||
// Format data for display
|
||||
$data['total_income'] = currency_format($total_income, currency: business_currency(), abbreviate: true);
|
||||
$data['this_month_total_income'] = currency_format($this_month_total_income, currency: business_currency(), abbreviate: true);
|
||||
|
||||
$data['total_expense'] = currency_format($total_expense, currency: business_currency(), abbreviate: true);
|
||||
$data['this_month_total_expense'] = currency_format($this_month_total_expense, currency: business_currency(), abbreviate: true);
|
||||
|
||||
|
||||
$data['total_customer'] = Party::where('business_id', $businessId)->where('type', '!=', 'Supplier')->count();
|
||||
$data['this_month_total_customer'] = Party::where('business_id', $businessId)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->count();
|
||||
|
||||
$data['total_supplier'] = Party::where('business_id', $businessId)->whereType('Supplier')->count();
|
||||
$data['this_month_total_supplier'] = Party::where('business_id', $businessId)
|
||||
->whereType('Supplier')
|
||||
->whereMonth('created_at', Carbon::now()->month)
|
||||
->whereYear('created_at', Carbon::now()->year)
|
||||
->count();
|
||||
|
||||
|
||||
$sale_return_id = SaleReturn::where('business_id', $businessId)
|
||||
->pluck('id');
|
||||
$data['total_sales_return'] = currency_format(SaleReturnDetails::whereIn('sale_return_id', $sale_return_id)
|
||||
->sum('return_amount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
|
||||
$saleReturns = SaleReturn::where('business_id', $businessId)
|
||||
->whereYear('return_date', now()->year)
|
||||
->whereMonth('return_date', now()->month)
|
||||
->pluck('id');
|
||||
|
||||
$data['this_month_total_sale_return'] = currency_format(SaleReturnDetails::whereIn('sale_return_id', $saleReturns)
|
||||
->sum('return_amount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
|
||||
|
||||
$purchase_return_id = PurchaseReturn::where('business_id', $businessId)
|
||||
->pluck('id');
|
||||
$data['total_purchase_return'] = currency_format(PurchaseReturnDetail::whereIn('purchase_return_id', $purchase_return_id)
|
||||
->sum('return_amount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
|
||||
$purchaseReturns = PurchaseReturn::where('business_id', $businessId)
|
||||
->whereYear('return_date', now()->year)
|
||||
->whereMonth('return_date', now()->month)
|
||||
->pluck('id');
|
||||
|
||||
$data['this_month_total_purchase_return'] = currency_format(PurchaseReturnDetail::whereIn('purchase_return_id', $purchaseReturns)
|
||||
->sum('return_amount'), currency: business_currency(), abbreviate: true);
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
public function overall_report()
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
|
||||
// Calculate overall values
|
||||
$overall_purchase = Purchase::where('business_id', $businessId)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->sum('totalAmount');
|
||||
|
||||
$overall_sale = Sale::where('business_id', $businessId)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->sum('totalAmount');
|
||||
|
||||
$overall_income = Income::where('business_id', $businessId)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->sum('amount');
|
||||
|
||||
$overall_expense = Expense::where('business_id', $businessId)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->sum('amount');
|
||||
|
||||
// Get the total loss/profit for the month
|
||||
$sale_loss_profit = Sale::where('business_id', $businessId)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->sum('lossProfit');
|
||||
|
||||
// Update income and expense based on lossProfit value
|
||||
$overall_income += $sale_loss_profit > 0 ? $sale_loss_profit : 0;
|
||||
$overall_expense += $sale_loss_profit < 0 ? abs($sale_loss_profit) : 0;
|
||||
|
||||
$data = [
|
||||
'overall_purchase' => $overall_purchase,
|
||||
'overall_sale' => $overall_sale,
|
||||
'overall_income' => $overall_income,
|
||||
'overall_expense' => $overall_expense,
|
||||
];
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
|
||||
public function revenue()
|
||||
{
|
||||
$data['loss'] = Sale::where('business_id', auth()->user()->business_id)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->where('lossProfit', '<', 0)
|
||||
->selectRaw('MONTHNAME(created_at) as month, SUM(ABS(lossProfit)) as total')
|
||||
->orderBy('created_at')
|
||||
->groupBy('created_at')
|
||||
->get();
|
||||
|
||||
$data['profit'] = Sale::where('business_id', auth()->user()->business_id)
|
||||
->whereYear('created_at', request('year') ?? date('Y'))
|
||||
->where('lossProfit', '>=', 0)
|
||||
->selectRaw('MONTHNAME(created_at) as month, SUM(ABS(lossProfit)) as total')
|
||||
->orderBy('created_at')
|
||||
->groupBy('created_at')
|
||||
->get();
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
public function updateExpireDate(Request $request)
|
||||
{
|
||||
$days = $request->query('days', 0);
|
||||
$operation = $request->query('operation');
|
||||
$business = Business::where('id', auth()->user()->business_id)->first();
|
||||
if (!$business) {
|
||||
return response()->json([
|
||||
'message' => 'Business not found.',
|
||||
], 404);
|
||||
}
|
||||
if ($operation === 'add') {
|
||||
$business->will_expire = now()->addDays($days);
|
||||
} elseif ($operation === 'sub') {
|
||||
$business->will_expire = now()->subDays($days);
|
||||
} else {
|
||||
return response()->json([
|
||||
'message' => 'Invalid operation. Use "add" or "sub".',
|
||||
], 400);
|
||||
}
|
||||
$business->save();
|
||||
|
||||
Cache::forget("plan-data-{$business->id}");
|
||||
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Expiry date updated successfully.',
|
||||
'will_expire' => $business->will_expire,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user