diff --git a/app/Http/Requests/Concerns/HasProductVariantRules.php b/app/Http/Requests/Concerns/HasProductVariantRules.php
index 0c69933..3d96cac 100644
--- a/app/Http/Requests/Concerns/HasProductVariantRules.php
+++ b/app/Http/Requests/Concerns/HasProductVariantRules.php
@@ -24,6 +24,7 @@ protected function productVariantRules(string $variantsKey = 'variants', ?int $p
"{$variantsKey}" => ['required', 'array', 'min:1'],
"{$variantsKey}.*.name" => ['required', 'string', 'max:200'],
"{$variantsKey}.*.stock" => ['required', 'integer', 'min:0'],
+ "{$variantsKey}.*.reject_stock" => ['required', 'integer', 'min:0'],
"{$variantsKey}.*.retail_stock" => ['required', 'integer', 'min:0'],
...$this->variantImageRules($variantsKey, required: $imagesRequired),
];
@@ -61,7 +62,8 @@ protected function productVariantAttributes(string $variantsKey = 'variants'): a
return [
$variantsKey => 'varian',
"{$variantsKey}.*.name" => 'nama varian',
- "{$variantsKey}.*.stock" => 'stok',
+ "{$variantsKey}.*.stock" => 'stok bagus',
+ "{$variantsKey}.*.reject_stock" => 'stok reject',
"{$variantsKey}.*.retail_stock" => 'stok ecer',
"{$variantsKey}.*.prices" => 'harga',
"{$variantsKey}.*.prices.distributor" => 'distributor',
diff --git a/app/Services/Master/ProductService.php b/app/Services/Master/ProductService.php
index 74c1357..c9be7bf 100644
--- a/app/Services/Master/ProductService.php
+++ b/app/Services/Master/ProductService.php
@@ -141,6 +141,7 @@ function () use ($validated, $user, $isOwner, $isDraft): Product {
$variant = $product->variants()->create([
'name' => $variantData['name'],
'stock' => $variantData['stock'],
+ 'reject_stock' => $variantData['reject_stock'],
'retail_stock' => $variantData['retail_stock'],
]);
@@ -574,6 +575,7 @@ private function applyPayloadToProduct(
$variant->update([
'name' => $variantData['name'],
'stock' => $variantData['stock'],
+ 'reject_stock' => $variantData['reject_stock'],
'retail_stock' => $variantData['retail_stock'],
]);
@@ -596,6 +598,7 @@ private function applyPayloadToProduct(
$variant = $product->variants()->create([
'name' => $variantData['name'],
'stock' => $variantData['stock'],
+ 'reject_stock' => $variantData['reject_stock'],
'retail_stock' => $variantData['retail_stock'],
]);
@@ -763,6 +766,7 @@ private function snapshotProduct(Product $product): array
'id' => $variant->id,
'name' => $variant->name,
'stock' => $variant->stock,
+ 'reject_stock' => $variant->reject_stock,
'retail_stock' => $variant->retail_stock,
'prices' => $variant->prices
->mapWithKeys(fn ($price) => [$price->type->value => $price->price])
@@ -795,6 +799,7 @@ private function buildPayloadFromValidated(array $validated): array
'id' => $variantData['id'] ?? null,
'name' => $variantData['name'],
'stock' => $variantData['stock'],
+ 'reject_stock' => $variantData['reject_stock'],
'retail_stock' => $variantData['retail_stock'],
'prices' => $variantData['prices'] ?? [],
'remove_media_ids' => $variantData['remove_media_ids'] ?? [],
diff --git a/resources/js/pages/admin/master/products/Edit.vue b/resources/js/pages/admin/master/products/Edit.vue
index 8e4f73d..7ffd970 100644
--- a/resources/js/pages/admin/master/products/Edit.vue
+++ b/resources/js/pages/admin/master/products/Edit.vue
@@ -22,6 +22,7 @@ const initialData = computed(() => ({
id: variant.id,
name: variant.name,
stock: variant.stock,
+ reject_stock: variant.reject_stock,
retail_stock: variant.retail_stock,
prices: variant.prices ?? [],
images: variant.images ?? [],
diff --git a/resources/js/pages/admin/master/products/form/ProductForm.vue b/resources/js/pages/admin/master/products/form/ProductForm.vue
index ae041d0..2081e0c 100644
--- a/resources/js/pages/admin/master/products/form/ProductForm.vue
+++ b/resources/js/pages/admin/master/products/form/ProductForm.vue
@@ -55,6 +55,7 @@ const {
client_id: createClientId(),
name: '',
stock: '0',
+ reject_stock: '0',
retail_stock: '0',
prices: {
distributor: '0',
@@ -74,6 +75,7 @@ const {
client_id: createClientId(),
name: '',
stock: '0',
+ reject_stock: '0',
retail_stock: '0',
prices: {
distributor: '0',
@@ -111,6 +113,7 @@ const {
id: variant.id,
name: variant.name ?? '',
stock: variant.stock != null ? String(variant.stock) : '0',
+ reject_stock: variant.reject_stock != null ? String(variant.reject_stock) : '0',
retail_stock: variant.retail_stock != null ? String(variant.retail_stock) : '0',
prices,
media: createMediaUploadState(variant.images ?? []),
@@ -225,6 +228,7 @@ function buildFormData(): FormData {
appendToFormData(formData, (formData, index, variant) => {
formData.append(`variants[${index}][name]`, variant.name.trim());
formData.append(`variants[${index}][stock]`, String(Number.parseInt(String(variant.stock), 10) || 0));
+ formData.append(`variants[${index}][reject_stock]`, String(Number.parseInt(String(variant.reject_stock), 10) || 0));
formData.append(`variants[${index}][retail_stock]`, String(Number.parseInt(String(variant.retail_stock), 10) || 0));
if (variant.prices && showPrices.value) {
@@ -291,6 +295,7 @@ function submit() {
@remove="confirmRemoveVariant(variant.client_id)"
@update:name="setVariantField(variant.client_id, 'name', $event)"
@update:stock="setVariantField(variant.client_id, 'stock', $event)"
+ @update:reject-stock="setVariantField(variant.client_id, 'reject_stock', $event)"
@update:retail-stock="setVariantField(variant.client_id, 'retail_stock', $event)"
@update:prices="setVariantField(variant.client_id, 'prices', $event)"
@update:media="setVariantField(variant.client_id, 'media', $event)"
diff --git a/resources/js/pages/admin/master/products/form/ProductVariantEditModal.vue b/resources/js/pages/admin/master/products/form/ProductVariantEditModal.vue
index f707716..7468d35 100644
--- a/resources/js/pages/admin/master/products/form/ProductVariantEditModal.vue
+++ b/resources/js/pages/admin/master/products/form/ProductVariantEditModal.vue
@@ -76,6 +76,7 @@ function populateForm(variant: Variant | null) {
id: v.id,
name: v.name,
stock: String(v.stock),
+ reject_stock: String(v.reject_stock),
retail_stock: String(v.retail_stock),
prices,
media: createMediaUploadState(v.images ?? []),
@@ -133,6 +134,7 @@ function submit() {
formData.append(`variants[${index}][name]`, v.name.trim());
formData.append(`variants[${index}][stock]`, String(Number.parseInt(v.stock, 10) || 0));
+ formData.append(`variants[${index}][reject_stock]`, String(Number.parseInt(v.reject_stock, 10) || 0));
formData.append(`variants[${index}][retail_stock]`, String(Number.parseInt(v.retail_stock, 10) || 0));
if (v.prices) {
@@ -178,13 +180,19 @@ function submit() {