diff --git a/app/controllers/api/cart_controller.rb b/app/controllers/api/cart_controller.rb index 444970b5b..5b59b2914 100644 --- a/app/controllers/api/cart_controller.rb +++ b/app/controllers/api/cart_controller.rb @@ -9,9 +9,7 @@ class API::CartController < API::ApiController def create authorize :cart, :create? - p '-----------------' - p current_user - @order = Order.find_by(token: order_token) + @order = Order.find_by(token: order_token, state: 'cart') if @order.nil? if current_user&.member? @order = Order.where(statistic_profile_id: current_user.statistic_profile.id, diff --git a/app/controllers/concerns/api/order_concern.rb b/app/controllers/concerns/api/order_concern.rb index e1a190868..9e14854dd 100644 --- a/app/controllers/concerns/api/order_concern.rb +++ b/app/controllers/concerns/api/order_concern.rb @@ -9,7 +9,7 @@ module API::OrderConcern end def current_order - @current_order = Order.find_by(token: order_token) + @current_order = Order.find_by(token: order_token, state: 'cart') end def ensure_order diff --git a/app/frontend/src/javascript/components/cart/store-cart.tsx b/app/frontend/src/javascript/components/cart/store-cart.tsx index e17cc3216..13830e035 100644 --- a/app/frontend/src/javascript/components/cart/store-cart.tsx +++ b/app/frontend/src/javascript/components/cart/store-cart.tsx @@ -72,8 +72,8 @@ const StoreCart: React.FC = ({ onError, currentUser }) => { * Open/closes the payment modal */ const handlePaymentSuccess = (data: Order): void => { - console.log(data); setPaymentModal(false); + window.location.href = '/#!/store'; }; /** @@ -118,8 +118,8 @@ const StoreCart: React.FC = ({ onError, currentUser }) => { ))} - {cart && !cartIsEmpty() && } - {cart && !cartIsEmpty() &&

Totale: {FormatLib.price(cart.amount)}

} + {cart && !cartIsEmpty() && } + {cart && !cartIsEmpty() &&

Totale: {FormatLib.price(cart.total)}

} {cart && !cartIsEmpty() && isPrivileged() && } {cart && !cartIsEmpty() && diff --git a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx index 898703471..5eab0f329 100644 --- a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx @@ -114,7 +114,7 @@ export const AbstractPaymentModal: React.FC = ({ isOp if (order && order?.user?.id) { WalletAPI.getByUser(order.user.id).then((wallet) => { setWallet(wallet); - const p = { price: order.amount, price_without_coupon: order.amount }; + const p = { price: order.total, price_without_coupon: order.total }; setPrice(p); setRemainingPrice(new WalletLib(wallet).computeRemainingPrice(p.price)); setReady(true); diff --git a/app/frontend/src/javascript/components/payment/stripe/payment-modal.tsx b/app/frontend/src/javascript/components/payment/stripe/payment-modal.tsx index 05acba844..f21c7c9b7 100644 --- a/app/frontend/src/javascript/components/payment/stripe/payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/payment-modal.tsx @@ -47,7 +47,7 @@ export const PaymentModal: React.FC = ({ isOpen, toggleModal, // refresh the price when the cart changes useEffect(() => { if (order) { - setPrice({ price: order.amount, price_without_coupon: order.amount }); + setPrice({ price: order.total, price_without_coupon: order.total }); } else { PriceAPI.compute(cart).then(price => { setPrice(price); diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx index 007ed388c..3ea6fda3b 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx @@ -48,7 +48,6 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on if (res.payment) { await handleServerConfirmation(res.payment as PaymentConfirmation); } else { - res.order.total = res.order.amount; await handleServerConfirmation(res.order); } } else { @@ -92,7 +91,6 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on try { if (order) { const confirmation = await CheckoutAPI.confirmPayment(order.token, result.paymentIntent.id); - confirmation.order.total = confirmation.order.amount; await handleServerConfirmation(confirmation.order); } else { const confirmation = await StripeAPI.confirmIntent(result.paymentIntent.id, cart); diff --git a/app/frontend/src/javascript/models/order.ts b/app/frontend/src/javascript/models/order.ts index 1f12355a0..c10b7d28d 100644 --- a/app/frontend/src/javascript/models/order.ts +++ b/app/frontend/src/javascript/models/order.ts @@ -11,7 +11,6 @@ export interface Order { operator_id?: number, reference?: string, state?: string, - amount?: number, total?: number, created_at?: TDateISO, order_items_attributes: Array<{ diff --git a/app/services/cart/add_item_service.rb b/app/services/cart/add_item_service.rb index 4f09104c0..298aafbc8 100644 --- a/app/services/cart/add_item_service.rb +++ b/app/services/cart/add_item_service.rb @@ -15,7 +15,7 @@ class Cart::AddItemService else item.quantity += quantity.to_i end - order.amount += (orderable.amount * quantity.to_i) + order.total += (orderable.amount * quantity.to_i) ActiveRecord::Base.transaction do item.save order.save diff --git a/app/services/cart/create_service.rb b/app/services/cart/create_service.rb index 885bc00ec..0a288b380 100644 --- a/app/services/cart/create_service.rb +++ b/app/services/cart/create_service.rb @@ -7,7 +7,7 @@ class Cart::CreateService order_param = { token: token, state: 'cart', - amount: 0 + total: 0 } if user order_param[:statistic_profile_id] = user.statistic_profile.id if user.member? diff --git a/app/services/cart/remove_item_service.rb b/app/services/cart/remove_item_service.rb index 8d7806aa8..cfa43c1ef 100644 --- a/app/services/cart/remove_item_service.rb +++ b/app/services/cart/remove_item_service.rb @@ -7,7 +7,7 @@ class Cart::RemoveItemService raise ActiveRecord::RecordNotFound if item.nil? - order.amount -= (item.amount * item.quantity.to_i) + order.total -= (item.amount * item.quantity.to_i) ActiveRecord::Base.transaction do item.destroy! order.save diff --git a/app/services/cart/set_quantity_service.rb b/app/services/cart/set_quantity_service.rb index 9d0095c34..396716de5 100644 --- a/app/services/cart/set_quantity_service.rb +++ b/app/services/cart/set_quantity_service.rb @@ -12,7 +12,7 @@ class Cart::SetQuantityService raise ActiveRecord::RecordNotFound if item.nil? different_quantity = quantity.to_i - item.quantity - order.amount += (orderable.amount * different_quantity) + order.total += (orderable.amount * different_quantity) ActiveRecord::Base.transaction do item.update(quantity: quantity.to_i) order.save diff --git a/app/services/checkout/payment_service.rb b/app/services/checkout/payment_service.rb index 2f4de1d55..ccd021df0 100644 --- a/app/services/checkout/payment_service.rb +++ b/app/services/checkout/payment_service.rb @@ -8,7 +8,7 @@ class Checkout::PaymentService def payment(order, operator, payment_id = '') raise Cart::OutStockError unless Orders::OrderService.new.in_stock?(order, 'external') - raise Cart::InactiveProductError unless Orders::OrderService.new.all_products_is_active? + raise Cart::InactiveProductError unless Orders::OrderService.new.all_products_is_active?(order) if operator.member? if Stripe::Helper.enabled? diff --git a/app/services/orders/in_stock_service.rb b/app/services/orders/in_stock_service.rb deleted file mode 100644 index 06ad80697..000000000 --- a/app/services/orders/in_stock_service.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# Provides methods for Check if the product is in stock -class Cart::SetQuantityService - def call(order) - - return order if quantity.to_i.zero? - - raise Cart::OutStockError if quantity.to_i > orderable.stock['external'] - - item = order.order_items.find_by(orderable: orderable) - - raise ActiveRecord::RecordNotFound if item.nil? - - different_quantity = quantity.to_i - item.quantity - order.amount += (orderable.amount * different_quantity) - ActiveRecord::Base.transaction do - item.update(quantity: quantity.to_i) - order.save - end - order.reload - end -end diff --git a/app/services/payments/payment_concern.rb b/app/services/payments/payment_concern.rb index dc19ac078..ad60bae5a 100644 --- a/app/services/payments/payment_concern.rb +++ b/app/services/payments/payment_concern.rb @@ -10,7 +10,7 @@ module Payments::PaymentConcern end def debit_amount(order) - total = order.amount + total = order.total wallet_debit = get_wallet_debit(order.statistic_profile.user, total) total - wallet_debit end diff --git a/app/services/wallet_service.rb b/app/services/wallet_service.rb index 105a7a551..3e9bb2011 100644 --- a/app/services/wallet_service.rb +++ b/app/services/wallet_service.rb @@ -75,15 +75,13 @@ class WalletService ## # Compute the amount decreased from the user's wallet, if applicable - # @param payment {Invoice|PaymentSchedule} + # @param payment {Invoice|PaymentSchedule|Order} # @param user {User} the customer # @param coupon {Coupon|String} Coupon object or code ## def self.wallet_amount_debit(payment, user, coupon = nil) total = if payment.is_a? PaymentSchedule payment.payment_schedule_items.first.amount - elsif payment.is_a? Order - payment.amount else payment.total end @@ -95,7 +93,7 @@ class WalletService end ## - # Subtract the amount of the payment document (Invoice|PaymentSchedule) from the customer's wallet + # Subtract the amount of the payment document (Invoice|PaymentSchedule|Order) from the customer's wallet # @param transaction, if false: the wallet is not debited, the transaction is only simulated on the payment document ## def self.debit_user_wallet(payment, user, transaction: true) diff --git a/app/views/api/orders/_order.json.jbuilder b/app/views/api/orders/_order.json.jbuilder index 4118ce54c..9614f9987 100644 --- a/app/views/api/orders/_order.json.jbuilder +++ b/app/views/api/orders/_order.json.jbuilder @@ -1,7 +1,7 @@ # frozen_string_literal: true json.extract! order, :id, :token, :statistic_profile_id, :operator_id, :reference, :state, :created_at -json.amount order.amount / 100.0 if order.amount.present? +json.total order.total / 100.0 if order.total.present? if order&.statistic_profile&.user json.user do json.id order.statistic_profile.user.id diff --git a/db/migrate/20220826074619_rename_amount_to_total_in_order.rb b/db/migrate/20220826074619_rename_amount_to_total_in_order.rb new file mode 100644 index 000000000..bf583b032 --- /dev/null +++ b/db/migrate/20220826074619_rename_amount_to_total_in_order.rb @@ -0,0 +1,5 @@ +class RenameAmountToTotalInOrder < ActiveRecord::Migration[5.2] + def change + rename_column :orders, :amount, :total + end +end diff --git a/db/schema.rb b/db/schema.rb index 1b30b963c..8c2aef3e3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_08_22_081222) do +ActiveRecord::Schema.define(version: 2022_08_26_074619) do # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" @@ -464,7 +464,7 @@ ActiveRecord::Schema.define(version: 2022_08_22_081222) do t.string "token" t.string "reference" t.string "state" - t.integer "amount" + t.integer "total" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "payment_state"