Skip to content

Commit

Permalink
Merge pull request #775 from bakaphp/price-history
Browse files Browse the repository at this point in the history
Price history
  • Loading branch information
arfenis authored Jan 4, 2024
2 parents 652ae25 + d227156 commit 33ebf9f
Show file tree
Hide file tree
Showing 16 changed files with 261 additions and 80 deletions.
5 changes: 3 additions & 2 deletions app/GraphQL/Inventory/Mutations/Variants/Variants.php
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ public function removeAttribute(mixed $root, array $req): VariantModel
*/
public function addToChannel(mixed $root, array $req): VariantModel
{
$variant = VariantsRepository::getById((int) $req['id'], auth()->user()->getCurrentCompany());
$variant = VariantsRepository::getById((int) $req['variants_id'], auth()->user()->getCurrentCompany());
$warehouse = WarehouseRepository::getById((int) $req['warehouses_id']);
$variantWarehouses = ModelsVariantsWarehouses::where('products_variants_id', $variant->getId())
->where('warehouses_id', $warehouse->getId())
Expand All @@ -202,10 +202,11 @@ public function addToChannel(mixed $root, array $req): VariantModel
/**
* @todo Remove and use softdelete.
* removeChannel.
* @todo Use softdelete and cascade softdelete and remove detach
*/
public function removeChannel(mixed $root, array $req): VariantModel
{
$variant = VariantsRepository::getById((int) $req['id'], auth()->user()->getCurrentCompany());
$variant = VariantsRepository::getById((int) $req['variants_id'], auth()->user()->getCurrentCompany());
$warehouse = WarehouseRepository::getById((int) $req['warehouses_id']);
$variantWarehouses = ModelsVariantsWarehouses::where('products_variants_id', $variant->getId())
->where('warehouses_id', $warehouse->getId())
Expand Down
3 changes: 3 additions & 0 deletions app/Providers/EventServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
use Kanvas\Guild\Leads\Observers\LeadObserver;
use Kanvas\Inventory\Status\Models\Status;
use Kanvas\Inventory\Status\Observers\StatusObserver;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;
use Kanvas\Inventory\Warehouses\Models\Warehouses;
use Kanvas\Inventory\Warehouses\Observers\VariantsWarehouseObserver;
use Kanvas\Inventory\Warehouses\Observers\WarehouseObserver;
use Kanvas\Social\Messages\Models\UserMessage;
use Kanvas\Social\Messages\Models\UserMessageActivity;
Expand Down Expand Up @@ -55,6 +57,7 @@ public function boot()
UserMessage::observe(UserMessageObserver::class);
Warehouses::observe(WarehouseObserver::class);
Status::observe(StatusObserver::class);
VariantsWarehouses::observe(VariantsWarehouseObserver::class);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class () extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products_variants_warehouse_channel_price_history', function (Blueprint $table) {
$table->bigInteger('products_variants_id')->unsigned();
$table->bigInteger('channels_id')->unsigned();
$table->bigInteger('product_variants_warehouse_id')->unsigned();
$table->float('price', 10, 2);
$table->dateTime('from_date');
$table->timestamp('created_at')->useCurrent();
$table->boolean('is_deleted')->default(0);
$table->foreign('products_variants_id', 'variants_price_ref')->references('id')->on('products_variants');
$table->foreign('channels_id', 'channels_price_ref')->references('id')->on('channels');
$table->foreign('product_variants_warehouse_id', 'variant_warehouse_channel_price_ref')->references('id')->on('products_variants_warehouses');
});

Schema::dropIfExists('products_variants_warehouse_price_history');

Schema::create('products_variants_warehouses_price_history', function (Blueprint $table) {
$table->bigInteger('product_variants_warehouse_id')->unsigned();
$table->float('price', 10, 2);
$table->dateTime('from_date');
$table->timestamp('created_at')->useCurrent();
$table->boolean('is_deleted')->default(0);
$table->foreign('product_variants_warehouse_id', 'variant_warehouse_price_ref')->references('id')->on('products_variants_warehouses');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
//
}
};
4 changes: 2 additions & 2 deletions graphql/schemas/Inventory/variantChannel.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ input VariantChannelInput {

extend type Mutation @guard {
addVariantToChannel(
id: ID!
variants_id: ID!
channels_id: ID!
warehouses_id: ID!
input: VariantChannelInput!
Expand All @@ -51,7 +51,7 @@ extend type Mutation @guard {
resolver: "App\\GraphQL\\Inventory\\Mutations\\Variants\\Variants@addToChannel"
)
removeVariantChannel(
id: ID!
variants_id: ID!
channels_id: ID!
warehouses_id: ID!
): Variant
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

declare(strict_types=1);

namespace Kanvas\Inventory\Channels\Actions;

use Kanvas\Inventory\Channels\Models\Channels;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;
use Kanvas\Inventory\Channels\Models\VariantChannelPriceHistory;

class CreatePriceHistoryAction
{
/**
* __construct.
*
* @return void
*/
public function __construct(
protected VariantsWarehouses $variantsWarehouses,
protected Channels $channel,
protected Float $price
) {
}

/**
* execute.
*
* @return VariantChannelPriceHistory
*/
public function execute(): VariantChannelPriceHistory
{
return VariantChannelPriceHistory::firstOrCreate(
[
'product_variants_warehouse_id' => $this->variantsWarehouses->getId(),
'channels_id' => $this->channel->getId(),
'products_variants_id' => $this->variantsWarehouses->products_variants_id,
'price' => $this->price
],
[
'from_date' => date('Y-m-d H:i:s'),
]
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace Kanvas\Inventory\Channels\Models;

use Baka\Traits\NoAppRelationshipTrait;
use Baka\Traits\NoCompanyRelationshipTrait;
use Kanvas\Inventory\Models\BaseModel;

/**
* Class Variants Price Channel History.
*
* @property int $channel_id
* @property int $products_variants_id
* @property int $product_variants_warehouse_id
* @property int $price
* @property string $from_date
* @property string $created_at
* @property bool $is_deleted
*/
class VariantChannelPriceHistory extends BaseModel
{
use NoAppRelationshipTrait;
use NoCompanyRelationshipTrait;

protected $table = 'products_variants_warehouse_channel_price_history';
public $timestamps = false;
protected $guarded = [];
}
4 changes: 2 additions & 2 deletions src/Domains/Inventory/Support/CreateSystemModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
use Kanvas\Inventory\Variants\Models\Variants;
use Kanvas\Inventory\Variants\Models\VariantsAttributes;
use Kanvas\Inventory\Variants\Models\VariantsChannels;
use Kanvas\Inventory\Variants\Models\VariantsWarehousePriceHistory;
use Kanvas\Inventory\Variants\Models\VariantsWarehousesPriceHistory;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;
use Kanvas\Inventory\Warehouses\Models\Warehouses;
use Kanvas\SystemModules\Actions\CreateInCurrentAppAction;
Expand All @@ -40,7 +40,7 @@ public function run(): void
$createSystemModule->execute(VariantsAttributes::class);
$createSystemModule->execute(VariantsChannels::class);
$createSystemModule->execute(VariantsWarehouses::class);
$createSystemModule->execute(VariantsWarehousePriceHistory::class);
$createSystemModule->execute(VariantsWarehousesPriceHistory::class);
$createSystemModule->execute(Warehouses::class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Kanvas\Inventory\Variants\DataTransferObject\VariantsWarehouses as VariantsWarehousesDto;
use Kanvas\Inventory\Variants\Models\Variants;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;
use Kanvas\Inventory\Warehouses\Actions\CreatePriceHistoryAction;
use Kanvas\Inventory\Warehouses\Models\Warehouses;

class AddToWarehouseAction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,47 @@

namespace Kanvas\Inventory\Variants\Actions;

use Kanvas\Inventory\Channels\Actions\CreatePriceHistoryAction;
use Kanvas\Inventory\Channels\Models\Channels;
use Kanvas\Inventory\Variants\DataTransferObject\VariantChannel;
use Kanvas\Inventory\Variants\Models\Variants;
use Kanvas\Inventory\Variants\DataTransferObject\VariantChannel as VariantChannelDto;
use Kanvas\Inventory\Variants\Models\VariantsChannels;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;

class AddVariantToChannelAction
{
public function __construct(
protected VariantsWarehouses $variantsWarehouses,
protected Channels $channel,
protected VariantChannel $variantChannel
protected VariantChannelDto $variantChannelDto
) {
}

public function execute(): Variants
public function execute(): VariantsChannels
{
$channelId = $this->channel->getId();
$relationship = $this->variantsWarehouses->channels()->find($channelId);

if ($relationship) {
// Update existing pivot table values
$this->variantsWarehouses->channels()->updateExistingPivot($channelId, [
'price' => $this->variantChannel->price,
'discounted_price' => $this->variantChannel->discounted_price,
'is_published' => $this->variantChannel->is_published,
'products_variants_id' => $this->variantsWarehouses->products_variants_id,
'product_variants_warehouse_id' => $this->variantsWarehouses->getId(),
'warehouses_id' => $this->variantsWarehouses->warehouses_id,
]);
} else {
// Create new relationship if it doesn't exist
$this->variantsWarehouses->channels()->attach($channelId, [
'price' => $this->variantChannel->price,
'discounted_price' => $this->variantChannel->discounted_price,
'is_published' => $this->variantChannel->is_published,
$search = [
'product_variants_warehouse_id' => $this->variantsWarehouses->getId(),
'channels_id' => $this->channel->getId(),
];

$variantChannel = VariantsChannels::firstOrCreate(
$search,
[
'price' => $this->variantChannelDto->price ?? 0.00,
'discounted_price' => $this->variantChannelDto->discounted_price ?? 0.00,
'is_published' => $this->variantChannelDto->is_published,
'products_variants_id' => $this->variantsWarehouses->products_variants_id,
'product_variants_warehouse_id' => $this->variantsWarehouses->getId(),
'warehouses_id' => $this->variantsWarehouses->warehouses_id,
]);
'warehouses_id' => $this->variantsWarehouses->warehouses_id
]
);

if ($this->variantChannelDto->price) {
(new CreatePriceHistoryAction(
$this->variantsWarehouses,
$this->channel,
$variantChannel->price
))->execute();
}

return $this->variantsWarehouses->variant;
return $variantChannel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Kanvas\Inventory\Variants\DataTransferObject\VariantsWarehouses as VariantsWarehousesDto;
use Kanvas\Inventory\Variants\Models\Variants;
use Kanvas\Inventory\Variants\Models\VariantsWarehouses;
use Kanvas\Inventory\Warehouses\Actions\CreatePriceHistoryAction;

class UpdateToWarehouseAction
{
Expand All @@ -30,6 +31,7 @@ public function __construct(
public function execute(): Variants
{
$oldStatusId = $this->variantsWarehouses->status_id;
$oldPrice = $this->variantsWarehouses->price;

$this->variantsWarehouses->update(
[
Expand Down
13 changes: 7 additions & 6 deletions src/Domains/Inventory/Variants/Models/VariantsChannels.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
namespace Kanvas\Inventory\Variants\Models;

use Baka\Traits\HasCompositePrimaryKeyTrait;
use Baka\Traits\NoAppRelationshipTrait;
use Baka\Traits\NoCompanyRelationshipTrait;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Kanvas\Inventory\Channels\Models\Channels;
use Kanvas\Inventory\Models\BaseModel;
Expand All @@ -21,18 +23,17 @@
* @property string $created_at
* @property string $updated_at
* @property bool $is_deleted
*
* @todo Add relationships and cascade softdelete
*/
class VariantsChannels extends BaseModel
{
use HasCompositePrimaryKeyTrait;
use NoAppRelationshipTrait;
use NoCompanyRelationshipTrait;

protected $table = 'products_variants_channels';
protected $guarded = [
'product_variants_warehouse_id',
'channels_id',
'price',
'discount_price'
];
protected $guarded = [];

protected $primaryKey = ['product_variants_warehouse_id', 'channels_id'];

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace Kanvas\Inventory\Variants\Models;

use Baka\Traits\NoAppRelationshipTrait;
use Baka\Traits\NoCompanyRelationshipTrait;
use Kanvas\Inventory\Models\BaseModel;

/**
* Class Variants Price History.
*
* @property int $product_variants_warehouse_id
* @property int $price
* @property string $from_date
* @property string $created_at
* @property bool $is_deleted
*/
class VariantsWarehousesPriceHistory extends BaseModel
{
use NoAppRelationshipTrait;
use NoCompanyRelationshipTrait;

protected $table = 'products_variants_warehouses_price_history';
public $timestamps = false;
protected $guarded = [];
}
Loading

0 comments on commit 33ebf9f

Please sign in to comment.