You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2018-05-14 14:47:05

casper_1707
Member
Registered: 2018-05-14
Posts: 4

Report plugin - custom report

Hello,

I'm trying to make a report for a selected location (like list equip by location) with the following structure:
  1. Crit. No. (autonumbered)
  2. Computer Model (Computer Serial Number)
  3. Computer specifications (CPU, total SODIMM, HDD size)
  4. Installed software

Can anyone help me constructing this report?

Best Regards,
Chris

Offline

#2 2018-05-22 09:13:30

casper_1707
Member
Registered: 2018-05-14
Posts: 4

Re: Report plugin - custom report

Hello,

So far i've managed to display some of needed columns.

I can't display the total installed memory, total hdd size and installed software.

Can anybody help me?

Thanks,
Chris

<?php

$USEDBREPLICATE        = 1;
$DBCONNECTION_REQUIRED = 0;

include ("../../../../inc/includes.php");

//TRANS: The name of the report = List of equipments by location
$report = new PluginReportsAutoReport(__('sentinel_report_title', 'reports'));
$loc    = new PluginReportsLocationCriteria($report);

$report->setColumns([new PluginReportsColumnModelType('models_id', __('Model'), 'itemtype',
                                                   ['with_comment' => 1]),
                     new PluginReportsColumn('serial', __('Serial number')),
                     new PluginReportsColumn('osname', __('Operating System')),
                     new PluginReportsColumn('proc', __('Processor'))]);
                     new PluginReportsColumn('mem', __('Memory'))]);
                     new PluginReportsColumn('hdd', __('HDD Size'))]);
                     new PluginReportsColumn('software', __('Installed software'))]);

//Display criterias form is needed
$report->displayCriteriasForm();

//If criterias have been validated
if ($report->criteriasValidated()) {
    $report->setSubNameAuto();
    $query = getSqlSubRequest("Computer",$loc,new Computer());

    $report->setGroupBy("entity","itemtype");
    $report->setSqlRequest($query);
    $report->execute();
}
else {
    Html::footer();
}

function getSqlSubRequest($itemtype,$loc,$obj) {

$dbu = new DbUtils();

$table     = getTableForItemType($itemtype);
$models_id = getForeignKeyFieldForTable(getTableForItemType($itemtype.'Model'));
$types_id  = getForeignKeyFieldForTable(getTableForItemType($itemtype.'Type'));
$fields    = [$models_id         => 'models_id',
              'serial'           => 'serial',
              'id'               => 'id'];

$query_where = "SELECT '$itemtype' AS itemtype,
                       `$table`.`id` AS items_id,
                       `$table`.`locations_id`";

$join = "";
foreach ($fields as $field => $alias) {
    if ($obj->isField($field)) {
        if ($field == 'id' && $itemtype == 'Computer') {
            $query_where .= ", `glpi_operatingsystems`.`name` AS osname, `glpi_deviceprocessors`.`designation` AS proc, `glpi_items_deviceharddrives`.`capacity` AS hdd, `glpi_items_devicememories`.`size` AS mem";
            $join .= "LEFT JOIN `glpi_items_operatingsystems` ON `glpi_items_operatingsystems`.`items_id` = `$table`.`id` AND `glpi_items_operatingsystems`.`itemtype` = 'Computer'
                      LEFT JOIN `glpi_operatingsystems` ON `glpi_operatingsystems`.`id` = `glpi_items_operatingsystems`.`operatingsystems_id`
                      LEFT JOIN `glpi_items_deviceprocessors` ON `glpi_items_deviceprocessors`.`items_id` = `$table`.`id` AND `glpi_items_deviceprocessors`.`itemtype` = 'Computer'
                      LEFT JOIN `glpi_deviceprocessors` ON `glpi_items_deviceprocessors`.`deviceprocessors_id` = `glpi_deviceprocessors`.`id`
                      LEFT JOIN glpi_items_deviceharddrives ON (glpi_computers.id = glpi_items_deviceharddrives.items_id AND glpi_items_deviceharddrives.itemtype = 'Computer')
                      LEFT JOIN glpi_deviceharddrives ON (glpi_items_deviceharddrives.deviceharddrives_id = glpi_deviceharddrives.id)
                      LEFT JOIN glpi_items_devicememories ON (glpi_computers.id = glpi_items_devicememories.items_id AND glpi_items_devicememories.itemtype = 'Computer')
                      LEFT JOIN glpi_devicememories ON (glpi_items_devicememories.devicememories_id = glpi_devicememories.id) ";

        } else {
            $query_where .= ", `$table`.`$field` AS $alias";
        }
    } else {
        $query_where .= ", '' AS $alias";
    }
}

$query_where .= " FROM `$table` $join ";
if ($obj->isEntityAssign()) {
    $query_where .= $dbu->getEntitiesRestrictRequest('WHERE', "$table");
} else {
    $query_where .= ' WHERE 1';
}

if ($obj->maybeTemplate()) {
    $query_where .= " AND `is_template`='0'";
}

if ($obj->maybeDeleted()) {
    if ($itemtype == 'Computer') {
        $query_where .= " AND `$table`.`is_deleted`='0'";
    } else {
        $query_where .= " AND `is_deleted`='0'";
    }
}

if ($loc->getSqlCriteriasRestriction() != "") {
    $query_where .= " " . substr_replace($loc->getSqlCriteriasRestriction(), "$table.", 4, 0);
} else {
    $query_where .= "";
}

return $query_where;
}

Last edited by casper_1707 (2018-05-22 13:03:39)

Offline

#3 2018-05-29 11:43:17

casper_1707
Member
Registered: 2018-05-14
Posts: 4

Re: Report plugin - custom report

Finally, i've managed to do the wanted report.

Below the code.

<?php

$USEDBREPLICATE        = 1;
$DBCONNECTION_REQUIRED = 0;

include ("../../../../inc/includes.php");

//TRANS: The name of the report = List of equipments by location
$report = new PluginReportsAutoReport(__('sentinel_report_title', 'reports'));
$loc    = new PluginReportsLocationCriteria($report);

$report->setColumns([new PluginReportsColumnModelType('models_id', __('Model'), 'itemtype',
                                                   ['with_comment' => 1]),
                     new PluginReportsColumn('serial', __('Serial number')),
                     new PluginReportsColumn('osname', __('Operating System')),
                     new PluginReportsColumn('proc', __('Procesor')),
                     new PluginReportsColumn('mem', __('Memorie (GB)')),
                     new PluginReportsColumn('hdd', __('Stocare')),
                     new PluginReportsColumn('software', __('Software instalat'))]);

//Display criterias form is needed
$report->displayCriteriasForm();

//If criterias have been validated
if ($report->criteriasValidated()) {
    $report->setSubNameAuto();
    $query = getSqlSubRequest("Computer",$loc,new Computer());

    $report->setGroupBy("entity","itemtype");
    $report->setSqlRequest($query);
    $report->execute();
}
else {
    Html::footer();
}

function getSqlSubRequest($itemtype,$loc,$obj) {

$dbu = new DbUtils();

$table     = getTableForItemType($itemtype);
$models_id = getForeignKeyFieldForTable(getTableForItemType($itemtype.'Model'));
$types_id  = getForeignKeyFieldForTable(getTableForItemType($itemtype.'Type'));
$fields    = [$models_id         => 'models_id',
              'serial'           => 'serial',
              'id'               => 'id'];

$query_where = "SELECT '$itemtype' AS itemtype,
                       `$table`.`id` AS items_id,
                       `$table`.`locations_id`";

$join = "";
foreach ($fields as $field => $alias) {
    if ($obj->isField($field)) {
        if ($field == 'id' && $itemtype == 'Computer') {
            $query_where .= ", `glpi_operatingsystems`.`name` AS osname,
                               `glpi_deviceprocessors`.`designation` AS proc,
                                (SELECT
                                     GROUP_CONCAT(
                                          CONCAT(`glpi_deviceharddrives`.`designation`, '<br />')
                                          SEPARATOR ''
                                     )
                                FROM `glpi_deviceharddrives`
                                LEFT JOIN `glpi_items_deviceharddrives` ON `glpi_items_deviceharddrives`.`deviceharddrives_id` = `glpi_deviceharddrives`.`id`
                                WHERE `glpi_items_deviceharddrives`.`items_id` = `glpi_computers`.`id`
                                ) AS hdd,
                                (SELECT
                                     ROUND((SUM(`glpi_items_devicememories`.`size`)/1024),0)
                                FROM `glpi_items_devicememories`
                                WHERE `glpi_items_devicememories`.`items_id` = `glpi_computers`.`id`
                                ) AS mem,
                                (SELECT
                                     GROUP_CONCAT(
                                          CONCAT(`glpi_softwares`.`name`, '<br />')
                                          SEPARATOR ''
                                     )
                                FROM `glpi_softwares`
                                LEFT JOIN `glpi_softwareversions` ON ( `glpi_softwares`.`id` = `glpi_softwareversions`.`softwares_id` )
                                LEFT JOIN `glpi_computers_softwareversions` ON ( `glpi_computers_softwareversions`.`softwareversions_id` = `glpi_softwareversions`.`id` )
                                WHERE `glpi_computers_softwareversions`.`computers_id` = `glpi_computers`.`id`
                                ) AS software  ";
            $join .= "LEFT JOIN `glpi_items_operatingsystems` ON `glpi_items_operatingsystems`.`items_id` = `$table`.`id` AND `glpi_items_operatingsystems`.`itemtype` = 'Computer'
                      LEFT JOIN `glpi_operatingsystems` ON `glpi_operatingsystems`.`id` = `glpi_items_operatingsystems`.`operatingsystems_id`
                      LEFT JOIN `glpi_items_deviceprocessors` ON `glpi_items_deviceprocessors`.`items_id` = `$table`.`id` AND `glpi_items_deviceprocessors`.`itemtype` = 'Computer'
                      LEFT JOIN `glpi_deviceprocessors` ON `glpi_items_deviceprocessors`.`deviceprocessors_id` = `glpi_deviceprocessors`.`id` ";
        } else {
            $query_where .= ", `$table`.`$field` AS $alias";
        }
    } else {
        $query_where .= ", '' AS $alias";
    }
}

$query_where .= " FROM `$table` $join ";
if ($obj->isEntityAssign()) {
    $query_where .= $dbu->getEntitiesRestrictRequest('WHERE', "$table");
} else {
    $query_where .= ' WHERE 1';
}

//if ($obj->maybeTemplate()) {
//    $query_where .= " AND `is_template`='0'";
//}

if ($obj->maybeDeleted()) {
    if ($itemtype == 'Computer') {
        $query_where .= " AND `$table`.`is_deleted`='0'";
    } else {
        $query_where .= " AND `is_deleted`='0'";
    }
}

if ($loc->getSqlCriteriasRestriction() != "") {
    $query_where .= " " . substr_replace($loc->getSqlCriteriasRestriction(), "$table.", 4, 0);
} else {
    $query_where .= "";
}

$query_where .= " GROUP BY `glpi_computers`.`id`";
return $query_where;
}

Offline

Board footer

Powered by FluxBB