Files
crm.twinpol.com/include/ECM/EcmDocumentNumberGenerator/EcmDocumentNumberGenerator.inc.php
2025-05-12 15:44:39 +00:00

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);
}
}
?>