mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-27 19:51:09 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Crater\Http\Controllers\V1\Admin\Report;
 | |
| 
 | |
| use PDF;
 | |
| use Carbon\Carbon;
 | |
| use Crater\Models\Company;
 | |
| use Crater\Models\Currency;
 | |
| use Crater\Models\Customer;
 | |
| use Illuminate\Http\Request;
 | |
| use Crater\Models\CompanySetting;
 | |
| use Illuminate\Support\Facades\App;
 | |
| use Crater\Http\Controllers\Controller;
 | |
| 
 | |
| class CustomerSalesReportController extends Controller
 | |
| {
 | |
|     /**
 | |
|      * Handle the incoming request.
 | |
|      *
 | |
|      * @param  \Illuminate\Http\Request  $request
 | |
|      * @param  string  $hash
 | |
|      * @return \Illuminate\Http\JsonResponse
 | |
|      */
 | |
|     public function __invoke(Request $request, $hash)
 | |
|     {
 | |
|         $company = Company::where('unique_hash', $hash)->first();
 | |
| 
 | |
|         $this->authorize('view report', $company);
 | |
| 
 | |
|         $locale = CompanySetting::getSetting('language',  $company->id);
 | |
| 
 | |
|         App::setLocale($locale);
 | |
| 
 | |
|         $start = Carbon::createFromFormat('Y-m-d', $request->from_date);
 | |
|         $end = Carbon::createFromFormat('Y-m-d', $request->to_date);
 | |
| 
 | |
|         $customers = Customer::with(['invoices' => function ($query) use ($start, $end) {
 | |
|             $query->whereBetween(
 | |
|                 'invoice_date',
 | |
|                 [$start->format('Y-m-d'), $end->format('Y-m-d')]
 | |
|             );
 | |
|         }])
 | |
|             ->where('company_id', $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->base_total;
 | |
|             }
 | |
|             $customer->totalAmount = $customerTotalAmount;
 | |
|             $totalAmount += $customerTotalAmount;
 | |
|         }
 | |
| 
 | |
|         $dateFormat = CompanySetting::getSetting('carbon_date_format', $company->id);
 | |
|         $from_date = Carbon::createFromFormat('Y-m-d', $request->from_date)->format($dateFormat);
 | |
|         $to_date = Carbon::createFromFormat('Y-m-d', $request->to_date)->format($dateFormat);
 | |
|         $currency = Currency::findOrFail(CompanySetting::getSetting('currency', $company->id));
 | |
| 
 | |
|         $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,
 | |
|             'currency' => $currency,
 | |
|         ]);
 | |
| 
 | |
|         $pdf = PDF::loadView('app.pdf.reports.sales-customers');
 | |
| 
 | |
|         if ($request->has('preview')) {
 | |
|             return view('app.pdf.reports.sales-customers');
 | |
|         }
 | |
| 
 | |
|         if ($request->has('download')) {
 | |
|             return $pdf->download();
 | |
|         }
 | |
| 
 | |
|         return $pdf->stream();
 | |
|     }
 | |
| }
 |