AI Review Center
Commit Review Workspace ?
Select a commit on the left to inspect quality, security, business value, findings, and suggested code changes.
Project AI Score
?
67%
Quality Avg
?
72%
Security Avg
?
54%
Reviews
?
37
Review Result ?
jattin01/army · 4b967019
The commit introduces many raw SQL queries for data fetching and manipulation across multiple controllers. While it likely addresses necessary functionality, it lacks parameterized queries or ORM usage in many places, increasing the risk of SQL injection and maintenance burden. There is minimal error handling shown and inconsistent use in coding practices. Commit message is uninformative and generic.
Quality
?
50%
Security
?
35%
Business Value
?
60%
Maintainability
?
55%
Issues & Suggested Fixes
?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Lacks Detail
Where
commit message
Issue / Evidence
lacks detail
Suggested Fix
improve commit message to clearly describe changes and intent for better review and tracking
Raw Sql With Parameter Placeholders But Us...
Where
app/Http/Controllers/Adm/FinPowersController.php:28
Issue / Evidence
raw SQL with parameter placeholders but use of DB::statement may be less clear
Suggested Fix
switch to Laravel Query Builder or Eloquent ORM for readability and safety
Raw Sql Select With Potential For Sql Inje...
Where
app/Http/Controllers/Adm/FundTransactionController.php:15
Issue / Evidence
raw SQL SELECT with potential for SQL injection if variables added later
Suggested Fix
ensure parameter binding or use ORM
Raw Insert Statement
Where
app/Http/Controllers/Adm/FundTransactionController.php:33
Issue / Evidence
raw insert statement
Suggested Fix
convert to ORM to improve maintainability and security
Direct Insert With Db::statement
Where
app/Http/Controllers/Adm/VendorController.php:27
Issue / Evidence
direct INSERT with DB::statement
Suggested Fix
replace with Eloquent for better sanitization and readability
Review All Sql Queries To Ensure All Input...
Where
Multiple files with DB::select including dynamic SQL and minimal parameter binding (e.g., PrintController.php, LprEntryController.php)
Issue / Evidence
review all SQL queries to ensure all inputs are properly bound and no injection risks exist
Suggested Fix
Review and simplify this section.
Add Try Catch Blocks Or Check Return Value...
Where
Lack of error handling around DB statements and selects
Issue / Evidence
add try-catch blocks or check return values to handle DB errors gracefully
Suggested Fix
Review and simplify this section.
Controller Scaffold Appears Empty Or Minim...
Where
app/Http/Controllers/SalaryLevelController.php:1-8
Issue / Evidence
controller scaffold appears empty or minimal
Suggested Fix
confirm implementation or remove to reduce clutter
Duplicate Logic
Where
Consider consolidating repeated queries and logic into repository or service classes for better reuse and testing
Issue / Evidence
Consider consolidating repeated queries and logic into repository or service classes for better reuse and testing
Suggested Fix
Review and simplify this section.
Missing Validation
Where
Add automated tests covering these DB interactions to reduce risk of regressions and validate behavior
Issue / Evidence
Add automated tests covering these DB interactions to reduce risk of regressions and validate behavior
Suggested Fix
Review and simplify this section.
Code Change Preview · app/Http/Controllers/Adm/FinPowersController.php
?
Removed / Before Commit
- $inherent = (float)str_replace([',','₹'], '', $request->Inherent ?? '0'); - $withIFA = (float)str_replace([',','₹'], '', $request->WithIFA ?? '0'); - - DB::statement("INSERT INTO FinPower(GrantID,DesignationID,Inherent,WithIFA,CreatedDate) VALUES(?,?,?,?,GETDATE())", - [$grantId, $desigId, $inherent, $withIFA]); - return back()->with('success', 'Financial Power saved successfully!'); - }
Added / After Commit
+ $inherent = (float)str_replace([',','₹'], '', $request->Inherent ?? '0'); + $withIFA = (float)str_replace([',','₹'], '', $request->WithIFA ?? '0'); + + DB::statement("INSERT INTO FinPower(GrantID,DesignationID,Inherent,WithIFA,CreatedDate) VALUES(?,?,?,?,NOW())", + [$grantId, $desigId, $inherent, $withIFA]); + return back()->with('success', 'Financial Power saved successfully!'); + }
Removed / Before Commit
- { - $grants = DB::select("SELECT GrantID, GrantName FROM Grants ORDER BY GrantName"); - $designations = DB::select("SELECT DesignationID, Designation FROM Designation ORDER BY Designation"); - $transactions = DB::select("SELECT TOP 50 g.GrantName, ft.TransactionType, ft.Amount, ft.Authority, ft.AuthorityDate, ft.TransactionDate FROM FundTransactions ft INNER JOIN Grants g ON ft.GrantID=g.GrantID ORDER BY ft.TransactionDate DESC"); - return view('adm.fund-transaction', compact('grants','designations','transactions')); - } - - if (!$authority) return back()->with('error', 'Please enter Authority.'); - if (!$authDate) return back()->with('error', 'Please select Authority Date.'); - - DB::statement("INSERT INTO FundTransactions(GrantID,TransactionType,Amount,Authority,AuthorityDate,TransactionDate) VALUES(?,?,?,?,?,GETDATE())", - [$grantId, $type, $amount, $authority, $authDate]); - return back()->with('success', 'Transaction saved successfully!'); - }
Added / After Commit
+ { + $grants = DB::select("SELECT GrantID, GrantName FROM Grants ORDER BY GrantName"); + $designations = DB::select("SELECT DesignationID, Designation FROM Designation ORDER BY Designation"); + $transactions = DB::select("SELECT g.GrantName, ft.TransactionType, ft.Amount, ft.Authority, ft.AuthorityDate, ft.TransactionDate FROM FundTransactions ft INNER JOIN Grants g ON ft.GrantID=g.GrantID ORDER BY ft.TransactionDate DESC LIMIT 50"); + return view('adm.fund-transaction', compact('grants','designations','transactions')); + } + + if (!$authority) return back()->with('error', 'Please enter Authority.'); + if (!$authDate) return back()->with('error', 'Please select Authority Date.'); + + DB::statement("INSERT INTO FundTransactions(GrantID,TransactionType,Amount,Authority,AuthorityDate,TransactionDate) VALUES(?,?,?,?,?,NOW())", + [$grantId, $type, $amount, $authority, $authDate]); + return back()->with('success', 'Transaction saved successfully!'); + }
Removed / Before Commit
- $exists = DB::selectOne("SELECT COUNT(*) AS cnt FROM Vendors WHERE VendorName=?", [$name])->cnt; - if ($exists) return back()->with('error', 'Vendor with this name already exists!'); - - DB::statement("INSERT INTO Vendors (VendorName,ContactPerson,Email,Phone,Address,IsActive,CreatedDate) VALUES (?,?,?,?,?,?,GETDATE())", - [$name, trim($request->ContactPerson ?? ''), trim($request->Email ?? ''), trim($request->Phone ?? ''), trim($request->Address ?? ''), (int)($request->IsActive ?? 1)]); - - return back()->with('success', 'Vendor added successfully!');
Added / After Commit
+ $exists = DB::selectOne("SELECT COUNT(*) AS cnt FROM Vendors WHERE VendorName=?", [$name])->cnt; + if ($exists) return back()->with('error', 'Vendor with this name already exists!'); + + DB::statement("INSERT INTO Vendors (VendorName,ContactPerson,Email,Phone,Address,IsActive,CreatedDate) VALUES (?,?,?,?,?,?,NOW())", + [$name, trim($request->ContactPerson ?? ''), trim($request->Email ?? ''), trim($request->Phone ?? ''), trim($request->Address ?? ''), (int)($request->IsActive ?? 1)]); + + return back()->with('success', 'Vendor added successfully!');
Removed / Before Commit
- if ($caseId) { - $aonRows = DB::select("SELECT SP.Section, SP.PartNo, SP.Nomenclature, AU.AUName AS AU, - SUM(LPS.Qty) AS Qty, LPS.ProposalPrice AS Rate, LPS.GST, LPS.OtherCharges, - SUM(LPS.TotalAONAmount) AS Amount, STRING_AGG(J.JobNo, ', ') AS JobNos - FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID - INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID - INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID - INNER JOIN AU ON SP.AUID=AU.AUID - INNER JOIN Jobs J ON LPS.JobID=J.JobID - WHERE C.CaseID=? AND LPS.Qty>0 - GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName,LPS.ProposalPrice,LPS.GST,LPS.OtherCharges - ORDER BY SP.Section,SP.PartNo", [$caseId]); - - $aonAmount = array_sum(array_map(fn($r) => (float)$r->Amount, $aonRows)); - - $grantRow = DB::selectOne("SELECT TOP 1 G.GrantName, L.GrantID FROM LPRs L INNER JOIN Grants G ON L.GrantID=G.GrantID WHERE L.CaseNoID=?", [$caseId]); - $grantName = $grantRow->GrantName ?? ''; - $grantId = $grantRow->GrantID ?? 0;
Added / After Commit
+ if ($caseId) { + $aonRows = DB::select("SELECT SP.Section, SP.PartNo, SP.Nomenclature, AU.AUName AS AU, + SUM(LPS.Qty) AS Qty, LPS.ProposalPrice AS Rate, LPS.GST, LPS.OtherCharges, + SUM(LPS.TotalAONAmount) AS Amount, GROUP_CONCAT(J.JobNo SEPARATOR ', ') AS JobNos + FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID + INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID + INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID + INNER JOIN au ON SP.AUID=AU.AUID + INNER JOIN Jobs J ON LPS.JobID=J.JobID + WHERE C.CaseID=? AND LPS.Qty>0 + GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName,LPS.ProposalPrice,LPS.GST,LPS.OtherCharges + ORDER BY SP.Section,SP.PartNo", [$caseId]); + + $aonAmount = array_sum(array_map(fn($r) => (float)$r->Amount, $aonRows)); + + $grantRow = DB::selectOne("SELECT G.GrantName, L.GrantID FROM LPRs L INNER JOIN Grants G ON L.GrantID=G.GrantID WHERE L.CaseNoID=? LIMIT 1", [$caseId]); + $grantName = $grantRow->GrantName ?? ''; + $grantId = $grantRow->GrantID ?? 0;
Removed / Before Commit
- if (!empty($bidData->$col)) $bidData->$col = LpoHelper::fmtDate($bidData->$col); - } - } - $bidSpares = DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,SUM(LPS.Qty) AS Qty,AVG(LPS.ProposalPrice) AS Rate,STRING_AGG(J.JobNo,', ') AS JobNos FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN AU ON SP.AUID=AU.AUID INNER JOIN Jobs J ON LPS.JobID=J.JobID WHERE C.CaseID=? GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName ORDER BY SP.Section,SP.PartNo", [$caseId]); - } - - return view('bid.entry', compact('caseId','cases','bidData','bidSpares'));
Added / After Commit
+ if (!empty($bidData->$col)) $bidData->$col = LpoHelper::fmtDate($bidData->$col); + } + } + $bidSpares = DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,SUM(LPS.Qty) AS Qty,AVG(LPS.ProposalPrice) AS Rate,GROUP_CONCAT(J.JobNo SEPARATOR ', ') AS JobNos FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN au ON SP.AUID=AU.AUID INNER JOIN Jobs J ON LPS.JobID=J.JobID WHERE C.CaseID=? GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName ORDER BY SP.Section,SP.PartNo", [$caseId]); + } + + return view('bid.entry', compact('caseId','cases','bidData','bidSpares'));
Removed / Before Commit
- if ($caseId) { - $hasSaved = DB::selectOne("SELECT COUNT(*) AS cnt FROM ComparativeStatements WHERE CaseID=?", [$caseId])->cnt; - if ($hasSaved) { - $csData = DB::select("SELECT ls.LPRSpareID,c.CaseID,ISNULL(s.Section,'') AS Section,ISNULL(s.PartNo,'') AS PartNo,ISNULL(s.Nomenclature,'') AS Nomenclature,ISNULL(s.AUID,'EA') AS AU,ls.Qty,ISNULL(cs.Vendor1Name,'') AS Vendor1Name,ISNULL(cs.Vendor2Name,'') AS Vendor2Name,ISNULL(cs.Vendor3Name,'') AS Vendor3Name,ISNULL(cs.Vendor1Rate,0) AS V1Rate,ISNULL(cs.Vendor1GST,0) AS V1GST,ISNULL(cs.Vendor2Rate,0) AS V2Rate,ISNULL(cs.Vendor2GST,0) AS V2GST,ISNULL(cs.Vendor3Rate,0) AS V3Rate,ISNULL(cs.Vendor3GST,0) AS V3GST,ISNULL(cs.LPP,0) AS LPP,ISNULL(cs.LPPGST,0) AS LPPGST,ISNULL(cs.L1Vendor,'') AS L1Vendor,ISNULL(cs.L1Rate,0) AS L1Rate FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Cases c ON l.CaseNoID=c.CaseID INNER JOIN ComparativeStatements cs ON cs.LPRSpareID=ls.LPRSpareID AND cs.CaseID=c.CaseID LEFT JOIN Spares s ON ls.SpareID=s.SpareID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY ISNULL(s.Section,'ZZZ'),ISNULL(s.PartNo,'ZZZ')", [$caseId]); - $v1Name = $csData[0]->Vendor1Name ?? ''; - $v2Name = $csData[0]->Vendor2Name ?? ''; - $v3Name = $csData[0]->Vendor3Name ?? ''; - } else { - $csData = DB::select("SELECT ls.LPRSpareID,c.CaseID,ISNULL(s.Section,'') AS Section,ISNULL(s.PartNo,'') AS PartNo,ISNULL(s.Nomenclature,'') AS Nomenclature,ISNULL(s.AUID,'EA') AS AU,ls.Qty FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Cases c ON l.CaseNoID=c.CaseID LEFT JOIN Spares s ON ls.SpareID=s.SpareID WHERE c.CaseID=? ORDER BY ISNULL(s.Section,'ZZZ'),ISNULL(s.PartNo,'ZZZ')", [$caseId]); - foreach ($csData as $r) { - $r->V1Rate = $r->V1GST = $r->V2Rate = $r->V2GST = $r->V3Rate = $r->V3GST = $r->LPP = $r->LPPGST = $r->L1Rate = 0; - $r->L1Vendor = ''; - - $exists = DB::selectOne("SELECT COUNT(*) AS cnt FROM ComparativeStatements WHERE CaseID=? AND LPRSpareID=?", [$caseId, $lprSpareId])->cnt; - if ($exists) { - DB::statement("UPDATE ComparativeStatements SET Vendor1Name=?,Vendor2Name=?,Vendor3Name=?,Vendor1Rate=?,Vendor1GST=?,Vendor2Rate=?,Vendor2GST=?,Vendor3Rate=?,Vendor3GST=?,LPP=?,LPPGST=?,L1Vendor=?,L1Rate=?,ModifiedDate=GETDATE() WHERE CaseID=? AND LPRSpareID=?", - [$v1Name,$v2Name,$v3Name,$v1,$g1,$v2,$g2,$v3,$g3,$lpp,$lppGst,$l1['name'] ?? '',$l1['rate'] ?? 0,$caseId,$lprSpareId]); - } else {
Added / After Commit
+ if ($caseId) { + $hasSaved = DB::selectOne("SELECT COUNT(*) AS cnt FROM ComparativeStatements WHERE CaseID=?", [$caseId])->cnt; + if ($hasSaved) { + $csData = DB::select("SELECT ls.LPRSpareID,c.CaseID,COALESCE(s.Section,'') AS Section,COALESCE(s.PartNo,'') AS PartNo,COALESCE(s.Nomenclature,'') AS Nomenclature,COALESCE(s.AUID,'EA') AS AU,ls.Qty,COALESCE(cs.Vendor1Name,'') AS Vendor1Name,COALESCE(cs.Vendor2Name,'') AS Vendor2Name,COALESCE(cs.Vendor3Name,'') AS Vendor3Name,COALESCE(cs.Vendor1Rate,0) AS V1Rate,COALESCE(cs.Vendor1GST,0) AS V1GST,COALESCE(cs.Vendor2Rate,0) AS V2Rate,COALESCE(cs.Vendor2GST,0) AS V2GST,COALESCE(cs.Vendor3Rate,0) AS V3Rate,COALESCE(cs.Vendor3GST,0) AS V3GST,COALESCE(cs.LPP,0) AS LPP,COALESCE(cs.LPPGST,0) AS LPPGST,COALESCE(cs.L1Vendor,'') AS L1Vendor,COALESCE(cs.L1Rate,0) AS L1Rate FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Cases c ON l.CaseNoID=c.CaseID INNER JOIN ComparativeStatements cs ON cs.LPRSpareID=ls.LPRSpareID AND cs.CaseID=c.CaseID LEFT JOIN Spares s ON ls.SpareID=s.SpareID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY COALESCE(s.Section,'ZZZ'),COALESCE(s.PartNo,'ZZZ')", [$caseId]); + $v1Name = $csData[0]->Vendor1Name ?? ''; + $v2Name = $csData[0]->Vendor2Name ?? ''; + $v3Name = $csData[0]->Vendor3Name ?? ''; + } else { + $csData = DB::select("SELECT ls.LPRSpareID,c.CaseID,COALESCE(s.Section,'') AS Section,COALESCE(s.PartNo,'') AS PartNo,COALESCE(s.Nomenclature,'') AS Nomenclature,COALESCE(s.AUID,'EA') AS AU,ls.Qty FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Cases c ON l.CaseNoID=c.CaseID LEFT JOIN Spares s ON ls.SpareID=s.SpareID WHERE c.CaseID=? ORDER BY COALESCE(s.Section,'ZZZ'),COALESCE(s.PartNo,'ZZZ')", [$caseId]); + foreach ($csData as $r) { + $r->V1Rate = $r->V1GST = $r->V2Rate = $r->V2GST = $r->V3Rate = $r->V3GST = $r->LPP = $r->LPPGST = $r->L1Rate = 0; + $r->L1Vendor = ''; + + $exists = DB::selectOne("SELECT COUNT(*) AS cnt FROM ComparativeStatements WHERE CaseID=? AND LPRSpareID=?", [$caseId, $lprSpareId])->cnt; + if ($exists) { + DB::statement("UPDATE ComparativeStatements SET Vendor1Name=?,Vendor2Name=?,Vendor3Name=?,Vendor1Rate=?,Vendor1GST=?,Vendor2Rate=?,Vendor2GST=?,Vendor3Rate=?,Vendor3GST=?,LPP=?,LPPGST=?,L1Vendor=?,L1Rate=?,ModifiedDate=NOW() WHERE CaseID=? AND LPRSpareID=?", + [$v1Name,$v2Name,$v3Name,$v1,$g1,$v2,$g2,$v3,$g3,$lpp,$lppGst,$l1['name'] ?? '',$l1['rate'] ?? 0,$caseId,$lprSpareId]); + } else {
Removed / Before Commit
- // Load financial grid - $grid = DB::select( - "SELECT ls.LPRSpareID, - ISNULL(s.Section,'') AS Section, - ISNULL(s.PartNo,'') AS PartNo, - ISNULL(s.Nomenclature,'') AS Nomenclature, - ISNULL(a.AUName,'') AS AUID, - ISNULL(ls.Qty,0) AS Qty, - ISNULL(ls.TotalAONAmount,0) AS TotalAONAmount, - ISNULL(ls.BidAmount,0) AS BidAmount, - ls.L1VendorID - FROM Cases c - INNER JOIN LPRs l ON c.CaseID = l.CaseNoID - INNER JOIN LPRSpares ls ON l.LPRID = ls.LPRID - INNER JOIN Spares s ON ls.SpareID = s.SpareID - LEFT JOIN AU a ON s.AUID = a.AUID - WHERE c.CaseID = ? AND ls.Qty > 0 - ORDER BY s.Section, s.PartNo",
Added / After Commit
+ // Load financial grid + $grid = DB::select( + "SELECT ls.LPRSpareID, + COALESCE(s.Section,'') AS Section, + COALESCE(s.PartNo,'') AS PartNo, + COALESCE(s.Nomenclature,'') AS Nomenclature, + COALESCE(a.AUName,'') AS AUID, + COALESCE(ls.Qty,0) AS Qty, + COALESCE(ls.TotalAONAmount,0) AS TotalAONAmount, + COALESCE(ls.BidAmount,0) AS BidAmount, + ls.L1VendorID + FROM Cases c + INNER JOIN LPRs l ON c.CaseID = l.CaseNoID + INNER JOIN LPRSpares ls ON l.LPRID = ls.LPRID + INNER JOIN Spares s ON ls.SpareID = s.SpareID + LEFT JOIN au a ON s.AUID = a.AUID + WHERE c.CaseID = ? AND ls.Qty > 0 + ORDER BY s.Section, s.PartNo",
Removed / Before Commit
- if (!empty($case->$col)) $case->$col = LpoHelper::fmtDate($case->$col); - } - - $grid = DB::select("SELECT ls.LPRSpareID, ISNULL(s.Section,'') AS Section, ISNULL(s.PartNo,'') AS PartNo, ISNULL(s.Nomenclature,'') AS Nomenclature, ISNULL(a.AUName,'') AS AUID, ISNULL(ls.Qty,0) AS Qty, ISNULL(ls.TotalAONAmount,0) AS TotalAONAmount, ISNULL(ls.BidAmount,0) AS BidAmount, ISNULL(ls.DiscountPrice,0) AS DiscountPrice, CASE WHEN ISNULL(ls.DiscountPrice,0)=0 THEN ISNULL(ls.BidAmount,0) ELSE ISNULL(ls.BidAmount,0)-ISNULL(ls.DiscountPrice,0) END AS PriceAfterPNC FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRSpares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN AU a ON s.AUID=a.AUID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY s.Section,s.PartNo", [$caseId]); - - return response()->json(['success' => true, 'case' => $case, 'grid' => $grid]); - } - $updated = 0; - foreach ($spareRows as $sr) { - $discount = is_numeric($sr['DiscountPrice']) ? (float)$sr['DiscountPrice'] : null; - DB::statement("UPDATE LPRSpares SET DiscountPrice=?, PriceAfterPNC=BidAmount-ISNULL(?,0) WHERE LPRSpareID=?", - [$discount, $discount, (int)$sr['LPRSpareID']]); - $updated++; - }
Added / After Commit
+ if (!empty($case->$col)) $case->$col = LpoHelper::fmtDate($case->$col); + } + + $grid = DB::select("SELECT ls.LPRSpareID, COALESCE(s.Section,'') AS Section, COALESCE(s.PartNo,'') AS PartNo, COALESCE(s.Nomenclature,'') AS Nomenclature, COALESCE(a.AUName,'') AS AUID, COALESCE(ls.Qty,0) AS Qty, COALESCE(ls.TotalAONAmount,0) AS TotalAONAmount, COALESCE(ls.BidAmount,0) AS BidAmount, COALESCE(ls.DiscountPrice,0) AS DiscountPrice, CASE WHEN COALESCE(ls.DiscountPrice,0)=0 THEN COALESCE(ls.BidAmount,0) ELSE COALESCE(ls.BidAmount,0)-COALESCE(ls.DiscountPrice,0) END AS PriceAfterPNC FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRSpares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN au a ON s.AUID=a.AUID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY s.Section,s.PartNo", [$caseId]); + + return response()->json(['success' => true, 'case' => $case, 'grid' => $grid]); + } + $updated = 0; + foreach ($spareRows as $sr) { + $discount = is_numeric($sr['DiscountPrice']) ? (float)$sr['DiscountPrice'] : null; + DB::statement("UPDATE LPRSpares SET DiscountPrice=?, PriceAfterPNC=BidAmount-COALESCE(?,0) WHERE LPRSpareID=?", + [$discount, $discount, (int)$sr['LPRSpareID']]); + $updated++; + }
Removed / Before Commit
- [$name, trim($request->ContactPerson ?? ''), trim($request->Email ?? ''), - trim($request->Phone ?? ''), trim($request->Address ?? '')] - ); - $id = DB::selectOne("SELECT SCOPE_IDENTITY() AS id")->id; - $vendors = DB::select("SELECT VendorID, VendorName FROM Vendors ORDER BY VendorName"); - return response()->json(['success' => true, 'newId' => (int)$id, 'vendors' => $vendors]); - } catch (\Exception $e) {
Added / After Commit
+ [$name, trim($request->ContactPerson ?? ''), trim($request->Email ?? ''), + trim($request->Phone ?? ''), trim($request->Address ?? '')] + ); + $id = DB::selectOne("SELECT LAST_INSERT_ID() AS id")->id; + $vendors = DB::select("SELECT VendorID, VendorName FROM Vendors ORDER BY VendorName"); + return response()->json(['success' => true, 'newId' => (int)$id, 'vendors' => $vendors]); + } catch (\Exception $e) {
Removed / Before Commit
- - public function loadCase(int $caseId) - { - $case = DB::selectOne("SELECT c.BidNo,c.BidDate,c.BidOpeningDate, ISNULL(c.RANo,'') AS RANo, c.RADt, ISNULL(c.UONo,'') AS UONo, c.UODate, ISNULL(c.NoteNo,'') AS NoteNo, ISNULL(c.SpecialRemarks,'') AS SpecialRemarks, ISNULL(d.Designation,'') AS CFA, ISNULL(c.FinPower,'') AS FinPower FROM Cases c LEFT JOIN Designation d ON c.DesignationID=d.DesignationID WHERE c.CaseID=?", [$caseId]); - if (!$case) return response()->json(['success' => false, 'error' => 'Case not found'], 404); - - foreach (['BidDate','BidOpeningDate','RADt','UODate'] as $col) { - if (!empty($case->$col)) $case->$col = LpoHelper::fmtDate($case->$col); - } - - $grid = DB::select("SELECT ls.LPRSpareID, ISNULL(s.Section,'') AS Section, ISNULL(s.PartNo,'') AS PartNo, ISNULL(s.Nomenclature,'') AS Nomenclature, ISNULL(a.AUName,'') AS AUID, ISNULL(ls.Qty,0) AS Qty, ISNULL(ls.TotalAONAmount,0) AS TotalAONAmount, ls.FinalGST, ISNULL(ls.OrderPrice,0) AS OrderPrice, ISNULL(ls.TotalOrderAmount,0) AS TotalOrderAmount, ISNULL(ls.L1VendorID,0) AS L1VendorID FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRSpares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN AU a ON s.AUID=a.AUID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY s.Section,s.PartNo", [$caseId]); - - $procRule = DB::selectOne("SELECT PR.ProcRule FROM Cases C INNER JOIN ProcRules PR ON C.ProcRuleID=PR.ProcRuleID WHERE C.CaseID=?", [$caseId]);
Added / After Commit
+ + public function loadCase(int $caseId) + { + $case = DB::selectOne("SELECT c.BidNo,c.BidDate,c.BidOpeningDate, COALESCE(c.RANo,'') AS RANo, c.RADt, COALESCE(c.UONo,'') AS UONo, c.UODate, COALESCE(c.NoteNo,'') AS NoteNo, COALESCE(c.SpecialRemarks,'') AS SpecialRemarks, COALESCE(d.Designation,'') AS CFA, COALESCE(c.FinPower,'') AS FinPower FROM Cases c LEFT JOIN Designation d ON c.DesignationID=d.DesignationID WHERE c.CaseID=?", [$caseId]); + if (!$case) return response()->json(['success' => false, 'error' => 'Case not found'], 404); + + foreach (['BidDate','BidOpeningDate','RADt','UODate'] as $col) { + if (!empty($case->$col)) $case->$col = LpoHelper::fmtDate($case->$col); + } + + $grid = DB::select("SELECT ls.LPRSpareID, COALESCE(s.Section,'') AS Section, COALESCE(s.PartNo,'') AS PartNo, COALESCE(s.Nomenclature,'') AS Nomenclature, COALESCE(a.AUName,'') AS AUID, COALESCE(ls.Qty,0) AS Qty, COALESCE(ls.TotalAONAmount,0) AS TotalAONAmount, ls.FinalGST, COALESCE(ls.OrderPrice,0) AS OrderPrice, COALESCE(ls.TotalOrderAmount,0) AS TotalOrderAmount, COALESCE(ls.L1VendorID,0) AS L1VendorID FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRSpares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN au a ON s.AUID=a.AUID WHERE c.CaseID=? AND ls.Qty>0 ORDER BY s.Section,s.PartNo", [$caseId]); + + $procRule = DB::selectOne("SELECT PR.ProcRule FROM Cases C INNER JOIN ProcRules PR ON C.ProcRuleID=PR.ProcRuleID WHERE C.CaseID=?", [$caseId]);
Removed / Before Commit
- - $user = auth()->user(); - - /* - |-------------------------------------------------------------------------- - | Common group filter (reuse everywhere) - |-------------------------------------------------------------------------- - */ - $applyGroupFilter = function ($q) use ($user) { - if (!is_null($user->role)) { - if ($user->group_id) { - $q->where('group_id', $user->group_id); - } else { - // Role hai but group nahi → no data - $q->whereRaw('1 = 0'); - } - } - };
Added / After Commit
+ + $user = auth()->user(); + + $applyGroupFilter = function ($q) use ($user) { + if (!is_null($user->role)) { + if ($user->group_id) { + $q->where('work_equipment.group_id', $user->group_id); + } else { + $q->whereRaw('1 = 0'); + } + } + }; + + $repairs = WorkEquipment::with([ + 'workOrder', + 'vir' + ]) + ->where('work_equipment.status', 'UNDER REPAIR')
Removed / Before Commit
- // ── Fund State Table ────────────────────────────────────────────── - $fundRows = DB::select(" - SELECT g.GrantName, - ISNULL(SUM(CASE WHEN ft.TransactionType='Credit' THEN ft.Amount ELSE 0 END) - - SUM(CASE WHEN ft.TransactionType='Debit' THEN ft.Amount ELSE 0 END),0) AS Allotment, - ISNULL(SUM(CASE WHEN so.ProcType='GeM' THEN so.OrderAmount ELSE 0 END),0) AS GeMExpdr, - ISNULL(SUM(CASE WHEN so.ProcType='NonGeM' THEN so.OrderAmount ELSE 0 END),0) AS NonGeMExpdr, - ISNULL(SUM(CASE WHEN so.ProcType IN ('GeM','NonGeM') THEN so.OrderAmount ELSE 0 END),0) AS TotalExpdr, - ISNULL(SUM(CASE WHEN vb.BillDate IS NOT NULL THEN so.OrderAmount ELSE 0 END),0) AS BillsFwd, - ISNULL(SUM(CASE WHEN vb.BillStatus='Passed' THEN so.OrderAmount ELSE 0 END),0) AS BillsBooked - FROM Grants g - LEFT JOIN FundTransactions ft ON g.GrantID=ft.GrantID AND ft.AuthorityDate BETWEEN ? AND ? - LEFT JOIN SupplyOrders so ON g.GrantID=so.GrantID AND so.OrderDate BETWEEN ? AND ? - // ── Chart data ──────────────────────────────────────────────────── - $dpsuData = $this->chartData("SELECT CASE WHEN v.IsDPSU=1 THEN 'DPSU' ELSE 'Non DPSU' END AS lbl, SUM(ls.TotalOrderAmount) AS val FROM LPRSpares ls JOIN Vendors v ON ls.L1VendorID=v.VendorID JOIN LPRs l ON ls.LPRID=l.LPRID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY v.IsDPSU", [$fyStart, $fyEnd], 'lbl', 'val'); - $jobTypeData = $this->chartData("SELECT jt.JobType AS lbl, SUM(ls.TotalOrderAmount) AS val FROM LPRSpares ls JOIN Jobs j ON ls.JobID=j.JobID JOIN JobTypes jt ON j.JobTypeID=jt.JobTypeID JOIN LPRs l ON ls.LPRID=l.LPRID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY jt.JobType", [$fyStart, $fyEnd], 'lbl', 'val'); - $groupData = $this->chartData("SELECT ISNULL(g.UserGroupName,'Unknown') AS lbl, SUM(ISNULL(ls.TotalOrderAmount,0)) AS val FROM LPRSpares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN UserGroups g ON l.UserGroupID=g.UserGroupID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY g.UserGroupName ORDER BY val DESC", [$fyStart, $fyEnd], 'lbl', 'val'); -
Added / After Commit
+ // ── Fund State Table ────────────────────────────────────────────── + $fundRows = DB::select(" + SELECT g.GrantName, + COALESCE(SUM(CASE WHEN ft.TransactionType='Credit' THEN ft.Amount ELSE 0 END) + - SUM(CASE WHEN ft.TransactionType='Debit' THEN ft.Amount ELSE 0 END),0) AS Allotment, + COALESCE(SUM(CASE WHEN so.ProcType='GeM' THEN so.OrderAmount ELSE 0 END),0) AS GeMExpdr, + COALESCE(SUM(CASE WHEN so.ProcType='NonGeM' THEN so.OrderAmount ELSE 0 END),0) AS NonGeMExpdr, + COALESCE(SUM(CASE WHEN so.ProcType IN ('GeM','NonGeM') THEN so.OrderAmount ELSE 0 END),0) AS TotalExpdr, + COALESCE(SUM(CASE WHEN vb.BillDate IS NOT NULL THEN so.OrderAmount ELSE 0 END),0) AS BillsFwd, + COALESCE(SUM(CASE WHEN vb.BillStatus='Passed' THEN so.OrderAmount ELSE 0 END),0) AS BillsBooked + FROM Grants g + LEFT JOIN FundTransactions ft ON g.GrantID=ft.GrantID AND ft.AuthorityDate BETWEEN ? AND ? + LEFT JOIN SupplyOrders so ON g.GrantID=so.GrantID AND so.OrderDate BETWEEN ? AND ? + // ── Chart data ──────────────────────────────────────────────────── + $dpsuData = $this->chartData("SELECT CASE WHEN v.IsDPSU=1 THEN 'DPSU' ELSE 'Non DPSU' END AS lbl, SUM(ls.TotalOrderAmount) AS val FROM LPRSpares ls JOIN Vendors v ON ls.L1VendorID=v.VendorID JOIN LPRs l ON ls.LPRID=l.LPRID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY v.IsDPSU", [$fyStart, $fyEnd], 'lbl', 'val'); + $jobTypeData = $this->chartData("SELECT jt.JobType AS lbl, SUM(ls.TotalOrderAmount) AS val FROM LPRSpares ls JOIN Jobs j ON ls.JobID=j.JobID JOIN JobTypes jt ON j.JobTypeID=jt.JobTypeID JOIN LPRs l ON ls.LPRID=l.LPRID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY jt.JobType", [$fyStart, $fyEnd], 'lbl', 'val'); + $groupData = $this->chartData("SELECT COALESCE(g.UserGroupName,'Unknown') AS lbl, SUM(COALESCE(ls.TotalOrderAmount,0)) AS val FROM LPRSpares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN UserGroups g ON l.UserGroupID=g.UserGroupID WHERE l.LPRDate BETWEEN ? AND ? GROUP BY g.UserGroupName ORDER BY val DESC", [$fyStart, $fyEnd], 'lbl', 'val'); +
Removed / Before Commit
- s.Section, s.PartNo, s.Nomenclature, a.AUName, j.JobNo - FROM LPRSpares ls - LEFT JOIN Spares s ON ls.SpareID=s.SpareID - LEFT JOIN AU a ON s.AUID=a.AUID - LEFT JOIN Jobs j ON ls.JobID=j.JobID - WHERE ls.LPRID=? ORDER BY ls.LPRSpareID", [$lprId]);
Added / After Commit
+ s.Section, s.PartNo, s.Nomenclature, a.AUName, j.JobNo + FROM LPRSpares ls + LEFT JOIN Spares s ON ls.SpareID=s.SpareID + LEFT JOIN au a ON s.AUID=a.AUID + LEFT JOIN Jobs j ON ls.JobID=j.JobID + WHERE ls.LPRID=? ORDER BY ls.LPRSpareID", [$lprId]);
Removed / Before Commit
- { - $userGroups = DB::select("SELECT UserGroupID, UserGroupName FROM UserGroups ORDER BY UserGroupName"); - $grants = DB::select("SELECT GrantID, GrantName FROM Grants ORDER BY GrantName"); - $aus = DB::select("SELECT AUID, AUName FROM AU ORDER BY AUName"); - $units = DB::select("SELECT UnitID, UnitName FROM Units ORDER BY UnitName"); - $eqpts = DB::select("SELECT EqptID, EqptName FROM Eqpts ORDER BY EqptName"); - $jobTypes = DB::select("SELECT JobTypeID, JobType FROM JobTypes ORDER BY JobType"); - $spares = DB::select("SELECT SpareID, Nomenclature, PartNo, MaterialNo, Section FROM Spares ORDER BY Nomenclature"); - $jobs = DB::select("SELECT JobID, JobNo, JobDate FROM Jobs ORDER BY JobDate DESC"); - $request->NACDate ?: null, - $request->NACValidity ?: null, - ]); - $lprId = DB::selectOne("SELECT SCOPE_IDENTITY() AS id")->id; - return response()->json(['success' => true, 'lprId' => (int)$lprId]); - } catch (\Exception $e) { - return response()->json(['success' => false, 'error' => $e->getMessage()], 500); - return response()->json(['success' => false, 'error' => 'Name required'], 422); - }
Added / After Commit
+ { + $userGroups = DB::select("SELECT UserGroupID, UserGroupName FROM UserGroups ORDER BY UserGroupName"); + $grants = DB::select("SELECT GrantID, GrantName FROM Grants ORDER BY GrantName"); + $aus = DB::select("SELECT AUID, AUName FROM au ORDER BY AUName"); + $units = DB::select("SELECT id as UnitID, name as UnitName FROM units ORDER BY UnitName"); + $eqpts = DB::select("SELECT EqptID, EqptName FROM eqpts ORDER BY EqptName"); + $jobTypes = DB::select("SELECT JobTypeID, JobType FROM JobTypes ORDER BY JobType"); + $spares = DB::select("SELECT SpareID, Nomenclature, PartNo, MaterialNo, Section FROM Spares ORDER BY Nomenclature"); + $jobs = DB::select("SELECT JobID, JobNo, JobDate FROM Jobs ORDER BY JobDate DESC"); + $request->NACDate ?: null, + $request->NACValidity ?: null, + ]); + $lprId = DB::selectOne("SELECT LAST_INSERT_ID() AS id")->id; + return response()->json(['success' => true, 'lprId' => (int)$lprId]); + } catch (\Exception $e) { + return response()->json(['success' => false, 'error' => $e->getMessage()], 500); + return response()->json(['success' => false, 'error' => 'Name required'], 422); + }
Removed / Before Commit
- /** POST /lpr/pending/search */ - public function search(Request $request) - { - $sql = "SELECT L.LPRID, L.LPRNo, CONVERT(varchar,L.LPRDate,23) AS LPRDate, - UG.UserGroupName, - (SELECT COUNT(*) FROM LPRSpares LS WHERE LS.LPRID = L.LPRID) AS TotalSpares, - COALESCE((SELECT TOP 1 JT.JobType FROM LPRSpares LS2 - INNER JOIN Jobs J2 ON LS2.JobID=J2.JobID - INNER JOIN JobTypes JT ON J2.JobTypeID=JT.JobTypeID - WHERE LS2.LPRID=L.LPRID), 'N/A') AS JobType - FROM LPRs L - INNER JOIN UserGroups UG ON L.UserGroupID=UG.UserGroupID - WHERE L.CaseNoID IS NULL"; - public function spares(int $lprId) - { - $spares = DB::select("SELECT LS.LPRSpareID, LS.SpareID, S.Nomenclature, S.PartNo, LS.Qty, J.JobNo, - ISNULL(LS.ProposalPrice,0) AS ProposalPrice, ISNULL(LS.GST,0) AS GST, - ISNULL(LS.OtherCharges,0) AS OtherCharges, ISNULL(LS.TotalAONAmount,0) AS TotalAONAmount
Added / After Commit
+ /** POST /lpr/pending/search */ + public function search(Request $request) + { + $sql = "SELECT L.LPRID, L.LPRNo, DATE_FORMAT(L.LPRDate, '%Y-%m-%d') AS LPRDate, + UG.UserGroupName, + (SELECT COUNT(*) FROM LPRSpares LS WHERE LS.LPRID = L.LPRID) AS TotalSpares, + COALESCE((SELECT JT.JobType FROM LPRSpares LS2 + INNER JOIN Jobs J2 ON LS2.JobID=J2.JobID + INNER JOIN JobTypes JT ON J2.JobTypeID=JT.JobTypeID + WHERE LS2.LPRID=L.LPRID LIMIT 1), 'N/A') AS JobType + FROM LPRs L + INNER JOIN UserGroups UG ON L.UserGroupID=UG.UserGroupID + WHERE L.CaseNoID IS NULL"; + public function spares(int $lprId) + { + $spares = DB::select("SELECT LS.LPRSpareID, LS.SpareID, S.Nomenclature, S.PartNo, LS.Qty, J.JobNo, + COALESCE(LS.ProposalPrice,0) AS ProposalPrice, COALESCE(LS.GST,0) AS GST, + COALESCE(LS.OtherCharges,0) AS OtherCharges, COALESCE(LS.TotalAONAmount,0) AS TotalAONAmount
Removed / Before Commit
- public function index(Request $request) - { - $orderNo = trim($request->query('OrderNo', '')); - $orderNos = DB::select("SELECT DISTINCT OrderNo FROM SupplyOrders WHERE OrderNo IS NOT NULL AND LTRIM(RTRIM(OrderNo))!='' ORDER BY OrderNo"); - $orderDetails = null; - $challanRows = []; - - if ($orderNo) { - $orderDetails = DB::selectOne("SELECT TOP 1 GEMCNo,OrderDate,DeliveryPeriod,OrderAmount,VendorName,FinPower,CaseNo,GrantName,ProcType FROM SupplyOrders WHERE OrderNo=?", [$orderNo]); - $challanRows = DB::select("SELECT lp.LPRSpareID,lp.Qty,ISNULL(lp.SuppliedQty,0) AS SuppliedQty,lp.GEMCNo,lp.InspectionNoteNo,lp.InspectionNoteDate,lp.ChallanNo,lp.ChallanDate, ISNULL(s.Section,'') AS Section,ISNULL(s.PartNo,'') AS PartNo,ISNULL(s.Nomenclature,'') AS Nomenclature,ISNULL(s.AUID,'') AS AUID FROM LPRspares lp LEFT JOIN Spares s ON lp.SpareID=s.SpareID WHERE lp.OrderNo=? ORDER BY ISNULL(s.Section,''),ISNULL(s.PartNo,'')", [$orderNo]); - foreach ($challanRows as $r) { - if (!empty($r->InspectionNoteDate)) $r->InspectionNoteDate = LpoHelper::fmtDate($r->InspectionNoteDate); - if (!empty($r->ChallanDate)) $r->ChallanDate = LpoHelper::fmtDate($r->ChallanDate); - $cno = trim($r['ChallanNo'] ?? ''); - $cdt = $r['ChallanDate'] ?: null; - if ($sqty > 0 && $cno && $cdt) { - DB::statement("UPDATE LPRspares SET InspectionNoteNo=?,InspectionNoteDate=?,SuppliedQty=?,ChallanNo=?,ChallanDate=?,ModifiedDate=GETDATE() WHERE LPRSpareID=?", - [$inspNo, $inspDate, $sqty, $cno, $cdt, $id]);
Added / After Commit
+ public function index(Request $request) + { + $orderNo = trim($request->query('OrderNo', '')); + $orderNos = DB::select("SELECT DISTINCT OrderNo FROM SupplyOrders WHERE OrderNo IS NOT NULL AND TRIM(OrderNo)!='' ORDER BY OrderNo"); + $orderDetails = null; + $challanRows = []; + + if ($orderNo) { + $orderDetails = DB::selectOne("SELECT GEMCNo,OrderDate,DeliveryPeriod,OrderAmount,VendorName,FinPower,CaseNo,GrantName,ProcType FROM SupplyOrders WHERE OrderNo=? LIMIT 1", [$orderNo]); + $challanRows = DB::select("SELECT lp.LPRSpareID,lp.Qty,COALESCE(lp.SuppliedQty,0) AS SuppliedQty,lp.GEMCNo,lp.InspectionNoteNo,lp.InspectionNoteDate,lp.ChallanNo,lp.ChallanDate, COALESCE(s.Section,'') AS Section,COALESCE(s.PartNo,'') AS PartNo,COALESCE(s.Nomenclature,'') AS Nomenclature,COALESCE(s.AUID,'') AS AUID FROM LPRspares lp LEFT JOIN Spares s ON lp.SpareID=s.SpareID WHERE lp.OrderNo=? ORDER BY COALESCE(s.Section,''),COALESCE(s.PartNo,'')", [$orderNo]); + foreach ($challanRows as $r) { + if (!empty($r->InspectionNoteDate)) $r->InspectionNoteDate = LpoHelper::fmtDate($r->InspectionNoteDate); + if (!empty($r->ChallanDate)) $r->ChallanDate = LpoHelper::fmtDate($r->ChallanDate); + $cno = trim($r['ChallanNo'] ?? ''); + $cdt = $r['ChallanDate'] ?: null; + if ($sqty > 0 && $cno && $cdt) { + DB::statement("UPDATE LPRspares SET InspectionNoteNo=?,InspectionNoteDate=?,SuppliedQty=?,ChallanNo=?,ChallanDate=?,ModifiedDate=NOW() WHERE LPRSpareID=?", + [$inspNo, $inspDate, $sqty, $cno, $cdt, $id]);
Removed / Before Commit
- public function index(Request $request) - { - $orderNo = trim($request->query('OrderNo', '')); - $orderNos = DB::select("SELECT DISTINCT OrderNo FROM SupplyOrders WHERE OrderNo IS NOT NULL AND LTRIM(RTRIM(OrderNo))!='' ORDER BY OrderNo"); - $orderDetails = null; - $gridRows = []; - - if ($orderNo) { - $orderDetails = DB::selectOne("SELECT TOP 1 GEMCNo, CONVERT(VARCHAR,OrderDate,105) AS OrderDate, CONVERT(VARCHAR,DeliveryPeriod,105) AS DeliveryPeriod, OrderAmount, VendorName FROM SupplyOrders WHERE OrderNo=?", [$orderNo]); - $gridRows = DB::select("SELECT lp.LPRSpareID, lp.Qty, ISNULL(lp.SuppliedQty,0) AS SuppliedQty, ISNULL(lp.SuitableQty,0) AS SuitableQty, lp.SuitabilityDate, lp.CRVNo, lp.CRVDate, lp.SpareOrderStatus, ISNULL(s.Section,'') AS Section, ISNULL(s.PartNo,'') AS PartNo, ISNULL(s.Nomenclature,'') AS Nomenclature FROM LPRspares lp LEFT JOIN Spares s ON lp.SpareID=s.SpareID WHERE lp.OrderNo=? ORDER BY ISNULL(s.Section,''),ISNULL(s.PartNo,'')", [$orderNo]); - foreach ($gridRows as $r) { - if (!empty($r->SuitabilityDate)) $r->SuitabilityDate = LpoHelper::fmtDate($r->SuitabilityDate); - if (!empty($r->CRVDate)) $r->CRVDate = LpoHelper::fmtDate($r->CRVDate); - - if ($suitableQty !== '' && (float)$suitableQty > 0) { - $status = ($crvNo && $crvDate) ? 'Suitable' : (!$suitabilityDate ? 'Pending' : 'Rejected'); - DB::statement("UPDATE LPRspares SET SuitableQty=?,SuitabilityDate=?,CRVNo=?,CRVDate=?,SpareOrderStatus=?,ModifiedDate=GETDATE() WHERE LPRSpareID=?", - [(float)$suitableQty, $suitabilityDate ?: null, $crvNo ?: null, $crvDate ?: null, $status, $lprSpareId]);
Added / After Commit
+ public function index(Request $request) + { + $orderNo = trim($request->query('OrderNo', '')); + $orderNos = DB::select("SELECT DISTINCT OrderNo FROM SupplyOrders WHERE OrderNo IS NOT NULL AND TRIM(OrderNo)!='' ORDER BY OrderNo"); + $orderDetails = null; + $gridRows = []; + + if ($orderNo) { + $orderDetails = DB::selectOne("SELECT GEMCNo, DATE_FORMAT(OrderDate, '%d-%m-%Y') AS OrderDate, DATE_FORMAT(DeliveryPeriod, '%d-%m-%Y') AS DeliveryPeriod, OrderAmount, VendorName FROM SupplyOrders WHERE OrderNo=? LIMIT 1", [$orderNo]); + $gridRows = DB::select("SELECT lp.LPRSpareID, lp.Qty, COALESCE(lp.SuppliedQty,0) AS SuppliedQty, COALESCE(lp.SuitableQty,0) AS SuitableQty, lp.SuitabilityDate, lp.CRVNo, lp.CRVDate, lp.SpareOrderStatus, COALESCE(s.Section,'') AS Section, COALESCE(s.PartNo,'') AS PartNo, COALESCE(s.Nomenclature,'') AS Nomenclature FROM LPRspares lp LEFT JOIN Spares s ON lp.SpareID=s.SpareID WHERE lp.OrderNo=? ORDER BY COALESCE(s.Section,''),COALESCE(s.PartNo,'')", [$orderNo]); + foreach ($gridRows as $r) { + if (!empty($r->SuitabilityDate)) $r->SuitabilityDate = LpoHelper::fmtDate($r->SuitabilityDate); + if (!empty($r->CRVDate)) $r->CRVDate = LpoHelper::fmtDate($r->CRVDate); + + if ($suitableQty !== '' && (float)$suitableQty > 0) { + $status = ($crvNo && $crvDate) ? 'Suitable' : (!$suitabilityDate ? 'Pending' : 'Rejected'); + DB::statement("UPDATE LPRspares SET SuitableQty=?,SuitabilityDate=?,CRVNo=?,CRVDate=?,SpareOrderStatus=?,ModifiedDate=NOW() WHERE LPRSpareID=?", + [(float)$suitableQty, $suitabilityDate ?: null, $crvNo ?: null, $crvDate ?: null, $status, $lprSpareId]);
Removed / Before Commit
- $orderNo = trim($request->query('OrderNo', '')); - $orderNos = DB::select( - "SELECT DISTINCT OrderNo FROM LPRspares - WHERE OrderNo IS NOT NULL AND LTRIM(RTRIM(OrderNo))!='' - ORDER BY OrderNo" - ); - - if ($orderNo) { - try { - $orderDetails = DB::selectOne( - "SELECT TOP 1 - CONVERT(VARCHAR, so.OrderDate, 105) AS OrderDate, - CONVERT(VARCHAR, so.DeliveryPeriod, 105) AS DeliveryPeriodStr, - so.OrderAmount, so.VendorName, - lp.VendorLetterNo, - CONVERT(VARCHAR, lp.VendorLetterDate, 105) AS VendorLetterDateStr, - lp.ExtensionSoughtDays, - CONVERT(VARCHAR, lp.ExtendedDeliveryPeriod, 105) AS ExtendedDeliveryPeriodStr,
Added / After Commit
+ $orderNo = trim($request->query('OrderNo', '')); + $orderNos = DB::select( + "SELECT DISTINCT OrderNo FROM LPRspares + WHERE OrderNo IS NOT NULL AND TRIM(OrderNo)!='' + ORDER BY OrderNo" + ); + + if ($orderNo) { + try { + $orderDetails = DB::selectOne( + "SELECT + DATE_FORMAT(so.OrderDate, '%d-%m-%Y') AS OrderDate, + DATE_FORMAT(so.DeliveryPeriod, '%d-%m-%Y') AS DeliveryPeriodStr, + so.OrderAmount, so.VendorName, + lp.VendorLetterNo, + DATE_FORMAT(lp.VendorLetterDate, '%d-%m-%Y') AS VendorLetterDateStr, + lp.ExtensionSoughtDays, + DATE_FORMAT(lp.ExtendedDeliveryPeriod, '%d-%m-%Y') AS ExtendedDeliveryPeriodStr,
Removed / Before Commit
- - $orderNos = DB::select( - "SELECT DISTINCT OrderNo FROM LPRspares - WHERE OrderNo IS NOT NULL AND LTRIM(RTRIM(OrderNo)) != '' - ORDER BY OrderNo" - ); - - - if ($orderNo) { - $orderDetails = DB::selectOne( - "SELECT TOP 1 - CONVERT(VARCHAR, so.OrderDate, 105) AS OrderDate, - so.GEMCNo, - CONVERT(VARCHAR, so.DeliveryPeriod, 105) AS DeliveryPeriod, - so.OrderAmount, - so.VendorName, - so.CaseNo, - so.ProcType,
Added / After Commit
+ + $orderNos = DB::select( + "SELECT DISTINCT OrderNo FROM LPRspares + WHERE OrderNo IS NOT NULL AND TRIM(OrderNo) != '' + ORDER BY OrderNo" + ); + + + if ($orderNo) { + $orderDetails = DB::selectOne( + "SELECT + DATE_FORMAT(so.OrderDate, '%d-%m-%Y') AS OrderDate, + so.GEMCNo, + DATE_FORMAT(so.DeliveryPeriod, '%d-%m-%Y') AS DeliveryPeriod, + so.OrderAmount, + so.VendorName, + so.CaseNo, + so.ProcType,
Removed / Before Commit
- FROM LPRspares ls - INNER JOIN LPRs l ON ls.LPRID = l.LPRID - INNER JOIN Cases c ON l.CaseNoID = c.CaseID - WHERE ls.OrderNo IS NOT NULL AND LTRIM(RTRIM(ls.OrderNo)) != '' - ORDER BY ls.OrderNo" - ); - - - if ($selectedOrder) { - $orderDetails = DB::selectOne( - "SELECT TOP 1 - ISNULL(v.VendorName,'N/A') AS VendorName, - CONVERT(VARCHAR, MAX(ls.OrderDate), 105) AS OrderDate, - ISNULL(SUM(ls.Qty * ls.OrderPrice), 0) AS OrderAmount - FROM LPRspares ls - INNER JOIN LPRs l ON ls.LPRID = l.LPRID - INNER JOIN Cases c ON l.CaseNoID = c.CaseID - LEFT JOIN Vendors v ON ls.L1VendorID = v.VendorID
Added / After Commit
+ FROM LPRspares ls + INNER JOIN LPRs l ON ls.LPRID = l.LPRID + INNER JOIN Cases c ON l.CaseNoID = c.CaseID + WHERE ls.OrderNo IS NOT NULL AND TRIM(OrderNo) != '' + ORDER BY ls.OrderNo" + ); + + + if ($selectedOrder) { + $orderDetails = DB::selectOne( + "SELECT + COALESCE(v.VendorName,'N/A') AS VendorName, + DATE_FORMAT(MAX(ls.OrderDate), '%d-%m-%Y') AS OrderDate, + COALESCE(SUM(ls.Qty * ls.OrderPrice), 0) AS OrderAmount + FROM LPRspares ls + INNER JOIN LPRs l ON ls.LPRID = l.LPRID + INNER JOIN Cases c ON l.CaseNoID = c.CaseID + LEFT JOIN Vendors v ON ls.L1VendorID = v.VendorID
Removed / Before Commit
- $orderSummary = []; - - if ($caseId) { - $caseDetails = DB::selectOne("SELECT c.BidNo,c.BidDate,c.BidOpeningDate AS BidOpenedOn, ISNULL(c.RANo,'') AS RANo, c.RADt, ISNULL(d.Designation,'') AS CFA, ISNULL(c.FinPower,'') AS FinPower FROM Cases c LEFT JOIN Designation d ON c.DesignationID=d.DesignationID WHERE c.CaseID=?", [$caseId]); - $orderRows = DB::select("SELECT ls.LPRSpareID, ISNULL(s.Section,'') AS Section, ISNULL(s.PartNo,'') AS PartNo, ISNULL(s.Nomenclature,'') AS Nomenclature, ISNULL(s.AUID,'') AS AUID, ISNULL(ls.Qty,0) AS Qty, ISNULL(ls.OrderPrice,0) AS OrderPrice, ISNULL(ls.Qty,0)*ISNULL(ls.OrderPrice,0) AS TotalOrderAmount, ISNULL(v.VendorName,'') AS L1Vendor, ISNULL(ls.GEMCNo,'') AS GEMCNo, ISNULL(ls.OrderNo,'') AS OrderNo, ls.OrderDate, ls.NoOfDays, ls.DeliveryPeriod, ISNULL(g.GrantName,'') AS GrantName FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRspares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN Vendors v ON ls.L1VendorID=v.VendorID LEFT JOIN Grants g ON l.GrantID=g.GrantID WHERE c.CaseID=? ORDER BY ISNULL(s.Section,''),s.PartNo", [$caseId]); - $orderSummary = DB::select("SELECT ls.OrderNo, MAX(ls.OrderDate) AS OrderDate, ISNULL(v.VendorName,'Various') AS VendorName, SUM(ls.Qty*ls.OrderPrice) AS TotalAmount FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRspares ls ON l.LPRID=ls.LPRID LEFT JOIN Vendors v ON ls.L1VendorID=v.VendorID WHERE c.CaseID=? AND ls.OrderNo IS NOT NULL AND LTRIM(RTRIM(ls.OrderNo))!='' AND ls.OrderPrice IS NOT NULL AND ls.Qty IS NOT NULL GROUP BY ls.OrderNo,v.VendorName ORDER BY MAX(ls.OrderDate) DESC,ls.OrderNo", [$caseId]); - - // Format dates - foreach ($orderRows as $r) { - - // Auto-format order number: GrantName/Serial/FY - if ($orderNo && $orderDate) { - $grant = DB::selectOne("SELECT TOP 1 g.GrantName FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Grants g ON l.GrantID=g.GrantID WHERE ls.LPRSpareID=?", [$lprSpareId]); - if ($grant) { - $orderNo = LpoHelper::buildOrderNo($grant->GrantName, $orderNo, $orderDate); - }
Added / After Commit
+ $orderSummary = []; + + if ($caseId) { + $caseDetails = DB::selectOne("SELECT c.BidNo,c.BidDate,c.BidOpeningDate AS BidOpenedOn, COALESCE(c.RANo,'') AS RANo, c.RADt, COALESCE(d.Designation,'') AS CFA, COALESCE(c.FinPower,'') AS FinPower FROM Cases c LEFT JOIN Designation d ON c.DesignationID=d.DesignationID WHERE c.CaseID=?", [$caseId]); + $orderRows = DB::select("SELECT ls.LPRSpareID, COALESCE(s.Section,'') AS Section, COALESCE(s.PartNo,'') AS PartNo, COALESCE(s.Nomenclature,'') AS Nomenclature, COALESCE(s.AUID,'') AS AUID, COALESCE(ls.Qty,0) AS Qty, COALESCE(ls.OrderPrice,0) AS OrderPrice, COALESCE(ls.Qty,0)*COALESCE(ls.OrderPrice,0) AS TotalOrderAmount, COALESCE(v.VendorName,'') AS L1Vendor, COALESCE(ls.GEMCNo,'') AS GEMCNo, COALESCE(ls.OrderNo,'') AS OrderNo, ls.OrderDate, ls.NoOfDays, ls.DeliveryPeriod, COALESCE(g.GrantName,'') AS GrantName FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRspares ls ON l.LPRID=ls.LPRID INNER JOIN Spares s ON ls.SpareID=s.SpareID LEFT JOIN Vendors v ON ls.L1VendorID=v.VendorID LEFT JOIN Grants g ON l.GrantID=g.GrantID WHERE c.CaseID=? ORDER BY COALESCE(s.Section,''),s.PartNo", [$caseId]); + $orderSummary = DB::select("SELECT ls.OrderNo, MAX(ls.OrderDate) AS OrderDate, COALESCE(v.VendorName,'Various') AS VendorName, SUM(ls.Qty*ls.OrderPrice) AS TotalAmount FROM Cases c INNER JOIN LPRs l ON c.CaseID=l.CaseNoID INNER JOIN LPRspares ls ON l.LPRID=ls.LPRID LEFT JOIN Vendors v ON ls.L1VendorID=v.VendorID WHERE c.CaseID=? AND ls.OrderNo IS NOT NULL AND TRIM(OrderNo)!='' AND ls.OrderPrice IS NOT NULL AND ls.Qty IS NOT NULL GROUP BY ls.OrderNo,v.VendorName ORDER BY MAX(ls.OrderDate) DESC,ls.OrderNo", [$caseId]); + + // Format dates + foreach ($orderRows as $r) { + + // Auto-format order number: GrantName/Serial/FY + if ($orderNo && $orderDate) { + $grant = DB::selectOne("SELECT g.GrantName FROM LPRspares ls INNER JOIN LPRs l ON ls.LPRID=l.LPRID INNER JOIN Grants g ON l.GrantID=g.GrantID WHERE ls.LPRSpareID=? LIMIT 1", [$lprSpareId]); + if ($grant) { + $orderNo = LpoHelper::buildOrderNo($grant->GrantName, $orderNo, $orderDate); + }
Removed / Before Commit
- // ── Shared case loader ───────────────────────────────────────────────── - private function caseData(int $caseId): object - { - $case = DB::selectOne("SELECT c.*, d.Designation AS CFA, d.ICNo, d.Rank, d.OffrsName, g.GrantName, pr.ProcRule FROM Cases c LEFT JOIN Designation d ON c.DesignationID=d.DesignationID LEFT JOIN (SELECT TOP 1 l.GrantID FROM LPRs l WHERE l.CaseNoID=?) lg ON 1=1 LEFT JOIN Grants g ON lg.GrantID=g.GrantID LEFT JOIN ProcRules pr ON c.ProcRuleID=pr.ProcRuleID WHERE c.CaseID=?", [$caseId, $caseId]); - abort_if(!$case, 404, 'Case not found'); - return $case; - } - - private function caseSpares(int $caseId): array - { - return DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,SUM(LPS.Qty) AS Qty,LPS.ProposalPrice AS Rate,LPS.GST,LPS.OtherCharges,SUM(LPS.TotalAONAmount) AS Amount,STRING_AGG(J.JobNo,', ') AS JobNos FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN AU ON SP.AUID=AU.AUID INNER JOIN Jobs J ON LPS.JobID=J.JobID WHERE C.CaseID=? AND LPS.Qty>0 GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName,LPS.ProposalPrice,LPS.GST,LPS.OtherCharges ORDER BY SP.Section,SP.PartNo", [$caseId]); - } - - private function easSpares(int $caseId): array - { - return DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,LPS.Qty,LPS.OrderPrice,LPS.FinalGST,LPS.TotalOrderAmount,V.VendorName FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN AU ON SP.AUID=AU.AUID LEFT JOIN Vendors V ON LPS.L1VendorID=V.VendorID WHERE C.CaseID=? AND LPS.Qty>0 ORDER BY SP.Section,SP.PartNo", [$caseId]); - } -
Added / After Commit
+ // ── Shared case loader ───────────────────────────────────────────────── + private function caseData(int $caseId): object + { + $case = DB::selectOne("SELECT c.*, d.Designation AS CFA, d.ICNo, d.Rank, d.OffrsName, g.GrantName, pr.ProcRule FROM Cases c LEFT JOIN (SELECT l.GrantID FROM LPRs l WHERE l.CaseNoID=? LIMIT 1) lg ON 1=1 LEFT JOIN Designation d ON c.DesignationID=d.DesignationID LEFT JOIN Grants g ON lg.GrantID=g.GrantID LEFT JOIN ProcRules pr ON c.ProcRuleID=pr.ProcRuleID WHERE c.CaseID=?", [$caseId, $caseId]); + abort_if(!$case, 404, 'Case not found'); + return $case; + } + + private function caseSpares(int $caseId): array + { + return DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,SUM(LPS.Qty) AS Qty,LPS.ProposalPrice AS Rate,LPS.GST,LPS.OtherCharges,SUM(LPS.TotalAONAmount) AS Amount,GROUP_CONCAT(J.JobNo SEPARATOR ', ') AS JobNos FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN au ON SP.AUID=AU.AUID INNER JOIN Jobs J ON LPS.JobID=J.JobID WHERE C.CaseID=? AND LPS.Qty>0 GROUP BY SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName,LPS.ProposalPrice,LPS.GST,LPS.OtherCharges ORDER BY SP.Section,SP.PartNo", [$caseId]); + } + + private function easSpares(int $caseId): array + { + return DB::select("SELECT SP.Section,SP.PartNo,SP.Nomenclature,AU.AUName AS AU,LPS.Qty,LPS.OrderPrice,LPS.FinalGST,LPS.TotalOrderAmount,V.VendorName FROM Cases C INNER JOIN LPRs L ON C.CaseID=L.CaseNoID INNER JOIN LPRspares LPS ON L.LPRID=LPS.LPRID INNER JOIN Spares SP ON LPS.SpareID=SP.SpareID INNER JOIN au ON SP.AUID=AU.AUID LEFT JOIN Vendors V ON LPS.L1VendorID=V.VendorID WHERE C.CaseID=? AND LPS.Qty>0 ORDER BY SP.Section,SP.PartNo", [$caseId]); + } +
Removed / Before Commit
- $grants = DB::select("SELECT 0 AS GrantID,'-- All Grants --' AS GrantName UNION SELECT GrantID,GrantName FROM Grants ORDER BY GrantName"); - $vendors = DB::select("SELECT 0 AS VendorID,'-- All Vendors --' AS VendorName UNION SELECT VendorID,VendorName FROM Vendors WHERE IsActive=1 ORDER BY VendorName"); - $ugroups = DB::select("SELECT 0 AS UserGroupID,'-- All Groups --' AS UserGroupName UNION SELECT UserGroupID,UserGroupName FROM UserGroups ORDER BY UserGroupName"); - $fyList = DB::select("SELECT DISTINCT YEAR(OrderDate) AS FY FROM LPRspares WHERE OrderDate IS NOT NULL AND YEAR(OrderDate)>=YEAR(GETDATE())-10 ORDER BY FY DESC"); - - $where = ["so.OrderNo IS NOT NULL", "LTRIM(RTRIM(so.OrderNo))!=''"]; - $params = []; - if ($grantId) { $where[] = 'g.GrantID=?'; $params[] = $grantId; } - if ($vendorId) { $where[] = 'v.VendorID=?'; $params[] = $vendorId; }
Added / After Commit
+ $grants = DB::select("SELECT 0 AS GrantID,'-- All Grants --' AS GrantName UNION SELECT GrantID,GrantName FROM Grants ORDER BY GrantName"); + $vendors = DB::select("SELECT 0 AS VendorID,'-- All Vendors --' AS VendorName UNION SELECT VendorID,VendorName FROM Vendors WHERE IsActive=1 ORDER BY VendorName"); + $ugroups = DB::select("SELECT 0 AS UserGroupID,'-- All Groups --' AS UserGroupName UNION SELECT UserGroupID,UserGroupName FROM UserGroups ORDER BY UserGroupName"); + $fyList = DB::select("SELECT DISTINCT YEAR(OrderDate) AS FY FROM LPRspares WHERE OrderDate IS NOT NULL AND YEAR(OrderDate)>=YEAR(CURDATE())-10 ORDER BY FY DESC"); + + $where = ["so.OrderNo IS NOT NULL", "TRIM(so.OrderNo)!=''"]; + $params = []; + if ($grantId) { $where[] = 'g.GrantID=?'; $params[] = $grantId; } + if ($vendorId) { $where[] = 'v.VendorID=?'; $params[] = $vendorId; }
Removed / Before Commit
- $selectedColumn = trim($request->query('column', '')); - $searchTerm = trim($request->query('search', '')); - - $tables = DB::select("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME NOT LIKE 'sys%' AND TABLE_NAME NOT LIKE 'dt%' ORDER BY TABLE_NAME"); - $columns = []; - $results = []; - $totalRows = 0; - $error = ''; - - if ($selectedTable) { - $columns = DB::select("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=? ORDER BY ORDINAL_POSITION", [$selectedTable]); - } - - if ($selectedTable && $selectedColumn && $searchTerm) { - $error = 'Invalid column selected.'; - } else { - try { - $results = DB::select("SELECT TOP 500 * FROM [$selectedTable] WHERE CAST([$selectedColumn] AS NVARCHAR(MAX)) LIKE ?", ["%$searchTerm%"]);
Added / After Commit
+ $selectedColumn = trim($request->query('column', '')); + $searchTerm = trim($request->query('search', '')); + + $tables = DB::select("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_TYPE='BASE TABLE' AND TABLE_NAME NOT LIKE 'sys%' AND TABLE_NAME NOT LIKE 'dt%' ORDER BY TABLE_NAME"); + $columns = []; + $results = []; + $totalRows = 0; + $error = ''; + + if ($selectedTable) { + $columns = DB::select("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION", [$selectedTable]); + } + + if ($selectedTable && $selectedColumn && $searchTerm) { + $error = 'Invalid column selected.'; + } else { + try { + $table = str_replace('`', '', $selectedTable);
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Http\Controllers; + + use App\Models\SalaryLevel; + use Illuminate\Http\Request; + + class SalaryLevelController extends Controller + { + public function index() + { + $levels = SalaryLevel::orderBy('name')->get(); + + return view('salary.levels.index', compact('levels')); + } + + public function create() + {
Removed / Before Commit
- public function index(Request $request) - { - $user = auth()->user(); - // Base query for WorkEquipment - $query = WorkEquipment::with([ - 'workOrder.workUnit.units', - 'workOrder.workUnit.wksps', - 'workOrder.workUnit.commands', - 'workOrder.workUser', - 'vir' - ]) - // ->where(function ($q) { - // $q->whereDoesntHave('vir') - // ->orWhereHas('vir', function ($sub) { - // $sub->whereNull('status'); - // }); - // }) - ->where('status', 'UNDER VIR')
Added / After Commit
+ public function index(Request $request) + { + $user = auth()->user(); + + $applyGroupFilter = function ($q) use ($user) { + if (!is_null($user->role)) { + if ($user->group_id) { + $q->where('work_equipment.group_id', $user->group_id); + } else { + $q->whereRaw('1 = 0'); + } + } + }; + + $query = WorkEquipment::with([ + 'workOrder.workUnit.units', + 'workOrder.workUnit.wksps', + 'workOrder.workUnit.commands',
Removed / Before Commit
- { - use HasFactory; - - protected $table = 'lprs'; // table name, अगर different हो तो change करें - - protected $fillable = [ - 'lpr_no',
Added / After Commit
+ { + use HasFactory; + + protected $table = 'LPRs'; + protected $primaryKey = 'LPRID'; + public $incrementing = true; + protected $keyType = 'int'; + public $timestamps = false; + + protected $fillable = [ + 'lpr_no',
Removed / Before Commit
Added / After Commit
+ <?php + + namespace App\Models; + + use Illuminate\Database\Eloquent\Factories\HasFactory; + use Illuminate\Database\Eloquent\Model; + + class SalaryLevel extends Model + { + use HasFactory; + + protected $fillable = [ + 'name', + ]; + }
Removed / Before Commit
Added / After Commit
+ <?php + + use Illuminate\Database\Migrations\Migration; + use Illuminate\Database\Schema\Blueprint; + use Illuminate\Support\Facades\Schema; + + return new class extends Migration + { + public function up(): void + { + if (!Schema::hasTable('salary_levels')) { + Schema::create('salary_levels', function (Blueprint $table) { + $table->id(); + $table->string('name')->unique(); + $table->timestamps(); + }); + } + }
Removed / Before Commit
Added / After Commit
+ CREATE TABLE IF NOT EXISTS `salary_levels` ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(255) NOT NULL, + `created_at` TIMESTAMP NULL DEFAULT NULL, + `updated_at` TIMESTAMP NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `salary_levels_name_unique` (`name`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Removed / Before Commit
- - @include('layouts.js') - @yield('scripts') - </body> - - <script>
Added / After Commit
+ + @include('layouts.js') + @yield('scripts') + @stack('scripts') + + </body> + + <script>
Removed / Before Commit
- <!-- Required meta tags --> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <!--favicon--> - <link rel="icon" href="{{asset('storage/'.$data->favicon_path)}}" type="image/png"> - \ No newline at end of file
Added / After Commit
+ <!-- Required meta tags --> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="icon" href="{{asset('storage/'.$data->favicon_path)}}" type="image/png"> + \ No newline at end of file
Removed / Before Commit
- updateSpare: (id) => `{{ url('lpr/edit/spare') }}/${id}`, - addSpare: (id) => `{{ url('lpr/edit') }}/${id}/spare`, - deleteSpare: (id) => `{{ url('lpr/edit/spare') }}/${id}`, - }; - - const CSRF = document.querySelector('meta[name="csrf-token"]').content; - - function calcNACValidity() { - const d = document.getElementById('txtNACDate').value; - if (!d) { document.getElementById('txtNACValidity').value=''; return; } - const dt = new Date(d); dt.setMonth(dt.getMonth()+6); - document.getElementById('txtNACValidity').value = dt.toISOString().split('T')[0]; - } - - async function loadLPRs() {
Added / After Commit
+ updateSpare: (id) => `{{ url('lpr/edit/spare') }}/${id}`, + addSpare: (id) => `{{ url('lpr/edit') }}/${id}/spare`, + deleteSpare: (id) => `{{ url('lpr/edit/spare') }}/${id}`, + nacValidity: (date) => `{{ route('lpr.nac-validity') }}?nacDate=${encodeURIComponent(date)}`, + }; + + const CSRF = document.querySelector('meta[name="csrf-token"]').content; + + async function calcNACValidity() { + const d = document.getElementById('txtNACDate').value; + if (!d) { + document.getElementById('txtNACValidity').value = ''; + return; + } + + try { + const response = await fetch(ROUTES.nacValidity(d), { + headers: { 'Accept': 'application/json' }
Removed / Before Commit
- unit: '{{ route('lpr.unit.store') }}', - eqpt: '{{ route('lpr.eqpt.store') }}', - jobtype: '{{ route('lpr.jobtype.store') }}', - }; - - async function post(url, data) { - return r.json(); - } - - function calcNACValidity() { - const d = document.getElementById('txtNACDate').value; - if (!d) { document.getElementById('txtNACValidity').value = ''; return; } - const dt = new Date(d); dt.setMonth(dt.getMonth() + 6); - document.getElementById('txtNACValidity').value = dt.toISOString().split('T')[0]; - } - - async function saveLPR() {
Added / After Commit
+ unit: '{{ route('lpr.unit.store') }}', + eqpt: '{{ route('lpr.eqpt.store') }}', + jobtype: '{{ route('lpr.jobtype.store') }}', + nacValidity: (date) => `{{ route('lpr.nac-validity') }}?nacDate=${encodeURIComponent(date)}`, + }; + + async function post(url, data) { + return r.json(); + } + + function showMsg(text, cls = 'info') { + const box = document.getElementById('msgBox'); + if (!box) return; + box.textContent = text; + box.className = `alert alert-${cls} fw-bold border-start border-5`; + box.classList.remove('d-none'); + setTimeout(() => box.classList.add('d-none'), 5000); + }