From 9ca2f78103a7af5d16424f8a441870b7a0eca733 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Thu, 23 Jun 2022 10:37:18 +0200 Subject: [PATCH 1/7] #4212 New EKT barcode --- debian/changelog | 2 +- package.json | 2 +- rest/edi/sql/exchange-new.sql | 36 ++++++++++++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7f5ab720..f0fdcc5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.407.69) stable; urgency=low +hedera-web (1.408.1) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index 38810fff..e7f1945e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.407.69", + "version": "1.408.1", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/sql/exchange-new.sql b/rest/edi/sql/exchange-new.sql index e76a178f..4e69f281 100644 --- a/rest/edi/sql/exchange-new.sql +++ b/rest/edi/sql/exchange-new.sql @@ -1,5 +1,35 @@ CALL exchange_new ( - #mailId, #art, #bgm, #aaj, #fec, #hor, #ref, #agj, #cat, #pac, - #sub, #kop, #ptd, #pro, #ori, #ptj, #qty, #pri, #klo, #s1, #s2, #s3, - #s4, #s5, #s6, #k1, #k2, #p1, #p2, #auction, #package, #putOrderFk + #mailId, + #art, + #bgm, + #batchNumber, + #aaj, + #fec, + #hor, + #ref, + #agj, + #cat, + #pac, + #sub, + #kop, + #ptd, + #pro, + #ori, + #ptj, + #qty, + #pri, + #klo, + #s1, + #s2, + #s3, + #s4, + #s5, + #s6, + #k1, + #k2, + #p1, + #p2, + #auction, + #package, + #putOrderFk ) From 00c7f9da0d5a0a172a018fe910612b4a6802e73d Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 27 Jun 2022 16:41:58 +0200 Subject: [PATCH 2/7] EDI: Added field RFF+VN(vendorOrderNumber) --- debian/changelog | 2 +- package.json | 2 +- rest/edi/load.php | 28 ++++++++++++++++++---------- rest/edi/sql/exchange-new.sql | 1 + 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/debian/changelog b/debian/changelog index f0fdcc5f..96ea1c39 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.1) stable; urgency=low +hedera-web (1.408.2) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index e7f1945e..193dc72c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.1", + "version": "1.408.2", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/load.php b/rest/edi/load.php index 31e6e8e6..9a290895 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -54,15 +54,6 @@ class Load extends Edi\Method { else $sender = NULL; - $db->query('CALL mail_new(#messageId, #sender, @mailFk)', [ - 'messageId' => $messageId, - 'sender' => $sender - ]); - $mailId = $db->getValue("SELECT @mailFk"); - - echo "Message from: $sender\n"; - echo " -> Message id: $messageId\n"; - if ($this->restrictToSenders) { $isAllowed = $db->getValue( "SELECT COUNT(*) > 0 FROM mailSender WHERE mail = #", @@ -72,7 +63,16 @@ class Load extends Edi\Method { if (!$isAllowed) throw new Exception('Mail processing from unknown senders is disabled'); } - + + $db->query('CALL mail_new(#messageId, #sender, @mailFk)', [ + 'messageId' => $messageId, + 'sender' => $sender + ]); + $mailId = $db->getValue("SELECT @mailFk"); + + echo "Message from: $sender\n"; + echo " -> Message id: $messageId\n"; + // Searches the EDI message on mail parts $matchTypes = [TYPEAPPLICATION, TYPETEXT]; @@ -97,6 +97,14 @@ class Load extends Edi\Method { if (!Edi\Message::isEdiString($ediString)) continue; + + $db->query( + 'UPDATE ekt + SET source = #source + WHERE id = #mailId', [ + 'source' => $ediString, + 'mailId' => $mailId + ]); // Creates the EDI object and loads its exchanges diff --git a/rest/edi/sql/exchange-new.sql b/rest/edi/sql/exchange-new.sql index 4e69f281..245cdc01 100644 --- a/rest/edi/sql/exchange-new.sql +++ b/rest/edi/sql/exchange-new.sql @@ -3,6 +3,7 @@ CALL exchange_new ( #art, #bgm, #batchNumber, + #vendorOrderNumber, #aaj, #fec, #hor, From be23ceed4b5fceeccd53a0c9c218038b7d21a81a Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 27 Jun 2022 18:16:24 +0200 Subject: [PATCH 3/7] Hotfix --- debian/changelog | 2 +- package.json | 2 +- rest/edi/load.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 96ea1c39..cbf6adfa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.2) stable; urgency=low +hedera-web (1.408.3) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index 193dc72c..47826c4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.2", + "version": "1.408.3", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/load.php b/rest/edi/load.php index 9a290895..b805fdb9 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -99,7 +99,7 @@ class Load extends Edi\Method { continue; $db->query( - 'UPDATE ekt + 'UPDATE mail SET source = #source WHERE id = #mailId', [ 'source' => $ediString, From 574c63ea4eac379271b9dbccaa47e58af7003b39 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Thu, 7 Jul 2022 14:55:34 +0200 Subject: [PATCH 4/7] EDI: environments, new params, refactor --- debian/changelog | 2 +- package.json | 2 +- rest/edi/clean.php | 5 +- rest/edi/lib/message.php | 4 +- rest/edi/lib/method.php | 6 +- rest/edi/load.php | 136 +++++++++++++++++++++++----------- rest/edi/sql/exchange-new.sql | 36 --------- 7 files changed, 106 insertions(+), 85 deletions(-) delete mode 100644 rest/edi/sql/exchange-new.sql diff --git a/debian/changelog b/debian/changelog index cbf6adfa..e47281ab 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.3) stable; urgency=low +hedera-web (1.408.4) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index 47826c4c..e846fdee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.3", + "version": "1.408.4", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/clean.php b/rest/edi/clean.php index 7fc35bba..f19fca5d 100644 --- a/rest/edi/clean.php +++ b/rest/edi/clean.php @@ -6,7 +6,10 @@ class Clean extends Edi\Method { function ediRun($db) { $imap = $this->imap; - $cleanPeriod = $db->getValue('SELECT cleanPeriod FROM imapConfig'); + $cleanPeriod = $db->getValue( + "SELECT ic.cleanPeriod + FROM imapConfig ic + JOIN util.config c ON c.environment = ic.environment"); $deleted = 0; $date = new DateTime(NULL); diff --git a/rest/edi/lib/message.php b/rest/edi/lib/message.php index c58700ba..86eb314c 100644 --- a/rest/edi/lib/message.php +++ b/rest/edi/lib/message.php @@ -113,7 +113,7 @@ class Message { if (!isset($string{$pos})) return NULL; - if (in_array($string{$pos}, ['+', ':', '\''])) { + if (in_array($string[$pos], ['+', ':', '\''])) { if (!$empty) { $values[] = trim(substr($string, $start, $pos - $start)); @@ -125,7 +125,7 @@ class Message { $empty = FALSE; } - if ($string{$pos} === '\'') + if ($string[$pos] === '\'') break; $pos++; diff --git a/rest/edi/lib/method.php b/rest/edi/lib/method.php index d32e595b..0f7294d2 100644 --- a/rest/edi/lib/method.php +++ b/rest/edi/lib/method.php @@ -13,8 +13,10 @@ abstract class Method extends \Vn\Lib\Method { $db->selectDb('edi'); $imapConf = $db->getRow( - 'SELECT host, user, pass, successFolder, errorFolder FROM imapConfig'); - + "SELECT ic.host, ic.user, ic.pass, ic.successFolder, ic.errorFolder + FROM imapConfig ic + JOIN util.config c ON c.environment = ic.environment"); + $this->mailbox = sprintf('{%s/imap/ssl/novalidate-cert}', $imapConf['host']); diff --git a/rest/edi/load.php b/rest/edi/load.php index b805fdb9..71694407 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -14,8 +14,20 @@ class Load extends Edi\Method { $this->restrictToSenders = $db->getValue( "SELECT restrictToSenders FROM exchangeConfig LIMIT 1"); - $this->params = $db->query( - "SELECT code, name, subname, position, type, required FROM param"); + $this->paramsRes = $db->query( + "SELECT `code`, `name`, `subname`, `position`, `type`, `required` + FROM `param`" + ); + + $res = $db->query( + "SELECT COLUMN_NAME columnName + FROM information_schema.`COLUMNS` + WHERE TABLE_NAME = 'ekt' AND TABLE_SCHEMA = SCHEMA()" + ); + + $this->columns = []; + while ($row = $res->fetch_object()) + $this->columns[$row->columnName] = true; $inbox = imap_search($this->imap, 'ALL'); @@ -64,10 +76,7 @@ class Load extends Edi\Method { throw new Exception('Mail processing from unknown senders is disabled'); } - $db->query('CALL mail_new(#messageId, #sender, @mailFk)', [ - 'messageId' => $messageId, - 'sender' => $sender - ]); + $db->query('CALL mail_new(#, #, @mailFk)', [$messageId, $sender]); $mailId = $db->getValue("SELECT @mailFk"); echo "Message from: $sender\n"; @@ -98,34 +107,31 @@ class Load extends Edi\Method { if (!Edi\Message::isEdiString($ediString)) continue; - $db->query( - 'UPDATE mail - SET source = #source - WHERE id = #mailId', [ - 'source' => $ediString, - 'mailId' => $mailId - ]); + $db->update('mail', + ['source' => $ediString], + ['id' => $mailId] + ); // Creates the EDI object and loads its exchanges $ediMessage = new Edi\Message(); $ediMessage->parse($ediString, $this->ediSchema); - $db->query('START TRANSACTION'); + $db->startTransaction(); $unb = $ediMessage->section; $unhs = $unb->childs['UNH']; - + foreach ($unhs as $unh) foreach ($lins = $unh->childs['LIN'] as $lin) { $ediValues = ['mailId' => $mailId]; // Gets the exchange params - $this->params->data_seek(0); + $this->paramsRes->data_seek(0); - while ($row = $this->params->fetch_assoc()) { - switch ($row['type']) { + while ($row = $this->paramsRes->fetch_object()) { + switch ($row->type) { case 'INTEGER': $type = Type::INTEGER; break; @@ -143,12 +149,12 @@ class Load extends Edi\Method { } $value = $lin->getValue( - $row['name'], $row['position'], $type, $row['subname']); + $row->name, $row->position, $type, $row->subname); - if (!isset($value) && $row['required']) - throw new Exception('Missing required parameter: '. $row['code']); + if (!isset($value) && $row->required) + throw new Exception('Missing required parameter: '. $row->code); - $ediValues[$row['code']] = $value; + $ediValues[$row->code] = $value; } // Gets the exchange features @@ -164,9 +170,9 @@ class Load extends Edi\Method { ); if ($res) - while ($row = $res->fetch_assoc()) { - $value = $lin->getValue('IMD', 2, Type::INTEGER, $row['feature']); - $ediValues['s'.$row['presentation_order']] = $value; + while ($row = $res->fetch_object()) { + $value = $lin->getValue('IMD', 2, Type::INTEGER, $row->feature); + $ediValues['s'.$row->presentation_order] = $value; } else throw new Exception('Can\'t get the item features.'); @@ -177,7 +183,60 @@ class Load extends Edi\Method { // Adds the exchange to the Database - $res = $db->queryFromFile(__DIR__.'/sql/exchange-new', $ediValues); + $insertValues = []; + foreach ($ediValues as $code => $value) + if (isset($this->columns[$code]) && !empty($value)) + $insertValues[$code] = $value; + + $isNew = false; + $update = false; + + try { + $db->insert('ekt', $insertValues); + $ektFk = $db->lastInsertId(); + $isNew = true; + } catch (Exception $e) { + if ($e->getCode() == 1062) + $update = true; + else + throw $e; + } + + if ($update) { + $updateExistent = $db->getValue( + "SELECT COUNT(*) = 0 + FROM ekt t + JOIN `exchange` b ON b.ektFk = t.id + JOIN exchangeConfig c + WHERE t.deliveryNumber = #deliveryNumber + AND t.entryYear = YEAR(#fec) + AND b.typeFk != c.presaleFk", + $ediValues + ); + + if ($updateExistent) { + $ektFk = $db->getValue( + "SELECT id + FROM ekt + WHERE deliveryNumber = #deliveryNumber + AND entryYear = YEAR(#fec)", + $ediValues + ); + $db->update('ekt', + $insertValues, + ['id' => $ektFk] + ); + } + } + + $db->insert('exchange', [ + 'mailFk' => $mailId, + 'typeFk' => $ediValues['bgm'], + 'ektFk' => $ektFk + ]); + + $res = $db->call('ekt_refresh', [$ektFk]); + if ($isNew) $res = $db->call('ekt_load', [$ektFk]); if (!$res) throw new Exception('Failed to insert the line.'); @@ -185,9 +244,9 @@ class Load extends Edi\Method { $count++; } - $db->query('COMMIT'); + $db->commit(); } catch (Exception $e) { - $db->query('ROLLBACK'); + $db->rollback(); throw $e; } @@ -198,24 +257,18 @@ class Load extends Edi\Method { echo " -> Loaded exchanges: $count\n"; $folder = $this->imapConf['successFolder']; - $db->query( - "UPDATE mail - SET nExchanges = #, - error = NULL - WHERE id = #", - [$count, $mailId] + $db->update('mail', + ['nExchanges' => $count], + ['id' => $mailId] ); - } catch (Exception $e) { $error = $e->getMessage(); error_log($error); $folder = $this->imapConf['errorFolder']; - $db->query( - "UPDATE mail - SET error = # - WHERE id = #", - [$error, $mailId] + $db->update('mail', + ['error' => $error], + ['id' => $mailId] ); } @@ -229,7 +282,7 @@ class Load extends Edi\Method { ,imap_last_error() ); } - + function imapFindParts(&$part, &$matchTypes, $section, &$result) { if (in_array($part->type, $matchTypes)) { if (count($section) > 0) @@ -244,4 +297,3 @@ class Load extends Edi\Method { } } } - diff --git a/rest/edi/sql/exchange-new.sql b/rest/edi/sql/exchange-new.sql deleted file mode 100644 index 245cdc01..00000000 --- a/rest/edi/sql/exchange-new.sql +++ /dev/null @@ -1,36 +0,0 @@ -CALL exchange_new ( - #mailId, - #art, - #bgm, - #batchNumber, - #vendorOrderNumber, - #aaj, - #fec, - #hor, - #ref, - #agj, - #cat, - #pac, - #sub, - #kop, - #ptd, - #pro, - #ori, - #ptj, - #qty, - #pri, - #klo, - #s1, - #s2, - #s3, - #s4, - #s5, - #s6, - #k1, - #k2, - #p1, - #p2, - #auction, - #package, - #putOrderFk -) From 13e61acb2ab36ccf3343a9c2eeb20ec5aaebe03a Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Thu, 7 Jul 2022 23:17:48 +0200 Subject: [PATCH 5/7] edi/load: entryYear field fixes --- debian/changelog | 2 +- package.json | 2 +- rest/edi/load.php | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/debian/changelog b/debian/changelog index e47281ab..398de8b7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.4) stable; urgency=low +hedera-web (1.408.5) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index e846fdee..aa6e35e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.4", + "version": "1.408.5", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/load.php b/rest/edi/load.php index 71694407..581a222b 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -188,6 +188,9 @@ class Load extends Edi\Method { if (isset($this->columns[$code]) && !empty($value)) $insertValues[$code] = $value; + $year = $ediValues['fec']->format('Y'); + $insertValues['entryYear'] = $year; + $isNew = false; $update = false; @@ -229,18 +232,15 @@ class Load extends Edi\Method { } } + $db->call('ekt_refresh', [$ektFk, $mailId]); + if ($isNew) $db->call('ekt_load', [$ektFk]); + $db->insert('exchange', [ 'mailFk' => $mailId, 'typeFk' => $ediValues['bgm'], 'ektFk' => $ektFk ]); - $res = $db->call('ekt_refresh', [$ektFk]); - if ($isNew) $res = $db->call('ekt_load', [$ektFk]); - - if (!$res) - throw new Exception('Failed to insert the line.'); - $count++; } From 288749773027f31c292909afe47527f8e06b74d1 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Thu, 7 Jul 2022 23:46:18 +0200 Subject: [PATCH 6/7] edi/load: fixes --- debian/changelog | 2 +- package.json | 2 +- rest/edi/load.php | 24 ++++++++++++------------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/debian/changelog b/debian/changelog index 398de8b7..bb92f91d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.5) stable; urgency=low +hedera-web (1.408.6) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index aa6e35e4..767a0a84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.5", + "version": "1.408.6", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/load.php b/rest/edi/load.php index 581a222b..4bf49597 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -206,25 +206,25 @@ class Load extends Edi\Method { } if ($update) { - $updateExistent = $db->getValue( + $ektFk = $db->getValue( + "SELECT id + FROM ekt + WHERE deliveryNumber = #deliveryNumber + AND entryYear = YEAR(#fec)", + $ediValues + ); + + $canUpdate = $ektFk && $db->getValue( "SELECT COUNT(*) = 0 FROM ekt t JOIN `exchange` b ON b.ektFk = t.id JOIN exchangeConfig c - WHERE t.deliveryNumber = #deliveryNumber - AND t.entryYear = YEAR(#fec) + WHERE t.id = # AND b.typeFk != c.presaleFk", - $ediValues + $ektFk ); - if ($updateExistent) { - $ektFk = $db->getValue( - "SELECT id - FROM ekt - WHERE deliveryNumber = #deliveryNumber - AND entryYear = YEAR(#fec)", - $ediValues - ); + if ($canUpdate) { $db->update('ekt', $insertValues, ['id' => $ektFk] From a13016361767fb0695ace26b03cf8eed2eeb2637 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Fri, 8 Jul 2022 07:47:37 +0200 Subject: [PATCH 7/7] #4212 edi/load fixes --- debian/changelog | 2 +- package.json | 2 +- rest/edi/load.php | 16 +++++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index bb92f91d..92d47cbe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -hedera-web (1.408.6) stable; urgency=low +hedera-web (1.408.7) stable; urgency=low * Initial Release. diff --git a/package.json b/package.json index 767a0a84..ce9fbc01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hedera-web", - "version": "1.408.6", + "version": "1.408.7", "description": "Verdnatura web page", "license": "GPL-3.0", "repository": { diff --git a/rest/edi/load.php b/rest/edi/load.php index 4bf49597..a2afe8d3 100644 --- a/rest/edi/load.php +++ b/rest/edi/load.php @@ -188,7 +188,10 @@ class Load extends Edi\Method { if (isset($this->columns[$code]) && !empty($value)) $insertValues[$code] = $value; - $year = $ediValues['fec']->format('Y'); + $deliveryNumber = nullIf($ediValues, 'deliveryNumber'); + $fec = nullIf($ediValues, 'fec'); + $year = isset($fec) ? $fec->format('Y') : null; + $insertValues['entryYear'] = $year; $isNew = false; @@ -205,15 +208,14 @@ class Load extends Edi\Method { throw $e; } - if ($update) { + if ($update && isset($year) && isset($deliveryNumber)) { $ektFk = $db->getValue( "SELECT id FROM ekt - WHERE deliveryNumber = #deliveryNumber - AND entryYear = YEAR(#fec)", - $ediValues + WHERE deliveryNumber = # + AND entryYear = #", + [$deliveryNumber, $year] ); - $canUpdate = $ektFk && $db->getValue( "SELECT COUNT(*) = 0 FROM ekt t @@ -221,7 +223,7 @@ class Load extends Edi\Method { JOIN exchangeConfig c WHERE t.id = # AND b.typeFk != c.presaleFk", - $ektFk + [$ektFk] ); if ($canUpdate) {