Forráskód Böngészése

在做退菜,套餐退菜还有点问题

zhangyang 3 éve
szülő
commit
7ce9f86cfc

+ 152 - 1
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp

@@ -901,6 +901,14 @@ void CZhengcanDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		this->ClickZhengdanMemo();
 	}
+	else if (name == L"btn_diandan_chetai")
+	{
+		this->ClickChetai();
+	}
+	else if (name == L"btn_diandan_tuicai")
+	{
+		this->ClickTuicai();
+	}
 	else if (name == L"btn_diandan_xiadan")
 	{
 		//点击更多支付
@@ -1305,8 +1313,22 @@ void CZhengcanDiandanPageUI::UpdateShopcartShow()
 
 			CZhengcanOrderItem item = *it1;
 
+			//保存item_id,后面选中点击退菜的时候有用
+			pEle->AddCustomAttribute(L"item_id", CLewaimaiString::UTF8ToUnicode(item.item_id).c_str());
+
 			CLabelUI * pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
-			pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
+			if (item.is_tuicai == "1")
+			{
+				pName->SetText((L"【退菜】" + CLewaimaiString::UTF8ToUnicode(item.getNameShow())).c_str());
+
+				pEle->AddCustomAttribute(L"is_tuicai", L"1");
+			}
+			else
+			{
+				pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
+
+				pEle->AddCustomAttribute(L"is_tuicai", L"0");
+			}
 
 			CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
 			pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
@@ -2412,6 +2434,135 @@ void CZhengcanDiandanPageUI::ClickZhengdanMemo()
 	}
 }
 
+void CZhengcanDiandanPageUI::ClickChetai()
+{
+	std::map<string, string> params;
+
+	params["table_id"] = m_table_id;
+
+	std::string response;
+
+	std::string url = "/dinnercash/chetai";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+	if (ret == false)
+	{
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		LOG_INFO("json error!");
+
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		return;
+	}
+
+	if (!document.HasMember("data"))
+	{
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	//如果走到这里说明撤台成功了
+	m_pMainWnd->SwitchPage(CMainWnd::ZHENGCAN);
+}
+
+void CZhengcanDiandanPageUI::ClickTuicai()
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	int nIndex = pList->GetCurSel();
+
+	if (nIndex == -1)
+	{
+		return;
+	}
+
+	CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(pList->GetItemAt(nIndex));
+	std::string item_id = CLewaimaiString::UnicodeToUTF8(pEle->GetCustomAttribute(L"item_id"));
+
+	std::string is_tuicai = CLewaimaiString::UnicodeToUTF8(pEle->GetCustomAttribute(L"is_tuicai"));
+	if (is_tuicai == "1")
+	{
+		//已经是退菜了
+		return;
+	}
+
+	std::map<string, string> params;
+
+	params["order_id"] = m_order_id;
+	
+	std::vector<std::map<string, string>> paramArray;
+
+	std::map<string, string> map_tmp;
+	map_tmp["id"] = item_id;
+	map_tmp["quantity"] = "1";
+
+	paramArray.push_back(map_tmp);
+
+	std::string item_json_string = CLewaimaiJson::ParamArrayToJsonstring(paramArray);
+
+	params["item"] = item_json_string;
+
+	std::string response;
+
+	std::string url = "/dinnercash/retreatfood";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+	if (ret == false)
+	{
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		LOG_INFO("json error!");
+
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		return;
+	}
+
+	if (!document.HasMember("data"))
+	{
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	//如果走到这里说明退菜成功了,这个时候刷新显示
+	this->InitShow();
+}
+
 void CZhengcanDiandanPageUI::ClickXidanBtn()
 {
 	if (m_cur_diandan_order.getItemNum() == 0)

+ 6 - 0
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.h

@@ -104,6 +104,12 @@ public:
 	//点击整单备注之后的逻辑
 	void ClickZhengdanMemo();
 
+	//点击撤台的逻辑
+	void ClickChetai();
+
+	//点击退菜的逻辑
+	void ClickTuicai();
+
 	//点击“下单”按钮之后的逻辑
 	void ClickXidanBtn();
 

+ 33 - 14
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -51,20 +51,6 @@ int CZhengcanOrder::getItemNum()
 	return m_items.size();
 }
 
-std::string CZhengcanOrder::getTotalPriceShow()
-{
-	double total_price_show = 0;
-
-	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
-	{
-		total_price_show += std::stod((*it).show_price);
-	}
-
-	m_total_price_show = CLewaimaiString::DoubleToString(total_price_show, 2);
-
-	return m_total_price_show;
-}
-
 double CZhengcanOrder::getTotalPrice()
 {
 	double total_price_show = 0;
@@ -80,6 +66,12 @@ double CZhengcanOrder::getTotalPrice()
 	{
 		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
+			if (it1->is_tuicai == "1")
+			{
+				//退菜的不算
+				continue;
+			}
+
 			total_price_show += std::stod((*it1).show_price);
 		}
 	}
@@ -271,6 +263,12 @@ bool CZhengcanOrder::UseShangpinquan(std::string shangpinquan_food_id, double& y
 	{
 		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
+			if (it1->is_tuicai == "1")
+			{
+				//退菜的不算
+				continue;
+			}
+
 			CZhengcanOrderItem curItem = *it1;
 
 			if (curItem.m_is_taocan == false && curItem.food_id == shangpinquan_food_id)
@@ -347,6 +345,12 @@ bool CZhengcanOrder::UseCikaDikou(std::string cika_food_id, double& youhui_value
 	{
 		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
+			if (it1->is_tuicai == "1")
+			{
+				//退菜的不算
+				continue;
+			}
+
 			CZhengcanOrderItem curItem = *it1;
 
 			if (curItem.m_is_taocan == false && curItem.food_id == cika_food_id)
@@ -412,6 +416,12 @@ double CZhengcanOrder::getTotalMemberYouhui(std::string member_level)
 	{
 		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
+			if (it1->is_tuicai == "1")
+			{
+				//退菜的不算
+				continue;
+			}
+
 			CZhengcanOrderItem curItem = *it1;
 
 			double item_youhui = curItem.getMemberYouhui(member_level);
@@ -442,6 +452,12 @@ double CZhengcanOrder::getDabaoMoney()
 	{
 		for (std::vector<CZhengcanOrderItem>::iterator it1 = it->m_items.begin(); it1 != it->m_items.end(); it1++)
 		{
+			if (it1->is_tuicai == "1")
+			{
+				//退菜的不算
+				continue;
+			}
+
 			CZhengcanOrderItem curItem = *it1;
 
 			double item_dabao = curItem.getDabaoMoney();
@@ -620,6 +636,7 @@ bool CZhengcanOrder::InitData(std::string order_id)
 			CZhengcanOrderItem newItem;
 			newItem.m_is_history_item = true;
 
+			newItem.item_id = CLewaimaiJson::ToString(foodinfo["id"]);
 			newItem.food_id = CLewaimaiJson::ToString(foodinfo["food_id"]);
 			newItem.food_name = CLewaimaiJson::ToString(foodinfo["food_name"]);
 			newItem.type_id = CLewaimaiJson::ToString(foodinfo["type_id"]);
@@ -708,9 +725,11 @@ bool CZhengcanOrder::InitData(std::string order_id)
 			CZhengcanOrderItem newItem;
 			newItem.m_is_history_item = true;
 
+			newItem.item_id = CLewaimaiJson::ToString(cur_foodpackage["id"]);
 			newItem.num = cur_foodpackage["quantity"].GetString();
 			newItem.price = cur_foodpackage["single_price"].GetString();
 			newItem.foodpackage_id = cur_foodpackage["foodpackage_id"].GetString();
+			newItem.is_tuicai = cur_foodpackage["is_tuicai"].GetString();
 
 			if (CLewaimaiJson::ToString(cur_foodpackage["is_dabao"]) == "1")
 			{

+ 0 - 2
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -130,8 +130,6 @@ public:
 
 	int getItemNum();
 
-	std::string getTotalPriceShow();
-
 	double getTotalPrice();
 
 	CZhengcanOrderItem getDiandanOrderItem(int index);

+ 1 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.h

@@ -15,6 +15,7 @@ class CZhengcanOrderItem
 public:
 	//是否是历史订单记录里面的item
 	bool m_is_history_item = false;
+	std::string item_id; //如果是历史订单里面的item,那么这个对应着item_id
 
 	//是否套餐的Item,因为目前套餐和普通商品都是用同一个Item类
 	bool m_is_taocan = false;