private MainTransaction CreateCashTransactionEntity(MainTransaction cashTransaction, TransactionModel model)
 {
     cashTransaction.order_id = model.order_id;
     cashTransaction.original_price = model.original_price;
     cashTransaction.discount_percentage = model.discount_percentage;
     cashTransaction.original_currency = ConstantValues.S_CURRENCY_SGD;
     cashTransaction.currency = ConstantValues.S_CURRENCY_SGD;
     cashTransaction.gst = ConstantValues.D_GST;
     cashTransaction.service_charge = ConstantValues.D_SERVICE_CHARGE;
     cashTransaction.amount = model.cash_amount;
     cashTransaction.description = ConstantValues.S_TRANSACTION_TYPE_FOOD;
     cashTransaction.food_status = (int)GoEat.Models.TransactionStatus.Pending_reconcile;
     return cashTransaction;
 }
        private object CreatePendingTokenTransaction(int mainTransactionId, TransactionModel model)
        {
            GoEatApi goEatApi = GoEatApi.Instance;

            var trans = goEatApi.GetMainTransaction(mainTransactionId);

            MainTransaction updatedTrans = CreateTokenTransactionEntity(trans.Data, model);

            goEatApi.UpdateTokenTransaction(updatedTrans);

            bool isSuccess = false;

            if (mainTransactionId > 0)
            {

                TransactionInformation transaction = new TransactionInformation
                {
                    quantity = updatedTrans.drinks,
                    main_transaction_id = mainTransactionId,
                    amount = updatedTrans.token_amount
                };
                NotifyFinalAmountToUser(model.customer_id, transaction);
                isSuccess = true;
            }
            return new
            {
                success = isSuccess,
                mainTransactionId = mainTransactionId,
                error_code = isSuccess ? string.Empty : ErrorCodes.ServerError.ToErrorMessage()
            };
        }
 private MainTransaction CreateTokenTransactionEntity(MainTransaction tokenTransaction, TransactionModel model)
 {
     // tokenTransaction.currency = ConstantValues.S_CURRENCY_SGD;
     // tokenTransaction.gst = ConstantValues.D_GST;
     // tokenTransaction.service_charge = ConstantValues.D_SERVICE_CHARGE;
     tokenTransaction.order_id = model.order_id;
     tokenTransaction.description = ConstantValues.S_TRANSACTION_TYPE_DRINK;
     tokenTransaction.drink_status = (int)GoEat.Models.TransactionStatus.Pending;
     tokenTransaction.drinks = model.drinks_quantity;
     tokenTransaction.token_amount = model.drinks_quantity * ConstantValues.D_TRANSACTION_DRINK_PRICE;
     return tokenTransaction;
 }
        private object CreatePendingTransaction(TransactionModel model,
            decimal finalAmount, decimal discountRate)
        {
            GoEatApi goEatApi = GoEatApi.Instance;
            var user = goEatApi.GetUserById(model.customer_id);
            int mainTransactionId = mainTransactionId = goEatApi.CreatePendingTransaction(CurrentUser.Id, model.restaurant_id, model.customer_id);
            bool isSuccess = false;

            if (mainTransactionId > 0)
            {
                model.order_id = String.Format(ConstantValues.S_TRANSACTION_ORDER_ID_FORMAT,
                    Urls.GetRestaurantId(), mainTransactionId);
                var trans = goEatApi.GetMainTransaction(mainTransactionId);
                trans.Data.order_id = model.order_id;
                if (model.cash_amount > 0)
                {
                    MainTransaction updatedTrans = CreateCashTransactionEntity(trans.Data, model);

                    goEatApi.UpdateCashTransaction(updatedTrans);

                    string gTokenTransactionId = CreateGTokenTransaction(discountRate, model.order_id + "_Food",
                        model.original_price, user.Data.username,
                        ConstantValues.S_DESCRIPTION_AMOUNT_WITH_CASH, ConstantValues.D_GST,
                        ConstantValues.D_SERVICE_CHARGE);

                    if (string.IsNullOrEmpty(gTokenTransactionId))
                    {
                        goEatApi.UpdateMainTransactionStatus(true, mainTransactionId, (int)GoEat.Models.TransactionStatus.Failure);

                        return new
                        {
                            success = isSuccess,
                            error_code = ErrorCodes.ServerError.ToString()
                        };
                    }

                    goEatApi.UpdateTransGTokenTransactionId(false, mainTransactionId, gTokenTransactionId);
                }
                if (model.drinks_quantity > 0)
                {
                    return CreatePendingTokenTransaction(mainTransactionId, model);
                }

                isSuccess = true;
            }
            return new
            {
                success = isSuccess,
                mainTransactionId = mainTransactionId,
                error_code = isSuccess ? string.Empty : ErrorCodes.ServerError.ToErrorMessage()
            };
        }