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,5 +6,15 @@
6 </content> 6 </content>
7 <orderEntry type="inheritedJdk" /> 7 <orderEntry type="inheritedJdk" />
8 <orderEntry type="sourceFolder" forTests="false" /> 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 </component> 19 </component>
10 </module> 20 </module>
11 \ No newline at end of file 21 \ No newline at end of file
.idea/workspace.xml
@@ -2,7 +2,6 @@ @@ -2,7 +2,6 @@
2 <project version="4"> 2 <project version="4">
3 <component name="ChangeListManager"> 3 <component name="ChangeListManager">
4 <list default="true" id="f6bb8ef4-b6f5-4c59-9053-25989736ae66" name="Default" comment=""> 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 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\auto\5648.csv" afterPath="" /> 5 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\auto\5648.csv" afterPath="" />
7 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\manual\Групы VW.xlsx" afterPath="" /> 6 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\manual\Групы VW.xlsx" afterPath="" />
8 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\5648.csv" afterPath="" /> 7 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\5648.csv" afterPath="" />
@@ -21,22 +20,17 @@ @@ -21,22 +20,17 @@
21 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet1.xml" afterPath="" /> 20 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet1.xml" afterPath="" />
22 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet2.xml" afterPath="" /> 21 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet2.xml" afterPath="" />
23 <change type="DELETED" beforePath="C:\xampp\htdocs\ital\storage\parser_data\temp\xlsx\kud0hb7or3133ull44s061thg2\xl\worksheets\sheet3.xml" afterPath="" /> 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 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" afterPath="$PROJECT_DIR$/backend/controllers/CrossingUploadController.php" /> 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 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/ParserController.php" afterPath="$PROJECT_DIR$/backend/controllers/ParserController.php" /> 26 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/ParserController.php" afterPath="$PROJECT_DIR$/backend/controllers/ParserController.php" />
32 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/controllers/RgGrupController.php" afterPath="$PROJECT_DIR$/backend/controllers/RgGrupController.php" /> 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 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/backend/views/rg-grup/results.php" afterPath="$PROJECT_DIR$/backend/views/rg-grup/results.php" /> 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 </list> 34 </list>
41 <ignored path="test-1.artwebua.in.ua.iws" /> 35 <ignored path="test-1.artwebua.in.ua.iws" />
42 <ignored path=".idea/workspace.xml" /> 36 <ignored path=".idea/workspace.xml" />
@@ -177,24 +171,28 @@ @@ -177,24 +171,28 @@
177 </component> 171 </component>
178 <component name="FileEditorManager"> 172 <component name="FileEditorManager">
179 <leaf> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding> 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 </folding> 182 </folding>
188 </state> 183 </state>
189 </provider> 184 </provider>
190 </entry> 185 </entry>
191 </file> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 196 </state>
199 </provider> 197 </provider>
200 </entry> 198 </entry>
@@ -202,20 +200,84 @@ @@ -202,20 +200,84 @@
202 <file leaf-file-name="CustomArrayHelper.php" pinned="false" current-in-tab="false"> 200 <file leaf-file-name="CustomArrayHelper.php" pinned="false" current-in-tab="false">
203 <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php"> 201 <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php">
204 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 205 <folding />
208 </state> 206 </state>
209 </provider> 207 </provider>
210 </entry> 208 </entry>
211 </file> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding> 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 </folding> 281 </folding>
220 </state> 282 </state>
221 </provider> 283 </provider>
@@ -230,16 +292,6 @@ @@ -230,16 +292,6 @@
230 <component name="IdeDocumentHistory"> 292 <component name="IdeDocumentHistory">
231 <option name="CHANGED_PATHS"> 293 <option name="CHANGED_PATHS">
232 <list> 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 <option value="$PROJECT_DIR$/backend/controllers/CartController.php" /> 295 <option value="$PROJECT_DIR$/backend/controllers/CartController.php" />
244 <option value="$PROJECT_DIR$/backend/web/js/cart.js" /> 296 <option value="$PROJECT_DIR$/backend/web/js/cart.js" />
245 <option value="$PROJECT_DIR$/backend/controllers/CurrencyController.php" /> 297 <option value="$PROJECT_DIR$/backend/controllers/CurrencyController.php" />
@@ -253,9 +305,7 @@ @@ -253,9 +305,7 @@
253 <option value="$PROJECT_DIR$/common/models/Currency.php" /> 305 <option value="$PROJECT_DIR$/common/models/Currency.php" />
254 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/ParserValidator.php" /> 306 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/ParserValidator.php" />
255 <option value="$PROJECT_DIR$/backend/views/currency/index.php" /> 307 <option value="$PROJECT_DIR$/backend/views/currency/index.php" />
256 - <option value="$PROJECT_DIR$/backend/components/base/BaseController.php" />  
257 <option value="$PROJECT_DIR$/backend/views/templates/parser_massage.php" /> 308 <option value="$PROJECT_DIR$/backend/views/templates/parser_massage.php" />
258 - <option value="$PROJECT_DIR$/backend/views/crossing-upload/index.php" />  
259 <option value="$PROJECT_DIR$/common/components/ModelArrayValidator.php" /> 309 <option value="$PROJECT_DIR$/common/components/ModelArrayValidator.php" />
260 <option value="$PROJECT_DIR$/backend/models/Details.php" /> 310 <option value="$PROJECT_DIR$/backend/models/Details.php" />
261 <option value="$PROJECT_DIR$/backend/models/DetailsCrosses.php" /> 311 <option value="$PROJECT_DIR$/backend/models/DetailsCrosses.php" />
@@ -263,24 +313,36 @@ @@ -263,24 +313,36 @@
263 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/TableParser.php" /> 313 <option value="$PROJECT_DIR$/vendor/artweb/yii2-multiparser/lib/TableParser.php" />
264 <option value="$PROJECT_DIR$/console/controllers/ParserController.php" /> 314 <option value="$PROJECT_DIR$/console/controllers/ParserController.php" />
265 <option value="$PROJECT_DIR$/console/runtime/logs/parser.log" /> 315 <option value="$PROJECT_DIR$/console/runtime/logs/parser.log" />
266 - <option value="$PROJECT_DIR$/backend/views/rg-grup/index.php" />  
267 <option value="$PROJECT_DIR$/common/components/PriceWriter.php" /> 316 <option value="$PROJECT_DIR$/common/components/PriceWriter.php" />
268 - <option value="$PROJECT_DIR$/common/models/MarginsGroups.php" />  
269 <option value="$PROJECT_DIR$/backend/views/parser/index.php" /> 317 <option value="$PROJECT_DIR$/backend/views/parser/index.php" />
270 <option value="$PROJECT_DIR$/backend/models/Importers.php" /> 318 <option value="$PROJECT_DIR$/backend/models/Importers.php" />
271 <option value="$PROJECT_DIR$/common/components/parsers/Converter.php" /> 319 <option value="$PROJECT_DIR$/common/components/parsers/Converter.php" />
272 <option value="$PROJECT_DIR$/common/components/parsers/config.php" /> 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 <option value="$PROJECT_DIR$/backend/views/parser/results.php" /> 321 <option value="$PROJECT_DIR$/backend/views/parser/results.php" />
278 - <option value="$PROJECT_DIR$/backend/views/rg-grup/results.php" />  
279 <option value="$PROJECT_DIR$/common/components/parsers/CustomConverter.php" /> 322 <option value="$PROJECT_DIR$/common/components/parsers/CustomConverter.php" />
280 <option value="$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php" /> 323 <option value="$PROJECT_DIR$/common/components/parsers/CustomCsvParser.php" />
281 <option value="$PROJECT_DIR$/common/config/main.php" /> 324 <option value="$PROJECT_DIR$/common/config/main.php" />
282 <option value="$PROJECT_DIR$/tests/unit/BaseConverterTest.php" /> 325 <option value="$PROJECT_DIR$/tests/unit/BaseConverterTest.php" />
283 <option value="$PROJECT_DIR$/tests/unit/CrossesParsingTest.php" /> 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 </list> 346 </list>
285 </option> 347 </option>
286 </component> 348 </component>
@@ -333,6 +395,80 @@ @@ -333,6 +395,80 @@
333 <sortByType /> 395 <sortByType />
334 </navigator> 396 </navigator>
335 <panes> 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 <pane id="Scope"> 472 <pane id="Scope">
337 <subPane subId="Default"> 473 <subPane subId="Default">
338 <PATH> 474 <PATH>
@@ -464,126 +600,6 @@ @@ -464,126 +600,6 @@
464 </PATH> 600 </PATH>
465 </subPane> 601 </subPane>
466 </pane> 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 </panes> 603 </panes>
588 </component> 604 </component>
589 <component name="PropertiesComponent"> 605 <component name="PropertiesComponent">
@@ -621,11 +637,11 @@ @@ -621,11 +637,11 @@
621 </component> 637 </component>
622 <component name="RecentsManager"> 638 <component name="RecentsManager">
623 <key name="CopyFile.RECENT_KEYS"> 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 <recent name="C:\xampp\htdocs\ital" /> 642 <recent name="C:\xampp\htdocs\ital" />
625 <recent name="C:\xampp\htdocs\ital\backend\web\js" /> 643 <recent name="C:\xampp\htdocs\ital\backend\web\js" />
626 <recent name="C:\xampp\htdocs\ital\backend\assets" /> 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 </key> 645 </key>
630 <key name="MoveFile.RECENT_KEYS"> 646 <key name="MoveFile.RECENT_KEYS">
631 <recent name="C:\xampp\htdocs\ital\storage" /> 647 <recent name="C:\xampp\htdocs\ital\storage" />
@@ -646,22 +662,19 @@ @@ -646,22 +662,19 @@
646 <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console"> 662 <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console">
647 <method /> 663 <method />
648 </configuration> 664 </configuration>
  665 + <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
  666 + <method />
  667 + </configuration>
649 <configuration default="true" type="com.intellij.database.run.ConsoleRunConfigurationType" factoryName="Query Language Console"> 668 <configuration default="true" type="com.intellij.database.run.ConsoleRunConfigurationType" factoryName="Query Language Console">
650 <option name="VM_PARAMETERS" value="" /> 669 <option name="VM_PARAMETERS" value="" />
651 <option name="USER_CFG_CLASS" /> 670 <option name="USER_CFG_CLASS" />
652 <option name="CONTEXT_PROVIDER" /> 671 <option name="CONTEXT_PROVIDER" />
653 <method /> 672 <method />
654 </configuration> 673 </configuration>
655 - <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">  
656 - <method />  
657 - </configuration>  
658 <configuration default="true" type="PhpBehatConfigurationType" factoryName="Behat"> 674 <configuration default="true" type="PhpBehatConfigurationType" factoryName="Behat">
659 <BehatRunner /> 675 <BehatRunner />
660 <method /> 676 <method />
661 </configuration> 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 <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> 678 <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
666 <node-options /> 679 <node-options />
667 <gulpfile /> 680 <gulpfile />
@@ -671,6 +684,9 @@ @@ -671,6 +684,9 @@
671 <envs /> 684 <envs />
672 <method /> 685 <method />
673 </configuration> 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 <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/"> 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 <RunnerSettings RunnerId="PhpRunner" /> 691 <RunnerSettings RunnerId="PhpRunner" />
676 <RunnerSettings RunnerId="PhpWebAppDebugRunner" /> 692 <RunnerSettings RunnerId="PhpWebAppDebugRunner" />
@@ -745,9 +761,9 @@ @@ -745,9 +761,9 @@
745 <layout> 761 <layout>
746 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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,7 +772,7 @@
756 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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,8 +780,8 @@
764 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 </layout> 786 </layout>
771 <layout-to-restore> 787 <layout-to-restore>
@@ -787,9 +803,9 @@ @@ -787,9 +803,9 @@
787 <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" /> 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 <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" /> 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 <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" /> 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 <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" /> 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 </layout-to-restore> 809 </layout-to-restore>
794 </component> 810 </component>
795 <component name="Vcs.Log.UiProperties"> 811 <component name="Vcs.Log.UiProperties">
@@ -812,426 +828,428 @@ @@ -812,426 +828,428 @@
812 </component> 828 </component>
813 <component name="XDebuggerManager"> 829 <component name="XDebuggerManager">
814 <breakpoint-manager> 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 <breakpoints-dialog> 838 <breakpoints-dialog>
816 <breakpoints-dialog /> 839 <breakpoints-dialog />
817 </breakpoints-dialog> 840 </breakpoints-dialog>
818 - <option name="time" value="224" /> 841 + <option name="time" value="239" />
819 </breakpoint-manager> 842 </breakpoint-manager>
820 <watches-manager> 843 <watches-manager>
821 <configuration name="index.php"> 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 </configuration> 849 </configuration>
825 </watches-manager> 850 </watches-manager>
826 </component> 851 </component>
827 <component name="editorHistoryManager"> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 858 </state>
833 </provider> 859 </provider>
834 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 866 </state>
840 </provider> 867 </provider>
841 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 874 </state>
847 </provider> 875 </provider>
848 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 881 </state>
854 </provider> 882 </provider>
855 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 888 </state>
861 </provider> 889 </provider>
862 </entry> 890 </entry>
863 - <entry file="file://$PROJECT_DIR$/common/models/CartBillsSearch.php"> 891 + <entry file="file://$PROJECT_DIR$/backend/models/UploadFileParsingForm.php">
864 <provider selected="true" editor-type-id="text-editor"> 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 </state> 896 </state>
868 </provider> 897 </provider>
869 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 903 </state>
876 </provider> 904 </provider>
877 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 910 </state>
883 </provider> 911 </provider>
884 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 917 </state>
891 </provider> 918 </provider>
892 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 924 </state>
898 </provider> 925 </provider>
899 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 932 </state>
905 </provider> 933 </provider>
906 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 939 </state>
912 </provider> 940 </provider>
  941 + <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">
  942 + <state />
  943 + </provider>
913 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 949 </state>
920 </provider> 950 </provider>
921 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 956 </state>
927 </provider> 957 </provider>
928 </entry> 958 </entry>
929 - <entry file="file://$PROJECT_DIR$/common/components/ModelArrayValidator.php"> 959 + <entry file="file://$PROJECT_DIR$/backend/views/parser/results.php">
930 <provider selected="true" editor-type-id="text-editor"> 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 </state> 963 </state>
935 </provider> 964 </provider>
936 </entry> 965 </entry>
937 - <entry file="file://$PROJECT_DIR$/backend/models/DetailsCrosses.php"> 966 + <entry file="file://$PROJECT_DIR$/common/components/parsers/CsvParser.php">
938 <provider selected="true" editor-type-id="text-editor"> 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 </state> 970 </state>
943 </provider> 971 </provider>
944 </entry> 972 </entry>
945 - <entry file="file://$PROJECT_DIR$/backend/models/Details.php"> 973 + <entry file="file://$PROJECT_DIR$/common/components/parsers/CustomConverter.php">
946 <provider selected="true" editor-type-id="text-editor"> 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 </state> 977 </state>
951 </provider> 978 </provider>
952 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 984 </state>
959 </provider> 985 </provider>
960 </entry> 986 </entry>
961 - <entry file="file://$PROJECT_DIR$/common/components/PriceWriter.php"> 987 + <entry file="file://$PROJECT_DIR$/common/components/parsers/XlsxParser.php">
962 <provider selected="true" editor-type-id="text-editor"> 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 </state> 991 </state>
969 </provider> 992 </provider>
970 </entry> 993 </entry>
971 - <entry file="file://$PROJECT_DIR$/common/models/MarginsGroups.php"> 994 + <entry file="file://$PROJECT_DIR$/common/config/main.php">
972 <provider selected="true" editor-type-id="text-editor"> 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 </state> 998 </state>
977 </provider> 999 </provider>
978 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1005 </state>
985 </provider> 1006 </provider>
986 </entry> 1007 </entry>
987 - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/validators/FileValidator.php"> 1008 + <entry file="file://$PROJECT_DIR$/storage/.gitignore">
988 <provider selected="true" editor-type-id="text-editor"> 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 <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> 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 <folding /> 1019 <folding />
992 </state> 1020 </state>
993 </provider> 1021 </provider>
994 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1027 <folding />
1000 </state> 1028 </state>
1001 </provider> 1029 </provider>
1002 </entry> 1030 </entry>
1003 - <entry file="file://$PROJECT_DIR$/.htaccess"> 1031 + <entry file="file://$PROJECT_DIR$/tests/unit/CrossesParsingTest.php">
1004 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1035 </state>
1013 </provider> 1036 </provider>
1014 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1042 <folding />
1020 </state> 1043 </state>
1021 </provider> 1044 </provider>
1022 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1050 </state>
1029 </provider> 1051 </provider>
1030 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1057 </state>
1037 </provider> 1058 </provider>
1038 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1064 <folding />
1044 </state> 1065 </state>
1045 </provider> 1066 </provider>
1046 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1072 <folding />
1052 </state> 1073 </state>
1053 </provider> 1074 </provider>
1054 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1080 <folding />
1060 </state> 1081 </state>
1061 </provider> 1082 </provider>
1062 </entry> 1083 </entry>
1063 - <entry file="file://$PROJECT_DIR$/vendor/yiisoft/yii2/db/BaseActiveRecord.php"> 1084 + <entry file="file://$PROJECT_DIR$/.htaccess">
1064 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1088 <folding />
1068 </state> 1089 </state>
1069 </provider> 1090 </provider>
1070 </entry> 1091 </entry>
1071 - <entry file="file://$PROJECT_DIR$/console/controllers/ParserController.php"> 1092 + <entry file="file://$PROJECT_DIR$/backend/components/base/BaseController.php">
1072 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1096 <folding />
1076 </state> 1097 </state>
1077 </provider> 1098 </provider>
1078 </entry> 1099 </entry>
1079 - <entry file="file://$PROJECT_DIR$/backend/models/Importers.php"> 1100 + <entry file="file://$PROJECT_DIR$/common/components/PriceWriter.php">
1080 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1104 <folding />
1084 </state> 1105 </state>
1085 </provider> 1106 </provider>
1086 </entry> 1107 </entry>
1087 - <entry file="file://$PROJECT_DIR$/console/runtime/logs/parser.log"> 1108 + <entry file="file://$PROJECT_DIR$/backend/config/main.php">
1088 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1112 <folding />
1092 </state> 1113 </state>
1093 </provider> 1114 </provider>
1094 - <provider editor-type-id="com.intellij.database.editor.CsvTableFileEditorProvider">  
1095 - <state />  
1096 - </provider>  
1097 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1120 <folding />
1103 </state> 1121 </state>
1104 </provider> 1122 </provider>
1105 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1128 <folding />
1111 </state> 1129 </state>
1112 </provider> 1130 </provider>
1113 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1136 <folding />
1119 </state> 1137 </state>
1120 </provider> 1138 </provider>
1121 </entry> 1139 </entry>
1122 - <entry file="file://$PROJECT_DIR$/backend/controllers/RgGrupController.php"> 1140 + <entry file="file://$PROJECT_DIR$/backend/views/parser/error.php">
1123 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1144 <folding />
1127 </state> 1145 </state>
1128 </provider> 1146 </provider>
1129 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1152 <folding />
1135 </state> 1153 </state>
1136 </provider> 1154 </provider>
1137 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1160 <folding />
1143 </state> 1161 </state>
1144 </provider> 1162 </provider>
1145 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1168 <folding />
1151 </state> 1169 </state>
1152 </provider> 1170 </provider>
1153 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1176 <folding />
1159 </state> 1177 </state>
1160 </provider> 1178 </provider>
1161 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1187 </state>
1168 </provider> 1188 </provider>
1169 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1197 </state>
1176 </provider> 1198 </provider>
1177 </entry> 1199 </entry>
1178 - <entry file="file://$PROJECT_DIR$/common/components/parsers/XlsxParser.php"> 1200 + <entry file="file://$PROJECT_DIR$/common/components/CustomArrayHelper.php">
1179 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1204 <folding />
1183 </state> 1205 </state>
1184 </provider> 1206 </provider>
1185 </entry> 1207 </entry>
1186 - <entry file="file://$PROJECT_DIR$/common/config/main.php"> 1208 + <entry file="file://$PROJECT_DIR$/common/models/MarginsGroups.php">
1187 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1212 <folding />
1191 </state> 1213 </state>
1192 </provider> 1214 </provider>
1193 </entry> 1215 </entry>
1194 - <entry file="file://$PROJECT_DIR$/tests/unit/BaseConverterTest.php"> 1216 + <entry file="file://$PROJECT_DIR$/common/models/Margins.php">
1195 <provider selected="true" editor-type-id="text-editor"> 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 <folding /> 1220 <folding />
1199 </state> 1221 </state>
1200 </provider> 1222 </provider>
1201 </entry> 1223 </entry>
1202 - <entry file="file://$PROJECT_DIR$/backend/controllers/CrossingUploadController.php"> 1224 + <entry file="file://$PROJECT_DIR$/backend/controllers/RgGrupController.php">
1203 <provider selected="true" editor-type-id="text-editor"> 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 <folding> 1228 <folding>
1207 <element signature="e#125#168#0#PHP" expanded="true" /> 1229 <element signature="e#125#168#0#PHP" expanded="true" />
  1230 + <element signature="e#787#1322#0#PHP" expanded="false" />
1208 </folding> 1231 </folding>
1209 </state> 1232 </state>
1210 </provider> 1233 </provider>
1211 </entry> 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 <provider selected="true" editor-type-id="text-editor"> 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 <folding> 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 </folding> 1242 </folding>
1227 </state> 1243 </state>
1228 </provider> 1244 </provider>
1229 </entry> 1245 </entry>
1230 - <entry file="file://$PROJECT_DIR$/storage/.gitignore"> 1246 + <entry file="file://$PROJECT_DIR$/backend/controllers/ParserController.php">
1231 <provider selected="true" editor-type-id="text-editor"> 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 </state> 1253 </state>
1236 </provider> 1254 </provider>
1237 </entry> 1255 </entry>
backend/components/base/BaseController.php
@@ -216,36 +216,5 @@ class BaseController extends Controller { @@ -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 \ No newline at end of file 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 \ No newline at end of file 89 \ No newline at end of file
backend/controllers/CrossingUploadController.php
@@ -10,6 +10,8 @@ namespace backend\controllers; @@ -10,6 +10,8 @@ namespace backend\controllers;
10 10
11 use backend\components\base\BaseController; 11 use backend\components\base\BaseController;
12 use common\components\CustomArrayHelper; 12 use common\components\CustomArrayHelper;
  13 +use common\components\exceptions\CrossParsingException;
  14 +use yii\base\Exception;
13 use yii\data\ArrayDataProvider; 15 use yii\data\ArrayDataProvider;
14 use yii\filters\VerbFilter; 16 use yii\filters\VerbFilter;
15 use yii\filters\AccessControl; 17 use yii\filters\AccessControl;
@@ -19,12 +21,13 @@ use common\components\parsers\DynamicFormHelper; @@ -19,12 +21,13 @@ use common\components\parsers\DynamicFormHelper;
19 use yii\web\UploadedFile; 21 use yii\web\UploadedFile;
20 use common\components\ModelArrayValidator; 22 use common\components\ModelArrayValidator;
21 use \Yii; 23 use \Yii;
  24 +use backend\components\traits\ParserTrait;
22 25
23 class CrossingUploadController extends BaseController 26 class CrossingUploadController extends BaseController
24 { 27 {
  28 + use ParserTrait;
25 public $layout = "/column"; 29 public $layout = "/column";
26 30
27 -  
28 /** 31 /**
29 * @inheritdoc 32 * @inheritdoc
30 */ 33 */
@@ -35,7 +38,7 @@ class CrossingUploadController extends BaseController @@ -35,7 +38,7 @@ class CrossingUploadController extends BaseController
35 'class' => AccessControl::className(), 38 'class' => AccessControl::className(),
36 'rules' => [ 39 'rules' => [
37 [ 40 [
38 - 'actions' => ['result', 'index', 'write'], 41 + 'actions' => ['result', 'index', 'write', 'error'],
39 'allow' => true, 42 'allow' => true,
40 'roles' => ['@'], 43 'roles' => ['@'],
41 ], 44 ],
@@ -50,18 +53,6 @@ class CrossingUploadController extends BaseController @@ -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 public function actionIndex() 57 public function actionIndex()
67 { 58 {
@@ -69,63 +60,56 @@ class CrossingUploadController extends BaseController @@ -69,63 +60,56 @@ class CrossingUploadController extends BaseController
69 return $this->render('index', ['model' => $model]); 60 return $this->render('index', ['model' => $model]);
70 } 61 }
71 62
  63 +
72 public function actionResult() 64 public function actionResult()
73 { 65 {
74 $model = new UploadFileCrossingForm(); 66 $model = new UploadFileCrossingForm();
75 $data = []; 67 $data = [];
76 - if ($model->load(Yii::$app->request->post())) { 68 + if ( $model->load(Yii::$app->request->post()) ) {
77 $model->file = UploadedFile::getInstance($model, 'file'); 69 $model->file = UploadedFile::getInstance($model, 'file');
78 - if ($model->validate()) { 70 +
  71 + if ( $model->validate() ) {
79 $file_name = $model->file->name; 72 $file_name = $model->file->name;
80 $model->file_path = Yii::getAlias('@temp_upload') . '/' . $file_name; 73 $model->file_path = Yii::getAlias('@temp_upload') . '/' . $file_name;
81 $model->file->saveAs($model->file_path); 74 $model->file->saveAs($model->file_path);
82 //запускаем парсинг 75 //запускаем парсинг
83 $data = $model->readFile(); 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 public function actionWrite() 94 public function actionWrite()
114 { 95 {
  96 + set_time_limit(600);
115 //получим колонки которые выбрал пользователь 97 //получим колонки которые выбрал пользователь
116 $arr_attributes = Yii::$app->request->post()['DynamicModel']; 98 $arr_attributes = Yii::$app->request->post()['DynamicModel'];
117 //соберем модель по полученным данным 99 //соберем модель по полученным данным
118 $model = DynamicFormHelper::CreateDynamicModel($arr_attributes); 100 $model = DynamicFormHelper::CreateDynamicModel($arr_attributes);
119 $crosses_model = new DetailsCrosses(); 101 $crosses_model = new DetailsCrosses();
  102 + $arr_keys = array_keys($this->getBasicColumns());
  103 +
120 //добавим правила валидации (колонки должны быть те что в модели) 104 //добавим правила валидации (колонки должны быть те что в модели)
121 foreach ($arr_attributes as $key => $value) { 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 $crosses_model->setScenario('form_upload_validation'); 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 $arr = $model->toArray(); 115 $arr = $model->toArray();
@@ -135,7 +119,7 @@ class CrossingUploadController extends BaseController @@ -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 $data = $this->convertDataByConfiguration( $data, $configuration ); 125 $data = $this->convertDataByConfiguration( $data, $configuration );
@@ -144,31 +128,33 @@ class CrossingUploadController extends BaseController @@ -144,31 +128,33 @@ class CrossingUploadController extends BaseController
144 $crosses_model->setScenario('default'); 128 $crosses_model->setScenario('default');
145 $data = $model_validator->validate( $data ); 129 $data = $model_validator->validate( $data );
146 $msg = $model_validator->getMassage(); 130 $msg = $model_validator->getMassage();
147 - $type_msg = $model_validator->hasError() ? 'warning' : 'success'; 131 + $type_msg = $model_validator->hasError() ? 'warning' : 'success';
148 $model_validator->close(); 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 } else { 154 } else {
166 // не прошла валидация формы загрузки файлов 155 // не прошла валидация формы загрузки файлов
167 $errors_str = "Ошибка валидации формы загрузки файлов. "; 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,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 $options['mode'] = 'crosses'; 176 $options['mode'] = 'crosses';
@@ -195,38 +182,38 @@ class CrossingUploadController extends BaseController @@ -195,38 +182,38 @@ class CrossingUploadController extends BaseController
195 $fields[] = 'CROSS_ARTICLE'; 182 $fields[] = 'CROSS_ARTICLE';
196 } 183 }
197 if ($fields) { 184 if ($fields) {
198 - $options ['converter_conf']['configuration'] = ["article" => $fields, 185 + $options ['converter_conf']['configuration'] = ["article" => $fields,
199 "string" => ['ARTICLE', 'CROSS_ARTICLE'],]; 186 "string" => ['ARTICLE', 'CROSS_ARTICLE'],];
200 } else { 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 return $data; 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 $reverse_data = []; 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 $i++; 214 $i++;
228 } 215 }
229 - $data = array_merge( $data, $reverse_data ); 216 + $data = array_merge($data, $reverse_data);
230 217
231 return $data; 218 return $data;
232 } 219 }
backend/controllers/ParserController.php
@@ -2,9 +2,9 @@ @@ -2,9 +2,9 @@
2 namespace backend\controllers; 2 namespace backend\controllers;
3 3
4 use backend\models\Details; 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 use common\components\ModelArrayValidator; 8 use common\components\ModelArrayValidator;
9 use common\components\parsers\MailParser; 9 use common\components\parsers\MailParser;
10 use Yii; 10 use Yii;
@@ -20,14 +20,15 @@ use backend\models\ImportersFiles; @@ -20,14 +20,15 @@ use backend\models\ImportersFiles;
20 use backend\models\Importers; 20 use backend\models\Importers;
21 use yii\base\ErrorException; 21 use yii\base\ErrorException;
22 use common\components\PriceWriter; 22 use common\components\PriceWriter;
23 -use common\components\CustomVarDamp;  
24 use common\components\CustomArrayHelper; 23 use common\components\CustomArrayHelper;
  24 +use backend\components\traits\ParserTrait;
25 25
26 /** 26 /**
27 * Parser controller 27 * Parser controller
28 */ 28 */
29 class ParserController extends BaseController 29 class ParserController extends BaseController
30 { 30 {
  31 + use ParserTrait;
31 public $layout = "/column"; 32 public $layout = "/column";
32 33
33 /** 34 /**
@@ -55,7 +56,6 @@ class ParserController extends BaseController @@ -55,7 +56,6 @@ class ParserController extends BaseController
55 } 56 }
56 57
57 58
58 -  
59 public function actionIndex($mode = 0) 59 public function actionIndex($mode = 0)
60 { 60 {
61 $model = new UploadFileParsingForm(); 61 $model = new UploadFileParsingForm();
@@ -67,8 +67,19 @@ class ParserController extends BaseController @@ -67,8 +67,19 @@ class ParserController extends BaseController
67 public function actionError() 67 public function actionError()
68 { 68 {
69 $exception = Yii::$app->errorHandler->exception; 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,44 +100,19 @@ class ParserController extends BaseController
89 $model->success = true; 100 $model->success = true;
90 return $this->render('index', ['model' => $model]); 101 return $this->render('index', ['model' => $model]);
91 } 102 }
92 -  
93 // === ручная загрузка =========== 103 // === ручная загрузка ===========
94 //запускаем парсинг 104 //запускаем парсинг
95 $data = $this->parseDataFromFile( $files_model, $model ); 105 $data = $this->parseDataFromFile( $files_model, $model );
96 106
97 } else { 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 } else if ( Yii::$app->getCache()->get('parser_data') ) { 112 } else if ( Yii::$app->getCache()->get('parser_data') ) {
107 -  
108 $data = json_decode(Yii::$app->getCache()->get('parser_data'), true); 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 public function actionWrite() 118 public function actionWrite()
@@ -170,19 +156,14 @@ class ParserController extends BaseController @@ -170,19 +156,14 @@ class ParserController extends BaseController
170 unlink($configuration['file_path']); 156 unlink($configuration['file_path']);
171 $validated_type_msg = $writer->hasValidationError() ? 'warning' : 'success'; 157 $validated_type_msg = $writer->hasValidationError() ? 'warning' : 'success';
172 Yii::$app->session->setFlash( $validated_type_msg, $writer->getValidatedMsg() ); 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 } else { 163 } else {
178 // не прошла валидация формы загрузки файлов 164 // не прошла валидация формы загрузки файлов
179 $errors_str = "Ошибка валидации формы загрузки файлов. "; 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,4 +294,9 @@ class ParserController extends BaseController
313 return $data; 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,7 +10,7 @@ namespace backend\controllers;
10 10
11 use backend\components\base\BaseController; 11 use backend\components\base\BaseController;
12 use backend\models\UploadFileRgForm; 12 use backend\models\UploadFileRgForm;
13 -use common\components\CustomVarDamp; 13 +use common\components\exceptions\RgParsingException;
14 use common\components\ModelArrayValidator; 14 use common\components\ModelArrayValidator;
15 use common\components\parsers\MailAttachmentsSaver; 15 use common\components\parsers\MailAttachmentsSaver;
16 use common\models\Margins; 16 use common\models\Margins;
@@ -21,9 +21,11 @@ use yii\web\UploadedFile; @@ -21,9 +21,11 @@ use yii\web\UploadedFile;
21 use yii\data\ArrayDataProvider; 21 use yii\data\ArrayDataProvider;
22 use common\components\parsers\DynamicFormHelper; 22 use common\components\parsers\DynamicFormHelper;
23 use common\components\CustomArrayHelper; 23 use common\components\CustomArrayHelper;
  24 +use backend\components\traits\ParserTrait;
24 25
25 class RgGrupController extends BaseController 26 class RgGrupController extends BaseController
26 { 27 {
  28 + use ParserTrait;
27 public $layout = "/column"; 29 public $layout = "/column";
28 30
29 /** 31 /**
@@ -66,25 +68,15 @@ class RgGrupController extends BaseController @@ -66,25 +68,15 @@ class RgGrupController extends BaseController
66 $model->file = UploadedFile::getInstance($model, 'file'); 68 $model->file = UploadedFile::getInstance($model, 'file');
67 // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) 69 // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся)
68 if ($model->validate()) { 70 if ($model->validate()) {
69 -  
70 $model->file_path = Yii::getAlias('@manual_upload') . '/' . $model->file->name; 71 $model->file_path = Yii::getAlias('@manual_upload') . '/' . $model->file->name;
71 $model->file->saveAs($model->file_path); 72 $model->file->saveAs($model->file_path);
72 -  
73 //запускаем парсинг 73 //запускаем парсинг
74 $data = $model->readFile(); 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 } else { 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 } else if (Yii::$app->getCache()->get('parser_data')) { 82 } else if (Yii::$app->getCache()->get('parser_data')) {
@@ -92,26 +84,8 @@ class RgGrupController extends BaseController @@ -92,26 +84,8 @@ class RgGrupController extends BaseController
92 $data = json_decode(Yii::$app->getCache()->get('parser_data'), true); 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 public function actionWrite() 91 public function actionWrite()
@@ -127,20 +101,15 @@ class RgGrupController extends BaseController @@ -127,20 +101,15 @@ class RgGrupController extends BaseController
127 } 101 }
128 // установим режим проверки обязательных полей 102 // установим режим проверки обязательных полей
129 $margin_model->setScenario('form_upload_validation'); 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 $arr = $model->toArray(); 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 array_walk($arr, function (&$val) { 114 array_walk($arr, function (&$val) {
146 $val = '!' . $val; 115 $val = '!' . $val;
@@ -151,63 +120,85 @@ class RgGrupController extends BaseController @@ -151,63 +120,85 @@ class RgGrupController extends BaseController
151 $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_'); 120 $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_');
152 121
153 // в первой строке у нас заголовки - уберем 122 // в первой строке у нас заголовки - уберем
154 - unset( $data[0] ); 123 + unset($data[0]);
155 // подготовим данные для записи в таблицу w_margins_groups 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 $margin_model->setScenario('default'); 128 $margin_model->setScenario('default');
183 - $arr_values = $model_validator->validate( $arr_values ); 129 + $data = $model_validator->validate($data);
184 $msg = $model_validator->getMassage(); 130 $msg = $model_validator->getMassage();
185 - $type_msg = $model_validator->hasError() ? 'warning' : 'success'; 131 + $type_msg = $model_validator->hasError() ? 'warning' : 'success';
186 $model_validator->close(); 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 return $this->render('index', ['model' => $configuration]); 145 return $this->render('index', ['model' => $configuration]);
201 146
202 } else { 147 } else {
203 // не прошла валидация формы загрузки файлов 148 // не прошла валидация формы загрузки файлов
204 $errors_str = "Ошибка валидации формы загрузки файлов. "; 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 // public function actionMail() 204 // public function actionMail()
backend/views/crossing-upload/index.php
@@ -14,9 +14,10 @@ use yii\helpers\ArrayHelper; @@ -14,9 +14,10 @@ use yii\helpers\ArrayHelper;
14 <?= $form->field($model, 'delete_prefix1')->checkbox() ?> 14 <?= $form->field($model, 'delete_prefix1')->checkbox() ?>
15 <?= $form->field($model, 'delete_prefix2')->checkbox() ?> 15 <?= $form->field($model, 'delete_prefix2')->checkbox() ?>
16 <?= $form->field($model, 'file')->fileInput()->label(false) ?> 16 <?= $form->field($model, 'file')->fileInput()->label(false) ?>
  17 + <?= Html::tag('p','допустимый формат - csv') ?>
17 18
18 <div class="form-group"> 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 </div> 21 </div>
21 22
22 <?php ActiveForm::end(); 23 <?php ActiveForm::end();
backend/views/parser/error.php
@@ -7,14 +7,21 @@ @@ -7,14 +7,21 @@
7 7
8 use yii\helpers\Html; 8 use yii\helpers\Html;
9 9
10 -$this->title = $name; 10 +$this->title = 'Ошибка';
11 ?> 11 ?>
12 <div class="site-error"> 12 <div class="site-error">
13 13
14 <h1><?= Html::encode($this->title) ?></h1> 14 <h1><?= Html::encode($this->title) ?></h1>
15 15
16 <div class="alert alert-danger"> 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 </div> 25 </div>
19 26
20 <p> 27 <p>
backend/views/rg-grup/index.php
@@ -4,7 +4,7 @@ use yii\helpers\Html; @@ -4,7 +4,7 @@ use yii\helpers\Html;
4 use backend\models\Importers; 4 use backend\models\Importers;
5 use yii\helpers\ArrayHelper; 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,6 +21,8 @@ $button_label = &#39;Прочитать&#39;;
21 <?= $form->field($model, 'file')->fileInput()->label(false) ?> 21 <?= $form->field($model, 'file')->fileInput()->label(false) ?>
22 <div class="form-group"> 22 <div class="form-group">
23 <?= Html::submitButton(Yii::t( 'app', $button_label ), ['class' => 'btn btn-primary']) ?> 23 <?= Html::submitButton(Yii::t( 'app', $button_label ), ['class' => 'btn btn-primary']) ?>
  24 + <?= Html::tag( 'p', 'допустимый формат xlsx') ?>
  25 +
24 </div> 26 </div>
25 27
26 <?php ActiveForm::end(); 28 <?php ActiveForm::end();
backend/views/rg-grup/results.php
@@ -27,6 +27,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -27,6 +27,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
27 </div> 27 </div>
28 28
29 <?php ActiveForm::end() ?> 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 </div> 32 </div>
33 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 17 \ No newline at end of file
common/models/MarginsGroups.php
@@ -31,8 +31,9 @@ class MarginsGroups extends \yii\db\ActiveRecord @@ -31,8 +31,9 @@ class MarginsGroups extends \yii\db\ActiveRecord
31 public function rules() 31 public function rules()
32 { 32 {
33 return [ 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 [['importer_id', 'margin_id'], 'integer' , 'on' => 'default'], 37 [['importer_id', 'margin_id'], 'integer' , 'on' => 'default'],
37 [['koef'], 'number' , 'on' => 'default'], 38 [['koef'], 'number' , 'on' => 'default'],
38 [['timestamp'], 'safe' , 'on' => 'default'], 39 [['timestamp'], 'safe' , 'on' => 'default'],
@@ -83,7 +84,6 @@ class MarginsGroups extends \yii\db\ActiveRecord @@ -83,7 +84,6 @@ class MarginsGroups extends \yii\db\ActiveRecord
83 //@todo - вынести все ручные инсерты в отдельный класс 84 //@todo - вынести все ручные инсерты в отдельный класс
84 public static function ManualInsertWithUpdate($data, $keys) 85 public static function ManualInsertWithUpdate($data, $keys)
85 { 86 {
86 - // \common\components\CustomVarDamp::dumpAndDie($data);  
87 $table_name = self::tableName(); 87 $table_name = self::tableName();
88 $keys_arr = array_keys($data[0]); 88 $keys_arr = array_keys($data[0]);
89 // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить 89 // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить
@@ -107,9 +107,9 @@ class MarginsGroups extends \yii\db\ActiveRecord @@ -107,9 +107,9 @@ class MarginsGroups extends \yii\db\ActiveRecord
107 107
108 // добавим фрагмент с апдейтом при дубляже 108 // добавим фрагмент с апдейтом при дубляже
109 $query = "{$query_insert} {$query_update}"; 109 $query = "{$query_insert} {$query_update}";
110 - // \common\components\CustomVarDamp::dumpAndDie($query);  
111 Yii::$app->db->createCommand($query)->execute(); 110 Yii::$app->db->createCommand($query)->execute();
112 111
113 } 112 }
  113 + return true;
114 } 114 }
115 } 115 }