张洋 3 anni fa
parent
commit
03d3ce9b43

+ 8 - 0
bin/Win32/Debug/lewaimai_pos_windows/skin/biaoqian_printer_setting_fenlei_select.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Window> 
+	<HorizontalLayout height="30">
+		<CheckBox name="biaoqian_setting_fenleli_xuanze_checkbox" padding="0,7,0,7" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+		<Label name="biaoqian_setting_fenleli_xuanze_name" text="" width="300" padding="10,0,0,0"/>
+	</HorizontalLayout>
+</Window>

+ 14 - 0
bin/Win32/Debug/lewaimai_pos_windows/skin/setting.xml

@@ -170,6 +170,20 @@
 							<ListLabelElement text="反方向" />
 						</Combo>
 					</HorizontalLayout>
+					
+					<Control height="1" bkcolor="#FFEAEAEA" padding="0,20,0,0"></Control>
+	
+					<HorizontalLayout height="44">
+						<Label text="指定商品分类打印标签" width="260" />
+						<CheckBox name="setting_biaoqian_printer_is_type" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+					</HorizontalLayout>
+					
+					<HorizontalLayout height="500">
+						<Label text="当前绑定分类:" width="260"  height="44"/>
+						<VerticalLayout name="setting_biaoqian_printer_type_layout" padding="0,15,0,0">
+						
+						</VerticalLayout>
+					</HorizontalLayout>
 				</VerticalLayout>
 
 				<VerticalLayout bkcolor="#FFFFFFFF" padding="0,20,20,20" inset="15,15,15,15">

BIN
bin/Win32/Release/lewaimai_pos_windows/db/pos.db


File diff suppressed because it is too large
+ 236 - 0
bin/Win32/Release/lewaimai_pos_windows/log/pos.log


BIN
bin/Win32/Release/lewaimai_pos_windows/skin/skin.lwm


+ 16 - 0
lewaimai_pos_windows/helper/CLewaimaiString.cpp

@@ -423,6 +423,22 @@ vector<string> CLewaimaiString::Split(const string& in, const string& delim)
     return ret;
 }
 
+string CLewaimaiString::Merge(const vector<string>& in, const string& delim)
+{
+	std::string ret = "";
+
+	for (size_t i = 0; i < in.size(); i++)
+	{
+		ret += in[i];
+		if (i < in.size() - 1)
+		{
+			ret += delim;
+		}
+	}
+
+	return ret;
+}
+
 /*
  *nNum是表示替换几个,默认为1表示替换第1个
  **/

+ 3 - 0
lewaimai_pos_windows/helper/CLewaimaiString.h

@@ -40,5 +40,8 @@ public:
 
 	static vector<string> Split(const string& in, const string& delim);
 
+	//把vector的所有字符串,用分隔符分开,返回一个整的字符串
+	static string Merge(const vector<string>& in, const string& delim);
+
 	static int Replace(std::wstring& strContent, std::wstring strReplace, std::wstring strDest, int nNum = 1);
 };

+ 34 - 3
lewaimai_pos_windows/tool/CPosPrinter.cpp

@@ -1049,10 +1049,38 @@ void CPosPrinter::PrintWaimaiOrderBiaoqian(CWaimaiOrder& order)
 		nDIRECTION = 0;
 	}
 
-	//初始化标签打印机
-	BIAOQIAN_Reset(biaoqian_width, biaoqian_height, nDIRECTION);
+	std::vector<CWaimaiOrderItem> cur_printer_use;
 
-    std::vector<CWaimaiOrderItem> cur_printer_use = order.m_order_items;
+	std::string setting_biaoqian_printer_is_type = CSetting::GetParam("setting_biaoqian_printer_is_type");
+	std::string setting_biaoqian_printer_type_ids = CSetting::GetParam("setting_biaoqian_printer_type_ids");
+
+	if (setting_biaoqian_printer_is_type == "0")
+	{
+		for (std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
+		{
+			//如果当前商品的分类,在标签打印机设置的分类里面,才加入
+			cur_printer_use.push_back(*it);
+		}
+	}
+	else
+	{
+		std::map<string, bool> ids_map;
+		std::vector<string> ids = CLewaimaiString::Split(setting_biaoqian_printer_type_ids, ",");
+
+		for (std::vector<string>::iterator it = ids.begin(); it != ids.end(); it++)
+		{
+			ids_map[(*it)] = true;
+		}
+
+		for (std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
+		{
+			if (ids_map.find((*it).m_type_id) != ids_map.end())
+			{
+				//如果当前商品的分类,在标签打印机设置的分类里面,才加入
+				cur_printer_use.push_back(*it);
+			}
+		}
+	}
 
     //先计算商品的总数量
     int foodNum = 0;
@@ -1078,6 +1106,9 @@ void CPosPrinter::PrintWaimaiOrderBiaoqian(CWaimaiOrder& order)
 
         for(int i = 0; i < nQuantity; i++)
         {
+			//初始化标签打印机
+			BIAOQIAN_Reset(biaoqian_width, biaoqian_height, nDIRECTION);
+
 			std::string textData = "";
 
             curFoodNum++;

+ 14 - 0
lewaimai_pos_windows/tool/CSetting.cpp

@@ -289,6 +289,20 @@ void CSetting::Init()
 		m_paramsMap[setting_biaoqian_printer_fangxiang] = "1";
 	}
 
+	std::string setting_biaoqian_printer_is_type = "setting_biaoqian_printer_is_type";
+	if (m_paramsMap.find(setting_biaoqian_printer_is_type) == m_paramsMap.end())
+	{
+		//1表示按分类打印,0表示不按分类打印
+		m_paramsMap[setting_biaoqian_printer_is_type] = "0";
+	}
+
+	std::string setting_biaoqian_printer_type_ids = "setting_biaoqian_printer_type_ids";
+	if (m_paramsMap.find(setting_biaoqian_printer_type_ids) == m_paramsMap.end())
+	{
+		//1表示按分类打印,0表示不按分类打印
+		m_paramsMap[setting_biaoqian_printer_type_ids] = "";
+	}
+
 	//厨房打印的默认参数
 	std::string setting_is_new_waimai_chufang_printer = "setting_is_new_waimai_chufang_printer";
 	if (m_paramsMap.find(setting_is_new_waimai_chufang_printer) == m_paramsMap.end())

+ 135 - 5
lewaimai_pos_windows/wnd/CMainWnd.cpp

@@ -614,6 +614,67 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
 
         CSetting::SetParam("setting_biaoqian_printer_wangkou_ip", CLewaimaiString::UnicodeToUTF8(ip));
     }
+	else if (name == _T("setting_biaoqian_printer_is_type"))
+	{
+		CCheckBoxUI* box = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("setting_biaoqian_printer_is_type")));
+
+		if (box->IsSelected())
+		{
+			CSetting::SetParam("setting_biaoqian_printer_is_type", "0");
+		}
+		else
+		{
+			CSetting::SetParam("setting_biaoqian_printer_is_type", "1");
+		}
+	}
+	else if (name == L"biaoqian_setting_fenleli_xuanze_checkbox")
+	{
+		std::wstring ws_type_id = msg.pSender->GetCustomAttribute(L"type_id");
+		std::string type_id = CLewaimaiString::UnicodeToUTF8(ws_type_id);
+
+		CCheckBoxUI* box = static_cast<CCheckBoxUI*>(msg.pSender);
+
+		if (box->IsSelected())
+		{
+			//这里是从选中变为不选中,那么就删掉这个type_id
+			std::string type_ids = CSetting::GetParam("setting_biaoqian_printer_type_ids");
+			std::vector<string> type_vector = CLewaimaiString::Split(type_ids, ",");
+
+			int num = 0;
+			for (std::vector<string>::iterator it = type_vector.begin(); it != type_vector.end(); it++)
+			{
+				if (*it == type_id)
+				{
+					break;
+				}
+
+				num++;
+			}
+
+			type_vector.erase(type_vector.begin() + num);
+
+			std::string new_type_ids = CLewaimaiString::Merge(type_vector, ",");
+
+			CSetting::SetParam("setting_biaoqian_printer_type_ids", new_type_ids);
+		}
+		else
+		{
+			//这是从不选中变为选中
+			std::string type_ids = CSetting::GetParam("setting_biaoqian_printer_type_ids");
+
+			std::string new_type_ids;
+			if (type_ids == "")
+			{
+				new_type_ids = type_id;
+			}
+			else
+			{
+				new_type_ids = type_ids + "," + type_id;
+			}
+
+			CSetting::SetParam("setting_biaoqian_printer_type_ids", new_type_ids);
+		}
+	}
     else if(name == _T("setting_is_new_waimai_chufang_printer"))
     {
         CCheckBoxUI* box = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("setting_is_new_waimai_chufang_printer")));
@@ -2095,13 +2156,20 @@ void CMainWnd::InitSettingStatus()
 		com->SetText(L"反方向");
 	}
 
-    //这里开始,初始化厨房打印机的设置
-    CListUI* pPrinterList = static_cast<CListUI*>(m_pm.FindControl(_T("setting_chufang_printer_list")));
+	box = static_cast<CCheckBoxUI*>(m_pm.FindControl(_T("setting_biaoqian_printer_is_type")));
+	if (CSetting::GetParam("setting_biaoqian_printer_is_type") == "1")
+	{
+		box->Selected(true, false);
+	}
+	else
+	{
+		box->Selected(false, false);
+	}
 
-    //获取当前店铺的商品分类信息,用于设置厨房打印机的分类打印
+	//获取当前店铺的商品分类信息,用于设置标签打印机和厨房打印机的分类打印
 
-    //先清空一次分类(主要考虑退出登陆重新登录的情况)
-    CSetting::ClearFoodtype();
+	//先清空一次分类(主要考虑退出登陆重新登录的情况)
+	CSetting::ClearFoodtype();
 
 	std::string shop_id = CLewaimaiHttpClient::getShopIdS();
 	if (shop_id != "0")
@@ -2156,6 +2224,68 @@ void CMainWnd::InitSettingStatus()
 		}
 	}
 
+	std::string type_ids = CSetting::GetParam("setting_biaoqian_printer_type_ids");
+	std::vector<string> type_vector = CLewaimaiString::Split(type_ids, ",");
+
+	//删除已经不存在的type_ids
+	std::string new_foodtype_ids;
+	CSqlite3 sqlite;
+	for (std::vector<string>::iterator it = type_vector.begin(); it != type_vector.end(); it++)
+	{
+		std::string name = CSetting::getFoodtypeName((*it));
+
+		if (name == "zhipuzi_not_found_xxx")
+		{
+			//这种情况是以前保存的分类后来被删掉了
+			continue;
+		}
+		
+		new_foodtype_ids += (*it) + ",";
+	}
+
+	//删掉不存在的type_id,更新内存和数据库
+	new_foodtype_ids = new_foodtype_ids.substr(0, new_foodtype_ids.length() - 1);
+	CSetting::SetParam("setting_biaoqian_printer_type_ids", new_foodtype_ids);
+
+	//重新赋值
+	type_ids = new_foodtype_ids;
+	type_vector = CLewaimaiString::Split(type_ids, ",");
+
+	std::map<string, int> type_map;
+	for (std::vector<string>::iterator it = type_vector.begin(); it != type_vector.end(); it++)
+	{
+		type_map[*it] = 1;
+	}
+
+	//把所有分类显示出来
+	CVerticalLayoutUI* pFenleiLayout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("setting_biaoqian_printer_type_layout")));
+	pFenleiLayout->RemoveAll();
+
+	std::vector<FoodType> foodtypes = CSetting::GetFoodtype();
+	for (std::vector<FoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
+	{
+		CDialogBuilder builder;
+		CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("biaoqian_printer_setting_fenlei_select.xml"), (UINT)0, NULL, &m_pm));
+
+		CCheckBoxUI* pCheck = static_cast<CCheckBoxUI*>(pEle->FindSubControl(_T("biaoqian_setting_fenleli_xuanze_checkbox")));
+		pCheck->AddCustomAttribute(L"type_id", CLewaimaiString::UTF8ToUnicode((*it).type_id).c_str());
+
+		if (type_map.find((*it).type_id) != type_map.end())
+		{
+			pCheck->Selected(true, false);
+		}
+
+		CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("biaoqian_setting_fenleli_xuanze_name")));
+		pName->SetText(CLewaimaiString::UTF8ToUnicode((*it).name).c_str());
+
+		pFenleiLayout->Add(pEle);
+	}
+
+	pFenleiLayout->SetFixedHeight(foodtypes.size() * 30);
+
+    //这里开始,初始化厨房打印机的设置
+    CListUI* pPrinterList = static_cast<CListUI*>(m_pm.FindControl(_T("setting_chufang_printer_list")));
+
     //获取厨房打印机的集合
     std::vector<ChufangPrinter> printers = CSetting::getChufangPrints();