|
|
@@ -3016,6 +3016,32 @@ class Procuremen extends Backend
|
|
|
return $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 直接点「完结」时间:优先操作记录 mark_complete
|
|
|
+ */
|
|
|
+ protected function resolveProcuremenMarkCompleteTime(int $scydgyId): string
|
|
|
+ {
|
|
|
+ if (!$this->isValidScydgyRowId($scydgyId)) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ $log = Db::table('purchase_order_oper_log')
|
|
|
+ ->where('scydgy_id', $scydgyId)
|
|
|
+ ->where('action', 'mark_complete')
|
|
|
+ ->order('id', 'desc')
|
|
|
+ ->find();
|
|
|
+ if (is_array($log)) {
|
|
|
+ $ct = (int)($log['createtime'] ?? 0);
|
|
|
+ if ($ct > 946684800) {
|
|
|
+ return date('Y-m-d H:i:s', $ct);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ }
|
|
|
+
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 详情弹层:进度步骤 + 订单摘要 + 下发明细(已下发 / 已完结均可用)
|
|
|
*
|
|
|
@@ -3096,9 +3122,17 @@ class Procuremen extends Backend
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ $directComplete = ($mainStatus === 1 && !$issued);
|
|
|
+ $scydgyId = (int)($main['scydgy_id'] ?? 0);
|
|
|
+
|
|
|
$doneTime = '';
|
|
|
if ($mainStatus === 1) {
|
|
|
- $doneTime = $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
|
|
|
+ if ($directComplete) {
|
|
|
+ $doneTime = $this->resolveProcuremenMarkCompleteTime($scydgyId);
|
|
|
+ }
|
|
|
+ if ($doneTime === '') {
|
|
|
+ $doneTime = $this->formatProcuremenDetailTime($main['updatetime'] ?? null);
|
|
|
+ }
|
|
|
if ($doneTime === '') {
|
|
|
foreach ($details as $dr) {
|
|
|
if (!is_array($dr)) {
|
|
|
@@ -3115,41 +3149,51 @@ class Procuremen extends Backend
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $step1Done = $issued;
|
|
|
- $step2Done = $issued;
|
|
|
- // wflow=1:初选已下发、待审批确认通知;wflow>=2 或旧数据(有明细且 wf=0)视为已通知
|
|
|
- $step3Done = $wflowStatus >= 2 || ($wflowStatus === 0 && $issueCnt > 0);
|
|
|
- $step4Done = $acceptCnt > 0;
|
|
|
- $step5Done = false;
|
|
|
- foreach ($details as $dr) {
|
|
|
- if (is_array($dr) && (int)($dr['status'] ?? 0) === 1) {
|
|
|
- $step5Done = true;
|
|
|
- break;
|
|
|
+ if ($directComplete) {
|
|
|
+ // 未下发直接完结:仅「未发」「已完结」两步完成,中间环节保持未进行
|
|
|
+ $step1Done = $hasMain;
|
|
|
+ $step2Done = false;
|
|
|
+ $step3Done = false;
|
|
|
+ $step4Done = false;
|
|
|
+ $step5Done = false;
|
|
|
+ $step6Done = true;
|
|
|
+ } else {
|
|
|
+ $step1Done = $issued;
|
|
|
+ $step2Done = $issued;
|
|
|
+ // wflow=1:初选已下发、待审批确认通知;wflow>=2 或旧数据(有明细且 wf=0)视为已通知
|
|
|
+ $step3Done = $wflowStatus >= 2 || ($wflowStatus === 0 && $issueCnt > 0);
|
|
|
+ $step4Done = $acceptCnt > 0;
|
|
|
+ $step5Done = false;
|
|
|
+ foreach ($details as $dr) {
|
|
|
+ if (is_array($dr) && (int)($dr['status'] ?? 0) === 1) {
|
|
|
+ $step5Done = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- $step6Done = $mainStatus === 1;
|
|
|
+ $step6Done = $mainStatus === 1;
|
|
|
|
|
|
- // 主表已完结:中间环节按业务视为已全部完成(不显示灰色「未到达」)
|
|
|
- if ($mainStatus === 1) {
|
|
|
- $step3Done = true;
|
|
|
- $step4Done = true;
|
|
|
- $step5Done = true;
|
|
|
- if ($supplierTime === '') {
|
|
|
- $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
- if ($fillT !== '') {
|
|
|
- $supplierTime = $fillT;
|
|
|
+ // 已走下发流程并完结:中间环节按业务视为已全部完成(不显示灰色「未到达」)
|
|
|
+ if ($mainStatus === 1 && $issued) {
|
|
|
+ $step3Done = true;
|
|
|
+ $step4Done = true;
|
|
|
+ $step5Done = true;
|
|
|
+ if ($supplierTime === '') {
|
|
|
+ $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
+ if ($fillT !== '') {
|
|
|
+ $supplierTime = $fillT;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- if ($pickedTime === '') {
|
|
|
- $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
- if ($fillT !== '') {
|
|
|
- $pickedTime = $fillT;
|
|
|
+ if ($pickedTime === '') {
|
|
|
+ $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
+ if ($fillT !== '') {
|
|
|
+ $pickedTime = $fillT;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- if ($auditNotifyTime === '') {
|
|
|
- $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
- if ($fillT !== '') {
|
|
|
- $auditNotifyTime = $fillT;
|
|
|
+ if ($auditNotifyTime === '') {
|
|
|
+ $fillT = $doneTime !== '' ? $doneTime : $poTime;
|
|
|
+ if ($fillT !== '') {
|
|
|
+ $auditNotifyTime = $fillT;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -3196,10 +3240,12 @@ class Procuremen extends Backend
|
|
|
];
|
|
|
|
|
|
$currentIdx = count($steps) - 1;
|
|
|
- foreach ($steps as $i => $s) {
|
|
|
- if (!$s['done']) {
|
|
|
- $currentIdx = $i;
|
|
|
- break;
|
|
|
+ if (!$directComplete) {
|
|
|
+ foreach ($steps as $i => $s) {
|
|
|
+ if (!$s['done']) {
|
|
|
+ $currentIdx = $i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
$nSteps = count($steps);
|