Bestellmengenmanager/src/modules/application/models/d3_oxarticle_oqm.php

194 lines
6.7 KiB
PHP

<?php
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use OxidEsales\Eshop\Core\Field;
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @package orderQuantityManager
* @name d3_oxarticle_oqm
*/
class d3_oxarticle_oqm extends d3_oxarticle_oqm_parent
{
/**
* Extended method of oxarticle::save()
* We differ between zero and NULL values.
* Empty string will be converted to NULL value.
* Zero = 0 will not converted.
*
* @see oxarticle::save()
* @return bool
* @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
* @throws \D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception
* @throws \Doctrine\DBAL\DBALException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
* @throws \OxidEsales\Eshop\Core\Exception\StandardException
*/
public function save()
{
startProfile(__METHOD__);
$oD3CfgMod = d3_cfg_mod::get(d3_d3oqm_model_handler::D3OQMMODID);
if ($oD3CfgMod && $oD3CfgMod->isActive()) {
foreach ($this->_aFieldNames as $sName => $sVal) {
$sLongName = $this->_getFieldLongName($sName);
// we work with values 0 and NULL in the database. We have to react on these values.
// We convert empty strings and false values to NULL
// all fields with 'd3oqm' are affected
if (stripos($sLongName, 'd3oqm') !== false && trim($this->$sLongName->value) == '') {
$this->$sLongName->value = null;
}
}
}
stopProfile(__METHOD__);
return parent::save();
}
/**
* @param array $aRecord
*
* @return null|void
* @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
* @throws \D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception
* @throws \Doctrine\DBAL\DBALException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
* @throws \OxidEsales\Eshop\Core\Exception\StandardException
*/
public function assign($aRecord)
{
parent::assign($aRecord);
if (false == $this->hasD3OQMAvailableOptions()) {
return;
}
startProfile(__METHOD__);
if (false == $this->isD3OQMRestHandlingActive()) {
return;
}
$stock = $this->getFieldData('oxstock'); // 7
if ($this->getFieldData('d3oqm_minimum') > $stock || $this->getFieldData('d3oqm_package') > $stock) {
$this->_setD3RestValue($stock, 'd3oqm_minimum');
$this->_setD3RestValue($stock, 'd3oqm_maximum');
$this->_setD3RestValue($stock, 'd3oqm_package');
}
stopProfile(__METHOD__);
}
/**
* check if this article has avaible options.
*
* @return bool
* @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
* @throws \D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception
* @throws \Doctrine\DBAL\DBALException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
* @throws \OxidEsales\Eshop\Core\Exception\StandardException
*/
public function hasD3OQMAvailableOptions()
{
$oD3CfgMod = d3_cfg_mod::get(d3_d3oqm_model_handler::D3OQMMODID);
if (false == $oD3CfgMod || false == $oD3CfgMod->isActive()) {
return false;
}
return (bool)count($this->getD3OQMArticleOptions());
}
/**
* Returns an array with all available options for this article.
*
* @return array
* @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
* @throws \D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception
* @throws \Doctrine\DBAL\DBALException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
* @throws \OxidEsales\Eshop\Core\Exception\StandardException
*/
public function getD3OQMArticleOptions()
{
startProfile(__METHOD__);
$modId = d3_d3oqm_model_handler::D3OQMMODID;
$aOptionArray = array();
$oD3CfgMod = d3_cfg_mod::get($modId);
if (false == $oD3CfgMod || false == $oD3CfgMod->isActive()) {
return $aOptionArray;
}
$aTmpOptions = d3_d3oqm_model_handler::getInstance()->getOptionFieldNames();
foreach ($aTmpOptions as $sOptionName) {
$sOptionValue = $this->getFieldData($sOptionName);
if (false == empty($sOptionValue)) {
$aOptionArray[$sOptionName] = $sOptionValue;
}
}
stopProfile(__METHOD__);
return $aOptionArray;
}
/**
* returns the information if the article is ready for the rest handling
*
*
* @return bool
* @throws \D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException
* @throws \D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception
* @throws \Doctrine\DBAL\DBALException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
* @throws \OxidEsales\Eshop\Core\Exception\StandardException
*/
public function isD3OQMRestHandlingActive()
{
$oD3CfgMod = d3_cfg_mod::get(d3_d3oqm_model_handler::D3OQMMODID);
if (false == $oD3CfgMod || false == $oD3CfgMod->isActive()) {
return false;
}
if (false == $this->getConfig()->getConfigParam('blUseStock')
|| $this->isAdmin()
|| false == $oD3CfgMod->getValue('useRemainingStock')
) {
return false;
}
// Fremdlager + Standard kann immer bestellt werden (kein Resthandling notwendig)
if (4 == $this->getFieldData('oxstockflag') || 1 == $this->getFieldData('oxstockflag')) {
return false;
}
return true;
}
/**
* @param $stock
* @param $sOptionName
*
*/
protected function _setD3RestValue($stock, $sOptionName)
{
$sLongName = $this->_getFieldLongName($sOptionName);
$this->{$sLongName} = oxNew(Field::class, $stock, Field::T_RAW);
}
}