. * --------------------------------------------------------------------- */ if (!defined('GLPI_ROOT')) { die("Sorry. You can't access this file directly"); } /** * Cartridge class. * This class is used to manage printer cartridges. * @see CartridgeItem * @author Julien Dombre **/ class Cartridge extends CommonDBChild { use Glpi\Features\Clonable; // From CommonDBTM static protected $forward_entity_to = ['Infocom']; public $dohistory = true; public $no_form_page = true; // From CommonDBChild static public $itemtype = 'CartridgeItem'; static public $items_id = 'cartridgeitems_id'; public function getCloneRelations() :array { return [ Infocom::class ]; } function getForbiddenStandardMassiveAction() { $forbidden = parent::getForbiddenStandardMassiveAction(); $forbidden[] = 'update'; return $forbidden; } static function showMassiveActionsSubForm(MassiveAction $ma) { switch ($ma->getAction()) { case 'updatepages' : $input = $ma->getInput(); if (!isset($input['maxpages'])) { $input['maxpages'] = ''; } echo ""; echo "

".Html::submit(_x('button', 'Update'), ['name' => 'massiveaction']); return true; } return parent::showMassiveActionsSubForm($ma); } static function getNameField() { return 'id'; } static function getTypeName($nb = 0) { return _n('Cartridge', 'Cartridges', $nb); } function prepareInputForAdd($input) { $item = static::getItemFromArray(static::$itemtype, static::$items_id, $input); if ($item === false) { return false; } return ["cartridgeitems_id" => $item->fields["id"], "entities_id" => $item->getEntityID(), "date_in" => date("Y-m-d")]; } function post_updateItem($history = 1) { if (in_array('pages', $this->updates)) { $printer = new Printer(); if ($printer->getFromDB($this->fields['printers_id']) && (($this->fields['pages'] > $printer->getField('last_pages_counter')) || ($this->oldvalues['pages'] == $printer->getField('last_pages_counter')))) { $printer->update(['id' => $printer->getID(), 'last_pages_counter' => $this->fields['pages'] ]); } } parent::post_updateItem($history); } function getPreAdditionalInfosForName() { $ci = new CartridgeItem(); if ($ci->getFromDB($this->fields['cartridgeitems_id'])) { return $ci->getName(); } return ''; } static function processMassiveActionsForOneItemtype(MassiveAction $ma, CommonDBTM $item, array $ids) { switch ($ma->getAction()) { case 'uninstall' : foreach ($ids as $key) { if ($item->can($key, UPDATE)) { if ($item->uninstall($key)) { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_OK); } else { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_KO); $ma->addMessage($item->getErrorMessage(ERROR_ON_ACTION)); } } else { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_NORIGHT); $ma->addMessage($item->getErrorMessage(ERROR_RIGHT)); } } return; case 'backtostock' : foreach ($ids as $id) { if ($item->can($id, UPDATE)) { if ($item->backToStock(["id" => $id])) { $ma->itemDone($item->getType(), $id, MassiveAction::ACTION_OK); } else { $ma->itemDone($item->getType(), $id, MassiveAction::ACTION_KO); $ma->addMessage($item->getErrorMessage(ERROR_ON_ACTION)); } } else { $ma->itemDone($item->getType(), $id, MassiveAction::ACTION_NORIGHT); $ma->addMessage($item->getErrorMessage(ERROR_RIGHT)); } } return; case 'updatepages' : $input = $ma->getInput(); if (isset($input['pages'])) { foreach ($ids as $key) { if ($item->can($key, UPDATE)) { if ($item->update(['id' => $key, 'pages' => $input['pages']])) { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_OK); } else { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_KO); $ma->addMessage($item->getErrorMessage(ERROR_ON_ACTION)); } } else { $ma->itemDone($item->getType(), $key, MassiveAction::ACTION_NORIGHT); $ma->addMessage($item->getErrorMessage(ERROR_RIGHT)); } } } else { $ma->itemDone($item->getType(), $ids, MassiveAction::ACTION_KO); } return; } parent::processMassiveActionsForOneItemtype($ma, $item, $ids); } /** * Send the cartridge back to stock. * * @since 0.85 (before name was restore) * @param array $input * @param integer $history * @return bool */ function backToStock(array $input, $history = 1) { global $DB; $result = $DB->update( $this->getTable(), [ 'date_out' => 'NULL', 'date_use' => 'NULL', 'printers_id' => 0 ], [ 'id' => $input['id'] ] ); if ($result && ($DB->affectedRows() > 0)) { return true; } return false; } // SPECIFIC FUNCTIONS /** * Link a cartridge to a printer. * * Link the first unused cartridge of type $Tid to the printer $pID. * * @param integer $tID ID of the cartridge * @param integer $pID : ID of the printer * * @return boolean True if successful **/ function install($pID, $tID) { global $DB; // Get first unused cartridge $iterator = $DB->request([ 'SELECT' => ['id'], 'FROM' => $this->getTable(), 'WHERE' => [ 'cartridgeitems_id' => $tID, 'date_use' => null ], 'LIMIT' => 1 ]); if (count($iterator)) { $result = $iterator->next(); $cID = $result['id']; // Update cartridge taking care of multiple insertion $result = $DB->update( $this->getTable(), [ 'date_use' => date('Y-m-d'), 'printers_id' => $pID ], [ 'id' => $cID, 'date_use' => null ] ); if ($result && ($DB->affectedRows() > 0)) { $changes = [ '0', '', __('Installing a cartridge'), ]; Log::history($pID, 'Printer', $changes, 0, Log::HISTORY_LOG_SIMPLE_MESSAGE); return true; } } else { Session::addMessageAfterRedirect(__('No free cartridge'), false, ERROR); } return false; } /** * Unlink a cartridge from a printer by cartridge ID. * * @param integer $ID ID of the cartridge * * @return boolean **/ function uninstall($ID) { global $DB; if ($this->getFromDB($ID)) { $printer = new Printer(); $toadd = []; if ($printer->getFromDB($this->getField("printers_id"))) { $toadd['pages'] = $printer->fields['last_pages_counter']; } $result = $DB->update( $this->getTable(), [ 'date_out' => date('Y-m-d') ] + $toadd, [ 'id' => $ID ] ); if ($result && ($DB->affectedRows() > 0)) { $changes = [ '0', '', __('Uninstalling a cartridge'), ]; Log::history($this->getField("printers_id"), 'Printer', $changes, 0, Log::HISTORY_LOG_SIMPLE_MESSAGE); return true; } return false; } } /** * Print the cartridge count HTML array for the cartridge item $tID * * @param integer $tID ID of the cartridge item * @param integer $alarm_threshold Alarm threshold value * @param integer|boolean $nohtml True if the return value should be without HTML tags (default 0/false) * * @return string String to display **/ static function getCount($tID, $alarm_threshold, $nohtml = 0) { // Get total $total = self::getTotalNumber($tID); $out = ""; if ($total != 0) { $unused = self::getUnusedNumber($tID); $used = self::getUsedNumber($tID); $old = self::getOldNumber($tID); $highlight = ""; if ($unused <= $alarm_threshold) { $highlight = "tab_bg_1_2"; } if (!$nohtml) { $out .= ""; $out .= "
"; $out .= __('Total')."$total"; $out .= ""; $out .= _nx('cartridge', 'New', 'New', $unused); $out .= "$unused
"; $out .= _nx('cartridge', 'Used', 'Used', $used); $out .= "$used"; $out .= _nx('cartridge', 'Worn', 'Worn', $old); $out .= "$old
"; } else { //TRANS : for display cartridges count : %1$d is the total number, // %2$d the new one, %3$d the used one, %4$d worn one $out .= sprintf(__('Total: %1$d (%2$d new, %3$d used, %4$d worn)'), $total, $unused, $used, $old); } } else { if (!$nohtml) { $out .= "
".__('No cartridge')."
"; } else { $out .= __('No cartridge'); } } return $out; } /** * Print the cartridge count HTML array for the printer $pID * * @since 0.85 * * @param integer $pID ID of the printer * @param integer|boolean $nohtml True if the return value should be without HTML tags (default 0/false) * * @return string String to display **/ static function getCountForPrinter($pID, $nohtml = 0) { // Get total $total = self::getTotalNumberForPrinter($pID); $out = ""; if ($total != 0) { $used = self::getUsedNumberForPrinter($pID); $old = self::getOldNumberForPrinter($pID); $highlight = ""; if ($used == 0) { $highlight = "tab_bg_1_2"; } if (!$nohtml) { $out .= ""; $out .= "
"; $out .= __('Total')."$total"; $out .= "
"; $out .= _nx('cartridge', 'Used', 'Used', $used); $out .= "$used"; $out .= _nx('cartridge', 'Worn', 'Worn', $old); $out .= "$old
"; } else { //TRANS : for display cartridges count : %1$d is the total number, // %2$d the used one, %3$d the worn one $out .= sprintf(__('Total: %1$d (%2$d used, %3$d worn)'), $total, $used, $old); } } else { if (!$nohtml) { $out .= "
".__('No cartridge')."
"; } else { $out .= __('No cartridge'); } } return $out; } /** * Count the total number of cartridges for the cartridge item $tID. * * @param integer $tID ID of cartridge item. * * @return integer Number of cartridges counted. **/ static function getTotalNumber($tID) { global $DB; $row = $DB->request([ 'FROM' => self::getTable(), 'COUNT' => 'cpt', 'WHERE' => ['cartridgeitems_id' => $tID] ])->next(); return $row['cpt']; } /** * Count the number of cartridges used for the printer $pID * * @since 0.85 * * @param integer $pID ID of the printer. * * @return integer Number of cartridges counted. **/ static function getTotalNumberForPrinter($pID) { global $DB; $row = $DB->request([ 'FROM' => self::getTable(), 'COUNT' => 'cpt', 'WHERE' => ['printers_id' => $pID] ])->next(); return (int)$row['cpt']; } /** * Count the number of used cartridges for the cartridge item $tID. * * @param integer $tID ID of the cartridge item. * * @return integer Number of used cartridges counted. **/ static function getUsedNumber($tID) { global $DB; $row = $DB->request([ 'SELECT' => ['id'], 'COUNT' => 'cpt', 'FROM' => 'glpi_cartridges', 'WHERE' => [ 'cartridgeitems_id' => $tID, 'date_out' => null, 'NOT' => [ 'date_use' => null ] ] ])->next(); return (int)$row['cpt']; } /** * Count the number of used cartridges used for the printer $pID. * * @since 0.85 * * @param integer $pID ID of the printer. * * @return integer Number of used cartridge counted. **/ static function getUsedNumberForPrinter($pID) { global $DB; $result = $DB->request([ 'COUNT' => 'cpt', 'FROM' => self::getTable(), 'WHERE' => [ 'printers_id' => $pID, 'date_out' => null, 'NOT' => ['date_use' => null] ] ])->next(); return $result['cpt']; } /** * Count the number of old cartridges for the cartridge item $tID. * * @param integer $tID ID of the cartridge item. * * @return integer Number of old cartridges counted. **/ static function getOldNumber($tID) { global $DB; $result = $DB->request([ 'COUNT' => 'cpt', 'FROM' => self::getTable(), 'WHERE' => [ 'cartridgeitems_id' => $tID, 'NOT' => ['date_out' => null] ] ])->next(); return $result['cpt']; } /** * count how many old cartbridge for theprinter $pID * * @since 0.85 * * @param $pID integer: printer identifier. * * @return integer : number of old cartridge counted. **/ static function getOldNumberForPrinter($pID) { global $DB; $result = $DB->request([ 'COUNT' => 'cpt', 'FROM' => self::getTable(), 'WHERE' => [ 'printers_id' => $pID, 'NOT' => ['date_out' => null] ] ])->next(); return $result['cpt']; } /** * count how many cartbridge unused for the cartridge item $tID * * @param $tID integer: cartridge item identifier. * * @return integer : number of cartridge unused counted. **/ static function getUnusedNumber($tID) { global $DB; $result = $DB->request([ 'COUNT' => 'cpt', 'FROM' => self::getTable(), 'WHERE' => [ 'cartridgeitems_id' => $tID, 'date_use' => null ] ])->next(); return $result['cpt']; } /** * Get the translated value for the status of a cartridge based on the use and out date (if any). * * @param string $date_use Date of use (May be null or empty) * @param string $date_out Date of delete (May be null or empty) * * @return string : Translated value for the cartridge status. **/ static function getStatus($date_use, $date_out) { if (is_null($date_use) || empty($date_use)) { return _nx('cartridge', 'New', 'New', 1); } if (is_null($date_out) || empty($date_out)) { return _nx('cartridge', 'Used', 'Used', 1); } return _nx('cartridge', 'Worn', 'Worn', 1); } /** * Print out the cartridges of a defined type * * @param CartridgeItem $cartitem The cartridge item * @param boolean|integer $show_old Show old cartridges or not (default 0/false) * * @return boolean|void **/ static function showForCartridgeItem(CartridgeItem $cartitem, $show_old = 0) { global $DB; $tID = $cartitem->getField('id'); if (!$cartitem->can($tID, READ)) { return false; } $canedit = $cartitem->can($tID, UPDATE); $where = ['glpi_cartridges.cartridgeitems_id' => $tID]; $order = [ 'glpi_cartridges.date_use ASC', 'glpi_cartridges.date_out DESC', 'glpi_cartridges.date_in' ]; if (!$show_old) { // NEW $where['glpi_cartridges.date_out'] = null; $order = [ 'glpi_cartridges.date_out ASC', 'glpi_cartridges.date_use ASC', 'glpi_cartridges.date_in' ]; } else { //OLD $where['NOT'] = ['glpi_cartridges.date_out' => null]; } $stock_time = 0; $use_time = 0; $pages_printed = 0; $nb_pages_printed = 0; $iterator = $DB->request([ 'SELECT' => [ 'glpi_cartridges.*', 'glpi_printers.id AS printID', 'glpi_printers.name AS printname', 'glpi_printers.init_pages_counter' ], 'FROM' => self::gettable(), 'LEFT JOIN' => [ 'glpi_printers' => [ 'FKEY' => [ self::getTable() => 'printers_id', 'glpi_printers' => 'id' ] ] ], 'WHERE' => $where, 'ORDER' => $order ]); $number = count($iterator); echo "
"; if ($canedit && $number) { $rand = mt_rand(); Html::openMassiveActionsForm('mass'.__CLASS__.$rand); $actions = ['delete' => _x('button', 'Delete permanently'), 'Infocom'.MassiveAction::CLASS_ACTION_SEPARATOR.'activate' => __('Enable the financial and administrative information') ]; if (!$show_old) { $actions['Cartridge'.MassiveAction::CLASS_ACTION_SEPARATOR.'backtostock'] = __('Back to stock'); } $massiveactionparams = ['num_displayed' => min($_SESSION['glpilist_limit'], $number), 'specific_actions' => $actions, 'container' => 'mass'.__CLASS__.$rand, 'rand' => $rand]; Html::showMassiveActions($massiveactionparams); } echo ""; if (!$show_old) { echo ""; echo ""; } else { // Old echo ""; } $header_begin = ""; $header_top = ''; $header_bottom = ''; $header_end = ''; if ($canedit && $number) { $header_begin .= ""; } $header_end .= ""; $header_end .= ""; $header_end .= ""; $header_end .= ""; if ($show_old) { $header_end .= ""; $header_end .= ""; } $header_end .= ""; $header_end .= ""; echo $header_begin.$header_top.$header_end; $pages = []; if ($number) { while ($data = $iterator->next()) { $date_in = Html::convDate($data["date_in"]); $date_use = Html::convDate($data["date_use"]); $date_out = Html::convDate($data["date_out"]); $printer = $data["printers_id"]; echo ""; if ($canedit) { echo ""; } echo "'; echo ""; echo ""; echo ""; if ($show_old) { // Get initial counter page if (!isset($pages[$printer])) { $pages[$printer] = $data['init_pages_counter']; } echo ""; } echo ""; echo ""; } if ($show_old && ($number > 0)) { if ($nb_pages_printed == 0) { $nb_pages_printed = 1; } echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } else { echo $header_begin.$header_bottom.$header_end; } } echo "
". self::getCount($tID, -1)."
".__('Worn cartridges'); echo "
"; $header_top = Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_bottom = Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_end .= "".__('ID').""._x('item', 'State')."".__('Add date')."".__('Use date')."".__('Used on')."".__('End date')."".__('Printer counter')."".__('Financial and administrative information')."
"; Html::showMassiveActionCheckBox(__CLASS__, $data["id"]); echo "".$data['id'].'".self::getStatus($data["date_use"], $data["date_out"]); echo "".$date_in."".$date_use.""; if (!is_null($date_use)) { if ($data["printID"] > 0) { $printname = $data["printname"]; if ($_SESSION['glpiis_ids_visible'] || empty($printname)) { $printname = sprintf(__('%1$s (%2$s)'), $printname, $data["printID"]); } echo "".$printname.""; } else { echo NOT_AVAILABLE; } $tmp_dbeg = explode("-", $data["date_in"]); $tmp_dend = explode("-", $data["date_use"]); $stock_time_tmp = mktime(0, 0, 0, $tmp_dend[1], $tmp_dend[2], $tmp_dend[0]) - mktime(0, 0, 0, $tmp_dbeg[1], $tmp_dbeg[2], $tmp_dbeg[0]); $stock_time += $stock_time_tmp; } if ($show_old) { echo ""; echo $date_out; $tmp_dbeg = explode("-", $data["date_use"]); $tmp_dend = explode("-", $data["date_out"]); $use_time_tmp = mktime(0, 0, 0, $tmp_dend[1], $tmp_dend[2], $tmp_dend[0]) - mktime(0, 0, 0, $tmp_dbeg[1], $tmp_dbeg[2], $tmp_dbeg[0]); $use_time += $use_time_tmp; } echo ""; if ($pages[$printer] < $data['pages']) { $pages_printed += $data['pages']-$pages[$printer]; $nb_pages_printed++; $pp = $data['pages']-$pages[$printer]; printf(_n('%d printed page', '%d printed pages', $pp), $pp); $pages[$printer] = $data['pages']; } else if ($data['pages'] != 0) { echo "".__('Counter error').""; } echo ""; Infocom::showDisplayLink('Cartridge', $data["id"]); echo "
 ".__('Average time in stock')."
"; echo round($stock_time/$number/60/60/24/30.5, 1)." "._n('month', 'months', 1)."
 ".__('Average time in use')."
"; echo round($use_time/$number/60/60/24/30.5, 1)." "._n('month', 'months', 1)."
".__('Average number of printed pages')."
"; echo round($pages_printed/$nb_pages_printed)."
 
"; if ($canedit && $number) { $massiveactionparams['ontop'] = false; Html::showMassiveActions($massiveactionparams); Html::closeForm(); } echo "
\n\n"; } /** * Print out a link to add directly a new cartridge from a cartridge item. * * @param $cartitem CartridgeItem object * * @return boolean|void **/ static function showAddForm(CartridgeItem $cartitem) { $ID = $cartitem->getField('id'); if (!$cartitem->can($ID, UPDATE)) { return false; } if ($ID > 0) { echo "
"; echo "
"; echo ""; echo ""; echo "
"; echo "\n"; Dropdown::showNumber('to_add', ['value' => 1, 'min' => 1, 'max' => 100]); echo ""; echo " "; echo "
"; Html::closeForm(); echo "
"; } } /** * Show installed cartridges * * @since 0.84 (before showInstalled) * * @param Printer $printer Printer object * @param boolean|integer $old Old cartridges or not? (default 0/false) * * @return boolean|void **/ static function showForPrinter(Printer $printer, $old = 0) { global $DB, $CFG_GLPI; $instID = $printer->getField('id'); if (!self::canView()) { return false; } $canedit = Session::haveRight("cartridge", UPDATE); $rand = mt_rand(); $where = ['glpi_cartridges.printers_id' => $instID]; if ($old) { $where['NOT'] = ['glpi_cartridges.date_out' => null]; } else { $where['glpi_cartridges.date_out'] = null; } $iterator = $DB->request([ 'SELECT' => [ 'glpi_cartridgeitems.id AS tID', 'glpi_cartridgeitems.is_deleted', 'glpi_cartridgeitems.ref AS ref', 'glpi_cartridgeitems.name AS type', 'glpi_cartridges.id', 'glpi_cartridges.pages AS pages', 'glpi_cartridges.date_use AS date_use', 'glpi_cartridges.date_out AS date_out', 'glpi_cartridges.date_in AS date_in', 'glpi_cartridgeitemtypes.name AS typename' ], 'FROM' => self::getTable(), 'LEFT JOIN' => [ 'glpi_cartridgeitems' => [ 'FKEY' => [ self::getTable() => 'cartridgeitems_id', 'glpi_cartridgeitems' => 'id' ] ], 'glpi_cartridgeitemtypes' => [ 'FKEY' => [ 'glpi_cartridgeitems' => 'cartridgeitemtypes_id', 'glpi_cartridgeitemtypes' => 'id' ] ] ], 'WHERE' => $where, 'ORDER' => [ 'glpi_cartridges.date_out ASC', 'glpi_cartridges.date_use DESC', 'glpi_cartridges.date_in', ] ]); $number = count($iterator); if ($canedit && !$old) { echo "
"; echo ""; echo ""; echo ""; echo "
"; echo "\n"; if (CartridgeItem::dropdownForPrinter($printer)) { //TRANS : multiplier echo "".__('x')." "; Dropdown::showNumber("nbcart", ['value' => 1, 'min' => 1, 'max' => 5]); echo ""; } else { echo __('No cartridge available'); } echo "
"; Html::closeForm(); echo "
"; } echo "
"; $pages = $printer->fields['init_pages_counter']; echo "
"; if ($canedit && $number) { Html::openMassiveActionsForm('mass'.__CLASS__.$rand); if (!$old) { $actions = [__CLASS__.MassiveAction::CLASS_ACTION_SEPARATOR.'uninstall' => __('End of life'), __CLASS__.MassiveAction::CLASS_ACTION_SEPARATOR.'backtostock' => __('Back to stock') ]; } else { $actions = [__CLASS__.MassiveAction::CLASS_ACTION_SEPARATOR.'updatepages' => __('Update printer counter'), 'purge' => _x('button', 'Delete permanently')]; } $massiveactionparams = ['num_displayed' => min($_SESSION['glpilist_limit'], $number), 'specific_actions' => $actions, 'container' => 'mass'.__CLASS__.$rand, 'rand' => $rand, 'extraparams' => ['maxpages' => $printer->fields['last_pages_counter']]]; Html::showMassiveActions($massiveactionparams); } echo ""; echo ""; if ($old == 0) { echo ""; } else { echo ""; } echo ""; $header_begin = ""; $header_top = ''; $header_end = ''; if ($canedit) { $header_begin .= ""; } $header_end .= ""; $header_end .= ""; $header_end .= ""; $header_end .= ""; if ($old != 0) { $header_end .= ""; $header_end .= ""; $header_end .= ""; } $header_end .= ""; echo $header_begin.$header_top.$header_end; $stock_time = 0; $use_time = 0; $pages_printed = 0; $nb_pages_printed = 0; while ($data = $iterator->next()) { $cart_id = $data["id"]; $typename = $data["typename"]; $date_in = Html::convDate($data["date_in"]); $date_use = Html::convDate($data["date_use"]); $date_out = Html::convDate($data["date_out"]); $viewitemjs = ($canedit ? "style='cursor:pointer' onClick=\"viewEditCartridge".$cart_id. "$rand();\"" : ''); echo ""; if ($canedit) { echo ""; } echo ""; echo ""; echo ""; echo ""; echo ""; $tmp_dbeg = explode("-", $data["date_in"]); $tmp_dend = explode("-", $data["date_use"]); $stock_time_tmp = mktime(0, 0, 0, $tmp_dend[1], $tmp_dend[2], $tmp_dend[0]) - mktime(0, 0, 0, $tmp_dbeg[1], $tmp_dbeg[2], $tmp_dbeg[0]); $stock_time += $stock_time_tmp; if ($old != 0) { echo ""; echo ""; } echo ""; } if ($old) { // Print average if ($number > 0) { if ($nb_pages_printed == 0) { $nb_pages_printed = 1; } echo ""; echo ""; echo ""; echo ""; echo ""; } } echo "
".__('Used cartridges')."".__('Worn cartridges')."
"; $header_top .= Html::getCheckAllAsCheckbox('mass'.__CLASS__.$rand); $header_end .= "".__('ID').""._n('Cartridge model', 'Cartridge models', 1).""._n('Cartridge type', 'Cartridge types', 1)."".__('Add date')."".__('Use date')."".__('End date')."".__('Printer counter')."".__('Printed pages')."
"; Html::showMassiveActionCheckBox(__CLASS__, $cart_id); echo ""; if ($canedit) { echo "\n\n"; } echo $data["id"].""; echo ""; printf(__('%1$s - %2$s'), $data["type"], $data["ref"]); echo "".$typename."".$date_in."".$date_use."".$date_out; $tmp_dbeg = explode("-", $data["date_use"]); $tmp_dend = explode("-", $data["date_out"]); $use_time_tmp = mktime(0, 0, 0, $tmp_dend[1], $tmp_dend[2], $tmp_dend[0]) - mktime(0, 0, 0, $tmp_dbeg[1], $tmp_dbeg[2], $tmp_dbeg[0]); $use_time += $use_time_tmp; echo "".$data['pages'].""; if ($pages < $data['pages']) { $pages_printed += $data['pages']-$pages; $nb_pages_printed++; $pp = $data['pages']-$pages; echo $pp; $pages = $data['pages']; } else { echo " "; } echo "
 ".__('Average time in stock')."
"; $time_stock = round($stock_time/$number/60/60/24/30.5, 1); echo sprintf(_n('%d month', '%d months', $time_stock), $time_stock)."
".__('Average time in use')."
"; $time_use = round($use_time/$number/60/60/24/30.5, 1); echo sprintf(_n('%d month', '%d months', $time_use), $time_use)."
".__('Average number of printed pages')."
"; echo round($pages_printed/$nb_pages_printed)."
"; if ($canedit && $number) { $massiveactionparams['ontop'] = false; Html::showMassiveActions($massiveactionparams); Html::closeForm(); } echo "
\n\n"; } /** * Show form for Cartridge * @since 0.84 * * @param integer $ID Id of the cartridge * @param array $options Array of possible options: * - parent Object : the printers where the cartridge is used * * @return boolean False if there was a rights issue. Otherwise, returns true. */ function showForm($ID, $options = []) { if (isset($options['parent']) && !empty($options['parent'])) { $printer = $options['parent']; } if (!$this->getFromDB($ID)) { return false; } $printer = new Printer; $printer->check($this->getField('printers_id'), UPDATE); $cartitem = new CartridgeItem; $cartitem->getFromDB($this->getField('cartridgeitems_id')); $is_old = !empty($this->fields['date_out']); $is_used = !empty($this->fields['date_use']); $options['colspan'] = 2; $options['candel'] = false; // Do not permit delete here $options['canedit'] = $is_used; // Do not permit edit if cart is not used $this->showFormHeader($options); echo ""; echo ""._n('Printer', 'Printers', 1).""; echo $printer->getLink(); echo "\n"; echo "\n"; echo "\n"; echo ""._n('Cartridge model', 'Cartridge models', 1).""; echo "".$cartitem->getLink()."\n"; echo ""; echo "".__('Add date').""; echo "".Html::convDate($this->fields["date_in"]).""; echo "".__('Use date').""; if ($is_used && !$is_old) { Html::showDateField("date_use", ['value' => $this->fields["date_use"], 'maybeempty' => false, 'canedit' => true, 'min' => $this->fields["date_in"]]); } else { echo Html::convDate($this->fields["date_use"]); } echo "\n"; if ($is_old) { echo ""; echo "".__('End date').""; Html::showDateField("date_out", ['value' => $this->fields["date_out"], 'maybeempty' => false, 'canedit' => true, 'min' => $this->fields["date_use"]]); echo ""; echo "".__('Printer counter').""; echo "fields['pages']."\">"; echo "\n"; } $this->showFormButtons($options); return true; } /** * Get notification parameters by entity * * @param integer $entity The entity (default 0) * @return array Array of notification parameters */ static function getNotificationParameters($entity = 0) { global $DB, $CFG_GLPI; //Look for parameters for this entity $iterator = $DB->request([ 'SELECT' => ['cartridges_alert_repeat'], 'FROM' => 'glpi_entities', 'WHERE' => ['id' => $entity] ]); if (!count($iterator)) { //No specific parameters defined, taking global configuration params return $CFG_GLPI['cartridges_alert_repeat']; } else { $data = $iterator->next(); //This entity uses global parameters -> return global config if ($data['cartridges_alert_repeat'] == -1) { return $CFG_GLPI['cartridges_alert_repeat']; } // ELSE Special configuration for this entity return $data['cartridges_alert_repeat']; } } function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { if (!$withtemplate && self::canView()) { $nb = 0; switch ($item->getType()) { case 'Printer' : if ($_SESSION['glpishow_count_on_tabs']) { $nb = self::countForPrinter($item); } return self::createTabEntry(self::getTypeName(Session::getPluralNumber()), $nb); case 'CartridgeItem' : if ($_SESSION['glpishow_count_on_tabs']) { $nb = self::countForCartridgeItem($item); } return self::createTabEntry(self::getTypeName(Session::getPluralNumber()), $nb); } } return ''; } /** * Count the number of cartridges associated with the given cartridge item. * @param CartridgeItem $item CartridgeItem object * @return integer */ static function countForCartridgeItem(CartridgeItem $item) { return countElementsInTable(['glpi_cartridges'], ['glpi_cartridges.cartridgeitems_id' => $item->getField('id')]); } /** * Count the number of cartridges associated with the given printer. * @param Printer $item Printer object * @return integer */ static function countForPrinter(Printer $item) { return countElementsInTable(['glpi_cartridges'], ['glpi_cartridges.printers_id' => $item->getField('id')]); } static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { switch ($item->getType()) { case 'Printer' : self::showForPrinter($item); self::showForPrinter($item, 1); return true; case 'CartridgeItem' : self::showAddForm($item); self::showForCartridgeItem($item); self::showForCartridgeItem($item, 1); return true; } } function getRights($interface = 'central') { $ci = new CartridgeItem(); return $ci->getRights($interface); } static function getIcon() { return "fas fa-fill-drip"; } }