183 lines
5.5 KiB
PHP
Executable File
183 lines
5.5 KiB
PHP
Executable File
<?php
|
|
|
|
class EcmDocumentNumberGenerator
|
|
{
|
|
private $type = null;
|
|
private $module = null;
|
|
private $stock = null;
|
|
private $pattern;
|
|
public $date;
|
|
private $dbase;
|
|
|
|
public function EcmDocumentNumberGenerator($module, $date, $dbase)
|
|
{
|
|
$this->module = $module;
|
|
$this->date = $date;
|
|
$this->dbase = $dbase;
|
|
}
|
|
|
|
public function getNumberTemplate()
|
|
{
|
|
//get pattern
|
|
require_once('modules/EcmSysInfos/EcmSysInfo.php');
|
|
$EcmSysInfo = new EcmSysInfo();
|
|
return $EcmSysInfo->getFormatNumberForModule($this->module);
|
|
}
|
|
|
|
private function preparePattern($pattern)
|
|
{
|
|
$p = $pattern;
|
|
//check stock
|
|
if (strpos($pattern, '{mag}')) {
|
|
if (!$this->stock || $this->stock == "")
|
|
return -1;
|
|
$p = str_replace('{mag}', $this->stock, $p);
|
|
}
|
|
//user
|
|
if (strpos($pattern, '{U}')) {
|
|
global $current_user;
|
|
$p = str_replace('{U}', $current_user->user_name, $p);
|
|
}
|
|
//date fields
|
|
$p = str_replace('{Y}', date("Y", strtotime($this->date)), $p);
|
|
$p = str_replace('{y}', date("y", strtotime($this->date)), $p);
|
|
$p = str_replace('{m}', date("m", strtotime($this->date)), $p);
|
|
$p = str_replace('{d}', date("d", strtotime($this->date)), $p);
|
|
//insert number wildcard
|
|
$p = str_replace('{n}', '%', $p);
|
|
return $p;
|
|
}
|
|
|
|
public function parseSaleNumber($pattern, $stock_id, $order_source)
|
|
{
|
|
$this->setStock($stock_id);
|
|
|
|
$number = $this->preparePattern($pattern);
|
|
if ($stock_id && $stock_id != "")
|
|
$this->stock_id = $stock_id;
|
|
if ($number == -1) {
|
|
return "Stock error";
|
|
}
|
|
var_dump($number);
|
|
//get number of objects
|
|
$query = "SELECT count(*) AS c FROM " . strtolower($this->module) . " WHERE (document_no LIKE '$number' OR document_no LIKE '$number/%')";
|
|
//echo $query;
|
|
if (gettype($GLOBALS['superGlobalDb']) == 'object') {
|
|
$db = $GLOBALS['superGlobalDb'];
|
|
} else {
|
|
$db = $GLOBALS['db'];
|
|
}
|
|
|
|
$res = $db->fetchByAssoc($db->query($query));
|
|
$n = intval($res['c']);
|
|
$n++;
|
|
|
|
// add mz 18.06.2024
|
|
$document_no = str_replace('%', $n, $number);
|
|
if ($order_source == 'standard' || $order_source == 'edi' || $order_source == null || $order_source == '') {
|
|
return $document_no . '/S';
|
|
} else {
|
|
return $document_no . '/E';
|
|
}
|
|
|
|
}
|
|
public function parseNormalNumber($pattern, $stock_id)
|
|
{
|
|
$this->setStock($stock_id);
|
|
|
|
$number = $this->preparePattern($pattern);
|
|
if ($stock_id && $stock_id != "")
|
|
$this->stock_id = $stock_id;
|
|
if ($number == -1) {
|
|
return "Stock error";
|
|
}
|
|
//get number of objects
|
|
$query = "SELECT count(*) AS c FROM " . strtolower($this->module) . " WHERE document_no LIKE '$number' AND type='normal' AND deleted='0'";
|
|
//echo $query;
|
|
if (gettype($GLOBALS['superGlobalDb']) == 'object') {
|
|
$db = $GLOBALS['superGlobalDb'];
|
|
} else {
|
|
$db = $GLOBALS['db'];
|
|
}
|
|
$res = $db->fetchByAssoc($db->query($query));
|
|
$n = intval($res['c']);
|
|
$n++;
|
|
|
|
if (strtolower($this->module) == 'ecminvoiceouts') {
|
|
// check amazon invoices
|
|
$a = $db->fetchByAssoc($db->query("SELECT count(*) AS c FROM ecminvoiceouts WHERE document_no LIKE '$number' AND document_no LIKE '%/a%' AND type='normal' AND deleted='0'"))['c'];
|
|
if ($a > 0) {
|
|
$n -= $a;
|
|
}
|
|
}
|
|
|
|
return str_replace('%', $n, $number);
|
|
}
|
|
|
|
public function parseCorrectNumber($pattern, $stock_id)
|
|
{
|
|
$this->setStock($stock_id);
|
|
$number = $this->preparePattern($pattern);
|
|
if ($stock_id && $stock_id != "")
|
|
$this->stock_id = $stock_id;
|
|
if ($number == -1) {
|
|
return "Stock error";
|
|
}
|
|
//get number of objects
|
|
$query = "SELECT count(*) AS c FROM " . strtolower($this->module) . " WHERE document_no LIKE '$number' AND type='correct' AND deleted='0'";
|
|
if (gettype($GLOBALS['superGlobalDb']) == 'object') {
|
|
$db = $GLOBALS['superGlobalDb'];
|
|
} else {
|
|
$db = $GLOBALS['db'];
|
|
}
|
|
$res = $db->fetchByAssoc($db->query($query));
|
|
$n = intval($res['c']);
|
|
|
|
if ($this->dbase == 'preDb_0dcc87940d3655fa574b253df04ca1c3' && substr($this->date, -4) == '2018') {
|
|
$n = $n + 2;
|
|
} else {
|
|
$n++;
|
|
}
|
|
|
|
|
|
return str_replace('%', $n, $number);
|
|
}
|
|
|
|
public function parseNumber($pattern, $stock_id)
|
|
{
|
|
$this->setStock($stock_id);
|
|
|
|
|
|
$number = $this->preparePattern($pattern);
|
|
if ($number == -1) {
|
|
return "Stock error";
|
|
}
|
|
//get number of objects
|
|
|
|
$query = "SELECT count(*) AS c FROM " . strtolower($this->module) . " WHERE document_no LIKE '$number' AND deleted='0'";
|
|
|
|
|
|
if (gettype($GLOBALS['superGlobalDb']) == 'object') {
|
|
$db = $GLOBALS['superGlobalDb'];
|
|
} else {
|
|
$db = $GLOBALS['db'];
|
|
}
|
|
$res = $db->fetchByAssoc($db->query($query));
|
|
$n = intval($res['c']);
|
|
$n++;
|
|
|
|
return str_replace('%', $n, $number);
|
|
}
|
|
|
|
public function setStock($id)
|
|
{
|
|
$s = new EcmStock();
|
|
$s->retrieve($id);
|
|
$this->stock = $s->no;
|
|
|
|
unset($s);
|
|
}
|
|
|
|
}
|
|
|
|
?>
|