Skip to content
This repository was archived by the owner on Oct 27, 2022. It is now read-only.

Commit 36138f5

Browse files
committed
chore: 🚧 Ability to store tier prices
1 parent be88172 commit 36138f5

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

src/Models/MagentoTierPrice.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class MagentoTierPrice extends Model
1616
*/
1717
protected $fillable = [
1818
'magento_product_id',
19+
'customer_group_id',
1920
'value',
2021
'quantity',
2122
'extension_attributes',

src/Support/MagentoProducts.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Grayloon\MagentoStorage\Models\MagentoConfigurableProductOptionValue;
99
use Grayloon\MagentoStorage\Models\MagentoCustomAttributeType;
1010
use Grayloon\MagentoStorage\Models\MagentoProduct;
11+
use Grayloon\MagentoStorage\Models\MagentoTierPrice;
1112
use Illuminate\Support\Str;
1213

1314
class MagentoProducts extends PaginatableMagentoService
@@ -57,6 +58,7 @@ public function updateOrCreateProduct($apiProduct)
5758
$this->syncProductLinks($apiProduct['product_links'], $product);
5859
$this->downloadProductImages($apiProduct['media_gallery_entries'] ?? [], $product);
5960
$this->syncStockItemAsAttributes($apiProduct['extension_attributes']['stock_item'] ?? [], $product);
61+
$this->syncPriceTiers($apiProduct, $product);
6062

6163
if ($product->type === 'configurable') {
6264
$this->syncConfigurableProductAttributes($product, $apiProduct['extension_attributes']['configurable_product_links'] ?? [], $apiProduct['extension_attributes']['configurable_product_options'] ?? []);
@@ -171,4 +173,32 @@ protected function syncConfigurableProductAttributes($product, $links, $options)
171173
}
172174
}
173175
}
176+
177+
/**
178+
* Sync the available product price tiers to the provided Magento Product.
179+
*
180+
* @param array $apiProduct
181+
* @param \Grayloon\MagentoStorage\Models\MagentoProduct $product
182+
*
183+
* @return $this
184+
*/
185+
protected function syncPriceTiers($apiProduct, $product)
186+
{
187+
// Truncate any existing prices.
188+
$product->tierPrices()->delete();
189+
190+
if (! isset($apiProduct['tier_prices']) || ! $apiProduct['tier_prices']) {
191+
return $this;
192+
}
193+
194+
foreach ($apiProduct['tier_prices'] as $priceTier) {
195+
MagentoTierPrice::create([
196+
'magento_product_id' => $product->id,
197+
'customer_group_id' => $priceTier['customer_group_id'],
198+
'value' => $priceTier['value'],
199+
'quantity' => $priceTier['qty'],
200+
'extension_attributes' => $priceTier['extension_attributes'],
201+
]);
202+
}
203+
}
174204
}

tests/Support/MagentoProductsTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Grayloon\MagentoStorage\Models\MagentoExtensionAttributeType;
1616
use Grayloon\MagentoStorage\Models\MagentoProduct;
1717
use Grayloon\MagentoStorage\Models\MagentoProductMedia;
18+
use Grayloon\MagentoStorage\Models\MagentoTierPrice;
1819
use Grayloon\MagentoStorage\Support\MagentoProducts;
1920
use Grayloon\MagentoStorage\Tests\TestCase;
2021
use Illuminate\Support\Facades\Http;
@@ -239,6 +240,23 @@ public function it_removes_old_configurable_product_data()
239240
$this->assertNotEquals($link->id, MagentoConfigurableProductLink::first()->id);
240241
}
241242

243+
/** @test */
244+
public function it_can_sync_price_tiers()
245+
{
246+
Queue::fake();
247+
$product = $this->fakeProduct();
248+
249+
$magentoProducts = new MagentoProducts();
250+
$magentoProducts->updateOrCreateProduct($product);
251+
252+
$product = MagentoProduct::with('tierPrices')->first();
253+
254+
$this->assertNotEmpty($product);
255+
$this->assertNotEmpty($product->tierPrices);
256+
$this->assertInstanceOf(MagentoTierPrice::class, $product->tierPrices->first());
257+
$this->assertEquals(MagentoTierPrice::count(), 1);
258+
}
259+
242260
protected function fakeProduct($attributes = null)
243261
{
244262
$product = [
@@ -293,6 +311,16 @@ protected function fakeProduct($attributes = null)
293311
'position' => 0,
294312
],
295313
],
314+
'tier_prices' => [
315+
[
316+
'customer_group_id' => 1,
317+
'qty' => 1,
318+
'value' => 99.99,
319+
'extension_attributes' => [
320+
'website_id' => 1,
321+
],
322+
],
323+
],
296324
'media_gallery_entries' => [
297325
[
298326
'id' => 1,

0 commit comments

Comments
 (0)