diff --git a/app/Enums/Role.php b/app/Enums/Role.php
index b772636..0463da9 100644
--- a/app/Enums/Role.php
+++ b/app/Enums/Role.php
@@ -92,6 +92,8 @@ public function permissions(): array
self::ADMIN_TOKO => [
Permission::DASHBOARD_VIEW,
+ Permission::CUTTINGS_VERIFY,
+
Permission::ATTENDANCES_VIEW,
Permission::ATTENDANCES_CREATE,
Permission::ATTENDANCES_DELETE,
diff --git a/app/Services/Manage/CuttingService.php b/app/Services/Manage/CuttingService.php
index 660e068..9a6ecb6 100644
--- a/app/Services/Manage/CuttingService.php
+++ b/app/Services/Manage/CuttingService.php
@@ -98,6 +98,7 @@ public function getInProgressCuttings(User $user): Collection
$cutting->setAttribute('available_actions', $actions);
$cutting->setAttribute('is_editable', $cutting->status->isEditable());
+ $this->appendCostPreview($cutting);
});
}
@@ -678,6 +679,9 @@ private function applySorting(Builder $query, string $sort, string $direction):
private function appendCostPreview(Cutting $cutting): void
{
+ $cutting->setAttribute('total_result_pieces', (int) $cutting->results->sum('cutting_result'));
+ $cutting->setAttribute('total_material_usage', (float) $cutting->materials->sum('material_usage'));
+
if (! in_array($cutting->status, [CuttingStatus::COMPLETED, CuttingStatus::VERIFIED], true)) {
return;
}
@@ -698,7 +702,6 @@ private function appendCostPreview(Cutting $cutting): void
$cutting->setAttribute('total_production_cost_formatted', 'Rp '.number_format($totalProductionCost, 0, ',', '.'));
$cutting->setAttribute('estimated_cost_per_unit', $costPerUnit);
$cutting->setAttribute('estimated_cost_per_unit_formatted', 'Rp '.number_format($costPerUnit, 0, ',', '.'));
- $cutting->setAttribute('total_result_pieces', (int) $cutting->results->sum('cutting_result'));
}
public function calculateTotalMaterialCost(Cutting $cutting): int
diff --git a/resources/js/components/admin/manage/cuttings/CuttingCompletedSection.vue b/resources/js/components/admin/manage/cuttings/CuttingCompletedSection.vue
index a22f5fc..4583ef0 100644
--- a/resources/js/components/admin/manage/cuttings/CuttingCompletedSection.vue
+++ b/resources/js/components/admin/manage/cuttings/CuttingCompletedSection.vue
@@ -93,6 +93,21 @@ const totalCompleted = computed(() => props.cuttings.length);
+
+
+ Total Hasil Cutting:
+ {{ cutting.total_result_pieces ?? 0 }} pcs
+
+
+ Total Pemakaian Bahan:
+ {{ cutting.total_material_usage ?? 0 }}
+
+
+ Harga Modal:
+ {{ cutting.estimated_cost_per_unit_formatted }}/pcs
+
+
+
Pembuat:
diff --git a/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue b/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue
index 4a0ca59..db24820 100644
--- a/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue
+++ b/resources/js/components/admin/manage/cuttings/CuttingGroupedTable.vue
@@ -132,6 +132,11 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
return Object.values(groups);
}
+
+function getMaterialUnit(materials: any[]): string | undefined {
+ return materials[0]?.raw_material_price?.raw_material?.unit_abbreviation;
+}
+
@@ -165,12 +170,24 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
Alasan ditolak: {{ cutting.rejection.reason }}
+
+ Total Hasil Cutting {{ cutting.total_result_pieces ??
+ 0 }} pcs
+ Total Pemakaian Bahan {{ cutting.total_material_usage
+ ??
+ 0 }} {{ getMaterialUnit(cutting.materials) }}
+ Total Biaya Produksi {{
+ cutting.total_production_cost_formatted ?? 0 }}
+ Harga Modal {{
+ cutting.estimated_cost_per_unit_formatted ??
+ 0 }}
+
-
+
@@ -191,11 +208,13 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
Belum ada bahan baku
-
+
{{ group.rawMaterialName }}
-
+
{{ group.unitLabel }}
@@ -241,7 +260,8 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
Belum ada hasil produk
-
+
{{ group.productName }}
diff --git a/resources/js/components/admin/manage/cuttings/CuttingInProgressSection.vue b/resources/js/components/admin/manage/cuttings/CuttingInProgressSection.vue
index b0734f1..191112b 100644
--- a/resources/js/components/admin/manage/cuttings/CuttingInProgressSection.vue
+++ b/resources/js/components/admin/manage/cuttings/CuttingInProgressSection.vue
@@ -93,6 +93,17 @@ const totalInProgress = computed(() => props.cuttings.length);
+
+
+ Total Hasil Cutting:
+ {{ cutting.total_result_pieces ?? 0 }} pcs
+
+
+ Total Pemakaian Bahan:
+ {{ cutting.total_material_usage ?? 0 }}
+
+
+
Pembuat:
diff --git a/resources/js/types/cutting.ts b/resources/js/types/cutting.ts
index f169f2b..266d22e 100644
--- a/resources/js/types/cutting.ts
+++ b/resources/js/types/cutting.ts
@@ -14,12 +14,18 @@ export type CuttingMaterialListItem = {
id: number;
material_usage_formatted: string;
remaining_material_formatted: string;
+ uses_length_unit?: boolean;
+ material_usage_cm_formatted?: string;
+ remaining_material_cm_formatted?: string;
raw_material_price?: {
id: number;
variant: string;
raw_material?: {
id: number;
name: string;
+ unit?: string;
+ unit_label?: string;
+ unit_abbreviation?: string;
};
};
};
@@ -56,6 +62,7 @@ export type CuttingListItem = {
total_production_cost?: number;
total_production_cost_formatted?: string;
total_result_pieces?: number;
+ total_material_usage?: number;
estimated_cost_per_unit?: number;
estimated_cost_per_unit_formatted?: string;
created_by?: {