Commit d967b2ef by NitefullWind

1. 完善退款功能。

parent 3ad0cb12
......@@ -55,6 +55,7 @@ bool DBOP::CreateTable(const QString &tableName)
"[fm_open_id] VARCHAR(50), "
"[products] TEXT,"
"[settled] BOOL DEFAULT 0,"
"[refunded] BOOL DEFAULT 0,"
"[storeInfoDBID] INTEGER DEFAULT 0"
");";
QString tablePaySql = "CREATE TABLE [Pay]("
......
......@@ -131,3 +131,13 @@ void Order::setStoreInfoDBID(int storeInfoDBID)
{
_storeInfoDBID = storeInfoDBID;
}
bool Order::refunded() const
{
return _refunded;
}
void Order::setRefunded(bool refunded)
{
_refunded = refunded;
}
......@@ -25,6 +25,7 @@ namespace FMItem {
Q_PROPERTY(QString fm_open_id READ fmOpenId WRITE setFmOpenId)
Q_PROPERTY(QString products READ productText WRITE setProductText)
Q_PROPERTY(bool settled READ settled WRITE setSettled)
Q_PROPERTY(bool refunded READ refunded WRITE setRefunded)
Q_PROPERTY(int storeInfoDBID READ storeInfoDBID WRITE setStoreInfoDBID)
// Q_PROPERTY(ItemList payList READ payList WRITE setPayList)
// Q_PROPERTY(ProductList productList READ productList WRITE setProductList)
......@@ -64,6 +65,9 @@ namespace FMItem {
int storeInfoDBID() const;
void setStoreInfoDBID(int storeInfoDBID);
bool refunded() const;
void setRefunded(bool refunded);
private:
QString _orderId;
QString _fmOrderId;
......@@ -76,6 +80,7 @@ namespace FMItem {
QString _productText;
bool _settled;
bool _refunded;
int _storeInfoDBID;
......
......@@ -27,16 +27,21 @@ TaskFinal::~TaskFinal()
void TaskFinal::packagePOSReq()
{
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
DBOP::GetOrderByOrderId(orderId, _order);
FMItem::StoreInfo storeInfo;
bool isOk = DBOP::GetLastItem(&storeInfo);
if(isOk) {
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
_order->setStoreInfoDBID(storeInfo.DBID());
} else {
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行结算.");
FMP_WARN() << info;
setError(FM_API_ERROR, info);
return;
}
QString orderId = getPosJsonValue(PosProps.OrderId).toString();
DBOP::GetOrderByOrderId(orderId, _order);
if(_order->isNew()) {
_order->SetPropertiesByJson(posReqJsonObj);
DBOP::Save(_order);
......
......@@ -13,7 +13,13 @@ TaskFund::TaskFund(QJsonObject &jsonObj, QObject *parent)
void TaskFund::packagePOSReq()
{
FMItem::StoreInfo storeInfo;
DBOP::GetLastItem(&storeInfo);
bool isOk = DBOP::GetLastItem(&storeInfo);
if(!isOk) {
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行充值.");
FMP_WARN() << info;
setError(FM_API_ERROR, info);
return;
}
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
......
......@@ -28,7 +28,13 @@ TaskPay::~TaskPay()
void TaskPay::packagePOSReq()
{
FMItem::StoreInfo storeInfo;
DBOP::GetLastItem(&storeInfo);
bool isOk = DBOP::GetLastItem(&storeInfo);
if(!isOk) {
QString info = QString::fromLocal8Bit("未设置门店信息,不能再进行支付.");
FMP_WARN() << info;
setError(FM_API_ERROR, info);
return;
}
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
// 检查订单是否已结算
......
#include "taskrefund.h"
#include "taskrefund.h"
#include "fmviprefund.h"
#include "database/dbop.h"
#include "items/item.h"
......@@ -31,6 +31,11 @@ void TaskRefund::packagePOSReq()
bool isOk = DBOP::GetLastItem(&storeInfo);
if(isOk) {
posReqJsonObj = storeInfo.toJson(QStringList(), posReqJsonObj);
} else {
QString info = QString::fromLocal8Bit("未设置门店信息,不能进行退款.");
FMP_WARN() << info;
setError(FM_API_ERROR, info);
return;
}
}
......@@ -77,6 +82,7 @@ void TaskRefund::onRefundPay(int DBID)
}
qobject_cast<FMVipRefund*>(_window)->refresh();
qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true);
} else {
QString msg = searchJsonValue(rspObj, PosProps.Msg).toString();
FMMsgWnd::FailureWnd(msg, _window);
......@@ -93,9 +99,10 @@ void TaskRefund::onRefundOrder(int DBID)
QJsonObject rspObj = QJsonDocument::fromJson(rspData).object();
if(rspObj[PosProps.StatusCode].toInt() == FM_API_SUCCESS) {
orderPointer->setPaidAmount(0);
orderPointer->setRefunded(true);
DBOP::Save(orderPointer.data());
qobject_cast<FMVipRefund*>(_window)->refresh();
qobject_cast<FMVipRefund*>(_window)->setIsRefundSuccess(true);
_refundAmount = orderPointer->paidAmount();
} else {
......
......@@ -13,7 +13,8 @@
FMVipRefund::FMVipRefund(QDialog *parent) :
FMVipWnd(parent),
ui(new Ui::FMVipRefund),
order(new FMItem::Order(this))
order(new FMItem::Order(this)) ,
_isRefundSuccess(false)
{
ui->setupUi(this);
}
......@@ -52,10 +53,15 @@ bool FMVipRefund::initWnd(Session *session)
.arg(order->orderAmount()/100.0).arg(order->paidAmount()/100.0)
.arg(storeInfo.businessDate()).arg(storeInfo.operatorId())
.arg(storeInfo.storeId()).arg(storeInfo.posId());
if(order->settled()) {
if(order->refunded()) {
orderInfo += QString::fromLocal8Bit("订单已退款\n");
ui->btn_refund_order->setEnabled(false);
} else if (order->settled()) {
orderInfo += QString::fromLocal8Bit("订单已结算,可以退整单\n");
ui->btn_refund_order->setEnabled(true);
} else {
orderInfo += QString::fromLocal8Bit("订单还未结算,可以选择退某笔支付\n");
ui->btn_refund_order->setEnabled(false);
}
ui->textEdit_order->setText(orderInfo);
......@@ -87,8 +93,9 @@ bool FMVipRefund::initWnd(Session *session)
btn->setProperty("DBID", payPointer->DBID());
connect(btn, &QPushButton::clicked, this, &FMVipRefund::onBtnRefundClicked);
ui->tableWidget_pays->setCellWidget(row, col, btn);
btn->setCursor(QCursor(Qt::PointingHandCursor));
if(payPointer->payAmount() <= payPointer->refundAmount()) {
if((payPointer->payAmount() <= payPointer->refundAmount()) || order->settled() || order->refunded()) {
btn->setEnabled(false);
}
}
......@@ -119,3 +126,22 @@ void FMVipRefund::on_btn_refund_order_clicked()
{
emit refundOrder(order->DBID());
}
void FMVipRefund::on_close_btn_clicked()
{
if(_isRefundSuccess) {
this->accept();
} else {
this->reject();
}
}
bool FMVipRefund::isRefundSuccess() const
{
return _isRefundSuccess;
}
void FMVipRefund::setIsRefundSuccess(bool isRefundSuccess)
{
_isRefundSuccess = isRefundSuccess;
}
......@@ -25,6 +25,9 @@ public:
void refresh();
bool isRefundSuccess() const;
void setIsRefundSuccess(bool isRefundSuccess);
signals:
void refundPay(int);
void refundOrder(int);
......@@ -34,11 +37,15 @@ private slots:
void on_btn_refund_order_clicked();
void on_close_btn_clicked();
private:
Ui::FMVipRefund *ui;
FMItem::Order *order;
QList<QSharedPointer<FMItem::Pay> > pays;
bool _isRefundSuccess;
};
#endif // FMVIPREFUND_H
......@@ -211,6 +211,9 @@
</item>
<item>
<widget class="QPushButton" name="btn_refund_order">
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string>退整单</string>
</property>
......
......@@ -156,7 +156,7 @@ void TestItem::test_PropertyNames_data()
QTest::newRow("Item") << gItem << itemPNames.length() << itemPNames;
orderPNames << "objectName" << "DBID" <<"order_id" << "fm_order_id" << "order_amount" << "paid_amount" << "undis_amount"
<< "fm_open_id" << "products" << "settled" << "storeInfoDBID";
<< "fm_open_id" << "products" << "settled" << "refunded" << "storeInfoDBID";
QTest::newRow("Order") << qobject_cast<Item*>(gOrder) << orderPNames.length() << orderPNames;
payPNames << "objectName" << "DBID" <<"pay_id" << "pay_str" << "pay_amount" << "refund_amount" << "dis_amount" << "account" << "trans_id" << "fm_trans_id" << "orderDBID";
......
......@@ -47,7 +47,7 @@ void TestPlugin::test_dotask_data()
{
QTest::addColumn<QByteArray>("reqData");
QTest::newRow("Refund") << QByteArray("{\"fm_cmd\": 1004,\"order_id\": \"20171018001\"}");
QTest::newRow("Refund") << QByteArray("{\"fm_cmd\": 1004,\"order_id\": \"20171018003\"}");
QTest::newRow("Refund not") << QByteArray("{\"fm_cmd\": 1004,\"order_id\": \"12345\"}");
QTest::newRow("SetStoreInfo") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"99999\",\"pos_id\": \"1\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
QTest::newRow("SetStoreInfo_need_posId") << QByteArray("{\"fm_cmd\": 1000,\"store_id\": \"fm9999\",\"pos_id\": \"\",\"business_date\": \"20171016\",\"operator_id\": \"001\"}");
......@@ -56,27 +56,27 @@ void TestPlugin::test_dotask_data()
QTest::newRow("Login") << QByteArray("{\"fm_cmd\": 1001}");
QTest::newRow("Pay") << QByteArray("{"
" \"fm_cmd\": 1003,"
" \"order_amount\":9000,"
" \"trans_amount\": 8000,"
" \"undis_amount\": 8000,"
" \"order_id\": \"20171018001\","
" \"order_amount\":900,"
" \"trans_amount\": 800,"
" \"undis_amount\": 800,"
" \"order_id\": \"20171018003\","
" \"trans_id\": \"100001\","
" \"products\": ["
" {"
" \"pid\": \"0079020\","
" \"name\": \"测试商品1\","
" \"price\": 1000,"
" \"price\": 100,"
" \"consume_num\": 1"
" },"
" { "
" \"pid\": \"0077842\","
" \"name\": \"测试商品2\","
" \"price\": 8000,"
" \"price\": 800,"
" \"consume_num\": 2"
" }"
" ]"
"}");
QTest::newRow("Order") << QByteArray("{\"fm_cmd\": 1007,\"order_id\": \"20171018001\"}");
QTest::newRow("Order") << QByteArray("{\"fm_cmd\": 1007,\"order_id\": \"20171018003\"}");
QTest::newRow("Fund") << QByteArray("{\"fm_cmd\": 1002,\"order_id\": \"20171018001\"}");
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment