From 4f6e336cc38e02293054432a6dea6b909623fd3a Mon Sep 17 00:00:00 2001 From: Charles Delachapelle Date: Wed, 5 Jun 2024 12:05:05 +0200 Subject: [PATCH] #19 [Hook] add: Priseo field on selling price --- class/actions_priseo.class.php | 112 +++++++++++++++++++++++++++++++ core/modules/modPriseo.class.php | 1 + 2 files changed, 113 insertions(+) create mode 100644 class/actions_priseo.class.php diff --git a/class/actions_priseo.class.php b/class/actions_priseo.class.php new file mode 100644 index 0000000..87cbbec --- /dev/null +++ b/class/actions_priseo.class.php @@ -0,0 +1,112 @@ + + * + * 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 . + */ + +/** + * \file class/actions_priseo.class.php + * \ingroup priseo + * \brief Priseo hook overload + */ + +/** + * Class ActionsPriseo + */ +class ActionsPriseo +{ + /** + * @var string Module name + */ + public $module = 'priseo'; + + /** + * @var DoliDB Database handler + */ + public $db; + + /** + * @var string Error string + */ + public $error; + + /** + * @var string[] Array of error strings + */ + public $errors = []; + + /** + * @var array Hook results. Propagated to $hookmanager->resArray for later reuse + */ + public $results = []; + + /** + * @var string|null String displayed by executeHook() immediately after return. + */ + public ?string $resprints; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + $this->db = $db; + } + + /** + * Overloading the printCommonFooter function : replacing the parent's function with the one below + * + * @param array $parameters Hook metadatas (context, etc...) + * @return int 0 < on error, 0 on success, 1 to replace standard code + * @throws Exception + */ + public function printCommonFooter(array $parameters): int + { + global $object; + + if (strpos($parameters['context'], 'productpricecard') !== false) { + require_once __DIR__ . './competitorprice.class.php'; + + $competitorPrice = new CompetitorPrice($this->db); + + $competitorPrices = $competitorPrice->fetchAll('DESC', 'amount_ht', 0, 0, ['customsql' => 't.status >= ' . $competitorPrice::STATUS_DRAFT . ' AND t.fk_product = ' . $object->id]); + $lastCompetitorPrices = $competitorPrice->fetchAll('DESC', 'rowid', 1, 0, ['customsql' => 't.status >= ' . $competitorPrice::STATUS_DRAFT . ' AND t.fk_product = ' . $object->id]); + if (is_array($competitorPrices) && !empty($competitorPrices)) { + $lastCompetitorPrice = array_shift($lastCompetitorPrices); + $maxPrices = array_shift($competitorPrices); + $minPrices = end($competitorPrices); + $pictopath = dol_buildpath('custom/priseo/img/priseo_color.png', 1); + $pictoPriseo = img_picto('', $pictopath, '', 1, 0, 0, '', 'pictoPriseo'); + + $out = ''; + $out .= ucfirst($this->module) . ' (' . dol_print_date($lastCompetitorPrice->date_creation, 'day') . ')' . $pictoPriseo . ' '; + $out .= $object->price < $minPrices->amount_ht ? price($object->price, 0, '', 1, -1, -1, 'auto') . ' HT': price($minPrices->amount_ht, 0, '', 1, -1, -1, 'auto') . ' HT'; + $out .= ' <= ' . price($object->price, 0, '', 1, -1, -1, 'auto') . ' HT <= '; + $out .= $maxPrices->amount_ht < $object->price ? price($object->price, 0, '', 1, -1, -1, 'auto') . ' HT': price($maxPrices->amount_ht, 0, '', 1, -1, -1, 'auto') . ' HT'; + $out .= ''; + ?> + + [], // Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context to 'all' 'hooks' => [ + 'productpricecard' // 'data' => array( // 'hookcontext1', // 'hookcontext2',