mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-03 22:13:18 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			296 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			296 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace Laraspace\Http\Controllers;
 | 
						|
 | 
						|
use Illuminate\Http\Request;
 | 
						|
use Laraspace\User;
 | 
						|
use Laraspace\Invoice;
 | 
						|
use Laraspace\Company;
 | 
						|
use Laraspace\InvoiceItem;
 | 
						|
use Laraspace\Expense;
 | 
						|
use Laraspace\CompanySetting;
 | 
						|
use Laraspace\Tax;
 | 
						|
use PDF;
 | 
						|
use Carbon\Carbon;
 | 
						|
use Illuminate\Database\Eloquent\Builder;
 | 
						|
 | 
						|
class ReportController extends Controller
 | 
						|
{
 | 
						|
    public function customersSalesReport($hash, Request $request)
 | 
						|
    {
 | 
						|
        $company = Company::where('unique_hash', $hash)->first();
 | 
						|
 | 
						|
        $start = Carbon::createFromFormat('d/m/Y', $request->from_date);
 | 
						|
        $end = Carbon::createFromFormat('d/m/Y', $request->to_date);
 | 
						|
 | 
						|
        $customers = User::with(['invoices' => function ($query) use ($start, $end) {
 | 
						|
                $query->whereBetween(
 | 
						|
                    'invoice_date',
 | 
						|
                    [$start->format('Y-m-d'), $end->format('Y-m-d')]
 | 
						|
                )
 | 
						|
                ->where('paid_status', Invoice::STATUS_PAID);
 | 
						|
            }])
 | 
						|
            ->customer()
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->applyInvoiceFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->get();
 | 
						|
 | 
						|
        $totalAmount = 0;
 | 
						|
        foreach ($customers as $customer) {
 | 
						|
            $customerTotalAmount = 0;
 | 
						|
            foreach ($customer->invoices as $invoice) {
 | 
						|
                $customerTotalAmount += $invoice->total;
 | 
						|
            }
 | 
						|
            $customer->totalAmount = $customerTotalAmount;
 | 
						|
            $totalAmount += $customerTotalAmount;
 | 
						|
        }
 | 
						|
 | 
						|
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | 
						|
        $from_date = Carbon::createFromFormat('d/m/Y', $request->from_date)->format($dateFormat);
 | 
						|
        $to_date = Carbon::createFromFormat('d/m/Y', $request->to_date)->format($dateFormat);
 | 
						|
 | 
						|
        $colors = [
 | 
						|
            'primary_text_color',
 | 
						|
            'heading_text_color',
 | 
						|
            'section_heading_text_color',
 | 
						|
            'border_color',
 | 
						|
            'body_text_color',
 | 
						|
            'footer_text_color',
 | 
						|
            'footer_total_color',
 | 
						|
            'footer_bg_color',
 | 
						|
            'date_text_color'
 | 
						|
        ];
 | 
						|
        $colorSettings = CompanySetting::whereIn('option', $colors)
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->get();
 | 
						|
 | 
						|
        view()->share([
 | 
						|
            'customers' => $customers,
 | 
						|
            'totalAmount' => $totalAmount,
 | 
						|
            'colorSettings' => $colorSettings,
 | 
						|
            'company' => $company,
 | 
						|
            'from_date' => $from_date,
 | 
						|
            'to_date' => $to_date
 | 
						|
        ]);
 | 
						|
        $pdf = PDF::loadView('app.pdf.reports.sales-customers');
 | 
						|
 | 
						|
        if ($request->has('download')) {
 | 
						|
            return $pdf->download();
 | 
						|
        }
 | 
						|
 | 
						|
        return $pdf->stream();
 | 
						|
    }
 | 
						|
 | 
						|
    public function itemsSalesReport($hash, Request $request)
 | 
						|
    {
 | 
						|
        $company = Company::where('unique_hash', $hash)->first();
 | 
						|
 | 
						|
        $items = InvoiceItem::with('item')
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->applyInvoiceFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->itemAttributes()
 | 
						|
            ->get();
 | 
						|
 | 
						|
        $totalAmount = 0;
 | 
						|
        foreach ($items as $item) {
 | 
						|
            $totalAmount += $item->total_amount;
 | 
						|
        }
 | 
						|
 | 
						|
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | 
						|
        $from_date = Carbon::createFromFormat('d/m/Y', $request->from_date)->format($dateFormat);
 | 
						|
        $to_date = Carbon::createFromFormat('d/m/Y', $request->to_date)->format($dateFormat);
 | 
						|
 | 
						|
        $colors = [
 | 
						|
            'primary_text_color',
 | 
						|
            'heading_text_color',
 | 
						|
            'section_heading_text_color',
 | 
						|
            'border_color',
 | 
						|
            'body_text_color',
 | 
						|
            'footer_text_color',
 | 
						|
            'footer_total_color',
 | 
						|
            'footer_bg_color',
 | 
						|
            'date_text_color'
 | 
						|
        ];
 | 
						|
        $colorSettings = CompanySetting::whereIn('option', $colors)
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->get();
 | 
						|
 | 
						|
        view()->share([
 | 
						|
            'items' => $items,
 | 
						|
            'colorSettings' => $colorSettings,
 | 
						|
            'totalAmount' => $totalAmount,
 | 
						|
            'company' => $company,
 | 
						|
            'from_date' => $from_date,
 | 
						|
            'to_date' => $to_date
 | 
						|
        ]);
 | 
						|
        $pdf = PDF::loadView('app.pdf.reports.sales-items');
 | 
						|
 | 
						|
        if ($request->has('download')) {
 | 
						|
            return $pdf->download();
 | 
						|
        }
 | 
						|
 | 
						|
        return $pdf->stream();
 | 
						|
    }
 | 
						|
 | 
						|
    public function expensesReport($hash, Request $request)
 | 
						|
    {
 | 
						|
        $company = Company::where('unique_hash', $hash)->first();
 | 
						|
 | 
						|
        $expenseCategories = Expense::with('category')
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->applyFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->expensesAttributes()
 | 
						|
            ->get();
 | 
						|
 | 
						|
        $totalAmount = 0;
 | 
						|
        foreach ($expenseCategories as $category) {
 | 
						|
            $totalAmount += $category->total_amount;
 | 
						|
        }
 | 
						|
 | 
						|
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | 
						|
        $from_date = Carbon::createFromFormat('d/m/Y', $request->from_date)->format($dateFormat);
 | 
						|
        $to_date = Carbon::createFromFormat('d/m/Y', $request->to_date)->format($dateFormat);
 | 
						|
 | 
						|
        $colors = [
 | 
						|
            'primary_text_color',
 | 
						|
            'heading_text_color',
 | 
						|
            'section_heading_text_color',
 | 
						|
            'border_color',
 | 
						|
            'body_text_color',
 | 
						|
            'footer_text_color',
 | 
						|
            'footer_total_color',
 | 
						|
            'footer_bg_color',
 | 
						|
            'date_text_color'
 | 
						|
        ];
 | 
						|
        $colorSettings = CompanySetting::whereIn('option', $colors)
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->get();
 | 
						|
 | 
						|
        view()->share([
 | 
						|
            'expenseCategories' => $expenseCategories,
 | 
						|
            'colorSettings' => $colorSettings,
 | 
						|
            'totalExpense' => $totalAmount,
 | 
						|
            'company' => $company,
 | 
						|
            'from_date' => $from_date,
 | 
						|
            'to_date' => $to_date
 | 
						|
        ]);
 | 
						|
        $pdf = PDF::loadView('app.pdf.reports.expenses');
 | 
						|
 | 
						|
        if ($request->has('download')) {
 | 
						|
            return $pdf->download();
 | 
						|
        }
 | 
						|
 | 
						|
        return $pdf->stream();
 | 
						|
    }
 | 
						|
 | 
						|
    public function taxSummery($hash, Request $request)
 | 
						|
    {
 | 
						|
        $company = Company::where('unique_hash', $hash)->first();
 | 
						|
 | 
						|
        $taxTypes = Tax::with('taxType', 'invoice', 'invoiceItem')
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->whereInvoicesFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->taxAttributes()
 | 
						|
            ->get();
 | 
						|
 | 
						|
        $totalAmount = 0;
 | 
						|
        foreach ($taxTypes as $taxType) {
 | 
						|
            $totalAmount += $taxType->total_tax_amount;
 | 
						|
        }
 | 
						|
 | 
						|
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | 
						|
        $from_date = Carbon::createFromFormat('d/m/Y', $request->from_date)->format($dateFormat);
 | 
						|
        $to_date = Carbon::createFromFormat('d/m/Y', $request->to_date)->format($dateFormat);
 | 
						|
 | 
						|
        $colors = [
 | 
						|
            'primary_text_color',
 | 
						|
            'heading_text_color',
 | 
						|
            'section_heading_text_color',
 | 
						|
            'border_color',
 | 
						|
            'body_text_color',
 | 
						|
            'footer_text_color',
 | 
						|
            'footer_total_color',
 | 
						|
            'footer_bg_color',
 | 
						|
            'date_text_color'
 | 
						|
        ];
 | 
						|
 | 
						|
        $colorSettings = CompanySetting::whereIn('option', $colors)
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->get();
 | 
						|
 | 
						|
        view()->share([
 | 
						|
            'taxTypes' => $taxTypes,
 | 
						|
            'totalTaxAmount' => $totalAmount,
 | 
						|
            'colorSettings' => $colorSettings,
 | 
						|
            'company' => $company,
 | 
						|
            'from_date' => $from_date,
 | 
						|
            'to_date' => $to_date
 | 
						|
        ]);
 | 
						|
 | 
						|
        $pdf = PDF::loadView('app.pdf.reports.tax-summary');
 | 
						|
 | 
						|
        if ($request->has('download')) {
 | 
						|
            return $pdf->download();
 | 
						|
        }
 | 
						|
 | 
						|
        return $pdf->stream();
 | 
						|
    }
 | 
						|
 | 
						|
    public function profitLossReport($hash, Request $request)
 | 
						|
    {
 | 
						|
        $company = Company::where('unique_hash', $hash)->first();
 | 
						|
 | 
						|
        $invoicesAmount = Invoice::whereCompany($company->id)
 | 
						|
            ->applyFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->wherePaidStatus(Invoice::STATUS_PAID)
 | 
						|
            ->sum('total');
 | 
						|
 | 
						|
        $expenseCategories = Expense::with('category')
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->applyFilters($request->only(['from_date', 'to_date']))
 | 
						|
            ->expensesAttributes()
 | 
						|
            ->get();
 | 
						|
 | 
						|
        $totalAmount = 0;
 | 
						|
        foreach ($expenseCategories as $category) {
 | 
						|
            $totalAmount += $category->total_amount;
 | 
						|
        }
 | 
						|
 | 
						|
        $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | 
						|
        $from_date = Carbon::createFromFormat('d/m/Y', $request->from_date)->format($dateFormat);
 | 
						|
        $to_date = Carbon::createFromFormat('d/m/Y', $request->to_date)->format($dateFormat);
 | 
						|
 | 
						|
        $colors = [
 | 
						|
            'primary_text_color',
 | 
						|
            'heading_text_color',
 | 
						|
            'section_heading_text_color',
 | 
						|
            'border_color',
 | 
						|
            'body_text_color',
 | 
						|
            'footer_text_color',
 | 
						|
            'footer_total_color',
 | 
						|
            'footer_bg_color',
 | 
						|
            'date_text_color'
 | 
						|
        ];
 | 
						|
        $colorSettings = CompanySetting::whereIn('option', $colors)
 | 
						|
            ->whereCompany($company->id)
 | 
						|
            ->get();
 | 
						|
 | 
						|
        view()->share([
 | 
						|
            'company' => $company,
 | 
						|
            'income' => $invoicesAmount,
 | 
						|
            'expenseCategories' => $expenseCategories,
 | 
						|
            'totalExpense' => $totalAmount,
 | 
						|
            'colorSettings' => $colorSettings,
 | 
						|
            'company' => $company,
 | 
						|
            'from_date' => $from_date,
 | 
						|
            'to_date' => $to_date
 | 
						|
        ]);
 | 
						|
        $pdf = PDF::loadView('app.pdf.reports.profit-loss');
 | 
						|
 | 
						|
        if ($request->has('download')) {
 | 
						|
            return $pdf->download();
 | 
						|
        }
 | 
						|
 | 
						|
        return $pdf->stream();
 | 
						|
    }
 | 
						|
}
 |