ようこそ! 情シス営業日誌 Monday, January 30 2023 @ 05:58 PM JST

csvでAssetインポート後に一覧に資産が表示されない。

  • 投稿者:
  • 表示回数 29,095
snipe-it

資産(Asset) にcsvでデータをインポート(import)しました。

インポート時にもエラーは特に表示されておらず、TOP画面の「最近のアクティビティ」にインポートした資産アイテムに対する操作が表示されているにもかかわらず、「資産数>全ての一覧」に1件も資産が表示されませんでした。

All資産数のSearch欄に何か情報を入れていると入力データの条件に合った資産がなく、表示されないことはあります。
しかし、今回はSearch欄に何も入っていないので、別の理由で条件に引っかからず、表示されていないのだと推察しました。

 

https://github.com/snipe/snipe-it/issues/6955 によれば、この状況が発生するのは、eolがnullの場合とのことです。

/var/www/snipeit/storage/logs/laravel.log に以下の様にエラーが出ているはずとありました。

[2019-06-19 07:37:37] production.ERROR: ErrorException: date_interval_create_from_date_string(): Unknown or bad format ( months) at position 0 (m): The timezone could not be found in the database in /var/www/snipeit/app/Presenters/AssetPresenter.php:396

eol_time にnullが入っているためということですので、対処方法としては、

  1. snipeit dbを直接操作して、eol_timeを0に上書きする。
  2. ソースの該当部分を変更して、eol_timeがnullでも表示できるようにする。

のどちらかになると思います。

今回、snipe-itのソースで対応することにしました。

/var/www/snipeit/app/Presenters/AssetPresenter.php の以下の部分を探してください。

public function eol_date()
{
    if (( $this->purchase_date ) && ( $this->model )) {
        $date = date_create($this->purchase_date);
        date_add($date, date_interval_create_from_date_string($this->model->model->eol . ' months'));
        return date_format($date, 'Y-m-d');
    }
}
public function eol_date()
{
     if (( $this->purchase_date ) && ( $this->model ) && ($this->model->model->eol)) {
        $date = date_create($this->purchase_date);
        date_add($date, date_interval_create_from_date_string($this->model->model->eol . ' months'));
        return date_format($date, 'Y-m-d');
    }
}

$this->model->model->eolもnullではないか評価するようにすれば回避できるということの様です。

※2019年7月16日時点ではgithubのソースが修正されていることを確認しました。