Browse Source

fix(admin-ui): Improved control over Order payments

Relates to #688, relates to #507
Michael Bromley 5 years ago
parent
commit
475b72aeae
23 changed files with 199 additions and 28 deletions
  1. 14 14
      packages/admin-ui/i18n-coverage.json
  2. 24 1
      packages/admin-ui/src/lib/core/src/common/generated-types.ts
  3. 21 0
      packages/admin-ui/src/lib/core/src/data/definitions/order-definitions.ts
  4. 12 0
      packages/admin-ui/src/lib/core/src/data/providers/order-data.service.ts
  5. 1 1
      packages/admin-ui/src/lib/core/src/shared/pipes/state-i18n-token.pipe.ts
  6. 1 1
      packages/admin-ui/src/lib/order/src/components/fulfillment-card/fulfillment-card.component.html
  7. 13 2
      packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.html
  8. 31 2
      packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts
  9. 6 4
      packages/admin-ui/src/lib/order/src/components/order-history/order-history.component.ts
  10. 33 2
      packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.html
  11. 6 0
      packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.scss
  12. 8 0
      packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.ts
  13. 1 1
      packages/admin-ui/src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.html
  14. 1 0
      packages/admin-ui/src/lib/order/src/components/payment-state-label/payment-state-label.component.ts
  15. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/cs.json
  16. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/de.json
  17. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/en.json
  18. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/es.json
  19. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/fr.json
  20. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/pl.json
  21. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json
  22. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json
  23. 3 0
      packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json

+ 14 - 14
packages/admin-ui/i18n-coverage.json

@@ -1,49 +1,49 @@
 {
-  "generatedOn": "2021-02-01T20:16:12.347Z",
-  "lastCommit": "7eb21d16d0c17f87e9cc267a024b937c2e4deefa",
+  "generatedOn": "2021-02-16T10:13:22.418Z",
+  "lastCommit": "d3b0f606ed5071419ddd6cb052de8fffb195de9e",
   "translationStatus": {
     "cs": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 753,
       "percentage": 98
     },
     "de": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 594,
       "percentage": 77
     },
     "en": {
-      "tokenCount": 768,
-      "translatedCount": 767,
+      "tokenCount": 771,
+      "translatedCount": 768,
       "percentage": 100
     },
     "es": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 456,
       "percentage": 59
     },
     "fr": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 690,
-      "percentage": 90
+      "percentage": 89
     },
     "pl": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 549,
       "percentage": 71
     },
     "pt_BR": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 749,
-      "percentage": 98
+      "percentage": 97
     },
     "zh_Hans": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 531,
       "percentage": 69
     },
     "zh_Hant": {
-      "tokenCount": 768,
+      "tokenCount": 771,
       "translatedCount": 531,
       "percentage": 69
     }

+ 24 - 1
packages/admin-ui/src/lib/core/src/common/generated-types.ts

@@ -5725,7 +5725,7 @@ export type OrderDetailFragment = (
     & OrderAddressFragment
   )>, payments?: Maybe<Array<(
     { __typename?: 'Payment' }
-    & Pick<Payment, 'id' | 'createdAt' | 'transactionId' | 'amount' | 'method' | 'state' | 'metadata'>
+    & Pick<Payment, 'id' | 'createdAt' | 'transactionId' | 'amount' | 'method' | 'state' | 'nextStates' | 'metadata'>
     & { refunds: Array<(
       { __typename?: 'Refund' }
       & Pick<Refund, 'id' | 'createdAt' | 'state' | 'items' | 'adjustment' | 'total' | 'paymentId' | 'reason' | 'transactionId' | 'method' | 'metadata'>
@@ -5802,6 +5802,21 @@ export type SettlePaymentMutation = { settlePayment: (
     & ErrorResult_OrderStateTransitionError_Fragment
   ) };
 
+export type TransitionPaymentToStateMutationVariables = Exact<{
+  id: Scalars['ID'];
+  state: Scalars['String'];
+}>;
+
+
+export type TransitionPaymentToStateMutation = { transitionPaymentToState: (
+    { __typename?: 'Payment' }
+    & Pick<Payment, 'id' | 'transactionId' | 'amount' | 'method' | 'state' | 'metadata'>
+  ) | (
+    { __typename?: 'PaymentStateTransitionError' }
+    & Pick<PaymentStateTransitionError, 'transitionError'>
+    & ErrorResult_PaymentStateTransitionError_Fragment
+  ) };
+
 export type CreateFulfillmentMutationVariables = Exact<{
   input: FulfillOrderInput;
 }>;
@@ -8671,6 +8686,14 @@ export namespace SettlePayment {
   export type OrderStateTransitionErrorInlineFragment = (DiscriminateUnion<(NonNullable<SettlePaymentMutation['settlePayment']>), { __typename?: 'OrderStateTransitionError' }>);
 }
 
+export namespace TransitionPaymentToState {
+  export type Variables = TransitionPaymentToStateMutationVariables;
+  export type Mutation = TransitionPaymentToStateMutation;
+  export type TransitionPaymentToState = (NonNullable<TransitionPaymentToStateMutation['transitionPaymentToState']>);
+  export type PaymentInlineFragment = (DiscriminateUnion<(NonNullable<TransitionPaymentToStateMutation['transitionPaymentToState']>), { __typename?: 'Payment' }>);
+  export type PaymentStateTransitionErrorInlineFragment = (DiscriminateUnion<(NonNullable<TransitionPaymentToStateMutation['transitionPaymentToState']>), { __typename?: 'PaymentStateTransitionError' }>);
+}
+
 export namespace CreateFulfillment {
   export type Variables = CreateFulfillmentMutationVariables;
   export type Mutation = CreateFulfillmentMutation;

+ 21 - 0
packages/admin-ui/src/lib/core/src/data/definitions/order-definitions.ts

@@ -184,6 +184,7 @@ export const ORDER_DETAIL_FRAGMENT = gql`
             amount
             method
             state
+            nextStates
             metadata
             refunds {
                 id
@@ -281,6 +282,26 @@ export const SETTLE_PAYMENT = gql`
     ${ERROR_RESULT_FRAGMENT}
 `;
 
+export const TRANSITION_PAYMENT_TO_STATE = gql`
+    mutation TransitionPaymentToState($id: ID!, $state: String!) {
+        transitionPaymentToState(id: $id, state: $state) {
+            ... on Payment {
+                id
+                transactionId
+                amount
+                method
+                state
+                metadata
+            }
+            ...ErrorResult
+            ... on PaymentStateTransitionError {
+                transitionError
+            }
+        }
+    }
+    ${ERROR_RESULT_FRAGMENT}
+`;
+
 export const CREATE_FULFILLMENT = gql`
     mutation CreateFulfillment($input: FulfillOrderInput!) {
         addFulfillmentToOrder(input: $input) {

+ 12 - 0
packages/admin-ui/src/lib/core/src/data/providers/order-data.service.ts

@@ -23,6 +23,7 @@ import {
     SettleRefundInput,
     TransitionFulfillmentToState,
     TransitionOrderToState,
+    TransitionPaymentToState,
     UpdateOrderCustomFields,
     UpdateOrderInput,
     UpdateOrderNote,
@@ -44,6 +45,7 @@ import {
     SETTLE_REFUND,
     TRANSITION_FULFILLMENT_TO_STATE,
     TRANSITION_ORDER_TO_STATE,
+    TRANSITION_PAYMENT_TO_STATE,
     UPDATE_ORDER_CUSTOM_FIELDS,
     UPDATE_ORDER_NOTE,
 } from '../definitions/order-definitions';
@@ -79,6 +81,16 @@ export class OrderDataService {
         });
     }
 
+    transitionPaymentToState(id: string, state: string) {
+        return this.baseDataService.mutate<
+            TransitionPaymentToState.Mutation,
+            TransitionPaymentToState.Variables
+        >(TRANSITION_PAYMENT_TO_STATE, {
+            id,
+            state,
+        });
+    }
+
     createFulfillment(input: FulfillOrderInput) {
         return this.baseDataService.mutate<CreateFulfillment.Mutation, CreateFulfillment.Variables>(
             CREATE_FULFILLMENT,

+ 1 - 1
packages/admin-ui/src/lib/core/src/shared/pipes/state-i18n-token.pipe.ts

@@ -26,7 +26,7 @@ export class StateI18nTokenPipe implements PipeTransform {
         ArrangingAdditionalPayment: _('state.arranging-additional-payment'),
     };
     transform<T extends unknown>(value: T): T {
-        if (typeof value === 'string') {
+        if (typeof value === 'string' && value.length) {
             const defaultStateToken = this.stateI18nTokens[value as any];
             if (defaultStateToken) {
                 return defaultStateToken;

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

@@ -12,7 +12,7 @@
             [order]="order"
         ></vdr-fulfillment-detail>
     </div>
-    <div class="card-footer">
+    <div class="card-footer" *ngIf="fulfillment?.nextStates.length">
         <ng-container *ngIf="nextSuggestedState() as suggestedState">
             <button class="btn btn-sm btn-primary" (click)="transitionState.emit(suggestedState)">
                 {{ 'order.set-fulfillment-state' | translate: { state: (suggestedState | stateI18nToken | translate) } }}

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

@@ -18,11 +18,21 @@
         <vdr-action-bar-items locationId="order-detail"></vdr-action-bar-items>
         <button
             class="btn btn-primary"
-            *ngIf="hasUnsettledModifications(order)"
+            *ngIf="
+                order.state === 'ArrangingAdditionalPayment' &&
+                (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))
+            "
             (click)="addManualPayment(order)"
         >
             {{ 'order.add-payment-to-order' | translate }}
-            ({{ getOutstandingModificationAmount(order) | localeCurrency: order.currencyCode }})
+            ({{ outstandingPaymentAmount(order) | localeCurrency: order.currencyCode }})
+        </button>
+        <button
+            class="btn btn-primary"
+            *ngIf="order.state !== 'ArrangingAdditionalPayment' && 0 < outstandingPaymentAmount(order)"
+            (click)="transitionToState('ArrangingAdditionalPayment')"
+        >
+            {{ 'order.arrange-additional-payment' | translate }}
         </button>
         <button class="btn btn-primary" (click)="fulfillOrder()" [disabled]="!canAddFulfillment(order)">
             {{ 'order.fulfill-order' | translate }}
@@ -146,6 +156,7 @@
                     [currencyCode]="order.currencyCode"
                     [payment]="payment"
                     (settlePayment)="settlePayment($event)"
+                    (transitionPaymentState)="transitionPaymentState($event)"
                     (settleRefund)="settleRefund($event)"
                 ></vdr-order-payment-card>
             </ng-container>

+ 31 - 2
packages/admin-ui/src/lib/order/src/components/order-detail/order-detail.component.ts

@@ -22,7 +22,8 @@ import {
     ServerConfigService,
     SortOrder,
 } from '@vendure/admin-ui/core';
-import { summate } from '@vendure/common/lib/shared-utils';
+import { pick } from '@vendure/common/lib/pick';
+import { assertNever, summate } from '@vendure/common/lib/shared-utils';
 import { EMPTY, merge, Observable, of, Subject } from 'rxjs';
 import { map, mapTo, startWith, switchMap, take } from 'rxjs/operators';
 
@@ -205,6 +206,25 @@ export class OrderDetailComponent
         });
     }
 
+    transitionPaymentState({ payment, state }: { payment: OrderDetail.Payments; state: string }) {
+        this.dataService.order
+            .transitionPaymentToState(payment.id, state)
+            .subscribe(({ transitionPaymentToState }) => {
+                switch (transitionPaymentToState.__typename) {
+                    case 'Payment':
+                        this.notificationService.success(_('order.transitioned-payment-to-state-success'), {
+                            state,
+                        });
+                        this.dataService.order.getOrder(this.id).single$.subscribe();
+                        this.fetchHistory.next();
+                        break;
+                    case 'PaymentStateTransitionError':
+                        this.notificationService.error(transitionPaymentToState.message);
+                        break;
+                }
+            });
+    }
+
     canAddFulfillment(order: OrderDetail.Fragment): boolean {
         const allItemsFulfilled = order.lines
             .reduce((items, line) => [...items, ...line.items], [] as OrderLineFragment['items'])
@@ -212,6 +232,7 @@ export class OrderDetailComponent
         return (
             !allItemsFulfilled &&
             !this.hasUnsettledModifications(order) &&
+            this.outstandingPaymentAmount(order) === 0 &&
             (order.nextStates.includes('Shipped') ||
                 order.nextStates.includes('PartiallyShipped') ||
                 order.nextStates.includes('Delivered'))
@@ -229,12 +250,20 @@ export class OrderDetailComponent
         );
     }
 
+    outstandingPaymentAmount(order: OrderDetailFragment): number {
+        const paymentIsValid = (p: OrderDetail.Payments): boolean =>
+            p.state !== 'Cancelled' && p.state !== 'Declined' && p.state !== 'Error';
+        const validPayments = order.payments?.filter(paymentIsValid).map(p => pick(p, ['amount'])) ?? [];
+        const amountCovered = summate(validPayments, 'amount');
+        return order.totalWithTax - amountCovered;
+    }
+
     addManualPayment(order: OrderDetailFragment) {
         this.modalService
             .fromComponent(AddManualPaymentDialogComponent, {
                 closable: true,
                 locals: {
-                    outstandingAmount: this.getOutstandingModificationAmount(order),
+                    outstandingAmount: this.outstandingPaymentAmount(order),
                     currencyCode: order.currencyCode,
                 },
             })

+ 6 - 4
packages/admin-ui/src/lib/order/src/components/order-history/order-history.component.ts

@@ -40,7 +40,7 @@ export class OrderHistoryComponent {
             }
         }
         if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {
-            if (entry.data.to === 'Declined') {
+            if (entry.data.to === 'Declined' || entry.data.to === 'Cancelled') {
                 return 'error';
             }
         }
@@ -62,8 +62,10 @@ export class OrderHistoryComponent {
                 return 'ban';
             }
         }
-        if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION && entry.data.to === 'Settled') {
-            return 'credit-card';
+        if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {
+            if (entry.data.to === 'Settled') {
+                return 'credit-card';
+            }
         }
         if (entry.type === HistoryEntryType.ORDER_NOTE) {
             return 'note';
@@ -91,7 +93,7 @@ export class OrderHistoryComponent {
                 );
             }
             case HistoryEntryType.ORDER_PAYMENT_TRANSITION:
-                return entry.data.to === 'Settled';
+                return entry.data.to === 'Settled' || entry.data.to === 'Cancelled';
             case HistoryEntryType.ORDER_FULFILLMENT_TRANSITION:
                 return entry.data.to === 'Delivered' || entry.data.to === 'Shipped';
             case HistoryEntryType.ORDER_NOTE:

+ 33 - 2
packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.html

@@ -38,9 +38,40 @@
             </button>
         </div>
     </ng-container>
-    <div class="card-footer" *ngIf="payment.state === 'Authorized'">
-        <button class="btn btn-sm btn-primary" (click)="settlePayment.emit(payment)">
+    <div class="card-footer" *ngIf="payment.nextStates.length">
+        <button
+            class="btn btn-sm btn-primary"
+            *ngIf="payment.nextStates.includes('Settled')"
+            (click)="settlePayment.emit(payment)"
+        >
             {{ 'order.settle-payment' | translate }}
         </button>
+        <vdr-dropdown>
+            <button class="icon-button" vdrDropdownTrigger>
+                <clr-icon shape="ellipsis-vertical"></clr-icon>
+            </button>
+            <vdr-dropdown-menu vdrPosition="bottom-right">
+                <ng-container *ngFor="let nextState of nextOtherStates()">
+                    <button
+                        type="button"
+                        class="btn"
+                        vdrDropdownItem
+                        (click)="transitionPaymentState.emit({ payment: payment, state: nextState })"
+                    >
+                        <ng-container *ngIf="nextState !== 'Cancelled'; else cancel">
+                            <clr-icon shape="step-forward-2"></clr-icon>
+                            {{
+                                'order.transition-to-state'
+                                    | translate: { state: (nextState | stateI18nToken | translate) }
+                            }}
+                        </ng-container>
+                        <ng-template #cancel>
+                            <clr-icon shape="error-standard" class="is-error"></clr-icon>
+                            {{ 'order.cancel-payment' | translate }}
+                        </ng-template>
+                    </button>
+                </ng-container>
+            </vdr-dropdown-menu>
+        </vdr-dropdown>
     </div>
 </div>

+ 6 - 0
packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.scss

@@ -9,3 +9,9 @@
     margin-right: 6px;
     color: var(--color-grey-400);
 }
+
+.card-footer {
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+}

+ 8 - 0
packages/admin-ui/src/lib/order/src/components/order-payment-card/order-payment-card.component.ts

@@ -12,9 +12,17 @@ export class OrderPaymentCardComponent {
     @Input() payment: OrderDetail.Payments;
     @Input() currencyCode: CurrencyCode;
     @Output() settlePayment = new EventEmitter<OrderDetail.Payments>();
+    @Output() transitionPaymentState = new EventEmitter<{ payment: OrderDetail.Payments; state: string }>();
     @Output() settleRefund = new EventEmitter<OrderDetail.Refunds>();
 
     refundHasMetadata(refund?: OrderDetail.Refunds): boolean {
         return !!refund && Object.keys(refund).length < 0;
     }
+
+    nextOtherStates(): string[] {
+        if (!this.payment) {
+            return [];
+        }
+        return this.payment.nextStates.filter(s => s !== 'Settled');
+    }
 }

+ 1 - 1
packages/admin-ui/src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.html

@@ -12,6 +12,6 @@
         {{ 'common.cancel' | translate }}
     </button>
     <button type="submit" (click)="select()" class="btn btn-primary" [disabled]="!selectedState">
-        {{ 'order.transition-to-state' | translate: { state: selectedState } }}
+        {{ 'order.transition-to-state' | translate: { state: (selectedState | stateI18nToken | translate) } }}
     </button>
 </ng-template>

+ 1 - 0
packages/admin-ui/src/lib/order/src/components/payment-state-label/payment-state-label.component.ts

@@ -16,6 +16,7 @@ export class PaymentStateLabelComponent {
             case 'Settled':
                 return 'success';
             case 'Declined':
+            case 'Cancelled':
                 return 'error';
         }
     }

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/cs.json

@@ -577,11 +577,13 @@
     "added-items": "Přidat položky",
     "amount": "Částka",
     "apply-filters": "Filtrovat",
+    "arrange-additional-payment": "",
     "billing-address": "Fakturační adresa",
     "cancel": "Zrušit",
     "cancel-fulfillment": "Zrušit zpracování",
     "cancel-modification": "Zrušit úpravy",
     "cancel-order": "Zrušit objednávku",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "Požadavek zákazníka",
     "cancel-reason-not-available": "Neuveden",
     "cancel-selected-items": "Zrušit vybrané položky",
@@ -699,6 +701,7 @@
     "tracking-code": "Kód sledování zásilky",
     "transaction-id": "ID transakce",
     "transition-to-state": "Změna stavu na { state }",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "Stav úspěšně změněn na { state }",
     "unable-to-transition-to-state-try-another": "Objednávka nemohla být přesunuta do stavu \"{state}\". Prosím, vyberte jiný stav.",
     "unfulfilled": "Nevyřízeno",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/de.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "Betrag",
     "apply-filters": "",
+    "arrange-additional-payment": "",
     "billing-address": "",
     "cancel": "Abbrechen",
     "cancel-fulfillment": "",
     "cancel-modification": "",
     "cancel-order": "Bestellung stornieren",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "Kundenanfrage",
     "cancel-reason-not-available": "Nicht verfügbar",
     "cancel-selected-items": "Auswahl aufheben",
@@ -699,6 +701,7 @@
     "tracking-code": "Sendungsverfolgungscode",
     "transaction-id": "Transaktions-ID",
     "transition-to-state": "",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "Nicht ausgeführt",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/en.json

@@ -577,11 +577,13 @@
     "added-items": "Added items",
     "amount": "Amount",
     "apply-filters": "Apply filters",
+    "arrange-additional-payment": "Arrange additional payment",
     "billing-address": "Billing address",
     "cancel": "Cancel",
     "cancel-fulfillment": "Cancel fulfillment",
     "cancel-modification": "Cancel modification",
     "cancel-order": "Cancel order",
+    "cancel-payment": "Cancel payment",
     "cancel-reason-customer-request": "Customer request",
     "cancel-reason-not-available": "Not available",
     "cancel-selected-items": "Cancel selected items",
@@ -699,6 +701,7 @@
     "tracking-code": "Tracking code",
     "transaction-id": "Transaction ID",
     "transition-to-state": "Transition to { state } state",
+    "transitioned-payment-to-state-success": "Successfully transitioned payment to { state }",
     "transitioned-to-state-success": "Successfully transitioned to { state }",
     "unable-to-transition-to-state-try-another": "The order could not be transitioned back to the \"{state}\" state. Please select an alternative state.",
     "unfulfilled": "Unfulfilled",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/es.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "Precio",
     "apply-filters": "",
+    "arrange-additional-payment": "",
     "billing-address": "",
     "cancel": "",
     "cancel-fulfillment": "",
     "cancel-modification": "",
     "cancel-order": "",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "",
     "cancel-reason-not-available": "",
     "cancel-selected-items": "",
@@ -699,6 +701,7 @@
     "tracking-code": "",
     "transaction-id": "ID de transacción",
     "transition-to-state": "",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/fr.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "Quantité",
     "apply-filters": "Applique les filtres",
+    "arrange-additional-payment": "",
     "billing-address": "Adresse de facturation",
     "cancel": "Annuler",
     "cancel-fulfillment": "Annuler préparation",
     "cancel-modification": "",
     "cancel-order": "Annuler la commande",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "Demande du client",
     "cancel-reason-not-available": "Pas disponible",
     "cancel-selected-items": "Annuler les articles selectionnés",
@@ -699,6 +701,7 @@
     "tracking-code": "Numéro de suivi",
     "transaction-id": "Numéro de transaction",
     "transition-to-state": "Passage à l'état: { state }",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "Passage à l'état { state } avec succés",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "Non préparé",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/pl.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "Ilość",
     "apply-filters": "",
+    "arrange-additional-payment": "",
     "billing-address": "",
     "cancel": "Anuluj",
     "cancel-fulfillment": "",
     "cancel-modification": "",
     "cancel-order": "Anuluj zamówienie",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "Prośba klienta",
     "cancel-reason-not-available": "Niedostępny",
     "cancel-selected-items": "Anuluj zaznaczone",
@@ -699,6 +701,7 @@
     "tracking-code": "Numer przesyłki",
     "transaction-id": "Numer transakcji",
     "transition-to-state": "",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "Unfulfilled",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/pt_BR.json

@@ -577,11 +577,13 @@
     "added-items": "Itens adicionados",
     "amount": "Total",
     "apply-filters": "Aplicar filtros",
+    "arrange-additional-payment": "",
     "billing-address": "Endereço de cobrança",
     "cancel": "Cancelar",
     "cancel-fulfillment": "Cancelar cumprimento",
     "cancel-modification": "Cancelar modificação",
     "cancel-order": "Cancelar Pedido",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "Pedido do cliente",
     "cancel-reason-not-available": "Não disponível",
     "cancel-selected-items": "Cancelar itens selecionados",
@@ -699,6 +701,7 @@
     "tracking-code": "Código de rastreio",
     "transaction-id": "Código ID da transação",
     "transition-to-state": "Mudança para o estado { state }",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "Mudança para o estado { state } realizada com sucesso",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "Não realizado",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/zh_Hans.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "金额",
     "apply-filters": "",
+    "arrange-additional-payment": "",
     "billing-address": "",
     "cancel": "取消",
     "cancel-fulfillment": "",
     "cancel-modification": "",
     "cancel-order": "取消订单",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "客户要求",
     "cancel-reason-not-available": "产品无库存",
     "cancel-selected-items": "取消已选",
@@ -699,6 +701,7 @@
     "tracking-code": "物流码",
     "transaction-id": "交易ID",
     "transition-to-state": "",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "未配货",

+ 3 - 0
packages/admin-ui/src/lib/static/i18n-messages/zh_Hant.json

@@ -577,11 +577,13 @@
     "added-items": "",
     "amount": "金額",
     "apply-filters": "",
+    "arrange-additional-payment": "",
     "billing-address": "",
     "cancel": "取消",
     "cancel-fulfillment": "",
     "cancel-modification": "",
     "cancel-order": "取消訂單",
+    "cancel-payment": "",
     "cancel-reason-customer-request": "客户要求",
     "cancel-reason-not-available": "產品無庫存",
     "cancel-selected-items": "取消已選",
@@ -699,6 +701,7 @@
     "tracking-code": "物流碼",
     "transaction-id": "交易編號",
     "transition-to-state": "",
+    "transitioned-payment-to-state-success": "",
     "transitioned-to-state-success": "",
     "unable-to-transition-to-state-try-another": "",
     "unfulfilled": "未配貨",