Skip to content

Commit

Permalink
#6 [CompetitorPrice] add: numering ref management
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-eoxia committed Oct 31, 2022
1 parent e2af01d commit 16f9a38
Show file tree
Hide file tree
Showing 4 changed files with 210 additions and 3 deletions.
2 changes: 1 addition & 1 deletion class/competitorprice.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class CompetitorPrice extends CommonObject
*/
public $fields = array(
'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => '1', 'position' => 1, 'notnull' => 1, 'visible' => 0, 'noteditable' => '1', 'index' => 1, 'css' => 'left', 'comment' => "Id"),
'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled'=>'1', 'position' => 20, 'notnull' => 1, 'visible' => 1, 'index' => 1, 'searchall' => 1, 'showoncombobox' => '1', 'validate' => '1', 'comment' => "Reference of object"),
'ref' => array('type' => 'varchar(128)', 'label' => 'Ref', 'enabled'=>'1', 'position' => 20, 'notnull' => 1, 'visible' => 4, 'noteditable'=>'1', 'index' => 1, 'searchall' => 1, 'showoncombobox' => '1', 'comment' => "Reference of object"),
'label' => array('type' => 'varchar(255)', 'label' => 'Label', 'enabled' => '1', 'position' => 70, 'notnull' => 0, 'visible' => 1, 'searchall' => 1, 'css' => 'minwidth200', 'help' => "Help text", 'showoncombobox' => '2'),
'entity' => array('type' => 'integer', 'label' => 'Entity', 'enabled' => '1', 'position' => 30, 'notnull' => 1, 'visible' => 0),
'competitor_date' => array('type' => 'datetime', 'label' => 'CompetitorDate', 'enabled' => '1', 'position' => 120, 'notnull' => 1, 'visible' => 1),
Expand Down
9 changes: 9 additions & 0 deletions competitorprice_card.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,10 @@
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';

dol_include_once('/priseo/class/competitorprice.class.php');
dol_include_once('/priseo/lib/priseo_competitorprice.lib.php');
require_once __DIR__ . '/core/modules/priseo/competitorprice/mod_competitorprice_standard.php';

// Load translation files required by the page
$langs->loadLangs(array("priseo@priseo", "other"));
Expand Down Expand Up @@ -124,6 +126,7 @@
$competitorPrice = new CompetitorPrice($db);
$object = new Product($db);
$extrafields = new ExtraFields($db);
$refCompetitorPriceMod = new $conf->global->PRISEO_COMPETITORPRICE_ADDON($db);
$diroutputmassaction = $conf->priseo->dir_output . '/temp/massgeneration/' . $user->id;
$hookmanager->initHooks(array('competitorpricecard', 'globalcard')); // Note that conf->hooks_modules contains array

Expand Down Expand Up @@ -234,6 +237,12 @@
$object->fk_product = $product->id;
}
// Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen

// Action to add record
if ($action == 'add' && $permissiontoadd) {
$object->ref = $refCompetitorPriceMod->getNextValue($object);
}

include DOL_DOCUMENT_ROOT . '/core/actions_addupdatedelete.inc.php';

// Actions when linking object each other
Expand Down
7 changes: 5 additions & 2 deletions core/modules/modPriseo.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public function __construct($db)
// Set this to 1 if module has its own barcode directory (core/modules/barcode)
'barcode' => 0,
// Set this to 1 if module has its own models directory (core/modules/xxx)
'models' => 0,
'models' => 1,
// Set this to 1 if module has its own printing directory (core/modules/printing)
'printing' => 0,
// Set this to 1 if module has its own theme directory (theme)
Expand Down Expand Up @@ -159,7 +159,10 @@ public function __construct($db)
// Example: $this->const=array(1 => array('PRISEO_MYNEWCONST1', 'chaine', 'myvalue', 'This is a constant to add', 1),
// 2 => array('PRISEO_MYNEWCONST2', 'chaine', 'myvalue', 'This is another constant to add', 0, 'current', 1)
// );
$this->const = array();
$this->const = array(
// CONST COMPETITOR PRICE
1 => array('PRISEO_COMPETITORPRICE_ADDON', 'chaine', 'mod_competitorprice_standard', '', 0, 'current'),
);

// Some keys to add into the overwriting translation tables
/*$this->overwrite_translation = array(
Expand Down
195 changes: 195 additions & 0 deletions core/modules/priseo/competitorprice/mod_competitorprice_standard.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
<?php
/* Copyright (C) 2022 EOXIA <dev@eoxia.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
* or see https://www.gnu.org/
*/

/**
* \file core/modules/priseo/competitorprice/mod_competitorprice_standard.php
* \ingroup priseo
* \brief File containing class for competitorprice numbering module Standard
*/

/**
* Class to manage competitorprice numbering rules Standard
*/
class mod_competitorprice_standard
{
/**
* Dolibarr version of the loaded document
* @var string
*/
public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'

/**
* @var string document prefix
*/
public $prefix = 'CP';

/**
* @var string model name
*/
public $name = 'Bestla';

/**
* @var string Error code (or message)
*/
public $error = '';

/**
* Return description of numbering module
*
* @return string Text with description
*/
public function info(): string
{
global $langs;
$langs->load("priseo@priseo");
return $langs->trans("PriseoCompetitorPriceStandardModel", $this->prefix);
}

/**
* Return if a module can be used or not
*
* @return boolean true if module can be used
*/
public function isEnabled(): bool
{
return true;
}

/**
* Return an example of numbering
*
* @return string Example
*/
public function getExample(): string
{
return $this->prefix."0501-0001";
}

/**
* Checks if the numbers already in the database do not
* cause conflicts that would prevent this numbering working.
*
* @param Object $object Object we need next value for
* @return boolean false if are conflict, true if ok
*/
public function canBeActivated($object): bool
{
global $conf, $langs, $db;

$coyymm = ''; $max = '';

$posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."priseo_competitorprice";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
if ($object->ismultientitymanaged == 1) {
$sql .= " AND entity = ".$conf->entity;
} elseif ($object->ismultientitymanaged == 2) {
// TODO
}

$resql = $db->query($sql);
if ($resql) {
$row = $db->fetch_row($resql);
if ($row) {
$coyymm = substr($row[0], 0, 6); $max = $row[0];
}
}
if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
$langs->load("errors");
$this->error = $langs->trans('ErrorNumRefModel', $max);
return false;
}

return true;
}

/**
* Return next free value
*
* @param Object $object Object we need next value for
* @return string Value if KO, <0 if KO
* @throws Exception
*/
public function getNextValue($object)
{
global $db, $conf;

// first we get the max value
$posindice = strlen($this->prefix) + 6;
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
$sql .= " FROM ".MAIN_DB_PREFIX."priseo_competitorprice";
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
if ($object->ismultientitymanaged == 1) {
$sql .= " AND entity = ".$conf->entity;
} elseif ($object->ismultientitymanaged == 2) {
// TODO
}

$resql = $db->query($sql);
if ($resql) {
$obj = $db->fetch_object($resql);
if ($obj) {
$max = intval($obj->max);
} else {
$max = 0;
}
} else {
dol_syslog("mod_competitorprice_standard::getNextValue", LOG_DEBUG);
return -1;
}

//$date=time();
$date = !empty($object->date_creation) ? $object->date_creation : dol_now();
$yymm = strftime("%y%m", $date);

if ($max >= (pow(10, 4) - 1)) {
$num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
} else {
$num = sprintf("%04s", $max + 1);
}

dol_syslog("mod_competitorprice_standard::getNextValue return ".$this->prefix.$yymm."-".$num);
return $this->prefix.$yymm."-".$num;
}

/**
* Returns version of numbering module
*
* @return string Value
*/
public function getVersion(): string
{
global $langs;
$langs->load("admin");

if ($this->version == 'development') {
return $langs->trans("VersionDevelopment");
}
if ($this->version == 'experimental') {
return $langs->trans("VersionExperimental");
}
if ($this->version == 'dolibarr') {
return DOL_VERSION;
}
if ($this->version) {
return $this->version;
}
return $langs->trans("NotAvailable");
}
}

0 comments on commit 16f9a38

Please sign in to comment.