Commit 25473a0db06ae4031db811073307897dc7982423

Authored by Mihail
1 parent 558a5e9e

add parser trait - refactor depends controllers

.idea/test-1.artwebua.in.ua.iml
... ... @@ -6,5 +6,15 @@
6 6 </content>
7 7 <orderEntry type="inheritedJdk" />
8 8 <orderEntry type="sourceFolder" forTests="false" />
  9 + <orderEntry type="module-library">
  10 + <library name="PHARS">
  11 + <CLASSES>
  12 + <root url="phar://$MODULE_DIR$/vendor/mihaildev/yii2-elfinder/volume/aws.phar" />
  13 + </CLASSES>
  14 + <SOURCES>
  15 + <root url="phar://$MODULE_DIR$/vendor/mihaildev/yii2-elfinder/volume/aws.phar" />
  16 + </SOURCES>
  17 + </library>
  18 + </orderEntry>
9 19 </component>
10 20 </module>
11 21 \ No newline at end of file
... ...
.idea/workspace.xml
... ... @@ -2,7 +2,6 @@
2 2 <project version="4">
3 3 <component name="ChangeListManager">
4 4 <list default="true" id="f6bb8ef4-b6f5-4c59-9053-25989736ae66" name="Default" comment="">
5   - <change type="DELETED" beforePath="C:\xampp\htdocs\ital\backend\models\Importer.php" afterPath="" />
6 5 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\auto\5648.csv" afterPath="" />
7 6 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\manual\Групы VW.xlsx" afterPath="" />
8 7 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\5648.csv" afterPath="" />
... ... @@ -21,22 +20,17 @@
21 20 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet1.xml" afterPath="" />
22 21 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet2.xml" afterPath="" />
23 22 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet3.xml" afterPath="" />
24   - <change type="MOVED" beforePath="C:\xampp\htdocs\ital\.gitignore" afterPath="$PROJECT_DIR$/storage/.gitignore" />
25   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tests/unit/BaseConverterTest.php" afterPath="$PROJECT_DIR$/tests/unit/BaseConverterTest.php" />
26   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tests/unit/CrossesParsingTest.php" afterPath="$PROJECT_DIR$/tests/unit/CrossesParsingTest.php" />
  23 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/components/base/BaseController.php" afterPath="$PROJECT_DIR$/backend/components/base/BaseController.php" />
27 24 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" afterPath="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" />
28   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/components/parsers/CustomConverter.php" afterPath="$PROJECT_DIR$/common/components/parsers/CustomConverter.php" />
29   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php" afterPath="$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php" />
30   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/models/Importers.php" afterPath="$PROJECT_DIR$/backend/models/Importers.php" />
  25 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/models/MarginsGroups.php" afterPath="$PROJECT_DIR$/common/models/MarginsGroups.php" />
31 26 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/ParserController.php" afterPath="$PROJECT_DIR$/backend/controllers/ParserController.php" />
32 27 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/RgGrupController.php" afterPath="$PROJECT_DIR$/backend/controllers/RgGrupController.php" />
33   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/composer.json" afterPath="$PROJECT_DIR$/composer.json" />
34   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/composer.lock" afterPath="$PROJECT_DIR$/composer.lock" />
35   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/components/parsers/config.php" afterPath="$PROJECT_DIR$/common/components/parsers/config.php" />
36   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/config/main.php" afterPath="$PROJECT_DIR$/common/config/main.php" />
37   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/crossing-upload/results.php" afterPath="$PROJECT_DIR$/backend/views/crossing-upload/results.php" />
38   - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/parser/results.php" afterPath="$PROJECT_DIR$/backend/views/parser/results.php" />
  28 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/parser/error.php" afterPath="$PROJECT_DIR$/backend/views/parser/error.php" />
  29 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/crossing-upload/index.php" afterPath="$PROJECT_DIR$/backend/views/crossing-upload/index.php" />
  30 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/rg-grup/index.php" afterPath="$PROJECT_DIR$/backend/views/rg-grup/index.php" />
39 31 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/rg-grup/results.php" afterPath="$PROJECT_DIR$/backend/views/rg-grup/results.php" />
  32 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/test-1.artwebua.in.ua.iml" afterPath="$PROJECT_DIR$/.idea/test-1.artwebua.in.ua.iml" />
  33 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
40 34 </list>
41 35 <ignored path="test-1.artwebua.in.ua.iws" />
42 36 <ignored path=".idea/workspace.xml" />
... ... @@ -177,24 +171,28 @@
177 171 </component>
178 172 <component name="FileEditorManager">
179 173 <leaf>
180   - <file leaf-file-name="CrossesParsingTest.php" pinned="false" current-in-tab="false">
181   - <entry file="file://$PROJECT_DIR$/tests/unit/CrossesParsingTest.php">
  174 + <file leaf-file-name="CrossingUploadController.php" pinned="false" current-in-tab="false">
  175 + <entry file="file://$PROJECT_DIR$/backend/controllers/CrossingUploadController.php">
182 176 <provider selected="true" editor-type-id="text-editor">
183   - <state vertical-scroll-proportion="-20.222221" vertical-offset="273" max-vertical-offset="1113">
184   - <caret line="39" column="0" selection-start-line="39" selection-start-column="0" selection-end-line="39" selection-end-column="0" />
  177 + <state vertical-scroll-proportion="-37.333332" vertical-offset="1134" max-vertical-offset="4746">
  178 + <caret line="102" column="0" selection-start-line="102" selection-start-column="0" selection-end-line="102" selection-end-column="0" />
185 179 <folding>
186   - <element signature="e#28#68#0#PHP" expanded="true" />
  180 + <element signature="e#6#91#0#PHP" expanded="true" />
  181 + <element signature="e#125#168#0#PHP" expanded="true" />
187 182 </folding>
188 183 </state>
189 184 </provider>
190 185 </entry>
191 186 </file>
192   - <file leaf-file-name=".gitignore" pinned="false" current-in-tab="true">
193   - <entry file="file://$PROJECT_DIR$/storage/.gitignore">
  187 + <file leaf-file-name="RgGrupController.php" pinned="false" current-in-tab="false">
  188 + <entry file="file://$PROJECT_DIR$/backend/controllers/RgGrupController.php">
194 189 <provider selected="true" editor-type-id="text-editor">
195   - <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="535">
196   - <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
197   - <folding />
  190 + <state vertical-scroll-proportion="-109.59259" vertical-offset="527" max-vertical-offset="4053">
  191 + <caret line="190" column="5" selection-start-line="190" selection-start-column="5" selection-end-line="190" selection-end-column="5" />
  192 + <folding>
  193 + <element signature="e#125#168#0#PHP" expanded="true" />
  194 + <element signature="e#787#1322#0#PHP" expanded="false" />
  195 + </folding>
198 196 </state>
199 197 </provider>
200 198 </entry>
... ... @@ -202,20 +200,84 @@
202 200 <file leaf-file-name="CustomArrayHelper.php" pinned="false" current-in-tab="false">
203 201 <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php">
204 202 <provider selected="true" editor-type-id="text-editor">
205   - <state vertical-scroll-proportion="-10.777778" vertical-offset="108" max-vertical-offset="1596">
206   - <caret line="24" column="48" selection-start-line="24" selection-start-column="48" selection-end-line="24" selection-end-column="48" />
  203 + <state vertical-scroll-proportion="-9.62963" vertical-offset="286" max-vertical-offset="1596">
  204 + <caret line="31" column="36" selection-start-line="31" selection-start-column="36" selection-end-line="31" selection-end-column="36" />
207 205 <folding />
208 206 </state>
209 207 </provider>
210 208 </entry>
211 209 </file>
212   - <file leaf-file-name="CrossingUploadController.php" pinned="false" current-in-tab="false">
213   - <entry file="file://$PROJECT_DIR$/backend/controllers/CrossingUploadController.php">
  210 + <file leaf-file-name="Margins.php" pinned="false" current-in-tab="false">
  211 + <entry file="file://$PROJECT_DIR$/common/models/Margins.php">
  212 + <provider selected="true" editor-type-id="text-editor">
  213 + <state vertical-scroll-proportion="-10.407408" vertical-offset="832" max-vertical-offset="1512">
  214 + <caret line="53" column="8" selection-start-line="53" selection-start-column="8" selection-end-line="53" selection-end-column="51" />
  215 + <folding />
  216 + </state>
  217 + </provider>
  218 + </entry>
  219 + </file>
  220 + <file leaf-file-name="ParserTrait.php" pinned="false" current-in-tab="false">
  221 + <entry file="file://$PROJECT_DIR$/backend/components/traits/ParserTrait.php">
214 222 <provider selected="true" editor-type-id="text-editor">
215   - <state vertical-scroll-proportion="-9.37037" vertical-offset="2519" max-vertical-offset="4935">
216   - <caret line="137" column="78" selection-start-line="137" selection-start-column="11" selection-end-line="137" selection-end-column="78" />
  223 + <state vertical-scroll-proportion="-42.77778" vertical-offset="126" max-vertical-offset="1848">
  224 + <caret line="66" column="46" selection-start-line="66" selection-start-column="31" selection-end-line="66" selection-end-column="46" />
217 225 <folding>
218   - <element signature="e#125#168#0#PHP" expanded="true" />
  226 + <element signature="e#129#177#0#PHP" expanded="true" />
  227 + </folding>
  228 + </state>
  229 + </provider>
  230 + </entry>
  231 + </file>
  232 + <file leaf-file-name="index.php" pinned="false" current-in-tab="false">
  233 + <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/index.php">
  234 + <provider selected="true" editor-type-id="text-editor">
  235 + <state vertical-scroll-proportion="-18.666666" vertical-offset="0" max-vertical-offset="756">
  236 + <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
  237 + <folding />
  238 + </state>
  239 + </provider>
  240 + </entry>
  241 + </file>
  242 + <file leaf-file-name="results.php" pinned="false" current-in-tab="false">
  243 + <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/results.php">
  244 + <provider selected="true" editor-type-id="text-editor">
  245 + <state vertical-scroll-proportion="-22.555555" vertical-offset="0" max-vertical-offset="777">
  246 + <caret line="29" column="23" selection-start-line="29" selection-start-column="23" selection-end-line="29" selection-end-column="23" />
  247 + <folding>
  248 + <element signature="e#7#28#0#PHP" expanded="true" />
  249 + </folding>
  250 + </state>
  251 + </provider>
  252 + </entry>
  253 + </file>
  254 + <file leaf-file-name="server-files.php" pinned="false" current-in-tab="false">
  255 + <entry file="file://$PROJECT_DIR$/backend/views/parser/server-files.php">
  256 + <provider selected="true" editor-type-id="text-editor">
  257 + <state vertical-scroll-proportion="-22.777779" vertical-offset="288" max-vertical-offset="1155">
  258 + <caret line="49" column="108" selection-start-line="49" selection-start-column="8" selection-end-line="49" selection-end-column="108" />
  259 + <folding />
  260 + </state>
  261 + </provider>
  262 + </entry>
  263 + </file>
  264 + <file leaf-file-name="MarginsGroups.php" pinned="false" current-in-tab="false">
  265 + <entry file="file://$PROJECT_DIR$/common/models/MarginsGroups.php">
  266 + <provider selected="true" editor-type-id="text-editor">
  267 + <state vertical-scroll-proportion="15.62963" vertical-offset="758" max-vertical-offset="2520">
  268 + <caret line="17" column="19" selection-start-line="17" selection-start-column="6" selection-end-line="17" selection-end-column="19" />
  269 + <folding />
  270 + </state>
  271 + </provider>
  272 + </entry>
  273 + </file>
  274 + <file leaf-file-name="ParserController.php" pinned="false" current-in-tab="true">
  275 + <entry file="file://$PROJECT_DIR$/backend/controllers/ParserController.php">
  276 + <provider selected="true" editor-type-id="text-editor">
  277 + <state vertical-scroll-proportion="0.021428572" vertical-offset="1494" max-vertical-offset="6468">
  278 + <caret line="72" column="54" selection-start-line="72" selection-start-column="54" selection-end-line="72" selection-end-column="54" />
  279 + <folding>
  280 + <element signature="e#38#65#0#PHP" expanded="true" />
219 281 </folding>
220 282 </state>
221 283 </provider>
... ... @@ -230,16 +292,6 @@
230 292 <component name="IdeDocumentHistory">
231 293 <option name="CHANGED_PATHS">
232 294 <list>
233   - <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/CsvParser.php" />
234   - <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/ParserHandler.php" />
235   - <option value="db-console:/b6fc378e/7bd5422a-47c2-471e-873f-532e6b000acc/" />
236   - <option value="$PROJECT_DIR$/backend/assets/CartAsset.php" />
237   - <option value="$PROJECT_DIR$/backend/views/check-price/index.php" />
238   - <option value="$PROJECT_DIR$/backend/views/cart/index.php" />
239   - <option value="$PROJECT_DIR$/common/models/CartBillsSearch.php" />
240   - <option value="$PROJECT_DIR$/backend/web/css/AdminLTE.css" />
241   - <option value="$PROJECT_DIR$/common/models/Cart.php" />
242   - <option value="$PROJECT_DIR$/backend/views/cart/view.php" />
243 295 <option value="$PROJECT_DIR$/backend/controllers/CartController.php" />
244 296 <option value="$PROJECT_DIR$/backend/web/js/cart.js" />
245 297 <option value="$PROJECT_DIR$/backend/controllers/CurrencyController.php" />
... ... @@ -253,9 +305,7 @@
253 305 <option value="$PROJECT_DIR$/common/models/Currency.php" />
254 306 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/ParserValidator.php" />
255 307 <option value="$PROJECT_DIR$/backend/views/currency/index.php" />
256   - <option value="$PROJECT_DIR$/backend/components/base/BaseController.php" />
257 308 <option value="$PROJECT_DIR$/backend/views/templates/parser_massage.php" />
258   - <option value="$PROJECT_DIR$/backend/views/crossing-upload/index.php" />
259 309 <option value="$PROJECT_DIR$/common/components/ModelArrayValidator.php" />
260 310 <option value="$PROJECT_DIR$/backend/models/Details.php" />
261 311 <option value="$PROJECT_DIR$/backend/models/DetailsCrosses.php" />
... ... @@ -263,24 +313,36 @@
263 313 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/TableParser.php" />
264 314 <option value="$PROJECT_DIR$/console/controllers/ParserController.php" />
265 315 <option value="$PROJECT_DIR$/console/runtime/logs/parser.log" />
266   - <option value="$PROJECT_DIR$/backend/views/rg-grup/index.php" />
267 316 <option value="$PROJECT_DIR$/common/components/PriceWriter.php" />
268   - <option value="$PROJECT_DIR$/common/models/MarginsGroups.php" />
269 317 <option value="$PROJECT_DIR$/backend/views/parser/index.php" />
270 318 <option value="$PROJECT_DIR$/backend/models/Importers.php" />
271 319 <option value="$PROJECT_DIR$/common/components/parsers/Converter.php" />
272 320 <option value="$PROJECT_DIR$/common/components/parsers/config.php" />
273   - <option value="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" />
274   - <option value="$PROJECT_DIR$/backend/controllers/ParserController.php" />
275   - <option value="$PROJECT_DIR$/backend/controllers/RgGrupController.php" />
276   - <option value="$PROJECT_DIR$/backend/views/crossing-upload/results.php" />
277 321 <option value="$PROJECT_DIR$/backend/views/parser/results.php" />
278   - <option value="$PROJECT_DIR$/backend/views/rg-grup/results.php" />
279 322 <option value="$PROJECT_DIR$/common/components/parsers/CustomConverter.php" />
280 323 <option value="$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php" />
281 324 <option value="$PROJECT_DIR$/common/config/main.php" />
282 325 <option value="$PROJECT_DIR$/tests/unit/BaseConverterTest.php" />
283 326 <option value="$PROJECT_DIR$/tests/unit/CrossesParsingTest.php" />
  327 + <option value="$PROJECT_DIR$/backend/web/index.php" />
  328 + <option value="$PROJECT_DIR$/backend/views/crossing-upload/index.php" />
  329 + <option value="$PROJECT_DIR$/backend/views/crossing-upload/results.php" />
  330 + <option value="$PROJECT_DIR$/backend/config/main.php" />
  331 + <option value="$PROJECT_DIR$/backend/views/crossing-upload/error.php" />
  332 + <option value="$PROJECT_DIR$/common/components/exceptions/CrossParsingException.php" />
  333 + <option value="$PROJECT_DIR$/common/components/exceptions/RgParsingException.php" />
  334 + <option value="$PROJECT_DIR$/common/components/exceptions/PriceParsingException.php" />
  335 + <option value="$PROJECT_DIR$/backend/components/traits_/ParserTrait.php" />
  336 + <option value="$PROJECT_DIR$/backend/components/base/BaseController.php" />
  337 + <option value="$PROJECT_DIR$/backend/views/parser/error.php" />
  338 + <option value="$PROJECT_DIR$/backend/views/rg-grup/index.php" />
  339 + <option value="$PROJECT_DIR$/backend/views/rg-grup/results.php" />
  340 + <option value="$PROJECT_DIR$/common/models/MarginsGroups.php" />
  341 + <option value="$PROJECT_DIR$/backend/components/traits/ParserTrait.php" />
  342 + <option value="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" />
  343 + <option value="$PROJECT_DIR$/common/models/Margins.php" />
  344 + <option value="$PROJECT_DIR$/backend/controllers/RgGrupController.php" />
  345 + <option value="$PROJECT_DIR$/backend/controllers/ParserController.php" />
284 346 </list>
285 347 </option>
286 348 </component>
... ... @@ -333,6 +395,80 @@
333 395 <sortByType />
334 396 </navigator>
335 397 <panes>
  398 + <pane id="ProjectPane">
  399 + <subPane>
  400 + <PATH>
  401 + <PATH_ELEMENT>
  402 + <option name="myItemId" value="test-1.artwebua.in.ua" />
  403 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  404 + </PATH_ELEMENT>
  405 + </PATH>
  406 + <PATH>
  407 + <PATH_ELEMENT>
  408 + <option name="myItemId" value="test-1.artwebua.in.ua" />
  409 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  410 + </PATH_ELEMENT>
  411 + <PATH_ELEMENT>
  412 + <option name="myItemId" value="ital" />
  413 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  414 + </PATH_ELEMENT>
  415 + </PATH>
  416 + <PATH>
  417 + <PATH_ELEMENT>
  418 + <option name="myItemId" value="test-1.artwebua.in.ua" />
  419 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  420 + </PATH_ELEMENT>
  421 + <PATH_ELEMENT>
  422 + <option name="myItemId" value="ital" />
  423 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  424 + </PATH_ELEMENT>
  425 + <PATH_ELEMENT>
  426 + <option name="myItemId" value="backend" />
  427 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  428 + </PATH_ELEMENT>
  429 + </PATH>
  430 + <PATH>
  431 + <PATH_ELEMENT>
  432 + <option name="myItemId" value="test-1.artwebua.in.ua" />
  433 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  434 + </PATH_ELEMENT>
  435 + <PATH_ELEMENT>
  436 + <option name="myItemId" value="ital" />
  437 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  438 + </PATH_ELEMENT>
  439 + <PATH_ELEMENT>
  440 + <option name="myItemId" value="backend" />
  441 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  442 + </PATH_ELEMENT>
  443 + <PATH_ELEMENT>
  444 + <option name="myItemId" value="views" />
  445 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  446 + </PATH_ELEMENT>
  447 + </PATH>
  448 + <PATH>
  449 + <PATH_ELEMENT>
  450 + <option name="myItemId" value="test-1.artwebua.in.ua" />
  451 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  452 + </PATH_ELEMENT>
  453 + <PATH_ELEMENT>
  454 + <option name="myItemId" value="ital" />
  455 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  456 + </PATH_ELEMENT>
  457 + <PATH_ELEMENT>
  458 + <option name="myItemId" value="backend" />
  459 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  460 + </PATH_ELEMENT>
  461 + <PATH_ELEMENT>
  462 + <option name="myItemId" value="views" />
  463 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  464 + </PATH_ELEMENT>
  465 + <PATH_ELEMENT>
  466 + <option name="myItemId" value="crossing-upload" />
  467 + <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  468 + </PATH_ELEMENT>
  469 + </PATH>
  470 + </subPane>
  471 + </pane>
336 472 <pane id="Scope">
337 473 <subPane subId="Default">
338 474 <PATH>
... ... @@ -464,126 +600,6 @@
464 600 </PATH>
465 601 </subPane>
466 602 </pane>
467   - <pane id="ProjectPane">
468   - <subPane>
469   - <PATH>
470   - <PATH_ELEMENT>
471   - <option name="myItemId" value="test-1.artwebua.in.ua" />
472   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
473   - </PATH_ELEMENT>
474   - </PATH>
475   - <PATH>
476   - <PATH_ELEMENT>
477   - <option name="myItemId" value="test-1.artwebua.in.ua" />
478   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
479   - </PATH_ELEMENT>
480   - <PATH_ELEMENT>
481   - <option name="myItemId" value="ital" />
482   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
483   - </PATH_ELEMENT>
484   - </PATH>
485   - <PATH>
486   - <PATH_ELEMENT>
487   - <option name="myItemId" value="test-1.artwebua.in.ua" />
488   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
489   - </PATH_ELEMENT>
490   - <PATH_ELEMENT>
491   - <option name="myItemId" value="ital" />
492   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
493   - </PATH_ELEMENT>
494   - <PATH_ELEMENT>
495   - <option name="myItemId" value="storage" />
496   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
497   - </PATH_ELEMENT>
498   - </PATH>
499   - <PATH>
500   - <PATH_ELEMENT>
501   - <option name="myItemId" value="test-1.artwebua.in.ua" />
502   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
503   - </PATH_ELEMENT>
504   - <PATH_ELEMENT>
505   - <option name="myItemId" value="ital" />
506   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
507   - </PATH_ELEMENT>
508   - <PATH_ELEMENT>
509   - <option name="myItemId" value="console" />
510   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
511   - </PATH_ELEMENT>
512   - </PATH>
513   - <PATH>
514   - <PATH_ELEMENT>
515   - <option name="myItemId" value="test-1.artwebua.in.ua" />
516   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
517   - </PATH_ELEMENT>
518   - <PATH_ELEMENT>
519   - <option name="myItemId" value="ital" />
520   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
521   - </PATH_ELEMENT>
522   - <PATH_ELEMENT>
523   - <option name="myItemId" value="console" />
524   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
525   - </PATH_ELEMENT>
526   - <PATH_ELEMENT>
527   - <option name="myItemId" value="runtime" />
528   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
529   - </PATH_ELEMENT>
530   - </PATH>
531   - <PATH>
532   - <PATH_ELEMENT>
533   - <option name="myItemId" value="test-1.artwebua.in.ua" />
534   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
535   - </PATH_ELEMENT>
536   - <PATH_ELEMENT>
537   - <option name="myItemId" value="ital" />
538   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
539   - </PATH_ELEMENT>
540   - <PATH_ELEMENT>
541   - <option name="myItemId" value="console" />
542   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
543   - </PATH_ELEMENT>
544   - <PATH_ELEMENT>
545   - <option name="myItemId" value="runtime" />
546   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
547   - </PATH_ELEMENT>
548   - <PATH_ELEMENT>
549   - <option name="myItemId" value="logs" />
550   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
551   - </PATH_ELEMENT>
552   - </PATH>
553   - <PATH>
554   - <PATH_ELEMENT>
555   - <option name="myItemId" value="test-1.artwebua.in.ua" />
556   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
557   - </PATH_ELEMENT>
558   - <PATH_ELEMENT>
559   - <option name="myItemId" value="ital" />
560   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
561   - </PATH_ELEMENT>
562   - <PATH_ELEMENT>
563   - <option name="myItemId" value="console" />
564   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
565   - </PATH_ELEMENT>
566   - <PATH_ELEMENT>
567   - <option name="myItemId" value="controllers" />
568   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
569   - </PATH_ELEMENT>
570   - </PATH>
571   - <PATH>
572   - <PATH_ELEMENT>
573   - <option name="myItemId" value="test-1.artwebua.in.ua" />
574   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
575   - </PATH_ELEMENT>
576   - <PATH_ELEMENT>
577   - <option name="myItemId" value="ital" />
578   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
579   - </PATH_ELEMENT>
580   - <PATH_ELEMENT>
581   - <option name="myItemId" value="backend" />
582   - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
583   - </PATH_ELEMENT>
584   - </PATH>
585   - </subPane>
586   - </pane>
587 603 </panes>
588 604 </component>
589 605 <component name="PropertiesComponent">
... ... @@ -621,11 +637,11 @@
621 637 </component>
622 638 <component name="RecentsManager">
623 639 <key name="CopyFile.RECENT_KEYS">
  640 + <recent name="C:\xampp\htdocs\ital\common\components\exceptions" />
  641 + <recent name="C:\xampp\htdocs\ital\backend\views\crossing-upload" />
624 642 <recent name="C:\xampp\htdocs\ital" />
625 643 <recent name="C:\xampp\htdocs\ital\backend\web\js" />
626 644 <recent name="C:\xampp\htdocs\ital\backend\assets" />
627   - <recent name="C:\xampp\htdocs\ital\backend\views\crossing-upload" />
628   - <recent name="C:\xampp\htdocs\ital\backend\views\rg-grup" />
629 645 </key>
630 646 <key name="MoveFile.RECENT_KEYS">
631 647 <recent name="C:\xampp\htdocs\ital\storage" />
... ... @@ -646,22 +662,19 @@
646 662 <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
647 663 <method />
648 664 </configuration>
  665 + <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
  666 + <method />
  667 + </configuration>
649 668 <configuration default="true" type="com.intellij.database.run.ConsoleRunConfigurationType" factoryName="Query Language Console">
650 669 <option name="VM_PARAMETERS" value="" />
651 670 <option name="USER_CFG_CLASS" />
652 671 <option name="CONTEXT_PROVIDER" />
653 672 <method />
654 673 </configuration>
655   - <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
656   - <method />
657   - </configuration>
658 674 <configuration default="true" type="PhpBehatConfigurationType" factoryName="Behat">
659 675 <BehatRunner />
660 676 <method />
661 677 </configuration>
662   - <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server" server_id="a3f1bddc-84d9-4a6b-8a9d-6de886ff3d82" server_name="italauto">
663   - <method />
664   - </configuration>
665 678 <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
666 679 <node-options />
667 680 <gulpfile />
... ... @@ -671,6 +684,9 @@
671 684 <envs />
672 685 <method />
673 686 </configuration>
  687 + <configuration default="true" type="PhpUnitRemoteRunConfigurationType" factoryName="PHPUnit on Server" server_id="a3f1bddc-84d9-4a6b-8a9d-6de886ff3d82" server_name="italauto">
  688 + <method />
  689 + </configuration>
674 690 <configuration default="false" name="ital_server" type="PhpWebAppRunConfigurationType" factoryName="PHP Web Application" browser="98ca6316-2f89-46d9-a9e5-fa9e2b0625b3" server_name="ital_server" start_url="http://test-1.artweb.com.ua/admin/">
675 691 <RunnerSettings RunnerId="PhpRunner" />
676 692 <RunnerSettings RunnerId="PhpWebAppDebugRunner" />
... ... @@ -745,9 +761,9 @@
745 761 <layout>
746 762 <window_info id="File Transfer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32960895" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
747 763 <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32849163" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
748   - <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.34301677" sideWeight="0.5" order="14" side_tool="false" content_ui="tabs" />
749   - <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.21936275" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
  764 + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.34301677" sideWeight="0.5" order="14" side_tool="false" content_ui="tabs" />
750 765 <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.29944134" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  766 + <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.21936275" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
751 767 <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3290441" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
752 768 <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.30726257" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
753 769 <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3206704" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" />
... ... @@ -756,7 +772,7 @@
756 772 <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3206704" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
757 773 <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25306374" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
758 774 <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
759   - <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.30759802" sideWeight="0.49944505" order="0" side_tool="false" content_ui="combo" />
  775 + <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.30392158" sideWeight="0.49944505" order="0" side_tool="false" content_ui="combo" />
760 776 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
761 777 <window_info id="Database Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2547486" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
762 778 <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
... ... @@ -764,8 +780,8 @@
764 780 <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
765 781 <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" />
766 782 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
767   - <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
768 783 <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
  784 + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
769 785 <window_info id="Command Line Tools Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32960895" sideWeight="0.5" order="15" side_tool="false" content_ui="tabs" />
770 786 </layout>
771 787 <layout-to-restore>
... ... @@ -787,9 +803,9 @@
787 803 <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
788 804 <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
789 805 <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25" sideWeight="0.49944505" order="0" side_tool="false" content_ui="combo" />
790   - <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
791   - <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
792 806 <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
  807 + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
  808 + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
793 809 </layout-to-restore>
794 810 </component>
795 811 <component name="Vcs.Log.UiProperties">
... ... @@ -812,426 +828,428 @@
812 828 </component>
813 829 <component name="XDebuggerManager">
814 830 <breakpoint-manager>
  831 + <breakpoints>
  832 + <line-breakpoint type="php">
  833 + <url>file://$PROJECT_DIR$/backend/controllers/RgGrupController.php</url>
  834 + <line>148</line>
  835 + <option name="timeStamp" value="231" />
  836 + </line-breakpoint>
  837 + </breakpoints>
815 838 <breakpoints-dialog>
816 839 <breakpoints-dialog />
817 840 </breakpoints-dialog>
818   - <option name="time" value="224" />
  841 + <option name="time" value="239" />
819 842 </breakpoint-manager>
820 843 <watches-manager>
821 844 <configuration name="index.php">
822   - <watch expression="$model-&gt;rules()" language="PHP" />
823   - <watch expression="array_keys($arr_attributes)" language="PHP" />
  845 + <watch expression="$arr" language="PHP" />
  846 + </configuration>
  847 + <configuration name="PhpWebAppRunConfigurationType">
  848 + <watch expression="$model-&gt;getErrors()" language="PHP" />
824 849 </configuration>
825 850 </watches-manager>
826 851 </component>
827 852 <component name="editorHistoryManager">
828   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/assets/yii.validation.js">
  853 + <entry file="file://$PROJECT_DIR$/common/components/ModelArrayValidator.php">
829 854 <provider selected="true" editor-type-id="text-editor">
830   - <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="8085">
831   - <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
  855 + <state vertical-scroll-proportion="-59.88889" vertical-offset="840" max-vertical-offset="3066">
  856 + <caret line="122" column="32" selection-start-line="122" selection-start-column="32" selection-end-line="122" selection-end-column="32" />
  857 + <folding />
832 858 </state>
833 859 </provider>
834 860 </entry>
835   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/validators/FilterValidator.php">
  861 + <entry file="file://$PROJECT_DIR$/backend/models/DetailsCrosses.php">
836 862 <provider selected="true" editor-type-id="text-editor">
837   - <state vertical-scroll-proportion="-13.222222" vertical-offset="1071" max-vertical-offset="2037">
838   - <caret line="72" column="9" selection-start-line="70" selection-start-column="7" selection-end-line="72" selection-end-column="9" />
  863 + <state vertical-scroll-proportion="0.0" vertical-offset="610" max-vertical-offset="2058">
  864 + <caret line="38" column="54" selection-start-line="38" selection-start-column="35" selection-end-line="38" selection-end-column="54" />
  865 + <folding />
839 866 </state>
840 867 </provider>
841 868 </entry>
842   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/validators/NumberValidator.php">
  869 + <entry file="file://$PROJECT_DIR$/backend/models/Details.php">
843 870 <provider selected="true" editor-type-id="text-editor">
844   - <state vertical-scroll-proportion="-7.037037" vertical-offset="839" max-vertical-offset="3339">
845   - <caret line="55" column="79" selection-start-line="55" selection-start-column="3" selection-end-line="55" selection-end-column="79" />
  871 + <state vertical-scroll-proportion="1.375" vertical-offset="0" max-vertical-offset="3339">
  872 + <caret line="57" column="115" selection-start-line="57" selection-start-column="93" selection-end-line="57" selection-end-column="115" />
  873 + <folding />
846 874 </state>
847 875 </provider>
848 876 </entry>
849   - <entry file="file://$PROJECT_DIR$/common/components/CommaNumberValidator.php">
  877 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/messages/ru/yii.php">
850 878 <provider selected="true" editor-type-id="text-editor">
851   - <state vertical-scroll-proportion="-14.962963" vertical-offset="79" max-vertical-offset="1281">
852   - <caret line="28" column="30" selection-start-line="28" selection-start-column="12" selection-end-line="28" selection-end-column="30" />
  879 + <state vertical-scroll-proportion="3.5185184" vertical-offset="1082" max-vertical-offset="3150">
  880 + <caret line="63" column="134" selection-start-line="63" selection-start-column="134" selection-end-line="63" selection-end-column="134" />
853 881 </state>
854 882 </provider>
855 883 </entry>
856   - <entry file="file://$PROJECT_DIR$/common/models/Currency.php">
  884 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/validators/FileValidator.php">
857 885 <provider selected="true" editor-type-id="text-editor">
858   - <state vertical-scroll-proportion="-11.666667" vertical-offset="357" max-vertical-offset="1512">
859   - <caret line="32" column="73" selection-start-line="32" selection-start-column="62" selection-end-line="32" selection-end-column="73" />
  886 + <state vertical-scroll-proportion="252.77777" vertical-offset="6825" max-vertical-offset="8862">
  887 + <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
860 888 </state>
861 889 </provider>
862 890 </entry>
863   - <entry file="file://$PROJECT_DIR$/common/models/CartBillsSearch.php">
  891 + <entry file="file://$PROJECT_DIR$/backend/models/UploadFileParsingForm.php">
864 892 <provider selected="true" editor-type-id="text-editor">
865   - <state vertical-scroll-proportion="7.7777777" vertical-offset="1071" max-vertical-offset="1911">
866   - <caret line="45" column="39" selection-start-line="45" selection-start-column="39" selection-end-line="45" selection-end-column="39" />
  893 + <state vertical-scroll-proportion="-14.0" vertical-offset="567" max-vertical-offset="2163">
  894 + <caret line="49" column="37" selection-start-line="49" selection-start-column="37" selection-end-line="49" selection-end-column="37" />
  895 + <folding />
867 896 </state>
868 897 </provider>
869 898 </entry>
870   - <entry file="file://$PROJECT_DIR$/backend/components/base/BaseActiveRecord.php">
  899 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/log/Logger.php">
871 900 <provider selected="true" editor-type-id="text-editor">
872   - <state vertical-scroll-proportion="0.0" vertical-offset="378" max-vertical-offset="588">
873   - <caret line="23" column="9" selection-start-line="21" selection-start-column="8" selection-end-line="23" selection-end-column="9" />
874   - <folding />
  901 + <state vertical-scroll-proportion="0.33274338" vertical-offset="3361" max-vertical-offset="6636">
  902 + <caret line="174" column="0" selection-start-line="174" selection-start-column="0" selection-end-line="174" selection-end-column="0" />
875 903 </state>
876 904 </provider>
877 905 </entry>
878   - <entry file="file://$PROJECT_DIR$/backend/views/currency/index.php">
  906 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/web/Session.php">
879 907 <provider selected="true" editor-type-id="text-editor">
880   - <state vertical-scroll-proportion="0.775" vertical-offset="0" max-vertical-offset="840">
881   - <caret line="32" column="0" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
  908 + <state vertical-scroll-proportion="0.33274338" vertical-offset="3319" max-vertical-offset="18270">
  909 + <caret line="172" column="0" selection-start-line="172" selection-start-column="0" selection-end-line="172" selection-end-column="0" />
882 910 </state>
883 911 </provider>
884 912 </entry>
885   - <entry file="file://$PROJECT_DIR$/backend/models/ImportersFiles.php">
  913 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/db/BaseActiveRecord.php">
886 914 <provider selected="true" editor-type-id="text-editor">
887   - <state vertical-scroll-proportion="-10.703704" vertical-offset="47" max-vertical-offset="1470">
888   - <caret line="17" column="6" selection-start-line="17" selection-start-column="6" selection-end-line="17" selection-end-column="6" />
889   - <folding />
  915 + <state vertical-scroll-proportion="-6.185185" vertical-offset="4831" max-vertical-offset="33033">
  916 + <caret line="250" column="0" selection-start-line="250" selection-start-column="0" selection-end-line="250" selection-end-column="0" />
890 917 </state>
891 918 </provider>
892 919 </entry>
893   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/View.php">
  920 + <entry file="file://$PROJECT_DIR$/console/controllers/ParserController.php">
894 921 <provider selected="true" editor-type-id="text-editor">
895   - <state vertical-scroll-proportion="-6.5185184" vertical-offset="6502" max-vertical-offset="10395">
896   - <caret line="326" column="0" selection-start-line="326" selection-start-column="0" selection-end-line="326" selection-end-column="0" />
  922 + <state vertical-scroll-proportion="-6.962963" vertical-offset="967" max-vertical-offset="5397">
  923 + <caret line="64" column="0" selection-start-line="64" selection-start-column="0" selection-end-line="64" selection-end-column="0" />
897 924 </state>
898 925 </provider>
899 926 </entry>
900   - <entry file="file://$PROJECT_DIR$/backend/views/templates/parser_massage.php">
  927 + <entry file="file://$PROJECT_DIR$/backend/models/Importers.php">
901 928 <provider selected="true" editor-type-id="text-editor">
902   - <state vertical-scroll-proportion="-10.888889" vertical-offset="0" max-vertical-offset="420">
903   - <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
  929 + <state vertical-scroll-proportion="-7.703704" vertical-offset="1766" max-vertical-offset="3213">
  930 + <caret line="96" column="0" selection-start-line="96" selection-start-column="0" selection-end-line="96" selection-end-column="0" />
  931 + <folding />
904 932 </state>
905 933 </provider>
906 934 </entry>
907   - <entry file="file://$PROJECT_DIR$/backend/views/crossing-upload/index.php">
  935 + <entry file="file://$PROJECT_DIR$/console/runtime/logs/parser.log">
908 936 <provider selected="true" editor-type-id="text-editor">
909   - <state vertical-scroll-proportion="-13.962963" vertical-offset="169" max-vertical-offset="672">
910   - <caret line="28" column="0" selection-start-line="28" selection-start-column="0" selection-end-line="28" selection-end-column="0" />
  937 + <state vertical-scroll-proportion="0.79928315" vertical-offset="5946" max-vertical-offset="6783">
  938 + <caret line="288" column="61" selection-start-line="288" selection-start-column="61" selection-end-line="288" selection-end-column="61" />
911 939 </state>
912 940 </provider>
  941 + <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">
  942 + <state />
  943 + </provider>
913 944 </entry>
914   - <entry file="file://$PROJECT_DIR$/backend/components/base/BaseController.php">
  945 + <entry file="file://$PROJECT_DIR$/common/components/parsers/Converter.php">
915 946 <provider selected="true" editor-type-id="text-editor">
916   - <state vertical-scroll-proportion="-108.85185" vertical-offset="1534" max-vertical-offset="5187">
917   - <caret line="224" column="29" selection-start-line="224" selection-start-column="29" selection-end-line="224" selection-end-column="29" />
918   - <folding />
  947 + <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="3780">
  948 + <caret line="8" column="36" selection-start-line="8" selection-start-column="36" selection-end-line="8" selection-end-column="36" />
919 949 </state>
920 950 </provider>
921 951 </entry>
922   - <entry file="file://$PROJECT_DIR$/backend/web/css/AdminLTE.css">
  952 + <entry file="file://$PROJECT_DIR$/common/components/parsers/config.php">
923 953 <provider selected="true" editor-type-id="text-editor">
924   - <state vertical-scroll-proportion="0.3633218" vertical-offset="63" max-vertical-offset="89124">
925   - <caret line="18" column="5" selection-start-line="18" selection-start-column="5" selection-end-line="18" selection-end-column="5" />
  954 + <state vertical-scroll-proportion="-7.7777777" vertical-offset="1239" max-vertical-offset="2079">
  955 + <caret line="69" column="45" selection-start-line="69" selection-start-column="45" selection-end-line="69" selection-end-column="45" />
926 956 </state>
927 957 </provider>
928 958 </entry>
929   - <entry file="file://$PROJECT_DIR$/common/components/ModelArrayValidator.php">
  959 + <entry file="file://$PROJECT_DIR$/backend/views/parser/results.php">
930 960 <provider selected="true" editor-type-id="text-editor">
931   - <state vertical-scroll-proportion="-59.88889" vertical-offset="840" max-vertical-offset="3066">
932   - <caret line="122" column="32" selection-start-line="122" selection-start-column="32" selection-end-line="122" selection-end-column="32" />
933   - <folding />
  961 + <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="777">
  962 + <caret line="3" column="4" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" />
934 963 </state>
935 964 </provider>
936 965 </entry>
937   - <entry file="file://$PROJECT_DIR$/backend/models/DetailsCrosses.php">
  966 + <entry file="file://$PROJECT_DIR$/common/components/parsers/CsvParser.php">
938 967 <provider selected="true" editor-type-id="text-editor">
939   - <state vertical-scroll-proportion="0.0" vertical-offset="610" max-vertical-offset="2058">
940   - <caret line="38" column="54" selection-start-line="38" selection-start-column="35" selection-end-line="38" selection-end-column="54" />
941   - <folding />
  968 + <state vertical-scroll-proportion="-4.6666665" vertical-offset="0" max-vertical-offset="1701">
  969 + <caret line="8" column="12" selection-start-line="8" selection-start-column="12" selection-end-line="8" selection-end-column="12" />
942 970 </state>
943 971 </provider>
944 972 </entry>
945   - <entry file="file://$PROJECT_DIR$/backend/models/Details.php">
  973 + <entry file="file://$PROJECT_DIR$/common/components/parsers/CustomConverter.php">
946 974 <provider selected="true" editor-type-id="text-editor">
947   - <state vertical-scroll-proportion="1.375" vertical-offset="0" max-vertical-offset="3339">
948   - <caret line="57" column="115" selection-start-line="57" selection-start-column="93" selection-end-line="57" selection-end-column="115" />
949   - <folding />
  975 + <state vertical-scroll-proportion="-3.1111112" vertical-offset="0" max-vertical-offset="3066">
  976 + <caret line="4" column="4" selection-start-line="4" selection-start-column="4" selection-end-line="4" selection-end-column="4" />
950 977 </state>
951 978 </provider>
952 979 </entry>
953   - <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/index.php">
  980 + <entry file="file://$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php">
954 981 <provider selected="true" editor-type-id="text-editor">
955   - <state vertical-scroll-proportion="0.0" vertical-offset="189" max-vertical-offset="714">
956   - <caret line="12" column="124" selection-start-line="12" selection-start-column="124" selection-end-line="12" selection-end-column="124" />
957   - <folding />
  982 + <state vertical-scroll-proportion="-3.8888888" vertical-offset="0" max-vertical-offset="420">
  983 + <caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
958 984 </state>
959 985 </provider>
960 986 </entry>
961   - <entry file="file://$PROJECT_DIR$/common/components/PriceWriter.php">
  987 + <entry file="file://$PROJECT_DIR$/common/components/parsers/XlsxParser.php">
962 988 <provider selected="true" editor-type-id="text-editor">
963   - <state vertical-scroll-proportion="0.0" vertical-offset="1008" max-vertical-offset="5628">
964   - <caret line="53" column="24" selection-start-line="53" selection-start-column="24" selection-end-line="53" selection-end-column="24" />
965   - <folding>
966   - <element signature="e#122#150#0#PHP" expanded="false" />
967   - </folding>
  989 + <state vertical-scroll-proportion="-7.3703704" vertical-offset="11" max-vertical-offset="6531">
  990 + <caret line="15" column="12" selection-start-line="15" selection-start-column="12" selection-end-line="15" selection-end-column="12" />
968 991 </state>
969 992 </provider>
970 993 </entry>
971   - <entry file="file://$PROJECT_DIR$/common/models/MarginsGroups.php">
  994 + <entry file="file://$PROJECT_DIR$/common/config/main.php">
972 995 <provider selected="true" editor-type-id="text-editor">
973   - <state vertical-scroll-proportion="-10.703704" vertical-offset="593" max-vertical-offset="2520">
974   - <caret line="43" column="18" selection-start-line="43" selection-start-column="18" selection-end-line="43" selection-end-column="18" />
975   - <folding />
  996 + <state vertical-scroll-proportion="-10.296296" vertical-offset="163" max-vertical-offset="735">
  997 + <caret line="21" column="24" selection-start-line="21" selection-start-column="24" selection-end-line="21" selection-end-column="24" />
976 998 </state>
977 999 </provider>
978 1000 </entry>
979   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/messages/ru/yii.php">
  1001 + <entry file="file://$PROJECT_DIR$/tests/unit/BaseConverterTest.php">
980 1002 <provider selected="true" editor-type-id="text-editor">
981   - <state vertical-scroll-proportion="3.5185184" vertical-offset="1082" max-vertical-offset="3150">
982   - <caret line="63" column="134" selection-start-line="63" selection-start-column="134" selection-end-line="63" selection-end-column="134" />
983   - <folding />
  1003 + <state vertical-scroll-proportion="-3.8888888" vertical-offset="0" max-vertical-offset="1533">
  1004 + <caret line="5" column="4" selection-start-line="5" selection-start-column="4" selection-end-line="5" selection-end-column="4" />
984 1005 </state>
985 1006 </provider>
986 1007 </entry>
987   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/validators/FileValidator.php">
  1008 + <entry file="file://$PROJECT_DIR$/storage/.gitignore">
988 1009 <provider selected="true" editor-type-id="text-editor">
989   - <state vertical-scroll-proportion="252.77777" vertical-offset="6825" max-vertical-offset="8862">
  1010 + <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="867">
990 1011 <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
  1012 + </state>
  1013 + </provider>
  1014 + </entry>
  1015 + <entry file="file://$PROJECT_DIR$/backend/web/index.php">
  1016 + <provider selected="true" editor-type-id="text-editor">
  1017 + <state vertical-scroll-proportion="0.075" vertical-offset="0" max-vertical-offset="840">
  1018 + <caret line="3" column="0" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
991 1019 <folding />
992 1020 </state>
993 1021 </provider>
994 1022 </entry>
995   - <entry file="file://$PROJECT_DIR$/backend/models/UploadFileParsingForm.php">
  1023 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/UserException.php">
996 1024 <provider selected="true" editor-type-id="text-editor">
997   - <state vertical-scroll-proportion="-14.0" vertical-offset="567" max-vertical-offset="2163">
998   - <caret line="49" column="37" selection-start-line="49" selection-start-column="37" selection-end-line="49" selection-end-column="37" />
  1025 + <state vertical-scroll-proportion="-9.333333" vertical-offset="0" max-vertical-offset="441">
  1026 + <caret line="16" column="19" selection-start-line="16" selection-start-column="6" selection-end-line="16" selection-end-column="19" />
999 1027 <folding />
1000 1028 </state>
1001 1029 </provider>
1002 1030 </entry>
1003   - <entry file="file://$PROJECT_DIR$/.htaccess">
  1031 + <entry file="file://$PROJECT_DIR$/tests/unit/CrossesParsingTest.php">
1004 1032 <provider selected="true" editor-type-id="text-editor">
1005   - <state vertical-scroll-proportion="0.0" vertical-offset="750" max-vertical-offset="1617">
1006   - <caret line="70" column="18" selection-start-line="70" selection-start-column="14" selection-end-line="70" selection-end-column="18" />
1007   - <folding>
1008   - <marker date="1448632293559" expanded="true" signature="-1:-1" placeholder="&lt;IfModule mod_rewrite.c&gt;" />
1009   - <marker date="1448632293559" expanded="true" signature="-1:-1" placeholder="&lt;IfModule mod_rewrite.c&gt;" />
1010   - <marker date="1448632293559" expanded="true" signature="-1:-1" placeholder="&lt;IfModule mod_php5.c&gt;" />
1011   - </folding>
  1033 + <state vertical-scroll-proportion="1.0778761" vertical-offset="210" max-vertical-offset="1113">
  1034 + <caret line="39" column="0" selection-start-line="39" selection-start-column="0" selection-end-line="39" selection-end-column="0" />
1012 1035 </state>
1013 1036 </provider>
1014 1037 </entry>
1015   - <entry file="file://$PROJECT_DIR$/backend/views/parser/index.php">
  1038 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/web/ErrorHandler.php">
1016 1039 <provider selected="true" editor-type-id="text-editor">
1017   - <state vertical-scroll-proportion="-14.0" vertical-offset="0" max-vertical-offset="1239">
1018   - <caret line="21" column="9" selection-start-line="21" selection-start-column="9" selection-end-line="21" selection-end-column="9" />
  1040 + <state vertical-scroll-proportion="0.33208954" vertical-offset="1355" max-vertical-offset="9093">
  1041 + <caret line="81" column="0" selection-start-line="81" selection-start-column="0" selection-end-line="81" selection-end-column="0" />
1019 1042 <folding />
1020 1043 </state>
1021 1044 </provider>
1022 1045 </entry>
1023   - <entry file="file://$PROJECT_DIR$/backend/views/parser/server-files.php">
  1046 + <entry file="file://$PROJECT_DIR$/backend/views/crossing-upload/index.php">
1024 1047 <provider selected="true" editor-type-id="text-editor">
1025   - <state vertical-scroll-proportion="-21.777779" vertical-offset="315" max-vertical-offset="1155">
1026   - <caret line="49" column="67" selection-start-line="49" selection-start-column="67" selection-end-line="49" selection-end-column="67" />
1027   - <folding />
  1048 + <state vertical-scroll-proportion="0.8548673" vertical-offset="0" max-vertical-offset="693">
  1049 + <caret line="25" column="10" selection-start-line="25" selection-start-column="10" selection-end-line="25" selection-end-column="10" />
1028 1050 </state>
1029 1051 </provider>
1030 1052 </entry>
1031   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/log/Logger.php">
  1053 + <entry file="file://$PROJECT_DIR$/backend/views/crossing-upload/results.php">
1032 1054 <provider selected="true" editor-type-id="text-editor">
1033   - <state vertical-scroll-proportion="0.33274338" vertical-offset="3361" max-vertical-offset="6636">
1034   - <caret line="174" column="0" selection-start-line="174" selection-start-column="0" selection-end-line="174" selection-end-column="0" />
1035   - <folding />
  1055 + <state vertical-scroll-proportion="1.1522124" vertical-offset="0" max-vertical-offset="777">
  1056 + <caret line="31" column="6" selection-start-line="31" selection-start-column="6" selection-end-line="31" selection-end-column="6" />
1036 1057 </state>
1037 1058 </provider>
1038 1059 </entry>
1039   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/web/Session.php">
  1060 + <entry file="file://$PROJECT_DIR$/common/components/exceptions/RgParsingException.php">
1040 1061 <provider selected="true" editor-type-id="text-editor">
1041   - <state vertical-scroll-proportion="0.33274338" vertical-offset="3319" max-vertical-offset="18270">
1042   - <caret line="172" column="0" selection-start-line="172" selection-start-column="0" selection-end-line="172" selection-end-column="0" />
  1062 + <state vertical-scroll-proportion="0.2" vertical-offset="0" max-vertical-offset="840">
  1063 + <caret line="13" column="24" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="24" />
1043 1064 <folding />
1044 1065 </state>
1045 1066 </provider>
1046 1067 </entry>
1047   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/Controller.php">
  1068 + <entry file="file://$PROJECT_DIR$/common/components/exceptions/CrossParsingException.php">
1048 1069 <provider selected="true" editor-type-id="text-editor">
1049   - <state vertical-scroll-proportion="-7.296296" vertical-offset="2911" max-vertical-offset="10437">
1050   - <caret line="152" column="0" selection-start-line="152" selection-start-column="0" selection-end-line="152" selection-end-column="0" />
  1070 + <state vertical-scroll-proportion="0.225" vertical-offset="0" max-vertical-offset="840">
  1071 + <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
1051 1072 <folding />
1052 1073 </state>
1053 1074 </provider>
1054 1075 </entry>
1055   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/ErrorHandler.php">
  1076 + <entry file="file://$PROJECT_DIR$/common/components/exceptions/PriceParsingException.php">
1056 1077 <provider selected="true" editor-type-id="text-editor">
1057   - <state vertical-scroll-proportion="-7.296296" vertical-offset="1525" max-vertical-offset="6867">
1058   - <caret line="88" column="0" selection-start-line="88" selection-start-column="0" selection-end-line="88" selection-end-column="0" />
  1078 + <state vertical-scroll-proportion="0.25" vertical-offset="0" max-vertical-offset="840">
  1079 + <caret line="15" column="1" selection-start-line="15" selection-start-column="1" selection-end-line="15" selection-end-column="1" />
1059 1080 <folding />
1060 1081 </state>
1061 1082 </provider>
1062 1083 </entry>
1063   - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/db/BaseActiveRecord.php">
  1084 + <entry file="file://$PROJECT_DIR$/.htaccess">
1064 1085 <provider selected="true" editor-type-id="text-editor">
1065   - <state vertical-scroll-proportion="-6.185185" vertical-offset="4831" max-vertical-offset="33033">
1066   - <caret line="250" column="0" selection-start-line="250" selection-start-column="0" selection-end-line="250" selection-end-column="0" />
  1086 + <state vertical-scroll-proportion="0.8304498" vertical-offset="750" max-vertical-offset="1617">
  1087 + <caret line="70" column="31" selection-start-line="69" selection-start-column="3" selection-end-line="70" selection-end-column="31" />
1067 1088 <folding />
1068 1089 </state>
1069 1090 </provider>
1070 1091 </entry>
1071   - <entry file="file://$PROJECT_DIR$/console/controllers/ParserController.php">
  1092 + <entry file="file://$PROJECT_DIR$/backend/components/base/BaseController.php">
1072 1093 <provider selected="true" editor-type-id="text-editor">
1073   - <state vertical-scroll-proportion="-6.962963" vertical-offset="967" max-vertical-offset="5397">
1074   - <caret line="64" column="0" selection-start-line="64" selection-start-column="0" selection-end-line="64" selection-end-column="0" />
  1094 + <state vertical-scroll-proportion="0.875" vertical-offset="3654" max-vertical-offset="4536">
  1095 + <caret line="218" column="0" selection-start-line="218" selection-start-column="0" selection-end-line="218" selection-end-column="0" />
1075 1096 <folding />
1076 1097 </state>
1077 1098 </provider>
1078 1099 </entry>
1079   - <entry file="file://$PROJECT_DIR$/backend/models/Importers.php">
  1100 + <entry file="file://$PROJECT_DIR$/common/components/PriceWriter.php">
1080 1101 <provider selected="true" editor-type-id="text-editor">
1081   - <state vertical-scroll-proportion="-7.703704" vertical-offset="1766" max-vertical-offset="3213">
1082   - <caret line="96" column="0" selection-start-line="96" selection-start-column="0" selection-end-line="96" selection-end-column="0" />
  1102 + <state vertical-scroll-proportion="-4.6" vertical-offset="4746" max-vertical-offset="5586">
  1103 + <caret line="51" column="13" selection-start-line="51" selection-start-column="13" selection-end-line="51" selection-end-column="13" />
1083 1104 <folding />
1084 1105 </state>
1085 1106 </provider>
1086 1107 </entry>
1087   - <entry file="file://$PROJECT_DIR$/console/runtime/logs/parser.log">
  1108 + <entry file="file://$PROJECT_DIR$/backend/config/main.php">
1088 1109 <provider selected="true" editor-type-id="text-editor">
1089   - <state vertical-scroll-proportion="0.79928315" vertical-offset="5946" max-vertical-offset="6783">
1090   - <caret line="288" column="61" selection-start-line="288" selection-start-column="61" selection-end-line="288" selection-end-column="61" />
  1110 + <state vertical-scroll-proportion="0.475" vertical-offset="210" max-vertical-offset="1050">
  1111 + <caret line="29" column="44" selection-start-line="29" selection-start-column="44" selection-end-line="29" selection-end-column="44" />
1091 1112 <folding />
1092 1113 </state>
1093 1114 </provider>
1094   - <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">
1095   - <state />
1096   - </provider>
1097 1115 </entry>
1098   - <entry file="file://$PROJECT_DIR$/common/components/parsers/Converter.php">
  1116 + <entry file="file://$PROJECT_DIR$/backend/components/base/BaseActiveRecord.php">
1099 1117 <provider selected="true" editor-type-id="text-editor">
1100   - <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="3780">
1101   - <caret line="8" column="36" selection-start-line="8" selection-start-column="36" selection-end-line="8" selection-end-column="36" />
  1118 + <state vertical-scroll-proportion="0.25" vertical-offset="0" max-vertical-offset="840">
  1119 + <caret line="15" column="46" selection-start-line="15" selection-start-column="21" selection-end-line="15" selection-end-column="46" />
1102 1120 <folding />
1103 1121 </state>
1104 1122 </provider>
1105 1123 </entry>
1106   - <entry file="file://$PROJECT_DIR$/common/components/parsers/config.php">
  1124 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/ErrorHandler.php">
1107 1125 <provider selected="true" editor-type-id="text-editor">
1108   - <state vertical-scroll-proportion="-7.7777777" vertical-offset="1239" max-vertical-offset="2079">
1109   - <caret line="69" column="45" selection-start-line="69" selection-start-column="45" selection-end-line="69" selection-end-column="45" />
  1126 + <state vertical-scroll-proportion="0.6845238" vertical-offset="2155" max-vertical-offset="6867">
  1127 + <caret line="136" column="20" selection-start-line="136" selection-start-column="20" selection-end-line="136" selection-end-column="20" />
1110 1128 <folding />
1111 1129 </state>
1112 1130 </provider>
1113 1131 </entry>
1114   - <entry file="file://$PROJECT_DIR$/backend/controllers/ParserController.php">
  1132 + <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/base/Controller.php">
1115 1133 <provider selected="true" editor-type-id="text-editor">
1116   - <state vertical-scroll-proportion="-7.037037" vertical-offset="167" max-vertical-offset="6762">
1117   - <caret line="17" column="4" selection-start-line="17" selection-start-column="4" selection-end-line="17" selection-end-column="4" />
  1134 + <state vertical-scroll-proportion="-7.296296" vertical-offset="7489" max-vertical-offset="10437">
  1135 + <caret line="370" column="0" selection-start-line="370" selection-start-column="0" selection-end-line="370" selection-end-column="0" />
1118 1136 <folding />
1119 1137 </state>
1120 1138 </provider>
1121 1139 </entry>
1122   - <entry file="file://$PROJECT_DIR$/backend/controllers/RgGrupController.php">
  1140 + <entry file="file://$PROJECT_DIR$/backend/views/parser/error.php">
1123 1141 <provider selected="true" editor-type-id="text-editor">
1124   - <state vertical-scroll-proportion="-7.3703704" vertical-offset="137" max-vertical-offset="4704">
1125   - <caret line="21" column="4" selection-start-line="21" selection-start-column="4" selection-end-line="21" selection-end-column="4" />
  1142 + <state vertical-scroll-proportion="-18.666666" vertical-offset="0" max-vertical-offset="819">
  1143 + <caret line="24" column="10" selection-start-line="24" selection-start-column="10" selection-end-line="24" selection-end-column="10" />
1126 1144 <folding />
1127 1145 </state>
1128 1146 </provider>
1129 1147 </entry>
1130   - <entry file="file://$PROJECT_DIR$/backend/views/crossing-upload/results.php">
  1148 + <entry file="file://$PROJECT_DIR$/common/components/parsers/ConverterInterface.php">
1131 1149 <provider selected="true" editor-type-id="text-editor">
1132   - <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="777">
1133   - <caret line="3" column="4" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" />
  1150 + <state vertical-scroll-proportion="0.2937063" vertical-offset="0" max-vertical-offset="572">
  1151 + <caret line="13" column="51" selection-start-line="13" selection-start-column="51" selection-end-line="13" selection-end-column="51" />
1134 1152 <folding />
1135 1153 </state>
1136 1154 </provider>
1137 1155 </entry>
1138   - <entry file="file://$PROJECT_DIR$/backend/views/parser/results.php">
  1156 + <entry file="file://$PROJECT_DIR$/backend/views/parser/index.php">
1139 1157 <provider selected="true" editor-type-id="text-editor">
1140   - <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="777">
1141   - <caret line="3" column="4" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" />
  1158 + <state vertical-scroll-proportion="-0.22222222" vertical-offset="372" max-vertical-offset="1239">
  1159 + <caret line="21" column="9" selection-start-line="21" selection-start-column="9" selection-end-line="21" selection-end-column="9" />
1142 1160 <folding />
1143 1161 </state>
1144 1162 </provider>
1145 1163 </entry>
1146   - <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/results.php">
  1164 + <entry file="file://$PROJECT_DIR$/backend/views/parser/server-files.php">
1147 1165 <provider selected="true" editor-type-id="text-editor">
1148   - <state vertical-scroll-proportion="-2.3333333" vertical-offset="0" max-vertical-offset="777">
1149   - <caret line="3" column="4" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" />
  1166 + <state vertical-scroll-proportion="-22.777779" vertical-offset="288" max-vertical-offset="1155">
  1167 + <caret line="49" column="108" selection-start-line="49" selection-start-column="8" selection-end-line="49" selection-end-column="108" />
1150 1168 <folding />
1151 1169 </state>
1152 1170 </provider>
1153 1171 </entry>
1154   - <entry file="file://$PROJECT_DIR$/common/components/parsers/CsvParser.php">
  1172 + <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/index.php">
1155 1173 <provider selected="true" editor-type-id="text-editor">
1156   - <state vertical-scroll-proportion="-4.6666665" vertical-offset="0" max-vertical-offset="1701">
1157   - <caret line="8" column="12" selection-start-line="8" selection-start-column="12" selection-end-line="8" selection-end-column="12" />
  1174 + <state vertical-scroll-proportion="-18.666666" vertical-offset="0" max-vertical-offset="756">
  1175 + <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
1158 1176 <folding />
1159 1177 </state>
1160 1178 </provider>
1161 1179 </entry>
1162   - <entry file="file://$PROJECT_DIR$/common/components/parsers/CustomConverter.php">
  1180 + <entry file="file://$PROJECT_DIR$/backend/views/rg-grup/results.php">
1163 1181 <provider selected="true" editor-type-id="text-editor">
1164   - <state vertical-scroll-proportion="-3.1111112" vertical-offset="0" max-vertical-offset="3066">
1165   - <caret line="4" column="4" selection-start-line="4" selection-start-column="4" selection-end-line="4" selection-end-column="4" />
1166   - <folding />
  1182 + <state vertical-scroll-proportion="-22.555555" vertical-offset="0" max-vertical-offset="777">
  1183 + <caret line="29" column="23" selection-start-line="29" selection-start-column="23" selection-end-line="29" selection-end-column="23" />
  1184 + <folding>
  1185 + <element signature="e#7#28#0#PHP" expanded="true" />
  1186 + </folding>
1167 1187 </state>
1168 1188 </provider>
1169 1189 </entry>
1170   - <entry file="file://$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php">
  1190 + <entry file="file://$PROJECT_DIR$/backend/components/traits/ParserTrait.php">
1171 1191 <provider selected="true" editor-type-id="text-editor">
1172   - <state vertical-scroll-proportion="-3.8888888" vertical-offset="0" max-vertical-offset="420">
1173   - <caret line="10" column="32" selection-start-line="10" selection-start-column="32" selection-end-line="10" selection-end-column="32" />
1174   - <folding />
  1192 + <state vertical-scroll-proportion="-42.77778" vertical-offset="126" max-vertical-offset="1848">
  1193 + <caret line="66" column="46" selection-start-line="66" selection-start-column="31" selection-end-line="66" selection-end-column="46" />
  1194 + <folding>
  1195 + <element signature="e#129#177#0#PHP" expanded="true" />
  1196 + </folding>
1175 1197 </state>
1176 1198 </provider>
1177 1199 </entry>
1178   - <entry file="file://$PROJECT_DIR$/common/components/parsers/XlsxParser.php">
  1200 + <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php">
1179 1201 <provider selected="true" editor-type-id="text-editor">
1180   - <state vertical-scroll-proportion="-7.3703704" vertical-offset="11" max-vertical-offset="6531">
1181   - <caret line="15" column="12" selection-start-line="15" selection-start-column="12" selection-end-line="15" selection-end-column="12" />
  1202 + <state vertical-scroll-proportion="-9.62963" vertical-offset="286" max-vertical-offset="1596">
  1203 + <caret line="31" column="36" selection-start-line="31" selection-start-column="36" selection-end-line="31" selection-end-column="36" />
1182 1204 <folding />
1183 1205 </state>
1184 1206 </provider>
1185 1207 </entry>
1186   - <entry file="file://$PROJECT_DIR$/common/config/main.php">
  1208 + <entry file="file://$PROJECT_DIR$/common/models/MarginsGroups.php">
1187 1209 <provider selected="true" editor-type-id="text-editor">
1188   - <state vertical-scroll-proportion="-10.296296" vertical-offset="163" max-vertical-offset="735">
1189   - <caret line="21" column="24" selection-start-line="21" selection-start-column="24" selection-end-line="21" selection-end-column="24" />
  1210 + <state vertical-scroll-proportion="15.62963" vertical-offset="758" max-vertical-offset="2520">
  1211 + <caret line="17" column="19" selection-start-line="17" selection-start-column="6" selection-end-line="17" selection-end-column="19" />
1190 1212 <folding />
1191 1213 </state>
1192 1214 </provider>
1193 1215 </entry>
1194   - <entry file="file://$PROJECT_DIR$/tests/unit/BaseConverterTest.php">
  1216 + <entry file="file://$PROJECT_DIR$/common/models/Margins.php">
1195 1217 <provider selected="true" editor-type-id="text-editor">
1196   - <state vertical-scroll-proportion="-3.8888888" vertical-offset="0" max-vertical-offset="1533">
1197   - <caret line="5" column="4" selection-start-line="5" selection-start-column="4" selection-end-line="5" selection-end-column="4" />
  1218 + <state vertical-scroll-proportion="-10.407408" vertical-offset="832" max-vertical-offset="1512">
  1219 + <caret line="53" column="8" selection-start-line="53" selection-start-column="8" selection-end-line="53" selection-end-column="51" />
1198 1220 <folding />
1199 1221 </state>
1200 1222 </provider>
1201 1223 </entry>
1202   - <entry file="file://$PROJECT_DIR$/backend/controllers/CrossingUploadController.php">
  1224 + <entry file="file://$PROJECT_DIR$/backend/controllers/RgGrupController.php">
1203 1225 <provider selected="true" editor-type-id="text-editor">
1204   - <state vertical-scroll-proportion="-9.37037" vertical-offset="2519" max-vertical-offset="4935">
1205   - <caret line="137" column="78" selection-start-line="137" selection-start-column="11" selection-end-line="137" selection-end-column="78" />
  1226 + <state vertical-scroll-proportion="-109.59259" vertical-offset="527" max-vertical-offset="4053">
  1227 + <caret line="190" column="5" selection-start-line="190" selection-start-column="5" selection-end-line="190" selection-end-column="5" />
1206 1228 <folding>
1207 1229 <element signature="e#125#168#0#PHP" expanded="true" />
  1230 + <element signature="e#787#1322#0#PHP" expanded="false" />
1208 1231 </folding>
1209 1232 </state>
1210 1233 </provider>
1211 1234 </entry>
1212   - <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php">
1213   - <provider selected="true" editor-type-id="text-editor">
1214   - <state vertical-scroll-proportion="-10.777778" vertical-offset="108" max-vertical-offset="1596">
1215   - <caret line="24" column="48" selection-start-line="24" selection-start-column="48" selection-end-line="24" selection-end-column="48" />
1216   - <folding />
1217   - </state>
1218   - </provider>
1219   - </entry>
1220   - <entry file="file://$PROJECT_DIR$/tests/unit/CrossesParsingTest.php">
  1235 + <entry file="file://$PROJECT_DIR$/backend/controllers/CrossingUploadController.php">
1221 1236 <provider selected="true" editor-type-id="text-editor">
1222   - <state vertical-scroll-proportion="-20.222221" vertical-offset="273" max-vertical-offset="1113">
1223   - <caret line="39" column="0" selection-start-line="39" selection-start-column="0" selection-end-line="39" selection-end-column="0" />
  1237 + <state vertical-scroll-proportion="-37.333332" vertical-offset="1134" max-vertical-offset="4746">
  1238 + <caret line="102" column="0" selection-start-line="102" selection-start-column="0" selection-end-line="102" selection-end-column="0" />
1224 1239 <folding>
1225   - <element signature="e#28#68#0#PHP" expanded="true" />
  1240 + <element signature="e#6#91#0#PHP" expanded="true" />
  1241 + <element signature="e#125#168#0#PHP" expanded="true" />
1226 1242 </folding>
1227 1243 </state>
1228 1244 </provider>
1229 1245 </entry>
1230   - <entry file="file://$PROJECT_DIR$/storage/.gitignore">
  1246 + <entry file="file://$PROJECT_DIR$/backend/controllers/ParserController.php">
1231 1247 <provider selected="true" editor-type-id="text-editor">
1232   - <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="867">
1233   - <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
1234   - <folding />
  1248 + <state vertical-scroll-proportion="0.021428572" vertical-offset="1494" max-vertical-offset="6468">
  1249 + <caret line="72" column="54" selection-start-line="72" selection-start-column="54" selection-end-line="72" selection-end-column="54" />
  1250 + <folding>
  1251 + <element signature="e#38#65#0#PHP" expanded="true" />
  1252 + </folding>
1235 1253 </state>
1236 1254 </provider>
1237 1255 </entry>
... ...
backend/components/base/BaseController.php
... ... @@ -216,36 +216,5 @@ class BaseController extends Controller {
216 216 }
217 217 }
218 218  
219   - /**
220   - * @param $mode - int: 0 - fetch from cache, - 1 - put in cache, <2 - delete from cache
221   - * @param $data - array
222   - * @param $configuration - array
223   - * @throws \ErrorException
224   - */
225   - protected function parserCacheHandler( $mode, &$data = [], &$configuration = [] ){
226   - switch ( $mode ) {
227   - case 0:
228   - if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) {
229   - $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
230   - $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration'));
231   - } else {
232   - throw new \ErrorException('Ошибка кеша');
233   - }
234   - break;
235   -
236   - case 1:
237   - Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
238   - // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
239   - Yii::$app->getCache()->set('parser_configuration', serialize($configuration), 1800);
240   - break;
241   -
242   - default:
243   - if( Yii::$app->getCache()->exists('parser_data') )
244   - Yii::$app->getCache()->delete('parser_data');
245   -
246   - if( Yii::$app->getCache()->exists('parser_configuration') )
247   - Yii::$app->getCache()->delete('parser_configuration');
248   - }
249 219  
250   - }
251 220 }
252 221 \ No newline at end of file
... ...
backend/components/traits/ParserTrait.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 01.12.2015
  6 + * Time: 9:42
  7 + */
  8 +namespace backend\components\traits;
  9 +
  10 +use common\components\parsers\DynamicFormHelper;
  11 +use Yii;
  12 +use yii\base\ErrorException;
  13 +use yii\data\ArrayDataProvider;
  14 +
  15 +trait ParserTrait
  16 +{
  17 +
  18 + /**
  19 + * @param $mode - int: 0 - fetch from cache, - 1 - put in cache, <2 - delete from cache
  20 + * @param $data - array
  21 + * @param $configuration - array
  22 + * @throws \ErrorException
  23 + */
  24 + public function parserCacheHandler($mode, &$data = [], &$configuration = [])
  25 + {
  26 + switch ($mode) {
  27 + case 0:
  28 + if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) {
  29 + $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
  30 + $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration'));
  31 + } else {
  32 + throw new \ErrorException('Ошибка кеша');
  33 + }
  34 + break;
  35 +
  36 + case 1:
  37 + Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
  38 + // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
  39 + Yii::$app->getCache()->set('parser_configuration', serialize($configuration), 1800);
  40 + break;
  41 +
  42 + default:
  43 + if (Yii::$app->getCache()->exists('parser_data'))
  44 + Yii::$app->getCache()->delete('parser_data');
  45 +
  46 + if (Yii::$app->getCache()->exists('parser_configuration'))
  47 + Yii::$app->getCache()->delete('parser_configuration');
  48 + }
  49 +
  50 + }
  51 +
  52 + public function renderResultView($data)
  53 + {
  54 + $provider = new ArrayDataProvider([
  55 + 'allModels' => $data,
  56 + 'pagination' => [
  57 + 'pageSize' => 10,
  58 + ],
  59 + ]);
  60 +
  61 + // создадим модель на столько реквизитов сколько колонок в отпарсенном файле
  62 + $last_index = end(array_flip($data[0]));
  63 + $header_counts = $last_index + 1;
  64 + $header_model = DynamicFormHelper::CreateDynamicModel($header_counts);
  65 +
  66 + // соберем массив данных из которых будет пользователь выбирать значения в конструкторе (выпадающий список)
  67 + $basicColumns = $this->getBasicColumns();
  68 +
  69 + return $this->render('results',
  70 + ['model' => $data,
  71 + 'header_model' => $header_model,
  72 + // список колонок для выбора
  73 + 'basic_column' => $basicColumns,
  74 + 'dataProvider' => $provider]);
  75 +
  76 + }
  77 +
  78 + public function throwStringErrorException( $model , $exception, $errors_str = '' )
  79 + {
  80 + foreach ( $model->getErrors() as $error )
  81 + {
  82 + $errors_str .= ' ' . implode( array_values( $error ) );
  83 + }
  84 +
  85 + throw new $exception( $errors_str );
  86 + }
  87 +
  88 + }
0 89 \ No newline at end of file
... ...
backend/controllers/CrossingUploadController.php
... ... @@ -10,6 +10,8 @@ namespace backend\controllers;
10 10  
11 11 use backend\components\base\BaseController;
12 12 use common\components\CustomArrayHelper;
  13 +use common\components\exceptions\CrossParsingException;
  14 +use yii\base\Exception;
13 15 use yii\data\ArrayDataProvider;
14 16 use yii\filters\VerbFilter;
15 17 use yii\filters\AccessControl;
... ... @@ -19,12 +21,13 @@ use common\components\parsers\DynamicFormHelper;
19 21 use yii\web\UploadedFile;
20 22 use common\components\ModelArrayValidator;
21 23 use \Yii;
  24 +use backend\components\traits\ParserTrait;
22 25  
23 26 class CrossingUploadController extends BaseController
24 27 {
  28 + use ParserTrait;
25 29 public $layout = "/column";
26 30  
27   -
28 31 /**
29 32 * @inheritdoc
30 33 */
... ... @@ -35,7 +38,7 @@ class CrossingUploadController extends BaseController
35 38 'class' => AccessControl::className(),
36 39 'rules' => [
37 40 [
38   - 'actions' => ['result', 'index', 'write'],
  41 + 'actions' => ['result', 'index', 'write', 'error'],
39 42 'allow' => true,
40 43 'roles' => ['@'],
41 44 ],
... ... @@ -50,18 +53,6 @@ class CrossingUploadController extends BaseController
50 53 ];
51 54 }
52 55  
53   - /**
54   - * @inheritdoc
55   - */
56   - public function actions()
57   - {
58   - return [
59   - 'error' => [
60   - 'class' => 'yii\web\ErrorAction',
61   - ],
62   - ];
63   - }
64   -
65 56  
66 57 public function actionIndex()
67 58 {
... ... @@ -69,63 +60,56 @@ class CrossingUploadController extends BaseController
69 60 return $this->render('index', ['model' => $model]);
70 61 }
71 62  
  63 +
72 64 public function actionResult()
73 65 {
74 66 $model = new UploadFileCrossingForm();
75 67 $data = [];
76   - if ($model->load(Yii::$app->request->post())) {
  68 + if ( $model->load(Yii::$app->request->post()) ) {
77 69 $model->file = UploadedFile::getInstance($model, 'file');
78   - if ($model->validate()) {
  70 +
  71 + if ( $model->validate() ) {
79 72 $file_name = $model->file->name;
80 73 $model->file_path = Yii::getAlias('@temp_upload') . '/' . $file_name;
81 74 $model->file->saveAs($model->file_path);
82 75 //запускаем парсинг
83 76 $data = $model->readFile();
84 77 // сохраняем в кеш отпарсенные даные
85   - $this->parserCacheHandler( 1, $data, $model );
86   - } else if (Yii::$app->getCache()->get('parser_data')) {
87   - $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
  78 + $this->parserCacheHandler( 1, $data, $model );
  79 + } else {
  80 + // не прошла валидация формы загрузки файлов
  81 + $errors_str = "Ошибка загрузки файла. ";
  82 + $this->throwStringErrorException( $model , new CrossParsingException( $errors_str ) );
88 83 }
89   - $provider = new ArrayDataProvider([
90   - 'allModels' => $data,
91   - 'pagination' => [
92   - 'pageSize' => 10,
93   - ],
94   - ]);
95   -
96   - // создадим модель на столько реквизитов сколько колонок в отпарсенном файле
97   - $last_index = end(array_flip($data[0]));
98   - $header_counts = $last_index + 1;
99   - $header_model = DynamicFormHelper::CreateDynamicModel($header_counts);
100   -
101   - // соберем массив данных из которых будет пользователь выбирать значения в конструкторе (выпадающий список)
102   - $basicColumns = $this->getBasicColumns();
103   -
104   - return $this->render('results',
105   - ['model' => $data,
106   - 'header_model' => $header_model,
107   - // список колонок для выбора
108   - 'basic_column' => $basicColumns,
109   - 'dataProvider' => $provider]);
  84 +
  85 + } else if ( Yii::$app->getCache()->get('parser_data') ) {
  86 +
  87 + $data = json_decode( Yii::$app->getCache()->get('parser_data'), true );
  88 +
110 89 }
  90 + // сборка динамической модели и её рендеринг
  91 + return $this->renderResultView( $data );
111 92 }
112 93  
113 94 public function actionWrite()
114 95 {
  96 + set_time_limit(600);
115 97 //получим колонки которые выбрал пользователь
116 98 $arr_attributes = Yii::$app->request->post()['DynamicModel'];
117 99 //соберем модель по полученным данным
118 100 $model = DynamicFormHelper::CreateDynamicModel($arr_attributes);
119 101 $crosses_model = new DetailsCrosses();
  102 + $arr_keys = array_keys($this->getBasicColumns());
  103 +
120 104 //добавим правила валидации (колонки должны быть те что в модели)
121 105 foreach ($arr_attributes as $key => $value) {
122   - $model->addRule($key, 'in', [ 'range' => array_keys( $this->getBasicColumns() ) ]);
  106 + $model->addRule($key, 'in', ['range' => $arr_keys]);
123 107 }
124 108 // установим режим проверки обязательных полей
125 109 $crosses_model->setScenario('form_upload_validation');
126   - $model_validator = new ModelArrayValidator( $crosses_model );
  110 + $model_validator = new ModelArrayValidator($crosses_model);
127 111 // провалидируем выбранные колонки
128   - if ( $model->validate() && $model_validator->validateRow( array_flip( $arr_attributes ) ) ) {
  112 + if ( $model->validate() && $model_validator->validateRow( array_flip( $arr_attributes ) ) ) {
129 113  
130 114 // валидация успешна у нас есть соответсвие колонок, преобразуем в массив данное соответсвие для дальнейшей работы
131 115 $arr = $model->toArray();
... ... @@ -135,7 +119,7 @@ class CrossingUploadController extends BaseController
135 119  
136 120 // соотнесем отпарсенные данные с соответствием полученным от пользователя
137 121 // для этого преобразуем массив отпарсенных данных - назначим ключи согласно соответствию
138   - $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_');
  122 + $data = CustomArrayHelper::createAssocArray( $data, $arr, 'attr_' );
139 123  
140 124 // запустим конвертер над над данными
141 125 $data = $this->convertDataByConfiguration( $data, $configuration );
... ... @@ -144,31 +128,33 @@ class CrossingUploadController extends BaseController
144 128 $crosses_model->setScenario('default');
145 129 $data = $model_validator->validate( $data );
146 130 $msg = $model_validator->getMassage();
147   - $type_msg = $model_validator->hasError() ? 'warning' : 'success';
  131 + $type_msg = $model_validator->hasError() ? 'warning' : 'success';
148 132 $model_validator->close();
149 133  
150   - $data = $this->reverseCrosses( $data );
  134 + $data = $this->reverseCrosses($data);
  135 +
  136 + try {
  137 + if ($crosses_model->ManualInsertWithIgnore( $data )) {
151 138  
152   - if ( $crosses_model->ManualInsertWithIgnore( $data ) ) {
  139 + // очистим кеш
  140 + $this->parserCacheHandler(2);
153 141  
154   - // очистим кеш
155   - $this->parserCacheHandler( 2 );
  142 + if (file_exists($configuration['file_path']))
  143 + unlink($configuration['file_path']);
156 144  
157   - if ( file_exists($configuration['file_path']) )
158   - unlink( $configuration['file_path'] );
  145 + Yii::$app->session->setFlash($type_msg, $msg);
  146 + return $this->render('index', ['model' => $configuration]);
159 147  
160   - Yii::$app->session->setFlash( $type_msg, $msg );
161   - return $this->render('index', ['model' => $configuration]);
  148 + }
  149 + } catch (Exception $e) {
162 150  
  151 + new CrossParsingException( $e->getMessage() );
163 152 }
164 153  
165 154 } else {
166 155 // не прошла валидация формы загрузки файлов
167 156 $errors_str = "Ошибка валидации формы загрузки файлов. ";
168   - foreach ($crosses_model->getErrors() as $error) {
169   - $errors_str .= implode(array_values($error));
170   - }
171   - throw new \ErrorException($errors_str);
  157 + $this->throwStringErrorException( $crosses_model , 'common\components\exceptions\CrossParsingException', $errors_str );
172 158 }
173 159 }
174 160  
... ... @@ -183,7 +169,8 @@ class CrossingUploadController extends BaseController
183 169  
184 170 }
185 171  
186   - protected function convertDataByConfiguration( $data, $configuration ){
  172 + protected function convertDataByConfiguration($data, $configuration)
  173 + {
187 174  
188 175 // доп. опции для парсера - удаление префикса в артикулах
189 176 $options['mode'] = 'crosses';
... ... @@ -195,38 +182,38 @@ class CrossingUploadController extends BaseController
195 182 $fields[] = 'CROSS_ARTICLE';
196 183 }
197 184 if ($fields) {
198   - $options ['converter_conf']['configuration'] = ["article" => $fields,
  185 + $options ['converter_conf']['configuration'] = ["article" => $fields,
199 186 "string" => ['ARTICLE', 'CROSS_ARTICLE'],];
200 187 } else {
201   - $options ['converter_conf']['configuration'] = ["string" => ['ARTICLE', 'CROSS_ARTICLE'],];
  188 + $options ['converter_conf']['configuration'] = ["string" => ['ARTICLE', 'CROSS_ARTICLE'],];
202 189 }
203 190  
204 191 // получим базовую конфигурацию и объеденим её с той что образовалась после выбора пользователем настроек
205   - $basic_options = Yii::$app->multiparser->getConfiguration( 'csv', 'crosses' );
206   - $options = array_merge_recursive( $options, $basic_options );
  192 + $basic_options = Yii::$app->multiparser->getConfiguration('csv', 'crosses');
  193 + $options = array_merge_recursive($options, $basic_options);
207 194  
208   - foreach ( $data as &$row ) {
209   - $row = Yii::$app->converter->convertByConfiguration( $row, $options['converter_conf'] );
  195 + foreach ($data as &$row) {
  196 + $row = Yii::$app->converter->convertByConfiguration($row, $options['converter_conf']);
210 197 }
211 198  
212 199 return $data;
213 200  
214 201 }
215 202  
216   - protected function reverseCrosses ( $data )
  203 + protected function reverseCrosses($data)
217 204 {
218 205 // для доп массива обратных строк
219   - $i = count( $data ) - 1;
  206 + $i = count($data) - 1;
220 207 $reverse_data = [];
221   - foreach ( $data as &$row ) {
  208 + foreach ($data as &$row) {
222 209 // нужно добавить обратную строку по кроссам
223   - $reverse_data[ $i ]['ARTICLE'] = $row['CROSS_ARTICLE'];
224   - $reverse_data[ $i ]['CROSS_ARTICLE'] = $row['ARTICLE'];
225   - $reverse_data[ $i ]['BRAND'] = $row['CROSS_BRAND'];
226   - $reverse_data[ $i ]['CROSS_BRAND'] = $row['BRAND'];
  210 + $reverse_data[$i]['ARTICLE'] = $row['CROSS_ARTICLE'];
  211 + $reverse_data[$i]['CROSS_ARTICLE'] = $row['ARTICLE'];
  212 + $reverse_data[$i]['BRAND'] = $row['CROSS_BRAND'];
  213 + $reverse_data[$i]['CROSS_BRAND'] = $row['BRAND'];
227 214 $i++;
228 215 }
229   - $data = array_merge( $data, $reverse_data );
  216 + $data = array_merge($data, $reverse_data);
230 217  
231 218 return $data;
232 219 }
... ...
backend/controllers/ParserController.php
... ... @@ -2,9 +2,9 @@
2 2 namespace backend\controllers;
3 3  
4 4 use backend\models\Details;
5   -use common\components\archives\ArchiveCreator;
6   -use common\components\mail\ImapMailReader;
7   -use common\components\mail\MailAttachmentsSaver;
  5 +use common\components\exceptions\CrossParsingException;
  6 +use common\components\exceptions\PriceParsingException;
  7 +use common\components\exceptions\RgParsingException;
8 8 use common\components\ModelArrayValidator;
9 9 use common\components\parsers\MailParser;
10 10 use Yii;
... ... @@ -20,14 +20,15 @@ use backend\models\ImportersFiles;
20 20 use backend\models\Importers;
21 21 use yii\base\ErrorException;
22 22 use common\components\PriceWriter;
23   -use common\components\CustomVarDamp;
24 23 use common\components\CustomArrayHelper;
  24 +use backend\components\traits\ParserTrait;
25 25  
26 26 /**
27 27 * Parser controller
28 28 */
29 29 class ParserController extends BaseController
30 30 {
  31 + use ParserTrait;
31 32 public $layout = "/column";
32 33  
33 34 /**
... ... @@ -55,7 +56,6 @@ class ParserController extends BaseController
55 56 }
56 57  
57 58  
58   -
59 59 public function actionIndex($mode = 0)
60 60 {
61 61 $model = new UploadFileParsingForm();
... ... @@ -67,8 +67,19 @@ class ParserController extends BaseController
67 67 public function actionError()
68 68 {
69 69 $exception = Yii::$app->errorHandler->exception;
70   - if ($exception !== null) {
71   - return $this->render('error', ['message' => $exception->getMessage()]);
  70 + $action_name = '';
  71 +
  72 + if ( $exception instanceof CrossParsingException ) {
  73 + $action_name = ['crossing-upload/result'];
  74 + }elseif ( $exception instanceof PriceParsingException ) {
  75 + $action_name = ['results'];
  76 + }elseif ( $exception instanceof RgParsingException ) {
  77 + $action_name = ['rg-grup/results'];
  78 + }
  79 +
  80 + if ( $exception !== null ) {
  81 + $msg = $exception->getMessage();
  82 + return $this->render( 'error', [ 'message' => $msg, 'action_name' => $action_name ] );
72 83 }
73 84 }
74 85  
... ... @@ -89,44 +100,19 @@ class ParserController extends BaseController
89 100 $model->success = true;
90 101 return $this->render('index', ['model' => $model]);
91 102 }
92   -
93 103 // === ручная загрузка ===========
94 104 //запускаем парсинг
95 105 $data = $this->parseDataFromFile( $files_model, $model );
96 106  
97 107 } else {
98 108 // не прошла валидация форма загрузки файлов
99   - $errors_str = '';
100   - foreach ($model->getErrors() as $error) {
101   - $errors_str .= implode( array_values($error) );
102   - }
103   - throw new ErrorException( $errors_str );
  109 + $this->throwStringErrorException( $model , 'common\components\exceptions\PriceParsingException' );
104 110 }
105 111 // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные
106 112 } else if ( Yii::$app->getCache()->get('parser_data') ) {
107   -
108 113 $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
109   -
110 114 }
111   -
112   - $provider = new ArrayDataProvider([
113   - 'allModels' => $data,
114   - 'pagination' => [
115   - 'pageSize' => 10,
116   - ],
117   - ]);
118   -
119   - $last_index = end( array_flip( $data[0] ) );
120   - $header_counts = $last_index + 1;
121   - //формируем заголовок для пользователя, где он сможет выбрать соответсвие полей (выпадающий список)
122   - $header_model = DynamicFormHelper::CreateDynamicModel( $header_counts );
123   -
124   - return $this->render('results',
125   - ['model' => $data,
126   - 'header_model' => $header_model,
127   - // список колонок для выбора
128   - 'basic_column' => Yii::$app->multiparser->getConfiguration('csv', 'basic_column'),
129   - 'dataProvider' => $provider]);
  115 + return $this->renderResultView( $data );
130 116 }
131 117  
132 118 public function actionWrite()
... ... @@ -170,19 +156,14 @@ class ParserController extends BaseController
170 156 unlink($configuration['file_path']);
171 157 $validated_type_msg = $writer->hasValidationError() ? 'warning' : 'success';
172 158 Yii::$app->session->setFlash( $validated_type_msg, $writer->getValidatedMsg() );
173   - return $this->render('index', ['model' => $configuration]);
  159 + return $this->render('index', ['model' => $configuration]);
174 160  
175 161 };
176 162  
177 163 } else {
178 164 // не прошла валидация формы загрузки файлов
179 165 $errors_str = "Ошибка валидации формы загрузки файлов. ";
180   -
181   - foreach ( $details_model->getErrors() as $error ) {
182   - $errors_str .= implode(array_values($error));
183   - }
184   -
185   - throw new \ErrorException($errors_str);
  166 + $this->throwStringErrorException( $details_model , 'common\components\exceptions\PriceParsingException', $errors_str );
186 167 }
187 168  
188 169 }
... ... @@ -313,4 +294,9 @@ class ParserController extends BaseController
313 294 return $data;
314 295 }
315 296  
  297 + protected function getBasicColumns()
  298 + {
  299 + return Yii::$app->multiparser->getConfiguration('csv', 'basic_column');
  300 +
  301 + }
316 302 }
... ...
backend/controllers/RgGrupController.php
... ... @@ -10,7 +10,7 @@ namespace backend\controllers;
10 10  
11 11 use backend\components\base\BaseController;
12 12 use backend\models\UploadFileRgForm;
13   -use common\components\CustomVarDamp;
  13 +use common\components\exceptions\RgParsingException;
14 14 use common\components\ModelArrayValidator;
15 15 use common\components\parsers\MailAttachmentsSaver;
16 16 use common\models\Margins;
... ... @@ -21,9 +21,11 @@ use yii\web\UploadedFile;
21 21 use yii\data\ArrayDataProvider;
22 22 use common\components\parsers\DynamicFormHelper;
23 23 use common\components\CustomArrayHelper;
  24 +use backend\components\traits\ParserTrait;
24 25  
25 26 class RgGrupController extends BaseController
26 27 {
  28 + use ParserTrait;
27 29 public $layout = "/column";
28 30  
29 31 /**
... ... @@ -66,25 +68,15 @@ class RgGrupController extends BaseController
66 68 $model->file = UploadedFile::getInstance($model, 'file');
67 69 // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся)
68 70 if ($model->validate()) {
69   -
70 71 $model->file_path = Yii::getAlias('@manual_upload') . '/' . $model->file->name;
71 72 $model->file->saveAs($model->file_path);
72   -
73 73 //запускаем парсинг
74 74 $data = $model->readFile();
75 75 // сохраняем в кеш отпарсенные даные
76   - Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
77   - // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
78   - Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800);
79   -
80   -
  76 + $this->parserCacheHandler(1, $data, $model);
81 77 } else {
82 78 // не прошла валидация форма загрузки файлов
83   - $errors_str = '';
84   - foreach ($model->getErrors() as $error) {
85   - $errors_str .= implode(array_values($error));
86   - }
87   - throw new \ErrorException($errors_str);
  79 + $this->throwStringErrorException($model, 'common\components\exceptions\RgParsingException');
88 80 }
89 81 // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные
90 82 } else if (Yii::$app->getCache()->get('parser_data')) {
... ... @@ -92,26 +84,8 @@ class RgGrupController extends BaseController
92 84 $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
93 85  
94 86 }
95   - $provider = new ArrayDataProvider([
96   - 'allModels' => $data,
97   - 'pagination' => [
98   - 'pageSize' => 10,
99   - ],
100   - ]);
101   - // создадим модель на столько реквизитов сколько колонок в отпарсенном файле
102   - $last_index = end(array_flip($data[0]));
103   - $header_counts = $last_index + 1;
104   - $header_model = DynamicFormHelper::CreateDynamicModel($header_counts);
105   -
106   - // соберем массив данных из которых будет пользователь выбирать значения в конструкторе (выпадающий список)
107   - $header_array = Margins::getHeader();
108   -
109   - return $this->render('results',
110   - ['model' => $data,
111   - 'header_model' => $header_model,
112   - // список колонок для выбора
113   - 'basic_column' => $header_array,
114   - 'dataProvider' => $provider]);
  87 + // сборка динамической модели и её рендеринг
  88 + return $this->renderResultView($data);
115 89 }
116 90  
117 91 public function actionWrite()
... ... @@ -127,20 +101,15 @@ class RgGrupController extends BaseController
127 101 }
128 102 // установим режим проверки обязательных полей
129 103 $margin_model->setScenario('form_upload_validation');
130   - $model_validator = new ModelArrayValidator( $margin_model );
  104 + $model_validator = new ModelArrayValidator($margin_model);
131 105 // провалидируем выбранные колонки
132   - if ( $model->validate() && $model_validator->validateRow( array_flip( $arr_attributes ) )) {
  106 + if ($model->validate() && $model_validator->validateRow($this->getAttributesForValidate($arr_attributes))) {
133 107  
134 108 // валидация успешна у нас есть соответсвие колонок, преобразуем в массив данное соответсвие для дальнейшей работы
135 109 $arr = $model->toArray();
136 110  
137 111 // получим данные из кеша
138   - if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) {
139   - $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
140   - $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration'));
141   - } else {
142   - throw new \ErrorException('Ошибка кеша');
143   - }
  112 + $this->parserCacheHandler(0, $data, $configuration);
144 113  
145 114 array_walk($arr, function (&$val) {
146 115 $val = '!' . $val;
... ... @@ -151,63 +120,85 @@ class RgGrupController extends BaseController
151 120 $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_');
152 121  
153 122 // в первой строке у нас заголовки - уберем
154   - unset( $data[0] );
  123 + unset($data[0]);
155 124 // подготовим данные для записи в таблицу w_margins_groups
156   - $arr_values = [];
157   - $group = '';
158   - $importer_id = $configuration['importer_id'];
159   - foreach ($data as $row_data) {
160   -
161   - if (isset($row_data['!group'])) {
162   - $group = $row_data['!group'];
163   - unset($row_data['!group']);
164   - }
165   - if (isset($row_data['!_null'])) {
166   - unset($row_data['!_null']);
167   - }
168   -
169   - foreach ($row_data as $key => $value) {
170   - if ($group)
171   - $row['group'] = trim($group);
  125 + $data = $this->convertDataByConfiguration($data, $configuration);
172 126  
173   - $row['importer_id'] = trim($importer_id);
174   - $row['margin_id'] = ltrim($key, '!');
175   - $row['koef'] = \Yii::$app->converter->convertTo('float', $value, ['precision' => 6]);
176   -
177   - $arr_values[] = $row;
178   - }
179   - }
180   - unset($data);
181 127 // валидируем отпарсенные данные моделью в которую будем записывать
182 128 $margin_model->setScenario('default');
183   - $arr_values = $model_validator->validate( $arr_values );
  129 + $data = $model_validator->validate($data);
184 130 $msg = $model_validator->getMassage();
185   - $type_msg = $model_validator->hasError() ? 'warning' : 'success';
  131 + $type_msg = $model_validator->hasError() ? 'warning' : 'success';
186 132 $model_validator->close();
187 133 // сохраним подготовленные данные
188   - if ( !empty( $arr_values ) ) {
189   - MarginsGroups::ManualInsertWithUpdate( $arr_values, [ 'group','importer_id','margin_id' ] );
190   - // все прошло успешно - очищаем кеш
191   - Yii::$app->getCache()->delete('parser_data');
192   - Yii::$app->getCache()->delete('parser_configuration');
193   -
194   - if (file_exists($configuration['file_path']))
195   - unlink($configuration['file_path']);
196   - }
  134 + if (!empty($data)) {
  135 + if (MarginsGroups::ManualInsertWithUpdate($data, ['group', 'importer_id', 'margin_id'])) {
  136 + // все прошло успешно - очищаем кеш
  137 + $this->parserCacheHandler(2);
197 138  
  139 + if (file_exists($configuration['file_path']))
  140 + unlink($configuration['file_path']);
  141 + }
198 142  
199   - Yii::$app->session->setFlash( $type_msg, $msg );
  143 + }
  144 + Yii::$app->session->setFlash($type_msg, $msg);
200 145 return $this->render('index', ['model' => $configuration]);
201 146  
202 147 } else {
203 148 // не прошла валидация формы загрузки файлов
204 149 $errors_str = "Ошибка валидации формы загрузки файлов. ";
205   - foreach ($margin_model->getErrors() as $error) {
206   - $errors_str .= implode(array_values($error));
  150 + $this->throwStringErrorException($margin_model, 'common\components\exceptions\RgParsingException', $errors_str);
  151 + }
  152 + }
  153 +
  154 + protected function convertDataByConfiguration($data, $configuration)
  155 + {
  156 + $arr_values = [];
  157 + $group = '';
  158 + $importer_id = $configuration['importer_id'];
  159 + foreach ($data as $row_data) {
  160 +
  161 + if (isset($row_data['!group'])) {
  162 + $group = $row_data['!group'];
  163 + unset($row_data['!group']);
  164 + }
  165 + if (isset($row_data['!_null'])) {
  166 + unset($row_data['!_null']);
  167 + }
  168 +
  169 + foreach ($row_data as $key => $value) {
  170 + if ($group)
  171 + $row['group'] = trim($group);
  172 +
  173 + $row['importer_id'] = trim($importer_id);
  174 + $row['margin_id'] = ltrim($key, '!');
  175 + $row['koef'] = \Yii::$app->converter->convertTo('float', $value, ['precision' => 6]);
  176 +
  177 + $arr_values[] = $row;
207 178 }
208   - throw new \ErrorException($errors_str);
209 179 }
  180 + return $arr_values;
  181 + }
  182 +
  183 + protected function getBasicColumns()
  184 + {
  185 + return Margins::getHeader();
  186 + }
  187 +
  188 + // подготавливает массив для валидирования моделью - MarginsGroups
  189 + // для этого меняем выбранные значения именем поля - margin_id
  190 + protected function getAttributesForValidate($arr)
  191 + {
  192 + $base_columns_arr = Margins::find()->select('id')->asArray()->all();
  193 + $base_columns_arr = array_column($base_columns_arr,'id');
  194 +
  195 + array_walk( $arr, function (&$value, $key, $base_columns_arr) {
  196 + if (in_array( $value, $base_columns_arr )){
  197 + $value = 'margin_id';
  198 + }
  199 + }, $base_columns_arr );
210 200  
  201 + return array_flip( $arr );
211 202 }
212 203  
213 204 // public function actionMail()
... ...
backend/views/crossing-upload/index.php
... ... @@ -14,9 +14,10 @@ use yii\helpers\ArrayHelper;
14 14 <?= $form->field($model, 'delete_prefix1')->checkbox() ?>
15 15 <?= $form->field($model, 'delete_prefix2')->checkbox() ?>
16 16 <?= $form->field($model, 'file')->fileInput()->label(false) ?>
  17 + <?= Html::tag('p','допустимый формат - csv') ?>
17 18  
18 19 <div class="form-group">
19   - <?= Html::submitButton(Yii::t( 'app', 'Прочитать' ), ['class' => 'btn btn-primary']) ?>
  20 + <?= Html::submitButton(Yii::t( 'app', 'Выполнить' ), ['class' => 'btn btn-primary']) ?>
20 21 </div>
21 22  
22 23 <?php ActiveForm::end();
... ...
backend/views/parser/error.php
... ... @@ -7,14 +7,21 @@
7 7  
8 8 use yii\helpers\Html;
9 9  
10   -$this->title = $name;
  10 +$this->title = 'Ошибка';
11 11 ?>
12 12 <div class="site-error">
13 13  
14 14 <h1><?= Html::encode($this->title) ?></h1>
15 15  
16 16 <div class="alert alert-danger">
17   - <?= nl2br(Html::encode($message)) ?>
  17 + <?php
  18 + echo nl2br(Html::encode($message));
  19 + if ( $action_name ) {
  20 + echo "<br/>";
  21 + echo "<br/>";
  22 + echo Html::a('Вернуться', $action_name, ['class' => 'btn btn-info', 'name' => 'Return',]);
  23 + }
  24 + ?>
18 25 </div>
19 26  
20 27 <p>
... ...
backend/views/rg-grup/index.php
... ... @@ -4,7 +4,7 @@ use yii\helpers\Html;
4 4 use backend\models\Importers;
5 5 use yii\helpers\ArrayHelper;
6 6  
7   -$button_label = 'Прочитать';
  7 +$button_label = 'Выполнить';
8 8  
9 9  
10 10 ?>
... ... @@ -21,6 +21,8 @@ $button_label = &#39;Прочитать&#39;;
21 21 <?= $form->field($model, 'file')->fileInput()->label(false) ?>
22 22 <div class="form-group">
23 23 <?= Html::submitButton(Yii::t( 'app', $button_label ), ['class' => 'btn btn-primary']) ?>
  24 + <?= Html::tag( 'p', 'допустимый формат xlsx') ?>
  25 +
24 26 </div>
25 27  
26 28 <?php ActiveForm::end();
... ...
backend/views/rg-grup/results.php
... ... @@ -27,6 +27,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
27 27 </div>
28 28  
29 29 <?php ActiveForm::end() ?>
30   - <?= Html::a('Вернуться', ['rg-grup/index'], ['class' => 'btn btn-primary', 'name' => 'Return',]) ?>
  30 + <?= Html::a('Отмена', ['rg-grup/index'], ['class' => 'btn btn-primary', 'name' => 'Return',]) ?>
31 31  
32 32 </div>
33 33 \ No newline at end of file
... ...
common/components/exceptions/CrossParsingException.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 30.11.2015
  6 + * Time: 17:36
  7 + */
  8 +
  9 +namespace common\components\exceptions;
  10 +
  11 +
  12 +use yii\base\UserException;
  13 +
  14 +class CrossParsingException extends UserException {
  15 +
  16 +}
0 17 \ No newline at end of file
... ...
common/components/exceptions/PriceParsingException.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 30.11.2015
  6 + * Time: 17:36
  7 + */
  8 +
  9 +namespace common\components\exceptions;
  10 +
  11 +
  12 +use yii\base\UserException;
  13 +
  14 +class PriceParsingException extends UserException {
  15 +
  16 +}
0 17 \ No newline at end of file
... ...
common/components/exceptions/RgParsingException.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 30.11.2015
  6 + * Time: 17:36
  7 + */
  8 +
  9 +namespace common\components\exceptions;
  10 +
  11 +
  12 +use yii\base\UserException;
  13 +
  14 +class RgParsingException extends UserException {
  15 +
  16 +}
0 17 \ No newline at end of file
... ...
common/models/MarginsGroups.php
... ... @@ -31,8 +31,9 @@ class MarginsGroups extends \yii\db\ActiveRecord
31 31 public function rules()
32 32 {
33 33 return [
34   - [['importer_id', 'margin_id', 'koef'], 'required', 'on' => 'default'],
35   - ['group', 'required', 'on' => ['default','form_upload_validation']],
  34 + [['group','importer_id', 'margin_id', 'koef'], 'required', 'on' => 'default'],
  35 + [['margin_id'], 'required', 'on' => 'form_upload_validation', 'message' => 'Должен быть указан хотя бы один тип цен.'],
  36 + [['group'], 'required', 'on' => 'form_upload_validation', 'message' => 'Группа RG - обязательное поле.'],
36 37 [['importer_id', 'margin_id'], 'integer' , 'on' => 'default'],
37 38 [['koef'], 'number' , 'on' => 'default'],
38 39 [['timestamp'], 'safe' , 'on' => 'default'],
... ... @@ -83,7 +84,6 @@ class MarginsGroups extends \yii\db\ActiveRecord
83 84 //@todo - вынести все ручные инсерты в отдельный класс
84 85 public static function ManualInsertWithUpdate($data, $keys)
85 86 {
86   - // \common\components\CustomVarDamp::dumpAndDie($data);
87 87 $table_name = self::tableName();
88 88 $keys_arr = array_keys($data[0]);
89 89 // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить
... ... @@ -107,9 +107,9 @@ class MarginsGroups extends \yii\db\ActiveRecord
107 107  
108 108 // добавим фрагмент с апдейтом при дубляже
109 109 $query = "{$query_insert} {$query_update}";
110   - // \common\components\CustomVarDamp::dumpAndDie($query);
111 110 Yii::$app->db->createCommand($query)->execute();
112 111  
113 112 }
  113 + return true;
114 114 }
115 115 }
... ...