1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-19 13:54:25 +01:00

(feat) add payment status to order

This commit is contained in:
Du Peng 2022-09-13 18:43:37 +02:00
parent b542cbab11
commit 522b559ced
8 changed files with 45 additions and 45 deletions

View File

@ -5,6 +5,7 @@ import FormatLib from '../../lib/format';
import { FabButton } from '../base/fab-button';
import { User } from '../../models/user';
import { FabStateLabel } from '../base/fab-state-label';
import OrderLib from '../../lib/order';
interface OrderItemProps {
order?: Order,
@ -32,28 +33,12 @@ export const OrderItem: React.FC<OrderItemProps> = ({ order, currentUser }) => {
return (currentUser?.role === 'admin' || currentUser?.role === 'manager');
};
/**
* Returns a className according to the status
*/
const statusColor = (status: string) => {
switch (status) {
case 'error':
return 'error';
case 'canceled':
return 'canceled';
case 'in_progress':
return 'pending';
default:
return 'normal';
}
};
return (
<div className='order-item'>
<p className="ref">{order.reference}</p>
<div>
<FabStateLabel status={statusColor(order.state)} background>
{t(`app.shared.store.order_item.state.${order.state}`)}
<FabStateLabel status={OrderLib.statusColor(order)} background>
{t(`app.shared.store.order_item.state.${OrderLib.statusText(order)}`)}
</FabStateLabel>
</div>
{isPrivileged() &&

View File

@ -84,22 +84,6 @@ export const ShowOrder: React.FC<ShowOrderProps> = ({ orderId, currentUser, onEr
})
};
/**
* Returns a className according to the status
*/
const statusColor = (status: string) => {
switch (status) {
case 'error':
return 'error';
case 'canceled':
return 'canceled';
case 'in_progress':
return 'pending';
default:
return 'normal';
}
};
/**
* Returns order's payment info
*/
@ -174,8 +158,8 @@ export const ShowOrder: React.FC<ShowOrderProps> = ({ orderId, currentUser, onEr
<span>{t('app.shared.store.show_order.last_update')}</span>
<p>{FormatLib.date(order.updated_at)}</p>
</div>
<FabStateLabel status={statusColor(order.state)} background>
{t(`app.shared.store.show_order.state.${order.state}`)}
<FabStateLabel status={OrderLib.statusColor(order)} background>
{t(`app.shared.store.show_order.state.${OrderLib.statusText(order)}`)}
</FabStateLabel>
</div>
</div>

View File

@ -47,4 +47,33 @@ export default class OrderLib {
static paidTotal = (order: Order): number => {
return computePriceWithCoupon(order.total, order.coupon);
};
/**
* Returns a className according to the status
*/
static statusColor = (order: Order) => {
switch (order.state) {
case 'payment':
if (order.payment_state === 'failed') {
return 'error';
}
return 'normal';
case 'canceled':
return 'canceled';
case 'in_progress':
return 'pending';
default:
return 'normal';
}
};
/**
* Returns a status text according to the status
*/
static statusText = (order: Order) => {
if (order.state === 'payment') {
return `payment_${order.payment_state}`;
}
return order.state;
};
}

View File

@ -9,7 +9,7 @@ class Order < PaymentDocument
has_many :order_items, dependent: :destroy
has_one :payment_gateway_object, as: :item
ALL_STATES = %w[cart in_progress ready canceled return].freeze
ALL_STATES = %w[cart payment in_progress ready canceled return].freeze
enum state: ALL_STATES.zip(ALL_STATES).to_h
PAYMENT_STATES = %w[paid failed refunded].freeze

View File

@ -27,7 +27,7 @@ module Payments::PaymentConcern
else
payment_method
end
order.state = 'in_progress'
order.state = 'payment'
order.payment_state = 'paid'
if payment_id && payment_type
order.payment_gateway_object = PaymentGatewayObject.new(gateway_object_id: payment_id, gateway_object_type: payment_type)

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true
json.extract! order, :id, :token, :statistic_profile_id, :operator_profile_id, :reference, :state, :created_at, :updated_at, :invoice_id,
:payment_method
:payment_method, :payment_state
json.total order.total / 100.0 if order.total.present?
json.payment_date order.invoice.created_at if order.invoice_id.present?
json.wallet_amount order.wallet_amount / 100.0 if order.wallet_amount.present?

View File

@ -5,7 +5,7 @@ json.total_pages @result[:total_pages]
json.page_size @result[:page_size]
json.total_count @result[:total_count]
json.data @result[:data] do |order|
json.extract! order, :id, :statistic_profile_id, :reference, :state, :created_at
json.extract! order, :id, :statistic_profile_id, :reference, :state, :created_at, :payment_state, :updated_at
json.total order.total / 100.0 if order.total.present?
json.paid_total order.paid_total / 100.0 if order.paid_total.present?
if order&.statistic_profile&.user

View File

@ -567,6 +567,11 @@ en:
state:
cart: 'Cart'
in_progress: 'In progress'
payment_paid: "Paid"
payment_failed: "Payment error"
canceled: "Canceled"
ready: "Ready"
refunded: "Refunded"
show_order:
back_to_list: "Back to list"
see_invoice: "See invoice"
@ -587,13 +592,10 @@ en:
state:
cart: 'Cart'
in_progress: 'In progress'
error: "Payment error"
payment_paid: "Paid"
payment_failed: "Payment error"
canceled: "Canceled"
pending: "Pending payment"
under_preparation: "Under preparation"
paid: "Paid"
ready: "Ready"
collected: "Collected"
refunded: "Refunded"
payment:
by_wallet: "by wallet"