Set.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. <?php
  2. namespace Cash\Lib;
  3. use Dever;
  4. class Set
  5. {
  6. public function info($audit_type, $audit)
  7. {
  8. $config = Dever::db('cash/order')->config;
  9. return $config['config_audit_type'][$audit_type] . $config['config_audit'][$audit];
  10. }
  11. public function statDate($type, $day)
  12. {
  13. if ($type == 1) {
  14. $string = 'Y年m月';
  15. } else {
  16. $string = 'Y年W周';
  17. }
  18. return date($string, $day);
  19. }
  20. public function statYes($info, $type)
  21. {
  22. $table = 'cash/' . $type;
  23. $info = is_array($info) ? $info : Dever::db($table)->one($info);
  24. $other = Dever::db($type . '/info')->find($info[$type . '_id']);
  25. if ($type == 'store') {
  26. return $this->statDate($info['type'], $info['day']) . '与'.$other['name'].'对账单数量是否正确<br />对账数量' . $info['num'] . '个';
  27. }
  28. return $this->statDate($info['type'], $info['day']) . '与'.$other['name'].'对账单款项是否正确<br />对账金额¥' . $info['cash'] . '元';
  29. }
  30. public function statTime($start, $end)
  31. {
  32. return date('Y-m-d', $start) . ' ~ ' . date('Y-m-d', $end);
  33. }
  34. public function orderUpdate($id, $name, $data)
  35. {
  36. Dever::config('base')->hook = true;
  37. $update = array();
  38. $audit = Dever::param('audit', $data);
  39. $info = Dever::db('cash/order')->one($id);
  40. if ($audit > 1 && $info['refund_id'] && $info['refund_id'] > 0) {
  41. Dever::load('shop/lib/refund')->set('buy')->action($info['refund_id'], $audit, false, false);
  42. if ($audit == 2) {
  43. Dever::db('cash/order')->update(array('where_id' => $id, 'status' => 2));
  44. }
  45. }
  46. }
  47. # 审核对账
  48. public function audit_api()
  49. {
  50. $id = Dever::input('id');
  51. $type = Dever::input('type', 'shop');
  52. $table = 'cash/' . $type;
  53. $info = Dever::db($table)->one($id);
  54. if ($info) {
  55. Dever::db($table)->update(array('where_id' => $id, 'status' => 2));
  56. }
  57. return 'reload';
  58. }
  59. # 审核对账
  60. public function audit_other_api()
  61. {
  62. $id = Dever::input('id');
  63. $type = Dever::input('type', 'shop');
  64. $table = 'cash/' . $type;
  65. $info = Dever::db($table)->one($id);
  66. if ($info) {
  67. Dever::db($table)->update(array('where_id' => $id, $type . '_status' => 2));
  68. }
  69. return 'reload';
  70. }
  71. # 查看对账单详情
  72. public function view_api()
  73. {
  74. $id = Dever::input('id');
  75. if (!$id) {
  76. return false;
  77. }
  78. $show = Dever::input('show', 1);
  79. $type = Dever::input('type', 'shop');
  80. if ($type == 'shop') {
  81. $name = '门店';
  82. } elseif ($type == 'store') {
  83. $name = '仓库';
  84. } elseif ($type == 'factory') {
  85. $name = '工厂';
  86. }
  87. $table = 'cash/' . $type;
  88. $config = Dever::db($table)->config;
  89. $info = Dever::db($table)->one($id);
  90. $status = $config['config_status'][$info['status']];
  91. $other_status = $config['config_status'][$info[$type . '_status']];
  92. $other = Dever::db($type . '/info')->find($info[$type . '_id']);
  93. $html = '<div class="layui-col-md12"><div class="layui-card"><div class="layui-card-header">对账单详情</div><div class="layui-card-body">';
  94. $html .= '<table class="layui-table"><tbody>';
  95. $html .= '<tr>
  96. <td width="100">对账'.$name.'</td>
  97. <td>'.$this->table(false, array(array($other['name']))).'</td>
  98. </tr>';
  99. $html .= '<tr>
  100. <td width="80">对账时间</td>
  101. <td>'.$this->table(false, array(array($this->statDate($info['type'], $info['day'])))).'</td>
  102. </tr>';
  103. $html .= '<tr>
  104. <td width="80">对账周期</td>
  105. <td>'.$this->table(false, array(array($this->statTime($info['start'], $info['end'])))).'</td>
  106. </tr>';
  107. if ($type == 'store') {
  108. $html .= '<tr>
  109. <td width="80">对账商品数量</td>
  110. <td>'.$this->table(false, array(array($info['num']))).'</td>
  111. </tr>';
  112. } else {
  113. $html .= '<tr>
  114. <td width="80">对账金额</td>
  115. <td>'.$this->table(false, array(array('¥' . round($info['cash'], 2) . '元'))).'</td>
  116. </tr>';
  117. }
  118. if ($show == 1) {
  119. $html .= '<tr>
  120. <td width="80">'.$name.'对账状态</td>
  121. <td>'.$this->table(false, array(array($other_status))).'</td>
  122. </tr>';
  123. $html .= '<tr>
  124. <td width="100">平台对账状态</td>
  125. <td>'.$this->table(false, array(array($status))).'</td>
  126. </tr>';
  127. } else {
  128. $html .= '<tr>
  129. <td width="80">对账状态</td>
  130. <td>'.$this->table(false, array(array($other_status))).'</td>
  131. </tr>';
  132. }
  133. $id = $info[$type . '_id'];
  134. if ($type == 'shop') {
  135. $where['type'] = 1;
  136. $where['type_id'] = $id;
  137. } elseif ($type == 'factory') {
  138. $where['source_type'] = 3;
  139. $where['source_id'] = $id;
  140. } else {
  141. $where['type'] = 2;
  142. $where['type_id'] = $id;
  143. //$where['source_type_or'] = 2;
  144. //$where['source_id_or'] = $id;
  145. }
  146. $where['status'] = 2;
  147. $button = array();
  148. if ($show == 1) {
  149. if ($info['status'] == 1) {
  150. $url = Dever::url('lib/set.audit&id='.$id.'&type=' . $type, 'cash');
  151. $button[] = '<button class="layui-btn layui-btn-primary" onclick="load(\''.$url.'\', \''.$this->statYes($info, $type).'\', \'请确认\')">立即确认</button>';
  152. }
  153. $config['phone'] = '联系人:' . $other['truename'] . ',联系电话:' . $other['mobile'];
  154. $button[] = '<button class="layui-btn layui-btn-primary" onclick="showAlert(\''.$config['phone'].'\')">联系'.$name.'</button>';
  155. $start = date('Y-m-d H:i:s', $info['start']);
  156. $end = date('Y-m-d H:i:s', $info['end']);
  157. $ow = array();
  158. foreach ($where as $k => $v) {
  159. $ow['search_option_' . $k] = $v;
  160. }
  161. $ow = http_build_query($ow);
  162. $out = Dever::url('database.list_excel?project=cash&table=order&search_option_status=2&search_option_state=1&search_option_start_cdate=' . $start . '&search_option_end_cdate=' . $end . '&' . $ow, 'manage');
  163. $button[] = '<a class="layui-btn layui-btn-primary" href="'.$out.'">导出对账单</a>';
  164. } elseif ($show == 2) {
  165. if ($info[$type . '_status'] == 1 && $show != 1) {
  166. $url = Dever::url('lib/set.audit_other&id='.$id.'&type=' . $type, 'cash');
  167. $button[] = '<button class="layui-btn layui-btn-primary" onclick="load(\''.$url.'\', \''.$this->statYes($info, $type).'\', \'请确认\')">立即确认</button>';
  168. }
  169. $config = Dever::load('factory/admin/auth.config');
  170. $config['phone'] = '联系电话:' . $config['dz_phone'];
  171. $button[] = '<button class="layui-btn layui-btn-primary" onclick="showAlert(\''.$config['phone'].'\')">联系对账专员</button>';
  172. $print = Dever::url('admin/stat.print?id=' . $info['id'] . '&type=' . $type, $type);
  173. $button[] = '<a class="layui-btn layui-btn-primary" href="'.$print.'" target="_blank">打印对账单</a>';
  174. }
  175. $html .= '<tr>
  176. <td>功能按钮</td>
  177. <td>'.$this->table(false, array($button)).'</td>
  178. </tr>';
  179. $html .= '</tbody></table></div></div>';
  180. $where['start'] = $info['start'];
  181. $where['end'] = $info['end'];
  182. $data = Dever::db('cash/order')->getAll($where);
  183. if ($data) {
  184. $body = array();
  185. $config = Dever::db('cash/order')->config;
  186. foreach ($data as $k => $v) {
  187. $cdate = date('Y-m-d H:i', $v['cdate']);
  188. $fdate = $v['fdate'] ? date('Y-m-d H:i', $v['fdate']) : '';
  189. $operdate = $v['operdate'] ? date('Y-m-d H:i', $v['operdate']) : '';
  190. if ($type == 'store') {
  191. $cash = $v['num'];
  192. } elseif ($type == 'factory') {
  193. $cash = '¥' . round($v['p_cash'], 2);
  194. } else {
  195. $cash = '¥' . round($v['cash'], 2);
  196. }
  197. if ($show == 1) {
  198. $url = Dever::url('project/database/list?project=shop&table=buy_order_goods&order_id='.$v['source_order_id'].'&page_type=1', 'manage');
  199. $v['source_order_num'] = '<a href="'.$url.'" style="color:blue">'.$v['source_order_num'].'</a>';
  200. $head = array('结算单号', '订货单号', '结算类型', '下单日期', '完成日期', '结算日期', '对账金额', '结算状态');
  201. if ($type == 'store') {
  202. $head[6] = '对账数量';
  203. }
  204. $body[] = array
  205. (
  206. $v['order_num'],
  207. $v['source_order_num'],
  208. $config['config_jstype'][$v['jstype']],
  209. $cdate,
  210. $fdate,
  211. $operdate,
  212. $cash,
  213. '已入账'
  214. );
  215. } else {
  216. $head = array('订货单号', '下单日期', '完成日期', '对账金额', '状态');
  217. if ($type == 'store') {
  218. $head[3] = '对账数量';
  219. }
  220. $body[] = array
  221. (
  222. $v['source_order_num'],
  223. $cdate,
  224. $fdate,
  225. $cash,
  226. '已入账'
  227. );
  228. }
  229. }
  230. $page = Dever::page("current");
  231. $html .= '<div class="layui-card"><div class="layui-card-header">对账清单</div><div class="layui-card-body" style="max-heights: 500px;overflow: auto;">' . $this->table($head, $body) . $page . '</div></div>';
  232. }
  233. $html .= '</div>';
  234. return '<div class="layui-card-body">' . $html . '</div>';
  235. }
  236. private function table($head, $data)
  237. {
  238. $html = '';
  239. if ($head) {
  240. $html = '<table class="layui-table">';
  241. $html .= '<thead><tr>';
  242. foreach ($head as $k => $v) {
  243. $html .= '<th>'.$v.'</th>';
  244. }
  245. $html .= '</tr></thead>';
  246. $html .= '<tbody>';
  247. foreach ($data as $k => $v) {
  248. $html .= '<tr>';
  249. foreach ($v as $k1 => $v1) {
  250. $html .= '<td>'.$v1.'</td>';
  251. }
  252. $html .= '</tr>';
  253. }
  254. $html .= '</tbody>';
  255. $html .= '</table>';
  256. } else {
  257. foreach ($data as $k => $v) {
  258. $html .= '';
  259. foreach ($v as $k1 => $v1) {
  260. $html .= $v1 . '&nbsp;&nbsp;&nbsp;&nbsp;';
  261. }
  262. $html .= '';
  263. }
  264. }
  265. return $html;
  266. }
  267. # 打印订单单
  268. public function printer($user)
  269. {
  270. $id = Dever::input('id');
  271. if (!$id) {
  272. return false;
  273. }
  274. $type = Dever::input('type', 'shop');
  275. if ($type == 'shop') {
  276. $name = '门店';
  277. } elseif ($type == 'store') {
  278. $name = '仓库';
  279. } elseif ($type == 'factory') {
  280. $name = '工厂';
  281. }
  282. $table = 'cash/' . $type;
  283. $config = Dever::db($table)->config;
  284. $info = Dever::db($table)->one($id);
  285. $status = $config['config_status'][$info['status']];
  286. $other_status = $config['config_status'][$info[$type . '_status']];
  287. $other = Dever::db($type . '/info')->find($info[$type . '_id']);
  288. $member = Dever::db($type . '/member')->find($user['id']);
  289. $factory_config = Dever::db('main/factory_config')->find();
  290. $main_config = Dever::db('main/config')->find();
  291. $pdf = Dever::load('pdf/lib/base')->init();
  292. $pdf->hr('-', $other['name']);
  293. $pdf->br()->font(20)->center('对账周期:' . $this->statTime($info['start'], $info['end']));
  294. $pdf->font(10);
  295. $pdf->br();
  296. $pdf->br()->left('对账日期:' . $this->statDate($info['type'], $info['day']), 80)->left('制单人:' . $member['name'], 60)->left('制单时间:' . date('Y-m-d H:i'), 40);
  297. $pdf->hr();
  298. if ($type == 'store') {
  299. $where['type'] = 2;
  300. $where['type_id'] = $info[$type . '_id'];
  301. } else {
  302. $where['source_type'] = 3;
  303. $where['source_id'] = $info[$type . '_id'];
  304. }
  305. $where['status'] = 2;
  306. $where['start'] = $info['start'];
  307. $where['end'] = $info['end'];
  308. $data = Dever::db('cash/order')->getAll($where);
  309. $body = array();
  310. $body_total = array();
  311. $body_total['cash'] = 0;
  312. $body_total['num'] = 0;
  313. if ($data) {
  314. foreach ($data as $k => $v) {
  315. $cdate = date('Y-m-d H:i', $v['cdate']);
  316. $fdate = $v['fdate'] ? date('Y-m-d H:i', $v['fdate']) : '';
  317. $operdate = $v['operdate'] ? date('Y-m-d H:i', $v['operdate']) : '';
  318. $prefix = '¥';
  319. if ($type == 'store') {
  320. $cash = $v['num'];
  321. $prefix = '';
  322. } elseif ($type == 'factory') {
  323. $cash = $v['p_cash'];
  324. } else {
  325. $cash = $v['cash'];
  326. }
  327. $cash = round($cash, 2);
  328. $body[] = array
  329. (
  330. $v['source_order_num'],
  331. $cdate,
  332. $fdate,
  333. $prefix . $cash,
  334. '已入账'
  335. );
  336. $body_total['cash'] += $cash;
  337. $body_total['num'] += 1;
  338. }
  339. }
  340. $head = array(array('订单号', 60), array('下单日期', 43), array('完成日期', 43), array('对账金额', 30), array('状态', 20));
  341. if ($type == 'store') {
  342. $head[3][0] = '对账数量';
  343. }
  344. if ($body) {
  345. $pdf->br();
  346. foreach ($head as $k => $v) {
  347. $pdf->left($v[0], $v[1]);
  348. }
  349. foreach ($body as $k => $v) {
  350. $pdf->br();
  351. foreach ($head as $k1 => $v1) {
  352. $pdf->left($v[$k1], $v1[1]);
  353. }
  354. }
  355. $pdf->br();
  356. if ($type == 'store') {
  357. $pdf->right('共'.$body_total['num'].'个订单,合计对账数量' . $body_total['cash'] . '个');
  358. } else {
  359. $pdf->right('共'.$body_total['num'].'个订单,合计对账金额¥' . $body_total['cash'] . '元');
  360. }
  361. $pdf->hr();
  362. }
  363. $pdf->br(1);
  364. //$pdf->SetY(-100);
  365. $pdf->right('如遇任何问题请致电客服');
  366. $pdf->br();
  367. $pdf->font(20);
  368. $pdf->left($main_config['name'], 160);
  369. $pdf->font(10);
  370. $pdf->right('电话:' . $factory_config['phone'], 30);
  371. $pdf->br();
  372. $pdf->left($main_config['site'], 160);
  373. $pdf->font(10);
  374. $pdf->right($main_config['worktime'], 30);
  375. $pdf->out('对账单');
  376. }
  377. }