MaterialController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. <?php
  2. /**
  3. * 物资控制器
  4. * @author zhouxuchen 2015-09-16
  5. */
  6. class MaterialController extends AdminController {
  7. // 物资首页
  8. public function actionIndex () {
  9. $status_option = Material::$status_option;
  10. $unit_option = Material::$unit_option;
  11. $enable_option = Material::$enable_option;
  12. $status = CommonFn::getComboboxData($status_option, 100, true, 100);
  13. $type = CommonFn::getComboboxData($unit_option, 100, false, 0);
  14. $enable = CommonFn::getComboboxData($enable_option, 100, true, 100);
  15. // 服务点信息
  16. $criteria = new EMongoCriteria();
  17. $cursor = Station::model()->findAll($criteria);
  18. $rows = CommonFn::getRowsFromCursor($cursor);
  19. $parsedRows = Station::model()->parse($rows);
  20. $station_data = array();
  21. foreach ($parsedRows as $key => $v) {
  22. $station_data = array_merge($station_data, array($v['id'] => array('name' => $v['name'])));
  23. // $station_data[] = array('name' => $v['name']);
  24. }
  25. $station = CommonFn::getComboboxData($station_data, '', false, '');
  26. $this->render('index', array(
  27. 'status' => $status,
  28. 'type' => $type,
  29. 'enable' => $enable,
  30. 'station' => $station
  31. ));
  32. }
  33. // 物资列表
  34. public function actionList () {
  35. $params = CommonFn::getPageParams();
  36. $id = Yii::app()->request->getParam('id', '');
  37. $status = intval(Yii::app()->request->getParam('status', 100));
  38. $enable = intval(Yii::app()->request->getParam('enable', 100));
  39. $search = Yii::app()->request->getParam('search', '');
  40. $criteria = new EMongoCriteria($params);
  41. // 库存状态删选
  42. if($status!=100){
  43. $criteria->status('==', $status);
  44. }
  45. // 物资启用状态筛选
  46. if($enable!=100){
  47. $criteria->enable('==', $enable);
  48. }
  49. if ($search != ''){
  50. if (CommonFn::isMongoId($search)){
  51. $criteria->_id('==',new MongoId($search));
  52. } else {
  53. $criteria->name = new MongoRegex('/' . $search . '/');
  54. }
  55. }
  56. $cursor = Material::model()->findAll($criteria);
  57. $total = $cursor->count();
  58. $rows = CommonFn::getRowsFromCursor($cursor);
  59. $parsedRows = Material::model()->parse($rows);
  60. echo CommonFn::composeDatagridData($parsedRows, $total);
  61. }
  62. // 编辑物资信息
  63. // 若id被传入则物资信息被编辑,若id未传入则新建一个物资信息
  64. public function actionEdit () {
  65. $id = Yii::app()->request->getParam('id', '');
  66. $name = Yii::app()->request->getParam('name', '');
  67. $unit = intval(Yii::app()->request->getParam('unit', 0));
  68. $stockWarnLine = intval(Yii::app()->request->getParam('stockWarnLine', 0));
  69. $price = number_format(Yii::app()->request->getParam('price', 0), 2, '.', '');
  70. $enable = intval(Yii::app()->request->getParam('enable', 1));
  71. $stock = intval(Yii::app()->request->getParam('stock', 0));
  72. $remarks = Yii::app()->request->getParam('remarks', '');
  73. if (!$unit) {
  74. CommonFn::requestAjax(false, '请选择单位');
  75. die;
  76. }
  77. if(!$id){
  78. $material = new Material();
  79. $material->addTime = time();
  80. $material->stock = $stock;
  81. }else{
  82. $criteria = new EMongoCriteria();
  83. $criteria->_id = new MongoId($id);
  84. $material = Material::model()->find($criteria);
  85. if (empty($material)){
  86. CommonFn::requestAjax(false, '物资不存在');
  87. die;
  88. }
  89. }
  90. // 直接修改物资,正式使用后该行注释
  91. $material->stock = $stock;
  92. $material->name = $name;
  93. $material->unit = $unit;
  94. $material->unit_str = $this->unit_str($unit); // 判断单位str
  95. $material->price = $price;
  96. $material->stockWarnLine = $stockWarnLine;
  97. $material->status = $this->status($material->stock, $material->stockWarnLine);
  98. $material->status_str = $this->status_str($material->status); //判断库存状态
  99. $material->enable = $enable;
  100. $material->enable_str = $this->enable_str($enable);
  101. $material->remarks = $remarks;
  102. $arr_addMaterial = array('name', 'unit_str', 'unit', 'price', 'stock', 'stockWarnLine', 'addTime', 'user', 'status', 'status_str', 'enable', 'enable_str', 'remarks');
  103. $success = $material->save(true, $arr_addMaterial);
  104. CommonFn::requestAjax($success, '', array());
  105. }
  106. /**
  107. * 出入库操作
  108. * @param obj c_user : criteria for model `User`
  109. * @param obj c_material : criteria for model `Material`
  110. * @param obj c_object : criteria for model `User`
  111. * @param obj c_station : criteria for model `Station`
  112. */
  113. public function actionStock () {
  114. $mid = Yii::app()->request->getParam('mid', '');
  115. $operate = intval(Yii::app()->request->getParam('operate', 1));
  116. $num = intval(Yii::app()->request->getParam('num', 0));
  117. $tot_price = Yii::app()->request->getParam('tot_price', 0);
  118. $remarks =Yii::app()->request->getParam('remarks', '');
  119. $object = Yii::app()->request->getParam('object', '');
  120. $sid = Yii::app()->request->getParam('station', '');
  121. $time = time();
  122. if ($mid == '') {
  123. CommonFn::requestAjax(false, '请选择物资');
  124. die;
  125. }
  126. if ($num <= 0) {
  127. CommonFn::requestAjax(false, '数量错误');
  128. die;
  129. }
  130. // 用户信息
  131. $user = Yii::app()->user;
  132. $email = $user->name;
  133. $c_user = new EMongoCriteria();
  134. $c_user->email = $email;
  135. $userInfo = User::model()->find($c_user);
  136. // 物资基本信息
  137. $c_material = new EMongoCriteria();
  138. $c_material->_id = new MongoId($mid);
  139. $material = Material::model()->find($c_material);
  140. if (empty($material)) {
  141. CommonFn::requestAjax(false, '物资不存在');
  142. die;
  143. }
  144. $stock = new Stock();
  145. // 所需要的物资数据
  146. $lastStock = $material->stock;
  147. $price = $material->price;
  148. // 入库数量及价格
  149. $stock->num = $num;
  150. $stock->tot_price = $tot_price != 0 ? $tot_price : $num * $price;
  151. $stock->lastStock = $lastStock;
  152. $stock->newStock = $this->newStock($lastStock, $num, $operate);
  153. if ($stock->newStock < 0) {
  154. CommonFn::requestAjax(false, '出库操作错误,请检查数量', array());
  155. die;
  156. }
  157. if ($operate == 0) {
  158. if ($sid == '') {
  159. CommonFn::requestAjax(false, '请选择服务点');
  160. die;
  161. }
  162. // 目标用户
  163. $c_object = new EMongoCriteria();
  164. $c_object->name = $object;
  165. $objInfo = User::model()->find($c_object);
  166. if (empty($objInfo)) {
  167. CommonFn::requestAjax(false, '目标用户不存在');
  168. die;
  169. } else {
  170. $stock->object = $objInfo->_id;
  171. $stock->objectName = $objInfo->name;
  172. }
  173. // 服务点信息
  174. $c_station = new EMongoCriteria();
  175. $c_station->_id = new MongoId($sid);
  176. $station = Station::model()->find($c_station);
  177. if (empty($station)) {
  178. CommonFn::requestAjax(false, '服务点不存在');
  179. die;
  180. }
  181. $stock->station = new MongoId($sid);
  182. $stock->stationName = $station->name;
  183. $arr_addStock = array('mid', 'mname', 'operate', 'operate_str', 'user', 'time', 'username', 'num', 'tot_price', 'lastStock', 'newStock', 'remarks', 'object', 'objectName', 'station', 'stationName');
  184. } else {
  185. $stock->objectName = '公司总库';
  186. $stock->stationName = '无';
  187. $arr_addStock = array('mid', 'mname', 'operate', 'operate_str', 'user', 'time', 'username', 'num', 'tot_price', 'lastStock', 'newStock', 'remarks', 'objectName', 'stationName');
  188. }
  189. $stock->mid = new MongoId($mid);
  190. $stock->mname = $material->name;
  191. $stock->operate = $operate;
  192. $stock->operate_str = $this->operate_str($operate);
  193. $stock->user = $userInfo->_id;
  194. $stock->username = $userInfo->name;
  195. $stock->time = $time;
  196. $stock->remarks = $remarks;
  197. $material->stock = $stock->newStock;
  198. $material->status = $this->status($material->stock, $material->stockWarnLine);
  199. $material->status_str = $this->status_str($material->status);
  200. $arr_addMaterial = array('stock', 'status', 'status_str');
  201. // 增加库存表记录
  202. $success_stock = $stock->save(true, $arr_addStock);
  203. // 修改物资表记录
  204. $success_material = $material->save(true, $arr_addMaterial);
  205. // print_r($stock);die;
  206. CommonFn::requestAjax($success_stock&$success_material, '', array());
  207. }
  208. // 自动填充用户
  209. public function actionSelectUser () {
  210. $chars = Yii::app()->request->getParam('user', '');
  211. $MongoDbAuthManager = new CMongoDbAuthManager();
  212. $users_id = $MongoDbAuthManager->getAuthUser('保洁师');
  213. $criteria = new EMongoCriteria();
  214. $criteria->addCond('name', 'or', new MongoRegex('/'.$chars.'/'));
  215. $criteria->addCond('email', 'or', new MongoRegex('/'.$chars.'/'));
  216. $cursor = User::model()->findAll($criteria);
  217. $rows = CommonFn::getRowsFromCursor($cursor);
  218. $index = 0;
  219. foreach ($rows as $key => $v) {
  220. if (in_array($v['_id'], $users_id)) {
  221. $arr[] = array(
  222. 'id' => $index,
  223. 'data' => $v['name'],
  224. 'description' => $v['email'],
  225. 'uid' => $v['_id'],
  226. );
  227. $index++;
  228. } else {
  229. continue;
  230. }
  231. }
  232. if (empty($arr)) {
  233. $arr = array(
  234. 'id' => 0,
  235. 'data' => '',
  236. 'description' => '',
  237. 'uid' => -1,
  238. );
  239. }
  240. echo json_encode($arr);
  241. }
  242. // 自动填充物资
  243. public function actionSelectMaterial () {
  244. $chars = Yii::app()->request->getParam('material', '');
  245. $criteria = new EMongoCriteria();
  246. $criteria->name = new MongoRegex('/'.$chars.'/');
  247. $cursor = Material::model()->findAll($criteria);
  248. $rows = CommonFn::getRowsFromCursor($cursor);
  249. if (empty($rows)) {
  250. $arr = array(
  251. 'id' => 0,
  252. 'data' => ''
  253. );
  254. } else {
  255. foreach ($rows as $key => $v) {
  256. $arr[] = array(
  257. 'id' => $key,
  258. 'data' => $v['name']
  259. );
  260. }
  261. }
  262. echo json_encode($arr);
  263. }
  264. // 判断单位类型
  265. protected function unit_str ($type) {
  266. switch ($type) {
  267. case 1:
  268. $unit_str = '瓶';
  269. break;
  270. case 2:
  271. $unit_str = '袋';
  272. break;
  273. case 3:
  274. $unit_str = '盒';
  275. break;
  276. case 4:
  277. $unit_str = '台';
  278. break;
  279. case 5:
  280. $unit_str = '件';
  281. break;
  282. case 6:
  283. $unit_str = '双';
  284. break;
  285. case 7:
  286. $unit_str = '只';
  287. break;
  288. case 8:
  289. $unit_str = '个';
  290. break;
  291. case 9:
  292. $unit_str = '套';
  293. break;
  294. case 10:
  295. $unit_str = '副';
  296. break;
  297. case 11:
  298. $unit_str = '毫升';
  299. break;
  300. default:
  301. $unit_str = '未找到相应单位';
  302. break;
  303. }
  304. return $unit_str;
  305. }
  306. // 判断库存状态(status)
  307. protected function status ($stock, $stockWarnLine) {
  308. if ($stock > $stockWarnLine && $stockWarnLine >= 0) {
  309. $status = 2;
  310. } else if ($stock > 0 && $stock <= $stockWarnLine) {
  311. $status = 1;
  312. } else if ($stock == 0) {
  313. $status = 0;
  314. } else {
  315. $status = 3;
  316. }
  317. return $status;
  318. }
  319. // 判断库存状态(status_str)
  320. protected function status_str ($type) {
  321. switch ($type) {
  322. case 0:
  323. $status_str = '无库存';
  324. break;
  325. case 1:
  326. $status_str = '紧张';
  327. break;
  328. case 2:
  329. $status_str = '充足';
  330. break;
  331. default:
  332. $status_str = '未知';
  333. break;
  334. }
  335. return $status_str;
  336. }
  337. // 判断物资是否启用
  338. protected function enable_str ($type) {
  339. if ($type == 1) {
  340. $enable_str = '启用';
  341. } else {
  342. $enable_str = '停用';
  343. }
  344. return $enable_str;
  345. }
  346. // 判断库存操作
  347. protected function operate_str ($type) {
  348. if ($type == 0) {
  349. $operate_str = '出库';
  350. } else {
  351. $operate_str = '入库';
  352. }
  353. return $operate_str;
  354. }
  355. // 新库存计算
  356. protected function newStock ($lastStock, $num, $operate) {
  357. if ($operate == 0) {
  358. $newStock = $lastStock - $num;
  359. } else {
  360. $newStock = $lastStock + $num;
  361. }
  362. return $newStock;
  363. }
  364. }
  365. ?>