dolibarr 18.0.6
mod_payment_cicada.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2015 Juanjo Menent <jmenent@2byte.es>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 * or see https://www.gnu.org/
17 */
18
25require_once DOL_DOCUMENT_ROOT.'/core/modules/payment/modules_payment.php';
26
31{
36 public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
37
38 public $prefix = 'PAY';
39
43 public $error = '';
44
50 public $nom = 'Cicada';
51
55 public $name = 'Cicada';
56
57
63 public function info()
64 {
65 global $langs;
66 return $langs->trans("SimpleNumRefModelDesc", $this->prefix);
67 }
68
69
75 public function getExample()
76 {
77 return $this->prefix."0501-0001";
78 }
79
80
87 public function canBeActivated()
88 {
89 global $conf, $langs, $db;
90
91 $payyymm = '';
92 $max = '';
93
94 $posindice = strlen($this->prefix) + 6;
95 $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
96 $sql .= " FROM ".MAIN_DB_PREFIX."paiement";
97 $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
98 $sql .= " AND entity = ".$conf->entity;
99
100 $resql = $db->query($sql);
101 if ($resql) {
102 $row = $db->fetch_row($resql);
103 if ($row) {
104 $payyymm = substr($row[0], 0, 6);
105 $max = $row[0];
106 }
107 }
108 if ($payyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $payyymm)) {
109 $langs->load("errors");
110 $this->error = $langs->trans('ErrorNumRefModel', $max);
111 return false;
112 }
113
114 return true;
115 }
116
124 public function getNextValue($objsoc, $object)
125 {
126 global $db, $conf;
127
128 // First, we get the max value
129 $posindice = strlen($this->prefix) + 6;
130 $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
131 $sql .= " FROM ".MAIN_DB_PREFIX."paiement";
132 $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
133 $sql .= " AND entity = ".$conf->entity;
134
135 $resql = $db->query($sql);
136 if ($resql) {
137 $obj = $db->fetch_object($resql);
138 if ($obj) {
139 $max = intval($obj->max);
140 } else {
141 $max = 0;
142 }
143 } else {
144 dol_syslog(__METHOD__, LOG_DEBUG);
145 return -1;
146 }
147
148 //$date=time();
149 $date = $object->datepaye;
150 $yymm = strftime("%y%m", $date);
151
152 if ($max >= (pow(10, 4) - 1)) {
153 $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
154 } else {
155 $num = sprintf("%04s", $max + 1);
156 }
157
158 dol_syslog(__METHOD__." return ".$this->prefix.$yymm."-".$num);
159 return $this->prefix.$yymm."-".$num;
160 }
161
162
163 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
171 public function payment_get_num($objsoc, $objforref)
172 {
173 // phpcs:enable
174 return $this->getNextValue($objsoc, $objforref);
175 }
176}
Payment numbering references mother class.
Class to manage customer payment numbering rules Cicada.
getNextValue($objsoc, $object)
Return next free value.
payment_get_num($objsoc, $objforref)
Return next free value.
info()
Return description of numbering module.
getExample()
Return an example of numbering.
canBeActivated()
Checks if the numbers already in the database do not cause conflicts that would prevent this numberin...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.