CDiandanPageUI.cpp 96 KB

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