update marketing
All checks were successful
All checks were successful
This commit is contained in:
@@ -4,36 +4,42 @@
|
||||
|
||||
use App\Models\PaymentType;
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportBalanceSheet implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$duration = request('custom_days') ? : 'today';
|
||||
$fromDate = request('from_date');
|
||||
$toDate = request('to_date');
|
||||
$perPage = request('per_page') ?? 20;
|
||||
|
||||
// PRODUCT
|
||||
$productQuery = Product::select('id', 'business_id', 'productName', 'product_type', 'created_at')
|
||||
->with(['stocks:id,business_id,product_id,productStock,productPurchasePrice', 'combo_products.stock'])
|
||||
->where('business_id', $businessId);
|
||||
$this->applyDateFilter($productQuery, $duration, 'created_at', $fromDate, $toDate);
|
||||
$products = $productQuery->get()
|
||||
->map(function ($item) {
|
||||
$item->source = 'product';
|
||||
return $item;
|
||||
});
|
||||
|
||||
// BANK
|
||||
$bankQuery = PaymentType::where('business_id', $businessId);
|
||||
$this->applyDateFilter($bankQuery, $duration, 'opening_date', $fromDate, $toDate);
|
||||
$banks = $bankQuery->get()
|
||||
->map(function ($item) {
|
||||
$item->source = 'bank';
|
||||
return $item;
|
||||
});
|
||||
|
||||
$asset_datas = $products->merge($banks);
|
||||
$asset_datas = $products->merge($banks)->take($perPage);
|
||||
|
||||
// TOTAL STOCK VALUE
|
||||
$total_stock_value = 0;
|
||||
foreach ($products as $product) {
|
||||
if (in_array($product->product_type, ['single', 'variant'])) {
|
||||
|
||||
@@ -3,17 +3,42 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Sale;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportBillWisePofit implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$profits = Sale::with('party:id,name')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->latest()
|
||||
->get();
|
||||
$salesQuery = Sale::with('party:id,name')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
|
||||
$salesQuery->when(request('search'), function ($query) {
|
||||
$query->where(function ($q) {
|
||||
$q->where('lossProfit', 'like', '%' . request('search') . '%')
|
||||
->orWhere('totalAmount', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$salesQuery->when(request('party_id'), function ($query, $partyId) {
|
||||
if ($partyId === 'Guest') {
|
||||
$query->whereNull('party_id');
|
||||
} else {
|
||||
$query->where('party_id', $partyId);
|
||||
}
|
||||
});
|
||||
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($salesQuery, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
|
||||
$profits = $salesQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::bill-wise-profits.excel-csv', compact('profits'));
|
||||
}
|
||||
|
||||
42
Modules/Business/App/Exports/ExportCashBalance.php
Normal file
42
Modules/Business/App/Exports/ExportCashBalance.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\PaymentType;
|
||||
use App\Models\Product;
|
||||
use App\Models\Transaction;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportCashBalance implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$cash = Transaction::with('user:id,name')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereIn('transaction_type', ['cash_payment', 'bank_to_cash', 'cash_to_bank', 'adjust_cash', 'cheque_to_cash']);
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($cash, $duration, 'date', request('from_date'), request('to_date'));
|
||||
|
||||
$cashes = $cash->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('date', 'like', '%' . request('search') . '%')
|
||||
->orWhere('platform', 'like', '%' . request('search'). '%')
|
||||
->orWhere('transaction_type', 'like', '%' . request('search') . '%')
|
||||
->orWhere('amount', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('user', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::cashes.excel-csv', compact('cashes'));
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,17 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Transaction;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportCashFlowReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$cash_flows = Transaction::with([
|
||||
$query = Transaction::with([
|
||||
'paymentType:id,name',
|
||||
'sale:id,party_id',
|
||||
'sale.party:id,name',
|
||||
@@ -22,11 +25,44 @@ public function view(): View
|
||||
'dueCollect.party:id,name',
|
||||
])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereIn('type', ['debit', 'credit'])
|
||||
->latest()
|
||||
->get();
|
||||
->whereIn('type', ['debit', 'credit']);
|
||||
|
||||
$opening_balance = 0;
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($query, $duration, 'date', request('from_date'), request('to_date'));
|
||||
|
||||
// Search filter
|
||||
if (request('search')) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('date', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoice_no', 'like', '%' . request('search') . '%')
|
||||
->orWhere('platform', 'like', '%' . request('search') . '%')
|
||||
->orWhere('amount', 'like', '%' . request('search') . '%')
|
||||
->orWhere('transaction_type', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('paymentType', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Platform filter
|
||||
if (request('platform')) {
|
||||
$query->where('platform', request('platform'));
|
||||
}
|
||||
|
||||
// Paginate data
|
||||
$cash_flows = $query->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$firstDate = $cash_flows->first()?->date;
|
||||
|
||||
if ($firstDate) {
|
||||
$opening_balance = (clone $query)
|
||||
->whereDate('date', '<', $firstDate)
|
||||
->selectRaw("SUM(CASE WHEN type='credit' THEN amount ELSE 0 END) - SUM(CASE WHEN type='debit' THEN amount ELSE 0 END) as balance")
|
||||
->value('balance') ?? 0;
|
||||
} else {
|
||||
$opening_balance = 0;
|
||||
}
|
||||
|
||||
return view('business::cash-flow.excel-csv', compact('cash_flows', 'opening_balance'));
|
||||
}
|
||||
|
||||
@@ -11,12 +11,39 @@ class ExportComboProduct implements FromView
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$combo_products = Product::with(['combo_products', 'unit:id,unitName', 'category:id,categoryName'])
|
||||
$user = auth()->user();
|
||||
|
||||
$branchId = null;
|
||||
if (moduleCheck('MultiBranchAddon')) {
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
}
|
||||
|
||||
$search = request('search');
|
||||
|
||||
$combo_products = Product::with(['combo_products.stock.product', 'unit:id,unitName', 'category:id,categoryName'])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('product_type', 'combo')
|
||||
->withCount('combo_products as total_combo_products')
|
||||
->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('productName', 'like', '%' . $search . '%')
|
||||
->orWhere('productCode', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('categoryName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('unit', function ($q) use ($search) {
|
||||
$q->where('unitName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('combo_products.stock', function ($q) use ($branchId) {
|
||||
$q->where('branch_id', $branchId);
|
||||
});
|
||||
})
|
||||
|
||||
->latest()
|
||||
->get();
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$combo_products->transform(function ($product) {
|
||||
$product->total_stock = $product->combo_products->sum(function ($combo) {
|
||||
@@ -29,7 +56,7 @@ public function view(): View
|
||||
|
||||
return $product;
|
||||
});
|
||||
|
||||
|
||||
return view('business::products.combo-products.excel-csv', [
|
||||
'combo_products' => $combo_products
|
||||
]);
|
||||
|
||||
@@ -11,12 +11,39 @@ class ExportComboProductReport implements FromView
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$combo_products = Product::with(['combo_products', 'unit:id,unitName', 'category:id,categoryName'])
|
||||
$user = auth()->user();
|
||||
|
||||
$branchId = null;
|
||||
if (moduleCheck('MultiBranchAddon')) {
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
}
|
||||
|
||||
$search = request('search');
|
||||
|
||||
$combo_products = Product::with(['combo_products.stock.product', 'unit:id,unitName', 'category:id,categoryName'])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('product_type', 'combo')
|
||||
->withCount('combo_products as total_combo_products')
|
||||
->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('productName', 'like', '%' . $search . '%')
|
||||
->orWhere('productCode', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('categoryName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('unit', function ($q) use ($search) {
|
||||
$q->where('unitName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('combo_products.stock', function ($q) use ($branchId) {
|
||||
$q->where('branch_id', $branchId);
|
||||
});
|
||||
})
|
||||
|
||||
->latest()
|
||||
->get();
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$combo_products->transform(function ($product) {
|
||||
$product->total_stock = $product->combo_products->sum(function ($combo) {
|
||||
|
||||
@@ -10,21 +10,58 @@ class ExportCurrentStock implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$query = Product::with('stocks')
|
||||
->where('product_type', '!=', 'combo')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
$businessId = auth()->user()->business_id;
|
||||
$alert_qty_filter = request('alert_qty');
|
||||
$search_term = request('search');
|
||||
$per_page = request('per_page', 20);
|
||||
|
||||
if (request('alert_qty')) {
|
||||
$products = $query->get()->filter(function ($product) {
|
||||
$totalStock = $product->stocks->sum('productStock');
|
||||
return $totalStock <= $product->alert_qty;
|
||||
// Base query
|
||||
$query = Product::with('stocks', 'category:id,categoryName')
|
||||
->where('product_type', '!=', 'combo')
|
||||
->where('business_id', $businessId);
|
||||
|
||||
if ($search_term) {
|
||||
$query->where(function ($q) use ($search_term) {
|
||||
$q->where('productName', 'like', '%' . $search_term . '%')
|
||||
->orWhere('productCode', 'like', '%' . $search_term . '%')
|
||||
->orWhere('hsn_code', 'like', '%' . $search_term . '%')
|
||||
->orWhereHas('category', function ($q) use ($search_term) {
|
||||
$q->where('categoryName', 'like', '%' . $search_term . '%');
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$products = $query->latest()->get();
|
||||
}
|
||||
|
||||
return view('business::stocks.excel-csv', [
|
||||
'products' => $products
|
||||
]);
|
||||
if ($alert_qty_filter) {
|
||||
$products = $query
|
||||
->withSum('stocks as total_stock', 'productStock')
|
||||
->havingRaw('total_stock <= alert_qty')
|
||||
->latest()
|
||||
->limit($per_page)
|
||||
->get();
|
||||
|
||||
$total_stock_qty = $products->sum('total_stock');
|
||||
|
||||
$total_stock_value = $products->sum(function ($product) {
|
||||
return $product->stocks->sum(function ($stock) {
|
||||
return $stock->productStock * $stock->productPurchasePrice;
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$products = $query
|
||||
->withSum('stocks as total_stock', 'productStock')
|
||||
->latest()
|
||||
->limit($per_page)
|
||||
->get();
|
||||
|
||||
$total_stock_qty = $products->sum('total_stock');
|
||||
|
||||
$total_stock_value = $products->sum(function ($product) {
|
||||
return $product->stocks->sum(function ($stock) {
|
||||
return $stock->productStock * $stock->productPurchasePrice;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return view('business::stocks.excel-csv', compact('products', 'total_stock_qty', 'total_stock_value'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,13 +10,27 @@ class ExportCurrentStockReport implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.stocks.excel-csv', [
|
||||
'stock_reports' => Product::with('stocks')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('product_type', '!=', 'combo')
|
||||
->withSum('stocks', 'productStock')
|
||||
->latest()
|
||||
->get()
|
||||
]);
|
||||
$productsQuery = Product::with(['stocks' => function ($q) {
|
||||
$q->select('id', 'product_id', 'productStock', 'productPurchasePrice', 'productSalePrice');
|
||||
}])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('product_type', '!=', 'combo');
|
||||
|
||||
if (request('search')) {
|
||||
$productsQuery->where(function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('stocks', function ($stock) {
|
||||
$stock->where('productSalePrice', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productPurchasePrice', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$stock_reports = $productsQuery
|
||||
->latest()
|
||||
->limit($request->per_page ?? 20)
|
||||
->get();
|
||||
|
||||
return view('business::reports.stocks.excel-csv', compact('stock_reports'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,20 @@ public function view(): View
|
||||
$customers = Party::with('sales')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->when(request('type'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('type', request('type'));
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->get();
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$totalAmount = $customers->sum(function ($customer) {
|
||||
return $customer->sales?->sum('totalAmount') ?? 0;
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Transaction;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportDayBookReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$day_books = Transaction::with([
|
||||
$query = Transaction::with([
|
||||
'paymentType:id,name',
|
||||
'sale:id,user_id,party_id,totalAmount',
|
||||
'sale.party:id,name',
|
||||
@@ -25,9 +28,34 @@ public function view(): View
|
||||
'dueCollect.user:id,name',
|
||||
])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereIn('type', ['debit', 'credit'])
|
||||
->latest()
|
||||
->get();
|
||||
->whereIn('type', ['debit', 'credit']);
|
||||
|
||||
// Apply date filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($query, $duration, 'date', request('from_date'), request('to_date'));
|
||||
|
||||
// Search filter
|
||||
if (request('search')) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('date', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoice_no', 'like', '%' . request('search') . '%')
|
||||
->orWhere('platform', 'like', '%' . request('search') . '%')
|
||||
->orWhere('amount', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%')
|
||||
->orWhere('transaction_type', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('paymentType', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Platform filter
|
||||
if (request('platform')) {
|
||||
$query->where('platform', request('platform'));
|
||||
}
|
||||
|
||||
// Paginate data
|
||||
$day_books = $query->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::day-book.excel-csv', compact('day_books'));
|
||||
}
|
||||
|
||||
@@ -10,11 +10,33 @@ class ExportDiscountProduct implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$discount_products = SaleDetails::with('product:id,productName,productCode')
|
||||
$user = auth()->user();
|
||||
|
||||
$branchId = null;
|
||||
if (moduleCheck('MultiBranchAddon')) {
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
}
|
||||
|
||||
$discount_products = SaleDetails::with('product:id,productName,productCode,hsn_code')
|
||||
->whereHas('product', function ($q) {
|
||||
$q->where('business_id', auth()->user()->business_id);
|
||||
})
|
||||
->when(request('search'), function ($q) {
|
||||
$q->whereHas('product', function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productCode', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productPurchasePrice', 'like', '%' . request('search') . '%')
|
||||
->orWhere('price', 'like', '%' . request('search') . '%')
|
||||
->orWhere('discount', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('sale', function ($q) use ($branchId) {
|
||||
$q->where('branch_id', $branchId);
|
||||
});
|
||||
})
|
||||
->where('discount', '>', 0)
|
||||
->limit(request('per_page') ?? 20)
|
||||
->get();
|
||||
|
||||
return view('business::reports.discount-products.excel-csv', compact('discount_products'));
|
||||
|
||||
@@ -11,37 +11,56 @@ class ExportDue implements FromView
|
||||
public function view(): View
|
||||
{
|
||||
$user = auth()->user();
|
||||
$businessId = $user->business_id;
|
||||
$activeBranch = $user->active_branch;
|
||||
$business_id = $user->business_id;
|
||||
|
||||
$query = Party::where('business_id', $businessId)
|
||||
$query = Party::where('business_id', $business_id)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q2) {
|
||||
$q2->where('type', 'like', '%' . request('search') . '%')
|
||||
->orWhere('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('credit_limit', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->when(request('type'), function ($q) {
|
||||
$q->where('type', request('type'));
|
||||
})
|
||||
->with('sales_dues')
|
||||
->latest();
|
||||
|
||||
if ($activeBranch) {
|
||||
$query->whereHas('sales_dues', function ($q) use ($activeBranch) {
|
||||
$q->where('branch_id', $activeBranch->id)
|
||||
->where('dueAmount', '>', 0);
|
||||
});
|
||||
} else {
|
||||
$query->where('due', '>', 0);
|
||||
}
|
||||
|
||||
$parties = $query->get();
|
||||
|
||||
if ($activeBranch) {
|
||||
$parties->transform(function ($supplier) use ($activeBranch) {
|
||||
$supplier->due = $supplier->sales_dues
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
return $supplier;
|
||||
})->filter(fn($supplier) => $supplier->due > 0);
|
||||
$parties = $parties
|
||||
->transform(function ($customer) use ($activeBranch) {
|
||||
$party_due = $customer->sales_dues
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
|
||||
if ($customer->branch_id === $activeBranch->id) {
|
||||
$openingBalanceDue = $customer->opening_balance_type === 'due'
|
||||
? ($customer->opening_balance ?? 0)
|
||||
: 0;
|
||||
|
||||
$customer->due = $openingBalanceDue + $party_due;
|
||||
} else {
|
||||
|
||||
$customer->due = $party_due;
|
||||
}
|
||||
return $customer;
|
||||
})
|
||||
->filter(fn($customer) => $customer->due > 0)
|
||||
->take(request('per_page') ?? 20)
|
||||
->values();
|
||||
} else {
|
||||
$parties = $parties
|
||||
->filter(fn($customer) => ($customer->due ?? 0) > 0)
|
||||
->take(request('per_page') ?? 20)
|
||||
->values();
|
||||
}
|
||||
|
||||
return view('business::reports.due.excel-csv', [
|
||||
'parties' => $parties
|
||||
]);
|
||||
return view('business::reports.due.excel-csv', compact('parties'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
65
Modules/Business/App/Exports/ExportDueList.php
Normal file
65
Modules/Business/App/Exports/ExportDueList.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Party;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportDueList implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$activeBranch = auth()->user()->active_branch;
|
||||
|
||||
$query = Party::where('business_id', $businessId)
|
||||
->with(['purchases_dues', 'sales_dues']);
|
||||
|
||||
if (request('type')) {
|
||||
$query->where('type', request('type'));
|
||||
}
|
||||
|
||||
if (request('search')) {
|
||||
$search = request('search');
|
||||
|
||||
$query->where(function ($q) use ($search, $activeBranch) {
|
||||
$q->where('type', 'like', "%$search%")
|
||||
->orWhere('name', 'like', "%$search%")
|
||||
->orWhere('phone', 'like', "%$search%")
|
||||
->orWhere('email', 'like', "%$search%");
|
||||
|
||||
if (!$activeBranch) {
|
||||
$q->orWhere('due', 'like', "%$search%");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$parties = $query->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
if ($activeBranch) {
|
||||
$parties = $parties->map(function ($party) use ($activeBranch) {
|
||||
$sale_dues = $party->type === 'Supplier'
|
||||
? $party->purchases_dues->where('branch_id', $activeBranch->id)
|
||||
: $party->sales_dues->where('branch_id', $activeBranch->id);
|
||||
|
||||
$party_due = $sale_dues->sum('dueAmount');
|
||||
|
||||
if ($party->branch_id === $activeBranch->id) {
|
||||
$openingBalanceDue = $party->opening_balance_type === 'due' ? ($party->opening_balance ?? 0) : 0;
|
||||
$party->due = $openingBalanceDue + $party_due;
|
||||
} else {
|
||||
$party->due = $party_due;
|
||||
}
|
||||
|
||||
return $party;
|
||||
})->filter(fn($p) => $p->due > 0)->values();
|
||||
} else {
|
||||
$parties = $parties->filter(fn($p) => $p->due > 0)->values();
|
||||
}
|
||||
|
||||
return view('business::dues.excel-csv', [
|
||||
'parties' => $parties
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -3,15 +3,48 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Expense;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportExpense implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.expense.excel-csv', [
|
||||
'expense_reports' => Expense::with('category:id,categoryName', 'payment_type:id,name', 'branch:id,name', 'transactions')->where('business_id', auth()->user()->business_id)->latest()->get()
|
||||
]);
|
||||
$expenseQuery = Expense::with('category:id,categoryName', 'payment_type:id,name', 'branch:id,name', 'transactions')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
|
||||
$expenseQuery->when(request('branch_id'), function ($q) {
|
||||
$q->where('branch_id', request('branch_id'));
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($expenseQuery, $duration, 'expenseDate', request('from_date'), request('to_date'));
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$expenseQuery->where(function ($query) {
|
||||
$query->where('expanseFor', 'like', '%' . request('search') . '%')
|
||||
->orWhere('paymentType', 'like', '%' . request('search') . '%')
|
||||
->orWhere('referenceNo', 'like', '%' . request('search') . '%')
|
||||
->orWhere('amount', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('category', function ($q) {
|
||||
$q->where('categoryName', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('payment_type', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('branch', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$expense_reports = $expenseQuery->latest()->limit(request('per_page' ?? 20))->get();
|
||||
|
||||
return view('business::reports.expense.excel-csv', compact('expense_reports'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,16 +10,35 @@ class ExportExpiredProduct implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$expired_products = Product::with('stocks', 'unit:id,unitName', 'brand:id,brandName', 'category:id,categoryName')
|
||||
$expired_products = Product::with('unit:id,unitName', 'brand:id,brandName', 'category:id,categoryName', 'stocks')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->withSum('stocks as total_stock', 'productStock')
|
||||
->whereHas('stocks', function ($query) {
|
||||
$query->whereDate('expire_date', '<', today())->where('productStock', '>', 0);
|
||||
})
|
||||
->latest()->get();
|
||||
$query->whereDate('expire_date', '<', today())
|
||||
->where('productStock', '>', 0);
|
||||
})
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('type', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productName', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productCode', 'like', '%' . request('search') . '%')
|
||||
->orWhere('hsn_code', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productSalePrice', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productPurchasePrice', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('unit', function ($q) {
|
||||
$q->where('unitName', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('brand', function ($q) {
|
||||
$q->where('brandName', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('category', function ($q) {
|
||||
$q->where('categoryName', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::expired-products.excel-csv', [
|
||||
'expired_products' => $expired_products
|
||||
]);
|
||||
return view('business::expired-products.excel-csv', compact('expired_products'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,22 +3,52 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportExpiredProductReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.expired-products.excel-csv', [
|
||||
'expired_products' => Product::with('unit:id,unitName', 'brand:id,brandName', 'category:id,categoryName', 'stocks')
|
||||
->withSum('stocks', 'productStock')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereHas('stocks', function ($query) {
|
||||
$query->whereDate('expire_date', '<', today())->where('productStock', '>', 0);
|
||||
})
|
||||
->latest()
|
||||
->get()
|
||||
]);
|
||||
$businessId = auth()->user()->business_id;
|
||||
$expiredProductsQuery = Product::with(['unit:id,unitName', 'brand:id,brandName', 'category:id,categoryName', 'stocks'])
|
||||
->withSum('stocks', 'productStock')
|
||||
->where('business_id', $businessId)
|
||||
->whereHas('stocks', function ($query) {
|
||||
$query->whereDate('expire_date', '<=', today())->where('productStock', '>', 0);
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$expiredProductsQuery->whereHas('stocks', function ($q) use ($duration) {
|
||||
$this->applyDateFilter($q, $duration, 'expire_date', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$search = request('search');
|
||||
$expiredProductsQuery->where(function ($query) use ($search) {
|
||||
$query->where('productName', 'like', '%' . $search . '%')
|
||||
->orWhere('productCode', 'like', '%' . $search . '%')
|
||||
->orWhere('productPurchasePrice', 'like', '%' . $search . '%')
|
||||
->orWhere('productSalePrice', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('categoryName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('brand', function ($q) use ($search) {
|
||||
$q->where('brandName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('unit', function ($q) use ($search) {
|
||||
$q->where('unitName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$expired_products = $expiredProductsQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.expired-products.excel-csv', compact('expired_products'));
|
||||
}
|
||||
}
|
||||
|
||||
28
Modules/Business/App/Exports/ExportGuestDue.php
Normal file
28
Modules/Business/App/Exports/ExportGuestDue.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Sale;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportGuestDue implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$walk_in_customers = Sale::where('business_id', auth()->user()->business_id)
|
||||
->with('dueCollect')
|
||||
->whereNull('party_id')
|
||||
->where('dueAmount', '>', 0)
|
||||
->when(request('search'), function ($query) {
|
||||
$query->where(function ($q) {
|
||||
$q->where('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orwhere('dueAmount', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::walk-dues.excel-csv', compact('walk_in_customers'));
|
||||
}
|
||||
}
|
||||
@@ -3,15 +3,44 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Income;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportIncome implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.income.excel-csv', [
|
||||
'income_reports' => Income::with('category:id,categoryName', 'payment_type:id,name', 'branch:id,name', 'transactions')->where('business_id', auth()->user()->business_id)->latest()->get()
|
||||
]);
|
||||
$incomeQuery = Income::with('category:id,categoryName', 'payment_type:id,name', 'branch:id,name', 'transactions')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
|
||||
// Branch filter
|
||||
if (request('branch_id')) {
|
||||
$incomeQuery->where('branch_id', request('branch_id'));
|
||||
}
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($incomeQuery, $duration, 'incomeDate', request('from_date'), request('to_date'));
|
||||
|
||||
// Search filter
|
||||
if (request('search')) {
|
||||
$search = request('search');
|
||||
$incomeQuery->where(function ($query) use ($search) {
|
||||
$query->where('incomeFor', 'like', '%' . $search . '%')
|
||||
->orWhere('paymentType', 'like', '%' . $search . '%')
|
||||
->orWhere('amount', 'like', '%' . $search . '%')
|
||||
->orWhere('referenceNo', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', fn($q) => $q->where('categoryName', 'like', '%' . $search . '%'))
|
||||
->orWhereHas('payment_type', fn($q) => $q->where('name', 'like', '%' . $search . '%'))
|
||||
->orWhereHas('branch', fn($q) => $q->where('name', 'like', '%' . $search . '%'));
|
||||
});
|
||||
}
|
||||
|
||||
$income_reports = $incomeQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.income.excel-csv', compact('income_reports'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,117 +2,166 @@
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportLossProfitHistory implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$user = auth()->user();
|
||||
$businessId = $user->business_id;
|
||||
$perPage = request('per_page') ?? 20;
|
||||
|
||||
$branchId = null;
|
||||
if (moduleCheck('MultiBranchAddon')) {
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
}
|
||||
|
||||
// SALES
|
||||
$dailySales = DB::table('sales')
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
|
||||
$salesQuery = DB::table('sales')
|
||||
->select(
|
||||
DB::raw('"saleDate"::date as date'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN \"lossProfit\" >= 0 THEN 'positive'
|
||||
ELSE 'negative'
|
||||
END as profit_type
|
||||
"),
|
||||
DB::raw('SUM(actual_total_amount) as total_sales'),
|
||||
DB::raw('SUM("lossProfit") as total_sale_income')
|
||||
)
|
||||
->where('business_id', $businessId)
|
||||
->when($branchId, fn($q) => $q->where('branch_id', $branchId))
|
||||
->groupBy(DB::raw('"saleDate"::date'))
|
||||
->get();
|
||||
->when($branchId, fn ($q) =>
|
||||
$q->where('branch_id', $branchId)
|
||||
)
|
||||
->groupBy(
|
||||
DB::raw('"saleDate"::date'),
|
||||
DB::raw("
|
||||
CASE
|
||||
WHEN \"lossProfit\" >= 0 THEN 'positive'
|
||||
ELSE 'negative'
|
||||
END
|
||||
")
|
||||
);
|
||||
|
||||
$sale_datas = $dailySales->map(fn($sale) => (object)[
|
||||
'type' => 'Sale',
|
||||
'date' => $sale->date,
|
||||
'total_sales' => $sale->total_sales,
|
||||
'total_incomes' => $sale->total_sale_income,
|
||||
$this->applyDateFilter($salesQuery, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
|
||||
$dailySales = $salesQuery->limit($perPage)->get();
|
||||
|
||||
$sale_datas = $dailySales->map(fn ($sale) => (object)[
|
||||
'type' => 'Sale',
|
||||
'date' => $sale->date,
|
||||
'profit_type' => $sale->profit_type,
|
||||
'total_sales' => $sale->total_sales,
|
||||
'total_incomes' => $sale->total_sale_income,
|
||||
]);
|
||||
|
||||
// INCOME
|
||||
$dailyIncomes = DB::table('incomes')
|
||||
$incomeQuery = DB::table('incomes')
|
||||
->select(
|
||||
DB::raw('"incomeDate"::date as date'),
|
||||
DB::raw('SUM(amount) as total_incomes')
|
||||
)
|
||||
->where('business_id', $businessId)
|
||||
->when($branchId, fn($q) => $q->where('branch_id', $branchId))
|
||||
->groupBy(DB::raw('"incomeDate"::date'))
|
||||
->get();
|
||||
->when($branchId, fn ($q) =>
|
||||
$q->where('branch_id', $branchId)
|
||||
)
|
||||
->groupBy(DB::raw('"incomeDate"::date'));
|
||||
|
||||
$income_datas = $dailyIncomes->map(fn($income) => (object)[
|
||||
'type' => 'Income',
|
||||
'date' => $income->date,
|
||||
$this->applyDateFilter($incomeQuery, $duration, 'incomeDate', request('from_date'), request('to_date'));
|
||||
$dailyIncomes = $incomeQuery->limit($perPage)->get();
|
||||
|
||||
$income_datas = $dailyIncomes->map(fn ($income) => (object)[
|
||||
'type' => 'Income',
|
||||
'date' => $income->date,
|
||||
'total_incomes' => $income->total_incomes,
|
||||
]);
|
||||
|
||||
// MERGE SALE + INCOME
|
||||
$mergedIncomeSaleData = collect();
|
||||
$allDates = $dailySales->pluck('date')->merge($dailyIncomes->pluck('date'))->unique()->sort();
|
||||
$allDates = $dailySales->pluck('date')
|
||||
->merge($dailyIncomes->pluck('date'))
|
||||
->unique()
|
||||
->sort();
|
||||
|
||||
foreach ($allDates as $date) {
|
||||
|
||||
if ($income = $income_datas->firstWhere('date', $date)) {
|
||||
$mergedIncomeSaleData->push($income);
|
||||
}
|
||||
if ($sale = $sale_datas->firstWhere('date', $date)) {
|
||||
|
||||
// multiple sale rows handle
|
||||
$salesOfDate = $sale_datas->where('date', $date);
|
||||
|
||||
foreach ($salesOfDate as $sale) {
|
||||
$mergedIncomeSaleData->push($sale);
|
||||
}
|
||||
}
|
||||
|
||||
// PAYROLL
|
||||
$dailyPayrolls = collect();
|
||||
|
||||
if (moduleCheck('HrmAddon')) {
|
||||
$dailyPayrolls = DB::table('payrolls')
|
||||
$payrollQuery = DB::table('payrolls')
|
||||
->select(
|
||||
DB::raw('"date"::date as date'),
|
||||
DB::raw('SUM(amount) as total_payrolls')
|
||||
)
|
||||
->where('business_id', $businessId)
|
||||
->when($branchId, fn($q) => $q->where('branch_id', $branchId))
|
||||
->groupBy(DB::raw('"date"::date'))
|
||||
->get();
|
||||
->when($branchId, fn ($q) =>
|
||||
$q->where('branch_id', $branchId)
|
||||
)
|
||||
->groupBy(DB::raw('"date"::date'));
|
||||
|
||||
$this->applyDateFilter($payrollQuery, $duration, 'date', request('from_date'), request('to_date'));
|
||||
$dailyPayrolls = $payrollQuery->limit($perPage)->get();
|
||||
}
|
||||
|
||||
// EXPENSES
|
||||
$dailyExpenses = DB::table('expenses')
|
||||
$expenseQuery = DB::table('expenses')
|
||||
->select(
|
||||
DB::raw('"expenseDate"::date as date'),
|
||||
DB::raw('SUM(amount) as total_expenses_only')
|
||||
)
|
||||
->where('business_id', $businessId)
|
||||
->when($branchId, fn($q) => $q->where('branch_id', $branchId))
|
||||
->groupBy(DB::raw('"expenseDate"::date'))
|
||||
->get();
|
||||
->when($branchId, fn ($q) =>
|
||||
$q->where('branch_id', $branchId)
|
||||
)
|
||||
->groupBy(DB::raw('"expenseDate"::date'));
|
||||
|
||||
$this->applyDateFilter($expenseQuery, $duration, 'expenseDate', request('from_date'), request('to_date'));
|
||||
$dailyExpenses = $expenseQuery->limit($perPage)->get();
|
||||
|
||||
$mergedExpenseData = collect();
|
||||
$allExpenseDates = $dailyExpenses->pluck('date')->merge($dailyPayrolls->pluck('date'))->unique()->sort();
|
||||
$allExpenseDates = $dailyExpenses->pluck('date')
|
||||
->merge($dailyPayrolls->pluck('date'))
|
||||
->unique()
|
||||
->sort();
|
||||
|
||||
foreach ($allExpenseDates as $date) {
|
||||
|
||||
if ($expense = $dailyExpenses->firstWhere('date', $date)) {
|
||||
$mergedExpenseData->push((object)[
|
||||
'type' => 'Expense',
|
||||
'date' => $date,
|
||||
'type' => 'Expense',
|
||||
'date' => $date,
|
||||
'total_expenses' => $expense->total_expenses_only,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($payroll = $dailyPayrolls->firstWhere('date', $date)) {
|
||||
$mergedExpenseData->push((object)[
|
||||
'type' => 'Payroll',
|
||||
'date' => $date,
|
||||
'type' => 'Payroll',
|
||||
'date' => $date,
|
||||
'total_expenses' => $payroll->total_payrolls,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// SUMMARY
|
||||
$grossSaleProfit = $sale_datas->sum('total_sales');
|
||||
$grossIncomeProfit = $income_datas->sum('total_incomes') + $sale_datas->sum('total_incomes');
|
||||
|
||||
$totalExpenses = $mergedExpenseData->sum('total_expenses');
|
||||
$netProfit = $grossIncomeProfit - $totalExpenses;
|
||||
|
||||
|
||||
@@ -13,7 +13,13 @@ public function view(): View
|
||||
$parties = Party::with('sales')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->when(request('search'), function ($query) {
|
||||
$query->where(function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)
|
||||
->get();
|
||||
|
||||
return view('business::party-reports.loss-profit.excel-csv', compact('parties'));
|
||||
|
||||
@@ -8,10 +8,61 @@
|
||||
|
||||
class ExportProduct implements FromView
|
||||
{
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$products = Product::with('unit:id,unitName', 'brand:id,brandName', 'category:id,categoryName')->where('business_id', auth()->user()->business_id)->withSum('stocks as total_stock', 'productStock')->latest()->get();
|
||||
$user = auth()->user();
|
||||
$search = request('search');
|
||||
|
||||
$products = Product::query()
|
||||
->where('business_id', $user->business_id)
|
||||
->with([
|
||||
'stocks',
|
||||
'unit:id,unitName',
|
||||
'brand:id,brandName',
|
||||
'category:id,categoryName',
|
||||
'warehouse:id,name',
|
||||
'rack:id,name',
|
||||
'shelf:id,name',
|
||||
'combo_products.stock.product:id,productName'
|
||||
])
|
||||
->withSum('stocks as total_stock', 'productStock')
|
||||
->where(function ($query) {
|
||||
$query->where('product_type', '!=', 'combo')
|
||||
->orWhere(function ($q) {
|
||||
$q->where('product_type', 'combo')
|
||||
->whereHas('combo_products');
|
||||
});
|
||||
})
|
||||
->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('productName', 'like', "%{$search}%")
|
||||
->orWhere('productCode', 'like', "%{$search}%")
|
||||
->orWhere('hsn_code', 'like', "%{$search}%")
|
||||
->orWhere('productPurchasePrice', 'like', "%{$search}%")
|
||||
->orWhere('productSalePrice', 'like', "%{$search}%")
|
||||
->orWhere('product_type', 'like', "%{$search}%")
|
||||
->orWhereHas('category', fn ($q) => $q->where('categoryName', 'like', "%{$search}%"))
|
||||
->orWhereHas('brand', fn ($q) => $q->where('brandName', 'like', "%{$search}%"))
|
||||
->orWhereHas('unit', fn ($q) => $q->where('unitName', 'like', "%{$search}%"));
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)
|
||||
->get();
|
||||
|
||||
$products = $products->transform(function ($product) {
|
||||
if ($product->product_type === 'combo') {
|
||||
$product->total_stock = $product->combo_products->sum(
|
||||
fn ($combo) => $combo->stock?->productStock ?? 0
|
||||
);
|
||||
|
||||
$product->total_cost = $product->combo_products->sum(
|
||||
fn ($combo) => ($combo->quantity ?? 0) * ($combo->purchase_price ?? 0)
|
||||
);
|
||||
}
|
||||
|
||||
return $product;
|
||||
});
|
||||
|
||||
return view('business::products.excel-csv', [
|
||||
'products' => $products
|
||||
|
||||
@@ -11,23 +11,35 @@ class ExportProductLossProfit implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$branchId = moduleCheck('MultiBranchAddon') ? auth()->user()->branch_id ?? auth()->user()->active_branch_id : null;
|
||||
$user = auth()->user();
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
|
||||
$product_lossProfits = SaleDetails::with('product:id,productName,productCode')
|
||||
->whereHas('product', function ($q) {
|
||||
$q->where('business_id', auth()->user()->business_id);
|
||||
$baseQuery = SaleDetails::query()
|
||||
->whereHas(
|
||||
'product',
|
||||
fn($q) =>
|
||||
$q->where('business_id', $user->business_id)
|
||||
)
|
||||
->when(moduleCheck('MultiBranchAddon') && $branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('sale', fn($q) => $q->where('branch_id', $branchId));
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('sale', function ($sale) use ($branchId) {
|
||||
$sale->where('branch_id', $branchId);
|
||||
->when(request('search'), function ($q) {
|
||||
$q->whereHas('product', function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productCode', 'like', '%' . request('search') . '%')
|
||||
->orWhere('hsn_code', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
$product_lossProfits = $baseQuery
|
||||
->with('product:id,productName,productCode,hsn_code')
|
||||
->select(
|
||||
'product_id',
|
||||
DB::raw('SUM(CASE WHEN "lossProfit" > 0 THEN "lossProfit" ELSE 0 END) as profit'),
|
||||
DB::raw('SUM(CASE WHEN "lossProfit" < 0 THEN "lossProfit" ELSE 0 END) as loss')
|
||||
DB::raw('SUM(CASE WHEN "lossProfit" > 0 THEN "lossProfit" ELSE 0 END) AS profit'),
|
||||
DB::raw('SUM(CASE WHEN "lossProfit" < 0 THEN "lossProfit" ELSE 0 END) AS loss')
|
||||
)
|
||||
->groupBy('product_id')
|
||||
->limit(request('per_page') ?? 20)
|
||||
->get();
|
||||
|
||||
return view('business::reports.product-loss-profit.excel-csv', compact('product_lossProfits'));
|
||||
|
||||
@@ -3,29 +3,54 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductPurchaseHistoryDetailReport implements FromView
|
||||
{
|
||||
protected $id;
|
||||
use DateFilterTrait;
|
||||
|
||||
public function __construct($id)
|
||||
protected string $id;
|
||||
|
||||
public function __construct(string $id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
|
||||
$product = Product::select('id', 'business_id', 'productName')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('business_id', $businessId)
|
||||
->findOrFail($this->id);
|
||||
|
||||
$purchaseDetailsQuery = $product->purchaseDetails()
|
||||
->with('purchase:id,invoiceNumber,purchaseDate')
|
||||
->whereHas('purchase', function ($purchase) use ($duration) {
|
||||
$this->applyDateFilter($purchase, $duration, 'purchaseDate', request('from_date'), request('to_date'));
|
||||
})
|
||||
->with('purchase:id,party_id,invoiceNumber,purchaseDate', 'purchase.party:id,name')
|
||||
->select('id', 'purchase_id', 'product_id', 'quantities', 'productPurchasePrice');
|
||||
|
||||
$purchaseDetails = $purchaseDetailsQuery->get();
|
||||
$purchaseDetailsQuery->when(request('search'), function ($q) {
|
||||
$search = request('search');
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('productPurchasePrice', 'like', "%{$search}%")
|
||||
->orWhere('quantities', 'like', "%{$search}%")
|
||||
->orWhereHas('purchase', function ($q) use ($search) {
|
||||
$q->where('invoiceNumber', 'like', "%{$search}%")
|
||||
->orWhere('purchaseDate', 'like', "%{$search}%");
|
||||
})
|
||||
->orWhereHas('purchase.party', function ($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%");
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
$purchaseDetails = $purchaseDetailsQuery->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::product-purchase-history-report.excel-csv-detail', compact('product', 'purchaseDetails'));
|
||||
}
|
||||
|
||||
@@ -3,17 +3,30 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductPurchaseHistoryReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
|
||||
$productQuery = Product::with('saleDetails', 'purchaseDetails', 'stocks', 'combo_products')->where('business_id', $businessId);
|
||||
$products = $productQuery->get();
|
||||
$productQuery = Product::with(['saleDetails', 'purchaseDetails', 'purchaseDetails.purchase', 'stocks', 'combo_products'])
|
||||
->where('business_id', $businessId)
|
||||
->whereHas('purchaseDetails.purchase', function ($purchase) use ($duration) {
|
||||
$this->applyDateFilter($purchase, $duration, 'purchaseDate', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
$productQuery->when(request('search'), function ($q) {
|
||||
$q->where('productName', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
|
||||
$products = $productQuery->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$total_purchase_qty = $products->sum(function ($product) {
|
||||
return $product->purchaseDetails->sum('quantities');
|
||||
|
||||
@@ -2,21 +2,44 @@
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Models\PurchaseDetails;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductPurchaseReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$product_purchases = PurchaseDetails::with('product:id,productName', 'purchase:id,party_id,invoiceNumber,purchaseDate', 'purchase.party:id,name')
|
||||
$query = PurchaseDetails::with('product:id,productName', 'purchase:id,party_id,invoiceNumber,purchaseDate', 'purchase.party:id,name')
|
||||
->whereHas('purchase', function ($q) {
|
||||
$q->where('business_id', auth()->user()->business_id);
|
||||
})
|
||||
->get();
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$query->whereHas('purchase', function ($q) use ($duration) {
|
||||
$this->applyDateFilter($q, $duration, 'purchaseDate', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
$query->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->whereHas('product', function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('purchase', function ($q) {
|
||||
$q->where('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhere('purchaseDate', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('purchase.party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$product_purchases = $query->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.product-purchase.excel-csv', compact('product_purchases'));
|
||||
}
|
||||
|
||||
@@ -3,29 +3,53 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductSaleHistoryDetailReport implements FromView
|
||||
{
|
||||
protected $id;
|
||||
use DateFilterTrait;
|
||||
|
||||
public function __construct($id)
|
||||
protected string $id;
|
||||
|
||||
public function __construct(string $id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$product = Product::select('id', 'business_id', 'productName')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('business_id', $businessId)
|
||||
->findOrFail($this->id);
|
||||
|
||||
$saleDetailsQuery = $product->saleDetails()
|
||||
->whereHas('sale', function ($sale) use ($duration) {
|
||||
$this->applyDateFilter($sale, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
})
|
||||
->with('sale:id,party_id,invoiceNumber,saleDate', 'sale.party:id,name')
|
||||
->select('id', 'sale_id', 'product_id', 'quantities', 'lossprofit', 'price', 'productPurchasePrice');
|
||||
|
||||
$saleDetails = $saleDetailsQuery->get();
|
||||
$saleDetailsQuery->when(request('search'), function ($q) {
|
||||
$search = request('search');
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('price', 'like', "%{$search}%")
|
||||
->orWhere('quantities', 'like', "%{$search}%")
|
||||
->orWhereHas('sale', function ($q) use ($search) {
|
||||
$q->where('invoiceNumber', 'like', "%{$search}%")
|
||||
->orWhere('saleDate', 'like', "%{$search}%");
|
||||
})
|
||||
->orWhereHas('sale.party', function ($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%");
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
$saleDetails = $saleDetailsQuery->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::product-sale-history-report.excel-csv-detail', compact('product', 'saleDetails'));
|
||||
}
|
||||
|
||||
@@ -3,17 +3,30 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Product;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductSaleHistoryReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
|
||||
$productQuery = Product::with('saleDetails', 'purchaseDetails', 'stocks', 'combo_products')->where('business_id', $businessId);
|
||||
$products = $productQuery->get();
|
||||
$productQuery = Product::with(['saleDetails', 'purchaseDetails', 'saleDetails.sale', 'stocks', 'combo_products'])
|
||||
->where('business_id', $businessId)
|
||||
->whereHas('saleDetails.sale', function ($sale) use ($duration) {
|
||||
$this->applyDateFilter($sale, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
$productQuery->when(request('search'), function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
|
||||
$products = $productQuery->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$total_single_sale_price = $products->sum(function ($product) {
|
||||
return $product->saleDetails->sum('price');
|
||||
|
||||
@@ -3,18 +3,45 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Sale;
|
||||
use App\Models\SaleDetails;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportProductSaleReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$product_sales = Sale::with('details:id,sale_id,product_id,quantities,price', 'details.product:id,productName', 'party:id,name')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->latest()
|
||||
->get();
|
||||
$query = SaleDetails::with('product:id,productName', 'sale:id,party_id,invoiceNumber,saleDate', 'sale.party:id,name')
|
||||
->whereHas('sale', function ($q) {
|
||||
$q->where('business_id', auth()->user()->business_id);
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$query->whereHas('sale', function ($q) use ($duration) {
|
||||
$this->applyDateFilter($q, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
// Search Filter
|
||||
$query->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->whereHas('product', function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('sale', function ($q) {
|
||||
$q->where('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhere('saleDate', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('sale.party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$product_sales = $query->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.product-sale.excel-csv', compact('product_sales'));
|
||||
}
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Purchase;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportPurchaseReturn implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$purchases = Purchase::with([
|
||||
$purchasesQuery = Purchase::with([
|
||||
'user:id,name',
|
||||
'branch:id,name',
|
||||
'party:id,name,email,phone,type',
|
||||
@@ -22,9 +25,32 @@ public function view(): View
|
||||
}
|
||||
])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereHas('purchaseReturns')
|
||||
->latest()
|
||||
->get();
|
||||
->whereHas('purchaseReturns');
|
||||
|
||||
$purchasesQuery->when(request('branch_id'), function ($q) {
|
||||
$q->where('branch_id', request('branch_id'));
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$purchasesQuery->whereHas('purchaseReturns', function ($query) use ($duration) {
|
||||
$this->applyDateFilter($query, $duration, 'return_date', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$purchasesQuery->where(function ($query) {
|
||||
$query->where('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('branch', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$purchases = $purchasesQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.purchase-return.excel-csv', compact('purchases'));
|
||||
}
|
||||
|
||||
@@ -3,16 +3,46 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Sale;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportSaleReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$sales = Sale::with('user:id,name', 'party:id,name,email,phone,type', 'payment_type:id,name', 'branch:id,name', 'transactions')->where('business_id', auth()->user()->business_id)
|
||||
->latest()
|
||||
->get();
|
||||
$salesQuery = Sale::with('user:id,name', 'party:id,name,email,phone,type', 'payment_type:id,name', 'branch:id,name', 'transactions')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
|
||||
$salesQuery->when(request('branch_id'), function ($q) {
|
||||
$q->where('branch_id', request('branch_id'));
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($salesQuery, $duration, 'saleDate', request('from_date'), request('to_date'));
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$salesQuery->where(function ($query) {
|
||||
$query->where('paymentType', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('payment_type', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('branch', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$sales = $salesQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
|
||||
return view('business::reports.sales.excel', compact('sales'));
|
||||
}
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Sale;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportSalesReturn implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$sales = Sale::with([
|
||||
$salesQuery = Sale::with([
|
||||
'user:id,name',
|
||||
'party:id,name',
|
||||
'branch:id,name',
|
||||
@@ -23,9 +26,30 @@ public function view(): View
|
||||
}
|
||||
])
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereHas('saleReturns')
|
||||
->latest()
|
||||
->get();
|
||||
->when(request('branch_id'), function ($q) {
|
||||
$q->where('branch_id', request('branch_id'));
|
||||
})->whereHas('saleReturns');
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$salesQuery->whereHas('saleReturns', function ($query) use ($duration) {
|
||||
$this->applyDateFilter($query, $duration, 'return_date', request('from_date'), request('to_date'));
|
||||
});
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$salesQuery->where(function ($query) {
|
||||
$query->where('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('branch', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$sales = $salesQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.sales-return.excel-csv', compact('sales'));
|
||||
}
|
||||
|
||||
@@ -2,15 +2,17 @@
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Party;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class ExportSingleCustomerLedger implements FromView
|
||||
{
|
||||
public $ledger;
|
||||
public $party;
|
||||
public Collection $ledger;
|
||||
public Party $party;
|
||||
|
||||
public function __construct($ledger, $party)
|
||||
public function __construct(Collection $ledger, Party $party)
|
||||
{
|
||||
$this->ledger = $ledger;
|
||||
$this->party = $party;
|
||||
|
||||
@@ -2,15 +2,17 @@
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Party;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class ExportSingleSupplierLedger implements FromView
|
||||
{
|
||||
public $ledger;
|
||||
public $party;
|
||||
public Collection $ledger;
|
||||
public Party $party;
|
||||
|
||||
public function __construct($ledger, $party)
|
||||
public function __construct(Collection $ledger, Party $party)
|
||||
{
|
||||
$this->ledger = $ledger;
|
||||
$this->party = $party;
|
||||
|
||||
@@ -3,15 +3,44 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\PlanSubscribe;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportSubscription implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.subscription-reports.excel-csv', [
|
||||
'subscribers' => PlanSubscribe::with(['plan:id,subscriptionName','business:id,companyName,business_category_id,pictureUrl','business.category:id,name','gateway:id,name'])->where('business_id', auth()->user()->business_id)->latest()->get()
|
||||
]);
|
||||
$subscriberQuery = PlanSubscribe::with(['plan:id,subscriptionName','business:id,companyName,business_category_id,pictureUrl','business.category:id,name','gateway:id,name'])->where('business_id', auth()->user()->business_id);
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($subscriberQuery, $duration, 'created_at', request('from_date'), request('to_date'));
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$search = request('search');
|
||||
$subscriberQuery->where(function ($query) use ($search) {
|
||||
$query->where('duration', 'like', '%' . $search . '%')
|
||||
->orWhereHas('plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('gateway', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('business', function ($q) use ($search) {
|
||||
$q->where('companyName', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$subscribers = $subscriberQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::reports.subscription-reports.excel-csv', compact('subscribers'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,31 +16,48 @@ public function view(): View
|
||||
|
||||
$query = Party::where('business_id', $businessId)
|
||||
->where('type', 'Supplier')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q2) {
|
||||
$q2->where('type', 'like', '%' . request('search') . '%')
|
||||
->orWhere('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('credit_limit', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->with('purchases_dues')
|
||||
->latest();
|
||||
|
||||
if ($activeBranch) {
|
||||
$query->whereHas('purchases_dues', function ($q) use ($activeBranch) {
|
||||
$q->where('branch_id', $activeBranch->id)
|
||||
->where('dueAmount', '>', 0);
|
||||
});
|
||||
} else {
|
||||
$query->where('due', '>', 0);
|
||||
}
|
||||
|
||||
$parties = $query->get();
|
||||
|
||||
if ($activeBranch) {
|
||||
$parties->transform(function ($supplier) use ($activeBranch) {
|
||||
$supplier->due = $supplier->purchases_dues
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
return $supplier;
|
||||
})->filter(fn($supplier) => $supplier->due > 0);
|
||||
$parties = $parties
|
||||
->transform(function ($supplier) use ($activeBranch) {
|
||||
$party_due = $supplier->purchases_dues
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
|
||||
if ($supplier->branch_id === $activeBranch->id) {
|
||||
$openingBalanceDue = $supplier->opening_balance_type === 'due'
|
||||
? ($supplier->opening_balance ?? 0)
|
||||
: 0;
|
||||
|
||||
$supplier->due = $openingBalanceDue + $party_due;
|
||||
} else {
|
||||
$supplier->due = $party_due;
|
||||
}
|
||||
|
||||
return $supplier;
|
||||
})
|
||||
->filter(fn($supplier) => $supplier->due > 0)
|
||||
->take(request('per_page') ?? 20)
|
||||
->values();
|
||||
} else {
|
||||
$parties = $parties
|
||||
->filter(fn($supplier) => ($supplier->due ?? 0) > 0)
|
||||
->take(request('per_page') ?? 20)
|
||||
->values();
|
||||
}
|
||||
|
||||
return view('business::reports.supplier-due.excel-csv', [
|
||||
'parties' => $parties
|
||||
]);
|
||||
return view('business::reports.supplier-due.excel-csv', compact('parties'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,20 +13,27 @@ public function view(): View
|
||||
$suppliers = Party::with('purchases')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('type', '=', 'Supplier')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->get();
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
$totalAmount = $suppliers->sum(function ($customer) {
|
||||
$totalAmount = $suppliers->sum(function ($customer) {
|
||||
return $customer->purchases?->sum('totalAmount') ?? 0;
|
||||
});
|
||||
});
|
||||
|
||||
$totalPaid = $suppliers->sum(function ($customer) {
|
||||
return $customer->purchases?->sum('paidAmount') ?? 0;
|
||||
});
|
||||
$totalPaid = $suppliers->sum(function ($customer) {
|
||||
return $customer->purchases?->sum('paidAmount') ?? 0;
|
||||
});
|
||||
|
||||
$totalDue = $suppliers->sum(function ($customer) {
|
||||
return $customer->purchases?->sum('dueAmount') ?? 0;
|
||||
});
|
||||
$totalDue = $suppliers->sum(function ($customer) {
|
||||
return $customer->purchases?->sum('dueAmount') ?? 0;
|
||||
});
|
||||
|
||||
return view('business::party-reports.supplier-ledger.excel-csv', compact('suppliers', 'totalAmount', 'totalPaid', 'totalDue'));
|
||||
}
|
||||
|
||||
211
Modules/Business/App/Exports/ExportTaxReport.php
Normal file
211
Modules/Business/App/Exports/ExportTaxReport.php
Normal file
@@ -0,0 +1,211 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Purchase;
|
||||
use App\Models\PurchaseReturnDetail;
|
||||
use App\Models\Sale;
|
||||
use App\Models\SaleDetails;
|
||||
use App\Models\SaleReturnDetails;
|
||||
use App\Models\Vat;
|
||||
use App\Models\VatTransaction;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportTaxReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$businessId = auth()->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'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -14,10 +14,23 @@ public function view(): View
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->whereHas('sales')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('email', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->withCount('sales')
|
||||
->withSum('sales', 'totalAmount')
|
||||
->orderByDesc('sales_count')
|
||||
->orderByDesc('sales_sum_total_amount')
|
||||
->when(request('type'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('type', request('type'));
|
||||
});
|
||||
})
|
||||
->take(5)
|
||||
->get();
|
||||
|
||||
|
||||
@@ -11,26 +11,39 @@ class ExportTopProduct implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
$branchId = moduleCheck('MultiBranchAddon') ? auth()->user()->branch_id ?? auth()->user()->active_branch_id : null;
|
||||
$user = auth()->user();
|
||||
$businessId = $user->business_id;
|
||||
|
||||
$top_products = SaleDetails::with('product:id,productName,productCode')
|
||||
->whereHas('product', function ($q) {
|
||||
$q->where('business_id', auth()->user()->business_id);
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('sale', function ($sale) use ($branchId) {
|
||||
$sale->where('branch_id', $branchId);
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'product_id',
|
||||
DB::raw('SUM(quantities) as total_sold_qty'),
|
||||
DB::raw('SUM(price * quantities) as total_sale_amount')
|
||||
)
|
||||
->groupBy('product_id')
|
||||
->orderByDesc('total_sold_qty')
|
||||
->take(5)
|
||||
->get();
|
||||
$branchId = null;
|
||||
if (moduleCheck('MultiBranchAddon')) {
|
||||
$branchId = $user->branch_id ?? $user->active_branch_id;
|
||||
}
|
||||
|
||||
$top_products = SaleDetails::query()
|
||||
->with('product:id,productName,productCode,hsn_code')
|
||||
->whereHas('product', function ($q) use ($businessId) {
|
||||
$q->where('business_id', $businessId);
|
||||
})
|
||||
->when(request('search'), function ($q) {
|
||||
$q->whereHas('product', function ($q) {
|
||||
$q->where('productName', 'like', '%' . request('search') . '%')
|
||||
->orWhere('productCode', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->when($branchId, function ($q) use ($branchId) {
|
||||
$q->whereHas('sale', function ($q) use ($branchId) {
|
||||
$q->where('branch_id', $branchId);
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'product_id',
|
||||
DB::raw('SUM(quantities) as total_sold_qty'),
|
||||
DB::raw('SUM((price - discount) * quantities) as total_sale_amount')
|
||||
)
|
||||
->groupBy('product_id')
|
||||
->orderByDesc('total_sold_qty')
|
||||
->limit(5)
|
||||
->get();
|
||||
|
||||
return view('business::reports.top-products.excel-csv', compact('top_products'));
|
||||
}
|
||||
|
||||
@@ -14,6 +14,14 @@ public function view(): View
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('type', '=', 'Supplier')
|
||||
->whereHas('purchases')
|
||||
->when(request('search'), function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%')
|
||||
->orWhere('phone', 'like', '%' . request('search') . '%')
|
||||
->orWhere('email', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
})
|
||||
->withCount('purchases')
|
||||
->withSum('purchases', 'totalAmount')
|
||||
->orderByDesc('purchases_count')
|
||||
|
||||
@@ -3,15 +3,49 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\DueCollect;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportTransaction implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::reports.transaction-history.excel-csv', [
|
||||
'transactions' => DueCollect::where('business_id', auth()->user()->business_id)->with('party:id,name,type', 'payment_type:id,name', 'transactions')->latest()->get()
|
||||
]);
|
||||
$businessId = auth()->user()->business_id;
|
||||
$transactionsQuery = DueCollect::with('party:id,name,type', 'payment_type:id,name', 'transactions')->where('business_id', $businessId);
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($transactionsQuery, $duration, 'paymentDate', request('from_date'), request('to_date'));
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$transactionsQuery->where(function ($query) {
|
||||
$query->where('paymentType', 'like', '%' . request('search') . '%')
|
||||
->orWhere('totalDue', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhere('payDueAmount', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('payment_type', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (request('type')) {
|
||||
$transactionsQuery->whereHas('party', function ($q) {
|
||||
$q->where(function ($q) {
|
||||
$q->where('type', request('type'));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$transactions = $transactionsQuery->latest()->limit(request('per_page'))->get();
|
||||
|
||||
return view('business::reports.transaction-history.excel-csv', compact('transactions'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,17 +3,82 @@
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Transaction;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class ExportTransactionReport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$transactions = Transaction::with('paymentType')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->latest()
|
||||
->get();
|
||||
$businessId = auth()->user()->business_id;
|
||||
$transactionsQuery = Transaction::with('paymentType')
|
||||
->where('business_id', $businessId);
|
||||
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($transactionsQuery, $duration, 'date', request('from_date'), request('to_date'));
|
||||
|
||||
// Search filter
|
||||
if (request('search')) {
|
||||
$transactionsQuery->where(function ($query) {
|
||||
$query->where('amount', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoice_no', 'like', '%' . request('search') . '%')
|
||||
->orWhere('platform', 'like', '%' . request('search') . '%')
|
||||
->orWhere('type', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
}
|
||||
|
||||
// Platform filter
|
||||
if (request('platform')) {
|
||||
$transactionsQuery->where('platform', request('platform'));
|
||||
}
|
||||
|
||||
// Party Filter
|
||||
if (request('party_id')) {
|
||||
|
||||
$transactionsQuery->where(function ($q) {
|
||||
|
||||
$q->where(function ($saleQ) {
|
||||
$saleQ->where('platform', 'sale')
|
||||
->whereHas('sale', function ($s) {
|
||||
$s->where('party_id', request('party_id'));
|
||||
});
|
||||
});
|
||||
|
||||
$q->where(function ($saleRtnQ) {
|
||||
$saleRtnQ->where('platform', 'sale_return')
|
||||
->whereHas('saleReturn.sale', function ($s) {
|
||||
$s->where('party_id', request('party_id'));
|
||||
});
|
||||
});
|
||||
|
||||
$q->orWhere(function ($purQ) {
|
||||
$purQ->where('platform', 'purchase')
|
||||
->whereHas('purchase', function ($p) {
|
||||
$p->where('party_id', request('party_id'));
|
||||
});
|
||||
});
|
||||
|
||||
$q->orWhere(function ($purRtnQ) {
|
||||
$purRtnQ->where('platform', 'purchase_return')
|
||||
->whereHas('purchaseReturn.purchase', function ($p) {
|
||||
$p->where('party_id', request('party_id'));
|
||||
});
|
||||
});
|
||||
|
||||
$q->orWhere(function ($dueQ) {
|
||||
$dueQ->where('platform', 'due_collect')
|
||||
->whereHas('dueCollect', function ($d) {
|
||||
$d->where('party_id', request('party_id'));
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
$transactions = $transactionsQuery->latest()->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::transactions.excel-csv', compact('transactions'));
|
||||
}
|
||||
|
||||
@@ -10,8 +10,45 @@ class ExportTransfer implements FromView
|
||||
{
|
||||
public function view(): View
|
||||
{
|
||||
return view('business::transfers.excel-csv', [
|
||||
'transfers' => Transfer::with(['fromWarehouse:id,name', 'toWarehouse:id,name', 'toBranch:id,name', 'fromBranch:id,name', 'transferProducts'])->where('business_id', auth()->user()->business_id)->latest()->get()
|
||||
]);
|
||||
$user = auth()->user();
|
||||
$activeBranchId = $user->active_branch_id;
|
||||
|
||||
$transfers = Transfer::with(['fromWarehouse:id,name', 'toWarehouse:id,name', 'toBranch:id,name', 'fromBranch:id,name', 'transferProducts'])
|
||||
->where('business_id', $user->business_id)
|
||||
->when($activeBranchId, function ($q) use ($activeBranchId) {
|
||||
$q->where(function ($query) use ($activeBranchId) {
|
||||
$query->where('from_branch_id', $activeBranchId)
|
||||
->orWhere('to_branch_id', $activeBranchId);
|
||||
});
|
||||
})
|
||||
->when(request('branch_id') && !$activeBranchId, function ($q) {
|
||||
$q->where(function ($query) {
|
||||
$query->where('from_branch_id', request('branch_id'))->orWhere('to_branch_id', request('branch_id'));
|
||||
});
|
||||
})
|
||||
->when(request('search'), function ($q) {
|
||||
$search = request('search');
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('note', 'like', '%' . $search . '%')
|
||||
->orWhere('status', 'like', '%' . $search . '%')
|
||||
->orWhere('invoice_no', 'like', '%' . $search . '%')
|
||||
->orWhereHas('fromWarehouse', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('toWarehouse', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('toBranch', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('fromBranch', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit(request('per_page') ?? 20)->get();
|
||||
|
||||
return view('business::transfers.excel-csv', compact('transfers'));
|
||||
}
|
||||
}
|
||||
|
||||
50
Modules/Business/App/Exports/PurchaseExport.php
Normal file
50
Modules/Business/App/Exports/PurchaseExport.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Business\App\Exports;
|
||||
|
||||
use App\Models\Purchase;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
|
||||
class PurchaseExport implements FromView
|
||||
{
|
||||
use DateFilterTrait;
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$purchasesQuery = Purchase::with('user:id,name', 'party:id,name,email,phone,type', 'payment_type:id,name', 'branch:id,name', 'transactions')
|
||||
->where('business_id', auth()->user()->business_id);
|
||||
|
||||
$purchasesQuery->when(request('branch_id'), function ($q) {
|
||||
$q->where('branch_id', request('branch_id'));
|
||||
});
|
||||
|
||||
// Date Filter
|
||||
$duration = request('custom_days') ?: 'today';
|
||||
$this->applyDateFilter($purchasesQuery, $duration, 'purchaseDate', request('from_date'), request('to_date'));
|
||||
|
||||
// Search Filter
|
||||
if (request('search')) {
|
||||
$purchasesQuery->where(function ($query) {
|
||||
$query->where('paymentType', 'like', '%' . request('search') . '%')
|
||||
->orWhere('invoiceNumber', 'like', '%' . request('search') . '%')
|
||||
->orWhereHas('party', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('payment_type', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
})
|
||||
->orWhereHas('branch', function ($q) {
|
||||
$q->where('name', 'like', '%' . request('search') . '%');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$purchases = $purchasesQuery->latest()->limit($request->per_page ?? 20)->get();
|
||||
|
||||
|
||||
return view('business::reports.purchase.excel-csv', compact('purchases'));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user