feat: remove submittedCuttings relation and related attributes from Cutting and User models; update cuttings migration to remove submitted_by_id
This commit is contained in:
parent
a778e2f499
commit
71a7863244
@ -439,7 +439,6 @@ ### Relationship Naming
|
|||||||
|
|
||||||
// Custom FK → pastikan ada parameter
|
// Custom FK → pastikan ada parameter
|
||||||
createdCuttings() // → HasMany Cutting, 'created_by_id'
|
createdCuttings() // → HasMany Cutting, 'created_by_id'
|
||||||
submittedCuttings() // → HasMany Cutting, 'submitted_by_id'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Eloquent Select & Eager Loading — Selalu Select yang Dibutuhkan
|
### Eloquent Select & Eager Loading — Selalu Select yang Dibutuhkan
|
||||||
|
|||||||
@ -12,7 +12,7 @@ ### `users` → User
|
|||||||
- Implements: HasMedia (Spatie Media Library)
|
- Implements: HasMedia (Spatie Media Library)
|
||||||
- Media Collections: photos (single photo, with thumb conversion)
|
- Media Collections: photos (single photo, with thumb conversion)
|
||||||
- Scopes: active()
|
- Scopes: active()
|
||||||
- Relations: userProfile(HasOne→UserProfile), employee(HasOne→Employee), attendances(HasMany→Attendance), cashAccounts(HasMany→CashAccount,created_by_id), cashTransactions(HasMany→CashTransaction,created_by_id), createdCuttings(HasMany→Cutting,created_by_id), submittedCuttings(HasMany→Cutting,submitted_by_id), createdExpenses(HasMany→Expense,created_by_id), createdOrders(HasMany→Order,created_by_id), marketingOrders(HasMany→Order,marketing_id), orderItems(HasMany→OrderItem), createdPurchases(HasMany→Purchase,created_by_id), createdRestocks(HasMany→Restock,created_by_id), stokOpnamesCreated(HasMany→StokOpname,created_by_id), stokOpnamesVerified(HasMany→StokOpname,verified_by_id), employeeAdvancesPaid(HasMany→EmployeeAdvance,paid_by_id), employeeAdvancesVerified(HasMany→EmployeeAdvance,verified_by_id), paidPayrolls(HasMany→Payroll,paid_by_id), payrollPeriodsClosed(HasMany→PayrollPeriod,closed_by_id), notifications(HasMany→AppNotification), rejections(HasMany→Rejection,rejected_by_id), pushSubscriptions(HasMany→PushSubscription,morph)
|
- Relations: userProfile(HasOne→UserProfile), employee(HasOne→Employee), attendances(HasMany→Attendance), cashAccounts(HasMany→CashAccount,created_by_id), cashTransactions(HasMany→CashTransaction,created_by_id), createdCuttings(HasMany→Cutting,created_by_id), createdExpenses(HasMany→Expense,created_by_id), createdOrders(HasMany→Order,created_by_id), marketingOrders(HasMany→Order,marketing_id), orderItems(HasMany→OrderItem), createdPurchases(HasMany→Purchase,created_by_id), createdRestocks(HasMany→Restock,created_by_id), stokOpnamesCreated(HasMany→StokOpname,created_by_id), stokOpnamesVerified(HasMany→StokOpname,verified_by_id), employeeAdvancesPaid(HasMany→EmployeeAdvance,paid_by_id), employeeAdvancesVerified(HasMany→EmployeeAdvance,verified_by_id), paidPayrolls(HasMany→Payroll,paid_by_id), payrollPeriodsClosed(HasMany→PayrollPeriod,closed_by_id), notifications(HasMany→AppNotification), rejections(HasMany→Rejection,rejected_by_id), pushSubscriptions(HasMany→PushSubscription,morph)
|
||||||
- Accessor: avatar → temporary S3 URL dari media 'photos' (atau null)
|
- Accessor: avatar → temporary S3 URL dari media 'photos' (atau null)
|
||||||
|
|
||||||
### `user_profiles` → UserProfile
|
### `user_profiles` → UserProfile
|
||||||
@ -187,10 +187,10 @@ ### `rejections` → Rejection
|
|||||||
## Production
|
## Production
|
||||||
|
|
||||||
### `cuttings` → Cutting
|
### `cuttings` → Cutting
|
||||||
`id` `created_by_id`(FK→users) `submitted_by_id`(FK→users,null) `status`(enum,default:in_progress) `description`(100,null) `total_material_cost`(ubig,null) `sewing_cost`(ubig,default:0) `other_cost`(ubig,default:0) `cost_per_unit`(ubig,null) `created_at` `updated_at` `deleted_at`
|
`id` `created_by_id`(FK→users) `status`(enum,default:in_progress) `description`(100,null) `total_material_cost`(ubig,null) `cost_per_unit`(ubig,null) `created_at` `updated_at` `deleted_at`
|
||||||
- Casts: status(CuttingStatus), total_material_cost(int), cost_per_unit(int), sewing_cost(int), other_cost(int)
|
- Casts: status(CuttingStatus), total_material_cost(int), cost_per_unit(int)
|
||||||
- Scopes: cancelled(), completed(), inProgress()
|
- Scopes: cancelled(), completed(), inProgress()
|
||||||
- Relations: createdBy(BelongsTo→User), submittedBy(BelongsTo→User), cuttingMaterialCombinations(HasMany→CuttingMaterialCombination), cuttingMaterials(HasMany→CuttingMaterial), cuttingResults(HasMany→CuttingResult)
|
- Relations: createdBy(BelongsTo→User), cuttingMaterialCombinations(HasMany→CuttingMaterialCombination), cuttingMaterials(HasMany→CuttingMaterial), cuttingResults(HasMany→CuttingResult)
|
||||||
|
|
||||||
### `cutting_material_combinations` → CuttingMaterialCombination
|
### `cutting_material_combinations` → CuttingMaterialCombination
|
||||||
`id` `user_id`(FK→users,null) `cutting_id`(FK→cuttings,null) `material_result`(int,null) `created_at` `updated_at` `deleted_at`
|
`id` `user_id`(FK→users,null) `cutting_id`(FK→cuttings,null) `material_result`(int,null) `created_at` `updated_at` `deleted_at`
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
use Spatie\MediaLibrary\InteractsWithMedia;
|
use Spatie\MediaLibrary\InteractsWithMedia;
|
||||||
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
use Spatie\MediaLibrary\MediaCollections\Models\Media;
|
||||||
|
|
||||||
#[Appends(['formatted_cost_per_unit', 'formatted_other_cost', 'formatted_sewing_cost', 'status_label', 'formatted_total_material_cost', 'formatted_created_at'])]
|
#[Appends(['formatted_cost_per_unit', 'status_label', 'formatted_total_material_cost', 'formatted_created_at'])]
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
class Cutting extends Model implements HasMedia
|
class Cutting extends Model implements HasMedia
|
||||||
{
|
{
|
||||||
@ -30,8 +30,6 @@ protected function casts(): array
|
|||||||
'status' => CuttingStatus::class,
|
'status' => CuttingStatus::class,
|
||||||
'total_material_cost' => 'integer',
|
'total_material_cost' => 'integer',
|
||||||
'cost_per_unit' => 'integer',
|
'cost_per_unit' => 'integer',
|
||||||
'sewing_cost' => 'integer',
|
|
||||||
'other_cost' => 'integer',
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,20 +40,6 @@ protected function formattedCostPerUnit(): Attribute
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function formattedOtherCost(): Attribute
|
|
||||||
{
|
|
||||||
return Attribute::make(
|
|
||||||
get: fn () => 'Rp '.number_format($this->other_cost, 0, ',', '.'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function formattedSewingCost(): Attribute
|
|
||||||
{
|
|
||||||
return Attribute::make(
|
|
||||||
get: fn () => 'Rp '.number_format($this->sewing_cost, 0, ',', '.'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function statusLabel(): Attribute
|
protected function statusLabel(): Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
@ -115,11 +99,6 @@ public function cuttingResults(): HasMany
|
|||||||
return $this->hasMany(CuttingResult::class);
|
return $this->hasMany(CuttingResult::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function submittedBy(): BelongsTo
|
|
||||||
{
|
|
||||||
return $this->belongsTo(User::class, 'submitted_by_id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerMediaCollections(): void
|
public function registerMediaCollections(): void
|
||||||
{
|
{
|
||||||
$this->addMediaCollection('photos');
|
$this->addMediaCollection('photos');
|
||||||
|
|||||||
@ -215,11 +215,6 @@ public function stokOpnamesVerified(): HasMany
|
|||||||
return $this->hasMany(StokOpname::class, 'verified_by_id');
|
return $this->hasMany(StokOpname::class, 'verified_by_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function submittedCuttings(): HasMany
|
|
||||||
{
|
|
||||||
return $this->hasMany(Cutting::class, 'submitted_by_id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function userProfile(): HasOne
|
public function userProfile(): HasOne
|
||||||
{
|
{
|
||||||
return $this->hasOne(UserProfile::class);
|
return $this->hasOne(UserProfile::class);
|
||||||
|
|||||||
@ -13,7 +13,7 @@ public function migrate(): array
|
|||||||
{
|
{
|
||||||
$results = [];
|
$results = [];
|
||||||
|
|
||||||
$results['cuttings'] = $this->migrateTable('cuttings');
|
$results['cuttings'] = $this->migrateTableWithoutColumns('cuttings', ['other_cost', 'sewing_cost', 'submitted_by_id']);
|
||||||
$results['cutting_material_combinations'] = $this->migrateTable('cutting_material_combinations');
|
$results['cutting_material_combinations'] = $this->migrateTable('cutting_material_combinations');
|
||||||
$results['cutting_materials'] = $this->migrateTable('cutting_materials', function ($row) {
|
$results['cutting_materials'] = $this->migrateTable('cutting_materials', function ($row) {
|
||||||
if (isset($row['material_usage']) && is_string($row['material_usage'])) {
|
if (isset($row['material_usage']) && is_string($row['material_usage'])) {
|
||||||
|
|||||||
@ -13,14 +13,11 @@ public function up(): void
|
|||||||
$table->id();
|
$table->id();
|
||||||
|
|
||||||
$table->foreignId('created_by_id')->constrained('users')->restrictOnDelete();
|
$table->foreignId('created_by_id')->constrained('users')->restrictOnDelete();
|
||||||
$table->foreignId('submitted_by_id')->nullable()->constrained('users')->nullOnDelete();
|
|
||||||
|
|
||||||
$table->enum('status', CuttingStatus::values())->default(CuttingStatus::IN_PROGRESS->value);
|
$table->enum('status', CuttingStatus::values())->default(CuttingStatus::IN_PROGRESS->value);
|
||||||
$table->string('description', 100)->nullable();
|
$table->string('description', 100)->nullable();
|
||||||
|
|
||||||
$table->unsignedBigInteger('total_material_cost')->nullable();
|
$table->unsignedBigInteger('total_material_cost')->nullable();
|
||||||
$table->unsignedBigInteger('sewing_cost')->default(0);
|
|
||||||
$table->unsignedBigInteger('other_cost')->default(0);
|
|
||||||
$table->unsignedBigInteger('cost_per_unit')->nullable();
|
$table->unsignedBigInteger('cost_per_unit')->nullable();
|
||||||
|
|
||||||
$table->timestamp('created_at')->useCurrent();
|
$table->timestamp('created_at')->useCurrent();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user