MIF_E31222707/app/Http/Controllers/HomeController.php

136 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Modules\Expense\Entities\Expense;
use Modules\Product\Entities\Product;
use Modules\Purchase\Entities\Purchase;
use Modules\PurchasesReturn\Entities\PurchaseReturn;
use Modules\Sale\Entities\Sale;
use Modules\SalesReturn\Entities\SaleReturn;
class HomeController extends Controller
{
public function index() {
$sales = Sale::sum('total_amount');
$sale_returns = SaleReturn::sum('total_amount');
$purchase_returns = PurchaseReturn::sum('total_amount');
$product_costs = 0;
foreach (Sale::with('saleDetails')->get() as $sale) {
foreach ($sale->saleDetails as $saleDetail) {
$product_costs += $saleDetail->product->product_cost;
}
}
$revenue = ($sales - $sale_returns) / 100;
$profit = $revenue - $product_costs;
return view('home', [
'revenue' => $revenue,
'sale_returns' => $sale_returns / 100,
'purchase_returns' => $purchase_returns / 100,
'profit' => $profit
]);
}
public function currentMonthChart() {
$currentMonthSales = Sale::whereMonth('date', date('m'))
->whereYear('date', date('Y'))
->sum('total_amount') / 100;
$currentMonthPurchases = Purchase::whereMonth('date', date('m'))
->whereYear('date', date('Y'))
->sum('total_amount') / 100;
$currentMonthExpenses = Expense::whereMonth('date', date('m'))
->whereYear('date', date('Y'))
->sum('amount') / 100;
return response()->json([
'sales' => $currentMonthSales,
'purchases' => $currentMonthPurchases,
'expenses' => $currentMonthExpenses
]);
}
public function salesPurchasesChart() {
$sales = $this->salesChartData();
$purchases = $this->purchasesChartData();
return response()->json(['sales' => $sales, 'purchases' => $purchases]);
}
public function salesChartData() {
// Build an array of the dates we want to show, the oldest first
$dates = collect();
foreach (range(-6, 0) as $i) {
$date = Carbon::now()->addDays($i)->format('d-m-y');
$dates->put($date, 0);
}
$date_range = Carbon::today()->subDays(6);
// Get the sales counts
$sales = Sale::where('date', '>=', $date_range)
->groupBy(DB::raw("DATE_FORMAT(date,'%d-%m-%y')"))
->orderBy('date', 'asc')
->get([
DB::raw(DB::raw("DATE_FORMAT(date,'%d-%m-%y') as date")),
DB::raw('SUM(total_amount) AS count'),
])
->pluck('count', 'date');
// Merge the two collections;
$dates = $dates->merge($sales);
$data = [];
$days = [];
foreach ($dates as $key => $value) {
$data[] = $value / 100;
$days[] = $key;
}
return response()->json(['data' => $data, 'days' => $days]);
}
public function purchasesChartData() {
// Build an array of the dates we want to show, the oldest first
$dates = collect();
foreach (range(-6, 0) as $i) {
$date = Carbon::now()->addDays($i)->format('d-m-y');
$dates->put($date, 0);
}
$date_range = Carbon::today()->subDays(6);
// Get the purchases counts
$purchases = Purchase::where('date', '>=', $date_range)
->groupBy(DB::raw("DATE_FORMAT(date,'%d-%m-%y')"))
->orderBy('date', 'asc')
->get([
DB::raw(DB::raw("DATE_FORMAT(date,'%d-%m-%y') as date")),
DB::raw('SUM(total_amount) AS count'),
])
->pluck('count', 'date');
// Merge the two collections;
$dates = $dates->merge($purchases);
$data = [];
$days = [];
foreach ($dates as $key => $value) {
$data[] = $value / 100;
$days[] = $key;
}
return response()->json(['data' => $data, 'days' => $days]);
}
}