public function rateProduct(Request $request)
{
$detail_id = $request->get('detail_id');
$product_rate = $request->get('product_rate');
$product_comment = $request->get('product_comment');
$user = \Auth::user();
if ($user) {
$detail = OrderDetail::find($detail_id);
if ($detail) {
//Checks if the order exists and belongs to the current user
$order = Order::where('id', $detail->order_id)->where('user_id', $user->id)->first();
if ($order && $order->rate == '') {
$product = Product::find($detail->product_id);
$product_old_rate = $product->rate_val ? $product->rate_val : 0;
$product_old_rate_count = $product->rate_count ? $product->rate_count : 0;
//Checks if it is the first time the product is rated
if ($product_old_rate_count == 0) {
$product->rate_val = $product_rate;
$product->rate_count = 1;
} else {
//Checks if the user has rated this product on this order before
if ($detail->rate) {
if ($product_old_rate > $product_rate) {
$product->rate_val = $product->rate_val - ($product_old_rate - $product_rate) / $product_old_rate_count;
}
if ($product_old_rate < $product_rate) {
$product->rate_val = $product->rate_val + ($product_rate - $product_old_rate) / $product_old_rate_count;
}
} else {
if ($product_old_rate > $product_rate) {
$product->rate_val = $product->rate_val - ($product_old_rate - $product_rate) / ($product_old_rate_count + 1);
}
if ($product_old_rate < $product_rate) {
$product->rate_val = $product->rate_val + ($product_rate - $product_old_rate) / ($product_old_rate_count + 1);
}
$product->rate_count = $product_old_rate_count + 1;
}
}
$seller_user = User::find($order->seller_id);
$email = $seller_user->email;
$mail_subject = trans('email.product_rated.subject');
$data = ['product_id' => $product->id, 'subject' => $mail_subject, 'email_message' => $mail_subject, 'email' => $email];
Mail::queue('emails.product_rated', $data, function ($message) use($user, $data) {
$message->to($data['email'])->subject($data['subject']);
});
$product->save();
$detail->rate = $product_rate;
$detail->rate_comment = $product_comment;
$detail->save();
Notice::create(['user_id' => $seller_user->id, 'sender_id' => $user->id, 'action_type_id' => 14, 'source_id' => $order->id, 'status' => 'new']);
return \Response::json(['success' => true, 'message' => trans('store.order_rate_view.http_messages.success'), 'detail_id' => $detail_id, 'product_rate' => $product_rate], 200);
} else {
return \Response::json(['success' => false, 'message' => trans('store.order_rate_view.http_messages.no_order'), 'detail_id' => $detail_id, 'product_rate' => $product_rate], 200);
}
} else {
return \Response::json(['success' => false, 'message' => trans('store.order_rate_view.http_messages.no_user'), 'detail_id' => $detail_id, 'product_rate' => $product_rate], 200);
}
} else {
return \Response::json(['success' => false, 'message' => trans('store.order_rate_view.http_messages.no_user'), 'detail_id' => $detail_id, 'product_rate' => $product_rate], 200);
}
}