CDiandanPageUI.cpp 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175
  1. #include "../pch/pch.h"
  2. #include "CDiandanPageUI.h"
  3. #include "../control/ControlEx.h"
  4. #include "../tool/CSqlite3.h"
  5. #include "../wnd/CDiandanNatureWnd.h"
  6. #include "../wnd/CMemoWnd.h"
  7. #include "../wnd/CYouhuiShowWnd.h"
  8. #include "../wnd/CMemberLoginWnd.h"
  9. #include "../wnd/CZhekouWnd.h"
  10. #include "../wnd/CRengongYouhuiWnd.h"
  11. #include "../wnd/CJiajiaWnd.h"
  12. #include "../wnd/CSaomaYouhuiquanWnd.h"
  13. #include "../wnd/CSaomaShangpinquanWnd.h"
  14. #include "../wnd/CSaomaCikaWnd.h"
  15. #include "../wnd/CSaomaQuanyikaWnd.h"
  16. #include "../wnd/CCanpaiWnd.h"
  17. #include "../wnd/CWeixinzhifuShoukuanWnd.h"
  18. #include "../wnd/CHuiyuanShoukuanWnd.h"
  19. #include "../wnd/CXianjinShoukuanWnd.h"
  20. #include "../wnd/CFulikaShoukuanWnd.h"
  21. #include "../wnd/CZidingyiShoukuanWnd.h"
  22. #include "../wnd/CChengzhongWnd.h"
  23. #include "../wnd/CGuadanWnd.h"
  24. #include "../print/CPosPrinter.h"
  25. CDiandanPageUI::CDiandanPageUI()
  26. {
  27. }
  28. CDiandanPageUI::~CDiandanPageUI()
  29. {
  30. }
  31. //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
  32. void CDiandanPageUI::InitShow()
  33. {
  34. //先初始化商品分类
  35. this->InitFoodtypeShow();
  36. //再初始化商品显示
  37. this->InitFoodShow();
  38. //初始化结算页面相关的展示,把所有活动清零
  39. this->InitJiesuanShow();
  40. //计算所有活动优惠,并且调整所有与价格相关的展示
  41. this->UpdateJiesuanInfo();
  42. //展示选购页面
  43. this->ShowXuangouPage();
  44. //初始化结算页面的支付方式
  45. this->InitJiesuanZhifu();
  46. }
  47. void CDiandanPageUI::RefreshShow()
  48. {
  49. //初始化商品显示(因为这里要刷新商品库存状态)
  50. this->InitFoodShow();
  51. //清空购物车
  52. m_cur_diandan_order.Clear();
  53. this->ClearDiandanOrderItemShow();
  54. //初始化结算页面相关的展示,把所有活动清零
  55. this->InitJiesuanShow();
  56. //计算所有活动优惠,并且调整所有与价格相关的展示
  57. this->UpdateJiesuanInfo();
  58. //展示选购页面
  59. this->ShowXuangouPage();
  60. }
  61. void CDiandanPageUI::InitFoodtypeShow()
  62. {
  63. //初始化商品渲染相关的信息
  64. m_foodtypeLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
  65. m_foodtypeLayout->RemoveAll();
  66. CSqlite3 sqlite;
  67. m_nFoodpackageNum = sqlite.GetFoodpackageNum();
  68. m_types = sqlite.GetFoodtypes(); //只包含收银机显示的分类
  69. if (m_nFoodpackageNum > 0)
  70. {
  71. //默认选中的分类是商品套餐
  72. m_cur_type_id = "taocan";
  73. }
  74. else
  75. {
  76. //没有套餐,默认选中第一个商品分类
  77. if (m_types.size() > 0)
  78. {
  79. m_cur_type_id = m_types[0].id;
  80. }
  81. }
  82. m_curFoodtypeOption = NULL;
  83. //先判断有没有套餐分类
  84. if (m_nFoodpackageNum > 0)
  85. {
  86. CDialogBuilder builder;
  87. CDialogBuilderCallbackEx cb;
  88. CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
  89. pItem->SetName(L"商品套餐");
  90. pItem->SetTypeId("taocan");
  91. pItem->SetTaocan();
  92. pItem->SetGroup(L"diandan_foodtype");
  93. m_foodtypeLayout->Add(pItem);
  94. if (m_cur_type_id == "taocan")
  95. {
  96. m_curFoodtypeOption = pItem;
  97. }
  98. }
  99. //接下来开始处理商品分类
  100. for (std::vector<CFoodType>::iterator it = m_types.begin(); it != m_types.end(); it++)
  101. {
  102. CFoodType type = *it;
  103. CDialogBuilder builder;
  104. CDialogBuilderCallbackEx cb;
  105. CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
  106. pItem->SetName(CLewaimaiString::UTF8ToUnicode(type.name));
  107. pItem->SetTypeId(type.id);
  108. pItem->SetGroup(L"diandan_foodtype");
  109. m_foodtypeLayout->Add(pItem);
  110. if (m_cur_type_id == type.id)
  111. {
  112. m_curFoodtypeOption = pItem;
  113. }
  114. }
  115. if (m_curFoodtypeOption != NULL)
  116. {
  117. m_curFoodtypeOption->SetBkColor(0xFF3CB371);
  118. }
  119. //如果不是一个分类都没有,选中第一个分类
  120. if (m_cur_type_id != "")
  121. {
  122. CFoodtypeOptionUI* curTypeUI = static_cast<CFoodtypeOptionUI*>(m_foodtypeLayout->GetItemAt(0));
  123. curTypeUI->Selected(true, false);
  124. }
  125. }
  126. void CDiandanPageUI::InitFoodShow()
  127. {
  128. bool is_youtu;
  129. if (CSetting::GetParam("setting_xianshi_is_youtu") == "1")
  130. {
  131. is_youtu = true;
  132. }
  133. else
  134. {
  135. is_youtu = false;
  136. }
  137. m_foodLayout = static_cast<CTileLayoutUI*>(this->FindSubControl(_T("diandan_foodlist")));
  138. m_foodLayout->RemoveAll();
  139. std::wstring xml_name;
  140. if (is_youtu)
  141. {
  142. SIZE itemsize;
  143. itemsize.cx = 170;
  144. itemsize.cy = 260;
  145. m_foodLayout->SetItemSize(itemsize);
  146. xml_name = _T("diandan_fooditem.xml");
  147. }
  148. else
  149. {
  150. SIZE itemsize;
  151. itemsize.cx = 170;
  152. itemsize.cy = 105;
  153. m_foodLayout->SetItemSize(itemsize);
  154. xml_name = _T("diandan_fooditem_wutu.xml");
  155. }
  156. //如果当前一个分类都没有,那么就不处理了
  157. if (m_cur_type_id == "")
  158. {
  159. return;
  160. }
  161. else if (m_cur_type_id == "taocan")
  162. {
  163. //选择的是套餐分类
  164. CSqlite3 sqlite;
  165. std::vector<CFoodpackage> foodlist = sqlite.GetFoodpackages(true);
  166. for (std::vector<CFoodpackage>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
  167. {
  168. CFoodpackage food = *it;
  169. CDialogBuilder builder;
  170. CDialogBuilderCallbackEx cb;
  171. CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager));
  172. pItem->SetYoutuModel(is_youtu);
  173. pItem->SetFoodpackageInfo(food);
  174. pItem->UpdateShow();
  175. m_foodLayout->Add(pItem);
  176. }
  177. }
  178. else if (m_cur_type_id == "sousuo")
  179. {
  180. //展示的是商品搜索的结果
  181. CSqlite3 sqlite;
  182. std::vector<CFood> foodlist = sqlite.GetFoodByFoodname(m_sousuo_foodname);
  183. for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
  184. {
  185. CFood food = *it;
  186. CDialogBuilder builder;
  187. CDialogBuilderCallbackEx cb;
  188. CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager));
  189. pItem->SetYoutuModel(is_youtu);
  190. pItem->SetFoodInfo(food);
  191. pItem->UpdateShow();
  192. m_foodLayout->Add(pItem);
  193. }
  194. }
  195. else
  196. {
  197. //选择的是普通商品分类
  198. CSqlite3 sqlite;
  199. std::vector<CFood> foodlist = sqlite.GetFoodByTypeid(m_cur_type_id);
  200. for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
  201. {
  202. CFood food = *it;
  203. CDialogBuilder builder;
  204. CDialogBuilderCallbackEx cb;
  205. CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager));
  206. pItem->SetYoutuModel(is_youtu);
  207. pItem->SetFoodInfo(food);
  208. pItem->UpdateShow();
  209. m_foodLayout->Add(pItem);
  210. }
  211. }
  212. }
  213. //仅仅初始化结算相关的显示(比如折扣、优惠、价格等)
  214. void CDiandanPageUI::InitJiesuanShow()
  215. {
  216. CShopinfo shopinfo = CShopinfo::m_shopinfo;
  217. //先清空会员登录状态
  218. m_is_member = false;
  219. CButtonUI* pMemberLoginBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_member_login")));
  220. pMemberLoginBtn->SetVisible(true);
  221. CLabelUI* pMemberInfo = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_member_info")));
  222. pMemberInfo->SetVisible(false);
  223. m_is_member_zhekou = false;
  224. m_member_zhekou_value = 10;
  225. //再重新设置牌号
  226. m_canpai = "";
  227. CButtonUI* pCanpaiEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_canpaihao")));
  228. pCanpaiEdit->SetText(L"输入餐牌号");
  229. //再初始化取单数量
  230. RefreshGuadanNum();
  231. //先初始化折扣值
  232. CEditUI* pZhekouEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
  233. pZhekouEdit->SetText(L"100");
  234. //再初始化加价
  235. m_jiajia = 0;
  236. CEditUI* pJiajiaEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_jiajia_value")));
  237. pJiajiaEdit->SetText(L"0");
  238. //初始化优惠
  239. m_rengong_youhui = 0;
  240. CEditUI* pYouhuiEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_youhui_value")));
  241. pYouhuiEdit->SetText(L"0");
  242. //优惠券
  243. m_is_youhuiquan = false;
  244. CLabelUI* pYouhuiquanEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_youhuiquan_status")));
  245. pYouhuiquanEdit->SetText(L"未使用");
  246. //商品券
  247. m_is_shangpinquan = false;
  248. CLabelUI* pShangpinEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_shangpinquan_status")));
  249. pShangpinEdit->SetText(L"未使用");
  250. //次卡
  251. m_is_cika = false;
  252. CLabelUI* pCikaEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_cika_status")));
  253. pCikaEdit->SetText(L"未使用");
  254. //权益卡
  255. m_is_quanyika = false;
  256. CLabelUI* pQuanyikaEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_quanyika_status")));
  257. pQuanyikaEdit->SetText(L"未使用");
  258. //抹零
  259. m_moling_type = 0;
  260. CCheckBoxUI* pMolingCheck = static_cast<CCheckBoxUI*>(this->FindSubControl(_T("diandan_jiesuan_moling_bumoling")));
  261. pMolingCheck->Selected(true, false);
  262. }
  263. void CDiandanPageUI::InitJiesuanZhifu()
  264. {
  265. CShopinfo shopinfo = CShopinfo::m_shopinfo;
  266. int num = 0;
  267. CHorizontalLayoutUI* pWeixinLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_weixinzhifu")));
  268. if (shopinfo.m_is_online_pay_open == "1")
  269. {
  270. //展示微信支付,并且调整位置
  271. pWeixinLayout->SetVisible(true);
  272. num++;
  273. }
  274. else
  275. {
  276. pWeixinLayout->SetVisible(false);
  277. }
  278. //会员支付
  279. CHorizontalLayoutUI* pHuiyuanLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_huiyuan")));
  280. if (shopinfo.m_is_vip_pay_open == "1")
  281. {
  282. pHuiyuanLayout->SetVisible(true);
  283. num++;
  284. }
  285. else
  286. {
  287. pHuiyuanLayout->SetVisible(false);
  288. }
  289. //现金支付
  290. CHorizontalLayoutUI* pXianjinLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_xianjin")));
  291. if (shopinfo.m_is_cash_pay_open == "1")
  292. {
  293. pXianjinLayout->SetVisible(true);
  294. num++;
  295. }
  296. else
  297. {
  298. pXianjinLayout->SetVisible(false);
  299. }
  300. //购物卡
  301. CHorizontalLayoutUI* pGouwukaLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_gouwuka")));
  302. if (shopinfo.m_is_giftcard_pay_open == "1")
  303. {
  304. pGouwukaLayout->SetVisible(true);
  305. num++;
  306. }
  307. else
  308. {
  309. pGouwukaLayout->SetVisible(false);
  310. }
  311. //美食城临时卡
  312. CHorizontalLayoutUI* pMeishichengLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_meishicheng")));
  313. if (shopinfo.m_is_food_town_card_pay_open == "1")
  314. {
  315. pMeishichengLayout->SetVisible(true);
  316. num++;
  317. }
  318. else
  319. {
  320. pMeishichengLayout->SetVisible(false);
  321. }
  322. //福利卡
  323. CHorizontalLayoutUI* pFulikaLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_fulika")));
  324. if (shopinfo.m_is_open_fulika_pay == "1")
  325. {
  326. pFulikaLayout->SetVisible(true);
  327. num++;
  328. }
  329. else
  330. {
  331. pFulikaLayout->SetVisible(false);
  332. }
  333. CHorizontalLayoutUI* pZhifufangshiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_layout")));
  334. //接着添加自定义支付的
  335. for (std::vector<SelfPay>::iterator it = shopinfo.m_self_pay.begin(); it != shopinfo.m_self_pay.end(); it++)
  336. {
  337. SelfPay selfpay = *it;
  338. if (selfpay.is_open == "1")
  339. {
  340. CButtonUI* newButton = new CButtonUI();
  341. newButton->SetFixedWidth(120);
  342. newButton->SetFixedHeight(80);
  343. newButton->SetText(CLewaimaiString::UTF8ToUnicode(selfpay.name).c_str());
  344. newButton->SetBorderSize(1);
  345. newButton->SetBorderColor(0xFFC1C1C1);
  346. newButton->SetBkColor(0xFFF7F7F7);
  347. //设置定义属性,在点击按钮的时候好区分
  348. newButton->SetAttribute(L"name", L"diandan_jiesuan_zhifufangshi_zidingyi_btn");
  349. newButton->AddCustomAttribute(L"selfpay_id", CLewaimaiString::UTF8ToUnicode(selfpay.id).c_str());
  350. //必须先Add,才能调用下面的SetPos,否则无效
  351. pZhifufangshiLayout->Add(newButton);
  352. num++;
  353. }
  354. }
  355. m_nZhiufuNum = num;
  356. }
  357. void CDiandanPageUI::UpdateJiesuanZhifuPos()
  358. {
  359. CShopinfo shopinfo = CShopinfo::m_shopinfo;
  360. //添加支付方式
  361. int nWidth = m_nPageWidth;
  362. if (nWidth == 0)
  363. {
  364. return;
  365. }
  366. //根据宽度计算每行显示的数量
  367. int nMeihangNum = (nWidth - 521 - 421) / 144;
  368. int num = 0;
  369. CHorizontalLayoutUI* pZhifufangshiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_layout")));
  370. for (int i = 0; i < m_nZhiufuNum; i++)
  371. {
  372. CButtonUI* curItem = static_cast<CButtonUI*>(pZhifufangshiLayout->GetItemAt(i));
  373. int curRow = num / nMeihangNum + 1;
  374. int curCol = num % nMeihangNum + 1;
  375. RECT rect;
  376. rect.left = (curCol - 1) * 140 + 20;
  377. rect.right = rect.left + 120;
  378. rect.top = (curRow - 1) * 100 + 20;
  379. rect.bottom = rect.top + 80;
  380. curItem->SetFloat(true);
  381. curItem->SetPos(rect);
  382. num++;
  383. }
  384. //调整区域高度
  385. int lastRow = (num - 1) / nMeihangNum + 1;
  386. pZhifufangshiLayout->SetFixedHeight(lastRow * 105);
  387. }
  388. //展示结算页面,隐藏选购页面
  389. void CDiandanPageUI::ShowJiesuanPage()
  390. {
  391. //先隐藏商品页面
  392. CVerticalLayoutUI* pFoodLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_food_layout")));
  393. pFoodLayout->SetVisible(false);
  394. //隐藏结算按钮
  395. CHorizontalLayoutUI* pPayLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_pay_layout")));
  396. pPayLayout->SetVisible(false);
  397. //再展示结算页面
  398. CHorizontalLayoutUI* pJiesuanLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_layout")));
  399. pJiesuanLayout->SetVisible(true);
  400. //展示继续加菜的按钮
  401. CButtonUI* pJiacaiBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_jixujiacai")));
  402. pJiacaiBtn->SetVisible(true);
  403. //更新结算按钮位置
  404. UpdateJiesuanZhifuPos();
  405. }
  406. //展示选购页面,隐藏结算页面
  407. void CDiandanPageUI::ShowXuangouPage()
  408. {
  409. //先展示商品页面
  410. CVerticalLayoutUI* pFoodLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_food_layout")));
  411. pFoodLayout->SetVisible(true);
  412. //展示结算按钮
  413. CHorizontalLayoutUI* pPayLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_pay_layout")));
  414. pPayLayout->SetVisible(true);
  415. //再隐藏结算页面
  416. CHorizontalLayoutUI* pJiesuanLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_layout")));
  417. pJiesuanLayout->SetVisible(false);
  418. //隐藏继续加菜的按钮
  419. CButtonUI* pJiacaiBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_jixujiacai")));
  420. pJiacaiBtn->SetVisible(false);
  421. }
  422. //只是刷新取单数量
  423. void CDiandanPageUI::RefreshGuadanNum()
  424. {
  425. size_t guadan_num = m_guadan_orders.size();
  426. CLabelUI* pNum = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_qudan_num")));
  427. if (guadan_num > 0)
  428. {
  429. //有挂单的
  430. pNum->SetText(to_wstring(guadan_num).c_str());
  431. pNum->SetVisible(true);
  432. }
  433. else
  434. {
  435. //没有挂单的
  436. pNum->SetVisible(false);
  437. }
  438. }
  439. //处理按钮点击类事件
  440. void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
  441. {
  442. CDuiString name = msg.pSender->GetName();
  443. if (name == L"diandan_fooditem")
  444. {
  445. CDiandanFoodItemUI* fooditemUI = static_cast<CDiandanFoodItemUI*>(msg.pSender);
  446. m_cur_click_food_item = fooditemUI;
  447. this->ClickFoodAction();
  448. }
  449. else if (name == L"btn_diandan_jia")
  450. {
  451. this->ClickAdd();
  452. }
  453. else if (name == L"btn_diandan_jian")
  454. {
  455. this->ClickDel();
  456. }
  457. else if (name == L"btn_diandan_shanchu")
  458. {
  459. this->ClickRemove();
  460. }
  461. else if (name == L"btn_diandan_guige")
  462. {
  463. this->ClickGuige();
  464. }
  465. else if (name == L"btn_diandan_qingkong")
  466. {
  467. this->ClickQingkong();
  468. }
  469. else if (name == L"btn_diandan_zhengdanbeizhu")
  470. {
  471. this->ClickZhengdanMemo();
  472. }
  473. else if (name == L"btn_diandan_gengduozhifu_pay")
  474. {
  475. //点击更多支付
  476. this->ClickGengduoPay();
  477. }
  478. else if (name == L"btn_diandan_jixujiacai")
  479. {
  480. //点击继续加菜
  481. this->JixuJiacai();
  482. }
  483. else if (name == L"btn_diandan_chakanyouhui")
  484. {
  485. //点击查看优惠
  486. this->ClickChakanYouhui();
  487. }
  488. else if (name == L"btn_diandan_dabao")
  489. {
  490. //点击打包
  491. this->ClickDabao();
  492. }
  493. else if (name == L"btn_diandan_member_login")
  494. {
  495. //点击会员登录
  496. this->ClickMemberLogin();
  497. }
  498. else if (name == L"diandan_jiesuan_zhekou_value")
  499. {
  500. //点击整单折扣
  501. this->ClickZhekou();
  502. }
  503. else if (name == L"diandan_jiesuan_jiajia_value")
  504. {
  505. //点击加价
  506. this->ClickJiajia();
  507. }
  508. else if (name == L"diandan_jiesuan_youhui_value")
  509. {
  510. //点击人工优惠
  511. this->ClickRengongyouhui();
  512. }
  513. else if (name == L"diandan_jiesuan_youhuiquan_btn")
  514. {
  515. //点击扫码优惠券
  516. this->ClickSaomaYouhuiquan();
  517. }
  518. else if (name == L"diandan_jiesuan_shangpinquan_btn")
  519. {
  520. //点击扫码商品券
  521. this->ClickSaomaShangpinquan();
  522. }
  523. else if (name == L"diandan_jiesuan_cika_btn")
  524. {
  525. //点击扫码次卡
  526. this->ClickSaomaCika();
  527. }
  528. else if (name == L"diandan_jiesuan_quanyika_btn")
  529. {
  530. //点击扫码权益卡
  531. this->ClickSaomaQuanyika();
  532. }
  533. else if (name == L"btn_diandan_canpaihao")
  534. {
  535. //点击餐牌号
  536. this->ClickCanpai();
  537. }
  538. else if (name == L"btn_diandan_weixinzhifu_pay" || name == L"diandan_jiesuan_zhifufangshi_weixinzhifu_btn")
  539. {
  540. //点击微信支付
  541. this->StartWeixinzhifuShoukuan();
  542. }
  543. else if (name == L"btn_diandan_huiyuanzhifu_pay" || name == L"diandan_jiesuan_zhifufangshi_huiyuan_btn")
  544. {
  545. //点击会员收款
  546. this->StartHuiyuanShoukuan();
  547. }
  548. else if (name == L"btn_diandan_xianjinzhifu_pay" || name == L"diandan_jiesuan_zhifufangshi_xianjin_btn")
  549. {
  550. //点击现金收款
  551. this->StartXianjinShoukuan();
  552. }
  553. else if (name == L"diandan_jiesuan_zhifufangshi_fulika_btn")
  554. {
  555. //福利卡收款
  556. this->StartFulikaShoukuan();
  557. }
  558. else if (name == L"diandan_jiesuan_zhifufangshi_zidingyi_btn")
  559. {
  560. //自定义支付
  561. std::wstring name = msg.pSender->GetText();
  562. std::wstring selfpay_id = msg.pSender->GetCustomAttribute(L"selfpay_id");
  563. this->StartZidingyiShoukuan(name, selfpay_id);
  564. }
  565. else if (name == L"diandan_food_search_clear")
  566. {
  567. CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("diandan_food_search_edit")));
  568. m_pEdit->SetText(L"");
  569. StopSerachFood();
  570. }
  571. else if (name == L"btn_diandan_cundan")
  572. {
  573. this->ClickCundan();
  574. }
  575. else if (name == L"btn_diandan_qudan")
  576. {
  577. this->ClickQudan();
  578. }
  579. else if (name == L"btn_diandan_qianxiang")
  580. {
  581. CPosPrinter printer;
  582. printer.OpenQianxiang();
  583. }
  584. }
  585. //处理option切换事件
  586. void CDiandanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
  587. {
  588. CDuiString name = msg.pSender->GetName();
  589. COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
  590. std::wstring groupname = curOption->GetGroup();
  591. if (groupname == L"diandan_foodtype")
  592. {
  593. //商品分类切换
  594. CFoodtypeOptionUI* typeUI = static_cast<CFoodtypeOptionUI*>(curOption);
  595. std::string id = typeUI->GetTypeId();
  596. if (m_cur_type_id != id)
  597. {
  598. //切换了商品分类
  599. m_curFoodtypeOption->SetBkColor(0xFFECECEC);
  600. msg.pSender->SetBkColor(0xFF3CB371);
  601. m_curFoodtypeOption = static_cast<CControlUI*>(msg.pSender);
  602. m_cur_type_id = id;
  603. this->InitFoodShow();
  604. return;
  605. }
  606. }
  607. else if (groupname == L"diandan_jiesuan_moling")
  608. {
  609. if (name == _T("diandan_jiesuan_moling_bumoling"))
  610. {
  611. m_moling_type = 0;
  612. UpdateJiesuanInfo();
  613. }
  614. else if (name == _T("diandan_jiesuan_moling_molingdaojiao"))
  615. {
  616. m_moling_type = 1;
  617. UpdateJiesuanInfo();
  618. }
  619. else if (name == _T("diandan_jiesuan_moling_molingdaoyuan"))
  620. {
  621. m_moling_type = 2;
  622. UpdateJiesuanInfo();
  623. }
  624. }
  625. }
  626. //处理下拉框、radio的切换事件
  627. void CDiandanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
  628. {
  629. }
  630. //处理编辑框输入内容改变事件
  631. void CDiandanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
  632. {
  633. CDuiString name = msg.pSender->GetName();
  634. if (name == L"diandan_food_search_edit")
  635. {
  636. //商品搜索框的输入事件
  637. CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("diandan_food_search_edit")));
  638. wstring ws_Value = m_pEdit->GetText();
  639. string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
  640. if (strValue.length() == 0)
  641. {
  642. //搜索词被清空了,退出搜索
  643. this->StopSerachFood();
  644. }
  645. else
  646. {
  647. //搜索词没清空,进入搜索
  648. this->StartSearchFood(strValue);
  649. }
  650. }
  651. }
  652. //处理扫码枪捕捉到的扫码信息
  653. void CDiandanPageUI::HandleTextCapture(std::string content)
  654. {
  655. if (m_is_show_modal_wnd == true)
  656. {
  657. m_curModalWnd->HandleTextCapture(content);
  658. }
  659. else
  660. {
  661. //没有任何弹框,那么就是按扫描商品条码来处理
  662. this->SaomiaoBarcode(content);
  663. }
  664. }
  665. void CDiandanPageUI::AddDiandanOrderItemShow(int index)
  666. {
  667. CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
  668. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  669. CDialogBuilder builder;
  670. CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("diandan_cart_item.xml"), (UINT)0, NULL, m_pManager));
  671. pList->Add(pEle);
  672. if (item.m_is_taocan)
  673. {
  674. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  675. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
  676. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  677. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  678. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  679. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  680. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  681. pEle->SetFixedHeight(84);
  682. pNature->SetVisible(true);
  683. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  684. }
  685. else
  686. {
  687. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  688. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
  689. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  690. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  691. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  692. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  693. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  694. if (item.is_nature)
  695. {
  696. pEle->SetFixedHeight(84);
  697. pNature->SetVisible(true);
  698. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  699. }
  700. else
  701. {
  702. pEle->SetFixedHeight(42);
  703. pNature->SetVisible(false);
  704. }
  705. }
  706. //更新结算信息
  707. UpdateJiesuanInfo();
  708. }
  709. void CDiandanPageUI::UpdateDiandanOrderItemShow(int index)
  710. {
  711. CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
  712. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  713. CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(pList->GetItemAt(index));
  714. if (item.m_is_taocan)
  715. {
  716. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  717. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
  718. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  719. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  720. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  721. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  722. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  723. pEle->SetFixedHeight(84);
  724. pNature->SetVisible(true);
  725. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  726. }
  727. else
  728. {
  729. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  730. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
  731. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  732. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  733. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  734. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  735. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  736. if (item.is_nature)
  737. {
  738. pEle->SetFixedHeight(84);
  739. pNature->SetVisible(true);
  740. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  741. }
  742. else
  743. {
  744. pEle->SetFixedHeight(42);
  745. pNature->SetVisible(false);
  746. }
  747. }
  748. //更新结算信息
  749. UpdateJiesuanInfo();
  750. }
  751. void CDiandanPageUI::DelDiandanOrderItemShow(int index)
  752. {
  753. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  754. pList->RemoveAt(index);
  755. //更新结算信息
  756. UpdateJiesuanInfo();
  757. }
  758. void CDiandanPageUI::ClearDiandanOrderItemShow()
  759. {
  760. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  761. pList->RemoveAll();
  762. //更新结算信息
  763. UpdateJiesuanInfo();
  764. }
  765. void CDiandanPageUI::UpdateJiesuanInfo()
  766. {
  767. //先按所有的价格公式规则,计算一次价格
  768. //(基础商品价格+属性价格-商品券-次卡(抵扣金额、抵扣商品)-会员商品优惠)*店铺折扣*分等级会员折扣*权益卡折扣*次卡折扣-满减优惠-次卡满减-优惠券+加价-优惠-抹零+开台费+打包费+茶位费
  769. //先计算基础商品价格(不包含任何优惠活动等情况下的实际金额,已包含商品属性价格)
  770. double jichu_price = m_cur_diandan_order.getTotalPrice();
  771. //这个是临时变量,表示每次优惠过后的实时价格
  772. double cur_price = jichu_price;
  773. double totol_youhui = 0;
  774. //判断是否有商品券,如果有的话把金额抵扣掉
  775. m_shangpinquan_youhui = 0;
  776. if (m_is_shangpinquan)
  777. {
  778. //判断当前购物车商品,是否有满足对应商品券使用要求的
  779. bool ret = m_cur_diandan_order.UseShangpinquan(m_shangpinquan_foodid, m_shangpinquan_youhui);
  780. totol_youhui += m_shangpinquan_youhui;
  781. }
  782. //判断次卡
  783. m_cika_youhui = 0;
  784. if (m_is_cika)
  785. {
  786. //对次卡进行处理
  787. if (m_cika_deduct_type == "0")
  788. {
  789. }
  790. else if (m_cika_deduct_type == "1")
  791. {
  792. }
  793. else if (m_cika_deduct_type == "2")
  794. {
  795. m_cika_youhui = atof(m_cika_offer_value.c_str());
  796. }
  797. else if (m_cika_deduct_type == "3")
  798. {
  799. //这种情况是次卡跟商品券一样抵扣商品\
  800. bool ret;
  801. if (m_is_shangpinquan && m_shangpinquan_foodid == m_cika_bind_foods_id)
  802. {
  803. ret = m_cur_diandan_order.UseCikaDikou(m_cika_bind_foods_id, m_cika_youhui, true);
  804. }
  805. else
  806. {
  807. ret = m_cur_diandan_order.UseCikaDikou(m_cika_bind_foods_id, m_cika_youhui, false);
  808. }
  809. }
  810. totol_youhui += m_cika_youhui;
  811. }
  812. //判断会员商品优惠
  813. //先按假数据
  814. m_total_member_youhui = 0;
  815. if (m_is_member)
  816. {
  817. m_total_member_youhui = m_cur_diandan_order.getTotalMemberYouhui(m_member_level);
  818. }
  819. totol_youhui += m_total_member_youhui;
  820. //再判断整单折扣
  821. cur_price = jichu_price - totol_youhui;
  822. double old_cur_price = cur_price;
  823. CEditUI* pZhekouEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
  824. wstring ws_zhekou = pZhekouEdit->GetText();
  825. int zhekouValue = atoi(CLewaimaiString::UnicodeToUTF8(ws_zhekou).c_str());
  826. cur_price = (double)(cur_price * zhekouValue) / 100.00;
  827. //保留2位小数
  828. cur_price = (int)(cur_price * 100) / 100.00;
  829. m_zhekou_youhui = old_cur_price - cur_price;
  830. totol_youhui += m_zhekou_youhui;
  831. //再判断分等级会员折扣
  832. m_member_zhekou_youhui = 0;
  833. m_member_level_id = "3138";
  834. std::vector<DiscountInfo> member_discount_info = CShopinfo::m_shopinfo.m_discount_info;
  835. for (std::vector<DiscountInfo>::iterator it = member_discount_info.begin(); it != member_discount_info.end(); it++)
  836. {
  837. DiscountInfo info = *it;
  838. if (info.level_id == m_member_level_id)
  839. {
  840. if (info.is_discount == "1")
  841. {
  842. m_is_member_zhekou = true;
  843. m_member_zhekou_value = info.discount_value;
  844. double member_discount = atof(info.discount_value.c_str());
  845. //这里最多是10折
  846. double old_cur_price_member_discount = cur_price;
  847. cur_price = (double)(cur_price * member_discount) / 10.00;
  848. //保留2位小数
  849. cur_price = (int)(cur_price * 100) / 100.00;
  850. m_member_zhekou_youhui = old_cur_price_member_discount - cur_price;
  851. totol_youhui += m_member_zhekou_youhui;
  852. break;
  853. }
  854. }
  855. }
  856. //再判断权益卡折扣
  857. m_quanyika_youhui = 0;
  858. if (m_is_quanyika == true)
  859. {
  860. double quanyika_zhekou = atof(m_quanyika_discount.c_str());
  861. //这里最多是10折
  862. double old_cur_price_quanyika_discount = cur_price;
  863. cur_price = (double)(cur_price * quanyika_zhekou) / 10.00;
  864. //保留2位小数
  865. cur_price = (int)(cur_price * 100) / 100.00;
  866. m_quanyika_youhui = old_cur_price_quanyika_discount - cur_price;
  867. totol_youhui += m_quanyika_youhui;
  868. }
  869. //次卡折扣
  870. if (m_is_cika)
  871. {
  872. //对次卡进行处理
  873. if (m_cika_deduct_type == "0")
  874. {
  875. double cika_zhekou = atof(m_cika_discount_value.c_str());
  876. //这里最多是10折
  877. double old_cur_price_cika_discount = cur_price;
  878. cur_price = (double)(cur_price * cika_zhekou) / 10.00;
  879. //保留2位小数
  880. cur_price = (int)(cur_price * 100) / 100.00;
  881. m_cika_youhui = old_cur_price_cika_discount - cur_price;
  882. totol_youhui += m_cika_youhui;
  883. }
  884. }
  885. //满减优惠
  886. m_manjian_youhui = 0;
  887. if (CShopinfo::m_shopinfo.m_open_promotion == "1")
  888. {
  889. //开启了满减,进行判断
  890. std::vector<Promotion> promotion = CShopinfo::m_shopinfo.m_promotion;
  891. for (std::vector<Promotion>::iterator it = promotion.begin(); it != promotion.end(); it++)
  892. {
  893. Promotion cur = *it;
  894. if (jichu_price >= cur.amount)
  895. {
  896. m_manjian_youhui = cur.discount;
  897. totol_youhui += m_manjian_youhui;
  898. cur_price -= m_manjian_youhui;
  899. break;
  900. }
  901. }
  902. }
  903. //次卡满减
  904. if (m_is_cika)
  905. {
  906. //对次卡进行处理
  907. if (m_cika_deduct_type == "1")
  908. {
  909. std::vector<std::string> manjian = CLewaimaiString::Split(m_cika_full_reduce_value, ",");
  910. double amount = atof(manjian[0].c_str());
  911. double value = atof(manjian[1].c_str());
  912. if (jichu_price >= amount)
  913. {
  914. m_cika_youhui = value;
  915. totol_youhui += m_cika_youhui;
  916. cur_price -= m_cika_youhui;
  917. }
  918. }
  919. }
  920. //优惠券
  921. m_youhuiquan_youhui = 0;
  922. if (m_is_youhuiquan)
  923. {
  924. time_t deadline = CLewaimaiTime::StringToDatetime(m_coupon_deadline);
  925. time_t now = time(NULL);
  926. if (deadline > now)
  927. {
  928. if (jichu_price >= atof(m_coupon_basic_price.c_str()))
  929. {
  930. m_youhuiquan_youhui = atof(m_coupon_value.c_str());
  931. totol_youhui += m_youhuiquan_youhui;
  932. cur_price -= m_youhuiquan_youhui;
  933. }
  934. }
  935. }
  936. //加价
  937. m_jiajia = 0;
  938. CEditUI* pJiajiaEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_jiajia_value")));
  939. wstring ws_jiajia = pJiajiaEdit->GetText();
  940. m_jiajia = atof(CLewaimaiString::UnicodeToUTF8(ws_jiajia).c_str());
  941. cur_price += m_jiajia;
  942. //人工优惠
  943. m_rengong_youhui = 0;
  944. CEditUI* pYouhuiEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_youhui_value")));
  945. wstring ws_rengong_youhui = pYouhuiEdit->GetText();
  946. m_rengong_youhui = atof(CLewaimaiString::UnicodeToUTF8(ws_rengong_youhui).c_str());
  947. totol_youhui += m_rengong_youhui;
  948. cur_price -= m_rengong_youhui;
  949. //开台费
  950. m_kaitai = 0;
  951. //打包费
  952. m_dabao = m_cur_diandan_order.getDabaoMoney();
  953. cur_price += m_dabao;
  954. //茶位费
  955. m_chawei = 0;
  956. //抹零
  957. m_moling_youhui = 0;
  958. if (m_moling_type == 0)
  959. {
  960. }
  961. else if (m_moling_type == 1)
  962. {
  963. double new_price = (int)(cur_price * 10) / 10.0;
  964. m_moling_youhui = cur_price - new_price;
  965. totol_youhui += m_moling_youhui;
  966. cur_price = new_price;
  967. }
  968. else if (m_moling_type == 2)
  969. {
  970. double new_price = (int)(cur_price);
  971. m_moling_youhui = cur_price - new_price;
  972. totol_youhui += m_moling_youhui;
  973. cur_price = new_price;
  974. }
  975. if (cur_price < 0)
  976. {
  977. cur_price = 0;
  978. }
  979. m_cur_total_price = cur_price;
  980. m_total_youhui = totol_youhui;
  981. //至此优惠全部处理完了,开始刷新各个地方的展示
  982. //先刷新优惠展示
  983. CHorizontalLayoutUI* pYouhuiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_page_youhui_tishi_layout")));
  984. CLabelUI* pYouhuiLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_youhui_tishi")));
  985. if (totol_youhui > 0)
  986. {
  987. wstring youhuilabel = L"已优惠 " + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(totol_youhui, 2)) + L" 元";
  988. pYouhuiLabel->SetText(youhuilabel.c_str());
  989. pYouhuiLayout->SetVisible(true);
  990. }
  991. else
  992. {
  993. pYouhuiLayout->SetVisible(false);
  994. }
  995. //再刷新打包费展示
  996. CLabelUI* pOtherPriceLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_otherprice")));
  997. if (m_dabao > 0)
  998. {
  999. std::wstring ws_dabaofei = L"打包费 " + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_dabao, 2)) + L" 元";
  1000. pOtherPriceLabel->SetText(ws_dabaofei.c_str());
  1001. }
  1002. else
  1003. {
  1004. pOtherPriceLabel->SetText(L"");
  1005. }
  1006. //再刷新总价展示
  1007. CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
  1008. pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(cur_price, 2))).c_str());
  1009. //再刷新账单明细展示
  1010. CVerticalLayoutUI* pmingxiLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhangdanmingxi_jiage_layout")));
  1011. pmingxiLayout->RemoveAll();
  1012. int item_num = 0;
  1013. //先显示基础价格
  1014. if (true)
  1015. {
  1016. CDialogBuilder builder;
  1017. CDialogBuilderCallbackEx cb;
  1018. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1019. pmingxiLayout->Add(pItem);
  1020. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1021. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1022. pName->SetText(L"商品原价:");
  1023. pValue->SetText((CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(jichu_price, 2)) + L"元").c_str());
  1024. item_num++;
  1025. }
  1026. //开始展示各种优惠
  1027. if (m_shangpinquan_youhui > 0)
  1028. {
  1029. CDialogBuilder builder;
  1030. CDialogBuilderCallbackEx cb;
  1031. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1032. pmingxiLayout->Add(pItem);
  1033. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1034. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1035. pName->SetText(L"商品券优惠:");
  1036. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_shangpinquan_youhui, 2)) + L"元").c_str());
  1037. item_num++;
  1038. }
  1039. if (m_cika_youhui > 0)
  1040. {
  1041. CDialogBuilder builder;
  1042. CDialogBuilderCallbackEx cb;
  1043. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1044. pmingxiLayout->Add(pItem);
  1045. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1046. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1047. pName->SetText(L"次卡优惠:");
  1048. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_cika_youhui, 2)) + L"元").c_str());
  1049. item_num++;
  1050. }
  1051. if (m_total_member_youhui > 0)
  1052. {
  1053. CDialogBuilder builder;
  1054. CDialogBuilderCallbackEx cb;
  1055. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1056. pmingxiLayout->Add(pItem);
  1057. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1058. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1059. pName->SetText(L"商品会员价优惠:");
  1060. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_total_member_youhui, 2)) + L"元").c_str());
  1061. item_num++;
  1062. }
  1063. if (m_zhekou_youhui > 0)
  1064. {
  1065. CDialogBuilder builder;
  1066. CDialogBuilderCallbackEx cb;
  1067. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1068. pmingxiLayout->Add(pItem);
  1069. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1070. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1071. pName->SetText(L"整单折扣优惠:");
  1072. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_zhekou_youhui, 2)) + L"元").c_str());
  1073. item_num++;
  1074. }
  1075. if (m_member_zhekou_youhui > 0)
  1076. {
  1077. CDialogBuilder builder;
  1078. CDialogBuilderCallbackEx cb;
  1079. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1080. pmingxiLayout->Add(pItem);
  1081. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1082. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1083. pName->SetText(L"会员整单折扣优惠:");
  1084. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_member_zhekou_youhui, 2)) + L"元").c_str());
  1085. item_num++;
  1086. }
  1087. if (m_quanyika_youhui > 0)
  1088. {
  1089. CDialogBuilder builder;
  1090. CDialogBuilderCallbackEx cb;
  1091. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1092. pmingxiLayout->Add(pItem);
  1093. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1094. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1095. pName->SetText(L"权益卡优惠:");
  1096. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_quanyika_youhui, 2)) + L"元").c_str());
  1097. item_num++;
  1098. }
  1099. if (m_manjian_youhui > 0)
  1100. {
  1101. CDialogBuilder builder;
  1102. CDialogBuilderCallbackEx cb;
  1103. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1104. pmingxiLayout->Add(pItem);
  1105. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1106. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1107. pName->SetText(L"满减优惠:");
  1108. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_manjian_youhui, 2)) + L"元").c_str());
  1109. item_num++;
  1110. }
  1111. if (m_youhuiquan_youhui > 0)
  1112. {
  1113. CDialogBuilder builder;
  1114. CDialogBuilderCallbackEx cb;
  1115. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1116. pmingxiLayout->Add(pItem);
  1117. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1118. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1119. pName->SetText(L"优惠券优惠:");
  1120. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_youhuiquan_youhui, 2)) + L"元").c_str());
  1121. item_num++;
  1122. }
  1123. if (m_rengong_youhui > 0)
  1124. {
  1125. CDialogBuilder builder;
  1126. CDialogBuilderCallbackEx cb;
  1127. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1128. pmingxiLayout->Add(pItem);
  1129. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1130. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1131. pName->SetText(L"人工优惠:");
  1132. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_rengong_youhui, 2)) + L"元").c_str());
  1133. item_num++;
  1134. }
  1135. if (m_moling_youhui > 0)
  1136. {
  1137. CDialogBuilder builder;
  1138. CDialogBuilderCallbackEx cb;
  1139. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1140. pmingxiLayout->Add(pItem);
  1141. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1142. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1143. pName->SetText(L"抹零优惠:");
  1144. pValue->SetText((L"-" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_moling_youhui, 2)) + L"元").c_str());
  1145. item_num++;
  1146. }
  1147. //然后处理加价的各种
  1148. if (m_dabao > 0)
  1149. {
  1150. CDialogBuilder builder;
  1151. CDialogBuilderCallbackEx cb;
  1152. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1153. pmingxiLayout->Add(pItem);
  1154. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1155. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1156. pName->SetText(L"打包费:");
  1157. pValue->SetText((L"+" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_dabao, 2)) + L"元").c_str());
  1158. item_num++;
  1159. }
  1160. if (m_jiajia > 0)
  1161. {
  1162. CDialogBuilder builder;
  1163. CDialogBuilderCallbackEx cb;
  1164. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  1165. pmingxiLayout->Add(pItem);
  1166. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  1167. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  1168. pName->SetText(L"人工加价:");
  1169. pValue->SetText((L"+" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(m_jiajia, 2)) + L"元").c_str());
  1170. item_num++;
  1171. }
  1172. pmingxiLayout->SetFixedHeight(item_num * 40);
  1173. CLabelUI* pYingshou = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_total_yingshou")));
  1174. pYingshou->SetText((L"应收金额:" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(cur_price, 2)) + L"元").c_str());
  1175. }
  1176. void CDiandanPageUI::ClickFoodAction()
  1177. {
  1178. bool is_taocan = m_cur_click_food_item->GetIsTaocan();
  1179. if (is_taocan)
  1180. {
  1181. //点击套餐之后的处理逻辑
  1182. CFoodpackage foodpackageinfo = m_cur_click_food_item->GetFoodpackageInfo();
  1183. CDiandanOrderItem clickItem;
  1184. clickItem.foodpackage_id = foodpackageinfo.id;
  1185. clickItem.foodpackage_name = foodpackageinfo.name;
  1186. clickItem.price = foodpackageinfo.price;
  1187. clickItem.is_dabao = false;
  1188. clickItem.dabao_money = foodpackageinfo.dabao_money;
  1189. clickItem.num = "1";
  1190. //把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
  1191. clickItem.SetFoodpackageInfo(m_cur_click_food_item->GetFoodpackageInfo());
  1192. clickItem.SetIsTaocan(true);
  1193. if (m_is_show_modal_wnd == true)
  1194. {
  1195. return;
  1196. }
  1197. //先弹框进行选择属性
  1198. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
  1199. pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
  1200. if (pNatureFrame != NULL)
  1201. {
  1202. m_is_show_modal_wnd = true;
  1203. m_curModalWnd = pNatureFrame;
  1204. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1205. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  1206. pNatureFrame->CenterWindow();
  1207. UINT ret = pNatureFrame->ShowModal();
  1208. if (ret == IDOK)
  1209. {
  1210. //保存选择的属性
  1211. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  1212. clickItem.natureSelectedArray = natureSelectedArray;
  1213. m_is_show_modal_wnd = false;
  1214. delete pNatureFrame;
  1215. }
  1216. else
  1217. {
  1218. m_is_show_modal_wnd = false;
  1219. delete pNatureFrame;
  1220. return;
  1221. }
  1222. }
  1223. //商品没有商品属性
  1224. bool is_add_new = false;
  1225. int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
  1226. if (is_add_new)
  1227. {
  1228. //说明是新增了一项,要刷新一下购物车展示
  1229. this->AddDiandanOrderItemShow(index);
  1230. }
  1231. else
  1232. {
  1233. //没有新增,而是修改了一项
  1234. this->UpdateDiandanOrderItemShow(index);
  1235. }
  1236. }
  1237. else
  1238. {
  1239. //点击普通商品之后的处理逻辑
  1240. CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
  1241. if (foodinfo.stockvalid == "1" && atof(foodinfo.stock.c_str()) < 0.001)
  1242. {
  1243. //库存为0了,不做任何处理
  1244. m_pMainWnd->ShowToast(L"该商品已售完");
  1245. return;
  1246. }
  1247. CDiandanOrderItem clickItem;
  1248. clickItem.food_id = foodinfo.id;
  1249. clickItem.food_name = foodinfo.name;
  1250. clickItem.type_id = foodinfo.type_id;
  1251. clickItem.price = foodinfo.price;
  1252. clickItem.is_dabao = false;
  1253. clickItem.dabao_money = foodinfo.dabao_money;
  1254. clickItem.num = "1";
  1255. if (foodinfo.member_price_used == "1")
  1256. {
  1257. clickItem.is_member_price_used = true;
  1258. }
  1259. else
  1260. {
  1261. clickItem.is_member_price_used = false;
  1262. }
  1263. //处理会员价的json
  1264. std::string member_price_json = foodinfo.member_price_json;
  1265. rapidjson::Document document;
  1266. document.Parse(member_price_json.c_str());
  1267. rapidjson::Value& member_price = document;
  1268. for (rapidjson::SizeType i = 0; i < member_price.Size(); ++i)
  1269. {
  1270. rapidjson::Value& member_price_info = member_price[i];
  1271. MemberPrice newPirce;
  1272. newPirce.id = member_price_info["id"].GetString();
  1273. newPirce.level = member_price_info["level"].GetString();
  1274. newPirce.price = member_price_info["price"].GetString();
  1275. clickItem.m_member_price.push_back(newPirce);
  1276. }
  1277. //把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
  1278. clickItem.SetFoodInfo(m_cur_click_food_item->GetFoodInfo());
  1279. clickItem.SetIsTaocan(false);
  1280. if (foodinfo.is_weight == "1")
  1281. {
  1282. clickItem.is_weight = true;
  1283. if (m_is_show_modal_wnd == true)
  1284. {
  1285. return;
  1286. }
  1287. //这里要弹出称重框,不弹属性框
  1288. CChengzhongWnd* pChengzhongFrame = new CChengzhongWnd();
  1289. if (pChengzhongFrame != NULL)
  1290. {
  1291. m_is_show_modal_wnd = true;
  1292. m_curModalWnd = pChengzhongFrame;
  1293. pChengzhongFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1294. pChengzhongFrame->SetIcon(IDI_ICON_DUILIB);
  1295. pChengzhongFrame->CenterWindow();
  1296. pChengzhongFrame->SetTitle(CLewaimaiString::UTF8ToUnicode(foodinfo.name));
  1297. UINT ret = pChengzhongFrame->ShowModal();
  1298. if (ret == IDOK)
  1299. {
  1300. std::string weight = pChengzhongFrame->m_weight;
  1301. if (atof(weight.c_str()) < 0.001)
  1302. {
  1303. return;
  1304. }
  1305. clickItem.num = weight;
  1306. m_is_show_modal_wnd = false;
  1307. delete pChengzhongFrame;
  1308. }
  1309. else
  1310. {
  1311. m_is_show_modal_wnd = false;
  1312. delete pChengzhongFrame;
  1313. return;
  1314. }
  1315. }
  1316. }
  1317. else
  1318. {
  1319. clickItem.is_weight = false;
  1320. if (foodinfo.is_nature == "1")
  1321. {
  1322. //商品有商品属性
  1323. clickItem.is_nature = true;
  1324. if (m_is_show_modal_wnd == true)
  1325. {
  1326. return;
  1327. }
  1328. //先弹框进行选择属性
  1329. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
  1330. pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
  1331. if (pNatureFrame != NULL)
  1332. {
  1333. m_is_show_modal_wnd = true;
  1334. m_curModalWnd = pNatureFrame;
  1335. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1336. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  1337. pNatureFrame->CenterWindow();
  1338. UINT ret = pNatureFrame->ShowModal();
  1339. if (ret == IDOK)
  1340. {
  1341. //保存选择的属性
  1342. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  1343. clickItem.natureSelectedArray = natureSelectedArray;
  1344. m_is_show_modal_wnd = false;
  1345. delete pNatureFrame;
  1346. }
  1347. else
  1348. {
  1349. m_is_show_modal_wnd = false;
  1350. delete pNatureFrame;
  1351. return;
  1352. }
  1353. }
  1354. }
  1355. }
  1356. //商品没有商品属性
  1357. bool is_add_new = false;
  1358. int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
  1359. if (is_add_new)
  1360. {
  1361. //说明是新增了一项,要刷新一下购物车展示
  1362. this->AddDiandanOrderItemShow(index);
  1363. }
  1364. else
  1365. {
  1366. //没有新增,而是修改了一项
  1367. this->UpdateDiandanOrderItemShow(index);
  1368. }
  1369. }
  1370. }
  1371. void CDiandanPageUI::ClickAdd()
  1372. {
  1373. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  1374. int nIndex = pList->GetCurSel();
  1375. if (nIndex == -1)
  1376. {
  1377. return;
  1378. }
  1379. m_cur_diandan_order.AddNum(nIndex);
  1380. //没有新增,而是修改了一项
  1381. this->UpdateDiandanOrderItemShow(nIndex);
  1382. }
  1383. void CDiandanPageUI::ClickDel()
  1384. {
  1385. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  1386. int nIndex = pList->GetCurSel();
  1387. if (nIndex == -1)
  1388. {
  1389. return;
  1390. }
  1391. bool is_del = m_cur_diandan_order.DelNum(nIndex);
  1392. //如果是删掉了,那么就刷新显示
  1393. if (is_del)
  1394. {
  1395. this->DelDiandanOrderItemShow(nIndex);
  1396. }
  1397. else
  1398. {
  1399. this->UpdateDiandanOrderItemShow(nIndex);
  1400. }
  1401. if (m_cur_diandan_order.getItemNum() == 0)
  1402. {
  1403. ShowXuangouPage();
  1404. }
  1405. }
  1406. void CDiandanPageUI::ClickRemove()
  1407. {
  1408. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  1409. int nIndex = pList->GetCurSel();
  1410. if (nIndex == -1)
  1411. {
  1412. return;
  1413. }
  1414. m_cur_diandan_order.Remove(nIndex);
  1415. this->DelDiandanOrderItemShow(nIndex);
  1416. if (m_cur_diandan_order.getItemNum() == 0)
  1417. {
  1418. ShowXuangouPage();
  1419. }
  1420. }
  1421. void CDiandanPageUI::ClickGuige()
  1422. {
  1423. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  1424. int nIndex = pList->GetCurSel();
  1425. if (nIndex == -1)
  1426. {
  1427. return;
  1428. }
  1429. bool is_taocan = m_cur_diandan_order.getDiandanOrderItem(nIndex).m_is_taocan;
  1430. if (is_taocan)
  1431. {
  1432. if (m_is_show_modal_wnd == true)
  1433. {
  1434. return;
  1435. }
  1436. //弹出属性框,开始重新选择属性
  1437. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
  1438. pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
  1439. if (pNatureFrame != NULL)
  1440. {
  1441. m_is_show_modal_wnd = true;
  1442. m_curModalWnd = pNatureFrame;
  1443. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1444. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  1445. pNatureFrame->CenterWindow();
  1446. UINT ret = pNatureFrame->ShowModal();
  1447. if (ret == IDOK)
  1448. {
  1449. //保存选择的属性
  1450. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  1451. m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
  1452. m_is_show_modal_wnd = false;
  1453. delete pNatureFrame;
  1454. //然后要刷新这个item的显示
  1455. this->UpdateDiandanOrderItemShow(nIndex);
  1456. }
  1457. else
  1458. {
  1459. m_is_show_modal_wnd = false;
  1460. delete pNatureFrame;
  1461. return;
  1462. }
  1463. }
  1464. }
  1465. else
  1466. {
  1467. bool is_nature = m_cur_diandan_order.getDiandanOrderItem(nIndex).is_nature;
  1468. if (!is_nature)
  1469. {
  1470. //当前商品没有商品属性
  1471. return;
  1472. }
  1473. //弹出属性框,开始重新选择属性
  1474. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
  1475. pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
  1476. if (pNatureFrame != NULL)
  1477. {
  1478. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1479. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  1480. pNatureFrame->CenterWindow();
  1481. UINT ret = pNatureFrame->ShowModal();
  1482. if (ret == IDOK)
  1483. {
  1484. //保存选择的属性
  1485. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  1486. m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
  1487. delete pNatureFrame;
  1488. //然后要刷新这个item的显示
  1489. this->UpdateDiandanOrderItemShow(nIndex);
  1490. }
  1491. else
  1492. {
  1493. return;
  1494. }
  1495. }
  1496. }
  1497. }
  1498. void CDiandanPageUI::ClickDabao()
  1499. {
  1500. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  1501. int nIndex = pList->GetCurSel();
  1502. if (nIndex == -1)
  1503. {
  1504. return;
  1505. }
  1506. m_cur_diandan_order.SetDabao(nIndex);
  1507. //没有新增,而是修改了一项
  1508. this->UpdateDiandanOrderItemShow(nIndex);
  1509. }
  1510. void CDiandanPageUI::ClickQingkong()
  1511. {
  1512. m_cur_diandan_order.Clear();
  1513. this->ClearDiandanOrderItemShow();
  1514. ShowXuangouPage();
  1515. }
  1516. //点击存单之后的逻辑
  1517. void CDiandanPageUI::ClickCundan()
  1518. {
  1519. if (m_cur_diandan_order.getItemNum() == 0)
  1520. {
  1521. //没有选任何商品
  1522. return;
  1523. }
  1524. m_cur_diandan_order.m_guadan_time = CLewaimaiTime::DatetimeToString(time(NULL));
  1525. m_guadan_orders.push_back(m_cur_diandan_order);
  1526. //挂单之后,刷新所有显示
  1527. RefreshShow();
  1528. }
  1529. //点击取单之后的逻辑
  1530. void CDiandanPageUI::ClickQudan()
  1531. {
  1532. if (m_guadan_orders.size() == 0)
  1533. {
  1534. return;
  1535. }
  1536. if (m_is_show_modal_wnd == true)
  1537. {
  1538. return;
  1539. }
  1540. CGuadanWnd* pQudanDlg = new CGuadanWnd();
  1541. if (pQudanDlg != NULL)
  1542. {
  1543. m_is_show_modal_wnd = true;
  1544. m_curModalWnd = pQudanDlg;
  1545. pQudanDlg->SetGuadanOrders(m_guadan_orders);
  1546. pQudanDlg->SetPageUI(this);
  1547. pQudanDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1548. pQudanDlg->SetIcon(IDI_ICON_DUILIB);
  1549. pQudanDlg->CenterWindow();
  1550. pQudanDlg->SetTitle(L"取单");
  1551. UINT ret = pQudanDlg->ShowModal();
  1552. if (ret == IDOK)
  1553. {
  1554. //取单成功逻辑处理
  1555. int nQudanNum = pQudanDlg->m_nQudanNum;
  1556. //先对当前的数据进行清空
  1557. RefreshShow();
  1558. //然后保存取单的订单
  1559. m_cur_diandan_order = m_guadan_orders[nQudanNum];
  1560. m_guadan_orders.erase(m_guadan_orders.begin() + nQudanNum);
  1561. RefreshGuadanNum();
  1562. //然后展示购物车
  1563. for (int i = 0; i < m_cur_diandan_order.getItemNum(); i++)
  1564. {
  1565. this->AddDiandanOrderItemShow(i);
  1566. }
  1567. m_is_show_modal_wnd = false;
  1568. delete pQudanDlg;
  1569. }
  1570. else
  1571. {
  1572. RefreshGuadanNum();
  1573. m_is_show_modal_wnd = false;
  1574. delete pQudanDlg;
  1575. return;
  1576. }
  1577. }
  1578. }
  1579. void CDiandanPageUI::ClickZhengdanMemo()
  1580. {
  1581. if (m_is_show_modal_wnd == true)
  1582. {
  1583. return;
  1584. }
  1585. CMemoWnd* pMemoDlg = new CMemoWnd();
  1586. if (pMemoDlg != NULL)
  1587. {
  1588. m_is_show_modal_wnd = true;
  1589. m_curModalWnd = pMemoDlg;
  1590. pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1591. pMemoDlg->SetIcon(IDI_ICON_DUILIB);
  1592. pMemoDlg->CenterWindow();
  1593. pMemoDlg->SetTitle(L"整单备注");
  1594. UINT ret = pMemoDlg->ShowModal();
  1595. if (ret == IDOK)
  1596. {
  1597. //保存选择的属性
  1598. std::string sMemo = pMemoDlg->getContent();
  1599. //渲染整单备注的展示
  1600. CLabelUI* pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_label_zhengdanbeizhu")));
  1601. pLabel->SetText((L"整单备注:" + CLewaimaiString::UTF8ToUnicode(sMemo)).c_str());
  1602. //保存备注,提交订单的时候用
  1603. m_cur_diandan_order.SetMemo(sMemo);
  1604. m_is_show_modal_wnd = false;
  1605. delete pMemoDlg;
  1606. }
  1607. else
  1608. {
  1609. m_is_show_modal_wnd = false;
  1610. delete pMemoDlg;
  1611. return;
  1612. }
  1613. }
  1614. }
  1615. void CDiandanPageUI::ClickGengduoPay()
  1616. {
  1617. if (m_cur_diandan_order.getItemNum() == 0)
  1618. {
  1619. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  1620. return;
  1621. }
  1622. ShowJiesuanPage();
  1623. }
  1624. void CDiandanPageUI::JixuJiacai()
  1625. {
  1626. //先显示商品页面
  1627. CVerticalLayoutUI* pFoodLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_food_layout")));
  1628. pFoodLayout->SetVisible(true);
  1629. //显示结算按钮
  1630. CHorizontalLayoutUI* pPayLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_pay_layout")));
  1631. pPayLayout->SetVisible(true);
  1632. //再隐藏结算页面
  1633. CHorizontalLayoutUI* pJiesuanLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_layout")));
  1634. pJiesuanLayout->SetVisible(false);
  1635. //隐藏继续加菜的按钮
  1636. CButtonUI* pJiacaiBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_jixujiacai")));
  1637. pJiacaiBtn->SetVisible(false);
  1638. }
  1639. void CDiandanPageUI::ClickChakanYouhui()
  1640. {
  1641. if (m_is_show_modal_wnd == true)
  1642. {
  1643. return;
  1644. }
  1645. //弹框展示所有的优惠
  1646. CYouhuiShowWnd* pYouhuiDlg = new CYouhuiShowWnd();
  1647. if (pYouhuiDlg != NULL)
  1648. {
  1649. m_is_show_modal_wnd = true;
  1650. m_curModalWnd = pYouhuiDlg;
  1651. pYouhuiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1652. pYouhuiDlg->SetIcon(IDI_ICON_DUILIB);
  1653. pYouhuiDlg->CenterWindow();
  1654. pYouhuiDlg->SetYouhuiValue(m_shangpinquan_youhui, m_cika_youhui, m_total_member_youhui, m_zhekou_youhui, m_member_zhekou_youhui, m_quanyika_youhui, m_manjian_youhui, m_youhuiquan_youhui, m_rengong_youhui, m_moling_youhui);
  1655. UINT ret = pYouhuiDlg->ShowModal();
  1656. if (ret == IDOK)
  1657. {
  1658. m_is_show_modal_wnd = false;
  1659. delete pYouhuiDlg;
  1660. }
  1661. else
  1662. {
  1663. m_is_show_modal_wnd = false;
  1664. delete pYouhuiDlg;
  1665. return;
  1666. }
  1667. }
  1668. }
  1669. void CDiandanPageUI::ClickMemberLogin()
  1670. {
  1671. if (m_is_show_modal_wnd == true)
  1672. {
  1673. return;
  1674. }
  1675. CMemberLoginWnd* pMemberLoginDlg = new CMemberLoginWnd();
  1676. if (pMemberLoginDlg != NULL)
  1677. {
  1678. m_is_show_modal_wnd = true;
  1679. m_curModalWnd = pMemberLoginDlg;
  1680. pMemberLoginDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1681. pMemberLoginDlg->SetIcon(IDI_ICON_DUILIB);
  1682. pMemberLoginDlg->CenterWindow();
  1683. pMemberLoginDlg->SetTitle(L"会员登录");
  1684. UINT ret = pMemberLoginDlg->ShowModal();
  1685. if (ret == IDOK)
  1686. {
  1687. //这说明会员登录成功了
  1688. m_is_member = true;
  1689. m_member_name = pMemberLoginDlg->m_member_name;
  1690. m_member_level = pMemberLoginDlg->m_member_level;
  1691. m_member_level_name = pMemberLoginDlg->m_member_level_name;
  1692. CButtonUI* pMemberLoginBtn = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_member_login")));
  1693. pMemberLoginBtn->SetVisible(false);
  1694. CLabelUI* pMemberInfo = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_member_info")));
  1695. std::wstring memberInfo = L"会员:" + CLewaimaiString::UTF8ToUnicode(m_member_name) + L"【" + CLewaimaiString::UTF8ToUnicode(m_member_level_name) + L"】";
  1696. pMemberInfo->SetText(memberInfo.c_str());
  1697. pMemberInfo->SetVisible(true);
  1698. this->UpdateJiesuanInfo();
  1699. m_is_show_modal_wnd = false;
  1700. delete pMemberLoginDlg;
  1701. }
  1702. else
  1703. {
  1704. m_is_show_modal_wnd = false;
  1705. delete pMemberLoginDlg;
  1706. return;
  1707. }
  1708. }
  1709. }
  1710. void CDiandanPageUI::ClickZhekou()
  1711. {
  1712. if (m_is_show_modal_wnd == true)
  1713. {
  1714. return;
  1715. }
  1716. CZhekouWnd* pZhekouDlg = new CZhekouWnd();
  1717. if (pZhekouDlg != NULL)
  1718. {
  1719. m_is_show_modal_wnd = true;
  1720. m_curModalWnd = pZhekouDlg;
  1721. pZhekouDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1722. pZhekouDlg->SetIcon(IDI_ICON_DUILIB);
  1723. pZhekouDlg->CenterWindow();
  1724. pZhekouDlg->SetTitle(L"输入折扣值");
  1725. UINT ret = pZhekouDlg->ShowModal();
  1726. if (ret == IDOK)
  1727. {
  1728. //这说明折扣输入了
  1729. std::string zhekou = pZhekouDlg->getContent();
  1730. CButtonUI* pZhekouEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
  1731. pZhekouEdit->SetText(CLewaimaiString::UTF8ToUnicode(zhekou).c_str());
  1732. this->UpdateJiesuanInfo();
  1733. m_is_show_modal_wnd = false;
  1734. delete pZhekouDlg;
  1735. }
  1736. else
  1737. {
  1738. m_is_show_modal_wnd = false;
  1739. delete pZhekouDlg;
  1740. return;
  1741. }
  1742. }
  1743. }
  1744. void CDiandanPageUI::ClickJiajia()
  1745. {
  1746. if (m_is_show_modal_wnd == true)
  1747. {
  1748. return;
  1749. }
  1750. CjiajiaWnd* pJiajiaDlg = new CjiajiaWnd();
  1751. if (pJiajiaDlg != NULL)
  1752. {
  1753. m_is_show_modal_wnd = true;
  1754. m_curModalWnd = pJiajiaDlg;
  1755. pJiajiaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1756. pJiajiaDlg->SetIcon(IDI_ICON_DUILIB);
  1757. pJiajiaDlg->CenterWindow();
  1758. pJiajiaDlg->SetTitle(L"输入加价金额");
  1759. UINT ret = pJiajiaDlg->ShowModal();
  1760. if (ret == IDOK)
  1761. {
  1762. //这说明折扣输入了
  1763. std::string jiajia = pJiajiaDlg->getContent();
  1764. CButtonUI* pJiajiaEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_jiajia_value")));
  1765. pJiajiaEdit->SetText(CLewaimaiString::UTF8ToUnicode(jiajia).c_str());
  1766. this->UpdateJiesuanInfo();
  1767. m_is_show_modal_wnd = false;
  1768. delete pJiajiaDlg;
  1769. }
  1770. else
  1771. {
  1772. m_is_show_modal_wnd = false;
  1773. delete pJiajiaDlg;
  1774. return;
  1775. }
  1776. }
  1777. }
  1778. void CDiandanPageUI::ClickRengongyouhui()
  1779. {
  1780. if (m_is_show_modal_wnd == true)
  1781. {
  1782. return;
  1783. }
  1784. CRengongYouhuiWnd* pYouhuiDlg = new CRengongYouhuiWnd();
  1785. if (pYouhuiDlg != NULL)
  1786. {
  1787. m_is_show_modal_wnd = true;
  1788. m_curModalWnd = pYouhuiDlg;
  1789. pYouhuiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1790. pYouhuiDlg->SetIcon(IDI_ICON_DUILIB);
  1791. pYouhuiDlg->CenterWindow();
  1792. pYouhuiDlg->SetTitle(L"输入优惠金额");
  1793. UINT ret = pYouhuiDlg->ShowModal();
  1794. if (ret == IDOK)
  1795. {
  1796. //这说明折扣输入了
  1797. std::string youhui = pYouhuiDlg->getContent();
  1798. CButtonUI* pYouhuiEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_jiesuan_youhui_value")));
  1799. pYouhuiEdit->SetText(CLewaimaiString::UTF8ToUnicode(youhui).c_str());
  1800. this->UpdateJiesuanInfo();
  1801. m_is_show_modal_wnd = false;
  1802. delete pYouhuiDlg;
  1803. }
  1804. else
  1805. {
  1806. m_is_show_modal_wnd = false;
  1807. delete pYouhuiDlg;
  1808. return;
  1809. }
  1810. }
  1811. }
  1812. void CDiandanPageUI::ClickSaomaYouhuiquan()
  1813. {
  1814. if (m_is_show_modal_wnd == true)
  1815. {
  1816. return;
  1817. }
  1818. CSaomaYouhuiquanWnd* pSaomaYouhuiquanDlg = new CSaomaYouhuiquanWnd();
  1819. if (pSaomaYouhuiquanDlg != NULL)
  1820. {
  1821. m_is_show_modal_wnd = true;
  1822. m_curModalWnd = pSaomaYouhuiquanDlg;
  1823. pSaomaYouhuiquanDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1824. pSaomaYouhuiquanDlg->SetIcon(IDI_ICON_DUILIB);
  1825. pSaomaYouhuiquanDlg->CenterWindow();
  1826. pSaomaYouhuiquanDlg->SetTitle(L"扫码使用优惠券");
  1827. UINT ret = pSaomaYouhuiquanDlg->ShowModal();
  1828. if (ret == IDOK)
  1829. {
  1830. //这说明优惠券核销成功了
  1831. m_is_youhuiquan = true;
  1832. m_youhuiquan_id = pSaomaYouhuiquanDlg->m_coupon_id;
  1833. m_coupon_basic_price = pSaomaYouhuiquanDlg->m_coupon_basic_price;
  1834. m_coupon_deadline = pSaomaYouhuiquanDlg->m_coupon_deadline;
  1835. m_coupon_value = pSaomaYouhuiquanDlg->m_coupon_value;
  1836. CLabelUI* pYouhuiEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_youhuiquan_status")));
  1837. pYouhuiEdit->SetText(L"已使用");
  1838. this->UpdateJiesuanInfo();
  1839. m_is_show_modal_wnd = false;
  1840. delete pSaomaYouhuiquanDlg;
  1841. }
  1842. else
  1843. {
  1844. m_is_show_modal_wnd = false;
  1845. delete pSaomaYouhuiquanDlg;
  1846. return;
  1847. }
  1848. }
  1849. }
  1850. //点击扫码商品券
  1851. void CDiandanPageUI::ClickSaomaShangpinquan()
  1852. {
  1853. if (m_is_show_modal_wnd == true)
  1854. {
  1855. return;
  1856. }
  1857. CSaomaShangpinquanWnd* pSaomaShangpinquanDlg = new CSaomaShangpinquanWnd();
  1858. if (pSaomaShangpinquanDlg != NULL)
  1859. {
  1860. m_is_show_modal_wnd = true;
  1861. m_curModalWnd = pSaomaShangpinquanDlg;
  1862. pSaomaShangpinquanDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1863. pSaomaShangpinquanDlg->SetIcon(IDI_ICON_DUILIB);
  1864. pSaomaShangpinquanDlg->CenterWindow();
  1865. pSaomaShangpinquanDlg->SetTitle(L"扫码使用商品券");
  1866. UINT ret = pSaomaShangpinquanDlg->ShowModal();
  1867. if (ret == IDOK)
  1868. {
  1869. //这说明商品券核销成功了
  1870. m_is_shangpinquan = true;
  1871. m_shangpinquan_id = pSaomaShangpinquanDlg->m_goodscoupon_id;
  1872. m_shangpinquan_name = pSaomaShangpinquanDlg->m_goods_coupon_name;
  1873. m_shangpinquan_foodid = pSaomaShangpinquanDlg->m_bind_foods_id;
  1874. CLabelUI* pYouhuiEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_shangpinquan_status")));
  1875. pYouhuiEdit->SetText(L"已使用");
  1876. this->UpdateJiesuanInfo();
  1877. m_is_show_modal_wnd = false;
  1878. delete pSaomaShangpinquanDlg;
  1879. }
  1880. else
  1881. {
  1882. m_is_show_modal_wnd = false;
  1883. delete pSaomaShangpinquanDlg;
  1884. return;
  1885. }
  1886. }
  1887. }
  1888. //点击扫码权益卡
  1889. void CDiandanPageUI::ClickSaomaQuanyika()
  1890. {
  1891. if (m_is_show_modal_wnd == true)
  1892. {
  1893. return;
  1894. }
  1895. CSaomaQuanyikaWnd* pSaomaQuanyikaDlg = new CSaomaQuanyikaWnd();
  1896. if (pSaomaQuanyikaDlg != NULL)
  1897. {
  1898. m_is_show_modal_wnd = true;
  1899. m_curModalWnd = pSaomaQuanyikaDlg;
  1900. pSaomaQuanyikaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1901. pSaomaQuanyikaDlg->SetIcon(IDI_ICON_DUILIB);
  1902. pSaomaQuanyikaDlg->CenterWindow();
  1903. pSaomaQuanyikaDlg->SetTitle(L"扫码使用权益卡");
  1904. UINT ret = pSaomaQuanyikaDlg->ShowModal();
  1905. if (ret == IDOK)
  1906. {
  1907. //这说明权益卡核销成功了
  1908. m_is_quanyika = true;
  1909. m_quanyika_discount = pSaomaQuanyikaDlg->m_discount;
  1910. CLabelUI* pYouhuiEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_quanyika_status")));
  1911. pYouhuiEdit->SetText(L"已使用");
  1912. this->UpdateJiesuanInfo();
  1913. m_is_show_modal_wnd = false;
  1914. delete pSaomaQuanyikaDlg;
  1915. }
  1916. else
  1917. {
  1918. m_is_show_modal_wnd = false;
  1919. delete pSaomaQuanyikaDlg;
  1920. return;
  1921. }
  1922. }
  1923. }
  1924. //点击扫码次卡
  1925. void CDiandanPageUI::ClickSaomaCika()
  1926. {
  1927. if (m_is_show_modal_wnd == true)
  1928. {
  1929. return;
  1930. }
  1931. CSaomaCikaWnd* pSaomaCikaDlg = new CSaomaCikaWnd();
  1932. if (pSaomaCikaDlg != NULL)
  1933. {
  1934. m_is_show_modal_wnd = true;
  1935. m_curModalWnd = pSaomaCikaDlg;
  1936. pSaomaCikaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1937. pSaomaCikaDlg->SetIcon(IDI_ICON_DUILIB);
  1938. pSaomaCikaDlg->CenterWindow();
  1939. pSaomaCikaDlg->SetTitle(L"扫码使用次卡");
  1940. UINT ret = pSaomaCikaDlg->ShowModal();
  1941. if (ret == IDOK)
  1942. {
  1943. //这说明商品券核销成功了
  1944. m_is_cika = true;
  1945. m_cika_id = pSaomaCikaDlg->m_timescoupon_id;
  1946. m_cika_deduct_type = pSaomaCikaDlg->m_deduct_type;
  1947. m_cika_discount = pSaomaCikaDlg->m_discount;
  1948. m_cika_discount_value = pSaomaCikaDlg->m_discount_value;
  1949. m_cika_full_reduce = pSaomaCikaDlg->m_full_reduce;
  1950. m_cika_full_reduce_value = pSaomaCikaDlg->m_full_reduce_value;
  1951. m_cika_offer = pSaomaCikaDlg->m_offer;
  1952. m_cika_offer_value = pSaomaCikaDlg->m_offer_value;
  1953. m_cika_bind_foods_id = pSaomaCikaDlg->m_bind_foods_id;
  1954. CLabelUI* pYouhuiEdit = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_cika_status")));
  1955. pYouhuiEdit->SetText(L"已使用");
  1956. this->UpdateJiesuanInfo();
  1957. m_is_show_modal_wnd = false;
  1958. delete pSaomaCikaDlg;
  1959. }
  1960. else
  1961. {
  1962. m_is_show_modal_wnd = false;
  1963. delete pSaomaCikaDlg;
  1964. return;
  1965. }
  1966. }
  1967. }
  1968. void CDiandanPageUI::ClickCanpai()
  1969. {
  1970. if (m_is_show_modal_wnd == true)
  1971. {
  1972. return;
  1973. }
  1974. CCanpaiWnd* pCanpaiDlg = new CCanpaiWnd();
  1975. if (pCanpaiDlg != NULL)
  1976. {
  1977. m_is_show_modal_wnd = true;
  1978. m_curModalWnd = pCanpaiDlg;
  1979. pCanpaiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  1980. pCanpaiDlg->SetIcon(IDI_ICON_DUILIB);
  1981. pCanpaiDlg->CenterWindow();
  1982. pCanpaiDlg->SetTitle(L"输入餐牌号");
  1983. UINT ret = pCanpaiDlg->ShowModal();
  1984. if (ret == IDOK)
  1985. {
  1986. //这说明折扣输入了
  1987. std::string canpai = pCanpaiDlg->getContent();
  1988. m_canpai = canpai;
  1989. CButtonUI* pCanpaiEdit = static_cast<CButtonUI*>(this->FindSubControl(_T("btn_diandan_canpaihao")));
  1990. pCanpaiEdit->SetText((L"餐牌号 " + CLewaimaiString::UTF8ToUnicode(canpai)).c_str());
  1991. this->UpdateJiesuanInfo();
  1992. m_is_show_modal_wnd = false;
  1993. delete pCanpaiDlg;
  1994. }
  1995. else
  1996. {
  1997. m_is_show_modal_wnd = false;
  1998. delete pCanpaiDlg;
  1999. return;
  2000. }
  2001. }
  2002. }
  2003. //获取通用参数,任何支付方式都要用到的参数,个性化参数在弹框里面处理
  2004. //参考文档 http://apidoc.zhipuzi.com/index.php/home/item/show?item_id=4
  2005. std::map<string, string> CDiandanPageUI::GetSendorderParams()
  2006. {
  2007. std::map<string, string> params;
  2008. params["order_no"] = CRandomHelper::GetRandString(20);
  2009. //构建food_list参数
  2010. params["food_list"] = m_cur_diandan_order.getDiandanFoodlistParam();
  2011. params["foodpackage_array"] = m_cur_diandan_order.getDiandanTaocanParam();
  2012. params["person_num"] = "1";
  2013. params["table_name"] = m_canpai;
  2014. params["note"] = m_cur_diandan_order.GetMemo();
  2015. params["dabao_price"] = CLewaimaiString::DoubleToString(m_dabao, 2);
  2016. params["food_price"] = CLewaimaiString::DoubleToString(m_cur_diandan_order.getTotalPrice(), 2);
  2017. params["total_price"] = CLewaimaiString::DoubleToString(m_cur_diandan_order.getTotalPrice() + m_dabao, 2);
  2018. CEditUI* pZhekouEdit = static_cast<CEditUI*>(this->FindSubControl(_T("diandan_jiesuan_zhekou_value")));
  2019. wstring ws_zhekou = pZhekouEdit->GetText();
  2020. params["discount"] = CLewaimaiString::UnicodeToUTF8(ws_zhekou);
  2021. params["coupon"] = CLewaimaiString::DoubleToString(m_rengong_youhui, 2);
  2022. params["price_plus"] = CLewaimaiString::DoubleToString(m_jiajia, 2);
  2023. params["price_moling"] = CLewaimaiString::DoubleToString(m_moling_youhui, 2);
  2024. params["yingshou_value"] = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2025. params["shishou_value"] = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2026. params["zhaoling_value"] = "0";
  2027. params["zhifu_type"] = "";
  2028. if (m_is_youhuiquan)
  2029. {
  2030. params["coupon_id"] = m_youhuiquan_id;
  2031. }
  2032. if (m_is_cika)
  2033. {
  2034. params["timescoupon_id"] = m_cika_id;
  2035. }
  2036. if (m_is_shangpinquan)
  2037. {
  2038. params["goodscoupon_id"] = m_shangpinquan_id;
  2039. }
  2040. if (m_is_quanyika)
  2041. {
  2042. params["is_eq_card_discount"] = "1";
  2043. params["eq_card_discount_value"] = m_quanyika_discount;
  2044. }
  2045. else
  2046. {
  2047. params["is_eq_card_discount"] = "0";
  2048. }
  2049. if (m_is_member)
  2050. {
  2051. params["member_level"] = m_member_level;
  2052. if (m_is_member_zhekou)
  2053. {
  2054. params["member_level_value"] = m_member_zhekou_value;
  2055. }
  2056. else
  2057. {
  2058. params["member_level_value"] = 10;
  2059. }
  2060. }
  2061. if (m_is_cika == true)
  2062. {
  2063. params["time_coupon_type"] = m_cika_deduct_type;
  2064. params["time_coupon_discount_value"] = m_cika_discount_value;
  2065. params["time_coupon_full_reduce_value"] = m_cika_full_reduce_value;
  2066. params["time_coupon_offer_value"] = m_cika_offer_value;
  2067. params["time_coupon_band_food_value"] = CLewaimaiString::DoubleToString(m_cika_youhui, 2);
  2068. }
  2069. if (m_is_shangpinquan)
  2070. {
  2071. params["goods_coupon_band_food_value"] = CLewaimaiString::DoubleToString(m_shangpinquan_youhui, 2);
  2072. }
  2073. if (m_manjian_youhui > 0)
  2074. {
  2075. params["promotion_value"] = CLewaimaiString::DoubleToString(m_manjian_youhui, 2);
  2076. }
  2077. if (m_youhuiquan_youhui > 0)
  2078. {
  2079. params["coupon_value"] = CLewaimaiString::DoubleToString(m_youhuiquan_youhui, 2);
  2080. }
  2081. if (m_member_zhekou_youhui > 0)
  2082. {
  2083. params["member_discount_money"] = CLewaimaiString::DoubleToString(m_member_zhekou_youhui, 2);
  2084. }
  2085. if (m_zhekou_youhui > 0)
  2086. {
  2087. params["shop_discount_money"] = CLewaimaiString::DoubleToString(m_zhekou_youhui, 2);
  2088. }
  2089. if (m_cika_youhui > 0)
  2090. {
  2091. params["timescoupon_discount_money"] = CLewaimaiString::DoubleToString(m_cika_youhui, 2);
  2092. }
  2093. if (m_quanyika_youhui > 0)
  2094. {
  2095. params["eq_card_discount_money"] = CLewaimaiString::DoubleToString(m_quanyika_youhui, 2);
  2096. }
  2097. params["total_delete_money"] = CLewaimaiString::DoubleToString(m_total_youhui, 2);
  2098. return params;
  2099. }
  2100. void CDiandanPageUI::StartWeixinzhifuShoukuan()
  2101. {
  2102. if (m_is_show_modal_wnd == true)
  2103. {
  2104. return;
  2105. }
  2106. if (m_cur_diandan_order.getItemNum() == 0)
  2107. {
  2108. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  2109. return;
  2110. }
  2111. CWeixinzhifuShoukuanWnd* pShoukuanWnd = new CWeixinzhifuShoukuanWnd;
  2112. if (pShoukuanWnd != NULL)
  2113. {
  2114. m_is_show_modal_wnd = true;
  2115. m_curModalWnd = pShoukuanWnd;
  2116. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  2117. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  2118. pShoukuanWnd->CenterWindow();
  2119. std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2120. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  2121. pShoukuanWnd->InitMoney(watchValue);
  2122. //这里要对提交订单的参数进行组装,然后方便请求
  2123. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  2124. /*
  2125. if (m_is_start_catch && m_catch_string.length() == 18)
  2126. {
  2127. pShoukuanWnd->InitFukuanma(m_catch_string);
  2128. }
  2129. }*/
  2130. UINT ret = pShoukuanWnd->ShowModal();
  2131. if (ret == IDOK)
  2132. {
  2133. //说明收款成功了,需要进行一些后续的处理
  2134. this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "weixinzhifu");
  2135. }
  2136. else
  2137. {
  2138. int a = 1;
  2139. }
  2140. m_is_show_modal_wnd = false;
  2141. delete pShoukuanWnd;
  2142. }
  2143. }
  2144. void CDiandanPageUI::StartHuiyuanShoukuan()
  2145. {
  2146. if (m_is_show_modal_wnd == true)
  2147. {
  2148. return;
  2149. }
  2150. if (m_cur_diandan_order.getItemNum() == 0)
  2151. {
  2152. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  2153. return;
  2154. }
  2155. CHuiyuanShoukuanWnd* pShoukuanWnd = new CHuiyuanShoukuanWnd();
  2156. if (pShoukuanWnd != NULL)
  2157. {
  2158. m_is_show_modal_wnd = true;
  2159. m_curModalWnd = pShoukuanWnd;
  2160. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  2161. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  2162. pShoukuanWnd->CenterWindow();
  2163. std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2164. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  2165. pShoukuanWnd->InitMoney(watchValue);
  2166. //这里要对提交订单的参数进行组装,然后方便请求
  2167. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  2168. /*
  2169. if (m_is_start_catch && m_catch_string.length() == 18)
  2170. {
  2171. pShoukuanWnd->InitFukuanma(m_catch_string);
  2172. }
  2173. }*/
  2174. UINT ret = pShoukuanWnd->ShowModal();
  2175. if (ret == IDOK)
  2176. {
  2177. //说明收款成功了,需要进行一些后续的处理
  2178. this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "huiyuanzhifu");
  2179. }
  2180. m_is_show_modal_wnd = false;
  2181. delete pShoukuanWnd;
  2182. }
  2183. }
  2184. //开始进行现金收款
  2185. void CDiandanPageUI::StartXianjinShoukuan()
  2186. {
  2187. if (m_is_show_modal_wnd == true)
  2188. {
  2189. return;
  2190. }
  2191. if (m_cur_diandan_order.getItemNum() == 0)
  2192. {
  2193. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  2194. return;
  2195. }
  2196. CXianjinShoukuanWnd* pShoukuanWnd = new CXianjinShoukuanWnd();
  2197. if (pShoukuanWnd != NULL)
  2198. {
  2199. m_is_show_modal_wnd = true;
  2200. m_curModalWnd = pShoukuanWnd;
  2201. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  2202. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  2203. pShoukuanWnd->CenterWindow();
  2204. std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2205. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  2206. pShoukuanWnd->InitMoney(watchValue);
  2207. //这里要对提交订单的参数进行组装,然后方便请求
  2208. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  2209. /*
  2210. if (m_is_start_catch && m_catch_string.length() == 18)
  2211. {
  2212. pShoukuanWnd->InitFukuanma(m_catch_string);
  2213. }
  2214. }*/
  2215. UINT ret = pShoukuanWnd->ShowModal();
  2216. if (ret == IDOK)
  2217. {
  2218. //说明收款成功了,需要进行一些后续的处理
  2219. this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "xianjinzhifu");
  2220. }
  2221. m_is_show_modal_wnd = false;
  2222. delete pShoukuanWnd;
  2223. }
  2224. }
  2225. void CDiandanPageUI::StartFulikaShoukuan()
  2226. {
  2227. if (m_is_show_modal_wnd == true)
  2228. {
  2229. return;
  2230. }
  2231. if (m_cur_diandan_order.getItemNum() == 0)
  2232. {
  2233. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  2234. return;
  2235. }
  2236. CFulikaShoukuanWnd* pShoukuanWnd = new CFulikaShoukuanWnd();
  2237. if (pShoukuanWnd != NULL)
  2238. {
  2239. m_is_show_modal_wnd = true;
  2240. m_curModalWnd = pShoukuanWnd;
  2241. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  2242. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  2243. pShoukuanWnd->CenterWindow();
  2244. std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2245. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  2246. pShoukuanWnd->InitMoney(watchValue);
  2247. //这里要对提交订单的参数进行组装,然后方便请求
  2248. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  2249. /*
  2250. if (m_is_start_catch && m_catch_string.length() == 18)
  2251. {
  2252. pShoukuanWnd->InitFukuanma(m_catch_string);
  2253. }
  2254. }*/
  2255. UINT ret = pShoukuanWnd->ShowModal();
  2256. if (ret == IDOK)
  2257. {
  2258. //说明收款成功了,需要进行一些后续的处理
  2259. this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "fulikazhifu");
  2260. }
  2261. m_is_show_modal_wnd = false;
  2262. delete pShoukuanWnd;
  2263. }
  2264. }
  2265. void CDiandanPageUI::StartZidingyiShoukuan(std::wstring name, std::wstring selfpay_id)
  2266. {
  2267. if (m_is_show_modal_wnd == true)
  2268. {
  2269. return;
  2270. }
  2271. if (m_cur_diandan_order.getItemNum() == 0)
  2272. {
  2273. m_pMainWnd->ShowToast(L"请先选择商品再支付");
  2274. return;
  2275. }
  2276. CZidingyiShoukuanWnd* pShoukuanWnd = new CZidingyiShoukuanWnd();
  2277. if (pShoukuanWnd != NULL)
  2278. {
  2279. m_is_show_modal_wnd = true;
  2280. m_curModalWnd = pShoukuanWnd;
  2281. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  2282. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  2283. pShoukuanWnd->CenterWindow();
  2284. std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2285. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  2286. pShoukuanWnd->InitMoney(watchValue);
  2287. //这里要对提交订单的参数进行组装,然后方便请求
  2288. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  2289. /*
  2290. if (m_is_start_catch && m_catch_string.length() == 18)
  2291. {
  2292. pShoukuanWnd->InitFukuanma(m_catch_string);
  2293. }
  2294. }*/
  2295. pShoukuanWnd->SetZidingyiName(name);
  2296. pShoukuanWnd->SetZidingyiId(selfpay_id);
  2297. UINT ret = pShoukuanWnd->ShowModal();
  2298. if (ret == IDOK)
  2299. {
  2300. //说明收款成功了,需要进行一些后续的处理
  2301. this->StartWorkAfterShoukuan(pShoukuanWnd->m_kucun_string, pShoukuanWnd->m_take_food_code, pShoukuanWnd->m_show_trade_no, "zidingyizhifu");
  2302. }
  2303. m_is_show_modal_wnd = false;
  2304. delete pShoukuanWnd;
  2305. }
  2306. }
  2307. void CDiandanPageUI::UpdateFoodStock(std::string food_stock)
  2308. {
  2309. rapidjson::Document doc;
  2310. rapidjson::Document::AllocatorType &allocator = doc.GetAllocator(); //获取分配器
  2311. Value& data = CLewaimaiJson::StringToJson(food_stock, allocator);
  2312. for (rapidjson::SizeType i = 0; i < data.Size(); ++i)
  2313. {
  2314. std::string food_id = data[i]["food_id"].GetString();
  2315. std::string stock = data[i]["stock"].GetString();
  2316. CSqlite3 sqlite;
  2317. sqlite.UpdateFoodStock(food_id, stock);
  2318. }
  2319. }
  2320. //扫描了商品条码的逻辑处理
  2321. void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
  2322. {
  2323. CSqlite3 sqlite;
  2324. CFood foodinfo;
  2325. bool ret = sqlite.GetFoodByBarcode(barcode, foodinfo);
  2326. if (ret == false)
  2327. {
  2328. //说明没找到对应的商品条码
  2329. m_pMainWnd->ShowToast(L"未找到对应的商品条码");
  2330. return;
  2331. }
  2332. //这里说明找到了,那么处理添加购物车逻辑,扫码的情况下,这里不管有没有属性,都按没属性处理,不管有没有称重都按没称重处理(以后标签秤可能会修改)
  2333. if (foodinfo.stockvalid == "1" && atof(foodinfo.stock.c_str()) < 1)
  2334. {
  2335. //库存为0了,不做任何处理
  2336. m_pMainWnd->ShowToast(L"该商品已售完");
  2337. return;
  2338. }
  2339. CDiandanOrderItem clickItem;
  2340. clickItem.food_id = foodinfo.id;
  2341. clickItem.food_name = foodinfo.name;
  2342. clickItem.type_id = foodinfo.type_id;
  2343. clickItem.price = foodinfo.price;
  2344. clickItem.is_dabao = false;
  2345. clickItem.dabao_money = foodinfo.dabao_money;
  2346. clickItem.num = "1";
  2347. if (foodinfo.member_price_used == "1")
  2348. {
  2349. clickItem.is_member_price_used = true;
  2350. }
  2351. else
  2352. {
  2353. clickItem.is_member_price_used = false;
  2354. }
  2355. //处理会员价的json
  2356. std::string member_price_json = foodinfo.member_price_json;
  2357. rapidjson::Document document;
  2358. document.Parse(member_price_json.c_str());
  2359. rapidjson::Value& member_price = document;
  2360. for (rapidjson::SizeType i = 0; i < member_price.Size(); ++i)
  2361. {
  2362. rapidjson::Value& member_price_info = member_price[i];
  2363. MemberPrice newPirce;
  2364. newPirce.id = member_price_info["id"].GetString();
  2365. newPirce.level = member_price_info["level"].GetString();
  2366. newPirce.price = member_price_info["price"].GetString();
  2367. clickItem.m_member_price.push_back(newPirce);
  2368. }
  2369. //把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
  2370. clickItem.SetFoodInfo(foodinfo);
  2371. clickItem.SetIsTaocan(false);
  2372. clickItem.is_weight = false;
  2373. clickItem.is_nature = false;
  2374. //商品没有商品属性
  2375. bool is_add_new = false;
  2376. int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
  2377. if (is_add_new)
  2378. {
  2379. //说明是新增了一项,要刷新一下购物车展示
  2380. this->AddDiandanOrderItemShow(index);
  2381. }
  2382. else
  2383. {
  2384. //没有新增,而是修改了一项
  2385. this->UpdateDiandanOrderItemShow(index);
  2386. }
  2387. }
  2388. //开始搜索某个商品名字
  2389. void CDiandanPageUI::StartSearchFood(std::string foodname)
  2390. {
  2391. //展示删除按钮
  2392. CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_food_search_clear")));
  2393. pClear->SetVisible(true);
  2394. //隐藏商品分类展示
  2395. CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
  2396. pFoodtype->SetVisible(false);
  2397. if (m_cur_type_id != "sousuo")
  2398. {
  2399. m_type_id_before_sousuo = m_cur_type_id;
  2400. }
  2401. m_cur_type_id = "sousuo";
  2402. m_sousuo_foodname = foodname;
  2403. CLabelUI* pTishi = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_food_search_tishi")));
  2404. pTishi->SetVisible(false);
  2405. this->InitFoodShow();
  2406. }
  2407. //停止搜索商品
  2408. void CDiandanPageUI::StopSerachFood()
  2409. {
  2410. //隐藏删除按钮
  2411. CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_food_search_clear")));
  2412. pClear->SetVisible(false);
  2413. //展示商品分类展示
  2414. CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
  2415. pFoodtype->SetVisible(true);
  2416. m_cur_type_id = m_type_id_before_sousuo;
  2417. CLabelUI* pTishi = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_food_search_tishi")));
  2418. pTishi->SetVisible(true);
  2419. this->InitFoodShow();
  2420. }
  2421. void CDiandanPageUI::StartWorkAfterShoukuan(std::string kucunstring, std::string take_food_code, std::string show_trade_no, std::string shoukuan_type)
  2422. {
  2423. //针对现金收款成功,单独做一个打开钱箱的判断处理
  2424. if (shoukuan_type == "xianjinzhifu")
  2425. {
  2426. std::string setting_is_diannei_xianjin_qianxiang = CSetting::GetParam("setting_is_diannei_xianjin_qianxiang");
  2427. if (setting_is_diannei_xianjin_qianxiang == "1")
  2428. {
  2429. //打开钱箱
  2430. CPosPrinter printer;
  2431. printer.OpenQianxiang();
  2432. }
  2433. }
  2434. //更新商品库存
  2435. this->UpdateFoodStock(kucunstring);
  2436. //处理打印
  2437. CDiandanOrder order = this->GetPrintOrderinfo(take_food_code, show_trade_no, shoukuan_type);
  2438. CPosPrinter printer;
  2439. printer.PrintDiandanOrder(order);
  2440. //最后才初始化页面信息
  2441. RefreshShow();
  2442. }
  2443. CDiandanOrder CDiandanPageUI::GetPrintOrderinfo(std::string take_food_code, std::string show_trade_no, std::string shoukuan_type)
  2444. {
  2445. CShopinfo shopinfo = CShopinfo::m_shopinfo;
  2446. m_cur_diandan_order.shopname = shopinfo.m_shop_name;
  2447. m_cur_diandan_order.take_food_code = take_food_code;
  2448. m_cur_diandan_order.show_trade_no = show_trade_no;
  2449. if (shoukuan_type == "weixinzhifu")
  2450. {
  2451. m_cur_diandan_order.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"微信支付");
  2452. }
  2453. else if (shoukuan_type == "huiyuanzhifu")
  2454. {
  2455. m_cur_diandan_order.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"会员支付");
  2456. }
  2457. else if (shoukuan_type == "xianjinzhifu")
  2458. {
  2459. m_cur_diandan_order.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"现金支付");
  2460. }
  2461. else if (shoukuan_type == "fulikazhifu")
  2462. {
  2463. m_cur_diandan_order.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"福利卡支付");
  2464. }
  2465. else if (shoukuan_type == "zidingyizhifu")
  2466. {
  2467. m_cur_diandan_order.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"自定义支付");
  2468. }
  2469. m_cur_diandan_order.order_from = 1;
  2470. m_cur_diandan_order.init_time = CLewaimaiTime::DatetimeToString(time(NULL));
  2471. m_cur_diandan_order.m_shangpinquan_youhui = CLewaimaiString::DoubleToString(m_shangpinquan_youhui, 2);
  2472. m_cur_diandan_order.m_cika_youhui = CLewaimaiString::DoubleToString(m_cika_youhui, 2);
  2473. m_cur_diandan_order.m_total_member_youhui = CLewaimaiString::DoubleToString(m_total_member_youhui, 2);
  2474. m_cur_diandan_order.m_zhekou_youhui = CLewaimaiString::DoubleToString(m_zhekou_youhui, 2);
  2475. m_cur_diandan_order.m_member_zhekou_youhui = CLewaimaiString::DoubleToString(m_member_zhekou_youhui, 2);
  2476. m_cur_diandan_order.m_quanyika_youhui = CLewaimaiString::DoubleToString(m_quanyika_youhui, 2);
  2477. m_cur_diandan_order.m_manjian_youhui = CLewaimaiString::DoubleToString(m_manjian_youhui, 2);
  2478. m_cur_diandan_order.m_youhuiquan_youhui = CLewaimaiString::DoubleToString(m_youhuiquan_youhui, 2);
  2479. m_cur_diandan_order.m_rengong_youhui = CLewaimaiString::DoubleToString(m_rengong_youhui, 2);
  2480. m_cur_diandan_order.m_moling_youhui = CLewaimaiString::DoubleToString(m_moling_youhui, 2);
  2481. m_cur_diandan_order.m_dabao_money = CLewaimaiString::DoubleToString(m_cur_diandan_order.getDabaoMoney(), 2);
  2482. m_cur_diandan_order.m_total_price = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
  2483. m_cur_diandan_order.m_canpai = m_canpai;
  2484. for (std::vector<CDiandanOrderItem>::iterator it = m_cur_diandan_order.m_items.begin(); it != m_cur_diandan_order.m_items.end(); it++)
  2485. {
  2486. CDiandanOrderItemPrint itemPrint;
  2487. itemPrint.m_food_name = it->getNameWanzhengShow();
  2488. itemPrint.m_quantity = it->num;
  2489. itemPrint.m_item_price = it->getSinglePrice();
  2490. itemPrint.m_type_id = it->type_id;
  2491. m_cur_diandan_order.m_items_print.push_back(itemPrint);
  2492. }
  2493. return m_cur_diandan_order;
  2494. }
  2495. void CDiandanPageUI::SetPos(RECT rc, bool bNeedInvalidate)
  2496. {
  2497. m_nPageWidth = rc.right - rc.left;
  2498. //拖动窗口的时候,更新位置
  2499. UpdateJiesuanZhifuPos();
  2500. CContainerUI::SetPos(rc, bNeedInvalidate);
  2501. }