Browse Source

fix(admin-ui): Allow Fulfillments to be created based on state machine

Closes #471
Michael Bromley 5 years ago
parent
commit
5b99f59cae

+ 1 - 1
packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.html

@@ -19,7 +19,7 @@
         <button
             class="btn btn-primary"
             (click)="fulfillOrder()"
-            [disabled]="order.state !== 'PaymentSettled' && order.state !== 'PartiallyDelivered'"
+            [disabled]="!canAddFulfillment(order)"
         >
             {{ 'order.fulfill-order' | translate }}
         </button>

+ 11 - 0
packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts

@@ -15,6 +15,7 @@ import {
     NotificationService,
     Order,
     OrderDetail,
+    OrderLineFragment,
     ServerConfigService,
     SortOrder,
 } from '@vendure/admin-ui/core';
@@ -196,6 +197,16 @@ export class OrderDetailComponent extends BaseDetailComponent<OrderDetail.Fragme
         });
     }
 
+    canAddFulfillment(order: OrderDetail.Fragment): boolean {
+        const allItemsFulfilled = order.lines
+            .reduce((items, line) => [...items, ...line.items], [] as OrderLineFragment['items'])
+            .every(item => !!item.fulfillment);
+        return (
+            !allItemsFulfilled &&
+            (order.nextStates.includes('Shipped') || order.nextStates.includes('PartiallyShipped'))
+        );
+    }
+
     fulfillOrder() {
         this.entity$
             .pipe(