Compare commits
13 Commits
3bab0310a1
...
jothi-patc
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a7b42dea5 | |||
| 0ce59ebe22 | |||
|
|
053c07bcfb | ||
| c032cdc58d | |||
|
|
b09ed3481a | ||
| 4074374614 | |||
|
|
c2d840d772 | ||
| 15712c44b6 | |||
|
|
119262405c | ||
| 99f7450e5e | |||
|
|
84748c5e3d | ||
| f6f6f0924e | |||
|
|
4ec781b942 |
23
.github/workflows/gemini-pr-review.yaml
vendored
23
.github/workflows/gemini-pr-review.yaml
vendored
@@ -5,15 +5,20 @@ name: Gemini PR Review
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, reopened, synchronize]
|
types: [opened, reopened, synchronize]
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
review:
|
gemini-pr-review:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
name: Gemini PR Review
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # This fetches the full history
|
fetch-depth: 0 # This fetches the full history
|
||||||
|
|
||||||
@@ -22,7 +27,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: '24'
|
node-version: '24'
|
||||||
|
|
||||||
|
|
||||||
- name: Get npm cache directory
|
- name: Get npm cache directory
|
||||||
id: npm-cache-dir
|
id: npm-cache-dir
|
||||||
run: |
|
run: |
|
||||||
@@ -36,8 +40,14 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-npm-global-
|
${{ runner.os }}-npm-global-
|
||||||
|
|
||||||
# - name: Install Gemini CLI globally
|
- name: Install Gemini CLI globally (if not already installed)
|
||||||
# run: npm install -g --loglevel=http @google/gemini-cli
|
run: |
|
||||||
|
if ! command -v gemini &> /dev/null; then
|
||||||
|
echo "Gemini CLI not found, installing..."
|
||||||
|
npm install -g --loglevel=http @google/gemini-cli
|
||||||
|
else
|
||||||
|
echo "Gemini CLI already installed."
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Generate git diff and review with Gemini
|
- name: Generate git diff and review with Gemini
|
||||||
id: review
|
id: review
|
||||||
@@ -52,7 +62,6 @@ jobs:
|
|||||||
|
|
||||||
cat /tmp/gemini-client-error*.json || true
|
cat /tmp/gemini-client-error*.json || true
|
||||||
|
|
||||||
|
|
||||||
- name: Post output to PR comment
|
- name: Post output to PR comment
|
||||||
id: post_comment
|
id: post_comment
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -454,6 +454,22 @@ class InvoiceInTransitResource extends Resource
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mandatoryColumns = 23;
|
||||||
|
|
||||||
|
$firstRow = $rows[0] ?? [];
|
||||||
|
|
||||||
|
if (count($firstRow) < $mandatoryColumns) {
|
||||||
|
|
||||||
|
Notification::make()
|
||||||
|
->title('Invalid Excel Format')
|
||||||
|
->body('Few columns not found. Columns A to W are mandatory.')
|
||||||
|
->danger()
|
||||||
|
->persistent()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($rows as $index => $row)
|
foreach ($rows as $index => $row)
|
||||||
{
|
{
|
||||||
if ($index == 0) {
|
if ($index == 0) {
|
||||||
|
|||||||
@@ -30,6 +30,19 @@ class TestingTempResource extends Resource
|
|||||||
->schema([
|
->schema([
|
||||||
Forms\Components\TextInput::make('name')
|
Forms\Components\TextInput::make('name')
|
||||||
->label('File Name'),
|
->label('File Name'),
|
||||||
|
Forms\Components\Select::make('selected_file')
|
||||||
|
->label('Select Uploaded File')
|
||||||
|
->options(function () {
|
||||||
|
return collect(Storage::disk('local')->files('uploads'))
|
||||||
|
->mapWithKeys(function ($file) {
|
||||||
|
return [
|
||||||
|
$file => basename($file), // value => label
|
||||||
|
];
|
||||||
|
})
|
||||||
|
->toArray();
|
||||||
|
})
|
||||||
|
->searchable()
|
||||||
|
->reactive(),
|
||||||
Forms\Components\FileUpload::make('attachment')
|
Forms\Components\FileUpload::make('attachment')
|
||||||
->label('Upload')
|
->label('Upload')
|
||||||
// ->acceptedFileTypes(['application/pdf'])
|
// ->acceptedFileTypes(['application/pdf'])
|
||||||
@@ -41,6 +54,7 @@ class TestingTempResource extends Resource
|
|||||||
Forms\Components\Actions::make([
|
Forms\Components\Actions::make([
|
||||||
Action::make('uploadNow')
|
Action::make('uploadNow')
|
||||||
->label('File Upload')
|
->label('File Upload')
|
||||||
|
->color('success')
|
||||||
->action(function ($get) {
|
->action(function ($get) {
|
||||||
|
|
||||||
$uploadedFiles = $get('attachment');
|
$uploadedFiles = $get('attachment');
|
||||||
@@ -76,41 +90,94 @@ class TestingTempResource extends Resource
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
// Action::make('downloadAttachment')
|
||||||
|
// ->label('Download File')
|
||||||
|
// ->action(function ($get) {
|
||||||
|
|
||||||
|
// $fileName = basename($get('selected_file'));
|
||||||
|
|
||||||
|
// //dd($fileName);
|
||||||
|
|
||||||
|
// // if (!$fileName) {
|
||||||
|
// // Notification::make()
|
||||||
|
// // ->title('Enter file name to download')
|
||||||
|
// // ->danger()
|
||||||
|
// // ->send();
|
||||||
|
// // return;
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// $files = Storage::disk('local')->files('uploads');
|
||||||
|
|
||||||
|
// foreach ($files as $file) {
|
||||||
|
|
||||||
|
// if (pathinfo($file, PATHINFO_FILENAME) === $fileName) {
|
||||||
|
// dd($fileName);
|
||||||
|
// Notification::make()
|
||||||
|
// ->title("File downloaded successfully")
|
||||||
|
// ->success()
|
||||||
|
// ->send();
|
||||||
|
|
||||||
|
// return response()->download(
|
||||||
|
// Storage::disk('local')->path($file)
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Notification::make()
|
||||||
|
// // ->title('File not found')
|
||||||
|
// // ->danger()
|
||||||
|
// // ->send();
|
||||||
|
// }),
|
||||||
Action::make('downloadAttachment')
|
Action::make('downloadAttachment')
|
||||||
->label('Download File')
|
->label('Download File')
|
||||||
->action(function ($get) {
|
->action(function ($get) {
|
||||||
|
|
||||||
$fileName = $get('name');
|
$filePath = $get('selected_file'); // uploads/filename.pdf
|
||||||
|
|
||||||
if (!$fileName) {
|
|
||||||
Notification::make()
|
|
||||||
->title('Enter file name to download')
|
|
||||||
->danger()
|
|
||||||
->send();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$files = Storage::disk('local')->files('uploads');
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
if (pathinfo($file, PATHINFO_FILENAME) === $fileName) {
|
|
||||||
|
|
||||||
Notification::make()
|
|
||||||
->title("File downloaded successfully")
|
|
||||||
->success()
|
|
||||||
->send();
|
|
||||||
|
|
||||||
return response()->download(
|
|
||||||
Storage::disk('local')->path($file)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!$filePath || !Storage::disk('local')->exists($filePath)) {
|
||||||
Notification::make()
|
Notification::make()
|
||||||
->title('File not found')
|
->title('File not found')
|
||||||
->danger()
|
->danger()
|
||||||
->send();
|
->send();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Notification::make()
|
||||||
|
->title('File downloaded successfully')
|
||||||
|
->success()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
return response()->download(
|
||||||
|
Storage::disk('local')->path($filePath)
|
||||||
|
);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
Action::make('deleteAttachment')
|
||||||
|
->label('Delete File')
|
||||||
|
->color('danger')
|
||||||
|
->requiresConfirmation()
|
||||||
|
->action(function ($get) {
|
||||||
|
|
||||||
|
$filePath = $get('selected_file'); // uploads/filename.pdf
|
||||||
|
|
||||||
|
if (!$filePath || !Storage::disk('local')->exists($filePath)) {
|
||||||
|
Notification::make()
|
||||||
|
->title('File not found')
|
||||||
|
->danger()
|
||||||
|
->send();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Storage::disk('local')->delete($filePath);
|
||||||
|
|
||||||
|
Notification::make()
|
||||||
|
->title('File deleted successfully')
|
||||||
|
->success()
|
||||||
|
->send();
|
||||||
|
}),
|
||||||
|
|
||||||
]),
|
]),
|
||||||
Forms\Components\Hidden::make('created_by')
|
Forms\Components\Hidden::make('created_by')
|
||||||
->label('Created By')
|
->label('Created By')
|
||||||
|
|||||||
106
app/Policies/TestingTempPolicy.php
Normal file
106
app/Policies/TestingTempPolicy.php
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use Illuminate\Auth\Access\Response;
|
||||||
|
use App\Models\TestingTemp;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class TestingTempPolicy
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine whether the user can view any models.
|
||||||
|
*/
|
||||||
|
public function viewAny(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('view-any TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can view the model.
|
||||||
|
*/
|
||||||
|
public function view(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('view TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can create models.
|
||||||
|
*/
|
||||||
|
public function create(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('create TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can update the model.
|
||||||
|
*/
|
||||||
|
public function update(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('update TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can delete the model.
|
||||||
|
*/
|
||||||
|
public function delete(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('delete TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can delete any models.
|
||||||
|
*/
|
||||||
|
public function deleteAny(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('delete-any TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can restore the model.
|
||||||
|
*/
|
||||||
|
public function restore(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('restore TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can restore any models.
|
||||||
|
*/
|
||||||
|
public function restoreAny(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('restore-any TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can replicate the model.
|
||||||
|
*/
|
||||||
|
public function replicate(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('replicate TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can reorder the models.
|
||||||
|
*/
|
||||||
|
public function reorder(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('reorder TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can permanently delete the model.
|
||||||
|
*/
|
||||||
|
public function forceDelete(User $user, TestingTemp $testingtemp): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('force-delete TestingTemp');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can permanently delete any models.
|
||||||
|
*/
|
||||||
|
public function forceDeleteAny(User $user): bool
|
||||||
|
{
|
||||||
|
return $user->checkPermissionTo('force-delete-any TestingTemp');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user