|
|
@@ -8170,6 +8170,85 @@ class Procuremen extends Backend
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 月度导出:按列表搜索条件过滤 purchase_order 行(与 procuremenexport 列表一致)
|
|
|
+ *
|
|
|
+ * @param array<int, mixed> $dbRows
|
|
|
+ * @return array<int, array<string, mixed>>
|
|
|
+ */
|
|
|
+ protected function filterMonthOutwardExportDbRowsBySearch(array $dbRows): array
|
|
|
+ {
|
|
|
+ $keyword = trim((string)$this->request->get('search', ''));
|
|
|
+ if ($keyword === '') {
|
|
|
+ $keyword = trim((string)$this->request->request('search', ''));
|
|
|
+ }
|
|
|
+
|
|
|
+ $filter = $this->request->get('filter', '');
|
|
|
+ $op = $this->request->get('op', '');
|
|
|
+ if (is_string($filter) && $filter !== '') {
|
|
|
+ $filterArr = (array)json_decode($filter, true);
|
|
|
+ } else {
|
|
|
+ $filterArr = is_array($filter) ? $filter : [];
|
|
|
+ }
|
|
|
+ if (is_string($op) && $op !== '') {
|
|
|
+ $opArr = (array)json_decode($op, true);
|
|
|
+ } else {
|
|
|
+ $opArr = is_array($op) ? $op : [];
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($keyword === '' && $filterArr === []) {
|
|
|
+ return array_values(array_filter($dbRows, 'is_array'));
|
|
|
+ }
|
|
|
+
|
|
|
+ $searchFields = ['CCYDH', 'CYJMC', 'CGYMC'];
|
|
|
+ $out = [];
|
|
|
+ foreach ($dbRows as $row) {
|
|
|
+ if (!is_array($row)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ($keyword !== '') {
|
|
|
+ $hit = false;
|
|
|
+ foreach ($searchFields as $f) {
|
|
|
+ if (mb_stripos((string)($row[$f] ?? ''), $keyword) !== false) {
|
|
|
+ $hit = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!$hit) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $passFilter = true;
|
|
|
+ foreach ($filterArr as $field => $val) {
|
|
|
+ $field = (string)$field;
|
|
|
+ $val = trim((string)$val);
|
|
|
+ if ($field === '' || $val === '') {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!array_key_exists($field, $row) && !in_array($field, $searchFields, true)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $cell = (string)($row[$field] ?? '');
|
|
|
+ $mode = strtoupper((string)($opArr[$field] ?? 'LIKE'));
|
|
|
+ if ($mode === '=' || $mode === 'EQUAL') {
|
|
|
+ if (strcasecmp($cell, $val) !== 0) {
|
|
|
+ $passFilter = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } elseif (mb_stripos($cell, $val) === false) {
|
|
|
+ $passFilter = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!$passFilter) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $out[] = $row;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $out;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 按月份导出:已完结订单(与历史存证、月度列表一致),按完结月份筛选。
|
|
|
* 表头固定 8 列(与历史「协助明细」模板一致):序号、传票号、传票名称、外加工单位、订法、客户名称、工序、加工金额。
|
|
|
@@ -8210,15 +8289,47 @@ class Procuremen extends Backend
|
|
|
if ($sidList !== []) {
|
|
|
$completeTsMap = ProcuremenTime::loadOperLogTimestampMap(array_keys($sidList), ['purchase_confirm', 'mark_complete']);
|
|
|
}
|
|
|
- $dbRows = array_values(array_filter($dbRows, function ($dbRow) use ($ym, $completeTsMap) {
|
|
|
+
|
|
|
+ $searchKw = trim((string)$this->request->get('search', ''));
|
|
|
+ if ($searchKw === '') {
|
|
|
+ $searchKw = trim((string)$this->request->request('search', ''));
|
|
|
+ }
|
|
|
+ $filterRaw = $this->request->get('filter', '');
|
|
|
+ $filterArrTmp = [];
|
|
|
+ if (is_string($filterRaw) && $filterRaw !== '') {
|
|
|
+ $filterArrTmp = (array)json_decode($filterRaw, true);
|
|
|
+ } elseif (is_array($filterRaw)) {
|
|
|
+ $filterArrTmp = $filterRaw;
|
|
|
+ }
|
|
|
+ $hasSearch = ($searchKw !== '');
|
|
|
+ if (!$hasSearch) {
|
|
|
+ foreach ($filterArrTmp as $fv) {
|
|
|
+ if (trim((string)$fv) !== '') {
|
|
|
+ $hasSearch = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 有搜索时跨月份导出(与列表一致);无搜索时仍按查看月份
|
|
|
+ $dbRows = array_values(array_filter($dbRows, function ($dbRow) use ($ym, $completeTsMap, $hasSearch) {
|
|
|
if (!is_array($dbRow)) {
|
|
|
return false;
|
|
|
}
|
|
|
$done = ProcuremenTime::resolveCompletedDone($dbRow, $completeTsMap);
|
|
|
+ if ($done['ts'] <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if ($hasSearch) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
- return $done['ts'] > 0 && date('Y-m', $done['ts']) === $ym;
|
|
|
+ return date('Y-m', $done['ts']) === $ym;
|
|
|
}));
|
|
|
|
|
|
+ // 与列表页一致:按搜索关键字 / 通用搜索过滤
|
|
|
+ $dbRows = $this->filterMonthOutwardExportDbRowsBySearch($dbRows);
|
|
|
+
|
|
|
$pool = $this->procuremenPoolFromPurchaseOrderDbRows($dbRows);
|
|
|
$filtered = $pool;
|
|
|
|