latest()->get(); } public function getRequestForCustomer() { return RefundRequest::with('refund_details', 'refund_details.refund_products', 'order')->where('customer_id', auth()->user()->id)->latest()->paginate(3); } public function getRequestSeller() { $seller_id = getParentSellerId(); return RefundRequestDetail::with('refund_request', 'seller', 'refund_products', 'order_package')->where('seller_id', $seller_id)->latest()->get(); } public function store($data, $user) { $package = OrderPackageDetail::find($data['package_id']); $shippingMethod = null; if($package){ $shippingMethod = ShippingMethod::find($package->shipping_method); }else{ Toastr::error('Invalid Request.'); return redirect()->back(); } //ga4 if(app('business_settings')->where('type', 'google_analytics')->first()->status == 1){ $eData = [ 'name' => 'refund', 'params' => [ "currency" => currencyCode(), "value"=> 1, "transaction_id"=> $data['order_id'], "items" => json_decode($data['e_items']), ], ]; $this->postEvent($eData); } //end ga4 $total_return_amount = 0; $refund_request = new RefundRequest; $refund_request->customer_id = $user->id; $refund_request->order_id = $data['order_id']; $refund_request->refund_method = $data['money_get_method']; $refund_request->shipping_method = $data['shipping_way']; if ($data['shipping_way'] == "courier") { $refund_request->shipping_method_id = $shippingMethod->id; $refund_request->pick_up_address_id = $data['pick_up_address_id']; } else { $refund_request->shipping_method_id = $shippingMethod->id; $refund_request->drop_off_address = $data['drop_off_courier_address']; } $refund_request->additional_info = $data['additional_info']; $refund_request->save(); if ($data['money_get_method'] == "bank_transfer") { BankPayment::create([ 'itemable_id' => $refund_request->id, 'itemable_type' => RefundRequest::class, 'bank_name' => $data['bank_name'], 'branch_name' => $data['branch_name'], 'account_number' => $data['account_no'], 'account_holder' => $data['account_name'], ]); } foreach ($data['product_ids'] as $key => $send_product_id) { $split = explode('-', $send_product_id); $package[$key] = $split[0]; $product[$key] = $split[1]; $seller[$key] = $split[2]; $amount[$key] = $split[3]; $request_detail_info = [ "refund_request_id" => $refund_request->id, "order_package_id" => $package->id, "seller_id" => $package->seller->id ]; $refund_request_details = RefundRequestDetail::updateOrCreate($request_detail_info); $request_product_info = [ 'refund_request_detail_id' => $refund_request_details->id, 'seller_product_sku_id' => $product[$key], 'refund_reason_id' => $data['reason_' . $split[1]], 'return_qty' => $data['qty_' . $split[1]], 'return_amount' => $amount[$key] * $data['qty_' . $split[1]], ]; $request_product = RefundProduct::Create($request_product_info); $total_return_amount += $request_product->return_amount; } $refund_quantity = $refund_request_details->refund_products->sum('return_qty'); $package_product_qty = $package->products->sum('qty'); if($refund_quantity == $package_product_qty){ $refund_request->update([ 'total_return_amount' => $total_return_amount + $package->shipping_cost ]); }else{ $refund_request->update([ 'total_return_amount' => $total_return_amount ]); } return true; } public function findByID($id) { return RefundRequest::with('refund_details', 'refund_details.refund_products', 'order')->findOrFail($id); } public function findDetailByID($id) { return RefundRequestDetail::with('refund_request', 'refund_request.order', 'refund_request.shipping_gateway', 'seller', 'refund_products', 'order_package')->findOrFail($id); } public function updateRefundRequestByAdmin($data, $id) { $refund_request = RefundRequest::findOrFail($id); $refund_details = $refund_request->refund_details->first(); if(!isModuleActive('MultiVendor')){ if ($refund_request->is_refunded == 0 && $data['is_refunded'] == 1) { $refund_infos['seller_id'] = $refund_details->seller_id; $refund_infos['amount'] = $refund_request->total_return_amount; $refund_infos['type'] = 'Refund'; if ($refund_request->refund_method == "wallet") { $walletRepo = new WalletRepository; $walletRepo->walletRefundPaymentTransaction($refund_request->id, $refund_infos, $refund_request->customer_id); $this->sendMailTest($refund_request->customer->email, "Refund Money Back to You", "Your Money has been added in your wallet for refund purpose."); } else { $walletRepo = new WalletRepository; $walletRepo->walletRefundPaymentTransaction($refund_request->id, $refund_infos, null); $this->sendMailTest($refund_request->customer->email, "Refund Money Back to You", "Your Money has been returned in your provided bank Account for refund purpose."); } } if ($refund_request->is_refunded != $data['is_refunded']) { if (app('business_settings')->where('type', 'mail_notification')->first()->status == 1) { switch ($data['is_refunded']) { case 0: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 12); break; case 1: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 11); break; default: break; } } } if($refund_details->processing_state != $data['processing_state']){ $refund_details->processing_state = $data['processing_state']; $refund_details->save(); } } if ($refund_request->is_confirmed != $data['is_confirmed']) { if (app('business_settings')->where('type', 'mail_notification')->first()->status == 1) { switch ($data['is_confirmed']) { case 0: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 8); break; case 1: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 9); break; case 2: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 10); break; default: break; } } if(isModuleActive('MultiVendor')){ if($data['is_confirmed'] == 1){ $refund_details->update([ 'processing_state' => 2 ]); } } } if ($refund_request->is_completed != $data['is_completed']) { if (app('business_settings')->where('type', 'mail_notification')->first()->status == 1) { switch ($data['is_completed']) { case 1: $this->sendOrderRefundInfoUpdateMail($refund_request->order, 13); break; default: break; } } } $refund_request->is_confirmed = $data['is_confirmed']; $refund_request->is_completed = $data['is_completed']; if(!isModuleActive('MultiVendor')){ $refund_request->is_refunded = $data['is_refunded']; } $refund_request->save(); if($data['is_confirmed'] == 1 ){ $refundOrderSyncController = new RefundOrderSyncWithCarrierController(); $res = $refundOrderSyncController->refundOrderSyncWithCarrier($id); } } public function updateRefundStateBySeller($data, $id) { $refund = RefundRequestDetail::findOrFail($id); $last_refund_process = RefundProcess::orderByDesc('id')->first(); $refund->update([ 'processing_state' => $data['processing_state'] ]); if(!$refund->refund_request->is_refunded && $data['processing_state'] == $last_refund_process->id){ $refund_infos['seller_id'] = $refund->seller_id; $refund_infos['amount'] = $refund->refund_request->total_return_amount; $refund_infos['type'] = 'Refund'; if ($refund->refund_request->refund_method == "wallet") { $walletRepo = new WalletRepository; $walletRepo->walletRefundPaymentTransaction($refund->refund_request->id, $refund_infos, $refund->refund_request->customer_id); $this->sendMailTest($refund->refund_request->customer->email, "Refund Money Back to You", "Your Money has been added in your wallet for refund purpose."); } else { $walletRepo = new WalletRepository; $walletRepo->walletRefundPaymentTransaction($refund->refund_request->id, $refund_infos, null); $this->sendMailTest($refund->refund_request->customer->email, "Refund Money Back to You", "Your Money has been returned in your provided bank Account for refund purpose."); } $refund->refund_request->update([ 'is_refunded' => 1, 'is_completed' => 1 ]); } RefundState::create([ 'refund_request_detail_id' => $id, 'state' => $data['processing_state'] ]); if (app('business_settings')->where('type', 'mail_notification')->first()->status == 1) { $this->sendOrderRefundorDeliveryProcessMail(@$refund->refund_request->order, "Modules\Refund\Entities\RefundProcess", $data['processing_state']); } } public function getActiveShippingRate() { $methods = ShippingMethod::where('request_by_user',1)->where('is_active', 1)->whereHas('carrier', function($q){ $q->where('status', 1); })->with(['carrier'])->get(); if(!isModuleActive('ShipRocket')){ $methods = $methods->filter(function($item) { if($item->carrier->slug != 'Shiprocket'){ return $item->id; } }); } return $methods; } public function getRefundCommision($id){ $seller_id = getParentSellerId(); $refund_details = $this->findDetailByID($id); $sales_commision = PackageWiseSellerCommision::where('package_id', $refund_details->order_package_id)->where('seller_id', $seller_id)->first(); if($sales_commision){ return $sales_commision->amount; } return 0; } }