update marketing
All checks were successful
All checks were successful
This commit is contained in:
@@ -6,15 +6,21 @@
|
||||
use App\Models\PaymentType;
|
||||
use App\Models\Transaction;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Carbon\Carbon;
|
||||
use App\Services\PdfService;
|
||||
use App\Traits\DateFilterTrait;
|
||||
use App\Traits\DateRangeTrait;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Modules\Business\App\Exports\ExportCashBalance;
|
||||
|
||||
class AcnooCashController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
use DateFilterTrait, DateRangeTrait;
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$business_id = auth()->user()->business_id;
|
||||
@@ -24,37 +30,16 @@ public function index(Request $request)
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereIn('transaction_type', ['cash_payment', 'bank_to_cash', 'cash_to_bank', 'adjust_cash', 'cheque_to_cash']);
|
||||
|
||||
// Default to today
|
||||
$startDate = Carbon::today()->format('Y-m-d');
|
||||
$endDate = Carbon::today()->format('Y-m-d');
|
||||
// Date Filter
|
||||
$duration = $request->custom_days ?: 'today';
|
||||
[$filter_from_date, $filter_to_date] = $this->applyDateRange($duration, $request->from_date, $request->to_date);
|
||||
|
||||
if ($request->custom_days === 'yesterday') {
|
||||
$startDate = Carbon::yesterday()->format('Y-m-d');
|
||||
$endDate = Carbon::yesterday()->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'last_seven_days') {
|
||||
$startDate = Carbon::today()->subDays(6)->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'last_thirty_days') {
|
||||
$startDate = Carbon::today()->subDays(29)->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'current_month') {
|
||||
$startDate = Carbon::now()->startOfMonth()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->endOfMonth()->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'last_month') {
|
||||
$startDate = Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->subMonth()->endOfMonth()->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'current_year') {
|
||||
$startDate = Carbon::now()->startOfYear()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->endOfYear()->format('Y-m-d');
|
||||
} elseif ($request->custom_days === 'custom_date' && $request->from_date && $request->to_date) {
|
||||
$startDate = Carbon::parse($request->from_date)->format('Y-m-d');
|
||||
$endDate = Carbon::parse($request->to_date)->format('Y-m-d');
|
||||
}
|
||||
|
||||
$cash->whereDate('date', '>=', $startDate)
|
||||
->whereDate('date', '<=', $endDate);
|
||||
$this->applyDateFilter($cash, $duration, 'date', $request->from_date, $request->to_date);
|
||||
|
||||
$cashes = $cash->when(request('search'), function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$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) use ($request) {
|
||||
@@ -65,13 +50,30 @@ public function index(Request $request)
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
// Sum of all credits and bank_to_cash
|
||||
$totalCredit = (clone $cash)->where(function ($q) {
|
||||
$q->where('type', 'credit')
|
||||
->orWhere('transaction_type', 'bank_to_cash');
|
||||
})
|
||||
->sum('amount');
|
||||
|
||||
// Sum of all debits and cash_to_bank
|
||||
$totalDebit = (clone $cash)->where(function ($q) {
|
||||
$q->where('type', 'debit')
|
||||
->orWhere('transaction_type', 'cash_to_bank');
|
||||
})
|
||||
->sum('amount');
|
||||
|
||||
$cash_balance = $totalCredit - $totalDebit;
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('business::cashes.datas', compact('cashes'))->render()
|
||||
'data' => view('business::cashes.datas', compact('cashes', 'cash_balance', 'duration', 'filter_from_date', 'filter_to_date'))->render(),
|
||||
'cash_balance' => currency_format($cash_balance, 'icon', 2, business_currency())
|
||||
]);
|
||||
}
|
||||
|
||||
return view('business::cashes.index', compact('cashes', 'banks'));
|
||||
return view('business::cashes.index', compact('cashes', 'banks', 'cash_balance', 'duration', 'filter_from_date', 'filter_to_date'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
@@ -282,5 +284,109 @@ public function destroy(string $id)
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$ids = $request->ids;
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$transactions = Transaction::whereIn('id', $ids)->get();
|
||||
|
||||
foreach ($transactions as $transaction) {
|
||||
|
||||
// Allow only "cash" platform transactions
|
||||
if ($transaction->platform !== 'cash') {
|
||||
return response()->json([
|
||||
'message' => 'Cannot delete here, please delete from ' . ucfirst($transaction->platform) . ' section.',
|
||||
], 400);
|
||||
}
|
||||
|
||||
$amount = $transaction->amount;
|
||||
$toBank = $transaction->to_bank ? PaymentType::find($transaction->to_bank) : null;
|
||||
|
||||
switch ($transaction->transaction_type) {
|
||||
|
||||
case 'cash_to_bank':
|
||||
|
||||
if ($toBank) {
|
||||
if ($toBank->balance < $amount) {
|
||||
return response()->json([
|
||||
'message' => 'Cannot delete: bank balance would go negative.',
|
||||
], 400);
|
||||
}
|
||||
|
||||
$toBank->decrement('balance', $amount);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'adjust_cash':
|
||||
// Cash is static, so no bank adjustments needed
|
||||
break;
|
||||
}
|
||||
|
||||
if ($transaction->image && file_exists($transaction->image)) {
|
||||
Storage::delete($transaction->image);
|
||||
}
|
||||
|
||||
$transaction->delete();
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Cash transactions reversed and deleted successfully.'),
|
||||
'redirect' => route('business.cashes.index'),
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
|
||||
DB::rollBack();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Error: ' . $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function exportExcel()
|
||||
{
|
||||
return Excel::download(new ExportCashBalance, 'cash-balances.xlsx');
|
||||
}
|
||||
|
||||
public function exportCsv()
|
||||
{
|
||||
return Excel::download(new ExportCashBalance, 'cash-balances.csv');
|
||||
}
|
||||
|
||||
public function exportPdf(Request $request)
|
||||
{
|
||||
$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';
|
||||
[$filter_from_date, $filter_to_date] = $this->applyDateRange($duration, $request->from_date, $request->to_date);
|
||||
|
||||
$this->applyDateFilter($cash, $duration, 'date', $request->from_date, $request->to_date);
|
||||
|
||||
$cashes = $cash->when(request('search'), function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$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) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->limit($request->per_page ?? 20)->get();
|
||||
|
||||
return PdfService::render('business::cashes.pdf', compact('cashes', 'duration', 'filter_from_date', 'filter_to_date'), 'cash-balances.pdf');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user