Files
bio-concept-pharma/web/modules/tntofficiel/classes/TNTOfficielLabel.php
2019-11-17 19:14:07 +01:00

215 lines
6.4 KiB
PHP

<?php
/**
* TNT OFFICIAL MODULE FOR PRESTASHOP
*
* @author GFI Informatique <www.gfi.world>
* @copyright 2016-2019 GFI Informatique, 2016-2019 TNT
* @license https://opensource.org/licenses/MIT MIT License
*/
require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_ClassLoader.php';
/**
* Class TNTOfficielLabel
*/
class TNTOfficielLabel extends ObjectModel
{
// id_tntofficiel_label
public $id;
public $id_order;
public $label_name;
/** @var type base64 (16 Mb Max) */
public $label_pdf_content;
/** @var type label_date_created */
public $label_type;
public $date_add;
public static $definition = array(
'table' => 'tntofficiel_label',
'primary' => 'id_tntofficiel_label',
'fields' => array(
'id_order' => array(
'type' => ObjectModel::TYPE_INT,
'validate' => 'isUnsignedId',
'required' => true
),
'label_name' => array(
'type' => ObjectModel::TYPE_STRING,
'size' => 255
),
'label_pdf_content' => array(
'type' => ObjectModel::TYPE_NOTHING,
),
'label_type' => array(
'type' => ObjectModel::TYPE_STRING,
'size' => 32
),
'date_add' => array(
'type' => ObjectModel::TYPE_DATE
),
),
);
// cache and prevent race condition.
private static $arrLoadedEntities = array();
/**
* Creates the tables needed by the model.
*
* @return bool
*/
public static function createTables()
{
TNTOfficiel_Logstack::log();
$strLogMessage = sprintf('%s::%s', __CLASS__, __FUNCTION__);
$strTablePrefix = _DB_PREFIX_;
$strTableEngine = _MYSQL_ENGINE_;
$strTableName = $strTablePrefix.TNTOfficielLabel::$definition['table'];
// Create table.
$strSQLCreateLabel = <<<SQL
CREATE TABLE IF NOT EXISTS `${strTableName}` (
`id_tntofficiel_label` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_order` INT(10) UNSIGNED NOT NULL,
`label_name` VARCHAR(255) NOT NULL,
`label_pdf_content` MEDIUMBLOB,
`label_type` VARCHAR(32) NOT NULL,
-- State.
`date_add` DATETIME NOT NULL DEFAULT '0000-00-00',
-- Key.
PRIMARY KEY (`id_tntofficiel_label`),
UNIQUE INDEX `id_order` (`id_order`)
) ENGINE = ${strTableEngine} DEFAULT CHARSET='utf8' COLLATE='utf8_general_ci';
SQL;
$objDB = Db::getInstance();
if (!$objDB->execute($strSQLCreateLabel)) {
TNTOfficiel_Logger::logInstall($strLogMessage.' : '.$objDB->getMsgError(), false);
return false;
}
TNTOfficiel_Logger::logInstall($strLogMessage);
return true;
}
/**
* Constructor.
*/
public function __construct($intArgId = null)
{
TNTOfficiel_Logstack::log();
parent::__construct($intArgId);
}
/**
* Load existing object model or optionally create a new one for it's ID.
*
* @param $intArgOrderID
* @param bool $boolArgCreate
*
* @return TNTOfficielLabel|null
*/
public static function loadOrderID($intArgOrderID, $boolArgCreate = true)
{
TNTOfficiel_Logstack::log();
$intOrderID = (int)$intArgOrderID;
// No new order ID.
if (!($intOrderID > 0)) {
return null;
}
$strEntityID = '_'.$intOrderID.'-'.(int)null.'-'.(int)null;
// If already loaded.
if (array_key_exists($strEntityID, TNTOfficielLabel::$arrLoadedEntities)) {
$objTNTLabelModel = TNTOfficielLabel::$arrLoadedEntities[$strEntityID];
// Check.
if ((int)$objTNTLabelModel->id_order === $intOrderID && Validate::isLoadedObject($objTNTLabelModel)) {
return $objTNTLabelModel;
}
}
// Search row for order ID.
$objDbQuery = new DbQuery();
$objDbQuery->select('*');
$objDbQuery->from(TNTOfficielLabel::$definition['table']);
$objDbQuery->where('id_order = '.$intOrderID);
$objDB = Db::getInstance();
$arrResult = $objDB->executeS($objDbQuery);
// If row found and match order ID.
if (count($arrResult) === 1 && $intOrderID === (int)$arrResult[0]['id_order']) {
// Load existing TNT order entry.
$objTNTLabelModel = new TNTOfficielLabel((int)$arrResult[0]['id_tntofficiel_label']);
} elseif ($boolArgCreate === true) {
// Create a new TNT order entry.
$objTNTLabelModelCreate = new TNTOfficielLabel(null);
$objTNTLabelModelCreate->id_order = $intOrderID;
$objTNTLabelModelCreate->save();
// Reload to get default DB values after creation.
$objTNTLabelModel = TNTOfficielLabel::loadOrderID($intOrderID, false);
} else {
$objException = new Exception('TNTOfficielLabel not found for Order ID #'.$intOrderID);
TNTOfficiel_Logger::logException($objException);
return null;
}
// Check.
if ((int)$objTNTLabelModel->id_order !== $intOrderID || !Validate::isLoadedObject($objTNTLabelModel)) {
return null;
}
$objTNTLabelModel->id = (int)$objTNTLabelModel->id;
$objTNTLabelModel->id_order = (int)$objTNTLabelModel->id_order;
TNTOfficielLabel::$arrLoadedEntities[$strEntityID] = $objTNTLabelModel;
return $objTNTLabelModel;
}
/**
* @return mixed
*/
public function getLabelPDFContent()
{
TNTOfficiel_Logstack::log();
return TNTOfficiel_Tools::decodeBase64($this->label_pdf_content);
}
/**
* Save BT in BDD.
*
* @param $strArgName
* @param $strArgPDFContent
* @param $strArgPickupLabelType
*
* @return mixed
*/
public function addLabel($strArgName, $strArgPDFContent, $strArgPickupLabelType)
{
TNTOfficiel_Logstack::log();
$objDateTimeNow = new DateTime('now');
$this->label_name = $strArgName;
$this->label_pdf_content = TNTOfficiel_Tools::encodeBase64($strArgPDFContent);
$this->label_type = $strArgPickupLabelType;
$this->date_add = $objDateTimeNow->format('Y-m-d H:i:s');
return $this->save();
}
}