From a0426fad60d41f9e8f417084e6ccfd9e471c0a51 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Fri, 16 Jun 2023 05:14:29 +0700 Subject: [PATCH] fix for new sheet --- composer.lock | 96 ++++--------------- .../parser/system/public/works.php | 40 +++++--- 2 files changed, 46 insertions(+), 90 deletions(-) diff --git a/composer.lock b/composer.lock index 506fb74..018411f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "11076f3d90ec7beb78f179975cadfba0", + "content-hash": "a68510590091701e9c9d83f85929c2ca", "packages": [ { "name": "firebase/php-jwt", - "version": "v6.5.0", + "version": "v6.7.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2" + "reference": "71278f20b0a623389beefe87a641d03948a38870" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2", - "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/71278f20b0a623389beefe87a641d03948a38870", + "reference": "71278f20b0a623389beefe87a641d03948a38870", "shasum": "" }, "require": { @@ -65,9 +65,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.5.0" + "source": "https://github.com/firebase/php-jwt/tree/v6.7.0" }, - "time": "2023-05-12T15:47:07+00:00" + "time": "2023-06-14T15:29:26+00:00" }, { "name": "flow-php/array-dot", @@ -299,16 +299,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.303.0", + "version": "v0.304.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4" + "reference": "6731fd0d3e2f1ff2794f36108b55c0a3480edf3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/b9c143453a94d5e6ed7257d065dcc5662619eaf4", - "reference": "b9c143453a94d5e6ed7257d065dcc5662619eaf4", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/6731fd0d3e2f1ff2794f36108b55c0a3480edf3d", + "reference": "6731fd0d3e2f1ff2794f36108b55c0a3480edf3d", "shasum": "" }, "require": { @@ -337,9 +337,9 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.303.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.304.0" }, - "time": "2023-06-04T01:12:12+00:00" + "time": "2023-06-07T02:11:36+00:00" }, { "name": "google/auth", @@ -1199,16 +1199,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.19", + "version": "3.0.20", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "cc181005cf548bfd8a4896383bb825d859259f95" + "reference": "543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95", - "reference": "cc181005cf548bfd8a4896383bb825d859259f95", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67", + "reference": "543a1da81111a0bfd6ae7bbc2865c5e89ed3fc67", "shasum": "" }, "require": { @@ -1289,7 +1289,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.19" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.20" }, "funding": [ { @@ -1305,7 +1305,7 @@ "type": "tidelift" } ], - "time": "2023-03-05T17:13:09+00:00" + "time": "2023-06-13T06:30:34+00:00" }, { "name": "psr/cache", @@ -1788,64 +1788,6 @@ "source": "https://github.com/arangodb/arangodb-php/tree/v3.8.0" }, "time": "2021-06-18T12:06:02+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [], diff --git a/mirzaev/spetsresurs/google_sheets/parser/system/public/works.php b/mirzaev/spetsresurs/google_sheets/parser/system/public/works.php index a6064c5..7eca30f 100644 --- a/mirzaev/spetsresurs/google_sheets/parser/system/public/works.php +++ b/mirzaev/spetsresurs/google_sheets/parser/system/public/works.php @@ -32,16 +32,18 @@ $arangodb = new connection(require '../settings/arangodb.php'); function generateLabel(string $name): string { return match ($name) { - '_id', 'ID' => '_id', + 'created_in_sheets', 'Создано' => 'created_in_sheets', + 'date', 'Дата' => 'date', 'market', 'Магазин' => 'market', 'worker', 'Сотрудник' => 'worker', 'work', 'Работа' => 'work', - 'date', 'Дата' => 'date', 'start', 'Начало' => 'start', 'end', 'Конец' => 'end', + 'hours', 'Часы' => 'hours', 'confirmed', 'Подтверждено' => 'confirmed', 'commentary', 'Комментарий' => 'commentary', 'response', 'Ответ' => 'response', + '_id', 'ID' => '_id', default => throw new exception("Неизвестный столбец: $name") }; } @@ -49,16 +51,18 @@ function generateLabel(string $name): string function degenerateLabel(string $name): string { return match ($name) { - 'ID', '_id' => 'ID', + 'Создано', 'created_in_sheets' => 'Создано', + 'Дата', 'date' => 'Дата', 'Магазин', 'market' => 'Магазин', 'Сотрудник', 'worker' => 'Сотрудник', 'Работа', 'work' => 'Работа', - 'Дата', 'date' => 'Дата', 'Начало', 'start' => 'Начало', 'Конец', 'end' => 'Конец', + 'Часы', 'hours' => 'Часы', 'Подтверждено', 'confirmed' => 'Подтверждено', 'Комментарий', 'commentary' => 'Комментарий', 'Ответ', 'response' => 'Ответ', + 'ID', '_id' => 'ID', default => throw new exception("Неизвестный столбец: $name") }; } @@ -84,19 +88,23 @@ function sync(Row &$row): void // Найдена запись работы (строки) в базе данных // Очистка перед записью в таблицу - $new = array_diff_key($work->getAll(), ['_key' => true, 'created' => true]); + $new = array_diff_key($work->getAll(), ['_key' => true, 'created' => true]) + ['_id' => $work->getId()]; + + $buffer = $new; // Инициализация выбранного сотрудника if (collection::init($arangodb->session, 'readinesses', true) && collection::init($arangodb->session, 'workers')) - $new = ['worker' => collection::search( + $new = array_splice($new, 0, 2) + ['worker' => collection::search( $arangodb->session, sprintf( "FOR d IN workers LET e = (FOR e IN readinesses FILTER e._to == '%s' RETURN e._from)[0] FILTER d._id == e RETURN d", $_row['_id'] ) - )->id ?? ''] + $new; + )->id ?? ''] + array_slice($buffer, 2); else throw new exception('Не удалось инициализировать коллекции'); + $buffer = $new; + // Инициализация магазина if (collection::init($arangodb->session, 'requests', true) && collection::init($arangodb->session, 'markets')) if ($market = collection::search( @@ -105,12 +113,12 @@ function sync(Row &$row): void "FOR d IN markets LET e = (FOR e IN requests FILTER e._to == '%s' RETURN e._from)[0] FILTER d._id == e RETURN d", $_row['_id'] ) - )) $new = ['market' => $market->id] + $new; + )) $new = array_splice($new, 0, 2) + ['market' => $market->id] + array_splice($buffer, 2); else throw new exception('Не удалось найти магазин'); else throw new exception('Не удалось инициализировать коллекции'); - // Запись идентификатора только что созданной записи в базе данных для записи в таблицу - $new = ['_id' => $work->getId()] + $new; + // Замена NULL на пустую строку + foreach ($new as $key => &$value) if ($value === null) $value = ''; // Реинициализация строки с новыми данными по ссылке (приоритет из базы данных) if ($_row !== $new) $row = $row->set((new Flow())->read(From::array([init($new, true)]))->fetch(1)[0]->get('row')); @@ -154,8 +162,14 @@ function sync(Row &$row): void else throw new exception('Не удалось создать готовность сотрудника'); } + // Запись идентификатора только что созданной инстанции документа в базе данных + $_row['_id'] = $work->getId(); + + // Замена NULL на пустую строку + foreach ($_row as $key => &$value) if ($value === null) $value = ''; + // Реинициализация строки с новыми данными по ссылке (приоритет из базы данных) - $row = $row->set((new Flow())->read(From::array([init(['_id' => $work->getId()] + $_row, true)]))->fetch(1)[0]->get('row')); + $row = $row->set((new Flow())->read(From::array([init($_row, true)]))->fetch(1)[0]->get('row')); } else return; else throw new exception('Не удалось инициализировать коллекцию'); } @@ -171,7 +185,7 @@ $client->setAuthConfig($settings); foreach ($sheets as $sheet) { $sheets = new Sheets($client); - $rows = (new Flow())->read(new GoogleSheetExtractor($sheets, $document, new Columns($sheet, 'A', 'J'), true, 1000, 'row')); + $rows = (new Flow())->read(new GoogleSheetExtractor($sheets, $document, new Columns($sheet, 'A', 'L'), true, 1000, 'row')); $i = 1; @@ -182,7 +196,7 @@ foreach ($sheets as $sheet) { if ($buffer !== $row) $sheets->spreadsheets_values->update( $document, - "$sheet!A$i:J$i", + "$sheet!A$i:L$i", new ValueRange(['values' => [array_values($row->entries()->toArray()['row'])]]), ['valueInputOption' => 'USER_ENTERED'] );