management integration start
This commit is contained in:
parent
c5c014b188
commit
6fd883568d
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
namespace Sarga\API\Http\Controllers;
|
||||
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
|
@ -9,11 +12,13 @@ use Webkul\API\Http\Controllers\Shop\Controller;
|
|||
use Webkul\Core\Contracts\Validations\Slug;
|
||||
use Sarga\Shop\Repositories\ProductRepository;
|
||||
use Webkul\Marketplace\Repositories\SellerRepository;
|
||||
use Webkul\Product\Repositories\ProductAttributeValueRepository;
|
||||
|
||||
class IntegrationController extends Controller
|
||||
{
|
||||
|
||||
public function __construct(protected ProductRepository $productRepository,
|
||||
protected ProductAttributeValueRepository $attributeValueRepository,
|
||||
protected SellerRepository $sellerRepository){}
|
||||
|
||||
public function store(){
|
||||
|
|
@ -63,7 +68,8 @@ class IntegrationController extends Controller
|
|||
|
||||
if($product = $this->productRepository->findOneByField('sku',$data['product_group_id']))
|
||||
{//product_group_id
|
||||
return $this->updateVariants($product);
|
||||
$this->updateVariants($product,$data);
|
||||
return response()->json(['success'=>true,'product_id' => $product->id]);
|
||||
}
|
||||
elseif($product = $this->productRepository->createProduct($data)){
|
||||
|
||||
|
|
@ -93,10 +99,142 @@ class IntegrationController extends Controller
|
|||
}
|
||||
}
|
||||
|
||||
private function updateVariants($product){
|
||||
private function updateVariants($product,$data) {
|
||||
try{
|
||||
DB::beginTransaction();
|
||||
if($product->type == 'configurable'){
|
||||
if (!empty($data['color_variants'])) {
|
||||
foreach ($data['color_variants'] as $colorVariant) {
|
||||
$description = implode(array_map(fn($value): string => '<p>' . $value['description'] . '</p>', $colorVariant['descriptions']));
|
||||
if (!empty($colorVariant['size_variants']))
|
||||
foreach ($colorVariant['size_variants'] as $sizeVariant) {
|
||||
$sku = "{$data['product_group_id']}-{$colorVariant['product_number']}-{$sizeVariant['itemNumber']}";
|
||||
if($variant = $this->productRepository->findOneByField('sku',$sku ))
|
||||
$this->updateAttribute($variant,$sizeVariant);
|
||||
else{
|
||||
$variant = $this->productRepository->createVariant($product,$sku);
|
||||
$this->productRepository->assignImages($variant,$colorVariant['images']);
|
||||
$attributes = [
|
||||
'sku' => $variant->sku,
|
||||
'product_number' => "{$colorVariant['product_number']}-{$sizeVariant['itemNumber']}",
|
||||
'color' => $this->productRepository->getAttributeOptionId('color', $colorVariant['color']),
|
||||
'name' => $colorVariant['name'],
|
||||
'size' => $this->productRepository->getAttributeOptionId('size', $sizeVariant['attributeValue']),
|
||||
// 'price' => $sizeVariant['price'],
|
||||
'weight' => $colorVariant['weight'] ?? 0.45,
|
||||
'status' => 1,
|
||||
'visible_individually' => 1,
|
||||
'url_key' => $variant->sku,
|
||||
'source' => $colorVariant['url_key'],
|
||||
'description' => $description,
|
||||
'short_description' => $description,
|
||||
'favoritesCount' => $colorVariant['favorite_count']
|
||||
];
|
||||
$this->productRepository->assignAttributes($variant, array_merge($attributes,$this->productRepository->calculatePrice($sizeVariant['price'])));
|
||||
}
|
||||
}
|
||||
elseif($variant = $this->productRepository->findOneByField('sku', "{$data['product_group_id']}-{$colorVariant['product_number']}"))
|
||||
{
|
||||
$this->updateAttribute($variant,$colorVariant);
|
||||
}
|
||||
else{
|
||||
$variant = $this->productRepository->createVariant($product,"{$data['product_group_id']}-{$colorVariant['product_number']}");
|
||||
$this->productRepository->assignImages($variant,$colorVariant['images']);
|
||||
$desc = implode(array_map(fn($value): string => '<p>' . $value['description'] . '</p>', $data['descriptions']));
|
||||
$attributes = [
|
||||
'sku' => $variant->sku,
|
||||
'product_number' => $colorVariant['product_number'],
|
||||
'color' => $this->productRepository->getAttributeOptionId('color', $colorVariant['color']),
|
||||
'name' => $colorVariant['name'],
|
||||
// 'price' => Arr::get($colorVariant, 'price.discountedPrice.value'),
|
||||
'weight' => $colorVariant['weight'] ?? 0.45,
|
||||
'status' => 1,
|
||||
'visible_individually' => 1,
|
||||
'url_key' => $variant->sku,
|
||||
'source' => $colorVariant['url_key'],
|
||||
'description' => $description,
|
||||
'short_description' => $description,
|
||||
'favoritesCount' => $colorVariant['favorite_count']
|
||||
];
|
||||
|
||||
$this->assignAttributes($variant, array_merge($attributes,$this->productRepository->calculatePrice($colorVariant['price'])));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
elseif (!empty($data['size_variants'])){
|
||||
foreach ($data['size_variants'] as $sizeVariant) {
|
||||
$sku = "{$data['product_group_id']}-{$data['product_number']}-{$sizeVariant['itemNumber']}";
|
||||
if($variant = $this->productRepository->findOneByField('sku', $sku)){
|
||||
$this->updateAttribute($variant,$sizeVariant);
|
||||
|
||||
}else{
|
||||
$variant = $this->productRepository->createVariant($product,$sku);
|
||||
$this->productRepository->assignImages($variant,$data['images']);
|
||||
|
||||
$desc = implode(array_map(fn($value): string => '<p>' . $value['description'] . '</p>', $data['descriptions']));
|
||||
$attributes = [
|
||||
'sku' => $variant->sku,
|
||||
'size' => $this->productRepository->getAttributeOptionId('size', $sizeVariant['attributeValue']),
|
||||
'product_number' => "{$data['product_number']}-{$sizeVariant['itemNumber']}",
|
||||
'name' => $data['name'],
|
||||
// 'price' => $sizeVariant['price'],
|
||||
'weight' => $data['weight'] ?? 0.45,
|
||||
'status' => 1,
|
||||
'featured'=> 0,
|
||||
'new' => 0,
|
||||
'visible_individually' => 1,
|
||||
'url_key' => $variant->sku,
|
||||
'source' => $data['url_key'],
|
||||
'description' => $desc,
|
||||
'short_description' => $desc,
|
||||
'favoritesCount' => $data['favorite_count']
|
||||
];
|
||||
|
||||
if (!empty($data['color'])) {
|
||||
$attributes['color'] = $this->productRepository->getAttributeOptionId('color', $data['color']);
|
||||
}
|
||||
|
||||
$this->assignAttributes($variant, array_merge($attributes,$this->productRepository->calculatePrice($sizeVariant['price'])));
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if($product->type == 'simple'){
|
||||
$this->updateAttribute($product,$data);
|
||||
}
|
||||
Event::dispatch('catalog.product.update.after', $product);
|
||||
DB::commit();
|
||||
}
|
||||
catch(\Exception $ex){
|
||||
DB::rollBack();
|
||||
Log::error($ex);
|
||||
// Log::info($data);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function updateAttribute($product,$data){
|
||||
if(isset($data['is_sellable']) && !$data['is_sellable']){
|
||||
//$attribute = $this->attributeRepository->findOneByField('code', 'status'); status id = 8
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>8],['boolean_value'=>0]);
|
||||
|
||||
}else{
|
||||
$originalPrice = Arr::get($data, 'price.originalPrice.value');
|
||||
$discountedPrice = Arr::get($data, 'price.discountedPrice.value');
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>8],['boolean_value'=>1]);
|
||||
if($discountedPrice >= $originalPrice){
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>11],['float_value'=>$discountedPrice]);// price id 11
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>13],['float_value'=>null]);//special price id 13
|
||||
}else{
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>11],['float_value'=>$originalPrice]);// price id 11
|
||||
$this->attributeValueRepository->updateOrCreate(['product_id'=>$product->id,'attribute_id'=>13],['float_value'=>$discountedPrice]);//special price id 13
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function createVariant($variant){
|
||||
|
||||
}
|
||||
public function updateOrderStatus(){
|
||||
Log::info(request()->input());
|
||||
//todo update order status,
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class ProductRepository extends WProductRepository
|
|||
$repository = app(ProductFlatRepository::class)->scopeQuery(function ($query) use ($params, $categoryId) {
|
||||
$channel = core()->getRequestedChannelCode();
|
||||
|
||||
$locale = core()->getRequestedLocaleCode();
|
||||
$locale = 'tm';//core()->getRequestedLocaleCode();
|
||||
|
||||
$qb = $query->distinct()
|
||||
->select('product_flat.*')
|
||||
|
|
@ -338,7 +338,7 @@ class ProductRepository extends WProductRepository
|
|||
return $results;
|
||||
}
|
||||
|
||||
private function calculatePrice($price){
|
||||
public function calculatePrice($price){
|
||||
$originalPrice = Arr::get($price, 'originalPrice.value');
|
||||
$discountedPrice = Arr::get($price, 'discountedPrice.value');
|
||||
|
||||
|
|
@ -617,7 +617,7 @@ class ProductRepository extends WProductRepository
|
|||
return false;
|
||||
}
|
||||
}
|
||||
private function updateAttribute($product,$data){
|
||||
public function updateAttribute($product,$data){
|
||||
// $flat = $product->
|
||||
if(isset($data['is_sellable']) && !$data['is_sellable']){
|
||||
//$attribute = $this->attributeRepository->findOneByField('code', 'status'); status id = 8
|
||||
|
|
@ -786,7 +786,7 @@ class ProductRepository extends WProductRepository
|
|||
//// $brand->save();
|
||||
// }
|
||||
|
||||
private function assignImages($product,$images){
|
||||
public function assignImages($product,$images){
|
||||
foreach($images as $image){
|
||||
$this->imageRepository->create([
|
||||
'type' => 'cdn',
|
||||
|
|
@ -867,7 +867,7 @@ class ProductRepository extends WProductRepository
|
|||
|
||||
return $results;
|
||||
}
|
||||
private function assignAttributes($product, $attributes){
|
||||
public function assignAttributes($product, $attributes){
|
||||
foreach($attributes as $code => $value){
|
||||
if(! $attribute = $this->attributeRepository->findOneByField('code', $code))
|
||||
{
|
||||
|
|
@ -903,7 +903,7 @@ class ProductRepository extends WProductRepository
|
|||
}
|
||||
}
|
||||
|
||||
private function createVariant($product, $sku){
|
||||
public function createVariant($product, $sku){
|
||||
try{
|
||||
return $this->getModel()->create([
|
||||
'parent_id' => $product->id,
|
||||
|
|
@ -973,7 +973,7 @@ class ProductRepository extends WProductRepository
|
|||
return $options;
|
||||
}
|
||||
|
||||
private function getAttributeOptionId($attr,$value){
|
||||
public function getAttributeOptionId($attr,$value){
|
||||
$attribute_id = $this->attributeRepository->getAttributeByCode($attr)->id;
|
||||
|
||||
$option = $this->optionRepository->findOneWhere(['attribute_id'=>$attribute_id,'admin_name'=>$value]);
|
||||
|
|
|
|||
Loading…
Reference in New Issue