环境

Snipe-IT Version v5.1.4 - build 5886 (master)
所有插入部分代码均以注释 # start 开头,# end 结尾。

修改一:API 归还,不发邮件问题

描述

修正 API 端:Snipe-IT 在归还资产 API 中,未配置发送邮件事件。导致在使用 API 归还资产时,不会发邮件通知问题。

改完了才发现,在 Snipe-IT v5.1.8 - Bugfix Release 中,这个 API 不发邮件问题已经被别人修正了...

在修正后,需要注释原日志记录,否则 1 个资产在 API 输入/归还时,将在仪表盘 Dashboard 活动日志等地方产生两条相同“输入来源”的记录。检查 Snipe-IT v5.1.8 - Bugfix Release 中未被修复。 * 该问题已经提交并合并到 snipe:develop。

操作

修改页面:

snipeit/app/Http/Controllers/Api/AssetsController.php

修改如下内容:

# start
#$asset->logCheckin($target, e($request→input('note'))); #需注释,否则 1 个资产在 API 输入/归还时,将产生两条相同“输入来源”的活动日志记录
use App\Events\CheckoutableCheckedIn;
# end
public function checkin(Request $request, $asset_id)
{
    ...
    if ($asset->save()) {
        $asset->logCheckin($target, e($request->input('note')));
        # start
        event(new CheckoutableCheckedIn($asset, $target, Auth::user(), $request->input('note')));
        # end
        return response()->json(Helper::formatStandardApiResponse('success', ['asset'=> e($asset->asset_tag)], trans('admin/hardware/message.checkin.success')));
    }
    ...
}

修改二:未接受的资产页面错误数据问题

修改未实际修改数据库内容,仅对显示内容作筛选。如需取消,直接注释相关内容即可。

描述

目标页面:Web 端 -> 报告 -> 未接受的资产
代表事件:放弃入职,入职立马离职等
资产1,借出用户1(未接受/拒绝),归还,借出用户2(未接受/拒绝),归还,借出用户3(未接受/拒绝)
理论:在"未接受的资产"页面,应显示一条资产1与用户1的未接受资产信息,一条资产1与用户21的未接受资产信息,一条资产1与用户2的未接受资产信息。
但实际上:在"未接受的资产"页面将显示 3 条资产1与用户3的未接受资产信息,检查数据库发现这 3 条数据其中包含了用户1 与 用户2的,但是显示上均为用户 3。

修改后,现仅显示以下情况:资产1,最后一次分配给用户3,且用户3未接受/拒绝。中间过程中若有用户未接受/拒绝的记录,将全部不显示。

补充说明

此处修改,仅为符合习惯,此处修改后效果不与"理论"相同。个人感觉毕竟理论与实际还是有差距的。

操作

修改页面:

snipeit/app/Http/Controllers/ReportsController.php

修改内容:

public function getAssetAcceptanceReport()
{
    $this->authorize('reports.view');

    /**
    * Get all assets with pending checkout acceptances
     */

    $acceptances = CheckoutAcceptance::pending()->get();
    # start
    foreach ($acceptances as $k=>$v)
    {
        $ca = CheckoutAcceptance::orderBy('created_at', 'desc')->where('checkoutable_id', $v['checkoutable_id'])->first();
        # 如果不是最后一个 删除
        if ($v['id'] != $ca['id']) {
            unset($acceptances[$k]);
        }
    }
    # end
    ...
}

修改三:只需最终用户签收确认

修改未实际修改数据库内容,仅对显示内容作筛选。如需取消,直接注释相关内容即可。

描述

目标页面:Web 端 -> 用户头像 → Accept Assets(用户资产接受/拒绝页面)
代表事件:放弃入职,入职立马离职等
资产1,借出用户1(未接受/拒绝),归还,借出用户2(未接受/拒绝)
原:用户1与用户2的资产接受/拒绝页面,均会出现资产1,要求用户1与用户2进行签收。
现:只有最后借出到的用户(用户2)的资产接受/拒绝页面,才会出现资产1,要求用户2进行签收。

补充说明

此处修改,仅为符合习惯。

操作

修改页面:

snipeit/app/Http/Controllers/Account/AcceptanceController.php

修改内容:

public function index() {
    $acceptances = CheckoutAcceptance::forUser(Auth::user())->pending()->get();
    # start
    foreach ($acceptances as $k=>$v)
    {
        $ca = CheckoutAcceptance::orderBy('created_at', 'desc')->where('checkoutable_id', $v['checkoutable_id'])->first();
        # 如果不是最后一个 删除
        if ($v['id'] != $ca['id']) {
            unset($acceptances[$k]);
        }
    }
    # end
    return view('account/accept.index', compact('acceptances'));
}
最后修改:2021 年 10 月 19 日 07 : 23 PM
如果觉得文章帮助了您,您可以随意赞赏。