StaffWage.cpp 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233
  1. #include "stdafx.h"
  2. #include "StaffWage.h"
  3. #include "Global/Global.h"
  4. #include "MainFrm.h"
  5. extern CMainFrame *g_pMainWnd;
  6. #ifdef VC60
  7. #define _tstof atof
  8. #define _tstoi atoi
  9. #endif
  10. CStaffWage::CStaffWage(void)
  11. {
  12. m_strStaffName = _T("");
  13. m_strWageStartDate = _T("");
  14. m_strWageEndofDate = _T("");
  15. m_fEaryResultMoney = 0.0;
  16. }
  17. CStaffWage::~CStaffWage(void)
  18. {
  19. ClearStaffWageData();
  20. }
  21. void CStaffWage::ClearStaffWageData()
  22. {
  23. m_AryStaffDetail.RemoveAll();
  24. m_AryReceiptRecords.RemoveAll();
  25. m_AryOrderDetail.RemoveAll();
  26. m_AryOtherIncomeRecord.RemoveAll();
  27. m_ArySceneryWorkRecord.RemoveAll();
  28. m_AryMyWorkRecord.RemoveAll();
  29. m_AryDigitalWorkRecord.RemoveAll();
  30. m_AryWageType.RemoveAll();
  31. m_AryWageTypeMoney.RemoveAll();
  32. m_fEaryResultMoney = 0.0;
  33. }
  34. BOOL CStaffWage::GetStaffWageData(IN CString strStaffName, IN CString strWageStartDate, IN CString strWageEndofDate)
  35. {
  36. m_strStaffName = strStaffName;
  37. m_strWageStartDate = strWageStartDate;
  38. m_strWageEndofDate = strWageEndofDate;
  39. CString strTemp = _T("");
  40. CString strFilter = _T("");
  41. // 0.case 34:查询员工;
  42. strTemp.Format(_T("name = '%s' and dimission='在职';"), m_strStaffName);
  43. strFilter += strTemp;
  44. // 1.case 242:查询所有收款详情;
  45. strTemp.Format(_T("(Paydate >= '%s' and Paydate <= '%s' ) or (PhotoStatus = 'OK' and PhotogOfPaydate >= '%s' and PhotogOfPaydate <= '%s');"), strWageStartDate, strWageEndofDate, strWageStartDate, strWageEndofDate);
  46. strFilter += strTemp;
  47. #ifdef _DEBUG
  48. WriteTextLog(_T("case 242:%s"), strTemp);
  49. #endif
  50. // 2.case 243:查询收款订单;
  51. strTemp.Format(
  52. _T("([ren] = '%s' or [ren2] = '%s' or")
  53. _T(" [waiter1] = '%s' or [waiter12] = '%s' or [waiter13] = '%s' or [waiter14] = '%s' or")
  54. _T(" [waiter2] = '%s' or [waiter22] = '%s' or [waiter23] = '%s' or [waiter24] = '%s' or")
  55. _T(" [waiter3] = '%s' or [waiter4] = '%s' or [waiter5] = '%s' or")
  56. _T(" [waiter6] = '%s' or [waiter7] = '%s' or [waiter8] = '%s' or [waiter9] = '%s')")
  57. _T(" and id in (select distinct id from Payroll where (Paydate >= '%s' and Paydate <= '%s') or (PhotoStatus = 'OK' and PhotogOfPaydate >= '%s' and PhotogOfPaydate <= '%s'));"),
  58. m_strStaffName, // 主门市;
  59. m_strStaffName, // 副门市;
  60. m_strStaffName, // 主摄影;
  61. m_strStaffName, // 摄影2;
  62. m_strStaffName, // 摄影3;
  63. m_strStaffName, // 摄影4;
  64. m_strStaffName, // 主化妆;
  65. m_strStaffName, // 化妆2;
  66. m_strStaffName, // 化妆3;
  67. m_strStaffName, // 化妆4;
  68. m_strStaffName, // 选片师;
  69. m_strStaffName, // 设计师;
  70. m_strStaffName, // 初修师;
  71. m_strStaffName, // 接单人;
  72. m_strStaffName, // 精修师;
  73. m_strStaffName, // 看设计人;
  74. m_strStaffName, // ???;
  75. strWageStartDate, strWageEndofDate, strWageStartDate, strWageEndofDate);
  76. strFilter += strTemp;
  77. #ifdef _DEBUG
  78. WriteTextLog(_T("case 243:%s"), strTemp);
  79. #endif
  80. // 3.case 198:查询其他收入;
  81. strTemp.Format(
  82. _T("[date] >= '%s' and [date] <= '%s' and [renyuan3] = '%s';"),
  83. strWageStartDate, strWageEndofDate, strStaffName);
  84. strFilter += strTemp;
  85. // 4.case 142:查询我的工作-mywork;
  86. strTemp.Format(_T("datetime >= '%s' and datetime <= '%s' and name = '%s';"),strWageStartDate, strWageEndofDate, strStaffName);
  87. strFilter += strTemp;
  88. // 5.case 192:查询摄影师景点工作;
  89. strTemp.Format(_T("[date] >= '%s' and [date] <= '%s' and [status] = 'OK' and ([waiter1] = '%s' or [waiter12] = '%s' or [waiter2] = '%s' or [waiter22] = '%s');"),
  90. strWageStartDate, strWageEndofDate, strStaffName,strStaffName,strStaffName,strStaffName);
  91. strFilter += strTemp;
  92. // 6.case 193:查询数码工作记录;
  93. strTemp.Format(
  94. _T("([time8] >='%s' and [time8]<='%s' and [status4]='OK' and [waiter5]='%s') or ")
  95. _T("([time9] >='%s' and [time9]<='%s' and [status6]='OK' and [waiter7]='%s') or ")
  96. _T("([time10] >='%s' and [time10]<='%s' and [status5]='OK' and [waiter4]='%s');"),
  97. strWageStartDate, strWageEndofDate, strStaffName,
  98. strWageStartDate, strWageEndofDate, strStaffName,
  99. strWageStartDate, strWageEndofDate, strStaffName);
  100. strFilter += strTemp;
  101. g_sendhead.code[0] = 34;
  102. g_sendhead.code[1] = 242;
  103. g_sendhead.code[2] = 243;
  104. g_sendhead.code[3] = 198;
  105. g_sendhead.code[4] = 142;
  106. g_sendhead.code[5] = 192;
  107. g_sendhead.code[6] = 193;
  108. g_sendhead.tabcount = 7;
  109. g_sendhead.bsql = FALSE;
  110. g_pMainWnd->ProcessChatMessageRequest2(strFilter);
  111. if ( !g_bSendOK )
  112. return FALSE;
  113. ClearStaffWageData();
  114. DataToArray(&m_AryStaffDetail, &m_AryReceiptRecords, &m_AryOrderDetail, &m_AryOtherIncomeRecord, &m_AryMyWorkRecord, &m_ArySceneryWorkRecord, &m_AryDigitalWorkRecord);
  115. #ifdef _DEBUG
  116. int nSize = m_AryReceiptRecords.GetSize();
  117. for (int i = 0; i < nSize; i++ )
  118. {
  119. WriteTextLog(_T("\n"));
  120. for ( int j = 0; j < m_AryReceiptRecords.ElementAt(i).GetSize(); j++ )
  121. {
  122. WriteTextLog(_T("%s"), m_AryReceiptRecords.ElementAt(i).ElementAt(j));
  123. }
  124. }
  125. #endif
  126. return TRUE;
  127. }
  128. /************************************************************************/
  129. /* 函数:[1/3/2017 IT];
  130. /* 描述:摄影师和化妆师的前期业绩;
  131. /* 参数:;
  132. /* [IN] :;
  133. /* [OUT] :;
  134. /* [IN/OUT] :;
  135. /* 返回:void;
  136. /* 注意:;
  137. /* 示例:;
  138. /*
  139. /* 修改:;
  140. /* 日期:;
  141. /* 内容:;
  142. /************************************************************************/
  143. void CStaffWage::GetPhotographerAndMakeupArtistServeRecord(IN CString strOrderNum, IN BOOL &bPhotographer, IN BOOL &bMakeupArtist, IN FLOAT &fPhotographerPercent, IN FLOAT &fMakeupArtistPercent)
  144. {
  145. bPhotographer = bMakeupArtist = FALSE;
  146. INT nSize = m_AryOrderDetail.GetSize();
  147. for ( int i = 0; i < nSize; i++ )
  148. {
  149. // 是否指定要查询的订单;
  150. if ( m_AryOrderDetail.ElementAt(i).ElementAt(0) == strOrderNum )
  151. {
  152. // 主摄影师、摄影师2~4只能有一个;
  153. if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(1) )
  154. {// 是否是有主摄影师服务提成;
  155. bPhotographer = TRUE;
  156. // 获取折扣;
  157. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(5))/100.0;
  158. if ( fPhotographerPercent == 0.0 )
  159. fPhotographerPercent = 1.0;
  160. }
  161. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(2) )
  162. {// 是否是有摄影师2服务提成;
  163. bPhotographer = TRUE;
  164. // 获取折扣;
  165. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(6))/100.0;
  166. if ( fPhotographerPercent == 0.0 )
  167. fPhotographerPercent = 1.0;
  168. }
  169. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(3) )
  170. {// 是否是有摄影师3服务提成;
  171. bPhotographer = TRUE;
  172. // 获取折扣;
  173. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(7))/100.0;
  174. if ( fPhotographerPercent == 0.0 )
  175. fPhotographerPercent = 1.0;
  176. }
  177. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(4) )
  178. {// 是否是有摄影师4服务提成;
  179. bPhotographer = TRUE;
  180. // 获取折扣;
  181. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(8))/100.0;
  182. if ( fPhotographerPercent == 0.0 )
  183. fPhotographerPercent = 1.0;
  184. }
  185. // 主化妆师、化妆师2~4只能有一个;
  186. if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(9) )
  187. {// 是否是主化妆师服务记录;
  188. bMakeupArtist = TRUE;
  189. // 获取折扣;
  190. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(13))/100.0;
  191. if ( fMakeupArtistPercent == 0.0 )
  192. fMakeupArtistPercent = 1.0;
  193. }
  194. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(10) )
  195. {// 是否是有化妆师2服务提成;
  196. bMakeupArtist = TRUE;
  197. // 获取折扣;
  198. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(14))/100.0;
  199. if ( fMakeupArtistPercent == 0.0 )
  200. fMakeupArtistPercent = 1.0;
  201. }
  202. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(11) )
  203. {// 是否是有化妆师3服务提成;
  204. bMakeupArtist = TRUE;
  205. // 获取折扣;
  206. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(15))/100.0;
  207. if ( fMakeupArtistPercent == 0.0 )
  208. fMakeupArtistPercent = 1.0;
  209. }
  210. else if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(12) )
  211. {// 是否是有化妆师4服务提成;
  212. bMakeupArtist = TRUE;
  213. // 获取折扣;
  214. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(16))/100.0;
  215. if ( fMakeupArtistPercent == 0.0 )
  216. fMakeupArtistPercent = 1.0;
  217. }
  218. break;
  219. }
  220. }
  221. }
  222. /************************************************************************/
  223. /* 函数:[1/3/2017 IT];
  224. /* 描述:门市提成;
  225. /* 参数:;
  226. /* [IN] :;
  227. /* [OUT] :;
  228. /* [IN/OUT] :;
  229. /* 返回:void;
  230. /* 注意:;
  231. /* 示例:;
  232. /*
  233. /* 修改:;
  234. /* 日期:;
  235. /* 内容:;
  236. /************************************************************************/
  237. void CStaffWage::GetSalesServerRecord(IN CString strOrderNum, IN BOOL &bSalesperson1, IN BOOL &bSalesperson2, IN FLOAT &fbSalesperson1Percent, IN FLOAT &fbSalesperson2Percent)
  238. {
  239. bSalesperson1 = bSalesperson2 = FALSE;
  240. INT nSize = m_AryOrderDetail.GetSize();
  241. for ( int i = 0; i < nSize; i++ )
  242. {
  243. // 是否指定要查询的订单;
  244. if ( m_AryOrderDetail.ElementAt(i).ElementAt(0) == strOrderNum )
  245. {
  246. // 主门市;
  247. if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(17) )
  248. {// 是否是主门市提成;
  249. bSalesperson1 = TRUE;
  250. // 获取折扣;
  251. fbSalesperson1Percent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(19))/100.0;
  252. if ( fbSalesperson1Percent == 0.0 )
  253. fbSalesperson1Percent = 1.0;
  254. }
  255. // 副门市;
  256. if ( m_strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(18) )
  257. {// 是否是副门市提成;
  258. bSalesperson2 = TRUE;
  259. // 获取折扣;
  260. fbSalesperson2Percent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(20))/100.0;
  261. if ( fbSalesperson2Percent == 0.0 )
  262. fbSalesperson2Percent = 1.0;
  263. }
  264. break;
  265. }
  266. }
  267. }
  268. BOOL CStaffWage::GetEarlyResults(IN CArray<CStringArray, CStringArray>& AryEarlyResult) // 获取前期业绩;
  269. {
  270. INT nSize = m_AryReceiptRecords.GetSize();
  271. AryEarlyResult.SetSize(nSize*11, 1);
  272. INT i = 0;
  273. INT nIndex = -1;
  274. INT nArypos = 0;
  275. CString strMoney;
  276. BOOL bPhotographer,bMakeupArtist;
  277. FLOAT fPhotographer, fMakeupArtist;
  278. BOOL bSalesperson1,bSalesperson2;
  279. FLOAT fbSalesperson1Percent, fbSalesperson2Percent;
  280. for ( i = 0; i < nSize; i++ )
  281. {
  282. // 前期业绩;
  283. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(5) == _T("3") || m_AryReceiptRecords.ElementAt(i).ElementAt(5) == _T("4"))
  284. {
  285. fPhotographer = fMakeupArtist = 0.0;
  286. bPhotographer = bMakeupArtist = FALSE;
  287. // 1.这笔收款,员工是否有摄影+化妆服务项;
  288. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(9) == _T("OK") && m_AryReceiptRecords.ElementAt(i).ElementAt(10) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(10) <= m_strWageEndofDate )
  289. {
  290. GetPhotographerAndMakeupArtistServeRecord(m_AryReceiptRecords.ElementAt(i).ElementAt(0), bPhotographer, bMakeupArtist, fPhotographer, fMakeupArtist);
  291. // ElementAt(56):工资设置:摄影师也有前期提成;
  292. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(56)) && bPhotographer )
  293. {// 摄影前期;
  294. // 按提成百分比计算;
  295. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fPhotographer);
  296. // 累加前期业绩;
  297. m_fEaryResultMoney += _tstof(strMoney);
  298. // 累加摄影工资类型金额;
  299. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_PHOTOGRAPHER)) == -1 )
  300. {
  301. m_AryWageType.Add(WAGE_EARLY_PHOTOGRAPHER);
  302. m_AryWageTypeMoney.Add(_tstof(strMoney));
  303. }
  304. else
  305. {
  306. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  307. }
  308. // 保存该类型工资记录;
  309. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  310. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  311. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(10)); // 工资日期;
  312. AryEarlyResult.ElementAt(nArypos).Add(WAGE_EARLY_PHOTOGRAPHER); // 工资类型;
  313. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  314. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  315. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  316. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  317. nArypos++;
  318. }
  319. // ElementAt(57):工资设置:化妆师也有前期提成;
  320. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(57)) && bMakeupArtist )
  321. {// 化妆前期;
  322. // 按提成百分比计算;
  323. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fMakeupArtist);
  324. // 累加前期业绩;
  325. m_fEaryResultMoney += _tstof(strMoney);
  326. // 累加摄影工资类型金额;
  327. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_MAKEUPARTIST)) == -1 )
  328. {
  329. m_AryWageType.Add(WAGE_EARLY_MAKEUPARTIST);
  330. m_AryWageTypeMoney.Add(_tstof(strMoney));
  331. }
  332. else
  333. {
  334. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  335. }
  336. // 保存该类型工资记录;
  337. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  338. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  339. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(10)); // 工资日期;
  340. AryEarlyResult.ElementAt(nArypos).Add(WAGE_EARLY_MAKEUPARTIST); // 工资类型;
  341. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  342. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  343. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  344. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  345. nArypos++;
  346. }
  347. }
  348. // 2.这笔收款,员工是否有门市服务项;
  349. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate )
  350. {
  351. bSalesperson1 = bSalesperson2 = 0.0;
  352. fbSalesperson1Percent = fbSalesperson2Percent = FALSE;
  353. GetSalesServerRecord(m_AryReceiptRecords.ElementAt(i).ElementAt(0), bSalesperson1, bSalesperson2, fbSalesperson1Percent, fbSalesperson2Percent);
  354. if ( bSalesperson1 )
  355. {// 主门市;
  356. // 按提成百分比计算;
  357. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fbSalesperson1Percent);
  358. // 累加前期业绩;
  359. m_fEaryResultMoney += _tstof(strMoney);
  360. // 累加门市类型金额;
  361. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_SALES)) == -1 )
  362. {
  363. m_AryWageType.Add(WAGE_EARLY_SALES);
  364. m_AryWageTypeMoney.Add(_tstof(strMoney));
  365. }
  366. else
  367. {
  368. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  369. }
  370. // 保存该类型工资记录;
  371. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  372. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  373. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(7)); // 工资日期;
  374. AryEarlyResult.ElementAt(nArypos).Add(WAGE_EARLY_SALES); // 工资类型;
  375. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  376. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  377. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  378. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  379. nArypos++;
  380. }
  381. if ( bSalesperson2 )
  382. {// 副门市;
  383. // 按提成百分比计算;
  384. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fbSalesperson2Percent);
  385. // 累加前期业绩;
  386. m_fEaryResultMoney += _tstof(strMoney);
  387. // 累加门市类型金额;
  388. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_SALES)) == -1 )
  389. {
  390. m_AryWageType.Add(WAGE_EARLY_SALES);
  391. m_AryWageTypeMoney.Add(_tstof(strMoney));
  392. }
  393. else
  394. {
  395. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  396. }
  397. // 保存该类型工资记录;
  398. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  399. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  400. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(7)); // 工资日期;
  401. AryEarlyResult.ElementAt(nArypos).Add(WAGE_EARLY_SALES); // 工资类型;
  402. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  403. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  404. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  405. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  406. nArypos++;
  407. }
  408. }
  409. }
  410. // 选片二销;
  411. else if ( m_AryReceiptRecords.ElementAt(i).ElementAt(12) == _T("选片二销") )
  412. {
  413. bPhotographer = bMakeupArtist = FALSE;
  414. fPhotographer = fMakeupArtist = 0.0;
  415. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(9) == _T("OK") && m_AryReceiptRecords.ElementAt(i).ElementAt(10) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(10) <= m_strWageEndofDate )
  416. {
  417. GetPhotographerAndMakeupArtistServeRecord(m_AryReceiptRecords.ElementAt(i).ElementAt(0), bPhotographer, bMakeupArtist, fPhotographer, fMakeupArtist);
  418. // ElementAt(41):工资设置:摄影师也有选片二销提成;
  419. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(41)) && bPhotographer )
  420. {
  421. // 按提成百分比计算;
  422. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fPhotographer);
  423. // 累加选片二销业绩;
  424. m_fSelectMoney += _tstof(strMoney);
  425. // 累加摄影也有选片二销工资类型金额;
  426. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_PHOTOGRAPHER)) == -1 )
  427. {
  428. m_AryWageType.Add(WAGE_SEL_PHOTOGRAPHER);
  429. m_AryWageTypeMoney.Add(_tstof(strMoney));
  430. }
  431. else
  432. {
  433. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  434. }
  435. // 保存该类型工资记录;
  436. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  437. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(10)); // 工资日期;
  438. AryEarlyResult.ElementAt(nArypos).Add(WAGE_SEL_PHOTOGRAPHER); // 工资类型;
  439. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  440. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  441. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  442. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  443. nArypos++;
  444. }
  445. // ElementAt(42):工资设置:化妆师或引导师也有选片二销提成;
  446. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(42)) && bMakeupArtist )
  447. {
  448. // 按提成百分比计算;
  449. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fMakeupArtist);
  450. // 累加选片二销业绩;
  451. m_fSelectMoney += _tstof(strMoney);
  452. // 累加化妆也有选片二销工资类型金额;
  453. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_MAKEUPARTIST)) == -1 )
  454. {
  455. m_AryWageType.Add(WAGE_SEL_MAKEUPARTIST);
  456. m_AryWageTypeMoney.Add(_tstof(strMoney));
  457. }
  458. else
  459. {
  460. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  461. }
  462. // 保存该类型工资记录;
  463. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  464. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(10)); // 工资日期;
  465. AryEarlyResult.ElementAt(nArypos).Add(WAGE_SEL_MAKEUPARTIST); // 工资类型;
  466. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  467. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  468. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  469. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  470. nArypos++;
  471. }
  472. }
  473. // 这笔收款,员工是否还是本次选片二销的选片师;
  474. if ( m_strStaffName == m_AryReceiptRecords.ElementAt(i).ElementAt(11) && m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate )
  475. {
  476. // 按提成百分比计算;
  477. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) );
  478. // 累加选片二销业绩;
  479. m_fSelectMoney += _tstof(strMoney);
  480. // 累加化妆也有选片二销工资类型金额;
  481. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_SALES)) == -1 )
  482. {
  483. m_AryWageType.Add(WAGE_SEL_SALES);
  484. m_AryWageTypeMoney.Add(_tstof(strMoney));
  485. }
  486. else
  487. {
  488. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  489. }
  490. // 保存该类型工资记录;
  491. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  492. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  493. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(7)); // 工资日期;
  494. AryEarlyResult.ElementAt(nArypos).Add(WAGE_SEL_SALES); // 工资类型;
  495. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  496. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  497. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  498. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  499. nArypos++;
  500. }
  501. }
  502. // 其他订单二销;
  503. else
  504. {
  505. // 这笔收款,员工是否还是本次其他订单二销的促成者;
  506. if ( m_strStaffName == m_AryReceiptRecords.ElementAt(i).ElementAt(11) && m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate )
  507. {
  508. // 获取提成;
  509. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)));
  510. // 累加选片二销业绩;
  511. m_fSelectMoney += _tstof(strMoney);
  512. // 累加化妆也有选片二销工资类型金额;
  513. if ( (nIndex = FindArray(&m_AryWageType, m_AryReceiptRecords.ElementAt(i).ElementAt(12))) == -1 )
  514. {
  515. m_AryWageType.Add(m_AryReceiptRecords.ElementAt(i).ElementAt(12));
  516. m_AryWageTypeMoney.Add(_tstof(strMoney));
  517. }
  518. else
  519. {
  520. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  521. }
  522. // 保存该类型工资记录;
  523. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  524. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  525. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(7)); // 工资日期;
  526. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(12)); // 工资类型;
  527. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  528. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(2)); // 顾客2姓名;
  529. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(3)); // 套系类型;
  530. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  531. nArypos++;
  532. }
  533. }
  534. }
  535. // 其他收入业绩(散客消费);
  536. nSize = m_AryOtherIncomeRecord.GetSize();
  537. for ( i = 0; i < nSize; i++ )
  538. {
  539. strMoney.Format(_T("%0.2f"), _tstof(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(4)));
  540. //if ( m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3) == WAGE_SEC_PHOTOGRAPHER)
  541. // 累加化妆也有选片二销工资类型金额;
  542. if ( (nIndex = FindArray(&m_AryWageType, m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3))) == -1 )
  543. {
  544. m_AryWageType.Add(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3));
  545. m_AryWageTypeMoney.Add(_tstof(strMoney));
  546. }
  547. else
  548. {
  549. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  550. }
  551. // 保存该类型工资记录;
  552. AryEarlyResult.ElementAt(nArypos).RemoveAll();
  553. AryEarlyResult.ElementAt(nArypos).Add(strMoney); // 收款金额;
  554. AryEarlyResult.ElementAt(nArypos).Add(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(5)); // 工资日期;
  555. AryEarlyResult.ElementAt(nArypos).Add(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3)); // 工资类型;
  556. AryEarlyResult.ElementAt(nArypos).Add(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(1)); // 顾客1姓名;
  557. AryEarlyResult.ElementAt(nArypos).Add(_T("")); // 顾客2姓名;
  558. AryEarlyResult.ElementAt(nArypos).Add(_T("")); // 套系类型;
  559. AryEarlyResult.ElementAt(nArypos).Add(m_AryReceiptRecords.ElementAt(i).ElementAt(13)); // 付款方式;
  560. nArypos++;
  561. }
  562. AryEarlyResult.SetSize(nArypos);
  563. return FALSE;
  564. }
  565. #ifndef ALL_STAFF_WAGE
  566. CString CStaffWage::GetRule(CString name)
  567. {
  568. CString oldrule = g_cominfoarray.ElementAt(0).ElementAt(77);
  569. CString header = "$" + name + ":";
  570. CString left, right;
  571. int pos = oldrule.Find(header);
  572. if (pos != -1)
  573. {
  574. right = oldrule.Right(oldrule.GetLength() - pos - header.GetLength());
  575. pos = right.Find("$");
  576. if (pos != -1)
  577. right = right.Left(pos);
  578. right = header + right;
  579. return right;
  580. }
  581. return "";
  582. }
  583. float CStaffWage::GetSalaryFromRule(float fmoney, CString rule)
  584. {
  585. float fresult = 0;
  586. int pos = rule.Find(":");
  587. if (pos == -1)return 0;
  588. rule = rule.Right(rule.GetLength() - pos - 1);
  589. CStringArray rulearray;
  590. pos = rule.Find(";");
  591. while (pos != -1)
  592. {
  593. rulearray.Add(rule.Left(pos));
  594. rule = rule.Right(rule.GetLength() - pos - 1);
  595. pos = rule.Find(";");
  596. }
  597. BOOL check1 = atoi(rule);
  598. if (rulearray.GetSize() == 0)return 0;
  599. CString str, temp;
  600. int money1, money2;
  601. float frate;
  602. if (check1 == 0)
  603. {
  604. for (int i = 0; i < rulearray.GetSize(); i++)
  605. {
  606. temp = rulearray.ElementAt(i);
  607. int pos = temp.Find(" ");
  608. temp = temp.Left(pos);
  609. pos = temp.Find("-");
  610. money1 = atoi(temp.Left(pos));
  611. money2 = atoi(temp.Right(temp.GetLength() - pos - 1));
  612. if ((i == rulearray.GetSize() - 1) || (fmoney >= money1 && fmoney <= money2))
  613. {
  614. temp = rulearray.ElementAt(i);
  615. pos = temp.Find(":");
  616. temp = temp.Right(temp.GetLength() - pos - 1);
  617. temp.TrimRight("%");
  618. frate = atof(temp) / 100.0;
  619. fresult = frate*fmoney;
  620. return fresult;
  621. }
  622. }
  623. }
  624. else//////
  625. {
  626. for (int i = 0; i < rulearray.GetSize(); i++)
  627. {
  628. temp = rulearray.ElementAt(i);
  629. int pos = temp.Find(" ");
  630. temp = temp.Left(pos);
  631. pos = temp.Find("-");
  632. money1 = atoi(temp.Left(pos));
  633. money2 = atoi(temp.Right(temp.GetLength() - pos - 1));
  634. if ((i == rulearray.GetSize() - 1) || (fmoney >= money1 && fmoney <= money2))
  635. {
  636. temp = rulearray.ElementAt(i);
  637. pos = temp.Find(":");
  638. temp = temp.Right(temp.GetLength() - pos - 1);
  639. temp.TrimRight("%");
  640. frate = atof(temp) / 100.0;
  641. float dtmoney = fmoney - money1;
  642. fresult += frate*dtmoney;
  643. if (i == 0)//只有一条规则
  644. {
  645. fresult = frate*fmoney;
  646. return fresult;
  647. }
  648. while (i)
  649. {
  650. i--;
  651. temp = rulearray.ElementAt(i);
  652. pos = temp.Find(" ");
  653. temp = temp.Left(pos);
  654. pos = temp.Find("-");
  655. money1 = atoi(temp.Left(pos));
  656. money2 = atoi(temp.Right(temp.GetLength() - pos - 1));
  657. temp = rulearray.ElementAt(i);
  658. pos = temp.Find(":");
  659. temp = temp.Right(temp.GetLength() - pos - 1);
  660. temp.TrimRight("%");
  661. frate = atof(temp) / 100.0;
  662. dtmoney = money2 - money1;
  663. fresult += frate*dtmoney;
  664. }
  665. return fresult;
  666. }
  667. }
  668. }
  669. return fresult;
  670. }
  671. void CStaffWage::GetPhotographerAndMakeupArtistServeRecord(IN CString strStaffName, IN CString strOrderNum, IN BOOL &bPhotographer, IN BOOL &bMakeupArtist, IN FLOAT &fPhotographerPercent, IN FLOAT &fMakeupArtistPercent)
  672. {
  673. bPhotographer = bMakeupArtist = FALSE;
  674. INT nSize = m_AryOrderDetail.GetSize();
  675. for ( int i = 0; i < nSize; i++ )
  676. {
  677. // 是否指定要查询的订单;
  678. if ( m_AryOrderDetail.ElementAt(i).ElementAt(0) == strOrderNum )
  679. {
  680. // 主摄影师、摄影师2~4只能有一个;
  681. if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(1) )
  682. {// 是否是有主摄影师服务提成;
  683. bPhotographer = TRUE;
  684. // 获取折扣;
  685. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(5))/100.0;
  686. if ( fPhotographerPercent == 0.0 )
  687. fPhotographerPercent = 1.0;
  688. }
  689. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(2) )
  690. {// 是否是有摄影师2服务提成;
  691. bPhotographer = TRUE;
  692. // 获取折扣;
  693. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(6))/100.0;
  694. if ( fPhotographerPercent == 0.0 )
  695. fPhotographerPercent = 1.0;
  696. }
  697. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(3) )
  698. {// 是否是有摄影师3服务提成;
  699. bPhotographer = TRUE;
  700. // 获取折扣;
  701. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(7))/100.0;
  702. if ( fPhotographerPercent == 0.0 )
  703. fPhotographerPercent = 1.0;
  704. }
  705. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(4) )
  706. {// 是否是有摄影师4服务提成;
  707. bPhotographer = TRUE;
  708. // 获取折扣;
  709. fPhotographerPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(8))/100.0;
  710. if ( fPhotographerPercent == 0.0 )
  711. fPhotographerPercent = 1.0;
  712. }
  713. // 主化妆师、化妆师2~4只能有一个;
  714. if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(9) )
  715. {// 是否是主化妆师服务记录;
  716. bMakeupArtist = TRUE;
  717. // 获取折扣;
  718. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(13))/100.0;
  719. if ( fMakeupArtistPercent == 0.0 )
  720. fMakeupArtistPercent = 1.0;
  721. }
  722. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(10) )
  723. {// 是否是有化妆师2服务提成;
  724. bMakeupArtist = TRUE;
  725. // 获取折扣;
  726. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(14))/100.0;
  727. if ( fMakeupArtistPercent == 0.0 )
  728. fMakeupArtistPercent = 1.0;
  729. }
  730. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(11) )
  731. {// 是否是有化妆师3服务提成;
  732. bMakeupArtist = TRUE;
  733. // 获取折扣;
  734. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(15))/100.0;
  735. if ( fMakeupArtistPercent == 0.0 )
  736. fMakeupArtistPercent = 1.0;
  737. }
  738. else if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(12) )
  739. {// 是否是有化妆师4服务提成;
  740. bMakeupArtist = TRUE;
  741. // 获取折扣;
  742. fMakeupArtistPercent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(16))/100.0;
  743. if ( fMakeupArtistPercent == 0.0 )
  744. fMakeupArtistPercent = 1.0;
  745. }
  746. break;
  747. }
  748. }
  749. }
  750. void CStaffWage::GetSalesServerRecord(IN CString strStaffName, IN CString strOrderNum, IN BOOL &bSalesperson1, IN BOOL &bSalesperson2, IN FLOAT &fbSalesperson1Percent, IN FLOAT &fbSalesperson2Percent)
  751. {
  752. bSalesperson1 = bSalesperson2 = FALSE;
  753. INT nSize = m_AryOrderDetail.GetSize();
  754. for ( int i = 0; i < nSize; i++ )
  755. {
  756. // 是否指定要查询的订单;
  757. if ( m_AryOrderDetail.ElementAt(i).ElementAt(0) == strOrderNum )
  758. {
  759. // 主门市;
  760. if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(17) )
  761. {// 是否是主门市提成;
  762. bSalesperson1 = TRUE;
  763. // 获取折扣;
  764. fbSalesperson1Percent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(19))/100.0;
  765. if ( fbSalesperson1Percent == 0.0 )
  766. fbSalesperson1Percent = 1.0;
  767. }
  768. // 副门市;
  769. if ( strStaffName == m_AryOrderDetail.ElementAt(i).ElementAt(18) )
  770. {// 是否是副门市提成;
  771. bSalesperson2 = TRUE;
  772. // 获取折扣;
  773. fbSalesperson2Percent = _tstof(m_AryOrderDetail.ElementAt(i).ElementAt(20))/100.0;
  774. if ( fbSalesperson2Percent == 0.0 )
  775. fbSalesperson2Percent = 1.0;
  776. }
  777. break;
  778. }
  779. }
  780. }
  781. BOOL CStaffWage::GetAllStaffWageData(IN CString strWageStartDate, IN CString strWageEndofDate)
  782. {
  783. m_strWageStartDate = strWageStartDate;
  784. m_strWageEndofDate = strWageEndofDate;
  785. CString strTemp = _T("");
  786. CString strFilter = _T("");
  787. // case 34:查询员工;
  788. strTemp.Format(_T("dimission='在职';"));
  789. strFilter += strTemp;
  790. // case 242:查询所有收款详情;
  791. strTemp.Format(_T("(Paydate >= '%s' and Paydate <= '%s' ) or (PhotoStatus = 'OK' and PhotogOfPaydate >= '%s' and PhotogOfPaydate <= '%s');"), strWageStartDate, strWageEndofDate, strWageStartDate, strWageEndofDate);
  792. strFilter += strTemp;
  793. // case 243:查询收款订单;
  794. strTemp.Format(_T("id in (select distinct id from Payroll where (Paydate >= '%s' and Paydate <= '%s') or (PhotoStatus = 'OK' and PhotogOfPaydate >= '%s' and PhotogOfPaydate <= '%s'));"),
  795. strWageStartDate,
  796. strWageEndofDate,
  797. strWageStartDate,
  798. strWageEndofDate);
  799. strFilter += strTemp;
  800. #ifdef _DEBUG
  801. WriteTextLog(_T("case 243:%s"), strTemp);
  802. #endif
  803. // case 198:查询其他收入;
  804. strTemp.Format(_T("[date] >= '%s' and [date] <= '%s';"), strWageStartDate, strWageEndofDate);
  805. strFilter += strTemp;
  806. // case 142:查询我的工作;
  807. strTemp.Format(_T("datetime >= '%s' and datetime <= '%s' ;"),strWageStartDate, strWageEndofDate);
  808. strFilter += strTemp;
  809. // case 192:查询摄影师景点工作;
  810. strTemp.Format(_T("[date] >= '%s' and [date] <= '%s' and [status] = 'OK';"),
  811. strWageStartDate, strWageEndofDate);
  812. strFilter += strTemp;
  813. // case 193:查询数码工作记录;
  814. strTemp.Format(
  815. _T("([time8] >='%s' and [time8]<='%s' and [status4]='OK') or ")
  816. _T("([time9] >='%s' and [time9]<='%s' and [status6]='OK') or ")
  817. _T("([time10] >='%s' and [time10]<='%s' and [status5]='OK');"),
  818. strWageStartDate, strWageEndofDate,
  819. strWageStartDate, strWageEndofDate,
  820. strWageStartDate, strWageEndofDate);
  821. strFilter += strTemp;
  822. // 7. case 146:计件式提成比例;
  823. strFilter += _T(";");
  824. g_sendhead.code[0] = 34;
  825. g_sendhead.code[1] = 242;
  826. g_sendhead.code[2] = 243;
  827. g_sendhead.code[3] = 198;
  828. g_sendhead.code[4] = 142;
  829. g_sendhead.code[5] = 192;
  830. g_sendhead.code[6] = 193;
  831. g_sendhead.code[7] = 146;
  832. g_sendhead.tabcount = 8;
  833. g_sendhead.bsql = FALSE;
  834. g_pMainWnd->ProcessChatMessageRequest2(strFilter);
  835. if ( !g_bSendOK )
  836. return FALSE;
  837. ClearStaffWageData();
  838. DataToArray(&m_AryStaffDetail, &m_AryReceiptRecords, &m_AryOrderDetail, &m_AryOtherIncomeRecord, &m_AryMyWorkRecord, &m_ArySceneryWorkRecord, &m_AryDigitalWorkRecord, &m_AryWorkrate);
  839. return TRUE;
  840. }
  841. BOOL CStaffWage::GetEarlyResults(IN CString strStaffName)
  842. {
  843. INT i = 0;
  844. INT nSize = m_AryReceiptRecords.GetSize();
  845. INT nIndex = -1;
  846. INT nArypos = 0;
  847. CString strMoney;
  848. BOOL bPhotographer,bMakeupArtist;
  849. FLOAT fPhotographer, fMakeupArtist;
  850. BOOL bSalesperson1,bSalesperson2;
  851. FLOAT fbSalesperson1Percent, fbSalesperson2Percent;
  852. m_AryWageType.RemoveAll();
  853. m_AryWageTypeMoney.RemoveAll();
  854. for ( i = 0; i < nSize; i++ )
  855. {
  856. // 前期业绩;
  857. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(5) == _T("3") || m_AryReceiptRecords.ElementAt(i).ElementAt(5) == _T("4"))
  858. {
  859. fPhotographer = fMakeupArtist = 0.0;
  860. bPhotographer = bMakeupArtist = FALSE;
  861. // 1.这笔收款,员工是否有摄影+化妆服务项;
  862. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(9) == _T("OK") && m_AryReceiptRecords.ElementAt(i).ElementAt(10) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(10) <= m_strWageEndofDate )
  863. {
  864. GetPhotographerAndMakeupArtistServeRecord(strStaffName, m_AryReceiptRecords.ElementAt(i).ElementAt(0), bPhotographer, bMakeupArtist, fPhotographer, fMakeupArtist);
  865. // ElementAt(56):工资设置:摄影师也有前期提成;
  866. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(56)) && bPhotographer )
  867. {// 摄影前期;
  868. // 按提成百分比计算;
  869. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fPhotographer);
  870. // 累加前期业绩;
  871. m_fEaryResultMoney += _tstof(strMoney);
  872. // 累加摄影工资类型金额;
  873. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_PHOTOGRAPHER)) == -1 )
  874. {
  875. m_AryWageType.Add(WAGE_EARLY_PHOTOGRAPHER);
  876. m_AryWageTypeMoney.Add(_tstof(strMoney));
  877. }
  878. else
  879. {
  880. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  881. }
  882. }
  883. // ElementAt(57):工资设置:化妆师也有前期提成;
  884. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(57)) && bMakeupArtist )
  885. {// 化妆前期;
  886. // 按提成百分比计算;
  887. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fMakeupArtist);
  888. // 累加前期业绩;
  889. m_fEaryResultMoney += _tstof(strMoney);
  890. // 累加摄影工资类型金额;
  891. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_MAKEUPARTIST)) == -1 )
  892. {
  893. m_AryWageType.Add(WAGE_EARLY_MAKEUPARTIST);
  894. m_AryWageTypeMoney.Add(_tstof(strMoney));
  895. }
  896. else
  897. {
  898. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  899. }
  900. }
  901. }
  902. // 2.这笔收款,员工是否有门市服务项;
  903. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate )
  904. {
  905. bSalesperson1 = bSalesperson2 = 0.0;
  906. fbSalesperson1Percent = fbSalesperson2Percent = FALSE;
  907. GetSalesServerRecord(strStaffName, m_AryReceiptRecords.ElementAt(i).ElementAt(0), bSalesperson1, bSalesperson2, fbSalesperson1Percent, fbSalesperson2Percent);
  908. if ( bSalesperson1 )
  909. {// 主门市;
  910. // 按提成百分比计算;
  911. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fbSalesperson1Percent);
  912. // 累加前期业绩;
  913. m_fEaryResultMoney += _tstof(strMoney);
  914. // 累加门市类型金额;
  915. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_SALES)) == -1 )
  916. {
  917. m_AryWageType.Add(WAGE_EARLY_SALES);
  918. m_AryWageTypeMoney.Add(_tstof(strMoney));
  919. }
  920. else
  921. {
  922. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  923. }
  924. }
  925. if ( bSalesperson2 )
  926. {// 副门市;
  927. // 按提成百分比计算;
  928. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fbSalesperson2Percent);
  929. // 累加前期业绩;
  930. m_fEaryResultMoney += _tstof(strMoney);
  931. // 累加门市类型金额;
  932. if ( (nIndex = FindArray(&m_AryWageType, WAGE_EARLY_SALES)) == -1 )
  933. {
  934. m_AryWageType.Add(WAGE_EARLY_SALES);
  935. m_AryWageTypeMoney.Add(_tstof(strMoney));
  936. }
  937. else
  938. {
  939. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  940. }
  941. }
  942. }
  943. }
  944. // 选片二销;
  945. else if ( m_AryReceiptRecords.ElementAt(i).ElementAt(12) == _T("选片二销") )
  946. {
  947. bPhotographer = bMakeupArtist = FALSE;
  948. fPhotographer = fMakeupArtist = 0.0;
  949. if ( m_AryReceiptRecords.ElementAt(i).ElementAt(9) == _T("OK") && m_AryReceiptRecords.ElementAt(i).ElementAt(10) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(10) <= m_strWageEndofDate )
  950. {
  951. GetPhotographerAndMakeupArtistServeRecord(strStaffName, m_AryReceiptRecords.ElementAt(i).ElementAt(0), bPhotographer, bMakeupArtist, fPhotographer, fMakeupArtist);
  952. // ElementAt(41):工资设置:摄影师也有选片二销提成;
  953. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(41)) && bPhotographer )
  954. {
  955. // 按提成百分比计算;
  956. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fPhotographer);
  957. // 累加选片二销业绩;
  958. m_fSelectMoney += _tstof(strMoney);
  959. // 累加摄影也有选片二销工资类型金额;
  960. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_PHOTOGRAPHER)) == -1 )
  961. {
  962. m_AryWageType.Add(WAGE_SEL_PHOTOGRAPHER);
  963. m_AryWageTypeMoney.Add(_tstof(strMoney));
  964. }
  965. else
  966. {
  967. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  968. }
  969. }
  970. // ElementAt(42):工资设置:化妆师或引导师也有选片二销提成;
  971. if ( _tstoi(g_cominfoarray.ElementAt(0).ElementAt(42)) && bMakeupArtist )
  972. {
  973. // 按提成百分比计算;
  974. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) * fMakeupArtist);
  975. // 累加选片二销业绩;
  976. m_fSelectMoney += _tstof(strMoney);
  977. // 累加化妆也有选片二销工资类型金额;
  978. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_MAKEUPARTIST)) == -1 )
  979. {
  980. m_AryWageType.Add(WAGE_SEL_MAKEUPARTIST);
  981. m_AryWageTypeMoney.Add(_tstof(strMoney));
  982. }
  983. else
  984. {
  985. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  986. }
  987. }
  988. }
  989. // 这笔收款,员工是否还是本次选片二销的选片师;
  990. if ( strStaffName == m_AryReceiptRecords.ElementAt(i).ElementAt(11) && m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate)
  991. {
  992. // 按提成百分比计算;
  993. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)) );
  994. // 累加选片二销业绩;
  995. m_fSelectMoney += _tstof(strMoney);
  996. // 累加化妆也有选片二销工资类型金额;
  997. if ( (nIndex = FindArray(&m_AryWageType, WAGE_SEL_SALES)) == -1 )
  998. {
  999. m_AryWageType.Add(WAGE_SEL_SALES);
  1000. m_AryWageTypeMoney.Add(_tstof(strMoney));
  1001. }
  1002. else
  1003. {
  1004. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  1005. }
  1006. }
  1007. }
  1008. // 其他订单二销;
  1009. else
  1010. {
  1011. // 这笔收款,员工是否还是本次其他订单二销的促成者;
  1012. if ( strStaffName == m_AryReceiptRecords.ElementAt(i).ElementAt(11) && m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate)
  1013. {
  1014. // 获取提成;
  1015. strMoney.Format(_T("%0.2f"), _tstof(m_AryReceiptRecords.ElementAt(i).ElementAt(6)));
  1016. // 累加选片二销业绩;
  1017. m_fSelectMoney += _tstof(strMoney);
  1018. // 累加化妆也有选片二销工资类型金额;
  1019. if ( (nIndex = FindArray(&m_AryWageType, m_AryReceiptRecords.ElementAt(i).ElementAt(12))) == -1 )
  1020. {
  1021. m_AryWageType.Add(m_AryReceiptRecords.ElementAt(i).ElementAt(12));
  1022. m_AryWageTypeMoney.Add(_tstof(strMoney));
  1023. }
  1024. else
  1025. {
  1026. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  1027. }
  1028. }
  1029. }
  1030. }
  1031. // case 198:其他收入业绩(散客消费);
  1032. nSize = m_AryOtherIncomeRecord.GetSize();
  1033. for ( i = 0; i < nSize; i++ )
  1034. {
  1035. // 收款人就是该员工,那这笔收入就是他产生的,计他提成;
  1036. if ( m_AryOtherIncomeRecord.ElementAt(i).ElementAt(2) == strStaffName && m_AryReceiptRecords.ElementAt(i).ElementAt(7) >= m_strWageStartDate && m_AryReceiptRecords.ElementAt(i).ElementAt(7) <= m_strWageEndofDate)
  1037. {
  1038. strMoney.Format(_T("%0.2f"), _tstof(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(4)));
  1039. // 累加化妆也有选片二销工资类型金额;
  1040. if ( (nIndex = FindArray(&m_AryWageType, m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3))) == -1 )
  1041. {
  1042. m_AryWageType.Add(m_AryOtherIncomeRecord.ElementAt(i).ElementAt(3));
  1043. m_AryWageTypeMoney.Add(_tstof(strMoney));
  1044. }
  1045. else
  1046. {
  1047. m_AryWageTypeMoney.SetAt(nIndex, m_AryWageTypeMoney.ElementAt(nIndex) + _tstof(strMoney));
  1048. }
  1049. }
  1050. }
  1051. return FALSE;
  1052. }
  1053. FLOAT CStaffWage::GetStaffSignerWage(IN CString strSaffName)
  1054. {
  1055. FLOAT fStaffEarlyWage = 0.0;
  1056. INT nSize = m_AryWageType.GetSize();
  1057. for ( int i = 0; i < nSize; i++ )
  1058. {
  1059. if ( m_AryWageType.ElementAt(i) == WAGE_EARLY_SALES )
  1060. fStaffEarlyWage += m_AryWageTypeMoney.ElementAt(i);
  1061. }
  1062. return fStaffEarlyWage;
  1063. }
  1064. FLOAT CStaffWage::GetStaffPhotograhperMakeupArtistWage(IN CString strSaffName)
  1065. {
  1066. FLOAT fStaffEarlyWage = 0.0;
  1067. INT nSize = m_AryWageType.GetSize();
  1068. for ( int i = 0; i < nSize; i++ )
  1069. {
  1070. if (m_AryWageType.ElementAt(i) == WAGE_EARLY_MAKEUPARTIST || // 化妆前期;
  1071. m_AryWageType.ElementAt(i) == WAGE_EARLY_PHOTOGRAPHER ) // 摄影前期;
  1072. fStaffEarlyWage += m_AryWageTypeMoney.ElementAt(i);
  1073. }
  1074. return fStaffEarlyWage;
  1075. }
  1076. FLOAT CStaffWage::GetStaffLateWage(IN CString strStaffName, OUT FLOAT &fTotalMoney)
  1077. {
  1078. FLOAT fStaffLateWage = 0.0;
  1079. INT nSize = m_AryWageType.GetSize();
  1080. for ( int i = 0; i < nSize; i++ )
  1081. {
  1082. if ( m_AryWageType.ElementAt(i) != WAGE_EARLY_SALES && // 门市前期;
  1083. m_AryWageType.ElementAt(i) != WAGE_EARLY_MAKEUPARTIST && // 化妆前期;
  1084. m_AryWageType.ElementAt(i) != WAGE_EARLY_PHOTOGRAPHER ) // 摄影前期;
  1085. {
  1086. fTotalMoney += m_AryWageTypeMoney.ElementAt(i);
  1087. fStaffLateWage += GetSalaryFromRule(m_AryWageTypeMoney.ElementAt(i), GetRule(m_AryWageType.ElementAt(i)));
  1088. }
  1089. }
  1090. return fStaffLateWage;
  1091. }
  1092. FLOAT CStaffWage::GetStaffDigitalWage(IN CString strStaffName)
  1093. {
  1094. FLOAT fDigitalWage = 0.0;
  1095. CString strUnitPrice; // 单价;
  1096. CString strTotalMoney; // 总价;
  1097. BOOL bIsDigital = FALSE;
  1098. INT nSize = m_AryMyWorkRecord.GetSize();
  1099. for ( int i = 0; i < nSize; i++ )
  1100. {
  1101. bIsDigital = FALSE;
  1102. if ( m_AryMyWorkRecord.ElementAt(i).ElementAt(3) == strStaffName )
  1103. {
  1104. for ( int n = 0; n < m_AryWorkrate.GetSize(); n++ )
  1105. {
  1106. if ( _T("数码师") == m_AryWorkrate.ElementAt(n).ElementAt(0) &&
  1107. m_AryMyWorkRecord.ElementAt(i).ElementAt(6) == m_AryWorkrate.ElementAt(n).ElementAt(1))
  1108. {
  1109. strUnitPrice = m_AryWorkrate.ElementAt(n).ElementAt(2);
  1110. bIsDigital = TRUE;
  1111. break;
  1112. }
  1113. }
  1114. if ( !bIsDigital )
  1115. strUnitPrice = _T("0");
  1116. // ElementAt(5):数量;
  1117. strTotalMoney.Format(_T("%0.2f"), _tstof(m_AryMyWorkRecord.ElementAt(i).ElementAt(5))*_tstof(strUnitPrice));
  1118. fDigitalWage += _tstof(strTotalMoney);
  1119. }
  1120. }
  1121. return fDigitalWage;
  1122. }
  1123. FLOAT CStaffWage::GetStaffTotalWage(IN CString strStaffName)
  1124. {
  1125. // 员工总工资;
  1126. FLOAT fStaffTotalWage = 0.0;
  1127. return fStaffTotalWage;
  1128. }
  1129. #endif