8889841crole_id); if($role->hasPermissionTo('returns-index')) { $permissions = Role::findByName($role->name)->permissions; foreach ($permissions as $permission) $all_permission[] = $permission->name; if(empty($all_permission)) $all_permission[] = 'dummy text'; if($request->input('warehouse_id')) $warehouse_id = $request->input('warehouse_id'); else $warehouse_id = 0; if($request->input('starting_date')) { $starting_date = $request->input('starting_date'); $ending_date = $request->input('ending_date'); } else { $starting_date = date("Y-m-d", strtotime(date('Y-m-d', strtotime('-1 year', strtotime(date('Y-m-d') ))))); $ending_date = date("Y-m-d"); } $lims_warehouse_list = Warehouse::where('is_active', true)->get(); return view('backend.return.index',compact('starting_date', 'ending_date', 'warehouse_id', 'all_permission', 'lims_warehouse_list')); } else return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module'); } public function returnData(Request $request) { $columns = array( 1 => 'created_at', 2 => 'reference_no', ); $warehouse_id = $request->input('warehouse_id'); if(Auth::user()->role_id > 2 && config('staff_access') == 'own') $totalData = Returns::where('user_id', Auth::id()) ->whereDate('created_at', '>=' ,$request->input('starting_date')) ->whereDate('created_at', '<=' ,$request->input('ending_date')) ->count(); elseif($warehouse_id != 0) $totalData = Returns::where('warehouse_id', $warehouse_id) ->whereDate('created_at', '>=' ,$request->input('starting_date')) ->whereDate('created_at', '<=' ,$request->input('ending_date')) ->count(); else $totalData = Returns::whereDate('created_at', '>=' ,$request->input('starting_date')) ->whereDate('created_at', '<=' ,$request->input('ending_date')) ->count(); $totalFiltered = $totalData; if($request->input('length') != -1) $limit = $request->input('length'); else $limit = $totalData; $start = $request->input('start'); $order = 'returns.'.$columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); if(empty($request->input('search.value'))) { $q = Returns::with('biller', 'customer', 'warehouse', 'user') ->whereDate('created_at', '>=' ,$request->input('starting_date')) ->whereDate('created_at', '<=' ,$request->input('ending_date')) ->offset($start) ->limit($limit) ->orderBy($order, $dir); if(Auth::user()->role_id > 2 && config('staff_access') == 'own') $q = $q->where('user_id', Auth::id()); elseif($warehouse_id != 0) $q = $q->where('warehouse_id', $warehouse_id); $returnss = $q->get(); } else { $search = $request->input('search.value'); $q = Returns::join('customers', 'returns.customer_id', '=', 'customers.id') ->join('billers', 'returns.biller_id', '=', 'billers.id') ->whereDate('returns.created_at', '=' , date('Y-m-d', strtotime(str_replace('/', '-', $search)))) ->offset($start) ->limit($limit) ->orderBy($order,$dir); if(Auth::user()->role_id > 2 && config('staff_access') == 'own') { $returnss = $q->select('returns.*') ->with('biller', 'customer', 'warehouse', 'user') ->where('returns.user_id', Auth::id()) ->orwhere([ ['returns.reference_no', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['customers.name', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['customers.phone_number', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['billers.name', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ])->get(); $totalFiltered = $q->where('returns.user_id', Auth::id()) ->orwhere([ ['returns.reference_no', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['customers.name', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['customers.phone_number', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->orwhere([ ['billers.name', 'LIKE', "%{$search}%"], ['returns.user_id', Auth::id()] ]) ->count(); } else { $returnss = $q->select('returns.*') ->with('biller', 'customer', 'warehouse', 'user') ->orwhere('returns.reference_no', 'LIKE', "%{$search}%") ->orwhere('customers.name', 'LIKE', "%{$search}%") ->orwhere('customers.phone_number', 'LIKE', "%{$search}%") ->orwhere('billers.name', 'LIKE', "%{$search}%") ->get(); $totalFiltered = $q->orwhere('returns.reference_no', 'LIKE', "%{$search}%") ->orwhere('customers.name', 'LIKE', "%{$search}%") ->orwhere('customers.phone_number', 'LIKE', "%{$search}%") ->orwhere('billers.name', 'LIKE', "%{$search}%") ->count(); } } $data = array(); if(!empty($returnss)) { foreach ($returnss as $key=>$returns) { $nestedData['id'] = $returns->id; $nestedData['key'] = $key; $nestedData['date'] = date(config('date_format'), strtotime($returns->created_at->toDateString())); $nestedData['reference_no'] = $returns->reference_no; if($returns->sale_id) { $sale_data = Sale::select('reference_no')->find($returns->sale_id); if($sale_data) $nestedData['sale_reference'] = $sale_data->reference_no; else $nestedData['sale_reference'] = 'N/A'; } else $nestedData['sale_reference'] = 'N/A'; $nestedData['warehouse'] = $returns->warehouse->name; $nestedData['biller'] = $returns->biller->name; $nestedData['customer'] = $returns->customer->name; $nestedData['grand_total'] = number_format($returns->grand_total, config('decimal')); $nestedData['options'] = '
'; if($returns->currency_id) $currency_code = Currency::select('code')->find($returns->currency_id)->code; else $currency_code = 'N/A'; $nestedData['return'] = array( '[ "'.date(config('date_format'), strtotime($returns->created_at->toDateString())).'"', ' "'.$returns->reference_no.'"', ' "'.$returns->warehouse->name.'"', ' "'.$returns->biller->name.'"', ' "'.$returns->biller->company_name.'"', ' "'.$returns->biller->email.'"', ' "'.$returns->biller->phone_number.'"', ' "'.$returns->biller->address.'"', ' "'.$returns->biller->city.'"', ' "'.$returns->customer->name.'"', ' "'.$returns->customer->phone_number.'"', ' "'.$returns->customer->address.'"', ' "'.$returns->customer->city.'"', ' "'.$returns->id.'"', ' "'.$returns->total_tax.'"', ' "'.$returns->total_discount.'"', ' "'.$returns->total_price.'"', ' "'.$returns->order_tax.'"', ' "'.$returns->order_tax_rate.'"', ' "'.$returns->grand_total.'"', ' "'.preg_replace('/[\n\r]/', "
", $returns->return_note).'"', ' "'.preg_replace('/[\n\r]/', "
", $returns->staff_note).'"', ' "'.$returns->user->name.'"', ' "'.$returns->user->email.'"', ' "'.$nestedData['sale_reference'].'"', ' "'.$returns->document.'"', ' "'.$currency_code.'"', ' "'.$returns->exchange_rate.'"]' ); $data[] = $nestedData; } } $json_data = array( "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data ); echo json_encode($json_data); } public function create(Request $request) { $role = Role::find(Auth::user()->role_id); if($role->hasPermissionTo('returns-add')) { $lims_sale_data = Sale::select('id')->where('reference_no', $request->input('reference_no'))->first(); if(!$lims_sale_data) return redirect()->back()->with('not_permitted', 'This reference no does not exist!'); $lims_product_sale_data = Product_Sale::where('sale_id', $lims_sale_data->id)->get(); $lims_tax_list = Tax::where('is_active',true)->get(); $lims_warehouse_list = Warehouse::where('is_active',true)->get(); return view('backend.return.create', compact('lims_tax_list', 'lims_sale_data', 'lims_product_sale_data', 'lims_warehouse_list')); } else return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module'); } public function getCustomerGroup($id) { $lims_customer_data = Customer::find($id); $lims_customer_group_data = CustomerGroup::find($lims_customer_data->customer_group_id); return $lims_customer_group_data->percentage; } public function getProduct($id) { //retrieve data of product without variant $lims_product_warehouse_data = Product::join('product_warehouse', 'products.id', '=', 'product_warehouse.product_id') ->where([ ['products.is_active', true], ['product_warehouse.warehouse_id', $id], ]) ->whereNull('product_warehouse.variant_id') ->whereNull('product_warehouse.product_batch_id') ->select('product_warehouse.*') ->get(); config()->set('database.connections.mysql.strict', false); \DB::reconnect(); //important as the existing connection if any would be in strict mode $lims_product_with_batch_warehouse_data = Product::join('product_warehouse', 'products.id', '=', 'product_warehouse.product_id') ->where([ ['products.is_active', true], ['product_warehouse.warehouse_id', $id], ]) ->whereNull('product_warehouse.variant_id') ->whereNotNull('product_warehouse.product_batch_id') ->select('product_warehouse.*') ->groupBy('product_warehouse.product_id') ->get(); //now changing back the strict ON config()->set('database.connections.mysql.strict', true); \DB::reconnect(); //retrieve data of product with variant $lims_product_with_variant_warehouse_data = Product::join('product_warehouse', 'products.id', '=', 'product_warehouse.product_id') ->where([ ['products.is_active', true], ['product_warehouse.warehouse_id', $id], ])->whereNotNull('product_warehouse.variant_id')->select('product_warehouse.*')->get(); $product_code = []; $product_name = []; $product_qty = []; $product_price = []; $product_type = []; $is_batch = []; $product_data = []; foreach ($lims_product_warehouse_data as $product_warehouse) { $product_qty[] = $product_warehouse->qty; $product_price[] = $product_warehouse->price; $lims_product_data = Product::select('code', 'name', 'type', 'is_batch')->find($product_warehouse->product_id); $product_code[] = $lims_product_data->code; $product_name[] = htmlspecialchars($lims_product_data->name); $product_type[] = $lims_product_data->type; $is_batch[] = null; } //product with batches foreach ($lims_product_with_batch_warehouse_data as $product_warehouse) { $product_qty[] = $product_warehouse->qty; $product_price[] = $product_warehouse->price; $lims_product_data = Product::select('code', 'name', 'type', 'is_batch')->find($product_warehouse->product_id); $product_code[] = $lims_product_data->code; $product_name[] = htmlspecialchars($lims_product_data->name); $product_type[] = $lims_product_data->type; $product_batch_data = ProductBatch::select('id', 'batch_no')->find($product_warehouse->product_batch_id); $is_batch[] = $lims_product_data->is_batch; } foreach ($lims_product_with_variant_warehouse_data as $product_warehouse) { $product_qty[] = $product_warehouse->qty; $lims_product_data = Product::select('name', 'type')->find($product_warehouse->product_id); $lims_product_variant_data = ProductVariant::select('item_code')->FindExactProduct($product_warehouse->product_id, $product_warehouse->variant_id)->first(); $product_code[] = $lims_product_variant_data->item_code; $product_name[] = htmlspecialchars($lims_product_data->name); $product_type[] = $lims_product_data->type; $is_batch[] = null; } $lims_product_data = Product::select('code', 'name', 'type')->where('is_active', true)->whereNotIn('type', ['standard'])->get(); foreach ($lims_product_data as $product) { $product_qty[] = $product->qty; $product_code[] = $product->code; $product_name[] = htmlspecialchars($product->name); $product_type[] = $product->type; $is_batch[] = null; } $product_data[] = $product_code; $product_data[] = $product_name; $product_data[] = $product_qty; $product_data[] = $product_type; $product_data[] = $product_price; $product_data[] = $is_batch; return $product_data; } public function limsProductSearch(Request $request) { $todayDate = date('Y-m-d'); $product_code = explode("(", $request['data']); $product_code[0] = rtrim($product_code[0], " "); $lims_product_data = Product::where('code', $product_code[0])->first(); $product_variant_id = null; if(!$lims_product_data) { $lims_product_data = Product::join('product_variants', 'products.id', 'product_variants.product_id') ->select('products.*', 'product_variants.id as product_variant_id', 'product_variants.item_code', 'product_variants.additional_price') ->where('product_variants.item_code', $product_code[0]) ->first(); $lims_product_data->code = $lims_product_data->item_code; $lims_product_data->price += $lims_product_data->additional_price; $product_variant_id = $lims_product_data->product_variant_id; } $product[] = $lims_product_data->name; $product[] = $lims_product_data->code; if($lims_product_data->promotion && $todayDate <= $lims_product_data->last_date){ $product[] = $lims_product_data->promotion_price; } else $product[] = $lims_product_data->price; if($lims_product_data->tax_id) { $lims_tax_data = Tax::find($lims_product_data->tax_id); $product[] = $lims_tax_data->rate; $product[] = $lims_tax_data->name; } else{ $product[] = 0; $product[] = 'No Tax'; } $product[] = $lims_product_data->tax_method; if($lims_product_data->type == 'standard'){ $units = Unit::where("base_unit", $lims_product_data->unit_id) ->orWhere('id', $lims_product_data->unit_id) ->get(); $unit_name = array(); $unit_operator = array(); $unit_operation_value = array(); foreach ($units as $unit) { if($lims_product_data->sale_unit_id == $unit->id) { array_unshift($unit_name, $unit->unit_name); array_unshift($unit_operator, $unit->operator); array_unshift($unit_operation_value, $unit->operation_value); } else { $unit_name[] = $unit->unit_name; $unit_operator[] = $unit->operator; $unit_operation_value[] = $unit->operation_value; } } $product[] = implode(",",$unit_name) . ','; $product[] = implode(",",$unit_operator) . ','; $product[] = implode(",",$unit_operation_value) . ','; } else{ $product[] = 'n/a'. ','; $product[] = 'n/a'. ','; $product[] = 'n/a'. ','; } $product[] = $lims_product_data->id; $product[] = $product_variant_id; $product[] = $lims_product_data->promotion; $product[] = $lims_product_data->is_imei; return $product; } public function store(Request $request) { $data = $request->except('document'); //return dd($data); $data['reference_no'] = 'rr-' . date("Ymd") . '-'. date("his"); $data['user_id'] = Auth::id(); $lims_sale_data = Sale::select('warehouse_id', 'customer_id', 'biller_id', 'currency_id', 'exchange_rate')->find($data['sale_id']); $data['user_id'] = Auth::id(); $data['customer_id'] = $lims_sale_data->customer_id; $data['warehouse_id'] = $lims_sale_data->warehouse_id; $data['biller_id'] = $lims_sale_data->biller_id; $data['currency_id'] = $lims_sale_data->currency_id; $data['exchange_rate'] = $lims_sale_data->exchange_rate; $cash_register_data = CashRegister::where([ ['user_id', $data['user_id']], ['warehouse_id', $data['warehouse_id']], ['status', true] ])->first(); if($cash_register_data) $data['cash_register_id'] = $cash_register_data->id; $lims_account_data = Account::where('is_default', true)->first(); $data['account_id'] = $lims_account_data->id; $document = $request->document; if ($document) { $v = Validator::make( [ 'extension' => strtolower($request->document->getClientOriginalExtension()), ], [ 'extension' => 'in:jpg,jpeg,png,gif,pdf,csv,docx,xlsx,txt', ] ); if ($v->fails()) return redirect()->back()->withErrors($v->errors()); $ext = pathinfo($document->getClientOriginalName(), PATHINFO_EXTENSION); $documentName = date("Ymdhis"); if(!config('database.connections.saleprosaas_landlord')) { $documentName = $documentName . '.' . $ext; $document->move('public/documents/sale_return', $documentName); } else { $documentName = $this->getTenantId() . '_' . $documentName . '.' . $ext; $document->move('public/documents/sale_return', $documentName); } $data['document'] = $documentName; } $lims_return_data = Returns::create($data); $lims_customer_data = Customer::find($data['customer_id']); //collecting male data $mail_data['email'] = $lims_customer_data->email; $mail_data['reference_no'] = $lims_return_data->reference_no; $mail_data['total_qty'] = $lims_return_data->total_qty; $mail_data['total_price'] = $lims_return_data->total_price; $mail_data['order_tax'] = $lims_return_data->order_tax; $mail_data['order_tax_rate'] = $lims_return_data->order_tax_rate; $mail_data['grand_total'] = $lims_return_data->grand_total; $product_id = $data['is_return']; $imei_number = $data['imei_number']; $product_batch_id = $data['product_batch_id']; $product_code = $data['product_code']; $qty = $data['qty']; $sale_unit = $data['sale_unit']; $net_unit_price = $data['net_unit_price']; $discount = $data['discount']; $tax_rate = $data['tax_rate']; $tax = $data['tax']; $total = $data['subtotal']; foreach ($product_id as $pro_id) { $key = array_search($pro_id, $data['product_id']); //return $key; $lims_product_data = Product::find($pro_id); $variant_id = null; if($sale_unit[$key] != 'n/a') { $lims_sale_unit_data = Unit::where('unit_name', $sale_unit[$key])->first(); $sale_unit_id = $lims_sale_unit_data->id; if($lims_sale_unit_data->operator == '*') $quantity = $qty[$key] * $lims_sale_unit_data->operation_value; elseif($lims_sale_unit_data->operator == '/') $quantity = $qty[$key] / $lims_sale_unit_data->operation_value; if($lims_product_data->is_variant) { $lims_product_variant_data = ProductVariant:: select('id', 'variant_id', 'qty') ->FindExactProductWithCode($pro_id, $product_code[$key]) ->first(); $lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($pro_id, $lims_product_variant_data->variant_id, $data['warehouse_id'])->first(); $lims_product_variant_data->qty += $quantity; $lims_product_variant_data->save(); $variant_data = Variant::find($lims_product_variant_data->variant_id); $variant_id = $variant_data->id; } elseif($product_batch_id[$key]) { $lims_product_warehouse_data = Product_Warehouse::where([ ['product_batch_id', $product_batch_id[$key] ], ['warehouse_id', $data['warehouse_id'] ] ])->first(); $lims_product_batch_data = ProductBatch::find($product_batch_id[$key]); //increase product batch quantity $lims_product_batch_data->qty += $quantity; $lims_product_batch_data->save(); } else $lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($pro_id, $data['warehouse_id'])->first(); $lims_product_data->qty += $quantity; $lims_product_warehouse_data->qty += $quantity; $lims_product_data->save(); $lims_product_warehouse_data->save(); } else { if($lims_product_data->type == 'combo') { $product_list = explode(",", $lims_product_data->product_list); $variant_list = explode(",", $lims_product_data->variant_list); $qty_list = explode(",", $lims_product_data->qty_list); $price_list = explode(",", $lims_product_data->price_list); foreach ($product_list as $index => $child_id) { $child_data = Product::find($child_id); if($variant_list[$index]) { $child_product_variant_data = ProductVariant::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]] ])->first(); $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]], ['warehouse_id', $data['warehouse_id'] ], ])->first(); $child_product_variant_data->qty += $qty[$key] * $qty_list[$index]; $child_product_variant_data->save(); } else { $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['warehouse_id', $data['warehouse_id'] ], ])->first(); } $child_data->qty += $qty[$key] * $qty_list[$index]; $child_warehouse_data->qty += $qty[$key] * $qty_list[$index]; $child_data->save(); $child_warehouse_data->save(); } } $sale_unit_id = 0; } //add imei number if available if($imei_number[$key]) { if($lims_product_warehouse_data->imei_number) $lims_product_warehouse_data->imei_number .= ',' . $imei_number[$key]; else $lims_product_warehouse_data->imei_number = $imei_number[$key]; $lims_product_warehouse_data->save(); } if($lims_product_data->is_variant) $mail_data['products'][$key] = $lims_product_data->name . ' [' . $variant_data->name . ']'; else $mail_data['products'][$key] = $lims_product_data->name; if($sale_unit_id) $mail_data['unit'][$key] = $lims_sale_unit_data->unit_code; else $mail_data['unit'][$key] = ''; $mail_data['qty'][$key] = $qty[$key]; $mail_data['total'][$key] = $total[$key]; ProductReturn::insert( ['return_id' => $lims_return_data->id, 'product_id' => $pro_id, 'product_batch_id' => $product_batch_id[$key], 'variant_id' => $variant_id, 'imei_number' => $imei_number[$key], 'qty' => $qty[$key], 'sale_unit_id' => $sale_unit_id, 'net_unit_price' => $net_unit_price[$key], 'discount' => $discount[$key], 'tax_rate' => $tax_rate[$key], 'tax' => $tax[$key], 'total' => $total[$key], 'created_at' => \Carbon\Carbon::now(), 'updated_at' => \Carbon\Carbon::now()] ); } $message = 'Return created successfully'; $mail_setting = MailSetting::latest()->first(); if($mail_data['email'] && $mail_setting) { $this->setMailInfo($mail_setting); try{ Mail::to($mail_data['email'])->send(new ReturnDetails($mail_data)); } catch(\Exception $e){ $message = 'Return created successfully. Please setup your mail setting to send mail.'; } } return redirect('return-sale')->with('message', $message); } public function sendMail(Request $request) { $data = $request->all(); $lims_return_data = Returns::find($data['return_id']); $lims_product_return_data = ProductReturn::where('return_id', $data['return_id'])->get(); $lims_customer_data = Customer::find($lims_return_data->customer_id); $mail_setting = MailSetting::latest()->first(); if($lims_customer_data->email && $mail_setting) { //collecting male data $mail_data['email'] = $lims_customer_data->email; $mail_data['reference_no'] = $lims_return_data->reference_no; $mail_data['total_qty'] = $lims_return_data->total_qty; $mail_data['total_price'] = $lims_return_data->total_price; $mail_data['order_tax'] = $lims_return_data->order_tax; $mail_data['order_tax_rate'] = $lims_return_data->order_tax_rate; $mail_data['grand_total'] = $lims_return_data->grand_total; foreach ($lims_product_return_data as $key => $product_return_data) { $lims_product_data = Product::find($product_return_data->product_id); if($product_return_data->variant_id){ $variant_data = Variant::find($product_return_data->variant_id); $mail_data['products'][$key] = $lims_product_data->name . ' [' . $variant_data->name .']'; } else $mail_data['products'][$key] = $lims_product_data->name; if($product_return_data->sale_unit_id){ $lims_unit_data = Unit::find($product_return_data->sale_unit_id); $mail_data['unit'][$key] = $lims_unit_data->unit_code; } else $mail_data['unit'][$key] = ''; $mail_data['qty'][$key] = $product_return_data->qty; $mail_data['total'][$key] = $product_return_data->qty; } $this->setMailInfo($mail_setting); try{ Mail::to($mail_data['email'])->send(new ReturnDetails($mail_data)); $message = 'Mail sent successfully'; } catch(\Exception $e){ $message = 'Please setup your mail setting to send mail.'; } } else $message = 'Customer doesnt have email!'; return redirect()->back()->with('message', $message); } public function productReturnData($id) { $lims_product_return_data = ProductReturn::where('return_id', $id)->get(); foreach ($lims_product_return_data as $key => $product_return_data) { $product = Product::find($product_return_data->product_id); if($product_return_data->sale_unit_id != 0){ $unit_data = Unit::find($product_return_data->sale_unit_id); $unit = $unit_data->unit_code; } else $unit = ''; if($product_return_data->variant_id) { $lims_product_variant_data = ProductVariant::select('item_code')->FindExactProduct($product_return_data->product_id, $product_return_data->variant_id)->first(); $product->code = $lims_product_variant_data->item_code; } if($product_return_data->product_batch_id) { $product_batch_data = ProductBatch::select('batch_no')->find($product_return_data->product_batch_id); $product_return[7][$key] = $product_batch_data->batch_no; } else $product_return[7][$key] = 'N/A'; $product_return[0][$key] = $product->name . ' [' . $product->code . ']'; if($product_return_data->imei_number) $product_return[0][$key] .= '
IMEI or Serial Number: ' . $product_return_data->imei_number; $product_return[1][$key] = $product_return_data->qty; $product_return[2][$key] = $unit; $product_return[3][$key] = $product_return_data->tax; $product_return[4][$key] = $product_return_data->tax_rate; $product_return[5][$key] = $product_return_data->discount; $product_return[6][$key] = $product_return_data->total; } return $product_return; } public function edit($id) { $role = Role::find(Auth::user()->role_id); if($role->hasPermissionTo('returns-edit')){ $lims_customer_list = Customer::where('is_active',true)->get(); $lims_warehouse_list = Warehouse::where('is_active',true)->get(); $lims_biller_list = Biller::where('is_active',true)->get(); $lims_tax_list = Tax::where('is_active',true)->get(); $lims_return_data = Returns::find($id); $lims_product_return_data = ProductReturn::where('return_id', $id)->get(); return view('backend.return.edit',compact('lims_customer_list', 'lims_warehouse_list', 'lims_biller_list', 'lims_tax_list', 'lims_return_data','lims_product_return_data')); } else return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module'); } public function update(Request $request, $id) { $data = $request->except('document'); //return dd($data); $document = $request->document; if ($document) { $v = Validator::make( [ 'extension' => strtolower($request->document->getClientOriginalExtension()), ], [ 'extension' => 'in:jpg,jpeg,png,gif,pdf,csv,docx,xlsx,txt', ] ); if ($v->fails()) return redirect()->back()->withErrors($v->errors()); $ext = pathinfo($document->getClientOriginalName(), PATHINFO_EXTENSION); $documentName = date("Ymdhis"); if(!config('database.connections.saleprosaas_landlord')) { $documentName = $documentName . '.' . $ext; $document->move('public/documents/sale_return', $documentName); } else { $documentName = $this->getTenantId() . '_' . $documentName . '.' . $ext; $document->move('public/documents/sale_return', $documentName); } $data['document'] = $documentName; } $lims_return_data = Returns::find($id); $lims_product_return_data = ProductReturn::where('return_id', $id)->get(); $product_id = $data['product_id']; $imei_number = $data['imei_number']; $product_batch_id = $data['product_batch_id']; $product_code = $data['product_code']; $product_variant_id = $data['product_variant_id']; $qty = $data['qty']; $sale_unit = $data['sale_unit']; $net_unit_price = $data['net_unit_price']; $discount = $data['discount']; $tax_rate = $data['tax_rate']; $tax = $data['tax']; $total = $data['subtotal']; foreach ($lims_product_return_data as $key => $product_return_data) { $old_product_id[] = $product_return_data->product_id; $old_product_variant_id[] = null; $lims_product_data = Product::find($product_return_data->product_id); if($lims_product_data->type == 'combo') { $product_list = explode(",", $lims_product_data->product_list); $variant_list = explode(",", $lims_product_data->variant_list); $qty_list = explode(",", $lims_product_data->qty_list); foreach ($product_list as $index=>$child_id) { $child_data = Product::find($child_id); if($variant_list[$index]) { $child_product_variant_data = ProductVariant::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]] ])->first(); $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); $child_product_variant_data->qty -= $qty[$key] * $qty_list[$index]; $child_product_variant_data->save(); } else { $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); } $child_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_warehouse_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_data->save(); $child_warehouse_data->save(); } } elseif($product_return_data->sale_unit_id != 0) { $lims_sale_unit_data = Unit::find($product_return_data->sale_unit_id); if ($lims_sale_unit_data->operator == '*') $quantity = $product_return_data->qty * $lims_sale_unit_data->operation_value; elseif($lims_sale_unit_data->operator == '/') $quantity = $product_return_data->qty / $lims_sale_unit_data->operation_value; if($product_return_data->variant_id) { $lims_product_variant_data = ProductVariant::select('id', 'qty')->FindExactProduct($product_return_data->product_id, $product_return_data->variant_id)->first(); $lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($product_return_data->product_id, $product_return_data->variant_id, $lims_return_data->warehouse_id) ->first(); $old_product_variant_id[$key] = $lims_product_variant_data->id; $lims_product_variant_data->qty -= $quantity; $lims_product_variant_data->save(); } elseif($product_return_data->product_batch_id) { $lims_product_warehouse_data = Product_Warehouse::where([ ['product_id', $product_return_data->product_id], ['product_batch_id', $product_return_data->product_batch_id], ['warehouse_id', $lims_return_data->warehouse_id] ])->first(); $product_batch_data = ProductBatch::find($product_return_data->product_batch_id); $product_batch_data->qty -= $quantity; $product_batch_data->save(); } else $lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($product_return_data->product_id, $lims_return_data->warehouse_id) ->first(); $lims_product_data->qty -= $quantity; $lims_product_warehouse_data->qty -= $quantity; $lims_product_data->save(); $lims_product_warehouse_data->save(); } //deduct imei number if available if($product_return_data->imei_number) { $imei_numbers = explode(",", $product_return_data->imei_number); $all_imei_numbers = explode(",", $lims_product_warehouse_data->imei_number); foreach ($imei_numbers as $number) { if (($j = array_search($number, $all_imei_numbers)) !== false) { unset($all_imei_numbers[$j]); } } $lims_product_warehouse_data->imei_number = implode(",", $all_imei_numbers); $lims_product_warehouse_data->save(); } if($product_return_data->variant_id && !(in_array($old_product_variant_id[$key], $product_variant_id)) ){ $product_return_data->delete(); } elseif( !(in_array($old_product_id[$key], $product_id)) ) $product_return_data->delete(); } foreach ($product_id as $key => $pro_id) { $lims_product_data = Product::find($pro_id); $product_return['variant_id'] = null; if($sale_unit[$key] != 'n/a') { $lims_sale_unit_data = Unit::where('unit_name', $sale_unit[$key])->first(); $sale_unit_id = $lims_sale_unit_data->id; if ($lims_sale_unit_data->operator == '*') $quantity = $qty[$key] * $lims_sale_unit_data->operation_value; elseif($lims_sale_unit_data->operator == '/') $quantity = $qty[$key] / $lims_sale_unit_data->operation_value; if($lims_product_data->is_variant) { $lims_product_variant_data = ProductVariant::select('id', 'variant_id', 'qty')->FindExactProductWithCode($pro_id, $product_code[$key])->first(); $lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($pro_id, $lims_product_variant_data->variant_id, $data['warehouse_id']) ->first(); $variant_data = Variant::find($lims_product_variant_data->variant_id); $product_return['variant_id'] = $lims_product_variant_data->variant_id; $lims_product_variant_data->qty += $quantity; $lims_product_variant_data->save(); } elseif($product_batch_id[$key]) { $lims_product_warehouse_data = Product_Warehouse::where([ ['product_id', $pro_id], ['product_batch_id', $product_batch_id[$key] ], ['warehouse_id', $data['warehouse_id'] ] ])->first(); $product_batch_data = ProductBatch::find($product_batch_id[$key]); $product_batch_data->qty += $quantity; $product_batch_data->save(); } else { $lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($pro_id, $data['warehouse_id']) ->first(); } $lims_product_data->qty += $quantity; $lims_product_warehouse_data->qty += $quantity; $lims_product_data->save(); $lims_product_warehouse_data->save(); } else { if($lims_product_data->type == 'combo'){ $product_list = explode(",", $lims_product_data->product_list); $variant_list = explode(",", $lims_product_data->variant_list); $qty_list = explode(",", $lims_product_data->qty_list); foreach ($product_list as $index=>$child_id) { $child_data = Product::find($child_id); if($variant_list[$index]) { $child_product_variant_data = ProductVariant::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]] ])->first(); $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]], ['warehouse_id', $data['warehouse_id'] ], ])->first(); $child_product_variant_data->qty += $qty[$key] * $qty_list[$index]; $child_product_variant_data->save(); } else { $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['warehouse_id', $data['warehouse_id'] ], ])->first(); } $child_data->qty += $qty[$key] * $qty_list[$index]; $child_warehouse_data->qty += $qty[$key] * $qty_list[$index]; $child_data->save(); $child_warehouse_data->save(); } } $sale_unit_id = 0; } //add imei number if available if($imei_number[$key]) { if($lims_product_warehouse_data->imei_number) $lims_product_warehouse_data->imei_number .= ',' . $imei_number[$key]; else $lims_product_warehouse_data->imei_number = $imei_number[$key]; $lims_product_warehouse_data->save(); } if($lims_product_data->is_variant) $mail_data['products'][$key] = $lims_product_data->name . ' [' . $variant_data->name .']'; else $mail_data['products'][$key] = $lims_product_data->name; if($sale_unit_id) $mail_data['unit'][$key] = $lims_sale_unit_data->unit_code; else $mail_data['unit'][$key] = ''; $mail_data['qty'][$key] = $qty[$key]; $mail_data['total'][$key] = $total[$key]; $product_return['return_id'] = $id ; $product_return['product_id'] = $pro_id; $product_return['imei_number'] = $imei_number[$key]; $product_return['product_batch_id'] = $product_batch_id[$key]; $product_return['qty'] = $qty[$key]; $product_return['sale_unit_id'] = $sale_unit_id; $product_return['net_unit_price'] = $net_unit_price[$key]; $product_return['discount'] = $discount[$key]; $product_return['tax_rate'] = $tax_rate[$key]; $product_return['tax'] = $tax[$key]; $product_return['total'] = $total[$key]; if($product_return['variant_id'] && in_array($product_variant_id[$key], $old_product_variant_id)) { ProductReturn::where([ ['product_id', $pro_id], ['variant_id', $product_return['variant_id']], ['return_id', $id] ])->update($product_return); } elseif( $product_return['variant_id'] === null && (in_array($pro_id, $old_product_id)) ) { ProductReturn::where([ ['return_id', $id], ['product_id', $pro_id] ])->update($product_return); } else ProductReturn::create($product_return); } $lims_return_data->update($data); $lims_customer_data = Customer::find($data['customer_id']); $mail_setting = MailSetting::latest()->first(); if($lims_customer_data->email && $mail_setting) { //collecting male data $mail_data['email'] = $lims_customer_data->email; $mail_data['reference_no'] = $lims_return_data->reference_no; $mail_data['total_qty'] = $lims_return_data->total_qty; $mail_data['total_price'] = $lims_return_data->total_price; $mail_data['order_tax'] = $lims_return_data->order_tax; $mail_data['order_tax_rate'] = $lims_return_data->order_tax_rate; $mail_data['grand_total'] = $lims_return_data->grand_total; $message = 'Return updated successfully'; $this->setMailInfo($mail_setting); try{ Mail::to($mail_data['email'])->send(new ReturnDetails($mail_data)); } catch(\Exception $e){ $message = 'Return updated successfully. Please setup your mail setting to send mail.'; } } return redirect('return-sale')->with('message', $message); } public function deleteBySelection(Request $request) { $return_id = $request['returnIdArray']; foreach ($return_id as $id) { $lims_return_data = Returns::find($id); $lims_product_return_data = ProductReturn::where('return_id', $id)->get(); foreach ($lims_product_return_data as $key => $product_return_data) { $lims_product_data = Product::find($product_return_data->product_id); if( $lims_product_data->type == 'combo' ){ $product_list = explode(",", $lims_product_data->product_list); $variant_list = explode(",", $lims_product_data->variant_list); $qty_list = explode(",", $lims_product_data->qty_list); foreach ($product_list as $index => $child_id) { $child_data = Product::find($child_id); if($variant_list[$index]) { $child_product_variant_data = ProductVariant::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]] ])->first(); $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); $child_product_variant_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_product_variant_data->save(); } else { $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); } $child_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_warehouse_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_data->save(); $child_warehouse_data->save(); } } elseif($product_return_data->sale_unit_id != 0){ $lims_sale_unit_data = Unit::find($product_return_data->sale_unit_id); if ($lims_sale_unit_data->operator == '*') $quantity = $product_return_data->qty * $lims_sale_unit_data->operation_value; elseif($lims_sale_unit_data->operator == '/') $quantity = $product_return_data->qty / $lims_sale_unit_data->operation_value; if($product_return_data->variant_id) { $lims_product_variant_data = ProductVariant::select('id', 'qty')->FindExactProduct($product_return_data->product_id, $product_return_data->variant_id)->first(); $lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($product_return_data->product_id, $product_return_data->variant_id, $lims_return_data->warehouse_id)->first(); $lims_product_variant_data->qty -= $quantity; $lims_product_variant_data->save(); } elseif($product_return_data->product_batch_id) { $lims_product_batch_data = ProductBatch::find($product_return_data->product_batch_id); $lims_product_warehouse_data = Product_Warehouse::where([ ['product_batch_id', $product_return_data->product_batch_id], ['warehouse_id', $lims_return_data->warehouse_id] ])->first(); $lims_product_batch_data->qty -= $product_return_data->qty; $lims_product_batch_data->save(); } else $lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($product_return_data->product_id, $lims_return_data->warehouse_id)->first(); $lims_product_data->qty -= $quantity; $lims_product_warehouse_data->qty -= $quantity; $lims_product_data->save(); $lims_product_warehouse_data->save(); $product_return_data->delete(); } } $lims_return_data->delete(); } return 'Return deleted successfully!'; } public function destroy($id) { $lims_return_data = Returns::find($id); $lims_product_return_data = ProductReturn::where('return_id', $id)->get(); foreach ($lims_product_return_data as $key => $product_return_data) { $lims_product_data = Product::find($product_return_data->product_id); if( $lims_product_data->type == 'combo' ){ $product_list = explode(",", $lims_product_data->product_list); $variant_list = explode(",", $lims_product_data->variant_list); $qty_list = explode(",", $lims_product_data->qty_list); foreach ($product_list as $index => $child_id) { $child_data = Product::find($child_id); if($variant_list[$index]) { $child_product_variant_data = ProductVariant::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]] ])->first(); $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['variant_id', $variant_list[$index]], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); $child_product_variant_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_product_variant_data->save(); } else { $child_warehouse_data = Product_Warehouse::where([ ['product_id', $child_id], ['warehouse_id', $lims_return_data->warehouse_id ], ])->first(); } $child_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_warehouse_data->qty -= $product_return_data->qty * $qty_list[$index]; $child_data->save(); $child_warehouse_data->save(); } } elseif($product_return_data->sale_unit_id != 0){ $lims_sale_unit_data = Unit::find($product_return_data->sale_unit_id); if ($lims_sale_unit_data->operator == '*') $quantity = $product_return_data->qty * $lims_sale_unit_data->operation_value; elseif($lims_sale_unit_data->operator == '/') $quantity = $product_return_data->qty / $lims_sale_unit_data->operation_value; if($product_return_data->variant_id) { $lims_product_variant_data = ProductVariant::select('id', 'qty')->FindExactProduct($product_return_data->product_id, $product_return_data->variant_id)->first(); $lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($product_return_data->product_id, $product_return_data->variant_id, $lims_return_data->warehouse_id)->first(); $lims_product_variant_data->qty -= $quantity; $lims_product_variant_data->save(); } elseif($product_return_data->product_batch_id) { $lims_product_batch_data = ProductBatch::find($product_return_data->product_batch_id); $lims_product_warehouse_data = Product_Warehouse::where([ ['product_batch_id', $product_return_data->product_batch_id], ['warehouse_id', $lims_return_data->warehouse_id] ])->first(); $lims_product_batch_data->qty -= $product_return_data->qty; $lims_product_batch_data->save(); } else $lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($product_return_data->product_id, $lims_return_data->warehouse_id)->first(); $lims_product_data->qty -= $quantity; $lims_product_warehouse_data->qty -= $quantity; $lims_product_data->save(); $lims_product_warehouse_data->save(); } //deduct imei number if available if($product_return_data->imei_number) { $imei_numbers = explode(",", $product_return_data->imei_number); $all_imei_numbers = explode(",", $lims_product_warehouse_data->imei_number); foreach ($imei_numbers as $number) { if (($j = array_search($number, $all_imei_numbers)) !== false) { unset($all_imei_numbers[$j]); } } $lims_product_warehouse_data->imei_number = implode(",", $all_imei_numbers); $lims_product_warehouse_data->save(); } $product_return_data->delete(); } $lims_return_data->delete(); return redirect('return-sale')->with('not_permitted', 'Data deleted successfully');; } }