<?php
namespace App\Services;
use App\Models\Cart;
use App\Models\FlashDealProduct;
use App\Models\ProductStock;
use App\Models\ProductTax;
use App\Models\ProductTranslation;
use App\Models\Product;
use App\Models\User;
use App\Models\WholesalePrice;
use Artisan;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class WholesaleService
{
public function store(array $data)
{
$collection = collect($data);
$tags = array();
if ($collection['tags'][0] != null) {
foreach (json_decode($collection['tags'][0]) as $key => $tag) {
array_push($tags, $tag->value);
}
}
$collection['tags'] = implode(',', $tags);
if ($collection['meta_title'] == null) {
$collection['meta_title'] = $collection['name'];
}
if ($collection['meta_description'] == null) {
$collection['meta_description'] = strip_tags($collection['description']);
}
if ($collection['meta_img'] == null) {
$collection['meta_img'] = $collection['thumbnail_img'];
}
$data = $collection->toArray();
$product = Product::create($data);
$product_stock = new ProductStock;
$product_stock->product_id = $product->id;
$product_stock->variant = '';
$product_stock->price = $collection['unit_price'];
$product_stock->sku = $collection['sku'];
$product_stock->qty = $collection['current_stock'];
$product_stock->save();
if(request()->has('wholesale_price')){
foreach(request()->wholesale_price as $key => $price){
$wholesale_price = new WholesalePrice;
$wholesale_price->product_stock_id = $product_stock->id;
$wholesale_price->min_qty = request()->wholesale_min_qty[$key];
$wholesale_price->max_qty = request()->wholesale_max_qty[$key];
$wholesale_price->price = $price;
$wholesale_price->save();
}
}
return $product;
}
public function update(Request $request , $id){
$product = Product::findOrFail($id);
$product->category_id = $request->category_id;
$product->brand_id = $request->brand_id;
$product->barcode = $request->barcode;
$product->cash_on_delivery = 0;
$product->featured = 0;
$product->todays_deal = 0;
$product->is_quantity_multiplied = 0;
if (addon_is_activated('refund_request')) {
if ($request->refundable != null) {
$product->refundable = 1;
}
else {
$product->refundable = 0;
}
}
if($request->lang == env("DEFAULT_LANGUAGE")){
$product->name = $request->name;
$product->unit = $request->unit;
$product->description = $request->description;
$product->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', strtolower($request->slug)));
}
if($request->slug == null){
$product->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', strtolower($request->name)));
}
$product->photos = $request->photos;
$product->thumbnail_img = $request->thumbnail_img;
$product->min_qty = $request->min_qty;
$product->low_stock_quantity = $request->low_stock_quantity;
$product->stock_visibility_state = $request->stock_visibility_state;
$tags = array();
if($request->tags[0] != null){
foreach (json_decode($request->tags[0]) as $key => $tag) {
array_push($tags, $tag->value);
}
}
$product->tags = implode(',', $tags);
$product->video_provider = $request->video_provider;
$product->video_link = $request->video_link;
$product->unit_price = $request->unit_price;
$product->discount = $request->discount;
$product->discount_type = $request->discount_type;
if ($request->date_range != null) {
$date_var = explode(" to ", $request->date_range);
$product->discount_start_date = strtotime($date_var[0]);
$product->discount_end_date = strtotime( $date_var[1]);
}
$product->shipping_type = $request->shipping_type;
$product->est_shipping_days = $request->est_shipping_days;
if (addon_is_activated('club_point')) {
if($request->earn_point) {
$product->earn_point = $request->earn_point;
}
}
if ($request->has('shipping_type')) {
if($request->shipping_type == 'free'){
$product->shipping_cost = 0;
}
elseif ($request->shipping_type == 'flat_rate') {
$product->shipping_cost = $request->flat_shipping_cost;
}
elseif ($request->shipping_type == 'product_wise') {
$product->shipping_cost = json_encode($request->shipping_cost);
}
}
if ($request->has('is_quantity_multiplied')) {
$product->is_quantity_multiplied = 1;
}
if ($request->has('cash_on_delivery')) {
$product->cash_on_delivery = 1;
}
if ($request->has('featured')) {
$product->featured = 1;
}
if ($request->has('todays_deal')) {
$product->todays_deal = 1;
}
$product->meta_title = $request->meta_title;
$product->meta_description = $request->meta_description;
$product->meta_img = $request->meta_img;
if($product->meta_title == null) {
$product->meta_title = $product->name;
}
if($product->meta_description == null) {
$product->meta_description = strip_tags($product->description);
}
if($product->meta_img == null) {
$product->meta_img = $product->thumbnail_img;
}
$product->pdf = $request->pdf;
$colors = array();
$product->colors = json_encode($colors);
$choice_options = array();
$product->choice_options = json_encode($choice_options, JSON_UNESCAPED_UNICODE);
$product_stock = $product->stocks->first();
$product_stock->price = $request->unit_price;
$product_stock->sku = $request->sku;
$product_stock->qty = $request->current_stock;
$product_stock->save();
$product->save();
foreach ($product->stocks->first()->wholesalePrices as $key => $wholesalePrice) {
$wholesalePrice->delete();
}
if($request->has('wholesale_price')){
foreach($request->wholesale_price as $key => $price){
$wholesale_price = new WholesalePrice;
$wholesale_price->product_stock_id = $product_stock->id;
$wholesale_price->min_qty = $request->wholesale_min_qty[$key];
$wholesale_price->max_qty = $request->wholesale_max_qty[$key];
$wholesale_price->price = $price;
$wholesale_price->save();
}
}
//Flash Deal
if($request->flash_deal_id) {
if($product->flash_deal_product){
$flash_deal_product = FlashDealProduct::findOrFail($product->flash_deal_product->id);
if(!$flash_deal_product) {
$flash_deal_product = new FlashDealProduct;
}
} else {
$flash_deal_product = new FlashDealProduct;
}
$flash_deal_product->flash_deal_id = $request->flash_deal_id;
$flash_deal_product->product_id = $product->id;
$flash_deal_product->discount = $request->flash_discount;
$flash_deal_product->discount_type = $request->flash_discount_type;
$flash_deal_product->save();
}
//VAT & Tax
if($request->tax_id) {
ProductTax::where('product_id', $product->id)->delete();
foreach ($request->tax_id as $key => $val) {
$product_tax = new ProductTax;
$product_tax->tax_id = $val;
$product_tax->product_id = $product->id;
$product_tax->tax = $request->tax[$key];
$product_tax->tax_type = $request->tax_type[$key];
$product_tax->save();
}
}
// Product Translations
$product_translation = ProductTranslation::firstOrNew(['lang' => $request->lang, 'product_id' => $product->id]);
$product_translation->name = $request->name;
$product_translation->unit = $request->unit;
$product_translation->description = $request->description;
$product_translation->save();
}
public function destroy($id){
$product = Product::findOrFail($id);
foreach ($product->product_translations as $key => $product_translations) {
$product_translations->delete();
}
foreach ($product->stocks as $key => $stock) {
$stock->delete();
}
Product::destroy($id);
Cart::where('product_id', $id)->delete();
}
}
|