/** * 删除库房 * @param $id * @return boolean */ public function deleted($data) { try { $storeage = new StorageDao(); //检查仓库是否已经使用 $storageName = $data["storageName"]; $stocks = new CurrentStocksDao(); $count = $stocks->getCount("place='{$storageName}' or station = '{$storageName}'"); if ($count > 0) { $this->setError("该" . $data['stype'] . "含有库存,不能删除!"); return false; } $id = $data["id"]; $result = $storeage->deleteById($id); } catch (Exception $e) { system_out("StorageAction delete exception:" . $e); throw new Exception($e); } return $result; }
/** * 检查已挂表的表位是否全部确认完毕 * @param array $data 已经挂了表的表位 * @param string $state U 挂表 D 取表 * * @return boolean ; * */ public function checkStationConfirmComplete($data, $state) { $stations = array(); return true; try { $confirm = new ConfirmStationAction(); $result = $confirm->queryUnconfirmStation("state ='{$state}' and confirm=0 "); //如果没有记录,则表示全部确认了 if (!$result) { return true; } $temp = "'" . implode("','", $data) . "'"; $stocks = new CurrentStocksDao(); $exits = $stocks->findAll("station in (" . $temp . ")")->toResultSet(); if ($exits) { $temp = array(); for ($i = 0; $i < sizeof($exits); $i++) { array_push($temp, $exits[$i]["station"]); } $exits = $temp; } for ($i = 0; $i < sizeof($result); $i++) { $val = $result[$i]["station"]; $rtn = array_search($val, $exits); //如果已经入仓,则跳过 if (is_numeric($rtn)) { continue; } $rtn = array_search($val, $data); if (is_numeric($rtn)) { $stations[] = $val; } } //返回值 $rtn = array(); $data = implode(',', $stations); if ($data) { $data = '还有表位挂了表未确认:' . $data; array_push($rtn, $data); } //是否有两个表,确认了同一个表位 $confirm = new ConfirmStationAction(); $result = $confirm->checkWhetherDuplic(); if ($result) { for ($i = 0; $i < sizeof($result); $i++) { $err = "[" . $result[$i]["station"] . "]表位确认了多个表[" . $result[$i]['code'] . "]请更正"; array_push($rtn, $err); } } //如果没有错误信息,则返回true return $rtn ? $rtn : true; } catch (Executive $e) { system_out("StocksManager.checkStationConfirmComplete error:{$e}"); throw new Exception($e); } }
/** * 确认表所放的位置 * * @param $billno 单据号 * @param $data 数据 array("station"=>,"code"=>) * @return boolean */ public function confirmInstation($billdata, $data) { $sysno = $billdata['sysno']; $billdate = $billdata['billDate']; //明细表 $stocks = new StocksDao(); $stocks->startTrans(); //当前库存表 $current = new CurrentStocksDao(); $current->startTrans(); //未确认表位 $unconfirm = new UnconfirmstationDao(); $unconfirm->startTrans(); try { $newinsert = false; $station = $data["station"]; $code = $data["code"]; $result = $current->findAll("`code`='{$code}'")->toResultSet(); if (sizeof($result) == 0 && NOBILL_SCAN == false) { $stocks->rollback(); $current->rollback(); $unconfirm->rollback(); $this->setError("库存里找不到该条码[{$code}]对应的表计!"); return false; } else { if (sizeof($result) == 0) { $newinsert = true; $codeinfo = new CodeInfo(); $codedetail = $codeinfo->getInfoByCode($code); $vo = $stocks->createVo('add', '', 'id', 0, $codedetail); $vo->id = 0; $vo->inoutType = 'IN'; $vo->code = $code; $vo->sysno = $billdata['sysno']; $vo->placeno = $billdata['placeno']; $vo->place = $billdata['place']; $vo->billType = $billdata['billType']; $vo->billDate = $billdata['billDate']; $vo->billNo = $billdata['billNo']; $vo->sendMan = $billdata['sendMan']; $vo->saveMan = $billdata['saveMan']; $vo->orderNo = $billdata['orderNo']; $vo->client = $billdata['client']; $vo->inqty = 1; $vo->outqty = 0; $vo->station = $station; //inert new records $stocksmanageraction = new StocksManagerAction(); $savedata["modify"] = array($vo->toArray()); $result = $stocksmanageraction->save($savedata); if (!$result) { system_out("create new recod error:" . $stocksmanageraction->getError()); $this->setError($stocksmanageraction->getError()); return false; } } } $sql = "UPDATE " . (DB_PREFIX ? DB_PREFIX . "_" : "") . "currentstocks\n\t\t\t SET `station`='{$station}'\n\t\t\t\t\t WHERE `code` ='{$code}'"; system_out("update sql:" . $sql); $current->execute($sql); if (!$newinsert) { //返写stocks $result = StocksIndexAction::getTableNameByDate($billdate); if ($result == '') { $stocks->rollback(); $current->rollback(); $unconfirm->rollback(); system_out("get tablename error,billdate:" . $billdate); $this->setError("获取存储表出错!"); return false; } $tablename = $result; $sql = "UPDATE\t`{$tablename}`\n\t\t\t\t\t\t SET `station` = '{$station}'\n\t\t\t\t\t\t WHERE `code` = '{$code}' and\n\t\t\t\t\t\t \t\t`sysno` = '{$sysno}' "; $stocks->execute($sql); } //标记已经确认的开灯记录 $sql = "UPDATE " . (DB_PREFIX ? DB_PREFIX . "_" : "") . "unconfirmstation\n\t\t\t SET `confirm` = 1\n\t\t\t\t\t WHERE `station` = '{$station}' and `state`='U'"; $unconfirm->execute($sql); } catch (Exception $e) { $stocks->rollback(); $current->rollback(); $unconfirm->rollback(); system_out("UnconfirmstationAction.confirmInstation error:{$e},\n\t\t\t\t\t\tsysno:{$sysno},data:" . print_r($data, true)); throw new Exception($e); } //commit $stocks->commit(); $current->commit(); $unconfirm->commit(); return true; }
/** * 保存 * * @param Array $data Example:$data["modify"] = array() * $data["delete"} = array() * @return boolean true if succeed */ public function save($data) { //明细表 $stocks = new StocksDao(); $stocks->startTrans(); //当前库存表 $current = new CurrentStocksDao(); $current->startTrans(); $modify = $data["modify"]; $delete = $data["delete"]; //删除的数据 for ($i = 0; $i < sizeof($delete); $i++) { try { $tablename = StocksIndexAction::getSaveTableName($delete[$i]["billDate"]); if ($delete[$i]["id"] != '') { $vo = $stocks->find("id=" . $delete[$i]["id"], $tablename); //if($vo==true && $vo->station != '' && $vo->station != null) //{ // $stocks->rollback(); // $current->rollback() ; // $this->setError("[" . $delete[$i]["code"] . "]已经确认位置,不能删除"); // return false ; //} $rtn = $stocks->deleteById($delete[$i]["id"], $tablename); //减库存 if ($vo != null && !$vo->isEmpty()) { $rtn = $this->createCurrentStocks($current, '', $vo->toArray()); if (!$rtn) { $stocks->rollback(); $current->rollback(); $this->setError($this->getError()); return false; } } } //end if } catch (Exception $e) { $current->rollback(); $stocks->rollback(); throw new Exception($e); } //end try } //end for //保存人员近参数表 $otherparm = new OtherParmSetupAction(); $otherparm->addParm('other', 'member', $modify[0]['sendMan']); $mis = new MIS(); //添加/修改的数据 for ($i = 0; $i < sizeof($modify); $i++) { //保存进库存明细表 try { $tablename = StocksIndexAction::getSaveTableName($modify[$i]["billDate"]); if ($modify[$i]["id"] == '' || $modify[$i]["id"] == null || $modify[$i]["id"] == 0) { $vo = $stocks->createVo('add', '', 'id', 0, $modify[$i]); $result = $stocks->add($vo, $tablename); if (!$result) { $stocks->rollback(); $current->rollback(); system_out("StocksManagerActin.save error:新增数据保存出错,errcode:{$result}"); $this->setError("数据保存出错!"); return false; } //生成当前库存表 $rtn = $this->createCurrentStocks($current, $vo->toArray(), ''); if (!$rtn) { $current->rollback(); $stocks->rollback(); $this->setError($this->getError()); return false; } //增加条码索引 if ($vo->code != '' && $vo->code != null) { CodeIndexAction::addCodeIndex($vo->billDate, $vo->code); } //输出出库列表 $result = $mis->outPut($modify[$i]); } else { $vo = $stocks->find("id=" . $modify[$i]["id"], $tablename); if (!$vo) { $stocks->rollback(); $current->rollback(); $this->setError("数据保存出错,数据在保存前已被删除!"); return false; } $oldvo = clone $vo; //给Vo对象赋值 $this->refreshStocksInfo(&$vo, $modify[$i]); $result = $stocks->save($vo, $tablename); if (!$result) { $stocks->rollback(); $current->rollback(); system_out("StocksManagerActin.save error:修改数据保存出错,errcode:{$result}"); $this->setError("数据保存出错,数据在保存前已被删除!"); return false; } //生成当前库存表 $rtn = $this->createCurrentStocks($current, $vo->toArray(), $oldvo->toArray()); if (!$rtn) { $current->rollback(); $stocks->rollback(); $this->setError($this->getError()); return false; } } //end if } catch (Exception $e) { $current->rollback(); $stocks->rollback(); throw new Exception($e); } //end try } //end for $stocks->commit(); $current->commit(); return true; }
/** * 库存一览表 * * @param string $condition */ public function queryCurrentStocksGeneral($condition) { try { $storage = new StorageDao(); $sql = "select storageNo,storageName from " . (DB_PREFIX ? DB_PREFIX . "_" : "") . "storage where stype = '库房' or stype='库区' order by storageNo"; $storageList = $storage->query($sql)->toArray(); $stocks = new CurrentStocksDao(); $sql = "select goodsName,spec from " . (DB_PREFIX ? DB_PREFIX . "_" : "") . "currentstocks "; if ($condition != '') { $sql = $sql . " where " . $condition; } $sql .= "group by goodsName,spec"; //echo $sql ; $goodsList = $stocks->query($sql)->toArray(); //数据 $data = array(); for ($i = 0; $i < sizeof($goodsList); $i++) { $item = array(); $item["goodsName"] = $goodsList[$i]["goodsName"]; $item["spec"] = $goodsList[$i]["spec"]; //计算每个仓库的值 foreach ($storageList as $place) { $sql = "goodsName = '" . $goodsList[$i]["goodsName"] . "' and spec ='" . $goodsList[$i]["spec"] . "' and placeno like'" . $place['storageNo'] . "%'"; if ($condition != '') { $sql = $sql . " and " . $condition; } //echo $sql ."<br>"; $sum = $stocks->getSum('qty', $sql); $item[$place['storageNo']] = $sum; } array_push($data, $item); } //计算合计 $sumrecord['goodsName'] = '合计:'; foreach ($storageList as $place) { $sumrecord[$place['storageNo']] = ExFunction::ex_array_sum($data, $place['storageNo']); } array_push($data, $sumrecord); //表的结构 $item = array("goodsName", "spec"); $label = array("goodsName" => "品名", "spec" => "型号"); foreach ($storageList as $place) { array_push($item, $place['storageNo']); $label[$place['storageNo']] = $place['storageName']; } $columnitem = $item; $enabled = array("_type_" => "*"); $visible = array("_type_" => "*"); $align = array(); $width = array("qty" => 50); $inputtype = array(); $struct["item"] = $item; $struct["label"] = $label; $struct["columnitem"] = $columnitem; $struct["enabled"] = $enabled; $struct["visible"] = $visible; $struct["align"] = $align; $struct["width"] = $width; $struct["inputtype"] = $inputtype; //返回值 $rtn["struct"] = $struct; $rtn["data"] = $data; return $rtn; } catch (Exception $e) { throw new Exception($e); } }