Files
xinhu/webmain/main/goods/goodsAction.php
2024-10-18 15:27:40 +08:00

388 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class goodsClassAction extends Action
{
public $goodsobj;
public function initAction()
{
$this->goodsobj = m('goods');
}
private function gettypename($tid)
{
return $this->goodsobj->gettypename($tid);
}
public function aftershow($table, $rows)
{
$typearr = $depotarr = array();
$mid = (int)$this->post('mid','0');//根据主表出入库操作
if($rows){
$aid = '0';
foreach($rows as $k=>$rs){
$rows[$k]['typeid'] = $this->gettypename($rs['typeid']);
$aid.=','.$rs['id'].'';
if($rs['stock']=='0')$rows[$k]['stock'] = '';
if($rs['stock']<0)$rows[$k]['ishui']=1;
}
$rows = $this->pandian($aid, $rows);
}else{
if($mid>0){
m('goodm')->update('state=1', $mid);
}
}
if($this->loadci==1){
$type = (int)$this->post('type');
$typearr= $this->option->getdata('kutype'.$type.'');
$where = m('admin')->getcompanywhere(1);
$depotarr = m('godepot')->getall('1=1'.$where.'','id,depotname as name,depotnum','`sort`');
foreach($depotarr as $k=>$rs){
$depotarr[$k]['namea']= $rs['name'];
$depotarr[$k]['name'] = ''.$rs['depotnum'].'.'.$rs['name'].'';
}
}
return array(
'rows' => $rows,
'typearr' => $typearr,
'depotarr' => $depotarr,
);
}
public function beforeshow($table)
{
$key = $this->post('key');
$typeid = (int)$this->post('typeid');
$mid = (int)$this->post('mid','0');//根据主表出入库操作
$where = '';
if($typeid != 0){
$alltpeid = $this->option->getalldownid($typeid);
$where .= ' and `typeid` in('.$alltpeid.')';
}
if($key!=''){
$where .= " and (`name` like '%$key%' or `num` like '%$key%' or `guige` like '%$key%' or `xinghao` like '%$key%') ";
}
$where.=m('admin')->getcompanywhere(1);
if($mid>0){
/*
$carro = m('goodn')->getall('mid='.$mid.' and `couns`<`count`');
$typeids = '0';
foreach($carro as $k=>$rs)$typeids.=','.$rs['aid'].'';
$where .= ' and `id` in('.$typeids.')';
*/
return array(
'where' => 'and b.`mid`='.$mid.' and b.`couns`<b.`count`',
'fields' => 'a.*,(b.`count`-b.`couns`)maxcount',
'table' => '`[Q]goods` a left join `[Q]goodn` b on a.`id`=b.`aid`'
);
}
return $where;
}
//盘点对应仓库库存计算
private function pandian($aid,$rows)
{
if($this->post('atype')!='pan')return $rows;
$ckarr = m('goods')->getstock($aid, $this->post('dt'));
foreach($rows as $k=>&$rs){
$rs['stock'] = '';
if(isset($ckarr[$rs['id']])){
$kdsra= $ckarr[$rs['id']];
$rs['stock'] = $kdsra[0]=='0'?'':$kdsra[0]; //总库存
foreach($kdsra as $k1=>$v1){
if($k1>0)$rs['stockdepotid'.$k1.''] = $v1=='0'?'':$v1; //对应仓库库存
}
}
}
return $rows;
}
public function xiangbeforeshow($table)
{
$key = $this->post('key');
$dt = $this->post('dt');
$types = $this->post('types');
$typeid = (int)$this->post('typeid', 0);
$depotid = (int)$this->post('depotid', 0);
$where = '';
if($typeid>0){
$alltpeid = $this->option->getalldownid($typeid);
$where.=" and b.typeid in($alltpeid)";
}
if($key!=''){
$where .= " and (b.`name` like '%$key%' or a.optname like '%$key%' or c.depotname like '%$key%' )";
}
if($dt!=''){
$where .= " and a.`applydt` like '$dt%' ";
}
if($depotid>0){
$where .= " and a.`depotid`='$depotid'";
}
if($types){
$typea = explode('_', $types);
$where.= ' and a.type='.substr($typea[0],1).' and a.kind='.$typea[1].'';
}
$where .= m('admin')->getcompanywhere(1,'a.');
$table = '`[Q]goodss` a left join `[Q]goods` b on a.aid=b.id left join `[Q]godepot` c on a.depotid=c.id';
$fields = 'a.id,b.name,a.count,c.depotname,a.type,a.kind,a.status,a.optname,b.typeid,b.xinghao,b.guige,a.applydt,a.explain,a.mid';
return array(
'where' => $where,
'table' => $table,
'fields' => $fields,
);
}
public function xiangaftershow($table, $rows)
{
$tyeparr = array();
if($rows){
$typearr0= $this->option->getdata('kutype0');
$typearr1= $this->option->getdata('kutype1');
$tyeparr['a0_3'] = '调拨入库';
$tyeparr['a1_3'] = '调拨出库';
foreach($typearr0 as $k=>$rs)$tyeparr['a0_'.$rs['value'].''] = $rs['name'];
foreach($typearr1 as $k=>$rs)$tyeparr['a1_'.$rs['value'].''] = $rs['name'];
$statusar= array('<font color=blue>待审核</font>','<font color=green>已审核</font>','<font color=red>审核未通过</font>');
$typearr = array();
foreach($rows as $k=>$rs){
$tid = $rs['typeid'];
if(isset($typearr[$tid])){
$rows[$k]['typeid'] = $typearr[$tid];
}else{
$rows[$k]['typeid'] = $this->db->getpval('[Q]option','pid','name', $tid,'/','id',2);
$typearr[$tid] = $rows[$k]['typeid'];
}
$skey = 'a'.$rs['type'].'_'.$rs['kind'].'';
$kind = '';
if(isset($tyeparr[$skey]))$kind = $tyeparr[$skey];
$rows[$k]['kind'] = $kind;
$rows[$k]['status'] = $statusar[$rs['status']];
if($rs['mid']>0)$rows[$k]['checkdisabled'] = true;//有主表ID不能删除
}
}
$barr = array('rows' => $rows,'tyeparr'=>$tyeparr);
return $barr;
}
/**
* 删除出入库详情
*/
public function delxiangAjax()
{
$ids = c('check')->onlynumber($this->post('id','0'));
m('goodss')->delete("id in($ids) and `mid`=0");
backmsg();
}
public function chukuoptAjax()
{
$dt = $this->post('dt');
$type = (int)$this->post('type');
$depotid= (int)$this->post('depotid');
$kind = (int)$this->post('kind');
$mid = (int)$this->post('mid','0');
$sm = $this->post('sm');
$cont = $this->post('cont');
$sharr = c('array')->strtoarray($cont);
$arr['applydt'] = $dt;
$arr['type'] = $type;
$arr['kind'] = $kind;
$arr['depotid'] = $depotid;
$arr['explain'] = $sm;
$arr['uid'] = $this->adminid;
$arr['optid'] = $this->adminid;
$arr['optdt'] = $this->now;
$arr['comid'] = m('admin')->getcompanyid();
$arr['optname'] = $this->adminname;
$arr['status'] = 1;
$aid = '0';
$ndbs = m('goodn');
$mtype = -1;
//根据主表出入库操作
if($mid>0){
$mrs = m('goodm')->getone("`id`='$mid' and `status`=1");
if(!$mrs)return '该单据还未审核完成,不能出入库操作';
//读取已入库数量
$arwos = $ndbs->getall('`mid`='.$mid.' and `couns`<`count`');
$ruks = array();
foreach($arwos as $k1=>$rs1){
$ruks[$rs1['aid']] = array(
'kes' => floatval($rs1['count']) - floatval($rs1['couns']),//还可入库数
'id' => $rs1['id'],
'couns' => floatval($rs1['couns'])
);
}
$mtype = (int)$mrs['type']; //3就是调拨
$arr['comid'] = $mrs['comid'];
}
//调拨必须先出库原来的
if($mtype==3 && $depotid==$mrs['custid'])return '调拨出入库仓库不能相同';
foreach($sharr as $k=>$rs){
$arr['aid'] = $rs[0];
$count = (int)$rs[1];
$arr['depotid'] = $depotid;
$arr['type'] = $type;
$arr['explain'] = $sm;
if($count<0)$count = 0-$count;
if($mid>0){
if(!isset($ruks[$arr['aid']]))continue;
$shua = $ruks[$arr['aid']];
if($count>$shua['kes'])$count=$shua['kes'];//超过
$arr['mid'] = $mid;
}
if($count==0)continue;
$arr['count'] = $count;
if($type==1)$arr['count'] = 0- $arr['count'];//出库为负数
$ussid = $this->db->record('[Q]goodss', $arr);
$aid.=','.$rs[0].'';
//更新已出入库的数量
if($mid>0 && $ussid){
$ndbs->update('`couns`=`couns`+'.$count.'', $shua['id']);
}
if($mtype==3){
$arr['depotid'] = $mrs['custid']; //仓库
$arr['type'] = 1; //出库
$arr['count'] = 0 - $count;
//$arr['explain'] = '调拨出库';
$this->db->record('[Q]goodss', $arr);
}
}
if($aid!='0')m('goods')->setstock($aid);
if($mid>0){
m('goods')->upstatem($mid);
}
return 'success';
}
//刷新库存
public function reloadkcAjax()
{
m('goods')->setstock();
}
//出入库操作
public function croptbeforeshow($table)
{
$key = $this->post('key');
$where= '';
if($key!=''){
$where.=" and (b.`uname` like '%$key%' or b.`sericnum` like '$key%')";
}
$where .= m('admin')->getcompanywhere(1,'a.');
return array(
'where' => 'and a.`status`=1 and a.`type`<>6 and a.`state`<>1 '.$where.'',
'table' => '`[Q]'.$table.'` a left join `[Q]flow_bill` b on a.id=b.mid and b.`table`=\''.$table.'\'',
'fields' => 'a.id,a.applydt,a.optdt,a.`explain`,a.`state`,a.`type`,b.uname,b.sericnum,b.udeptname'
);
}
public function croptaftershow($table, $rows)
{
$dgs = m('goods');
$typeb = array('0' ,'1' ,'2' ,'3', '4','5');
$typea = array('领用单' ,'采购单' ,'销售单' ,'调拨单', '归还单','退货单');
$biana = array('goodly' ,'caigou' ,'custxiao','diaobo', 'goodgh','tuihuo');
$chux = array('0','2');
if($rows)foreach($rows as $k=>&$rs){
$rs['mknum'] = arrvalue($biana, $rs['type']);
$rs['typev'] = $rs['type'];
$rs['type'] = arrvalue($typea, $rs['type']);
$lx = 0; //入
if(in_array($rs['typev'],$chux))$lx=1;
$rs['state'] = $dgs->crkstate($rs['state'], $lx);
}
return array(
'rows' => $rows
);
}
//根据仓库统计
public function pdck_beforeshow($table)
{
$depotid = (int)$this->post('depotid');
$where = 'and a.`depotid`='.$depotid.'';
$key = $this->post('key');
$dt = $this->post('dt');
if($key!=''){
$where .= " and (b.`name` like '%$key%' or b.`num` like '%$key%' or b.`guige` like '%$key%' or b.`xinghao` like '%$key%') ";
}
if($dt!=''){
$where .= " and a.`applydt` <= '$dt'";
}
return array(
'table' => '`[Q]goodss` a left join `[Q]goods` b on a.`aid`=b.`id`',
'where' => $where,
'fields'=> 'b.*,sum(a.`count`) as `stock`',
'group' => 'a.`aid`'
);
}
public function pdck_aftershow($table, $rows)
{
foreach($rows as $k=>$rs){
$rows[$k]['typeid'] = $this->gettypename($rs['typeid']);
if($rs['stock']<='0')$rows[$k]['ishui']=1;
}
return array(
'rows' => $rows
);
}
//打印二维码
public function printewmAction()
{
$sid = c('check')->onlynumber($this->get('sid'));
$rows= m('goods')->getall('id in('.$sid.')');
foreach($rows as $k=>$rs){
$rows[$k]['url'] = $this->jm->base64encode('task.php?a=x&num=goods&mid='.$rs['id'].'');
}
$this->assign('rows', $rows);
$this->displayfile = ''.P.'/main/assetm/tpl_assetm_printewm.html';
$this->title = '物品二维码打印';
}
}