c5_labsci/web/admin/ap/invoicing.php
2026-01-27 00:52:00 +08:00

306 lines
14 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
namespace web\admin\ap;
class invoicing {
static function setwhere($db, $post, $rsuser) {
$query = $post->get('query', array());
$csql = new \ciy\sql('ap_invoicing');
$liid = objint($query, 'liid');
if ($liid > 0)
$csql->where('auditstatus', $liid);
$val = objstr($query, 'vuser');
if (!empty($val)) {
$csqlt = new \ciy\sql('ap_user');
$csqlt->where('name like', $val);
$trow = $db->getone($csqlt);
if (is_array($trow)) {
$csql->where('vuser', $trow['id']);
$query['vuser'] = $trow['name'];
} else {
$csql->where('vuser=0');
}
}
$val = objstr($query, 'invoicedetailid');
if (!empty($val)) {
$csqlt = new \ciy\sql('ap_invoicedetail');
$csqlt->where('name like', $val);
$trow = $db->getone($csqlt);
if (is_array($trow)) {
$csql->where('invoicedetailid', $trow['id']);
$query['invoicedetailid'] = $trow['name'];
} else {
$csql->where('invoicedetailid=0');
}
}
$csql->wherenumrange('invoicemoney', objstr($query, 'invoicemoney_1'), objstr($query, 'invoicemoney_2'), 100);
$csql->where('invcode like', objstr($query, 'invcode'));
$csql->wheredaterange('addtimes', objstr($query, 'addtimes'));
$csql->where('name like', objstr($query, 'name'));
$csql->where('taxnumber', objstr($query, 'taxnumber'));
$csql->where('auditmsg like', objstr($query, 'auditmsg'));
$order = objstr($query, 'order', 'id desc');
$csql->order($order);
$query['order'] = $order;
return [$query, $csql];
}
public static function json_list() {
global $db;
$rsuser = verifyfast();
$post = new \ciy\post();
list($where, $csql) = self::setwhere($db, $post, $rsuser);
$pageno = $post->getint('pageno', 1);
$pagecount = $post->getint('pagecount', 10);
$csql->limit($pageno, $pagecount);
$mainrowcount = $post->getint('count');
$rows = $db->get($csql, $mainrowcount);
if ($rows === false)
return errjson($db->error);
$ret = array('searchwhere' => $where, 'pageno' => $pageno, 'pagecount' => $pagecount, 'count' => $mainrowcount, 'list' => $rows);
if ($post->getbool('field')) {
$field = array();
$fshow = $db->getfield($field, 'ap_invoicing');
foreach ($field as $fr => $v) {
if (get('_' . $fr))
$field[$fr]['c'] = ',' . $field[$fr]['c'];
}
$fshow = fieldadd($fshow, $field, 0, '_btn', '操作');
$ret['field'] = $field;
$ret['fshow'] = $fshow;
}
if ($post->getbool('once')) {
$ret['once'] = true;
$input = array();
$input[] = array('type' => 'input', 'form' => 'vuser', 'name' => '所属用户', 'prop' => ' style="width:8em;"');
$input[] = array('type' => 'input', 'form' => 'invoicedetailid', 'name' => '所属明细', 'prop' => ' style="width:8em;"');
$input[] = array('type' => 'num', 'form' => 'invoicemoney', 'name' => '开票金额', 'prop' => ' style="width:4em;"');
$input[] = array('type' => 'input', 'form' => 'invcode', 'name' => '发票号码', 'prop' => ' style="width:8em;"');
$input[] = array('type' => 'daterange', 'form' => 'addtimes', 'name' => '申请时间');
$input[] = array('type' => 'input', 'form' => 'name', 'name' => '名称', 'prop' => ' style="width:8em;"');
$input[] = array('type' => 'input', 'form' => 'taxnumber', 'name' => '税号', 'prop' => ' style="width:8em;"');
$input[] = array('type' => 'input', 'form' => 'auditmsg', 'name' => '拒开原因', 'prop' => ' style="width:8em;"');
$ret['searchinput'] = $input;
}
$ret['ap_user'] = getrelation($db, $rows, 'ap_user', 'vuser');
$ret['ap_invoicedetail'] = getrelation($db, $rows, 'ap_invoicedetail', 'invoicedetailid');
return succjson($ret);
}
public static function json_del() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p d'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->get('ids');
if (empty($ids))
return errjson('请选择至少一条');
$csql = new \ciy\sql('ap_invoicing');
$csql->where('id in', $ids);
$rows = $db->get($csql);
$vids = array();
try {
$db->begin();
foreach ($rows as $row) {
if ($row['auditstatus'] < 90)
continue;
if ($row['addtimes'] > tostamp() - 86400 * 14)
continue;
//已开票超过14天或已拒开超过14天
$delid = $row['id'];
delme($db, $delid, 'ap_invoicing');
savelogdb($db, $rsuser['id'], 'ap_invoicing', $row, null);
$vids[] = $delid;
}
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['ids'] = $vids;
return succjson($ret);
}
public static function json_audit() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p a'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$ids = $post->getint('ids');
$auditstatus = $post->getint('auditstatus');
$auditmsg = $post->get('auditmsg');
if ($auditstatus == 90 && empty($auditmsg))
return errjson('请填写驳回原因');
if ($auditstatus == 100) {
$invcode = $post->get('invcode');
$invfile = $post->get('invfile');
if (empty($invfile))
return errjson('请上传发票');
}
$csql = new \ciy\sql('ap_invoicing');
$csql->where('id', $ids);
$mrow = $db->getone($csql);
if (!is_array($mrow))
return errjson('数据不存在');
$ids = array();
try {
$db->begin();
$updata = array();
if ($auditstatus == 100) {
$updata['invcode'] = $invcode;
$updata['invfile'] = $invfile;
} else {
//归还金额
$updata2 = array();
$updata2['myinvmoney'] = array('myinvmoney+' . $mrow['invoicemoney']);
$csql = new \ciy\sql('ap_user');
$csql->where('id', $mrow['vuser']);
if ($db->update($csql, $updata2) === false)
throw new \Exception('更新账户失败:' . $db->error);
}
$updata['auditstatus'] = $auditstatus;
$updata['audittimes'] = tostamp();
$updata['audituser'] = $rsuser['id'];
$updata['auditmsg'] = $auditmsg;
$csql = new \ciy\sql('ap_invoicing');
$csql->where('id', $mrow['id']);
if ($db->update($csql, $updata) === false)
throw new \Exception('审核失败:' . $db->error);
$updata['id'] = $mrow['id'];
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['data'] = $updata;
return succjson($ret);
}
public static function json_reback() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p a'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
$id = $post->getint('id');
$csql = new \ciy\sql('ap_invoicing');
$csql->where('id', $id);
$mrow = $db->getone($csql);
if (!is_array($mrow))
return errjson('数据不存在');
if ($mrow['auditstatus'] != 100)
return errjson('该发票未开票,无法退回');
$ids = array();
try {
$db->begin();
$updata2 = array();
$updata2['myinvmoney'] = array('myinvmoney+' . $mrow['invoicemoney']);
$csql = new \ciy\sql('ap_user');
$csql->where('id', $mrow['vuser']);
if ($db->update($csql, $updata2) === false)
throw new \Exception('更新账户失败:' . $db->error);
$updata = array();
$updata['auditstatus'] = 95;
$updata['audittimes'] = tostamp();
$updata['audituser'] = $rsuser['id'];
$csql = new \ciy\sql('ap_invoicing');
$csql->where('id', $mrow['id']);
if ($db->update($csql, $updata) === false)
throw new \Exception('审核失败:' . $db->error);
$updata['id'] = $mrow['id'];
$db->commit();
} catch (\Exception $ex) {
$db->rollback();
savelogfile('err_db', $ex->getMessage());
return errjson($ex->getMessage());
}
$ret['data'] = $updata;
return succjson($ret);
}
public static function json_exportxls() {
global $db;
$rsuser = verifyfast();
//if (nopower($db, $rsuser['id'], 'p e'))
// return errjson('您未被授权操作');
$post = new \ciy\post();
list($where, $csql) = self::setwhere($db, $post, $rsuser);
$rows = $db->get($csql);
if (count($rows) > 10000)
return errjson('将导出' . count($rows) . '条不建议超过1万条请筛选缩小范围');
$fields = array();
$fields[] = array('style' => 'l', 'width' => 60, 'field' => 'id', 'name' => '行码');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'auditstatus', 'name' => '审核状态');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'vuser', 'name' => '所属用户');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'invoicetitleid', 'name' => '所属抬头');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'invoicedetailid', 'name' => '所属明细');
$fields[] = array('style' => 'r', 'width' => 100, 'field' => 'invoicemoney', 'name' => '开票金额');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'invfile', 'name' => '发票');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'invcode', 'name' => '发票号码');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'addtimes', 'name' => '申请时间');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'name', 'name' => '名称');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'taxnumber', 'name' => '税号');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'addr', 'name' => '单位地址');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'phone', 'name' => '电话号码');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'bankname', 'name' => '银行名称');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'bankaccount', 'name' => '银行账号');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'audittimes', 'name' => '操作时间');
$fields[] = array('style' => 'l', 'width' => 100, 'field' => 'audituser', 'name' => '操作人');
$fields[] = array('style' => 'l', 'width' => 150, 'field' => 'auditmsg', 'name' => '拒开原因');
$code_auditstatus = getcatas($db, 'auditstatus');
$code_vuser = getrelation($db, $rows, 'ap_user', 'vuser', 'id,name');
$code_invoicetitleid = getrelation($db, $rows, 'ap_invoicetitle', 'invoicetitleid', 'id,name');
$code_invoicedetailid = getrelation($db, $rows, 'ap_invoicedetail', 'invoicedetailid', 'id,name');
$code_audituser = getcatas($db, 'adminuser');
$datas = array();
foreach ($rows as $row) {
$dat = array();
foreach ($fields as $field) {
$field = $field['field'];
$val = isset($row[$field]) ? $row[$field] : '';
if ($field == 'id')
$val = enid($val);
if ($field == 'auditstatus')
$val = ccode($code_auditstatus, $val);
if ($field == 'vuser')
$val = ccode($code_vuser, $val);
if ($field == 'invoicetitleid')
$val = ccode($code_invoicetitleid, $val);
if ($field == 'invoicedetailid')
$val = ccode($code_invoicedetailid, $val);
if ($field == 'invoicemoney')
$val = number_format($val / 100, 2);
if ($field == 'addtimes')
$val = ($val <= 0 ? '--' : date('Y-m-d H:i', $val));
if ($field == 'audittimes')
$val = ($val <= 0 ? '--' : date('Y-m-d H:i', $val));
if ($field == 'audituser')
$val = ccode($code_audituser, $val);
$dat[] = $val;
}
$datas[] = $dat;
}
$param = array();
$param['field'] = $fields;
$param['data'] = $datas;
$param['sheetname'] = '数据报表';
$param['titleheight'] = '25'; //列头高度
$param['landscape'] = true; //横向打印
$param['fixtopage'] = true; //打印整个工作表
$param['toptitle'] = '发票开票数据报表';
$str = \ciy\excel::general_excel_xml($param);
$filename = '';
if (empty($filename))
$filename = date('Y-m-d_H-i-s') . rand(1000, 9999);
$filename .= '.xls';
file_put_contents(PATH_WEB . 'ud/tmp/' . $filename, $str);
return succjson(array('url' => '/ud/tmp/' . $filename));
}
}