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');;
}
}