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,26 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Models\Estimate; | ||||
|  | ||||
| class ChangeEstimateStatusController extends Controller | ||||
| { | ||||
|     /** | ||||
|     * Handle the incoming request. | ||||
|     * | ||||
|     * @param  \Illuminate\Http\Request  $request | ||||
|     * @param  Estimate $estimate | ||||
|     * @return \Illuminate\Http\Response | ||||
|     */ | ||||
|    public function __invoke(Request $request, Estimate $estimate) | ||||
|    { | ||||
|         $estimate->update($request->only('status')); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,95 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Models\Estimate; | ||||
| use Crater\Models\Invoice; | ||||
| use Carbon\Carbon; | ||||
| use Crater\Models\CompanySetting; | ||||
| use Illuminate\Support\Facades\Auth; | ||||
|  | ||||
| class ConvertEstimateController extends Controller | ||||
| { | ||||
|     /** | ||||
|     * Handle the incoming request. | ||||
|     * | ||||
|     * @param  \Illuminate\Http\Request  $request | ||||
|     * @param  \Crater\Models\Estimate $estimate | ||||
|     * @return \Illuminate\Http\Response | ||||
|     */ | ||||
|     public function __invoke(Request $request, Estimate $estimate) | ||||
|     { | ||||
|         $estimate->load(['items', 'items.taxes', 'user', 'estimateTemplate', 'taxes']); | ||||
|  | ||||
|         $invoice_date = Carbon::now(); | ||||
|         $due_date = Carbon::now()->addDays(7); | ||||
|  | ||||
|         $invoice_prefix = CompanySetting::getSetting( | ||||
|             'invoice_prefix', | ||||
|             $request->header('company') | ||||
|         ); | ||||
|  | ||||
|         $invoice = Invoice::create([ | ||||
|             'creator_id' => Auth::id(), | ||||
|             'invoice_date' => $invoice_date->format('Y-m-d'), | ||||
|             'due_date' => $due_date->format('Y-m-d'), | ||||
|             'invoice_number' => $invoice_prefix . "-" . Invoice::getNextInvoiceNumber($invoice_prefix), | ||||
|             'reference_number' => $estimate->reference_number, | ||||
|             'user_id' => $estimate->user_id, | ||||
|             'company_id' => $request->header('company'), | ||||
|             'invoice_template_id' => 1, | ||||
|             'status' => Invoice::STATUS_DRAFT, | ||||
|             'paid_status' => Invoice::STATUS_UNPAID, | ||||
|             'sub_total' => $estimate->sub_total, | ||||
|             'discount' => $estimate->discount, | ||||
|             'discount_type' => $estimate->discount_type, | ||||
|             'discount_val' => $estimate->discount_val, | ||||
|             'total' => $estimate->total, | ||||
|             'due_amount' => $estimate->total, | ||||
|             'tax_per_item' => $estimate->tax_per_item, | ||||
|             'discount_per_item' => $estimate->discount_per_item, | ||||
|             'tax' => $estimate->tax, | ||||
|             'notes' => $estimate->notes, | ||||
|             'unique_hash' => str_random(60) | ||||
|         ]); | ||||
|  | ||||
|         $invoiceItems = $estimate->items->toArray(); | ||||
|  | ||||
|         foreach ($invoiceItems as $invoiceItem) { | ||||
|             $invoiceItem['company_id'] = $request->header('company'); | ||||
|             $invoiceItem['name'] = $invoiceItem['name']; | ||||
|             $item = $invoice->items()->create($invoiceItem); | ||||
|  | ||||
|             if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) { | ||||
|                 foreach ($invoiceItem['taxes'] as $tax) { | ||||
|                     $tax['company_id'] = $request->header('company'); | ||||
|  | ||||
|                     if ($tax['amount']) { | ||||
|                         $item->taxes()->create($tax); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if ($estimate->taxes) { | ||||
|             foreach ($estimate->taxes->toArray() as $tax) { | ||||
|                 $tax['company_id'] = $request->header('company'); | ||||
|                 unset($tax['estimate_id']); | ||||
|                 $invoice->taxes()->create($tax); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $invoice = Invoice::with([ | ||||
|             'items', | ||||
|             'user', | ||||
|             'invoiceTemplate', | ||||
|             'taxes' | ||||
|         ])->find($invoice->id); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'invoice' => $invoice | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								app/Http/Controllers/V1/Estimate/EstimatePdfController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/Http/Controllers/V1/Estimate/EstimatePdfController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Crater\Models\Estimate;  | ||||
| use Crater\Http\Controllers\Controller; | ||||
|  | ||||
| class EstimatePdfController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Handle the incoming request. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function __invoke(Estimate $estimate) | ||||
|     { | ||||
|         return $estimate->getGeneratedPDFOrStream('estimate'); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Crater\Models\EstimateTemplate; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Illuminate\Http\Request; | ||||
|  | ||||
| class EstimateTemplatesController extends Controller | ||||
| { | ||||
|     /** | ||||
|      * Handle the incoming request. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request  $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function __invoke(Request $request) | ||||
|     { | ||||
|         return response()->json([ | ||||
|             'templates' => EstimateTemplate::all() | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										104
									
								
								app/Http/Controllers/V1/Estimate/EstimatesController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								app/Http/Controllers/V1/Estimate/EstimatesController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Models\Estimate; | ||||
| use Crater\Http\Requests\EstimatesRequest; | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Http\Requests\DeleteEstimatesRequest; | ||||
| use Crater\Jobs\GenerateEstimatePdfJob; | ||||
|  | ||||
| class EstimatesController extends Controller | ||||
| { | ||||
|     public function index(Request $request) | ||||
|     { | ||||
|         $limit = $request->has('limit') ? $request->limit : 10; | ||||
|  | ||||
|         $estimates = Estimate::with([ | ||||
|                 'items', | ||||
|                 'user', | ||||
|                 'estimateTemplate', | ||||
|                 'taxes', | ||||
|                 'creator' | ||||
|             ]) | ||||
|             ->join('users', 'users.id', '=', 'estimates.user_id') | ||||
|             ->applyFilters($request->only([ | ||||
|                 'status', | ||||
|                 'customer_id', | ||||
|                 'estimate_id', | ||||
|                 'estimate_number', | ||||
|                 'from_date', | ||||
|                 'to_date', | ||||
|                 'search', | ||||
|                 'orderByField', | ||||
|                 'orderBy' | ||||
|             ])) | ||||
|             ->whereCompany($request->header('company')) | ||||
|             ->select('estimates.*', 'users.name') | ||||
|             ->latest() | ||||
|             ->paginateData($limit); | ||||
|  | ||||
|         $siteData = [ | ||||
|             'estimates' => $estimates, | ||||
|             'estimateTotalCount' => Estimate::count() | ||||
|         ]; | ||||
|  | ||||
|         return response()->json($siteData); | ||||
|     } | ||||
|  | ||||
|     public function store(EstimatesRequest $request) | ||||
|     { | ||||
|         $estimate = Estimate::createEstimate($request); | ||||
|  | ||||
|         if ($request->has('estimateSend')) { | ||||
|             $estimate->send($request->title, $request->body); | ||||
|         } | ||||
|  | ||||
|         GenerateEstimatePdfJob::dispatch($estimate); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'estimate' => $estimate | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function show(Request $request, Estimate $estimate) | ||||
|     { | ||||
|         $estimate->load([ | ||||
|             'items', | ||||
|             'items.taxes', | ||||
|             'user', | ||||
|             'estimateTemplate', | ||||
|             'creator', | ||||
|             'taxes', | ||||
|             'taxes.taxType', | ||||
|             'fields.customField' | ||||
|         ]); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'estimate' => $estimate, | ||||
|             'nextEstimateNumber' => $estimate->getEstimateNumAttribute(), | ||||
|             'estimatePrefix' => $estimate->getEstimatePrefixAttribute(), | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function update(EstimatesRequest $request, Estimate $estimate) | ||||
|     { | ||||
|         $estimate = $estimate->updateEstimate($request); | ||||
|  | ||||
|         GenerateEstimatePdfJob::dispatch($estimate, true); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'estimate' => $estimate | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function delete(DeleteEstimatesRequest $request) | ||||
|     { | ||||
|         Estimate::destroy($request->ids); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										23
									
								
								app/Http/Controllers/V1/Estimate/SendEstimateController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								app/Http/Controllers/V1/Estimate/SendEstimateController.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Http\Controllers\V1\Estimate; | ||||
|  | ||||
| use Crater\Http\Controllers\Controller; | ||||
| use Crater\Models\Estimate; | ||||
| use Crater\Http\Requests\SendEstimatesRequest; | ||||
|  | ||||
| class SendEstimateController extends Controller | ||||
| { | ||||
|     /** | ||||
|     * Handle the incoming request. | ||||
|     * | ||||
|     * @param  \Crater\Http\Requests\SendEstimatesRequest  $request | ||||
|     * @return \Illuminate\Http\JsonResponse | ||||
|     */ | ||||
|     public function __invoke(SendEstimatesRequest $request, Estimate $estimate) | ||||
|     { | ||||
|         $response = $estimate->send($request->all()); | ||||
|  | ||||
|         return response()->json($response); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user