diff --git a/CHANGELOG.md b/CHANGELOG.md index 233952fe40..ffa27f1761 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fix generate associated item massive action - Update locales - +- Migration of reports to next version of plugin Reports ## [2.12.6] - 2026-02-23 diff --git a/report/deliveryinfos/deliveryinfos.php b/report/deliveryinfos/deliveryinfos.php index b63e36e3d8..7644ec1987 100644 --- a/report/deliveryinfos/deliveryinfos.php +++ b/report/deliveryinfos/deliveryinfos.php @@ -39,17 +39,25 @@ */ //Options for GLPI 0.71 and newer : need slave db to access the report +use Glpi\DBAL\QueryExpression; +use Glpi\DBAL\QuerySubQuery; +use GlpiPlugin\Reports\AutoReport; +use GlpiPlugin\Reports\ColumnInteger; +use GlpiPlugin\Reports\ColumnLink; +use GlpiPlugin\Reports\DateIntervalCriteria; +use GlpiPlugin\Reports\DropdownCriteria; +use GlpiPlugin\Reports\LocationCriteria; +use GlpiPlugin\Reports\SupplierCriteria; + $USEDBREPLICATE = 1; $DBCONNECTION_REQUIRED = 0; // Really a big SQL request -include(__DIR__ . "/../../../../inc/includes.php"); - -$report = new PluginReportsAutoReport(__s("deliveryinfos_report_title", "order")); -new PluginReportsDateIntervalCriteria($report, 'order_date', __s("Date of order", "order")); -new PluginReportsDateIntervalCriteria($report, 'deliverydate', __s("Delivery date")); -new PluginReportsLocationCriteria($report, 'locations_id', __s("Delivery location", "order")); -new PluginReportsSupplierCriteria($report, 'suppliers_id', __s("Supplier")); -new PluginReportsDropdownCriteria( +$report = new AutoReport(__s("Orders delivery statistics", "order")); +new DateIntervalCriteria($report, 'order_date', __s("Date of order", "order")); +new DateIntervalCriteria($report, 'deliverydate', __s("Delivery date")); +new LocationCriteria($report, 'locations_id', __s("Delivery location", "order")); +new SupplierCriteria($report, 'suppliers_id', __s("Supplier")); +new DropdownCriteria( $report, 'plugin_order_orderstates_id', 'PluginOrderOrderState', @@ -61,36 +69,76 @@ $report->setSubNameAuto(); $report->setColumns([ - new PluginReportsColumnLink( + new ColumnLink( 'suppliers_id', __s("Supplier"), 'Supplier', ), - new PluginReportsColumnLink( + new ColumnLink( 'entities_id', __s("Entity"), 'Entity', ), - new PluginReportsColumnInteger('total', __s("Orders total", "order")), - new PluginReportsColumnInteger('late', __s("Late orders total", "order")), + new ColumnInteger('total', __s("Orders total", "order")), + new ColumnInteger('late', __s("Late orders total", "order")), ]); - //TODO : ne pas chercher dans la poublelles - $query_total = "SELECT count(*) FROM `glpi_plugin_order_orders`"; - $query_total .= getEntitiesRestrictRequest(" WHERE", "glpi_plugin_order_orders"); - $query_total .= $report->addSqlCriteriasRestriction(); - $query_total .= "AND `glpi_plugin_order_orders`.`suppliers_id`=`suppliers`.`id`"; - $query_late = $query_total . " AND `is_late`='1' AND `is_deleted`='0' AND `is_template`='0'"; + $criteria_total = [ + 'SELECT' => [ + 'COUNT' => 'glpi_plugin_order_orders.id', + ], + 'FROM' => 'glpi_plugin_order_orders', + 'WHERE' => [ + 'glpi_plugin_order_orders.is_deleted' => '0', + 'glpi_plugin_order_orders.is_template' => '0', + 'glpi_plugin_order_orders.suppliers_id' => new QueryExpression('suppliers.id'), + ], + ]; + + $criteria_total['WHERE'] += getEntitiesRestrictCriteria( + 'glpi_plugin_order_orders', + ); + + $criteria_total['WHERE'] += $report->addNewSqlCriteriasRestriction(); + + $criteria_late = $criteria_total; + $criteria_late['WHERE'] += [ + 'glpi_plugin_order_orders.is_late' => 1, + ]; - $supplier = "JOIN `glpi_suppliers`as suppliers - ON (`glpi_plugin_order_orders`.`suppliers_id` = suppliers.`id`)"; + $criteria = [ + 'SELECT' => [ + 'glpi_plugin_order_orders.suppliers_id', + new QuerySubQuery($criteria_total, 'total'), + new QuerySubQuery($criteria_late, 'late'), + ], + 'DISTINCT' => true, + 'FROM' => 'glpi_plugin_order_orders', + 'LEFT JOIN' => [ + 'glpi_suppliers as suppliers' => [ + 'ON' => [ + 'glpi_plugin_order_orders' => 'suppliers_id', + 'suppliers' => 'id', + ], + ], + ], + 'WHERE' => [ + 'glpi_plugin_order_orders.is_deleted' => '0', + 'glpi_plugin_order_orders.is_template' => '0', + ], + 'GROUPBY' => ['suppliers_id'], + ]; + + $criteria['WHERE'] += getEntitiesRestrictCriteria( + 'glpi_plugin_order_orders', + ); + + $criteria['WHERE'] += $report->addNewSqlCriteriasRestriction(); + + $report->setSqlRequest($criteria); - $query = "SELECT DISTINCT `suppliers_id`, ({$query_total}) AS `total`, ({$query_late}) AS `late` - FROM `glpi_plugin_order_orders` {$supplier}"; - $query .= getEntitiesRestrictRequest(" WHERE", "glpi_plugin_order_orders"); - $query .= $report->addSqlCriteriasRestriction(); - $report->setGroupBy("suppliers_id"); - $report->setSqlRequest($query); $report->execute(); } + +$report->footer(); diff --git a/report/orderdelivery/orderdelivery.php b/report/orderdelivery/orderdelivery.php index cfd9449bb9..9a627e35ce 100644 --- a/report/orderdelivery/orderdelivery.php +++ b/report/orderdelivery/orderdelivery.php @@ -39,17 +39,25 @@ */ //Options for GLPI 0.71 and newer : need slave db to access the report +use GlpiPlugin\Reports\AutoReport; +use GlpiPlugin\Reports\Column; +use GlpiPlugin\Reports\ColumnDateTime; +use GlpiPlugin\Reports\ColumnLink; +use GlpiPlugin\Reports\DateIntervalCriteria; +use GlpiPlugin\Reports\DropdownCriteria; +use GlpiPlugin\Reports\LocationCriteria; +use GlpiPlugin\Reports\SupplierCriteria; + $USEDBREPLICATE = 1; $DBCONNECTION_REQUIRED = 0; // Really a big SQL request -include(__DIR__ . "/../../../../inc/includes.php"); +$report = new AutoReport(__s("Orders delivery", "order")); -$report = new PluginReportsAutoReport(__s("orderdelivery_report_title", "order")); -new PluginReportsDateIntervalCriteria($report, 'order_date', __s("Date of order", "order")); -new PluginReportsDateIntervalCriteria($report, 'deliverydate', __s("Delivery date")); -new PluginReportsLocationCriteria($report, 'locations_id', __s("Delivery location", "order")); -new PluginReportsSupplierCriteria($report, 'suppliers_id', __s("Supplier")); -new PluginReportsDropdownCriteria( +new DateIntervalCriteria($report, 'order_date', __s("Date of order", "order")); +new DateIntervalCriteria($report, 'deliverydate', __s("Delivery date")); +new LocationCriteria($report, 'locations_id', __s("Delivery location", "order")); +new SupplierCriteria($report, 'suppliers_id', __s("Supplier")); +new DropdownCriteria( $report, 'plugin_order_orderstates_id', 'PluginOrderOrderState', @@ -61,36 +69,36 @@ $report->setSubNameAuto(); $report->setColumns([ - new PluginReportsColumnLink( + new ColumnLink( 'entities_id', __s("Entity"), 'Entity', ), - new PluginReportsColumnLink( + new ColumnLink( 'id', __s("Name"), 'PluginOrderOrder', [ - 'with_comment' => true, + 'with_comment' => true, 'with_navigate' => true, ], ), - new PluginReportsColumn('num_order', __s("Order number", "order")), - new PluginReportsColumnLink( + new Column('num_order', __s("Order number", "order")), + new ColumnLink( 'suppliers_id', __s("Supplier"), 'Supplier', ), - new PluginReportsColumnLink( + new ColumnLink( 'plugin_order_orderstates_id', __s("Status"), 'PluginOrderOrderState', ['with_comment' => true], ), - new PluginReportsColumnDateTime('order_date', __s("Date of order", "order")), - new PluginReportsColumnDateTime('duedate', __s("Estimated due date", "order")), - new PluginReportsColumnDateTime('deliverydate', __s("Delivery date")), - new PluginReportsColumnLink( + new ColumnDateTime('order_date', __s("Date of order", "order")), + new ColumnDateTime('duedate', __s("Estimated due date", "order")), + new ColumnDateTime('deliverydate', __s("Delivery date")), + new ColumnLink( 'locations_id', __s("Delivery location", "order"), 'Location', @@ -98,13 +106,27 @@ ), ]); - //TODO : ne pas chercher dans la poublelles - $query = "SELECT * FROM `glpi_plugin_order_orders`"; - $query .= getEntitiesRestrictRequest(" WHERE", "glpi_plugin_order_orders"); - $query .= $report->addSqlCriteriasRestriction(); - $query .= " AND `is_deleted`='0' AND `is_template`='0' "; - $query .= "GROUP BY `entities_id`, `plugin_order_orderstates_id`, `num_order`, `order_date`"; - $report->setGroupBy("entities_id", "plugin_order_orderstates_id", "num_order", "order_date"); - $report->setSqlRequest($query); + $criteria = [ + 'SELECT' => [ + '*', + ], + 'FROM' => 'glpi_plugin_order_orders', + 'WHERE' => [ + 'is_deleted' => 0, + 'is_template' => 0, + ], + 'GROUPBY' => ['entities_id', 'plugin_order_orderstates_id', 'num_order', 'order_date'], + ]; + + $criteria['WHERE'] += getEntitiesRestrictCriteria( + 'glpi_plugin_order_orders', + ); + + $criteria['WHERE'] += $report->addNewSqlCriteriasRestriction(); + + $report->setSqlRequest($criteria); + $report->execute(); } + +$report->footer(); diff --git a/setup.php b/setup.php index 7cd7cfd6b0..a64eb2e79d 100644 --- a/setup.php +++ b/setup.php @@ -28,6 +28,8 @@ * ------------------------------------------------------------------------- */ +use GlpiPlugin\Reports\Report; + use function Safe\define; define('PLUGIN_ORDER_VERSION', '2.12.6'); @@ -189,6 +191,14 @@ function plugin_init_order() $PLUGIN_HOOKS['assign_to_ticket']['order'] = true; $PLUGIN_HOOKS['use_massive_action']['order'] = 1; $PLUGIN_HOOKS['plugin_datainjection_populate']['order'] = "plugin_datainjection_populate_order"; + + if (class_exists(Report::class)) { + Report::setReportsTitles( + ["deliveryinfos" => __s("Orders delivery statistics", "order"), + "orderdelivery" => __s("Orders delivery", "order"), + ], + ); + } } } }