信呼OA版本v2.3.8

This commit is contained in:
雨中磐石
2022-08-14 16:47:40 +08:00
parent 4640677d27
commit e3fcd913e3
1405 changed files with 133635 additions and 73 deletions

View File

@@ -0,0 +1,385 @@
<?php
class goodsClassAction extends Action
{
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.`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('领用单' ,'采购单' ,'销售单' ,'调拨单', '归还单','退货单');
$chux = array('0','2');
if($rows)foreach($rows as $k=>&$rs){
$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 = '物品二维码打印';
}
}