mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 05:31:10 -04:00 
			
		
		
		
	build version 400
This commit is contained in:
		| @ -0,0 +1,34 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Expense; | ||||
|  | ||||
| use Crater\Models\Expense; | ||||
| use Crater\Http\Controllers\Controller; | ||||
|  | ||||
| class DownloadReceiptController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Handle the incoming request. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @param  Expense $expense | ||||
|      * @param   string $hash | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function __invoke(Expense $expense) | ||||
|     { | ||||
|         if ($expense) { | ||||
|             $media = $expense->getFirstMedia('receipts'); | ||||
|             if ($media) { | ||||
|                 $imagePath = $media->getPath(); | ||||
|                 $response = \Response::download($imagePath, $media->file_name); | ||||
|                 ob_end_clean(); | ||||
|                 return $response; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return response()->json([ | ||||
|             'error' => 'receipt_not_found' | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										101
									
								
								app/Http/Controllers/V1/Expense/ExpenseCategoriesController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								app/Http/Controllers/V1/Expense/ExpenseCategoriesController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | ||||
| <?php | ||||
| namespace Crater\Http\Controllers\V1\Expense; | ||||
|  | ||||
| use Crater\Models\ExpenseCategory; | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Http\Requests\ExpenseCategoryRequest; | ||||
| use Crater\Http\Controllers\Controller; | ||||
|  | ||||
| class ExpenseCategoriesController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function index(Request $request) | ||||
|     { | ||||
|         $limit = $request->has('limit') ? $request->limit : 5; | ||||
|  | ||||
|         $categories = ExpenseCategory::whereCompany($request->header('company')) | ||||
|             ->applyFilters($request->only([ | ||||
|                 'category_id', | ||||
|                 'search' | ||||
|             ])) | ||||
|             ->latest() | ||||
|             ->paginateData($limit); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'categories' => $categories | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function store(ExpenseCategoryRequest $request) | ||||
|     { | ||||
|         $data = $request->validated(); | ||||
|         $data['company_id'] = $request->header('company'); | ||||
|         $category = ExpenseCategory::create($data); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'category' => $category, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Display the specified resource. | ||||
|      * | ||||
|      * @param  \Crater\Models\ExpenseCategory $category | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function show(ExpenseCategory $category) | ||||
|     { | ||||
|         return response()->json([ | ||||
|             'category' => $category | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update the specified resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @param  \Crater\Models\ExpenseCategory $ExpenseCategory | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function update(ExpenseCategoryRequest $request, ExpenseCategory $category) | ||||
|     { | ||||
|         $category->update($request->validated()); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'category' => $category, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove the specified resource from storage. | ||||
|      * | ||||
|      * @param  \Crater\ExpensesCategory $category | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function destroy(ExpenseCategory $category) | ||||
|     { | ||||
|         if ($category->expenses() && $category->expenses()->count() > 0) { | ||||
|             return response()->json([ | ||||
|                 'success' => false | ||||
|             ]); | ||||
|         } | ||||
|  | ||||
|         $category->delete(); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										101
									
								
								app/Http/Controllers/V1/Expense/ExpensesController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								app/Http/Controllers/V1/Expense/ExpensesController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Expense; | ||||
|  | ||||
| use Crater\Models\Expense; | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Http\Requests\ExpenseRequest; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Http\Requests\DeleteExpensesRequest; | ||||
|  | ||||
| class ExpensesController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @return \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function index(Request $request) | ||||
|     { | ||||
|         $limit = $request->has('limit') ? $request->limit : 10; | ||||
|  | ||||
|         $expenses = Expense::with('category', 'creator', 'fields') | ||||
|             ->leftJoin('users', 'users.id', '=', 'expenses.user_id') | ||||
|             ->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id') | ||||
|             ->applyFilters($request->only([ | ||||
|                 'expense_category_id', | ||||
|                 'user_id', | ||||
|                 'expense_id', | ||||
|                 'search', | ||||
|                 'from_date', | ||||
|                 'to_date', | ||||
|                 'orderByField', | ||||
|                 'orderBy' | ||||
|             ])) | ||||
|             ->whereCompany($request->header('company')) | ||||
|             ->select('expenses.*', 'expense_categories.name', 'users.name as user_name') | ||||
|             ->paginateData($limit); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'expenses' => $expenses, | ||||
|             'expenseTotalCount' => Expense::count() | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Store a newly created resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @return \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function store(ExpenseRequest $request) | ||||
|     { | ||||
|         $expense = Expense::createExpense($request); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'expense' => $expense, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Display the specified resource. | ||||
|      * | ||||
|      * @param  \Crater\Models\Expense $expense | ||||
|      * @return \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function show(Expense $expense) | ||||
|     { | ||||
|         $expense->load('creator', 'fields.customField'); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'expense' => $expense | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Update the specified resource in storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @param  \Crater\Models\Expense $expense | ||||
|      * @return \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function update(ExpenseRequest $request, Expense $expense) | ||||
|     { | ||||
|         $expense->updateExpense($request); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'expense' => $expense, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function delete(DeleteExpensesRequest $request) | ||||
|     { | ||||
|         Expense::destroy($request->ids); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										40
									
								
								app/Http/Controllers/V1/Expense/ShowReceiptController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								app/Http/Controllers/V1/Expense/ShowReceiptController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Expense; | ||||
|  | ||||
| use Crater\Models\Expense; | ||||
| use Crater\Http\Controllers\Controller; | ||||
|  | ||||
| class ShowReceiptController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Retrieve details of an expense receipt from storage. | ||||
|      * | ||||
|      * @param   \Crater\Models\Expense $expense | ||||
|      * @return  \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function __invoke(Expense $expense) | ||||
|     { | ||||
|         $imagePath  = null; | ||||
|  | ||||
|         if ($expense) { | ||||
|             $media = $expense->getFirstMedia('receipts'); | ||||
|             if ($media) { | ||||
|                 $imagePath = $media->getPath(); | ||||
|             } else { | ||||
|                 return response()->json([ | ||||
|                     'error' => 'receipt_does_not_exist' | ||||
|                 ]); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $type = \File::mimeType($imagePath); | ||||
|  | ||||
|         $image = 'data:' . $type . ';base64,' . base64_encode(file_get_contents($imagePath)); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'image' => $image, | ||||
|             'type' => $type | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								app/Http/Controllers/V1/Expense/UploadReceiptController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								app/Http/Controllers/V1/Expense/UploadReceiptController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Expense; | ||||
|  | ||||
| use Crater\Models\Expense; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Illuminate\Http\Request; | ||||
|  | ||||
| class UploadReceiptController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Upload the expense receipts to storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @param  Expense $expense | ||||
|      * @return \Illuminate\Http\JsonResponse | ||||
|      */ | ||||
|     public function __invoke(Request $request, Expense $expense) | ||||
|     { | ||||
|         $data = json_decode($request->attachment_receipt); | ||||
|  | ||||
|         if ($data) { | ||||
|             if ($request->type === 'edit') { | ||||
|                 $expense->clearMediaCollection('receipts'); | ||||
|             } | ||||
|  | ||||
|             $expense->addMediaFromBase64($data->data) | ||||
|                 ->usingFileName($data->name) | ||||
|                 ->toMediaCollection('receipts', 'local'); | ||||
|         } | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => 'Expense receipts uploaded successfully' | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user