Files
wticreatorstudio/Modules/Subscription/Repositories/RestrictedLocationRepository.php
T
2024-02-12 22:54:20 -05:00

285 lines
14 KiB
PHP

<?php
namespace Modules\Subscription\Repositories;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Modules\Product\Entities\Color;
use Modules\Subscription\Entities\RestrictedLocation;
use Modules\Product\Entities\AttributeValue;
use Modules\Product\Entities\ProductVariations;
use Modules\Seller\Entities\SellerProduct;
use Modules\Seller\Entities\SellerProductSKU;
class RestrictedLocationRepository
{
public function getAll()
{
return RestrictedLocation::latest()->get();
}
public function getActiveAll()
{
return RestrictedLocation::with('values')->latest()->Active()->get();
}
public function getActiveAllWithoutColor()
{
return RestrictedLocation::with('values')->where('id', '!=', 1)->latest()->Active()->get();
}
public function getColorAttr()
{
return RestrictedLocation::with('values')->where('id', 1)->first();
}
public function create(array $data)
{
DB::beginTransaction();
$location = new RestrictedLocation();
$location->country = $data['country'];
$location->status = $data['status'];
$location->save();
/*$variant_values = [];
if ($data['variant_values']) {
foreach ($data['variant_values'] as $value) {
if ($value) {
$variant_values [] = [
"value" => $value,
"attribute_id" => $location->id,
"created_at" => Carbon::now()
];
}
}
AttributeValue::insert($variant_values);
}*/
DB::commit();
}
public function find($id)
{
return RestrictedLocation::with('values', 'values.color')->findOrFail($id);
}
public function update(array $data, $id)
{
DB::beginTransaction();
$location = RestrictedLocation::findOrFail($id);
if (isModuleActive('FrontendMultiLang')) {
foreach ($data['name'] as $key => $name) {
$location->setTranslation('name', $key, $name);
}
foreach ($data['description'] as $key => $description) {
$location->setTranslation('description', $key, $description);
}
}else{
$location->name = $data['name'];
$location->description = $data['description'];
}
$location->status = $data['status'];
$location->save();
if ($location->id != 1 && $data['edit_variant_values']) {
$collection1 = collect($data['edit_variant_values']);
$collection2 = collect($location->values->pluck('value','id'));
$newDifferentItems = $collection1->diff($collection2);
$new_variant_values = $newDifferentItems->all();
if(count($new_variant_values) > 0) {
foreach ($new_variant_values as $key => $new_variant_value) {
if($data['value_id'][$key] != 'null'){
$attri_value = AttributeValue::find($data['value_id'][$key]);
if($attri_value){
$attri_value->update([
'value' => $new_variant_value
]);
}
}else{
AttributeValue::create([
'value' => $new_variant_value,
"attribute_id" => $location->id
]);
}
}
}else {
$differentItems = $collection2->diff($collection1);
$old_variant_values = $differentItems->all();
if (count($old_variant_values) > 0) {
foreach ($old_variant_values as $key => $old_variant_value) {
$exixt_product = ProductVariations::where('attribute_value_id', $key)->first();
if ($exixt_product == null) {
AttributeValue::find($key)->delete();
}
}
}
}
}else {
$collection1 = collect($data['edit_variant_c_name']);
$collection2 = collect($location->colors->pluck('name','id'));
$newDifferentItems = $collection1->diff($collection2);
$new_variant_values = $newDifferentItems->all();
$differentItems = $collection2->diff($collection1);
$old_variant_values = $differentItems->all();
if (count($new_variant_values) > 0) {
foreach ($new_variant_values as $key => $new_variant_value) {
$check = $data['color_with_id'][$key];
if($check == 'null'){
$attribute_val = new AttributeValue;
$attribute_val->value = $new_variant_value;
$attribute_val->attribute_id = $location->id;
$attribute_val->created_at = Carbon::now();
$attribute_val->updated_at = Carbon::now();
$attribute_val->save();
$color = new Color;
$color->attribute_value_id = $attribute_val->id;
$color->name = $data['edit_variant_c_name'][$key];
$color->save();
}else{
$check_data = explode('-',$check);
$attribute_value = AttributeValue::find($check_data[1]);
$attribute_value->color->update([
'name' => $data['edit_variant_c_name'][$key]
]);
}
}
}
if(count($old_variant_values) > 0) {
foreach ($old_variant_values as $key => $old_variant_value) {
$col = Color::find($key);
$exixt_product = ProductVariations::where('attribute_value_id', $col->attribute_value_id)->first();
if ($exixt_product == null) {
AttributeValue::find($col->attribute_value_id)->delete();
$col->delete();
}
}
}
foreach($collection1 as $k => $val){
$col = Color::with('attribute_value')->where('name', $val)->first();
if($col){
$col->attribute_value->update([
'value' => $data['edit_variant_values'][$k]
]);
}
}
}
DB::commit();
}
public function delete($id)
{
$location = RestrictedLocation::findOrFail($id);
if(ProductVariations::where('attribute_id', $id)->first() == null)
{
$location->values()->delete();
$location->delete();
}
else {
return "not_possible";
}
}
public function getAttributeForSpecificCategory($category_id, $category_ids)
{
// $seller_products = SellerProductSKU::whereHas('product', function($query) use($category_ids, $category_id){
// $query->where('status',1)->whereHas('product',function($query) use($category_ids, $category_id){
// return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
// $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
// $q2->whereIn('id',$category_ids);
// });
// });
// });
// })->pluck('product_sku_id');
$seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
$q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
$q2->whereRaw("id in ('" . implode("','",$category_ids) . "')");
});
$q1->where('category_id',$category_id);
});
})->pluck('product_sku_id')->toArray();
// $attribute_ids = ProductVariations::whereIn('product_sku_id', $seller_products)->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
$attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
// $attribute_list = RestrictedLocation::with('values')->whereIn('id', $attribute_ids)->take(20)->get();
$attribute_list = RestrictedLocation::with('values')->whereRaw("id in ('" . implode("','", $attribute_ids)."')")->where('status',1)->take(20)->get();
return $attribute_list;
}
public function getColorAttributeForSpecificCategory($category_id, $category_ids)
{
// $seller_products = SellerProductSKU::whereHas('product', function($query) use($category_ids, $category_id){
// $query->where('status',1)->whereHas('product',function($query) use($category_ids, $category_id){
// return $query->WhereHas('categories',function($q1) use($category_ids, $category_id){
// $q1->where('category_id', $category_id)->orWhereHas('subCategories', function($q2)use($category_ids){
// $q2->whereIn('id', $category_ids);
// });
// });
// });
// });
// $seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
// return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
// $q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
// $q2->whereIn('id',$category_ids);
// });
// });
// })->pluck('product_sku_id')->toArray();
$seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($category_ids, $category_id){
return $query->WhereHas('categories',function($q1)use($category_ids,$category_id){
$q1->where('category_id',$category_id)->orWhereHas('subCategories', function($q2) use($category_ids){
$q2->whereRaw("id in ('" . implode("','",$category_ids)."')");
});
$q1->where('category_id',$category_id);
});
})->pluck('product_sku_id')->toArray();
// $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');
// $attribute_ids = ProductVariations::whereIn('product_sku_id', $seller_products)->where('attribute_id', 1)->pluck('attribute_id')->toArray();
$attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', 1)->pluck('attribute_id')->toArray();
// $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', 1)->pluck('attribute_value_id');
// $attribute_list = RestrictedLocation::with('values')->whereIn('id', $attribute_ids)->first();
$attribute_list = RestrictedLocation::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->first();
return $attribute_list;
}
public function getColorAttributeForSpecificBrand($brand_id)
{
// $seller_products = SellerProductSKU::whereHas('product', function($query) use($brand_id){
// $query->where('status',1)->whereHas('product',function($query) use($brand_id){
// return $query->where('brand_id',$brand_id)->where('status', 1);
// });
// })->get();
$seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($brand_id){
return $query->where('brand_id', $brand_id);
})->distinct('product_sku_id')->pluck('product_sku_id')->toArray();
// $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');
$attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', 1)->pluck('attribute_id')->toArray();
// $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', 1)->get()->pluck('attribute_value_id');
$attribute_list = RestrictedLocation::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->first();
return $attribute_list;
}
public function getAttributeForSpecificBrand($brand_id)
{
// $seller_products = SellerProductSKU::whereHas('product', function($query) use($brand_id){
// $query->where('status',1)->whereHas('product',function($query) use($brand_id){
// return $query->where('brand_id',$brand_id);
// });
// })->get();
$seller_products = SellerProductSKU::whereHas('mainProduct', function($query) use($brand_id){
return $query->where('brand_id',$brand_id)->where('products.status', 1);
})->distinct('product_sku_id')->pluck('product_sku_id')->toArray();
// $product_skus = $seller_products->unique('product_sku_id')->pluck('product_sku_id');
$attribute_ids = ProductVariations::whereRaw("product_sku_id in ('". implode("','", $seller_products)."')")->where('attribute_id', '!=', 1)->pluck('attribute_id')->toArray();
// $attribute_value_ids = ProductVariations::whereIn('product_sku_id', $product_skus)->where('attribute_id', '!=', 1)->get()->pluck('attribute_value_id');
$attribute_list = RestrictedLocation::with('values')->whereRaw("id in ('". implode("','", $attribute_ids)."')")->where('status', 1)->get();
return $attribute_list;
}
}