user()->business_id; $type = request('type') ?? 'sales'; $duration = request('custom_days') ?: 'today'; // SALES QUERY $salesQuery = Sale::with('party', 'payment_type', 'transactions') ->where('business_id', $businessId); $this->applyDateFilter($salesQuery, $duration, 'saleDate', request('from_date'), request('to_date')); if (request('search')) { $search = request('search'); $salesQuery->where(function ($query) use ($search) { $query->where('invoiceNumber', 'like', '%' . $search . '%') ->orWhere('totalAmount', 'like', '%' . $search . '%') ->orWhere('discountAmount', 'like', '%' . $search . '%') ->orWhereHas('party', fn($q) => $q->where('name', 'like', '%' . $search . '%')->orWhere('tax_no', 'like', '%' . $search . '%')); }); } $salesVatTotals = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', SaleDetails::class) ->join('sale_details', 'sale_details.id', '=', 'vat_transactions.vatable_id') ->join('sales', 'sales.id', '=', 'sale_details.sale_id') ->where('sales.business_id', $businessId) ->selectRaw('vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('vat_transactions.vat_id') ->pluck('total','vat_transactions.vat_id') ->toArray(); $salesReturnVatTotals = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', SaleReturnDetails::class) ->join('sale_return_details', 'sale_return_details.id', '=', 'vat_transactions.vatable_id') ->join('sale_details', 'sale_details.id', '=', 'sale_return_details.sale_detail_id') ->join('sales', 'sales.id', '=', 'sale_details.sale_id') ->where('sales.business_id', $businessId) ->selectRaw('vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('vat_transactions.vat_id') ->pluck('total', 'vat_transactions.vat_id') ->toArray(); $saleVatRowMap = VatTransaction::where('business_id', $businessId) ->where('vatable_type', \App\Models\SaleDetails::class) ->whereIn('vatable_id', function ($query) use ($businessId, $duration) { $query->select('sale_details.id') ->from('sale_details') ->join('sales', 'sales.id', '=', 'sale_details.sale_id') ->where('sales.business_id', $businessId); if ($duration === 'custom_days' && request('from_date') && request('to_date')) { $query->whereBetween('sales.saleDate', [request('from_date'), request('to_date')]); } }) ->join('sale_details', 'sale_details.id', '=', 'vat_transactions.vatable_id') ->selectRaw('sale_details.sale_id, vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('sale_details.sale_id', 'vat_transactions.vat_id') ->get() ->groupBy('sale_id') ->map(function ($items) { return $items->pluck('total', 'vat_id')->toArray(); }) ->toArray(); $saleReturnVatRows = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', SaleReturnDetails::class) ->join('sale_return_details','sale_return_details.id','=','vat_transactions.vatable_id') ->join('sale_details','sale_details.id','=','sale_return_details.sale_detail_id') ->join('sales','sales.id','=','sale_details.sale_id') ->selectRaw('sales.id as sale_id, vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as vat_amount') ->groupBy('sales.id','vat_transactions.vat_id') ->get(); $saleReturnVatRowMap = $saleReturnVatRows ->groupBy('sale_id') ->map(fn($rows)=>$rows->pluck('vat_amount','vat_id')) ->toArray(); // PURCHASE QUERY $purchasesQuery = Purchase::with('party', 'payment_type', 'transactions') ->where('business_id', $businessId); $this->applyDateFilter($purchasesQuery, $duration, 'purchaseDate', request('from_date'), request('to_date')); if (request('search')) { $search = request('search'); $purchasesQuery->where(function ($query) use ($search) { $query->where('invoiceNumber', 'like', '%' . $search . '%') ->orWhere('totalAmount', 'like', '%' . $search . '%') ->orWhere('discountAmount', 'like', '%' . $search . '%') ->orWhereHas('party', fn($q) => $q->where('name', 'like', '%' . $search . '%')->orWhere('tax_no', 'like', '%' . $search . '%')); }); } $purchasesVatTotals = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', \App\Models\PurchaseDetails::class) ->join('purchase_details', 'purchase_details.id', '=', 'vat_transactions.vatable_id') ->join('purchases', 'purchases.id', '=', 'purchase_details.purchase_id') ->where('purchases.business_id', $businessId) ->selectRaw('vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('vat_transactions.vat_id') ->pluck('total','vat_transactions.vat_id') ->toArray(); $purchaseReturnVatTotals = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', PurchaseReturnDetail::class) ->join('purchase_return_details', 'purchase_return_details.id', '=', 'vat_transactions.vatable_id') ->join('purchase_details', 'purchase_details.id', '=', 'purchase_return_details.purchase_detail_id') ->join('purchases', 'purchases.id', '=', 'purchase_details.purchase_id') ->where('purchases.business_id', $businessId) ->selectRaw('vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('vat_transactions.vat_id') ->pluck('total', 'vat_transactions.vat_id') ->toArray(); $purchaseVatRowMap = VatTransaction::where('business_id', $businessId) ->where('vatable_type', \App\Models\PurchaseDetails::class) ->whereIn('vatable_id', function ($query) use ($businessId, $duration) { $query->select('purchase_details.id') ->from('purchase_details') ->join('purchases', 'purchases.id', '=', 'purchase_details.purchase_id') ->where('purchases.business_id', $businessId); if ($duration === 'custom_date' && request('from_date') && request('to_date')) { $query->whereBetween('purchases.purchaseDate', [request('from_date'), request('to_date')]); } }) ->join('purchase_details', 'purchase_details.id', '=', 'vat_transactions.vatable_id') ->selectRaw('purchase_details.purchase_id, vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as total') ->groupBy('purchase_details.purchase_id', 'vat_transactions.vat_id') ->get() ->groupBy('purchase_id') ->map(function ($items) { return $items->pluck('total', 'vat_id')->toArray(); }) ->toArray(); $purchaseReturnVatRows = VatTransaction::where('vat_transactions.business_id', $businessId) ->where('vat_transactions.vatable_type', PurchaseReturnDetail::class) ->join('purchase_return_details','purchase_return_details.id','=','vat_transactions.vatable_id') ->join('purchase_details','purchase_details.id','=','purchase_return_details.purchase_detail_id') ->join('purchases','purchases.id','=','purchase_details.purchase_id') ->selectRaw('purchases.id as purchase_id, vat_transactions.vat_id, SUM(vat_transactions.vat_amount) as vat_amount') ->groupBy('purchases.id','vat_transactions.vat_id') ->get(); $purchaseReturnVatRowMap = $purchaseReturnVatRows ->groupBy('purchase_id') ->map(fn($rows) => $rows->pluck('vat_amount','vat_id')) ->toArray(); // TAB CONTROL $sales = collect(); $purchases = collect(); $limit = request('per_page') ?? 20; if ($type === 'sales') { $sales = $salesQuery->latest()->limit($limit)->get(); } if ($type === 'purchases') { $purchases = $purchasesQuery->latest()->limit($limit)->get(); } $vats = Vat::where('business_id', $businessId)->get(); return view('business::reports.vats.excel-csv', compact( 'sales', 'salesVatTotals', 'salesReturnVatTotals', 'saleVatRowMap', 'saleReturnVatRowMap', 'purchases', 'purchasesVatTotals', 'purchaseReturnVatTotals', 'purchaseVatRowMap', 'purchaseReturnVatRowMap', 'vats', 'type' ) ); } }