/
proc
/
self
/
cwd
/
scm
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use DB; use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; use Carbon\Carbon; use Maatwebsite\Excel\Facades\Excel; use App\Exports\InvoiceExport; class InvoiceController extends Controller { public function invoices() { $data = array(); $data['v_categories'] = \App\VendorCategory::where('is_active', 1)->get(); $data['s_subcategories'] = \App\VendorSubCategory::where('is_active', 1)->get(); $data['payment_terms'] = DB::table('payment_terms')->get(); $data['invoices'] = \App\Invoice::orderBy('created_at', 'desc')->get(); $data['registered_vendors'] = \App\Vendor::where('is_active', 1)->get(); $data['purchase_orders'] = \App\PurchaseOrder::all(); $data['role_id'] = Auth::user()->role_id; // Get mapping: user_id => director_id $user_directors = \App\User::pluck('director', 'id')->toArray(); $data['user_directors'] = $user_directors; $data['current_user_id'] = Auth::id(); return view('dashboard.invoice.invoices', $data); } public function getVendorDetails($code) { $vendor = \App\Vendor::where('vendor_code', $code)->first(); if ($vendor) { return response()->json([ 'name' => $vendor->vendor_name, 'billing_address' => $vendor->address ?: 'N/A', 'pan_no' => $vendor->pan ?: 'N/A', 'gst_no' => $vendor->gst ?: 'N/A', 'msme_type' => $vendor->msme_type ?: 'N/A', ]); } return response()->json(['error' => 'Vendor not found'], 404); } public function getPODetails($po_number) { $po = \App\PurchaseOrder::where('po_number', $po_number)->first(); if ($po) { // Fetch PR details from purchase_requests $pr = \App\PurchaseRequest::where('pr_number', $po->reference_no)->first(); // Fetch circle name from circle table $circle = \App\Circle::find($po->circle); $customer = \App\Customer::find($pr->customer); $vertical = \App\Vertical::find($pr->vertical); return response()->json([ 'reference_no' => $po->reference_no ?: 'N/A', 'po_date' => $po->po_date ?: 'N/A', 'pr_date' => $pr ? $pr->pr_date : 'N/A', 'verticle' => $vertical ? $vertical->name : 'N/A', 'customer' => $customer ? $customer->name : 'N/A', 'circle' => $circle ? $circle->name : 'N/A', 'bill_to_address' => $po->Bill_to_address ?: 'N/A', 'ship_to_address' => $po->delivery_address ?: 'N/A', ]); } return response()->json(['error' => 'PO not found'], 404); } public function saveInvoice(Request $request) { try { // Validate input $validated = $request->validate([ 'doc_type' => 'required|string', 'invoice_type' => 'required|string', 'delivery_place' => 'required|string', 'invoice_number' => 'required|string|unique:invoices,invoice_number', 'invoice_date' => 'required|date', 'vendor_type' => 'required|string', 'vendor_code' => 'nullable|string', 'vendor_name' => 'required|string', 'vendor_bill_address' => 'required|string', 'pan_no' => 'nullable|string', 'gst_no' => 'nullable|string', 'msme_type' => 'nullable|string', 'po_number' => 'required|string', 'reference_no' => 'nullable|string', 'po_date' => 'nullable|string', 'pr_date' => 'nullable|string', 'verticle' => 'nullable|string', 'customer' => 'nullable|string', 'circle' => 'nullable|string', 'bill_to_gst' => 'nullable|string', 'ship_to_gst' => 'nullable|string', 'gate_entry_number' => 'nullable|string', 'bill_to_address' => 'nullable|string', 'ship_to_address' => 'nullable|string', 'gate_entry_date' => 'nullable|string', 'basic_amount' => 'required|numeric', 'freight_charges' => 'nullable|numeric', 'total_basic_amount' => 'required|numeric', 'gst_basic_amount' => 'nullable|numeric', 'gst_on_freight_charges' => 'nullable|numeric', 'total_gst_amount' => 'required|numeric', 'total_invoice_amount' => 'required|numeric', ]); // Save to invoices table $invoice = new \App\Invoice(); $invoice->doc_type = $validated['doc_type']; $invoice->invoice_type = $validated['invoice_type']; $invoice->delivery_place = $validated['delivery_place']; $invoice->invoice_number = $validated['invoice_number']; $invoice->invoice_date = $validated['invoice_date']; $invoice->vendor_type = $validated['vendor_type']; $invoice->vendor_code = $validated['vendor_code']; $invoice->vendor_name = $validated['vendor_name']; $invoice->vendor_bill_address = $validated['vendor_bill_address']; $invoice->pan_no = $validated['pan_no']; $invoice->gst_no = $validated['gst_no']; $invoice->msme_type = $validated['msme_type']; $invoice->po_number = $validated['po_number']; $invoice->reference_no = $validated['reference_no']; $invoice->po_date = $validated['po_date']; $invoice->pr_date = $validated['pr_date']; $invoice->verticle = $validated['verticle']; $invoice->customer = $validated['customer']; $invoice->circle = $validated['circle']; $invoice->bill_to_gst = $validated['bill_to_gst']; $invoice->ship_to_gst = $validated['ship_to_gst']; $invoice->gate_entry_number = $validated['gate_entry_number']; $invoice->bill_to_address = $validated['bill_to_address']; $invoice->ship_to_address = $validated['ship_to_address']; $invoice->gate_entry_date = $validated['gate_entry_date']; $invoice->basic_amount = $validated['basic_amount']; $invoice->freight_charges = $validated['freight_charges']; $invoice->total_basic_amount = $validated['total_basic_amount']; $invoice->gst_basic_amount = $validated['gst_basic_amount']; $invoice->gst_on_freight_charges = $validated['gst_on_freight_charges']; $invoice->total_gst_amount = $validated['total_gst_amount']; $invoice->total_invoice_amount = $validated['total_invoice_amount']; $invoice->created_by = auth()->id(); // Generate unique_no in the format ATS/INV/2526/1, ATS/INV/2526/2, etc. $prefix = 'ATS/INV/2526/'; $lastInvoice = \App\Invoice::where('unique_no', 'like', $prefix.'%') ->orderByDesc('id') ->first(); if ($lastInvoice && preg_match('/^' . preg_quote($prefix, '/') . '(\d+)$/', $lastInvoice->unique_no, $matches)) { $nextNumber = intval($matches[1]) + 1; } else { $nextNumber = 1; } $invoice->unique_no = $prefix . $nextNumber; $invoice->save(); return response()->json([ 'flag' => true, 'message' => 'Your Invoice has been added successfully! Your Invoice Number is: ' . $invoice->unique_no, 'unique_no' => $invoice->unique_no, ]); } catch (\Illuminate\Validation\ValidationException $e) { return response()->json([ 'flag' => false, 'errors' => $e->validator->errors(), ]); } catch (\Exception $e) { return response()->json([ 'flag' => false, 'error' => $e->getMessage(), ]); } } public function updateStatus(Request $request) { try { // Basic validation rules $rules = [ 'invoice_id' => 'required|exists:invoices,id', 'current_status' => 'required|string', 'status_name' => 'required|string', 'date_of_submission' => 'required|date', ]; // Require file only if status is "Submitted to Finance" if ($request->current_status === 'Submitted to Finance') { $rules['invoice_file'] = 'required|file|mimes:pdf,jpg,jpeg,png,doc,docx|max:2048'; } // Validate input $request->validate($rules); // Find the invoice $invoice = \App\Invoice::findOrFail($request->invoice_id); // Upload file if present if ($request->hasFile('invoice_file')) { $file = $request->file('invoice_file'); $filename = time() . '_' . $file->getClientOriginalName(); $file->move(public_path('Invoices_Document'), $filename); $invoice->invoice_file = $filename; } // Update invoice details $invoice->current_status = $request->current_status; $invoice->name = $request->status_name; $invoice->date_of_submission = $request->date_of_submission; $invoice->save(); // Success response return response()->json([ 'flag' => true, 'message' => 'Status updated successfully!', ]); } catch (\Illuminate\Validation\ValidationException $e) { // Validation failed return response()->json([ 'flag' => false, 'error' => $e->validator->errors()->first(), ]); } catch (\Exception $e) { // Any other error return response()->json([ 'flag' => false, 'error' => 'Error: ' . $e->getMessage(), ]); } } public function viewInvoice($id) { $invoice = \App\Invoice::findOrFail($id); $user_name = DB::table('users') ->where('id', $invoice->created_by) ->value('name'); return view('dashboard.invoice.view_invoices', compact('invoice', 'user_name')); } public function invoiceReport() { return view('dashboard.invoice.invoice-report-genrate'); } public function generateInvoiceReport(Request $request) { $request->validate([ 'from_date' => 'required|date', 'to_date' => 'required|date|after_or_equal:from_date', ]); $from = Carbon::parse($request->from_date)->startOfDay(); $to = Carbon::parse($request->to_date)->endOfDay(); return Excel::download(new InvoiceExport($from, $to), 'invoice_report_' . now()->format('Y-m-d') . '.xlsx'); } }