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:
parent
b542cbab11
commit
522b559ced
@ -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() &&
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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?
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user