update marketing
All checks were successful
All checks were successful
This commit is contained in:
@@ -2,21 +2,25 @@
|
||||
|
||||
namespace Modules\Business\App\Http\Controllers;
|
||||
|
||||
use App\Services\Invoice\DueInvoiceService;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Sale;
|
||||
use App\Models\Party;
|
||||
use App\Models\Business;
|
||||
use App\Models\Purchase;
|
||||
use App\Models\DueCollect;
|
||||
use App\Models\PaymentType;
|
||||
use App\Models\Transaction;
|
||||
use App\Services\PdfService;
|
||||
use Illuminate\Http\Request;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use App\Events\DuePaymentReceived;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use App\Events\MultiPaymentProcessed;
|
||||
use App\Models\Transaction;
|
||||
use Carbon\Carbon;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Modules\Business\App\Exports\ExportDueList;
|
||||
use Modules\Business\App\Exports\ExportGuestDue;
|
||||
|
||||
class AcnooDueController extends Controller
|
||||
{
|
||||
@@ -30,29 +34,6 @@ public function index(Request $request)
|
||||
$businessId = auth()->user()->business_id;
|
||||
$activeBranch = auth()->user()->active_branch;
|
||||
|
||||
if ($activeBranch) {
|
||||
$total_supplier_due = Party::where('business_id', $businessId)
|
||||
->where('type', 'Supplier')
|
||||
->with('purchases_dues')
|
||||
->get()
|
||||
->sum(fn($p) => $p->purchases_dues->sum('dueAmount'));
|
||||
|
||||
$total_customer_due = Party::where('business_id', $businessId)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->with('sales_dues')
|
||||
->get()
|
||||
->sum(fn($p) => $p->sales_dues->sum('dueAmount'));
|
||||
} else {
|
||||
|
||||
$total_supplier_due = Party::where('business_id', $businessId)
|
||||
->where('type', 'Supplier')
|
||||
->sum('due');
|
||||
|
||||
$total_customer_due = Party::where('business_id', $businessId)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->sum('due');
|
||||
}
|
||||
|
||||
$query = Party::where('business_id', $businessId)
|
||||
->with(['purchases_dues', 'sales_dues']);
|
||||
|
||||
@@ -69,42 +50,70 @@ public function index(Request $request)
|
||||
->orWhere('phone', 'like', "%$search%")
|
||||
->orWhere('email', 'like', "%$search%");
|
||||
|
||||
if (!$activeBranch) {
|
||||
if (! $activeBranch) {
|
||||
$q->orWhere('due', 'like', "%$search%");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$totalQuery = clone $query;
|
||||
$parties = $query->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($activeBranch) {
|
||||
$filtered = $parties->getCollection()
|
||||
->map(function ($party) {
|
||||
$total_supplier_due = (clone $totalQuery)
|
||||
->where('type', 'Supplier')
|
||||
->get()
|
||||
->sum(fn ($p) => $p->purchases_dues->sum('dueAmount'));
|
||||
|
||||
$party->due = $party->type === 'Supplier'
|
||||
? $party->purchases_dues->sum('dueAmount')
|
||||
: $party->sales_dues->sum('dueAmount');
|
||||
$total_customer_due = (clone $totalQuery)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->get()
|
||||
->sum(fn ($p) => $p->sales_dues->sum('dueAmount'));
|
||||
} else {
|
||||
$total_supplier_due = (clone $totalQuery)
|
||||
->where('type', 'Supplier')
|
||||
->sum('due');
|
||||
|
||||
$total_customer_due = (clone $totalQuery)
|
||||
->where('type', '!=', 'Supplier')
|
||||
->sum('due');
|
||||
}
|
||||
|
||||
if ($activeBranch) {
|
||||
$filtered = $parties->getCollection()
|
||||
->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)
|
||||
->filter(fn ($p) => $p->due > 0)
|
||||
->values();
|
||||
|
||||
$parties->setCollection($filtered);
|
||||
} else {
|
||||
|
||||
$parties->setCollection(
|
||||
$parties->getCollection()->filter(fn($p) => $p->due > 0)->values()
|
||||
$parties->getCollection()->filter(fn ($p) => $p->due > 0)->values()
|
||||
);
|
||||
}
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('business::dues.datas', [
|
||||
'parties' => $parties,
|
||||
'total_supplier_due' => $total_supplier_due,
|
||||
'total_customer_due' => $total_customer_due
|
||||
])->render()
|
||||
'data' => view('business::dues.datas', compact('parties'))->render(),
|
||||
'total_supplier_due' => currency_format($total_supplier_due, currency: business_currency()),
|
||||
'total_customer_due' => currency_format($total_customer_due, currency: business_currency())
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -115,24 +124,34 @@ public function index(Request $request)
|
||||
));
|
||||
}
|
||||
|
||||
public function collectDue($id)
|
||||
|
||||
public function collectDue(string $id)
|
||||
{
|
||||
$activeBranch = auth()->user()->active_branch;
|
||||
$party = Party::where('business_id', auth()->user()->business_id)->with(['sales_dues', 'purchases_dues'])->findOrFail($id);
|
||||
$payment_types = PaymentType::where('business_id', auth()->user()->business_id)->whereStatus(1)->latest()->get();
|
||||
|
||||
$due_amount = 0;
|
||||
if ($party->type == 'Supplier') {
|
||||
foreach ($party->purchases_dues as $sales_due) {
|
||||
$due_amount += $sales_due->dueAmount;
|
||||
if (! $activeBranch || $sales_due->branch_id === $activeBranch->id) {
|
||||
$due_amount += $sales_due->dueAmount;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach ($party->sales_dues as $sales_due) {
|
||||
$due_amount += $sales_due->dueAmount;
|
||||
if (! $activeBranch || $sales_due->branch_id === $activeBranch->id) {
|
||||
$due_amount += $sales_due->dueAmount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (auth()->user()->active_branch) {
|
||||
$party_opening_due = 0;
|
||||
if ($activeBranch) {
|
||||
if ($party->branch_id === $activeBranch->id && $party->opening_balance_type === 'due') {
|
||||
$party_opening_due = $party->opening_balance ?? 0;
|
||||
} else {
|
||||
$party_opening_due = 0;
|
||||
}
|
||||
} else {
|
||||
$party_opening_due = $party->due - $due_amount;
|
||||
}
|
||||
@@ -140,28 +159,24 @@ public function collectDue($id)
|
||||
return view('business::dues.collect-due', compact('party', 'party_opening_due', 'payment_types'));
|
||||
}
|
||||
|
||||
|
||||
public function collectDueStore(Request $request)
|
||||
{
|
||||
$party = Party::find($request->party_id);
|
||||
$activeBranch = auth()->user()->active_branch;
|
||||
|
||||
$request->validate([
|
||||
'paymentDate' => 'required|string',
|
||||
'payDueAmount' => 'required|numeric',
|
||||
'party_id' => 'required|exists:parties,id',
|
||||
'invoiceNumber' => 'nullable|exists:' . ($party->type == 'Supplier' ? 'purchases' : 'sales') . ',invoiceNumber',
|
||||
'invoiceNumber' => 'nullable|exists:'.($party->type == 'Supplier' ? 'purchases' : 'sales').',invoiceNumber',
|
||||
]);
|
||||
|
||||
$business_id = auth()->user()->business_id;
|
||||
|
||||
if (auth()->user()->active_branch && !$request->invoiceNumber) {
|
||||
return response()->json([
|
||||
'message' => __('You must select an invoice when login any branch.')
|
||||
], 400);
|
||||
}
|
||||
$business = Business::findOrFail(auth()->user()->business_id);
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$branch_id = null;
|
||||
$branch_id = $activeBranch?->id;
|
||||
$invoice = null;
|
||||
|
||||
$payments = $request->payments ?? [];
|
||||
@@ -173,81 +188,104 @@ public function collectDueStore(Request $request)
|
||||
}
|
||||
|
||||
$payDueAmount = collect($payments)
|
||||
->reject(fn($p) => strtolower($p['type']) === 'cheque')
|
||||
->reject(fn ($p) => strtolower($p['type']) === 'cheque')
|
||||
->sum('amount');
|
||||
|
||||
// Get related invoice if exists
|
||||
$invoice_due = 0;
|
||||
$opening_balance_due = 0;
|
||||
|
||||
if ($activeBranch) {
|
||||
if ($party->type == 'Supplier') {
|
||||
$invoice_due = Purchase::where('party_id', $request->party_id)
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
} else {
|
||||
$invoice_due = Sale::where('party_id', $request->party_id)
|
||||
->where('branch_id', $activeBranch->id)
|
||||
->sum('dueAmount');
|
||||
}
|
||||
|
||||
if ($party->branch_id === $activeBranch->id && $party->opening_balance_type === 'due') {
|
||||
$opening_balance_due = $party->opening_balance ?? 0;
|
||||
}
|
||||
} else {
|
||||
if ($party->type == 'Supplier') {
|
||||
$invoice_due = Purchase::where('party_id', $request->party_id)->sum('dueAmount');
|
||||
} else {
|
||||
$invoice_due = Sale::where('party_id', $request->party_id)->sum('dueAmount');
|
||||
}
|
||||
$opening_balance_due = $party->opening_balance_type === 'due' ? ($party->opening_balance ?? 0) : 0;
|
||||
}
|
||||
|
||||
$total_due = $invoice_due + $opening_balance_due;
|
||||
|
||||
if ($payDueAmount > $total_due) {
|
||||
return response()->json([
|
||||
'message' => __('You can pay maximum '.$total_due.' due amount.'),
|
||||
], 400);
|
||||
}
|
||||
|
||||
if ($activeBranch && ! $request->invoiceNumber && $invoice_due > 0 && $opening_balance_due == 0) {
|
||||
return response()->json([
|
||||
'message' => __('You must select an invoice when login any branch.'),
|
||||
], 400);
|
||||
}
|
||||
|
||||
if ($request->invoiceNumber) {
|
||||
if ($party->type == 'Supplier') {
|
||||
$invoice = Purchase::where('invoiceNumber', $request->invoiceNumber)->where('party_id', $request->party_id)->first();
|
||||
$invoice = Purchase::where('invoiceNumber', $request->invoiceNumber)
|
||||
->where('party_id', $request->party_id)
|
||||
->where('branch_id', $activeBranch?->id)
|
||||
->first();
|
||||
} else {
|
||||
$invoice = Sale::where('invoiceNumber', $request->invoiceNumber)->where('party_id', $request->party_id)->first();
|
||||
$invoice = Sale::where('invoiceNumber', $request->invoiceNumber)
|
||||
->where('party_id', $request->party_id)
|
||||
->where('branch_id', $activeBranch?->id)
|
||||
->first();
|
||||
}
|
||||
|
||||
if (!isset($invoice)) {
|
||||
if (! isset($invoice)) {
|
||||
return response()->json([
|
||||
'message' => 'Invoice Not Found.'
|
||||
'message' => 'Invoice Not Found.',
|
||||
], 404);
|
||||
}
|
||||
|
||||
if (!auth()->user()->active_branch) {
|
||||
if (isset($invoice) && isset($invoice->branch_id)) {
|
||||
$branch_id = $invoice->branch_id;
|
||||
}
|
||||
}
|
||||
|
||||
if ($invoice->dueAmount < $request->payDueAmount) {
|
||||
return response()->json([
|
||||
'message' => 'Invoice due is ' . $invoice->dueAmount . '. You can not pay more then the invoice due amount.'
|
||||
'message' => 'Invoice due is '.$invoice->dueAmount.'. You can not pay more then the invoice due amount.',
|
||||
], 400);
|
||||
}
|
||||
|
||||
$branch_id = $invoice->branch_id;
|
||||
}
|
||||
|
||||
// Validation for all invoices due
|
||||
if (!$request->invoiceNumber) {
|
||||
if ($party->type == 'Supplier') {
|
||||
$all_invoice_due = Purchase::where('party_id', $request->party_id)->sum('dueAmount');
|
||||
} else {
|
||||
$all_invoice_due = Sale::where('party_id', $request->party_id)->sum('dueAmount');
|
||||
}
|
||||
|
||||
if (($all_invoice_due + $request->payDueAmount) > $party->due) {
|
||||
return response()->json([
|
||||
'message' => __('You can pay only ' . $party->due - $all_invoice_due . ', without selecting an invoice.')
|
||||
], 400);
|
||||
}
|
||||
|
||||
if ($party->opening_balance_type == 'due') {
|
||||
$party->update([
|
||||
'opening_balance' => max(0, $party->opening_balance - $payDueAmount),
|
||||
]);
|
||||
}
|
||||
if (! $request->invoiceNumber && $opening_balance_due > 0) {
|
||||
$party->update([
|
||||
'opening_balance' => max(0, $party->opening_balance - $payDueAmount),
|
||||
]);
|
||||
}
|
||||
|
||||
$data = DueCollect::create($request->except('user_id', 'business_id', 'sale_id', 'purchase_id', 'totalDue', 'dueAmountAfterPay', 'paymentDate') + [
|
||||
'user_id' => auth()->id(),
|
||||
'business_id' => $business_id,
|
||||
'sale_id' => $party->type != 'Supplier' && isset($invoice) ? $invoice->id : NULL,
|
||||
'purchase_id' => $party->type == 'Supplier' && isset($invoice) ? $invoice->id : NULL,
|
||||
'totalDue' => isset($invoice) ? $invoice->dueAmount : $party->due,
|
||||
'dueAmountAfterPay'=> isset($invoice) ? ($invoice->dueAmount - $payDueAmount) : ($party->due - $payDueAmount),
|
||||
'paymentDate' => $request->paymentDate ? Carbon::parse($request->paymentDate)->setTimeFromTimeString(now()->format('H:i:s')) : now()
|
||||
]);
|
||||
'business_id' => $business->id,
|
||||
'sale_id' => $party->type != 'Supplier' && isset($invoice) ? $invoice->id : null,
|
||||
'purchase_id' => $party->type == 'Supplier' && isset($invoice) ? $invoice->id : null,
|
||||
'totalDue' => $total_due,
|
||||
'dueAmountAfterPay' => $total_due - $payDueAmount,
|
||||
'paymentDate' => $request->paymentDate ? Carbon::parse($request->paymentDate)->setTimeFromTimeString(now()->format('H:i:s')) : now(),
|
||||
]);
|
||||
|
||||
// Update invoice due
|
||||
if (isset($invoice)) {
|
||||
$invoice->update([
|
||||
'dueAmount' => $invoice->dueAmount - $payDueAmount,
|
||||
'paidAmount' => $invoice->paidAmount + $payDueAmount
|
||||
'paidAmount' => $invoice->paidAmount + $payDueAmount,
|
||||
]);
|
||||
}
|
||||
|
||||
// Update party due
|
||||
$party->update([
|
||||
'due' => $party->due - $payDueAmount
|
||||
'due' => $party->due - $payDueAmount,
|
||||
]);
|
||||
|
||||
// update balance & adjust platform
|
||||
if ($party->type == 'Supplier') {
|
||||
updateBalance($payDueAmount, 'decrement', $branch_id);
|
||||
$platform = 'due_pay';
|
||||
@@ -256,7 +294,6 @@ public function collectDueStore(Request $request)
|
||||
$platform = 'due_collect';
|
||||
}
|
||||
|
||||
// MultiPaymentProcessed event
|
||||
event(new MultiPaymentProcessed(
|
||||
$payments,
|
||||
$data->id,
|
||||
@@ -265,45 +302,30 @@ public function collectDueStore(Request $request)
|
||||
$party->id,
|
||||
));
|
||||
|
||||
// Notify
|
||||
event(new DuePaymentReceived($data));
|
||||
sendNotifyToUser($data->id, route('business.dues.index', ['id' => $data->id]), __('Due Collection has been created.'), $business_id);
|
||||
sendNotifyToUser($data->id, route('business.dues.index', ['id' => $data->id]), __('Due Collection has been created.'), $business->id);
|
||||
|
||||
if (moduleCheck('MarketingAddon')) {
|
||||
$this->dueTransactionMessage($business, $party, $data);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Collect Due saved successfully'),
|
||||
'redirect' => route('business.dues.index'),
|
||||
'secondary_redirect_url' => route('business.collect.dues.invoice', $party->id),
|
||||
'secondary_redirect_url' => route('business.collect.dues.invoice', $data->id),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
|
||||
return response()->json(['message' => $e->getMessage()], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function getInvoice($id)
|
||||
public function getInvoice($party_id, DueInvoiceService $service)
|
||||
{
|
||||
$due_collect = DueCollect::with('user:id,name,role', 'party:id,name,email,phone,type', 'payment_type:id,name', 'business:id,companyName,address,phoneNumber,email,vat_name,vat_no,meta', )
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->where('party_id', $id)
|
||||
->latest()
|
||||
->first();
|
||||
|
||||
$transactionTypes = $due_collect->transactions
|
||||
->map(function ($transaction) {
|
||||
if ($transaction->transaction_type === 'bank_payment' && !empty($transaction->paymentType?->name)) {
|
||||
return $transaction->paymentType->name;
|
||||
}
|
||||
return $transaction->transaction_type ? ucfirst(explode('_', $transaction->transaction_type)[0]) : '';
|
||||
})
|
||||
->unique()
|
||||
->implode(', ');
|
||||
|
||||
$party = Party::with('dueCollect.business')->find($id);
|
||||
$bank_detail = PaymentType::where('business_id', auth()->user()->business_id)->where('show_in_invoice', 1)->latest()->first();
|
||||
|
||||
return view('business::dues.invoice', compact('due_collect', 'party', 'transactionTypes', 'bank_detail'));
|
||||
$data = $service->getInvoiceData($party_id);
|
||||
return view('business::dues.invoice', $data);
|
||||
}
|
||||
|
||||
public function generatePDF($id)
|
||||
@@ -391,10 +413,10 @@ public function partyDue(Request $request)
|
||||
// Apply search
|
||||
$query->when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('email', 'like', '%' . $request->search . '%')
|
||||
->orWhere('name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('phone', 'like', '%' . $request->search . '%')
|
||||
->orWhere('due', 'like', '%' . $request->search . '%');
|
||||
$q->where('email', 'like', '%'.$request->search.'%')
|
||||
->orWhere('name', 'like', '%'.$request->search.'%')
|
||||
->orWhere('phone', 'like', '%'.$request->search.'%')
|
||||
->orWhere('due', 'like', '%'.$request->search.'%');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -402,36 +424,46 @@ public function partyDue(Request $request)
|
||||
$parties = $query->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($activeBranch) {
|
||||
// Calculate branch-wise due and replace $party->due, remove zero-due parties
|
||||
$parties->setCollection(
|
||||
$parties->getCollection()
|
||||
->transform(function ($party) {
|
||||
$party->due = $party->type === 'Supplier'
|
||||
? $party->purchases_dues->sum('dueAmount')
|
||||
: $party->sales_dues->sum('dueAmount');
|
||||
->transform(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($party) => $party->due > 0)
|
||||
->filter(fn ($party) => $party->due > 0)
|
||||
->values()
|
||||
);
|
||||
} else {
|
||||
// Non-active branch: ensure only parties with due > 0
|
||||
$parties->setCollection(
|
||||
$parties->getCollection()
|
||||
->filter(fn($party) => $party->due > 0)
|
||||
->filter(fn ($party) => $party->due > 0)
|
||||
->values()
|
||||
);
|
||||
}
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('business::dues.party.datas', compact('parties'))->render()
|
||||
'data' => view('business::dues.party.datas', compact('parties'))->render(),
|
||||
]);
|
||||
}
|
||||
|
||||
return view('business::dues.party.index', compact('parties', 'party_type'));
|
||||
}
|
||||
|
||||
|
||||
public function walk_dues(Request $request)
|
||||
{
|
||||
$walk_in_customers = Sale::where('business_id', auth()->user()->business_id)
|
||||
@@ -483,8 +515,8 @@ public function walkDuesGetInvoice(string $id)
|
||||
$due_collect = DueCollect::with('business:id,companyName,address,phoneNumber,email,vat_name,vat_no,meta', 'user:id,name,role', 'payment_type:id,name')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->whereNull('party_id')
|
||||
->latest()
|
||||
->first();
|
||||
->where('id', $id) // 🔥 FIX HERE
|
||||
->firstOrFail();
|
||||
|
||||
$transactionTypes = $due_collect->transactions
|
||||
->map(function ($transaction) {
|
||||
@@ -496,7 +528,8 @@ public function walkDuesGetInvoice(string $id)
|
||||
->unique()
|
||||
->implode(', ');
|
||||
|
||||
$walk_in_customer = Sale::with('dueCollect.business')->find($id);
|
||||
// $walk_in_customer = Sale::with('dueCollect.business')->find($id);
|
||||
$walk_in_customer = Sale::with('dueCollect.business')->find($due_collect->sale_id);
|
||||
|
||||
$bank_detail = PaymentType::where('business_id', auth()->user()->business_id)->where('show_in_invoice', 1)->latest()->first();
|
||||
|
||||
@@ -527,7 +560,8 @@ public function collectWalkDueStore(Request $request)
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$branch_id = null;
|
||||
$invoice = Sale::where('invoiceNumber', $request->invoiceNumber)->whereNull('party_id')->first();
|
||||
$invoice = Sale::where('business_id', $business_id)->where('invoiceNumber', $request->invoiceNumber)->whereNull('party_id')->first();
|
||||
|
||||
if (!$invoice) {
|
||||
return response()->json([
|
||||
'message' => 'Invoice Not Found.'
|
||||
@@ -565,23 +599,23 @@ public function collectWalkDueStore(Request $request)
|
||||
'sale_id' => $invoice->id,
|
||||
'invoiceNumber' => $request->invoiceNumber,
|
||||
'totalDue' => $invoice->dueAmount,
|
||||
'dueAmountAfterPay' => $invoice->dueAmount - $request->payDueAmount,
|
||||
'payDueAmount' => $request->payDueAmount,
|
||||
'dueAmountAfterPay' => $invoice->dueAmount - $payDueAmount,
|
||||
'payDueAmount' => $payDueAmount,
|
||||
'paymentDate' => $request->paymentDate,
|
||||
]);
|
||||
|
||||
$invoice->update([
|
||||
'dueAmount' => $invoice->dueAmount - $request->payDueAmount
|
||||
'dueAmount' => $invoice->dueAmount - $payDueAmount
|
||||
]);
|
||||
|
||||
updateBalance($request->payDueAmount, 'increment', $branch_id);
|
||||
updateBalance($payDueAmount, 'increment', $branch_id);
|
||||
|
||||
// MultiPaymentProcessed event
|
||||
event(new MultiPaymentProcessed(
|
||||
$request->payments ?? [],
|
||||
$payments,
|
||||
$data->id,
|
||||
'due_collect',
|
||||
$request->payDueAmount,
|
||||
$payDueAmount,
|
||||
));
|
||||
|
||||
sendNotifyToUser($data->id, route('business.dues.index', ['id' => $data->id]), __('Due Collection has been created.'), $business_id);
|
||||
@@ -591,7 +625,7 @@ public function collectWalkDueStore(Request $request)
|
||||
return response()->json([
|
||||
'message' => __('Collect Due saved successfully'),
|
||||
'redirect' => route('business.walk-dues.index'),
|
||||
'secondary_redirect_url' => route('business.collect.walk-dues.invoice', $invoice->id),
|
||||
'secondary_redirect_url' => route('business.collect.walk-dues.invoice', $data->id),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
@@ -660,4 +694,95 @@ public function viewDuePayment($id)
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function exportExcel()
|
||||
{
|
||||
return Excel::download(new ExportDueList, 'due-list.xlsx');
|
||||
}
|
||||
|
||||
public function exportCsv()
|
||||
{
|
||||
return Excel::download(new ExportDueList, 'due-list.csv');
|
||||
}
|
||||
|
||||
public function exportPdf()
|
||||
{
|
||||
$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 PdfService::render('business::dues.pdf-export', compact('parties'),'due-list.pdf');
|
||||
}
|
||||
|
||||
public function walkDueExportExcel()
|
||||
{
|
||||
return Excel::download(new ExportGuestDue, 'guest-due-list.xlsx');
|
||||
}
|
||||
|
||||
public function walkDueExportCsv()
|
||||
{
|
||||
return Excel::download(new ExportGuestDue, 'guest-due-list.csv');
|
||||
}
|
||||
|
||||
public function walkDueExportPdf(Request $request)
|
||||
{
|
||||
$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 PdfService::render('business::walk-dues.pdf', compact('walk_in_customers'),'guest-due-list.pdf');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user