Complex classes like BookKeeping often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use BookKeeping, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 32 | class BookKeeping extends CommonObject |
||
| 33 | { |
||
| 34 | /** |
||
| 35 | * |
||
| 36 | * @var string Error code (or message) |
||
| 37 | * @deprecated |
||
| 38 | * |
||
| 39 | * @see Accountingbookkeeping::errors |
||
| 40 | */ |
||
| 41 | public $error; |
||
| 42 | /** |
||
| 43 | * |
||
| 44 | * @var string[] Error codes (or messages) |
||
| 45 | */ |
||
| 46 | public $errors = array (); |
||
| 47 | /** |
||
| 48 | * |
||
| 49 | * @var string Id to identify managed objects |
||
| 50 | */ |
||
| 51 | public $element = 'accountingbookkeeping'; |
||
| 52 | /** |
||
| 53 | * |
||
| 54 | * @var string Name of table without prefix where object is stored |
||
| 55 | */ |
||
| 56 | public $table_element = 'accounting_bookkeeping'; |
||
| 57 | |||
| 58 | |||
| 59 | public $entity = 1; |
||
| 60 | |||
| 61 | |||
| 62 | /** |
||
| 63 | * |
||
| 64 | * @var BookKeepingLine[] Lines |
||
| 65 | */ |
||
| 66 | public $lines = array (); |
||
| 67 | |||
| 68 | |||
| 69 | /** |
||
| 70 | * |
||
| 71 | * @var int ID |
||
| 72 | */ |
||
| 73 | public $id; |
||
| 74 | /** |
||
| 75 | */ |
||
| 76 | public $doc_date = ''; |
||
| 77 | public $doc_type; |
||
| 78 | public $doc_ref; |
||
| 79 | public $fk_doc; |
||
| 80 | public $fk_docdet; |
||
| 81 | public $code_tiers; |
||
| 82 | public $numero_compte; |
||
| 83 | public $label_compte; |
||
| 84 | public $debit; |
||
| 85 | public $credit; |
||
| 86 | public $montant; |
||
| 87 | public $sens; |
||
| 88 | public $fk_user_author; |
||
| 89 | public $import_key; |
||
| 90 | public $code_journal; |
||
| 91 | public $piece_num; |
||
| 92 | |||
| 93 | /** |
||
| 94 | */ |
||
| 95 | |||
| 96 | /** |
||
| 97 | * Constructor |
||
| 98 | * |
||
| 99 | * @param DoliDb $db Database handler |
||
| 100 | */ |
||
| 101 | public function __construct(DoliDB $db) { |
||
| 104 | |||
| 105 | /** |
||
| 106 | * Create object into database |
||
| 107 | * |
||
| 108 | * @param User $user User that creates |
||
| 109 | * @param bool $notrigger false=launch triggers after, true=disable triggers |
||
| 110 | * @return int <0 if KO, Id of created object if OK |
||
| 111 | */ |
||
| 112 | public function create(User $user, $notrigger = false) { |
||
| 113 | global $conf, $langs; |
||
| 114 | |||
| 115 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 116 | |||
| 117 | $error = 0; |
||
| 118 | |||
| 119 | // Clean parameters |
||
| 120 | if (isset($this->doc_type)) { |
||
| 121 | $this->doc_type = trim($this->doc_type); |
||
| 122 | } |
||
| 123 | if (isset($this->doc_ref)) { |
||
| 124 | $this->doc_ref = trim($this->doc_ref); |
||
| 125 | } |
||
| 126 | if (isset($this->fk_doc)) { |
||
| 127 | $this->fk_doc = trim($this->fk_doc); |
||
| 128 | } |
||
| 129 | if (isset($this->fk_docdet)) { |
||
| 130 | $this->fk_docdet = trim($this->fk_docdet); |
||
| 131 | } |
||
| 132 | if (isset($this->code_tiers)) { |
||
| 133 | $this->code_tiers = trim($this->code_tiers); |
||
| 134 | } |
||
| 135 | if (isset($this->numero_compte)) { |
||
| 136 | $this->numero_compte = trim($this->numero_compte); |
||
| 137 | } |
||
| 138 | if (isset($this->label_compte)) { |
||
| 139 | $this->label_compte = trim($this->label_compte); |
||
| 140 | } |
||
| 141 | if (isset($this->debit)) { |
||
| 142 | $this->debit = trim($this->debit); |
||
| 143 | } |
||
| 144 | if (isset($this->credit)) { |
||
| 145 | $this->credit = trim($this->credit); |
||
| 146 | } |
||
| 147 | if (isset($this->montant)) { |
||
| 148 | $this->montant = trim($this->montant); |
||
| 149 | } |
||
| 150 | if (isset($this->sens)) { |
||
| 151 | $this->sens = trim($this->sens); |
||
| 152 | } |
||
| 153 | if (isset($this->fk_user_author)) { |
||
| 154 | $this->fk_user_author = trim($this->fk_user_author); |
||
| 155 | } |
||
| 156 | if (isset($this->import_key)) { |
||
| 157 | $this->import_key = trim($this->import_key); |
||
| 158 | } |
||
| 159 | if (isset($this->code_journal)) { |
||
| 160 | $this->code_journal = trim($this->code_journal); |
||
| 161 | } |
||
| 162 | if (isset($this->piece_num)) { |
||
| 163 | $this->piece_num = trim($this->piece_num); |
||
| 164 | } |
||
| 165 | if (empty($this->debit)) $this->debit = 0; |
||
| 166 | if (empty($this->credit)) $this->credit = 0; |
||
| 167 | |||
| 168 | // Check parameters |
||
| 169 | if (empty($this->numero_compte) || $this->numero_compte == '-1') |
||
| 170 | { |
||
| 171 | $langs->load("errors"); |
||
| 172 | $this->errors[]=$langs->trans('ErrorFieldAccountNotDefinedForBankLine', $this->fk_docdet); |
||
| 173 | return -1; |
||
| 174 | } |
||
| 175 | |||
| 176 | |||
| 177 | $this->db->begin(); |
||
| 178 | |||
| 179 | $this->piece_num = 0; |
||
| 180 | |||
| 181 | // first check if line not yet in bookkeeping |
||
| 182 | $sql = "SELECT count(*) as nb"; |
||
| 183 | $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 184 | $sql .= " WHERE doc_type = '" . $this->doc_type . "'"; |
||
| 185 | $sql .= " AND fk_docdet = " . $this->fk_docdet; |
||
| 186 | $sql .= " AND numero_compte = '" . $this->numero_compte . "'"; |
||
| 187 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 188 | |||
| 189 | $resql = $this->db->query($sql); |
||
| 190 | |||
| 191 | if ($resql) { |
||
| 192 | $row = $this->db->fetch_object($resql); |
||
| 193 | if ($row->nb == 0) { |
||
| 194 | |||
| 195 | // Determine piece_num |
||
| 196 | $sqlnum = "SELECT piece_num"; |
||
| 197 | $sqlnum .= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 198 | $sqlnum .= " WHERE doc_type = '" . $this->doc_type . "'"; |
||
| 199 | $sqlnum .= " AND fk_docdet = '" . $this->fk_docdet . "'"; |
||
| 200 | $sqlnum .= " AND doc_ref = '" . $this->doc_ref . "'"; |
||
| 201 | $sqlnum .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 202 | |||
| 203 | dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); |
||
| 204 | $resqlnum = $this->db->query($sqlnum); |
||
| 205 | if ($resqlnum) { |
||
| 206 | $objnum = $this->db->fetch_object($resqlnum); |
||
| 207 | $this->piece_num = $objnum->piece_num; |
||
| 208 | } |
||
| 209 | dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); |
||
| 210 | if (empty($this->piece_num)) { |
||
| 211 | $sqlnum = "SELECT MAX(piece_num)+1 as maxpiecenum"; |
||
| 212 | $sqlnum .= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 213 | $sqlnum .= " WHERE entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 214 | |||
| 215 | dol_syslog(get_class($this) . ":: create sqlnum=" . $sqlnum, LOG_DEBUG); |
||
| 216 | $resqlnum = $this->db->query($sqlnum); |
||
| 217 | if ($resqlnum) { |
||
| 218 | $objnum = $this->db->fetch_object($resqlnum); |
||
| 219 | $this->piece_num = $objnum->maxpiecenum; |
||
| 220 | } |
||
| 221 | } |
||
| 222 | dol_syslog(get_class($this) . ":: create this->piece_num=" . $this->piece_num, LOG_DEBUG); |
||
| 223 | if (empty($this->piece_num)) { |
||
| 224 | $this->piece_num = 1; |
||
| 225 | } |
||
| 226 | |||
| 227 | $now = dol_now(); |
||
| 228 | if (empty($this->date_create)) { |
||
| 229 | $this->date_create = $now; |
||
| 230 | } |
||
| 231 | |||
| 232 | $sql = "INSERT INTO " . MAIN_DB_PREFIX . $this->table_element . " ("; |
||
| 233 | $sql .= "doc_date"; |
||
| 234 | $sql .= ", doc_type"; |
||
| 235 | $sql .= ", doc_ref"; |
||
| 236 | $sql .= ", fk_doc"; |
||
| 237 | $sql .= ", fk_docdet"; |
||
| 238 | $sql .= ", code_tiers"; |
||
| 239 | $sql .= ", numero_compte"; |
||
| 240 | $sql .= ", label_compte"; |
||
| 241 | $sql .= ", debit"; |
||
| 242 | $sql .= ", credit"; |
||
| 243 | $sql .= ", montant"; |
||
| 244 | $sql .= ", sens"; |
||
| 245 | $sql .= ", fk_user_author"; |
||
| 246 | $sql .= ", import_key"; |
||
| 247 | $sql .= ", code_journal"; |
||
| 248 | $sql .= ", piece_num"; |
||
| 249 | $sql .= ', entity'; |
||
| 250 | $sql .= ") VALUES ("; |
||
| 251 | $sql .= "'" . $this->db->idate($this->doc_date) . "'"; |
||
| 252 | $sql .= ",'" . $this->doc_type . "'"; |
||
| 253 | $sql .= ",'" . $this->doc_ref . "'"; |
||
| 254 | $sql .= "," . $this->fk_doc; |
||
| 255 | $sql .= "," . $this->fk_docdet; |
||
| 256 | $sql .= ",'" . $this->code_tiers . "'"; |
||
| 257 | $sql .= ",'" . $this->numero_compte . "'"; |
||
| 258 | $sql .= ",'" . $this->db->escape($this->label_compte) . "'"; |
||
| 259 | $sql .= "," . $this->debit; |
||
| 260 | $sql .= "," . $this->credit; |
||
| 261 | $sql .= "," . $this->montant; |
||
| 262 | $sql .= ",'" . $this->sens . "'"; |
||
| 263 | $sql .= ",'" . $this->fk_user_author . "'"; |
||
| 264 | $sql .= ",'" . $this->db->idate($this->date_create). "'"; |
||
| 265 | $sql .= ",'" . $this->code_journal . "'"; |
||
| 266 | $sql .= "," . $this->piece_num; |
||
| 267 | $sql .= ", " . (! isset($this->entity) ? '1' : $this->entity); |
||
| 268 | $sql .= ")"; |
||
| 269 | |||
| 270 | dol_syslog(get_class($this) . ":: create sql=" . $sql, LOG_DEBUG); |
||
| 271 | $resql = $this->db->query($sql); |
||
| 272 | if ($resql) { |
||
| 273 | $id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element); |
||
| 274 | |||
| 275 | if ($id > 0) { |
||
| 276 | $this->id = $id; |
||
| 277 | $result = 0; |
||
| 278 | } else { |
||
| 279 | $result = - 2; |
||
| 280 | $error ++; |
||
| 281 | $this->errors[] = 'Error Create Error ' . $result . ' lecture ID'; |
||
| 282 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 283 | } |
||
| 284 | } else { |
||
| 285 | $result = - 1; |
||
| 286 | $error ++; |
||
| 287 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 288 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 289 | } |
||
| 290 | } else { // Already exists |
||
| 291 | $result = -3; |
||
| 292 | $error++; |
||
| 293 | $this->errors[] = 'Error Transaction for ('.$this->doc_type.', '.$this->doc_ref.', '.$this->fk_docdet.') were already recorded'; |
||
| 294 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_WARNING); |
||
| 295 | } |
||
| 296 | } else { |
||
| 297 | $result = - 5; |
||
| 298 | $error ++; |
||
| 299 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 300 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 301 | } |
||
| 302 | |||
| 303 | if (! $error) { |
||
| 304 | |||
| 305 | if (! $notrigger) { |
||
| 306 | // Uncomment this and change MYOBJECT to your own tag if you |
||
| 307 | // want this action to call a trigger. |
||
| 308 | |||
| 309 | // // Call triggers |
||
| 310 | // $result=$this->call_trigger('MYOBJECT_CREATE',$user); |
||
| 311 | // if ($result < 0) $error++; |
||
| 312 | // // End call triggers |
||
| 313 | } |
||
| 314 | } |
||
| 315 | |||
| 316 | // Commit or rollback |
||
| 317 | if ($error) { |
||
| 318 | $this->db->rollback(); |
||
| 319 | |||
| 320 | return - 1 * $error; |
||
| 321 | } else { |
||
| 322 | $this->db->commit(); |
||
| 323 | |||
| 324 | return $result; |
||
| 325 | } |
||
| 326 | } |
||
| 327 | |||
| 328 | /** |
||
| 329 | * Create object into database |
||
| 330 | * |
||
| 331 | * @param User $user User that creates |
||
| 332 | * @param bool $notrigger false=launch triggers after, true=disable triggers |
||
| 333 | * @return int <0 if KO, Id of created object if OK |
||
| 334 | */ |
||
| 335 | public function createStd(User $user, $notrigger = false) { |
||
| 336 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 337 | |||
| 338 | $error = 0; |
||
| 339 | |||
| 340 | // Clean parameters |
||
| 341 | |||
| 342 | if (isset($this->doc_type)) { |
||
| 343 | $this->doc_type = trim($this->doc_type); |
||
| 344 | } |
||
| 345 | if (isset($this->doc_ref)) { |
||
| 346 | $this->doc_ref = trim($this->doc_ref); |
||
| 347 | } |
||
| 348 | if (isset($this->fk_doc)) { |
||
| 349 | $this->fk_doc = trim($this->fk_doc); |
||
| 350 | } |
||
| 351 | if (isset($this->fk_docdet)) { |
||
| 352 | $this->fk_docdet = trim($this->fk_docdet); |
||
| 353 | } |
||
| 354 | if (isset($this->code_tiers)) { |
||
| 355 | $this->code_tiers = trim($this->code_tiers); |
||
| 356 | } |
||
| 357 | if (isset($this->numero_compte)) { |
||
| 358 | $this->numero_compte = trim($this->numero_compte); |
||
| 359 | } |
||
| 360 | if (isset($this->label_compte)) { |
||
| 361 | $this->label_compte = trim($this->label_compte); |
||
| 362 | } |
||
| 363 | if (isset($this->debit)) { |
||
| 364 | $this->debit = trim($this->debit); |
||
| 365 | } |
||
| 366 | if (isset($this->credit)) { |
||
| 367 | $this->credit = trim($this->credit); |
||
| 368 | } |
||
| 369 | if (isset($this->montant)) { |
||
| 370 | $this->montant = trim($this->montant); |
||
| 371 | } |
||
| 372 | if (isset($this->sens)) { |
||
| 373 | $this->sens = trim($this->sens); |
||
| 374 | } |
||
| 375 | if (isset($this->fk_user_author)) { |
||
| 376 | $this->fk_user_author = trim($this->fk_user_author); |
||
| 377 | } |
||
| 378 | if (isset($this->import_key)) { |
||
| 379 | $this->import_key = trim($this->import_key); |
||
| 380 | } |
||
| 381 | if (isset($this->code_journal)) { |
||
| 382 | $this->code_journal = trim($this->code_journal); |
||
| 383 | } |
||
| 384 | if (isset($this->piece_num)) { |
||
| 385 | $this->piece_num = trim($this->piece_num); |
||
| 386 | } |
||
| 387 | if (empty($this->debit)) $this->debit = 0; |
||
| 388 | if (empty($this->credit)) $this->credit = 0; |
||
| 389 | |||
| 390 | // Check parameters |
||
| 391 | // Put here code to add control on parameters values |
||
| 392 | |||
| 393 | // Insert request |
||
| 394 | $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '('; |
||
| 395 | $sql .= 'doc_date,'; |
||
| 396 | $sql .= 'doc_type,'; |
||
| 397 | $sql .= 'doc_ref,'; |
||
| 398 | $sql .= 'fk_doc,'; |
||
| 399 | $sql .= 'fk_docdet,'; |
||
| 400 | $sql .= 'code_tiers,'; |
||
| 401 | $sql .= 'numero_compte,'; |
||
| 402 | $sql .= 'label_compte,'; |
||
| 403 | $sql .= 'debit,'; |
||
| 404 | $sql .= 'credit,'; |
||
| 405 | $sql .= 'montant,'; |
||
| 406 | $sql .= 'sens,'; |
||
| 407 | $sql .= 'fk_user_author,'; |
||
| 408 | $sql .= 'import_key,'; |
||
| 409 | $sql .= 'code_journal,'; |
||
| 410 | $sql .= 'piece_num,'; |
||
| 411 | $sql .= 'entity'; |
||
| 412 | $sql .= ') VALUES ('; |
||
| 413 | $sql .= ' ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : "'" . $this->db->idate($this->doc_date) . "'") . ','; |
||
| 414 | $sql .= ' ' . (! isset($this->doc_type) ? 'NULL' : "'" . $this->db->escape($this->doc_type) . "'") . ','; |
||
| 415 | $sql .= ' ' . (! isset($this->doc_ref) ? 'NULL' : "'" . $this->db->escape($this->doc_ref) . "'") . ','; |
||
| 416 | $sql .= ' ' . (empty($this->fk_doc) ? '0' : $this->fk_doc) . ','; |
||
| 417 | $sql .= ' ' . (empty($this->fk_docdet) ? '0' : $this->fk_docdet) . ','; |
||
| 418 | $sql .= ' ' . (! isset($this->code_tiers) ? 'NULL' : "'" . $this->db->escape($this->code_tiers) . "'") . ','; |
||
| 419 | $sql .= ' ' . (! isset($this->numero_compte) ? "'NotDefined'" : "'" . $this->db->escape($this->numero_compte) . "'") . ','; |
||
| 420 | $sql .= ' ' . (! isset($this->label_compte) ? 'NULL' : "'" . $this->db->escape($this->label_compte) . "'") . ','; |
||
| 421 | $sql .= ' ' . (! isset($this->debit) ? 'NULL' : $this->debit ). ','; |
||
| 422 | $sql .= ' ' . (! isset($this->credit) ? 'NULL' : $this->credit ). ','; |
||
| 423 | $sql .= ' ' . (! isset($this->montant) ? 'NULL' : $this->montant ). ','; |
||
| 424 | $sql .= ' ' . (! isset($this->sens) ? 'NULL' : "'" . $this->db->escape($this->sens) . "'") . ','; |
||
| 425 | $sql .= ' ' . $user->id . ','; |
||
| 426 | $sql .= ' ' . (! isset($this->import_key) ? 'NULL' : "'" . $this->db->escape($this->import_key) . "'") . ','; |
||
| 427 | $sql .= ' ' . (empty($this->code_journal) ? 'NULL' : "'" . $this->db->escape($this->code_journal) . "'") . ','; |
||
| 428 | $sql .= ' ' . (empty($this->piece_num) ? 'NULL' : $this->piece_num).','; |
||
| 429 | $sql .= ' ' . (! isset($this->entity) ? '1' : $this->entity); |
||
| 430 | $sql .= ')'; |
||
| 431 | |||
| 432 | $this->db->begin(); |
||
| 433 | |||
| 434 | $resql = $this->db->query($sql); |
||
| 435 | if (! $resql) { |
||
| 436 | $error ++; |
||
| 437 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 438 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 439 | } |
||
| 440 | |||
| 441 | if (! $error) { |
||
| 442 | $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element); |
||
| 443 | |||
| 444 | if (! $notrigger) { |
||
| 445 | // Uncomment this and change MYOBJECT to your own tag if you |
||
| 446 | // want this action to call a trigger. |
||
| 447 | |||
| 448 | // // Call triggers |
||
| 449 | // $result=$this->call_trigger('MYOBJECT_CREATE',$user); |
||
| 450 | // if ($result < 0) $error++; |
||
| 451 | // // End call triggers |
||
| 452 | } |
||
| 453 | } |
||
| 454 | |||
| 455 | // Commit or rollback |
||
| 456 | if ($error) { |
||
| 457 | $this->db->rollback(); |
||
| 458 | |||
| 459 | return - 1 * $error; |
||
| 460 | } else { |
||
| 461 | $this->db->commit(); |
||
| 462 | |||
| 463 | return $this->id; |
||
| 464 | } |
||
| 465 | } |
||
| 466 | |||
| 467 | /** |
||
| 468 | * Load object in memory from the database |
||
| 469 | * |
||
| 470 | * @param int $id Id object |
||
| 471 | * @param string $ref Ref |
||
| 472 | * |
||
| 473 | * @return int <0 if KO, 0 if not found, >0 if OK |
||
| 474 | */ |
||
| 475 | public function fetch($id, $ref = null) { |
||
| 476 | global $conf; |
||
| 477 | |||
| 478 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 479 | |||
| 480 | $sql = 'SELECT'; |
||
| 481 | $sql .= ' t.rowid,'; |
||
| 482 | $sql .= " t.doc_date,"; |
||
| 483 | $sql .= " t.doc_type,"; |
||
| 484 | $sql .= " t.doc_ref,"; |
||
| 485 | $sql .= " t.fk_doc,"; |
||
| 486 | $sql .= " t.fk_docdet,"; |
||
| 487 | $sql .= " t.code_tiers,"; |
||
| 488 | $sql .= " t.numero_compte,"; |
||
| 489 | $sql .= " t.label_compte,"; |
||
| 490 | $sql .= " t.debit,"; |
||
| 491 | $sql .= " t.credit,"; |
||
| 492 | $sql .= " t.montant,"; |
||
| 493 | $sql .= " t.sens,"; |
||
| 494 | $sql .= " t.fk_user_author,"; |
||
| 495 | $sql .= " t.import_key,"; |
||
| 496 | $sql .= " t.code_journal,"; |
||
| 497 | $sql .= " t.piece_num"; |
||
| 498 | $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; |
||
| 499 | $sql .= ' WHERE 1 = 1'; |
||
| 500 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 501 | if (null !== $ref) { |
||
| 502 | $sql .= ' AND t.ref = ' . '\'' . $ref . '\''; |
||
| 503 | } else { |
||
| 504 | $sql .= ' AND t.rowid = ' . $id; |
||
| 505 | } |
||
| 506 | |||
| 507 | $resql = $this->db->query($sql); |
||
| 508 | if ($resql) { |
||
| 509 | $numrows = $this->db->num_rows($resql); |
||
| 510 | if ($numrows) { |
||
| 511 | $obj = $this->db->fetch_object($resql); |
||
| 512 | |||
| 513 | $this->id = $obj->rowid; |
||
| 514 | |||
| 515 | $this->doc_date = $this->db->jdate($obj->doc_date); |
||
|
1 ignored issue
–
show
|
|||
| 516 | $this->doc_type = $obj->doc_type; |
||
| 517 | $this->doc_ref = $obj->doc_ref; |
||
| 518 | $this->fk_doc = $obj->fk_doc; |
||
| 519 | $this->fk_docdet = $obj->fk_docdet; |
||
| 520 | $this->code_tiers = $obj->code_tiers; |
||
| 521 | $this->numero_compte = $obj->numero_compte; |
||
| 522 | $this->label_compte = $obj->label_compte; |
||
| 523 | $this->debit = $obj->debit; |
||
| 524 | $this->credit = $obj->credit; |
||
| 525 | $this->montant = $obj->montant; |
||
| 526 | $this->sens = $obj->sens; |
||
| 527 | $this->fk_user_author = $obj->fk_user_author; |
||
| 528 | $this->import_key = $obj->import_key; |
||
| 529 | $this->code_journal = $obj->code_journal; |
||
| 530 | $this->piece_num = $obj->piece_num; |
||
| 531 | } |
||
| 532 | $this->db->free($resql); |
||
| 533 | |||
| 534 | if ($numrows) { |
||
| 535 | return 1; |
||
| 536 | } else { |
||
| 537 | return 0; |
||
| 538 | } |
||
| 539 | } else { |
||
| 540 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 541 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 542 | |||
| 543 | return - 1; |
||
| 544 | } |
||
| 545 | } |
||
| 546 | |||
| 547 | /** |
||
| 548 | * Load object in memory from the database |
||
| 549 | * |
||
| 550 | * @param string $sortorder Sort Order |
||
| 551 | * @param string $sortfield Sort field |
||
| 552 | * @param int $limit offset limit |
||
| 553 | * @param int $offset offset limit |
||
| 554 | * @param array $filter filter array |
||
| 555 | * @param string $filtermode filter mode (AND or OR) |
||
| 556 | * |
||
| 557 | * @return int <0 if KO, >0 if OK |
||
| 558 | */ |
||
| 559 | public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { |
||
| 560 | global $conf; |
||
| 561 | |||
| 562 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 563 | |||
| 564 | $sql = 'SELECT'; |
||
| 565 | $sql .= ' t.rowid,'; |
||
| 566 | $sql .= " t.doc_date,"; |
||
| 567 | $sql .= " t.doc_type,"; |
||
| 568 | $sql .= " t.doc_ref,"; |
||
| 569 | $sql .= " t.fk_doc,"; |
||
| 570 | $sql .= " t.fk_docdet,"; |
||
| 571 | $sql .= " t.code_tiers,"; |
||
| 572 | $sql .= " t.numero_compte,"; |
||
| 573 | $sql .= " t.label_compte,"; |
||
| 574 | $sql .= " t.debit,"; |
||
| 575 | $sql .= " t.credit,"; |
||
| 576 | $sql .= " t.montant,"; |
||
| 577 | $sql .= " t.sens,"; |
||
| 578 | $sql .= " t.fk_user_author,"; |
||
| 579 | $sql .= " t.import_key,"; |
||
| 580 | $sql .= " t.code_journal,"; |
||
| 581 | $sql .= " t.piece_num"; |
||
| 582 | // Manage filter |
||
| 583 | $sqlwhere = array (); |
||
| 584 | if (count($filter) > 0) { |
||
| 585 | foreach ( $filter as $key => $value ) { |
||
| 586 | if ($key == 't.doc_date') { |
||
| 587 | $sqlwhere[] = $key . '=\'' . $this->db->idate($value) . '\''; |
||
| 588 | } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { |
||
| 589 | $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; |
||
| 590 | } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.code_tiers>=' || $key == 't.code_tiers<=') { |
||
| 591 | $sqlwhere[] = $key . '\'' . $this->db->escape($value) . '\''; |
||
| 592 | } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { |
||
| 593 | $sqlwhere[] = $key . '=' . $value; |
||
| 594 | } elseif ($key == 't.code_tiers' || $key == 't.numero_compte') { |
||
| 595 | $sqlwhere[] = $key . ' LIKE \'' . $this->db->escape($value) . '%\''; |
||
| 596 | } elseif ($key == 't.label_compte') { |
||
| 597 | $sqlwhere[] = $key . ' LIKE \'' . $this->db->escape($value) . '%\''; |
||
| 598 | }else { |
||
| 599 | $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; |
||
| 600 | } |
||
| 601 | } |
||
| 602 | } |
||
| 603 | $sql.= ' WHERE 1 = 1'; |
||
| 604 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 605 | if (count($sqlwhere) > 0) { |
||
| 606 | $sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere); |
||
| 607 | } |
||
| 608 | // Affichage par compte comptable |
||
| 609 | $sql .= ' ORDER BY t.numero_compte ASC'; |
||
| 610 | if (! empty($sortfield)) { |
||
| 611 | $sql .= ', ' . $sortfield . ' ' .$sortorder; |
||
| 612 | } |
||
| 613 | if (! empty($limit)) { |
||
| 614 | $sql .= ' ' . $this->db->plimit($limit + 1, $offset); |
||
| 615 | } |
||
| 616 | $this->lines = array (); |
||
| 617 | |||
| 618 | $resql = $this->db->query($sql); |
||
| 619 | if ($resql) { |
||
| 620 | $num = $this->db->num_rows($resql); |
||
| 621 | |||
| 622 | while ( $obj = $this->db->fetch_object($resql) ) { |
||
| 623 | $line = new BookKeepingLine(); |
||
| 624 | |||
| 625 | $line->id = $obj->rowid; |
||
| 626 | |||
| 627 | $line->doc_date = $this->db->jdate($obj->doc_date); |
||
|
1 ignored issue
–
show
|
|||
| 628 | $line->doc_type = $obj->doc_type; |
||
| 629 | $line->doc_ref = $obj->doc_ref; |
||
| 630 | $line->fk_doc = $obj->fk_doc; |
||
| 631 | $line->fk_docdet = $obj->fk_docdet; |
||
| 632 | $line->code_tiers = $obj->code_tiers; |
||
| 633 | $line->numero_compte = $obj->numero_compte; |
||
| 634 | $line->label_compte = $obj->label_compte; |
||
| 635 | $line->debit = $obj->debit; |
||
| 636 | $line->credit = $obj->credit; |
||
| 637 | $line->montant = $obj->montant; |
||
| 638 | $line->sens = $obj->sens; |
||
| 639 | $line->fk_user_author = $obj->fk_user_author; |
||
| 640 | $line->import_key = $obj->import_key; |
||
| 641 | $line->code_journal = $obj->code_journal; |
||
| 642 | $line->piece_num = $obj->piece_num; |
||
| 643 | |||
| 644 | $this->lines[] = $line; |
||
| 645 | } |
||
| 646 | $this->db->free($resql); |
||
| 647 | |||
| 648 | return $num; |
||
| 649 | } else { |
||
| 650 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 651 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 652 | |||
| 653 | return - 1; |
||
| 654 | } |
||
| 655 | } |
||
| 656 | |||
| 657 | |||
| 658 | /** |
||
| 659 | * Load object in memory from the database |
||
| 660 | * |
||
| 661 | * @param string $sortorder Sort Order |
||
| 662 | * @param string $sortfield Sort field |
||
| 663 | * @param int $limit offset limit |
||
| 664 | * @param int $offset offset limit |
||
| 665 | * @param array $filter filter array |
||
| 666 | * @param string $filtermode filter mode (AND or OR) |
||
| 667 | * |
||
| 668 | * @return int <0 if KO, >0 if OK |
||
| 669 | */ |
||
| 670 | public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { |
||
| 671 | global $conf; |
||
| 672 | |||
| 673 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 674 | |||
| 675 | $sql = 'SELECT'; |
||
| 676 | $sql .= ' t.rowid,'; |
||
| 677 | $sql .= " t.doc_date,"; |
||
| 678 | $sql .= " t.doc_type,"; |
||
| 679 | $sql .= " t.doc_ref,"; |
||
| 680 | $sql .= " t.fk_doc,"; |
||
| 681 | $sql .= " t.fk_docdet,"; |
||
| 682 | $sql .= " t.code_tiers,"; |
||
| 683 | $sql .= " t.numero_compte,"; |
||
| 684 | $sql .= " t.label_compte,"; |
||
| 685 | $sql .= " t.debit,"; |
||
| 686 | $sql .= " t.credit,"; |
||
| 687 | $sql .= " t.montant,"; |
||
| 688 | $sql .= " t.sens,"; |
||
| 689 | $sql .= " t.fk_user_author,"; |
||
| 690 | $sql .= " t.import_key,"; |
||
| 691 | $sql .= " t.code_journal,"; |
||
| 692 | $sql .= " t.piece_num"; |
||
| 693 | $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; |
||
| 694 | // Manage filter |
||
| 695 | $sqlwhere = array (); |
||
| 696 | if (count($filter) > 0) { |
||
| 697 | foreach ( $filter as $key => $value ) { |
||
| 698 | if ($key == 't.doc_date') { |
||
| 699 | $sqlwhere[] = $key . '=\'' . $this->db->idate($value) . '\''; |
||
| 700 | } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { |
||
| 701 | $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; |
||
| 702 | } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.code_tiers>=' || $key == 't.code_tiers<=') { |
||
| 703 | $sqlwhere[] = $key . '\'' . $this->db->escape($value) . '\''; |
||
| 704 | } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { |
||
| 705 | $sqlwhere[] = $key . '=' . $value; |
||
| 706 | } elseif ($key == 't.code_tiers' || $key == 't.numero_compte') { |
||
| 707 | $sqlwhere[] = $key . ' LIKE \'' . $this->db->escape($value) . '%\''; |
||
| 708 | } else { |
||
| 709 | $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; |
||
| 710 | } |
||
| 711 | } |
||
| 712 | } |
||
| 713 | $sql.= ' WHERE 1 = 1'; |
||
| 714 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 715 | if (count($sqlwhere) > 0) { |
||
| 716 | $sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere); |
||
| 717 | } |
||
| 718 | |||
| 719 | if (! empty($sortfield)) { |
||
| 720 | $sql .= $this->db->order($sortfield, $sortorder); |
||
| 721 | } |
||
| 722 | if (! empty($limit)) { |
||
| 723 | $sql .= ' ' . $this->db->plimit($limit + 1, $offset); |
||
| 724 | } |
||
| 725 | $this->lines = array (); |
||
| 726 | |||
| 727 | $resql = $this->db->query($sql); |
||
| 728 | if ($resql) { |
||
| 729 | $num = $this->db->num_rows($resql); |
||
| 730 | |||
| 731 | while ( $obj = $this->db->fetch_object($resql) ) { |
||
| 732 | $line = new BookKeepingLine(); |
||
| 733 | |||
| 734 | $line->id = $obj->rowid; |
||
| 735 | |||
| 736 | $line->doc_date = $this->db->jdate($obj->doc_date); |
||
|
1 ignored issue
–
show
|
|||
| 737 | $line->doc_type = $obj->doc_type; |
||
| 738 | $line->doc_ref = $obj->doc_ref; |
||
| 739 | $line->fk_doc = $obj->fk_doc; |
||
| 740 | $line->fk_docdet = $obj->fk_docdet; |
||
| 741 | $line->code_tiers = $obj->code_tiers; |
||
| 742 | $line->numero_compte = $obj->numero_compte; |
||
| 743 | $line->label_compte = $obj->label_compte; |
||
| 744 | $line->debit = $obj->debit; |
||
| 745 | $line->credit = $obj->credit; |
||
| 746 | $line->montant = $obj->montant; |
||
| 747 | $line->sens = $obj->sens; |
||
| 748 | $line->fk_user_author = $obj->fk_user_author; |
||
| 749 | $line->import_key = $obj->import_key; |
||
| 750 | $line->code_journal = $obj->code_journal; |
||
| 751 | $line->piece_num = $obj->piece_num; |
||
| 752 | |||
| 753 | $this->lines[] = $line; |
||
| 754 | } |
||
| 755 | $this->db->free($resql); |
||
| 756 | |||
| 757 | return $num; |
||
| 758 | } else { |
||
| 759 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 760 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 761 | |||
| 762 | return - 1; |
||
| 763 | } |
||
| 764 | } |
||
| 765 | |||
| 766 | /** |
||
| 767 | * Load object in memory from the database |
||
| 768 | * |
||
| 769 | * @param string $sortorder Sort Order |
||
| 770 | * @param string $sortfield Sort field |
||
| 771 | * @param int $limit offset limit |
||
| 772 | * @param int $offset offset limit |
||
| 773 | * @param array $filter filter array |
||
| 774 | * @param string $filtermode filter mode (AND or OR) |
||
| 775 | * |
||
| 776 | * @return int <0 if KO, >0 if OK |
||
| 777 | */ |
||
| 778 | public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') { |
||
| 779 | global $conf; |
||
| 780 | |||
| 781 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 782 | |||
| 783 | $sql = 'SELECT'; |
||
| 784 | $sql .= " t.numero_compte,"; |
||
| 785 | $sql .= " SUM(t.debit) as debit,"; |
||
| 786 | $sql .= " SUM(t.credit) as credit"; |
||
| 787 | $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; |
||
| 788 | // Manage filter |
||
| 789 | $sqlwhere = array (); |
||
| 790 | if (count($filter) > 0) { |
||
| 791 | foreach ( $filter as $key => $value ) { |
||
| 792 | if ($key == 't.doc_date') { |
||
| 793 | $sqlwhere[] = $key . '=\'' . $this->db->idate($value) . '\''; |
||
| 794 | } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') { |
||
| 795 | $sqlwhere[] = $key . '\'' . $this->db->idate($value) . '\''; |
||
| 796 | } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.code_tiers>=' || $key == 't.code_tiers<=') { |
||
| 797 | $sqlwhere[] = $key . '\'' . $this->db->escape($value) . '\''; |
||
| 798 | } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') { |
||
| 799 | $sqlwhere[] = $key . '=' . $value; |
||
| 800 | } elseif ($key == 't.code_tiers' || $key == 't.numero_compte') { |
||
| 801 | $sqlwhere[] = $key . ' LIKE \'' . $this->db->escape($value) . '%\''; |
||
| 802 | } else { |
||
| 803 | $sqlwhere[] = $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; |
||
| 804 | } |
||
| 805 | } |
||
| 806 | } |
||
| 807 | $sql.= ' WHERE 1 = 1'; |
||
| 808 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 809 | if (count($sqlwhere) > 0) { |
||
| 810 | $sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere); |
||
| 811 | } |
||
| 812 | |||
| 813 | $sql .= ' GROUP BY t.numero_compte'; |
||
| 814 | |||
| 815 | if (! empty($sortfield)) { |
||
| 816 | $sql .= $this->db->order($sortfield, $sortorder); |
||
| 817 | } |
||
| 818 | if (! empty($limit)) { |
||
| 819 | $sql .= ' ' . $this->db->plimit($limit + 1, $offset); |
||
| 820 | } |
||
| 821 | $this->lines = array (); |
||
| 822 | |||
| 823 | $resql = $this->db->query($sql); |
||
| 824 | if ($resql) { |
||
| 825 | $num = $this->db->num_rows($resql); |
||
| 826 | |||
| 827 | while ( $obj = $this->db->fetch_object($resql) ) { |
||
| 828 | $line = new BookKeepingLine(); |
||
| 829 | |||
| 830 | $line->numero_compte = $obj->numero_compte; |
||
| 831 | $line->debit = $obj->debit; |
||
| 832 | $line->credit = $obj->credit; |
||
| 833 | $this->lines[] = $line; |
||
| 834 | } |
||
| 835 | $this->db->free($resql); |
||
| 836 | |||
| 837 | return $num; |
||
| 838 | } else { |
||
| 839 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 840 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 841 | |||
| 842 | return - 1; |
||
| 843 | } |
||
| 844 | } |
||
| 845 | |||
| 846 | /** |
||
| 847 | * Update object into database |
||
| 848 | * |
||
| 849 | * @param User $user User that modifies |
||
| 850 | * @param bool $notrigger false=launch triggers after, true=disable triggers |
||
| 851 | * |
||
| 852 | * @return int <0 if KO, >0 if OK |
||
| 853 | */ |
||
| 854 | public function update(User $user, $notrigger = false) { |
||
| 855 | $error = 0; |
||
| 856 | |||
| 857 | dol_syslog(__METHOD__, LOG_DEBUG); |
||
| 858 | |||
| 859 | // Clean parameters |
||
| 860 | |||
| 861 | if (isset($this->doc_type)) { |
||
| 862 | $this->doc_type = trim($this->doc_type); |
||
| 863 | } |
||
| 864 | if (isset($this->doc_ref)) { |
||
| 865 | $this->doc_ref = trim($this->doc_ref); |
||
| 866 | } |
||
| 867 | if (isset($this->fk_doc)) { |
||
| 868 | $this->fk_doc = trim($this->fk_doc); |
||
| 869 | } |
||
| 870 | if (isset($this->fk_docdet)) { |
||
| 871 | $this->fk_docdet = trim($this->fk_docdet); |
||
| 872 | } |
||
| 873 | if (isset($this->code_tiers)) { |
||
| 874 | $this->code_tiers = trim($this->code_tiers); |
||
| 875 | } |
||
| 876 | if (isset($this->numero_compte)) { |
||
| 877 | $this->numero_compte = trim($this->numero_compte); |
||
| 878 | } |
||
| 879 | if (isset($this->label_compte)) { |
||
| 880 | $this->label_compte = trim($this->label_compte); |
||
| 881 | } |
||
| 882 | if (isset($this->debit)) { |
||
| 883 | $this->debit = trim($this->debit); |
||
| 884 | } |
||
| 885 | if (isset($this->credit)) { |
||
| 886 | $this->credit = trim($this->credit); |
||
| 887 | } |
||
| 888 | if (isset($this->montant)) { |
||
| 889 | $this->montant = trim($this->montant); |
||
| 890 | } |
||
| 891 | if (isset($this->sens)) { |
||
| 892 | $this->sens = trim($this->sens); |
||
| 893 | } |
||
| 894 | if (isset($this->fk_user_author)) { |
||
| 895 | $this->fk_user_author = trim($this->fk_user_author); |
||
| 896 | } |
||
| 897 | if (isset($this->import_key)) { |
||
| 898 | $this->import_key = trim($this->import_key); |
||
| 899 | } |
||
| 900 | if (isset($this->code_journal)) { |
||
| 901 | $this->code_journal = trim($this->code_journal); |
||
| 902 | } |
||
| 903 | if (isset($this->piece_num)) { |
||
| 904 | $this->piece_num = trim($this->piece_num); |
||
| 905 | } |
||
| 906 | |||
| 907 | // Check parameters |
||
| 908 | // Put here code to add a control on parameters values |
||
| 909 | |||
| 910 | // Update request |
||
| 911 | $sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET'; |
||
| 912 | $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ','; |
||
| 913 | $sql .= ' doc_type = ' . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ','; |
||
| 914 | $sql .= ' doc_ref = ' . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ','; |
||
| 915 | $sql .= ' fk_doc = ' . (isset($this->fk_doc) ? $this->fk_doc : "null") . ','; |
||
| 916 | $sql .= ' fk_docdet = ' . (isset($this->fk_docdet) ? $this->fk_docdet : "null") . ','; |
||
| 917 | $sql .= ' code_tiers = ' . (isset($this->code_tiers) ? "'" . $this->db->escape($this->code_tiers) . "'" : "null") . ','; |
||
| 918 | $sql .= ' numero_compte = ' . (isset($this->numero_compte) ? "'" . $this->db->escape($this->numero_compte) . "'" : "null") . ','; |
||
| 919 | $sql .= ' label_compte = ' . (isset($this->label_compte) ? "'" . $this->db->escape($this->label_compte) . "'" : "null") . ','; |
||
| 920 | $sql .= ' debit = ' . (isset($this->debit) ? $this->debit : "null") . ','; |
||
| 921 | $sql .= ' credit = ' . (isset($this->credit) ? $this->credit : "null") . ','; |
||
| 922 | $sql .= ' montant = ' . (isset($this->montant) ? $this->montant : "null") . ','; |
||
| 923 | $sql .= ' sens = ' . (isset($this->sens) ? "'" . $this->db->escape($this->sens) . "'" : "null") . ','; |
||
| 924 | $sql .= ' fk_user_author = ' . (isset($this->fk_user_author) ? $this->fk_user_author : "null") . ','; |
||
| 925 | $sql .= ' import_key = ' . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . ','; |
||
| 926 | $sql .= ' code_journal = ' . (isset($this->code_journal) ? "'" . $this->db->escape($this->code_journal) . "'" : "null") . ','; |
||
| 927 | $sql .= ' piece_num = ' . (isset($this->piece_num) ? $this->piece_num : "null"); |
||
| 928 | $sql .= ' WHERE rowid=' . $this->id; |
||
| 929 | |||
| 930 | $this->db->begin(); |
||
| 931 | |||
| 932 | $resql = $this->db->query($sql); |
||
| 933 | if (! $resql) { |
||
| 934 | $error ++; |
||
| 935 | $this->errors[] = 'Error ' . $this->db->lasterror(); |
||
| 936 | dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); |
||
| 937 | } |
||
| 938 | |||
| 939 | if (! $error && ! $notrigger) { |
||
| 940 | // Uncomment this and change MYOBJECT to your own tag if you |
||
| 941 | // want this action calls a trigger. |
||
| 942 | |||
| 943 | // // Call triggers |
||
| 944 | // $result=$this->call_trigger('MYOBJECT_MODIFY',$user); |
||
| 945 | // if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} |
||
| 946 | // // End call triggers |
||
| 947 | } |
||
| 948 | |||
| 949 | // Commit or rollback |
||
| 950 | if ($error) { |
||
| 951 | $this->db->rollback(); |
||
| 952 | |||
| 953 | return - 1 * $error; |
||
| 954 | } else { |
||
| 955 | $this->db->commit(); |
||
| 956 | |||
| 957 | return 1; |
||
| 958 | } |
||
| 959 | } |
||
| 960 | |||
| 961 | /** |
||
| 962 | * Delete object in database |
||
| 963 | * |
||
| 964 | * @param User $user User that deletes |
||
| 965 | * @param bool $notrigger false=launch triggers after, true=disable triggers |
||
| 966 | * |
||
| 967 | * @return int <0 if KO, >0 if OK |
||
| 968 | */ |
||
| 969 | public function delete(User $user, $notrigger = false) { |
||
| 1011 | |||
| 1012 | /** |
||
| 1013 | * Delete bookkepping by importkey |
||
| 1014 | * |
||
| 1015 | * @param string $importkey Import key |
||
| 1016 | * @return int Result |
||
| 1017 | */ |
||
| 1018 | function deleteByImportkey($importkey) { |
||
| 1019 | $this->db->begin(); |
||
| 1020 | |||
| 1021 | // first check if line not yet in bookkeeping |
||
| 1022 | $sql = "DELETE"; |
||
| 1023 | $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 1024 | $sql .= " WHERE import_key = '" . $importkey . "'"; |
||
| 1025 | |||
| 1026 | $resql = $this->db->query($sql); |
||
| 1027 | |||
| 1028 | if (! $resql) { |
||
| 1029 | $this->errors[] = "Error " . $this->db->lasterror(); |
||
| 1030 | dol_syslog(get_class($this)."::delete Error " . $this->db->lasterror(), LOG_ERR); |
||
| 1031 | $this->db->rollback(); |
||
| 1032 | return - 1; |
||
| 1033 | } |
||
| 1034 | |||
| 1035 | $this->db->commit(); |
||
| 1036 | return 1; |
||
| 1037 | } |
||
| 1038 | |||
| 1039 | /** |
||
| 1040 | * Delete bookkepping by year |
||
| 1041 | * |
||
| 1042 | * @param string $delyear Year to delete |
||
| 1043 | * @param string $journal Journal to delete |
||
| 1044 | * @return int <0 if KO, >0 if OK |
||
| 1045 | */ |
||
| 1046 | function deleteByYearAndJournal($delyear='', $journal='') { |
||
| 1047 | global $conf; |
||
| 1048 | |||
| 1049 | if (empty($delyear) && empty($journal)) |
||
| 1050 | { |
||
| 1051 | return -1; |
||
| 1052 | } |
||
| 1053 | |||
| 1054 | $this->db->begin(); |
||
| 1055 | |||
| 1056 | // first check if line not yet in bookkeeping |
||
| 1057 | $sql = "DELETE"; |
||
| 1058 | $sql.= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 1059 | $sql.= " WHERE 1 = 1"; |
||
| 1060 | if (! empty($delyear)) $sql.= " AND YEAR(doc_date) = " . $delyear; // FIXME Must use between |
||
| 1061 | if (! empty($journal)) $sql.= " AND code_journal = '".$journal."'"; |
||
| 1062 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 1063 | $resql = $this->db->query($sql); |
||
| 1064 | |||
| 1065 | if (! $resql) { |
||
| 1066 | $this->errors[] = "Error " . $this->db->lasterror(); |
||
| 1067 | foreach ( $this->errors as $errmsg ) { |
||
| 1068 | dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); |
||
| 1069 | $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); |
||
| 1070 | } |
||
| 1071 | $this->db->rollback(); |
||
| 1072 | return -1; |
||
| 1073 | } |
||
| 1074 | |||
| 1075 | $this->db->commit(); |
||
| 1076 | return 1; |
||
| 1077 | } |
||
| 1078 | |||
| 1079 | /** |
||
| 1080 | * Delete bookkepping by piece number |
||
| 1081 | * |
||
| 1082 | * @param int $piecenum peicenum to delete |
||
| 1083 | * @return int Result |
||
| 1084 | */ |
||
| 1085 | function deleteMvtNum($piecenum) { |
||
| 1086 | global $conf; |
||
| 1087 | |||
| 1088 | $this->db->begin(); |
||
| 1089 | |||
| 1090 | // first check if line not yet in bookkeeping |
||
| 1091 | $sql = "DELETE"; |
||
| 1092 | $sql .= " FROM " . MAIN_DB_PREFIX . $this->table_element; |
||
| 1093 | $sql .= " WHERE piece_num = " . $piecenum; |
||
| 1094 | $sql .= " AND entity IN (" . getEntity("accountancy", 1) . ")"; |
||
| 1095 | |||
| 1096 | $resql = $this->db->query($sql); |
||
| 1097 | |||
| 1098 | if (! $resql) { |
||
| 1099 | $this->errors[] = "Error " . $this->db->lasterror(); |
||
| 1100 | foreach ( $this->errors as $errmsg ) { |
||
| 1101 | dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR); |
||
| 1102 | $this->error .= ($this->error ? ', ' . $errmsg : $errmsg); |
||
| 1103 | } |
||
| 1104 | $this->db->rollback(); |
||
| 1105 | return - 1; |
||
| 1106 | } |
||
| 1107 | |||
| 1108 | $this->db->commit(); |
||
| 1109 | return 1; |
||
| 1110 | } |
||
| 1111 | |||
| 1112 | /** |
||
| 1113 | * Load an object from its id and create a new one in database |
||
| 1114 | * |
||
| 1115 | * @param int $fromid Id of object to clone |
||
| 1116 | * |
||
| 1117 | * @return int New id of clone |
||
| 1118 | */ |
||
| 1119 | public function createFromClone($fromid) { |
||
| 1157 | |||
| 1158 | /** |
||
| 1159 | * Initialise object with example values |
||
| 1160 | * Id must be 0 if object instance is a specimen |
||
| 1161 | * |
||
| 1162 | * @return void |
||
| 1163 | */ |
||
| 1164 | public function initAsSpecimen() { |
||
| 1184 | |||
| 1185 | /** |
||
| 1186 | * Load an accounting document into memory from database |
||
| 1187 | * |
||
| 1188 | * @param int $piecenum Accounting document to get |
||
| 1189 | * @return int <0 if KO, >0 if OK |
||
| 1190 | */ |
||
| 1191 | public function fetchPerMvt($piecenum) { |
||
| 1192 | global $conf; |
||
| 1193 | |||
| 1194 | $sql = "SELECT piece_num,doc_date,code_journal,doc_ref,doc_type"; |
||
| 1217 | |||
| 1218 | /** |
||
| 1219 | * Return next number movement |
||
| 1220 | * |
||
| 1221 | * @return string Next numero to use |
||
| 1222 | */ |
||
| 1223 | public function getNextNumMvt() |
||
| 1244 | |||
| 1245 | /** |
||
| 1246 | * Load all informations of accountancy document |
||
| 1247 | * |
||
| 1248 | * @param int $piecenum id of line to get |
||
| 1249 | * @return int <0 if KO, >0 if OK |
||
| 1250 | */ |
||
| 1251 | function fetch_all_per_mvt($piecenum) { |
||
| 1297 | |||
| 1298 | /** |
||
| 1299 | * Export bookkeping |
||
| 1300 | * |
||
| 1301 | * @param string $model Model |
||
| 1302 | * @return int Result |
||
| 1303 | */ |
||
| 1304 | function export_bookkeping($model = 'ebp') { |
||
| 1353 | |||
| 1354 | |||
| 1355 | |||
| 1356 | /** |
||
| 1357 | * Return list of accounts with label by chart of accounts |
||
| 1358 | * |
||
| 1359 | * @param string $selectid Preselected chart of accounts |
||
| 1360 | * @param string $htmlname Name of field in html form |
||
| 1361 | * @param int $showempty Add an empty field |
||
| 1362 | * @param array $event Event options |
||
| 1363 | * @param int $select_in Value is a aa.rowid (0 default) or aa.account_number (1) |
||
| 1364 | * @param int $select_out Set value returned by select 0=rowid (default), 1=account_number |
||
| 1365 | * @param int $aabase Set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by this number |
||
| 1366 | * @return string String with HTML select |
||
| 1367 | */ |
||
| 1368 | function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') { |
||
| 1424 | |||
| 1425 | |||
| 1426 | |||
| 1427 | /** |
||
| 1428 | * Description of a root accounting account |
||
| 1429 | * |
||
| 1430 | * @param string $account Accounting account |
||
| 1431 | * @return string Root account |
||
| 1432 | */ |
||
| 1433 | function get_compte_racine($account = null) |
||
| 1466 | |||
| 1467 | |||
| 1468 | /** |
||
| 1469 | * Description of accounting account |
||
| 1470 | * |
||
| 1471 | * @param string $account Accounting account |
||
| 1472 | * @return string Account desc |
||
| 1473 | */ |
||
| 1474 | function get_compte_desc($account = null) |
||
| 1508 | |||
| 1509 | } |
||
| 1510 | |||
| 1535 |
Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.
For example, imagine you have a variable
$accountIdthat can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to theidproperty of an instance of theAccountclass. This class holds a proper account, so the id value must no longer be false.Either this assignment is in error or a type check should be added for that assignment.